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 Sun, May 6, 2018 17:51-0400 for FHIR v3.4.0
033
034import java.util.*;
035
036import org.hl7.fhir.utilities.Utilities;
037import org.hl7.fhir.r4.model.Enumerations.*;
038import ca.uhn.fhir.model.api.annotation.ResourceDef;
039import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
040import ca.uhn.fhir.model.api.annotation.Child;
041import ca.uhn.fhir.model.api.annotation.ChildOrder;
042import ca.uhn.fhir.model.api.annotation.Description;
043import ca.uhn.fhir.model.api.annotation.Block;
044import org.hl7.fhir.instance.model.api.*;
045import org.hl7.fhir.exceptions.FHIRException;
046/**
047 * Defines the characteristics of a message that can be shared between systems, including the type of event that initiates the message, the content to be transmitted and what response(s), if any, are permitted.
048 */
049@ResourceDef(name="MessageDefinition", profile="http://hl7.org/fhir/Profile/MessageDefinition")
050@ChildOrder(names={"url", "identifier", "version", "name", "title", "replaces", "status", "experimental", "date", "publisher", "contact", "description", "useContext", "jurisdiction", "purpose", "copyright", "base", "parent", "event[x]", "category", "focus", "responseRequired", "allowedResponse"})
051public class MessageDefinition extends MetadataResource {
052
053    public enum MessageSignificanceCategory {
054        /**
055         * The message represents/requests a change that should not be processed more than once; e.g., making a booking for an appointment.
056         */
057        CONSEQUENCE, 
058        /**
059         * The message represents a response to query for current information. Retrospective processing is wrong and/or wasteful.
060         */
061        CURRENCY, 
062        /**
063         * 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.
064         */
065        NOTIFICATION, 
066        /**
067         * added to help the parsers with the generic types
068         */
069        NULL;
070        public static MessageSignificanceCategory fromCode(String codeString) throws FHIRException {
071            if (codeString == null || "".equals(codeString))
072                return null;
073        if ("consequence".equals(codeString))
074          return CONSEQUENCE;
075        if ("currency".equals(codeString))
076          return CURRENCY;
077        if ("notification".equals(codeString))
078          return NOTIFICATION;
079        if (Configuration.isAcceptInvalidEnums())
080          return null;
081        else
082          throw new FHIRException("Unknown MessageSignificanceCategory code '"+codeString+"'");
083        }
084        public String toCode() {
085          switch (this) {
086            case CONSEQUENCE: return "consequence";
087            case CURRENCY: return "currency";
088            case NOTIFICATION: return "notification";
089            default: return "?";
090          }
091        }
092        public String getSystem() {
093          switch (this) {
094            case CONSEQUENCE: return "http://hl7.org/fhir/message-significance-category";
095            case CURRENCY: return "http://hl7.org/fhir/message-significance-category";
096            case NOTIFICATION: return "http://hl7.org/fhir/message-significance-category";
097            default: return "?";
098          }
099        }
100        public String getDefinition() {
101          switch (this) {
102            case CONSEQUENCE: return "The message represents/requests a change that should not be processed more than once; e.g., making a booking for an appointment.";
103            case CURRENCY: return "The message represents a response to query for current information. Retrospective processing is wrong and/or wasteful.";
104            case NOTIFICATION: 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.";
105            default: return "?";
106          }
107        }
108        public String getDisplay() {
109          switch (this) {
110            case CONSEQUENCE: return "Consequence";
111            case CURRENCY: return "Currency";
112            case NOTIFICATION: return "Notification";
113            default: return "?";
114          }
115        }
116    }
117
118  public static class MessageSignificanceCategoryEnumFactory implements EnumFactory<MessageSignificanceCategory> {
119    public MessageSignificanceCategory fromCode(String codeString) throws IllegalArgumentException {
120      if (codeString == null || "".equals(codeString))
121            if (codeString == null || "".equals(codeString))
122                return null;
123        if ("consequence".equals(codeString))
124          return MessageSignificanceCategory.CONSEQUENCE;
125        if ("currency".equals(codeString))
126          return MessageSignificanceCategory.CURRENCY;
127        if ("notification".equals(codeString))
128          return MessageSignificanceCategory.NOTIFICATION;
129        throw new IllegalArgumentException("Unknown MessageSignificanceCategory code '"+codeString+"'");
130        }
131        public Enumeration<MessageSignificanceCategory> fromType(Base code) throws FHIRException {
132          if (code == null)
133            return null;
134          if (code.isEmpty())
135            return new Enumeration<MessageSignificanceCategory>(this);
136          String codeString = ((PrimitiveType) code).asStringValue();
137          if (codeString == null || "".equals(codeString))
138            return null;
139        if ("consequence".equals(codeString))
140          return new Enumeration<MessageSignificanceCategory>(this, MessageSignificanceCategory.CONSEQUENCE);
141        if ("currency".equals(codeString))
142          return new Enumeration<MessageSignificanceCategory>(this, MessageSignificanceCategory.CURRENCY);
143        if ("notification".equals(codeString))
144          return new Enumeration<MessageSignificanceCategory>(this, MessageSignificanceCategory.NOTIFICATION);
145        throw new FHIRException("Unknown MessageSignificanceCategory code '"+codeString+"'");
146        }
147    public String toCode(MessageSignificanceCategory code) {
148      if (code == MessageSignificanceCategory.CONSEQUENCE)
149        return "consequence";
150      if (code == MessageSignificanceCategory.CURRENCY)
151        return "currency";
152      if (code == MessageSignificanceCategory.NOTIFICATION)
153        return "notification";
154      return "?";
155      }
156    public String toSystem(MessageSignificanceCategory code) {
157      return code.getSystem();
158      }
159    }
160
161    public enum MessageheaderResponseRequest {
162        /**
163         * initiator expects a response for this message
164         */
165        ALWAYS, 
166        /**
167         * initiator expects a response only if in error
168         */
169        ONERROR, 
170        /**
171         * initiator does not expect a response
172         */
173        NEVER, 
174        /**
175         * initiator expects a response only if successful
176         */
177        ONSUCCESS, 
178        /**
179         * added to help the parsers with the generic types
180         */
181        NULL;
182        public static MessageheaderResponseRequest fromCode(String codeString) throws FHIRException {
183            if (codeString == null || "".equals(codeString))
184                return null;
185        if ("always".equals(codeString))
186          return ALWAYS;
187        if ("on-error".equals(codeString))
188          return ONERROR;
189        if ("never".equals(codeString))
190          return NEVER;
191        if ("on-success".equals(codeString))
192          return ONSUCCESS;
193        if (Configuration.isAcceptInvalidEnums())
194          return null;
195        else
196          throw new FHIRException("Unknown MessageheaderResponseRequest code '"+codeString+"'");
197        }
198        public String toCode() {
199          switch (this) {
200            case ALWAYS: return "always";
201            case ONERROR: return "on-error";
202            case NEVER: return "never";
203            case ONSUCCESS: return "on-success";
204            default: return "?";
205          }
206        }
207        public String getSystem() {
208          switch (this) {
209            case ALWAYS: return "http://hl7.org/fhir/messageheader-response-request";
210            case ONERROR: return "http://hl7.org/fhir/messageheader-response-request";
211            case NEVER: return "http://hl7.org/fhir/messageheader-response-request";
212            case ONSUCCESS: return "http://hl7.org/fhir/messageheader-response-request";
213            default: return "?";
214          }
215        }
216        public String getDefinition() {
217          switch (this) {
218            case ALWAYS: return "initiator expects a response for this message";
219            case ONERROR: return "initiator expects a response only if in error";
220            case NEVER: return "initiator does not expect a response";
221            case ONSUCCESS: return "initiator expects a response only if successful";
222            default: return "?";
223          }
224        }
225        public String getDisplay() {
226          switch (this) {
227            case ALWAYS: return "Always";
228            case ONERROR: return "Error/reject conditions only";
229            case NEVER: return "Never";
230            case ONSUCCESS: return "Successful completion only";
231            default: return "?";
232          }
233        }
234    }
235
236  public static class MessageheaderResponseRequestEnumFactory implements EnumFactory<MessageheaderResponseRequest> {
237    public MessageheaderResponseRequest fromCode(String codeString) throws IllegalArgumentException {
238      if (codeString == null || "".equals(codeString))
239            if (codeString == null || "".equals(codeString))
240                return null;
241        if ("always".equals(codeString))
242          return MessageheaderResponseRequest.ALWAYS;
243        if ("on-error".equals(codeString))
244          return MessageheaderResponseRequest.ONERROR;
245        if ("never".equals(codeString))
246          return MessageheaderResponseRequest.NEVER;
247        if ("on-success".equals(codeString))
248          return MessageheaderResponseRequest.ONSUCCESS;
249        throw new IllegalArgumentException("Unknown MessageheaderResponseRequest code '"+codeString+"'");
250        }
251        public Enumeration<MessageheaderResponseRequest> fromType(Base code) throws FHIRException {
252          if (code == null)
253            return null;
254          if (code.isEmpty())
255            return new Enumeration<MessageheaderResponseRequest>(this);
256          String codeString = ((PrimitiveType) code).asStringValue();
257          if (codeString == null || "".equals(codeString))
258            return null;
259        if ("always".equals(codeString))
260          return new Enumeration<MessageheaderResponseRequest>(this, MessageheaderResponseRequest.ALWAYS);
261        if ("on-error".equals(codeString))
262          return new Enumeration<MessageheaderResponseRequest>(this, MessageheaderResponseRequest.ONERROR);
263        if ("never".equals(codeString))
264          return new Enumeration<MessageheaderResponseRequest>(this, MessageheaderResponseRequest.NEVER);
265        if ("on-success".equals(codeString))
266          return new Enumeration<MessageheaderResponseRequest>(this, MessageheaderResponseRequest.ONSUCCESS);
267        throw new FHIRException("Unknown MessageheaderResponseRequest code '"+codeString+"'");
268        }
269    public String toCode(MessageheaderResponseRequest code) {
270      if (code == MessageheaderResponseRequest.ALWAYS)
271        return "always";
272      if (code == MessageheaderResponseRequest.ONERROR)
273        return "on-error";
274      if (code == MessageheaderResponseRequest.NEVER)
275        return "never";
276      if (code == MessageheaderResponseRequest.ONSUCCESS)
277        return "on-success";
278      return "?";
279      }
280    public String toSystem(MessageheaderResponseRequest code) {
281      return code.getSystem();
282      }
283    }
284
285    @Block()
286    public static class MessageDefinitionFocusComponent extends BackboneElement implements IBaseBackboneElement {
287        /**
288         * The kind of resource that must be the focus for this message.
289         */
290        @Child(name = "code", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=true)
291        @Description(shortDefinition="Type of resource", formalDefinition="The kind of resource that must be the focus for this message." )
292        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/resource-types")
293        protected CodeType code;
294
295        /**
296         * A profile that reflects constraints for the focal resource (and potentially for related resources).
297         */
298        @Child(name = "profile", type = {CanonicalType.class}, order=2, min=0, max=1, modifier=false, summary=false)
299        @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)." )
300        protected CanonicalType profile;
301
302        /**
303         * 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.
304         */
305        @Child(name = "min", type = {UnsignedIntType.class}, order=3, min=1, max=1, modifier=false, summary=true)
306        @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." )
307        protected UnsignedIntType min;
308
309        /**
310         * 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.
311         */
312        @Child(name = "max", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=false)
313        @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." )
314        protected StringType max;
315
316        private static final long serialVersionUID = -68504836L;
317
318    /**
319     * Constructor
320     */
321      public MessageDefinitionFocusComponent() {
322        super();
323      }
324
325    /**
326     * Constructor
327     */
328      public MessageDefinitionFocusComponent(CodeType code, UnsignedIntType min) {
329        super();
330        this.code = code;
331        this.min = min;
332      }
333
334        /**
335         * @return {@link #code} (The kind of resource that must be the focus for this message.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
336         */
337        public CodeType getCodeElement() { 
338          if (this.code == null)
339            if (Configuration.errorOnAutoCreate())
340              throw new Error("Attempt to auto-create MessageDefinitionFocusComponent.code");
341            else if (Configuration.doAutoCreate())
342              this.code = new CodeType(); // bb
343          return this.code;
344        }
345
346        public boolean hasCodeElement() { 
347          return this.code != null && !this.code.isEmpty();
348        }
349
350        public boolean hasCode() { 
351          return this.code != null && !this.code.isEmpty();
352        }
353
354        /**
355         * @param value {@link #code} (The kind of resource that must be the focus for this message.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
356         */
357        public MessageDefinitionFocusComponent setCodeElement(CodeType value) { 
358          this.code = value;
359          return this;
360        }
361
362        /**
363         * @return The kind of resource that must be the focus for this message.
364         */
365        public String getCode() { 
366          return this.code == null ? null : this.code.getValue();
367        }
368
369        /**
370         * @param value The kind of resource that must be the focus for this message.
371         */
372        public MessageDefinitionFocusComponent setCode(String value) { 
373            if (this.code == null)
374              this.code = new CodeType();
375            this.code.setValue(value);
376          return this;
377        }
378
379        /**
380         * @return {@link #profile} (A profile that reflects constraints for the focal resource (and potentially for related resources).). This is the underlying object with id, value and extensions. The accessor "getProfile" gives direct access to the value
381         */
382        public CanonicalType getProfileElement() { 
383          if (this.profile == null)
384            if (Configuration.errorOnAutoCreate())
385              throw new Error("Attempt to auto-create MessageDefinitionFocusComponent.profile");
386            else if (Configuration.doAutoCreate())
387              this.profile = new CanonicalType(); // bb
388          return this.profile;
389        }
390
391        public boolean hasProfileElement() { 
392          return this.profile != null && !this.profile.isEmpty();
393        }
394
395        public boolean hasProfile() { 
396          return this.profile != null && !this.profile.isEmpty();
397        }
398
399        /**
400         * @param value {@link #profile} (A profile that reflects constraints for the focal resource (and potentially for related resources).). This is the underlying object with id, value and extensions. The accessor "getProfile" gives direct access to the value
401         */
402        public MessageDefinitionFocusComponent setProfileElement(CanonicalType value) { 
403          this.profile = value;
404          return this;
405        }
406
407        /**
408         * @return A profile that reflects constraints for the focal resource (and potentially for related resources).
409         */
410        public String getProfile() { 
411          return this.profile == null ? null : this.profile.getValue();
412        }
413
414        /**
415         * @param value A profile that reflects constraints for the focal resource (and potentially for related resources).
416         */
417        public MessageDefinitionFocusComponent setProfile(String value) { 
418          if (Utilities.noString(value))
419            this.profile = null;
420          else {
421            if (this.profile == null)
422              this.profile = new CanonicalType();
423            this.profile.setValue(value);
424          }
425          return this;
426        }
427
428        /**
429         * @return {@link #min} (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.). This is the underlying object with id, value and extensions. The accessor "getMin" gives direct access to the value
430         */
431        public UnsignedIntType getMinElement() { 
432          if (this.min == null)
433            if (Configuration.errorOnAutoCreate())
434              throw new Error("Attempt to auto-create MessageDefinitionFocusComponent.min");
435            else if (Configuration.doAutoCreate())
436              this.min = new UnsignedIntType(); // bb
437          return this.min;
438        }
439
440        public boolean hasMinElement() { 
441          return this.min != null && !this.min.isEmpty();
442        }
443
444        public boolean hasMin() { 
445          return this.min != null && !this.min.isEmpty();
446        }
447
448        /**
449         * @param value {@link #min} (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.). This is the underlying object with id, value and extensions. The accessor "getMin" gives direct access to the value
450         */
451        public MessageDefinitionFocusComponent setMinElement(UnsignedIntType value) { 
452          this.min = value;
453          return this;
454        }
455
456        /**
457         * @return 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.
458         */
459        public int getMin() { 
460          return this.min == null || this.min.isEmpty() ? 0 : this.min.getValue();
461        }
462
463        /**
464         * @param value 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.
465         */
466        public MessageDefinitionFocusComponent setMin(int value) { 
467            if (this.min == null)
468              this.min = new UnsignedIntType();
469            this.min.setValue(value);
470          return this;
471        }
472
473        /**
474         * @return {@link #max} (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.). This is the underlying object with id, value and extensions. The accessor "getMax" gives direct access to the value
475         */
476        public StringType getMaxElement() { 
477          if (this.max == null)
478            if (Configuration.errorOnAutoCreate())
479              throw new Error("Attempt to auto-create MessageDefinitionFocusComponent.max");
480            else if (Configuration.doAutoCreate())
481              this.max = new StringType(); // bb
482          return this.max;
483        }
484
485        public boolean hasMaxElement() { 
486          return this.max != null && !this.max.isEmpty();
487        }
488
489        public boolean hasMax() { 
490          return this.max != null && !this.max.isEmpty();
491        }
492
493        /**
494         * @param value {@link #max} (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.). This is the underlying object with id, value and extensions. The accessor "getMax" gives direct access to the value
495         */
496        public MessageDefinitionFocusComponent setMaxElement(StringType value) { 
497          this.max = value;
498          return this;
499        }
500
501        /**
502         * @return 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.
503         */
504        public String getMax() { 
505          return this.max == null ? null : this.max.getValue();
506        }
507
508        /**
509         * @param value 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.
510         */
511        public MessageDefinitionFocusComponent setMax(String value) { 
512          if (Utilities.noString(value))
513            this.max = null;
514          else {
515            if (this.max == null)
516              this.max = new StringType();
517            this.max.setValue(value);
518          }
519          return this;
520        }
521
522        protected void listChildren(List<Property> children) {
523          super.listChildren(children);
524          children.add(new Property("code", "code", "The kind of resource that must be the focus for this message.", 0, 1, code));
525          children.add(new Property("profile", "canonical(StructureDefinition)", "A profile that reflects constraints for the focal resource (and potentially for related resources).", 0, 1, profile));
526          children.add(new Property("min", "unsignedInt", "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.", 0, 1, min));
527          children.add(new Property("max", "string", "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.", 0, 1, max));
528        }
529
530        @Override
531        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
532          switch (_hash) {
533          case 3059181: /*code*/  return new Property("code", "code", "The kind of resource that must be the focus for this message.", 0, 1, code);
534          case -309425751: /*profile*/  return new Property("profile", "canonical(StructureDefinition)", "A profile that reflects constraints for the focal resource (and potentially for related resources).", 0, 1, profile);
535          case 108114: /*min*/  return new Property("min", "unsignedInt", "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.", 0, 1, min);
536          case 107876: /*max*/  return new Property("max", "string", "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.", 0, 1, max);
537          default: return super.getNamedProperty(_hash, _name, _checkValid);
538          }
539
540        }
541
542      @Override
543      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
544        switch (hash) {
545        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeType
546        case -309425751: /*profile*/ return this.profile == null ? new Base[0] : new Base[] {this.profile}; // CanonicalType
547        case 108114: /*min*/ return this.min == null ? new Base[0] : new Base[] {this.min}; // UnsignedIntType
548        case 107876: /*max*/ return this.max == null ? new Base[0] : new Base[] {this.max}; // StringType
549        default: return super.getProperty(hash, name, checkValid);
550        }
551
552      }
553
554      @Override
555      public Base setProperty(int hash, String name, Base value) throws FHIRException {
556        switch (hash) {
557        case 3059181: // code
558          this.code = castToCode(value); // CodeType
559          return value;
560        case -309425751: // profile
561          this.profile = castToCanonical(value); // CanonicalType
562          return value;
563        case 108114: // min
564          this.min = castToUnsignedInt(value); // UnsignedIntType
565          return value;
566        case 107876: // max
567          this.max = castToString(value); // StringType
568          return value;
569        default: return super.setProperty(hash, name, value);
570        }
571
572      }
573
574      @Override
575      public Base setProperty(String name, Base value) throws FHIRException {
576        if (name.equals("code")) {
577          this.code = castToCode(value); // CodeType
578        } else if (name.equals("profile")) {
579          this.profile = castToCanonical(value); // CanonicalType
580        } else if (name.equals("min")) {
581          this.min = castToUnsignedInt(value); // UnsignedIntType
582        } else if (name.equals("max")) {
583          this.max = castToString(value); // StringType
584        } else
585          return super.setProperty(name, value);
586        return value;
587      }
588
589      @Override
590      public Base makeProperty(int hash, String name) throws FHIRException {
591        switch (hash) {
592        case 3059181:  return getCodeElement();
593        case -309425751:  return getProfileElement();
594        case 108114:  return getMinElement();
595        case 107876:  return getMaxElement();
596        default: return super.makeProperty(hash, name);
597        }
598
599      }
600
601      @Override
602      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
603        switch (hash) {
604        case 3059181: /*code*/ return new String[] {"code"};
605        case -309425751: /*profile*/ return new String[] {"canonical"};
606        case 108114: /*min*/ return new String[] {"unsignedInt"};
607        case 107876: /*max*/ return new String[] {"string"};
608        default: return super.getTypesForProperty(hash, name);
609        }
610
611      }
612
613      @Override
614      public Base addChild(String name) throws FHIRException {
615        if (name.equals("code")) {
616          throw new FHIRException("Cannot call addChild on a primitive type MessageDefinition.code");
617        }
618        else if (name.equals("profile")) {
619          throw new FHIRException("Cannot call addChild on a primitive type MessageDefinition.profile");
620        }
621        else if (name.equals("min")) {
622          throw new FHIRException("Cannot call addChild on a primitive type MessageDefinition.min");
623        }
624        else if (name.equals("max")) {
625          throw new FHIRException("Cannot call addChild on a primitive type MessageDefinition.max");
626        }
627        else
628          return super.addChild(name);
629      }
630
631      public MessageDefinitionFocusComponent copy() {
632        MessageDefinitionFocusComponent dst = new MessageDefinitionFocusComponent();
633        copyValues(dst);
634        dst.code = code == null ? null : code.copy();
635        dst.profile = profile == null ? null : profile.copy();
636        dst.min = min == null ? null : min.copy();
637        dst.max = max == null ? null : max.copy();
638        return dst;
639      }
640
641      @Override
642      public boolean equalsDeep(Base other_) {
643        if (!super.equalsDeep(other_))
644          return false;
645        if (!(other_ instanceof MessageDefinitionFocusComponent))
646          return false;
647        MessageDefinitionFocusComponent o = (MessageDefinitionFocusComponent) other_;
648        return compareDeep(code, o.code, true) && compareDeep(profile, o.profile, true) && compareDeep(min, o.min, true)
649           && compareDeep(max, o.max, true);
650      }
651
652      @Override
653      public boolean equalsShallow(Base other_) {
654        if (!super.equalsShallow(other_))
655          return false;
656        if (!(other_ instanceof MessageDefinitionFocusComponent))
657          return false;
658        MessageDefinitionFocusComponent o = (MessageDefinitionFocusComponent) other_;
659        return compareValues(code, o.code, true) && compareValues(min, o.min, true) && compareValues(max, o.max, true)
660          ;
661      }
662
663      public boolean isEmpty() {
664        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, profile, min, max
665          );
666      }
667
668  public String fhirType() {
669    return "MessageDefinition.focus";
670
671  }
672
673  }
674
675    @Block()
676    public static class MessageDefinitionAllowedResponseComponent extends BackboneElement implements IBaseBackboneElement {
677        /**
678         * A reference to the message definition that must be adhered to by this supported response.
679         */
680        @Child(name = "message", type = {CanonicalType.class}, order=1, min=1, max=1, modifier=false, summary=false)
681        @Description(shortDefinition="Reference to allowed message definition response", formalDefinition="A reference to the message definition that must be adhered to by this supported response." )
682        protected CanonicalType message;
683
684        /**
685         * Provides a description of the circumstances in which this response should be used (as opposed to one of the alternative responses).
686         */
687        @Child(name = "situation", type = {MarkdownType.class}, order=2, min=0, max=1, modifier=false, summary=false)
688        @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)." )
689        protected MarkdownType situation;
690
691        private static final long serialVersionUID = -1943810550L;
692
693    /**
694     * Constructor
695     */
696      public MessageDefinitionAllowedResponseComponent() {
697        super();
698      }
699
700    /**
701     * Constructor
702     */
703      public MessageDefinitionAllowedResponseComponent(CanonicalType message) {
704        super();
705        this.message = message;
706      }
707
708        /**
709         * @return {@link #message} (A reference to the message definition that must be adhered to by this supported response.). This is the underlying object with id, value and extensions. The accessor "getMessage" gives direct access to the value
710         */
711        public CanonicalType getMessageElement() { 
712          if (this.message == null)
713            if (Configuration.errorOnAutoCreate())
714              throw new Error("Attempt to auto-create MessageDefinitionAllowedResponseComponent.message");
715            else if (Configuration.doAutoCreate())
716              this.message = new CanonicalType(); // bb
717          return this.message;
718        }
719
720        public boolean hasMessageElement() { 
721          return this.message != null && !this.message.isEmpty();
722        }
723
724        public boolean hasMessage() { 
725          return this.message != null && !this.message.isEmpty();
726        }
727
728        /**
729         * @param value {@link #message} (A reference to the message definition that must be adhered to by this supported response.). This is the underlying object with id, value and extensions. The accessor "getMessage" gives direct access to the value
730         */
731        public MessageDefinitionAllowedResponseComponent setMessageElement(CanonicalType value) { 
732          this.message = value;
733          return this;
734        }
735
736        /**
737         * @return A reference to the message definition that must be adhered to by this supported response.
738         */
739        public String getMessage() { 
740          return this.message == null ? null : this.message.getValue();
741        }
742
743        /**
744         * @param value A reference to the message definition that must be adhered to by this supported response.
745         */
746        public MessageDefinitionAllowedResponseComponent setMessage(String value) { 
747            if (this.message == null)
748              this.message = new CanonicalType();
749            this.message.setValue(value);
750          return this;
751        }
752
753        /**
754         * @return {@link #situation} (Provides a description of the circumstances in which this response should be used (as opposed to one of the alternative responses).). This is the underlying object with id, value and extensions. The accessor "getSituation" gives direct access to the value
755         */
756        public MarkdownType getSituationElement() { 
757          if (this.situation == null)
758            if (Configuration.errorOnAutoCreate())
759              throw new Error("Attempt to auto-create MessageDefinitionAllowedResponseComponent.situation");
760            else if (Configuration.doAutoCreate())
761              this.situation = new MarkdownType(); // bb
762          return this.situation;
763        }
764
765        public boolean hasSituationElement() { 
766          return this.situation != null && !this.situation.isEmpty();
767        }
768
769        public boolean hasSituation() { 
770          return this.situation != null && !this.situation.isEmpty();
771        }
772
773        /**
774         * @param value {@link #situation} (Provides a description of the circumstances in which this response should be used (as opposed to one of the alternative responses).). This is the underlying object with id, value and extensions. The accessor "getSituation" gives direct access to the value
775         */
776        public MessageDefinitionAllowedResponseComponent setSituationElement(MarkdownType value) { 
777          this.situation = value;
778          return this;
779        }
780
781        /**
782         * @return Provides a description of the circumstances in which this response should be used (as opposed to one of the alternative responses).
783         */
784        public String getSituation() { 
785          return this.situation == null ? null : this.situation.getValue();
786        }
787
788        /**
789         * @param value Provides a description of the circumstances in which this response should be used (as opposed to one of the alternative responses).
790         */
791        public MessageDefinitionAllowedResponseComponent setSituation(String value) { 
792          if (value == null)
793            this.situation = null;
794          else {
795            if (this.situation == null)
796              this.situation = new MarkdownType();
797            this.situation.setValue(value);
798          }
799          return this;
800        }
801
802        protected void listChildren(List<Property> children) {
803          super.listChildren(children);
804          children.add(new Property("message", "canonical(MessageDefinition)", "A reference to the message definition that must be adhered to by this supported response.", 0, 1, message));
805          children.add(new Property("situation", "markdown", "Provides a description of the circumstances in which this response should be used (as opposed to one of the alternative responses).", 0, 1, situation));
806        }
807
808        @Override
809        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
810          switch (_hash) {
811          case 954925063: /*message*/  return new Property("message", "canonical(MessageDefinition)", "A reference to the message definition that must be adhered to by this supported response.", 0, 1, message);
812          case -73377282: /*situation*/  return new Property("situation", "markdown", "Provides a description of the circumstances in which this response should be used (as opposed to one of the alternative responses).", 0, 1, situation);
813          default: return super.getNamedProperty(_hash, _name, _checkValid);
814          }
815
816        }
817
818      @Override
819      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
820        switch (hash) {
821        case 954925063: /*message*/ return this.message == null ? new Base[0] : new Base[] {this.message}; // CanonicalType
822        case -73377282: /*situation*/ return this.situation == null ? new Base[0] : new Base[] {this.situation}; // MarkdownType
823        default: return super.getProperty(hash, name, checkValid);
824        }
825
826      }
827
828      @Override
829      public Base setProperty(int hash, String name, Base value) throws FHIRException {
830        switch (hash) {
831        case 954925063: // message
832          this.message = castToCanonical(value); // CanonicalType
833          return value;
834        case -73377282: // situation
835          this.situation = castToMarkdown(value); // MarkdownType
836          return value;
837        default: return super.setProperty(hash, name, value);
838        }
839
840      }
841
842      @Override
843      public Base setProperty(String name, Base value) throws FHIRException {
844        if (name.equals("message")) {
845          this.message = castToCanonical(value); // CanonicalType
846        } else if (name.equals("situation")) {
847          this.situation = castToMarkdown(value); // MarkdownType
848        } else
849          return super.setProperty(name, value);
850        return value;
851      }
852
853      @Override
854      public Base makeProperty(int hash, String name) throws FHIRException {
855        switch (hash) {
856        case 954925063:  return getMessageElement();
857        case -73377282:  return getSituationElement();
858        default: return super.makeProperty(hash, name);
859        }
860
861      }
862
863      @Override
864      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
865        switch (hash) {
866        case 954925063: /*message*/ return new String[] {"canonical"};
867        case -73377282: /*situation*/ return new String[] {"markdown"};
868        default: return super.getTypesForProperty(hash, name);
869        }
870
871      }
872
873      @Override
874      public Base addChild(String name) throws FHIRException {
875        if (name.equals("message")) {
876          throw new FHIRException("Cannot call addChild on a primitive type MessageDefinition.message");
877        }
878        else if (name.equals("situation")) {
879          throw new FHIRException("Cannot call addChild on a primitive type MessageDefinition.situation");
880        }
881        else
882          return super.addChild(name);
883      }
884
885      public MessageDefinitionAllowedResponseComponent copy() {
886        MessageDefinitionAllowedResponseComponent dst = new MessageDefinitionAllowedResponseComponent();
887        copyValues(dst);
888        dst.message = message == null ? null : message.copy();
889        dst.situation = situation == null ? null : situation.copy();
890        return dst;
891      }
892
893      @Override
894      public boolean equalsDeep(Base other_) {
895        if (!super.equalsDeep(other_))
896          return false;
897        if (!(other_ instanceof MessageDefinitionAllowedResponseComponent))
898          return false;
899        MessageDefinitionAllowedResponseComponent o = (MessageDefinitionAllowedResponseComponent) other_;
900        return compareDeep(message, o.message, true) && compareDeep(situation, o.situation, true);
901      }
902
903      @Override
904      public boolean equalsShallow(Base other_) {
905        if (!super.equalsShallow(other_))
906          return false;
907        if (!(other_ instanceof MessageDefinitionAllowedResponseComponent))
908          return false;
909        MessageDefinitionAllowedResponseComponent o = (MessageDefinitionAllowedResponseComponent) other_;
910        return compareValues(situation, o.situation, true);
911      }
912
913      public boolean isEmpty() {
914        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(message, situation);
915      }
916
917  public String fhirType() {
918    return "MessageDefinition.allowedResponse";
919
920  }
921
922  }
923
924    /**
925     * 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.
926     */
927    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=1, modifier=false, summary=true)
928    @Description(shortDefinition="Additional identifier for the message definition", 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." )
929    protected Identifier identifier;
930
931    /**
932     * A MessageDefinition that is superseded by this definition.
933     */
934    @Child(name = "replaces", type = {CanonicalType.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
935    @Description(shortDefinition="Takes the place of", formalDefinition="A MessageDefinition that is superseded by this definition." )
936    protected List<CanonicalType> replaces;
937
938    /**
939     * Explanation of why this message definition is needed and why it has been designed as it has.
940     */
941    @Child(name = "purpose", type = {MarkdownType.class}, order=2, min=0, max=1, modifier=false, summary=true)
942    @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." )
943    protected MarkdownType purpose;
944
945    /**
946     * 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.
947     */
948    @Child(name = "copyright", type = {MarkdownType.class}, order=3, min=0, max=1, modifier=false, summary=false)
949    @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." )
950    protected MarkdownType copyright;
951
952    /**
953     * The MessageDefinition that is the basis for the contents of this resource.
954     */
955    @Child(name = "base", type = {CanonicalType.class}, order=4, min=0, max=1, modifier=false, summary=true)
956    @Description(shortDefinition="Definition this one is based on", formalDefinition="The MessageDefinition that is the basis for the contents of this resource." )
957    protected CanonicalType base;
958
959    /**
960     * Identifies a protocol or workflow that this MessageDefinition represents a step in.
961     */
962    @Child(name = "parent", type = {CanonicalType.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
963    @Description(shortDefinition="Protocol/workflow this is part of", formalDefinition="Identifies a protocol or workflow that this MessageDefinition represents a step in." )
964    protected List<CanonicalType> parent;
965
966    /**
967     * Event code or link to the EventDefinition.
968     */
969    @Child(name = "event", type = {Coding.class, UriType.class}, order=6, min=1, max=1, modifier=false, summary=true)
970    @Description(shortDefinition="Event code  or link to the EventDefinition", formalDefinition="Event code or link to the EventDefinition." )
971    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/message-events")
972    protected Type event;
973
974    /**
975     * The impact of the content of the message.
976     */
977    @Child(name = "category", type = {CodeType.class}, order=7, min=0, max=1, modifier=false, summary=true)
978    @Description(shortDefinition="Consequence | Currency | Notification", formalDefinition="The impact of the content of the message." )
979    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/message-significance-category")
980    protected Enumeration<MessageSignificanceCategory> category;
981
982    /**
983     * 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.
984     */
985    @Child(name = "focus", type = {}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
986    @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." )
987    protected List<MessageDefinitionFocusComponent> focus;
988
989    /**
990     * Declare at a message definition level whether a response is required or only upon error or success, or never.
991     */
992    @Child(name = "responseRequired", type = {CodeType.class}, order=9, min=0, max=1, modifier=false, summary=false)
993    @Description(shortDefinition="Response circumstances", formalDefinition="Declare at a message definition level whether a response is required or only upon error or success, or never." )
994    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/messageheader-response-request")
995    protected Enumeration<MessageheaderResponseRequest> responseRequired;
996
997    /**
998     * Indicates what types of messages may be sent as an application-level response to this message.
999     */
1000    @Child(name = "allowedResponse", type = {}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1001    @Description(shortDefinition="Responses to this message", formalDefinition="Indicates what types of messages may be sent as an application-level response to this message." )
1002    protected List<MessageDefinitionAllowedResponseComponent> allowedResponse;
1003
1004    private static final long serialVersionUID = -74603085L;
1005
1006  /**
1007   * Constructor
1008   */
1009    public MessageDefinition() {
1010      super();
1011    }
1012
1013  /**
1014   * Constructor
1015   */
1016    public MessageDefinition(Enumeration<PublicationStatus> status, DateTimeType date, Type event) {
1017      super();
1018      this.status = status;
1019      this.date = date;
1020      this.event = event;
1021    }
1022
1023    /**
1024     * @return {@link #url} (An absolute URI that is used to identify this message definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which this message definition is (or will be) published.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
1025     */
1026    public UriType getUrlElement() { 
1027      if (this.url == null)
1028        if (Configuration.errorOnAutoCreate())
1029          throw new Error("Attempt to auto-create MessageDefinition.url");
1030        else if (Configuration.doAutoCreate())
1031          this.url = new UriType(); // bb
1032      return this.url;
1033    }
1034
1035    public boolean hasUrlElement() { 
1036      return this.url != null && !this.url.isEmpty();
1037    }
1038
1039    public boolean hasUrl() { 
1040      return this.url != null && !this.url.isEmpty();
1041    }
1042
1043    /**
1044     * @param value {@link #url} (An absolute URI that is used to identify this message definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which this message definition is (or will be) published.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
1045     */
1046    public MessageDefinition setUrlElement(UriType value) { 
1047      this.url = value;
1048      return this;
1049    }
1050
1051    /**
1052     * @return An absolute URI that is used to identify this message definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which this message definition is (or will be) published.
1053     */
1054    public String getUrl() { 
1055      return this.url == null ? null : this.url.getValue();
1056    }
1057
1058    /**
1059     * @param value An absolute URI that is used to identify this message definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which this message definition is (or will be) published.
1060     */
1061    public MessageDefinition setUrl(String value) { 
1062      if (Utilities.noString(value))
1063        this.url = null;
1064      else {
1065        if (this.url == null)
1066          this.url = new UriType();
1067        this.url.setValue(value);
1068      }
1069      return this;
1070    }
1071
1072    /**
1073     * @return {@link #identifier} (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.)
1074     */
1075    public Identifier getIdentifier() { 
1076      if (this.identifier == null)
1077        if (Configuration.errorOnAutoCreate())
1078          throw new Error("Attempt to auto-create MessageDefinition.identifier");
1079        else if (Configuration.doAutoCreate())
1080          this.identifier = new Identifier(); // cc
1081      return this.identifier;
1082    }
1083
1084    public boolean hasIdentifier() { 
1085      return this.identifier != null && !this.identifier.isEmpty();
1086    }
1087
1088    /**
1089     * @param value {@link #identifier} (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.)
1090     */
1091    public MessageDefinition setIdentifier(Identifier value) { 
1092      this.identifier = value;
1093      return this;
1094    }
1095
1096    /**
1097     * @return {@link #version} (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.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
1098     */
1099    public StringType getVersionElement() { 
1100      if (this.version == null)
1101        if (Configuration.errorOnAutoCreate())
1102          throw new Error("Attempt to auto-create MessageDefinition.version");
1103        else if (Configuration.doAutoCreate())
1104          this.version = new StringType(); // bb
1105      return this.version;
1106    }
1107
1108    public boolean hasVersionElement() { 
1109      return this.version != null && !this.version.isEmpty();
1110    }
1111
1112    public boolean hasVersion() { 
1113      return this.version != null && !this.version.isEmpty();
1114    }
1115
1116    /**
1117     * @param value {@link #version} (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.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
1118     */
1119    public MessageDefinition setVersionElement(StringType value) { 
1120      this.version = value;
1121      return this;
1122    }
1123
1124    /**
1125     * @return 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.
1126     */
1127    public String getVersion() { 
1128      return this.version == null ? null : this.version.getValue();
1129    }
1130
1131    /**
1132     * @param value 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.
1133     */
1134    public MessageDefinition setVersion(String value) { 
1135      if (Utilities.noString(value))
1136        this.version = null;
1137      else {
1138        if (this.version == null)
1139          this.version = new StringType();
1140        this.version.setValue(value);
1141      }
1142      return this;
1143    }
1144
1145    /**
1146     * @return {@link #name} (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.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
1147     */
1148    public StringType getNameElement() { 
1149      if (this.name == null)
1150        if (Configuration.errorOnAutoCreate())
1151          throw new Error("Attempt to auto-create MessageDefinition.name");
1152        else if (Configuration.doAutoCreate())
1153          this.name = new StringType(); // bb
1154      return this.name;
1155    }
1156
1157    public boolean hasNameElement() { 
1158      return this.name != null && !this.name.isEmpty();
1159    }
1160
1161    public boolean hasName() { 
1162      return this.name != null && !this.name.isEmpty();
1163    }
1164
1165    /**
1166     * @param value {@link #name} (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.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
1167     */
1168    public MessageDefinition setNameElement(StringType value) { 
1169      this.name = value;
1170      return this;
1171    }
1172
1173    /**
1174     * @return 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.
1175     */
1176    public String getName() { 
1177      return this.name == null ? null : this.name.getValue();
1178    }
1179
1180    /**
1181     * @param value 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.
1182     */
1183    public MessageDefinition setName(String value) { 
1184      if (Utilities.noString(value))
1185        this.name = null;
1186      else {
1187        if (this.name == null)
1188          this.name = new StringType();
1189        this.name.setValue(value);
1190      }
1191      return this;
1192    }
1193
1194    /**
1195     * @return {@link #title} (A short, descriptive, user-friendly title for the message definition.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
1196     */
1197    public StringType getTitleElement() { 
1198      if (this.title == null)
1199        if (Configuration.errorOnAutoCreate())
1200          throw new Error("Attempt to auto-create MessageDefinition.title");
1201        else if (Configuration.doAutoCreate())
1202          this.title = new StringType(); // bb
1203      return this.title;
1204    }
1205
1206    public boolean hasTitleElement() { 
1207      return this.title != null && !this.title.isEmpty();
1208    }
1209
1210    public boolean hasTitle() { 
1211      return this.title != null && !this.title.isEmpty();
1212    }
1213
1214    /**
1215     * @param value {@link #title} (A short, descriptive, user-friendly title for the message definition.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
1216     */
1217    public MessageDefinition setTitleElement(StringType value) { 
1218      this.title = value;
1219      return this;
1220    }
1221
1222    /**
1223     * @return A short, descriptive, user-friendly title for the message definition.
1224     */
1225    public String getTitle() { 
1226      return this.title == null ? null : this.title.getValue();
1227    }
1228
1229    /**
1230     * @param value A short, descriptive, user-friendly title for the message definition.
1231     */
1232    public MessageDefinition setTitle(String value) { 
1233      if (Utilities.noString(value))
1234        this.title = null;
1235      else {
1236        if (this.title == null)
1237          this.title = new StringType();
1238        this.title.setValue(value);
1239      }
1240      return this;
1241    }
1242
1243    /**
1244     * @return {@link #replaces} (A MessageDefinition that is superseded by this definition.)
1245     */
1246    public List<CanonicalType> getReplaces() { 
1247      if (this.replaces == null)
1248        this.replaces = new ArrayList<CanonicalType>();
1249      return this.replaces;
1250    }
1251
1252    /**
1253     * @return Returns a reference to <code>this</code> for easy method chaining
1254     */
1255    public MessageDefinition setReplaces(List<CanonicalType> theReplaces) { 
1256      this.replaces = theReplaces;
1257      return this;
1258    }
1259
1260    public boolean hasReplaces() { 
1261      if (this.replaces == null)
1262        return false;
1263      for (CanonicalType item : this.replaces)
1264        if (!item.isEmpty())
1265          return true;
1266      return false;
1267    }
1268
1269    /**
1270     * @return {@link #replaces} (A MessageDefinition that is superseded by this definition.)
1271     */
1272    public CanonicalType addReplacesElement() {//2 
1273      CanonicalType t = new CanonicalType();
1274      if (this.replaces == null)
1275        this.replaces = new ArrayList<CanonicalType>();
1276      this.replaces.add(t);
1277      return t;
1278    }
1279
1280    /**
1281     * @param value {@link #replaces} (A MessageDefinition that is superseded by this definition.)
1282     */
1283    public MessageDefinition addReplaces(String value) { //1
1284      CanonicalType t = new CanonicalType();
1285      t.setValue(value);
1286      if (this.replaces == null)
1287        this.replaces = new ArrayList<CanonicalType>();
1288      this.replaces.add(t);
1289      return this;
1290    }
1291
1292    /**
1293     * @param value {@link #replaces} (A MessageDefinition that is superseded by this definition.)
1294     */
1295    public boolean hasReplaces(String value) { 
1296      if (this.replaces == null)
1297        return false;
1298      for (CanonicalType v : this.replaces)
1299        if (v.getValue().equals(value)) // canonical(MessageDefinition)
1300          return true;
1301      return false;
1302    }
1303
1304    /**
1305     * @return {@link #status} (The status of this message definition. Enables tracking the life-cycle of the content.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
1306     */
1307    public Enumeration<PublicationStatus> getStatusElement() { 
1308      if (this.status == null)
1309        if (Configuration.errorOnAutoCreate())
1310          throw new Error("Attempt to auto-create MessageDefinition.status");
1311        else if (Configuration.doAutoCreate())
1312          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory()); // bb
1313      return this.status;
1314    }
1315
1316    public boolean hasStatusElement() { 
1317      return this.status != null && !this.status.isEmpty();
1318    }
1319
1320    public boolean hasStatus() { 
1321      return this.status != null && !this.status.isEmpty();
1322    }
1323
1324    /**
1325     * @param value {@link #status} (The status of this message definition. Enables tracking the life-cycle of the content.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
1326     */
1327    public MessageDefinition setStatusElement(Enumeration<PublicationStatus> value) { 
1328      this.status = value;
1329      return this;
1330    }
1331
1332    /**
1333     * @return The status of this message definition. Enables tracking the life-cycle of the content.
1334     */
1335    public PublicationStatus getStatus() { 
1336      return this.status == null ? null : this.status.getValue();
1337    }
1338
1339    /**
1340     * @param value The status of this message definition. Enables tracking the life-cycle of the content.
1341     */
1342    public MessageDefinition setStatus(PublicationStatus value) { 
1343        if (this.status == null)
1344          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory());
1345        this.status.setValue(value);
1346      return this;
1347    }
1348
1349    /**
1350     * @return {@link #experimental} (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.). This is the underlying object with id, value and extensions. The accessor "getExperimental" gives direct access to the value
1351     */
1352    public BooleanType getExperimentalElement() { 
1353      if (this.experimental == null)
1354        if (Configuration.errorOnAutoCreate())
1355          throw new Error("Attempt to auto-create MessageDefinition.experimental");
1356        else if (Configuration.doAutoCreate())
1357          this.experimental = new BooleanType(); // bb
1358      return this.experimental;
1359    }
1360
1361    public boolean hasExperimentalElement() { 
1362      return this.experimental != null && !this.experimental.isEmpty();
1363    }
1364
1365    public boolean hasExperimental() { 
1366      return this.experimental != null && !this.experimental.isEmpty();
1367    }
1368
1369    /**
1370     * @param value {@link #experimental} (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.). This is the underlying object with id, value and extensions. The accessor "getExperimental" gives direct access to the value
1371     */
1372    public MessageDefinition setExperimentalElement(BooleanType value) { 
1373      this.experimental = value;
1374      return this;
1375    }
1376
1377    /**
1378     * @return 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.
1379     */
1380    public boolean getExperimental() { 
1381      return this.experimental == null || this.experimental.isEmpty() ? false : this.experimental.getValue();
1382    }
1383
1384    /**
1385     * @param value 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.
1386     */
1387    public MessageDefinition setExperimental(boolean value) { 
1388        if (this.experimental == null)
1389          this.experimental = new BooleanType();
1390        this.experimental.setValue(value);
1391      return this;
1392    }
1393
1394    /**
1395     * @return {@link #date} (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.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
1396     */
1397    public DateTimeType getDateElement() { 
1398      if (this.date == null)
1399        if (Configuration.errorOnAutoCreate())
1400          throw new Error("Attempt to auto-create MessageDefinition.date");
1401        else if (Configuration.doAutoCreate())
1402          this.date = new DateTimeType(); // bb
1403      return this.date;
1404    }
1405
1406    public boolean hasDateElement() { 
1407      return this.date != null && !this.date.isEmpty();
1408    }
1409
1410    public boolean hasDate() { 
1411      return this.date != null && !this.date.isEmpty();
1412    }
1413
1414    /**
1415     * @param value {@link #date} (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.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
1416     */
1417    public MessageDefinition setDateElement(DateTimeType value) { 
1418      this.date = value;
1419      return this;
1420    }
1421
1422    /**
1423     * @return 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.
1424     */
1425    public Date getDate() { 
1426      return this.date == null ? null : this.date.getValue();
1427    }
1428
1429    /**
1430     * @param value 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.
1431     */
1432    public MessageDefinition setDate(Date value) { 
1433        if (this.date == null)
1434          this.date = new DateTimeType();
1435        this.date.setValue(value);
1436      return this;
1437    }
1438
1439    /**
1440     * @return {@link #publisher} (The name of the organization or individual that published the message definition.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
1441     */
1442    public StringType getPublisherElement() { 
1443      if (this.publisher == null)
1444        if (Configuration.errorOnAutoCreate())
1445          throw new Error("Attempt to auto-create MessageDefinition.publisher");
1446        else if (Configuration.doAutoCreate())
1447          this.publisher = new StringType(); // bb
1448      return this.publisher;
1449    }
1450
1451    public boolean hasPublisherElement() { 
1452      return this.publisher != null && !this.publisher.isEmpty();
1453    }
1454
1455    public boolean hasPublisher() { 
1456      return this.publisher != null && !this.publisher.isEmpty();
1457    }
1458
1459    /**
1460     * @param value {@link #publisher} (The name of the organization or individual that published the message definition.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
1461     */
1462    public MessageDefinition setPublisherElement(StringType value) { 
1463      this.publisher = value;
1464      return this;
1465    }
1466
1467    /**
1468     * @return The name of the organization or individual that published the message definition.
1469     */
1470    public String getPublisher() { 
1471      return this.publisher == null ? null : this.publisher.getValue();
1472    }
1473
1474    /**
1475     * @param value The name of the organization or individual that published the message definition.
1476     */
1477    public MessageDefinition setPublisher(String value) { 
1478      if (Utilities.noString(value))
1479        this.publisher = null;
1480      else {
1481        if (this.publisher == null)
1482          this.publisher = new StringType();
1483        this.publisher.setValue(value);
1484      }
1485      return this;
1486    }
1487
1488    /**
1489     * @return {@link #contact} (Contact details to assist a user in finding and communicating with the publisher.)
1490     */
1491    public List<ContactDetail> getContact() { 
1492      if (this.contact == null)
1493        this.contact = new ArrayList<ContactDetail>();
1494      return this.contact;
1495    }
1496
1497    /**
1498     * @return Returns a reference to <code>this</code> for easy method chaining
1499     */
1500    public MessageDefinition setContact(List<ContactDetail> theContact) { 
1501      this.contact = theContact;
1502      return this;
1503    }
1504
1505    public boolean hasContact() { 
1506      if (this.contact == null)
1507        return false;
1508      for (ContactDetail item : this.contact)
1509        if (!item.isEmpty())
1510          return true;
1511      return false;
1512    }
1513
1514    public ContactDetail addContact() { //3
1515      ContactDetail t = new ContactDetail();
1516      if (this.contact == null)
1517        this.contact = new ArrayList<ContactDetail>();
1518      this.contact.add(t);
1519      return t;
1520    }
1521
1522    public MessageDefinition addContact(ContactDetail t) { //3
1523      if (t == null)
1524        return this;
1525      if (this.contact == null)
1526        this.contact = new ArrayList<ContactDetail>();
1527      this.contact.add(t);
1528      return this;
1529    }
1530
1531    /**
1532     * @return The first repetition of repeating field {@link #contact}, creating it if it does not already exist
1533     */
1534    public ContactDetail getContactFirstRep() { 
1535      if (getContact().isEmpty()) {
1536        addContact();
1537      }
1538      return getContact().get(0);
1539    }
1540
1541    /**
1542     * @return {@link #description} (A free text natural language description of the message definition from a consumer's perspective.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
1543     */
1544    public MarkdownType getDescriptionElement() { 
1545      if (this.description == null)
1546        if (Configuration.errorOnAutoCreate())
1547          throw new Error("Attempt to auto-create MessageDefinition.description");
1548        else if (Configuration.doAutoCreate())
1549          this.description = new MarkdownType(); // bb
1550      return this.description;
1551    }
1552
1553    public boolean hasDescriptionElement() { 
1554      return this.description != null && !this.description.isEmpty();
1555    }
1556
1557    public boolean hasDescription() { 
1558      return this.description != null && !this.description.isEmpty();
1559    }
1560
1561    /**
1562     * @param value {@link #description} (A free text natural language description of the message definition from a consumer's perspective.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
1563     */
1564    public MessageDefinition setDescriptionElement(MarkdownType value) { 
1565      this.description = value;
1566      return this;
1567    }
1568
1569    /**
1570     * @return A free text natural language description of the message definition from a consumer's perspective.
1571     */
1572    public String getDescription() { 
1573      return this.description == null ? null : this.description.getValue();
1574    }
1575
1576    /**
1577     * @param value A free text natural language description of the message definition from a consumer's perspective.
1578     */
1579    public MessageDefinition setDescription(String value) { 
1580      if (value == null)
1581        this.description = null;
1582      else {
1583        if (this.description == null)
1584          this.description = new MarkdownType();
1585        this.description.setValue(value);
1586      }
1587      return this;
1588    }
1589
1590    /**
1591     * @return {@link #useContext} (The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate message definition instances.)
1592     */
1593    public List<UsageContext> getUseContext() { 
1594      if (this.useContext == null)
1595        this.useContext = new ArrayList<UsageContext>();
1596      return this.useContext;
1597    }
1598
1599    /**
1600     * @return Returns a reference to <code>this</code> for easy method chaining
1601     */
1602    public MessageDefinition setUseContext(List<UsageContext> theUseContext) { 
1603      this.useContext = theUseContext;
1604      return this;
1605    }
1606
1607    public boolean hasUseContext() { 
1608      if (this.useContext == null)
1609        return false;
1610      for (UsageContext item : this.useContext)
1611        if (!item.isEmpty())
1612          return true;
1613      return false;
1614    }
1615
1616    public UsageContext addUseContext() { //3
1617      UsageContext t = new UsageContext();
1618      if (this.useContext == null)
1619        this.useContext = new ArrayList<UsageContext>();
1620      this.useContext.add(t);
1621      return t;
1622    }
1623
1624    public MessageDefinition addUseContext(UsageContext t) { //3
1625      if (t == null)
1626        return this;
1627      if (this.useContext == null)
1628        this.useContext = new ArrayList<UsageContext>();
1629      this.useContext.add(t);
1630      return this;
1631    }
1632
1633    /**
1634     * @return The first repetition of repeating field {@link #useContext}, creating it if it does not already exist
1635     */
1636    public UsageContext getUseContextFirstRep() { 
1637      if (getUseContext().isEmpty()) {
1638        addUseContext();
1639      }
1640      return getUseContext().get(0);
1641    }
1642
1643    /**
1644     * @return {@link #jurisdiction} (A legal or geographic region in which the message definition is intended to be used.)
1645     */
1646    public List<CodeableConcept> getJurisdiction() { 
1647      if (this.jurisdiction == null)
1648        this.jurisdiction = new ArrayList<CodeableConcept>();
1649      return this.jurisdiction;
1650    }
1651
1652    /**
1653     * @return Returns a reference to <code>this</code> for easy method chaining
1654     */
1655    public MessageDefinition setJurisdiction(List<CodeableConcept> theJurisdiction) { 
1656      this.jurisdiction = theJurisdiction;
1657      return this;
1658    }
1659
1660    public boolean hasJurisdiction() { 
1661      if (this.jurisdiction == null)
1662        return false;
1663      for (CodeableConcept item : this.jurisdiction)
1664        if (!item.isEmpty())
1665          return true;
1666      return false;
1667    }
1668
1669    public CodeableConcept addJurisdiction() { //3
1670      CodeableConcept t = new CodeableConcept();
1671      if (this.jurisdiction == null)
1672        this.jurisdiction = new ArrayList<CodeableConcept>();
1673      this.jurisdiction.add(t);
1674      return t;
1675    }
1676
1677    public MessageDefinition addJurisdiction(CodeableConcept t) { //3
1678      if (t == null)
1679        return this;
1680      if (this.jurisdiction == null)
1681        this.jurisdiction = new ArrayList<CodeableConcept>();
1682      this.jurisdiction.add(t);
1683      return this;
1684    }
1685
1686    /**
1687     * @return The first repetition of repeating field {@link #jurisdiction}, creating it if it does not already exist
1688     */
1689    public CodeableConcept getJurisdictionFirstRep() { 
1690      if (getJurisdiction().isEmpty()) {
1691        addJurisdiction();
1692      }
1693      return getJurisdiction().get(0);
1694    }
1695
1696    /**
1697     * @return {@link #purpose} (Explanation of why this message definition is needed and why it has been designed as it has.). This is the underlying object with id, value and extensions. The accessor "getPurpose" gives direct access to the value
1698     */
1699    public MarkdownType getPurposeElement() { 
1700      if (this.purpose == null)
1701        if (Configuration.errorOnAutoCreate())
1702          throw new Error("Attempt to auto-create MessageDefinition.purpose");
1703        else if (Configuration.doAutoCreate())
1704          this.purpose = new MarkdownType(); // bb
1705      return this.purpose;
1706    }
1707
1708    public boolean hasPurposeElement() { 
1709      return this.purpose != null && !this.purpose.isEmpty();
1710    }
1711
1712    public boolean hasPurpose() { 
1713      return this.purpose != null && !this.purpose.isEmpty();
1714    }
1715
1716    /**
1717     * @param value {@link #purpose} (Explanation of why this message definition is needed and why it has been designed as it has.). This is the underlying object with id, value and extensions. The accessor "getPurpose" gives direct access to the value
1718     */
1719    public MessageDefinition setPurposeElement(MarkdownType value) { 
1720      this.purpose = value;
1721      return this;
1722    }
1723
1724    /**
1725     * @return Explanation of why this message definition is needed and why it has been designed as it has.
1726     */
1727    public String getPurpose() { 
1728      return this.purpose == null ? null : this.purpose.getValue();
1729    }
1730
1731    /**
1732     * @param value Explanation of why this message definition is needed and why it has been designed as it has.
1733     */
1734    public MessageDefinition setPurpose(String value) { 
1735      if (value == null)
1736        this.purpose = null;
1737      else {
1738        if (this.purpose == null)
1739          this.purpose = new MarkdownType();
1740        this.purpose.setValue(value);
1741      }
1742      return this;
1743    }
1744
1745    /**
1746     * @return {@link #copyright} (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.). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
1747     */
1748    public MarkdownType getCopyrightElement() { 
1749      if (this.copyright == null)
1750        if (Configuration.errorOnAutoCreate())
1751          throw new Error("Attempt to auto-create MessageDefinition.copyright");
1752        else if (Configuration.doAutoCreate())
1753          this.copyright = new MarkdownType(); // bb
1754      return this.copyright;
1755    }
1756
1757    public boolean hasCopyrightElement() { 
1758      return this.copyright != null && !this.copyright.isEmpty();
1759    }
1760
1761    public boolean hasCopyright() { 
1762      return this.copyright != null && !this.copyright.isEmpty();
1763    }
1764
1765    /**
1766     * @param value {@link #copyright} (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.). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
1767     */
1768    public MessageDefinition setCopyrightElement(MarkdownType value) { 
1769      this.copyright = value;
1770      return this;
1771    }
1772
1773    /**
1774     * @return 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.
1775     */
1776    public String getCopyright() { 
1777      return this.copyright == null ? null : this.copyright.getValue();
1778    }
1779
1780    /**
1781     * @param value 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.
1782     */
1783    public MessageDefinition setCopyright(String value) { 
1784      if (value == null)
1785        this.copyright = null;
1786      else {
1787        if (this.copyright == null)
1788          this.copyright = new MarkdownType();
1789        this.copyright.setValue(value);
1790      }
1791      return this;
1792    }
1793
1794    /**
1795     * @return {@link #base} (The MessageDefinition that is the basis for the contents of this resource.). This is the underlying object with id, value and extensions. The accessor "getBase" gives direct access to the value
1796     */
1797    public CanonicalType getBaseElement() { 
1798      if (this.base == null)
1799        if (Configuration.errorOnAutoCreate())
1800          throw new Error("Attempt to auto-create MessageDefinition.base");
1801        else if (Configuration.doAutoCreate())
1802          this.base = new CanonicalType(); // bb
1803      return this.base;
1804    }
1805
1806    public boolean hasBaseElement() { 
1807      return this.base != null && !this.base.isEmpty();
1808    }
1809
1810    public boolean hasBase() { 
1811      return this.base != null && !this.base.isEmpty();
1812    }
1813
1814    /**
1815     * @param value {@link #base} (The MessageDefinition that is the basis for the contents of this resource.). This is the underlying object with id, value and extensions. The accessor "getBase" gives direct access to the value
1816     */
1817    public MessageDefinition setBaseElement(CanonicalType value) { 
1818      this.base = value;
1819      return this;
1820    }
1821
1822    /**
1823     * @return The MessageDefinition that is the basis for the contents of this resource.
1824     */
1825    public String getBase() { 
1826      return this.base == null ? null : this.base.getValue();
1827    }
1828
1829    /**
1830     * @param value The MessageDefinition that is the basis for the contents of this resource.
1831     */
1832    public MessageDefinition setBase(String value) { 
1833      if (Utilities.noString(value))
1834        this.base = null;
1835      else {
1836        if (this.base == null)
1837          this.base = new CanonicalType();
1838        this.base.setValue(value);
1839      }
1840      return this;
1841    }
1842
1843    /**
1844     * @return {@link #parent} (Identifies a protocol or workflow that this MessageDefinition represents a step in.)
1845     */
1846    public List<CanonicalType> getParent() { 
1847      if (this.parent == null)
1848        this.parent = new ArrayList<CanonicalType>();
1849      return this.parent;
1850    }
1851
1852    /**
1853     * @return Returns a reference to <code>this</code> for easy method chaining
1854     */
1855    public MessageDefinition setParent(List<CanonicalType> theParent) { 
1856      this.parent = theParent;
1857      return this;
1858    }
1859
1860    public boolean hasParent() { 
1861      if (this.parent == null)
1862        return false;
1863      for (CanonicalType item : this.parent)
1864        if (!item.isEmpty())
1865          return true;
1866      return false;
1867    }
1868
1869    /**
1870     * @return {@link #parent} (Identifies a protocol or workflow that this MessageDefinition represents a step in.)
1871     */
1872    public CanonicalType addParentElement() {//2 
1873      CanonicalType t = new CanonicalType();
1874      if (this.parent == null)
1875        this.parent = new ArrayList<CanonicalType>();
1876      this.parent.add(t);
1877      return t;
1878    }
1879
1880    /**
1881     * @param value {@link #parent} (Identifies a protocol or workflow that this MessageDefinition represents a step in.)
1882     */
1883    public MessageDefinition addParent(String value) { //1
1884      CanonicalType t = new CanonicalType();
1885      t.setValue(value);
1886      if (this.parent == null)
1887        this.parent = new ArrayList<CanonicalType>();
1888      this.parent.add(t);
1889      return this;
1890    }
1891
1892    /**
1893     * @param value {@link #parent} (Identifies a protocol or workflow that this MessageDefinition represents a step in.)
1894     */
1895    public boolean hasParent(String value) { 
1896      if (this.parent == null)
1897        return false;
1898      for (CanonicalType v : this.parent)
1899        if (v.getValue().equals(value)) // canonical(ActivityDefinition|PlanDefinition)
1900          return true;
1901      return false;
1902    }
1903
1904    /**
1905     * @return {@link #event} (Event code or link to the EventDefinition.)
1906     */
1907    public Type getEvent() { 
1908      return this.event;
1909    }
1910
1911    /**
1912     * @return {@link #event} (Event code or link to the EventDefinition.)
1913     */
1914    public Coding getEventCoding() throws FHIRException { 
1915      if (this.event == null)
1916        return null;
1917      if (!(this.event instanceof Coding))
1918        throw new FHIRException("Type mismatch: the type Coding was expected, but "+this.event.getClass().getName()+" was encountered");
1919      return (Coding) this.event;
1920    }
1921
1922    public boolean hasEventCoding() { 
1923      return this != null && this.event instanceof Coding;
1924    }
1925
1926    /**
1927     * @return {@link #event} (Event code or link to the EventDefinition.)
1928     */
1929    public UriType getEventUriType() throws FHIRException { 
1930      if (this.event == null)
1931        return null;
1932      if (!(this.event instanceof UriType))
1933        throw new FHIRException("Type mismatch: the type UriType was expected, but "+this.event.getClass().getName()+" was encountered");
1934      return (UriType) this.event;
1935    }
1936
1937    public boolean hasEventUriType() { 
1938      return this != null && this.event instanceof UriType;
1939    }
1940
1941    public boolean hasEvent() { 
1942      return this.event != null && !this.event.isEmpty();
1943    }
1944
1945    /**
1946     * @param value {@link #event} (Event code or link to the EventDefinition.)
1947     */
1948    public MessageDefinition setEvent(Type value) { 
1949      if (value != null && !(value instanceof Coding || value instanceof UriType))
1950        throw new Error("Not the right type for MessageDefinition.event[x]: "+value.fhirType());
1951      this.event = value;
1952      return this;
1953    }
1954
1955    /**
1956     * @return {@link #category} (The impact of the content of the message.). This is the underlying object with id, value and extensions. The accessor "getCategory" gives direct access to the value
1957     */
1958    public Enumeration<MessageSignificanceCategory> getCategoryElement() { 
1959      if (this.category == null)
1960        if (Configuration.errorOnAutoCreate())
1961          throw new Error("Attempt to auto-create MessageDefinition.category");
1962        else if (Configuration.doAutoCreate())
1963          this.category = new Enumeration<MessageSignificanceCategory>(new MessageSignificanceCategoryEnumFactory()); // bb
1964      return this.category;
1965    }
1966
1967    public boolean hasCategoryElement() { 
1968      return this.category != null && !this.category.isEmpty();
1969    }
1970
1971    public boolean hasCategory() { 
1972      return this.category != null && !this.category.isEmpty();
1973    }
1974
1975    /**
1976     * @param value {@link #category} (The impact of the content of the message.). This is the underlying object with id, value and extensions. The accessor "getCategory" gives direct access to the value
1977     */
1978    public MessageDefinition setCategoryElement(Enumeration<MessageSignificanceCategory> value) { 
1979      this.category = value;
1980      return this;
1981    }
1982
1983    /**
1984     * @return The impact of the content of the message.
1985     */
1986    public MessageSignificanceCategory getCategory() { 
1987      return this.category == null ? null : this.category.getValue();
1988    }
1989
1990    /**
1991     * @param value The impact of the content of the message.
1992     */
1993    public MessageDefinition setCategory(MessageSignificanceCategory value) { 
1994      if (value == null)
1995        this.category = null;
1996      else {
1997        if (this.category == null)
1998          this.category = new Enumeration<MessageSignificanceCategory>(new MessageSignificanceCategoryEnumFactory());
1999        this.category.setValue(value);
2000      }
2001      return this;
2002    }
2003
2004    /**
2005     * @return {@link #focus} (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.)
2006     */
2007    public List<MessageDefinitionFocusComponent> getFocus() { 
2008      if (this.focus == null)
2009        this.focus = new ArrayList<MessageDefinitionFocusComponent>();
2010      return this.focus;
2011    }
2012
2013    /**
2014     * @return Returns a reference to <code>this</code> for easy method chaining
2015     */
2016    public MessageDefinition setFocus(List<MessageDefinitionFocusComponent> theFocus) { 
2017      this.focus = theFocus;
2018      return this;
2019    }
2020
2021    public boolean hasFocus() { 
2022      if (this.focus == null)
2023        return false;
2024      for (MessageDefinitionFocusComponent item : this.focus)
2025        if (!item.isEmpty())
2026          return true;
2027      return false;
2028    }
2029
2030    public MessageDefinitionFocusComponent addFocus() { //3
2031      MessageDefinitionFocusComponent t = new MessageDefinitionFocusComponent();
2032      if (this.focus == null)
2033        this.focus = new ArrayList<MessageDefinitionFocusComponent>();
2034      this.focus.add(t);
2035      return t;
2036    }
2037
2038    public MessageDefinition addFocus(MessageDefinitionFocusComponent t) { //3
2039      if (t == null)
2040        return this;
2041      if (this.focus == null)
2042        this.focus = new ArrayList<MessageDefinitionFocusComponent>();
2043      this.focus.add(t);
2044      return this;
2045    }
2046
2047    /**
2048     * @return The first repetition of repeating field {@link #focus}, creating it if it does not already exist
2049     */
2050    public MessageDefinitionFocusComponent getFocusFirstRep() { 
2051      if (getFocus().isEmpty()) {
2052        addFocus();
2053      }
2054      return getFocus().get(0);
2055    }
2056
2057    /**
2058     * @return {@link #responseRequired} (Declare at a message definition level whether a response is required or only upon error or success, or never.). This is the underlying object with id, value and extensions. The accessor "getResponseRequired" gives direct access to the value
2059     */
2060    public Enumeration<MessageheaderResponseRequest> getResponseRequiredElement() { 
2061      if (this.responseRequired == null)
2062        if (Configuration.errorOnAutoCreate())
2063          throw new Error("Attempt to auto-create MessageDefinition.responseRequired");
2064        else if (Configuration.doAutoCreate())
2065          this.responseRequired = new Enumeration<MessageheaderResponseRequest>(new MessageheaderResponseRequestEnumFactory()); // bb
2066      return this.responseRequired;
2067    }
2068
2069    public boolean hasResponseRequiredElement() { 
2070      return this.responseRequired != null && !this.responseRequired.isEmpty();
2071    }
2072
2073    public boolean hasResponseRequired() { 
2074      return this.responseRequired != null && !this.responseRequired.isEmpty();
2075    }
2076
2077    /**
2078     * @param value {@link #responseRequired} (Declare at a message definition level whether a response is required or only upon error or success, or never.). This is the underlying object with id, value and extensions. The accessor "getResponseRequired" gives direct access to the value
2079     */
2080    public MessageDefinition setResponseRequiredElement(Enumeration<MessageheaderResponseRequest> value) { 
2081      this.responseRequired = value;
2082      return this;
2083    }
2084
2085    /**
2086     * @return Declare at a message definition level whether a response is required or only upon error or success, or never.
2087     */
2088    public MessageheaderResponseRequest getResponseRequired() { 
2089      return this.responseRequired == null ? null : this.responseRequired.getValue();
2090    }
2091
2092    /**
2093     * @param value Declare at a message definition level whether a response is required or only upon error or success, or never.
2094     */
2095    public MessageDefinition setResponseRequired(MessageheaderResponseRequest value) { 
2096      if (value == null)
2097        this.responseRequired = null;
2098      else {
2099        if (this.responseRequired == null)
2100          this.responseRequired = new Enumeration<MessageheaderResponseRequest>(new MessageheaderResponseRequestEnumFactory());
2101        this.responseRequired.setValue(value);
2102      }
2103      return this;
2104    }
2105
2106    /**
2107     * @return {@link #allowedResponse} (Indicates what types of messages may be sent as an application-level response to this message.)
2108     */
2109    public List<MessageDefinitionAllowedResponseComponent> getAllowedResponse() { 
2110      if (this.allowedResponse == null)
2111        this.allowedResponse = new ArrayList<MessageDefinitionAllowedResponseComponent>();
2112      return this.allowedResponse;
2113    }
2114
2115    /**
2116     * @return Returns a reference to <code>this</code> for easy method chaining
2117     */
2118    public MessageDefinition setAllowedResponse(List<MessageDefinitionAllowedResponseComponent> theAllowedResponse) { 
2119      this.allowedResponse = theAllowedResponse;
2120      return this;
2121    }
2122
2123    public boolean hasAllowedResponse() { 
2124      if (this.allowedResponse == null)
2125        return false;
2126      for (MessageDefinitionAllowedResponseComponent item : this.allowedResponse)
2127        if (!item.isEmpty())
2128          return true;
2129      return false;
2130    }
2131
2132    public MessageDefinitionAllowedResponseComponent addAllowedResponse() { //3
2133      MessageDefinitionAllowedResponseComponent t = new MessageDefinitionAllowedResponseComponent();
2134      if (this.allowedResponse == null)
2135        this.allowedResponse = new ArrayList<MessageDefinitionAllowedResponseComponent>();
2136      this.allowedResponse.add(t);
2137      return t;
2138    }
2139
2140    public MessageDefinition addAllowedResponse(MessageDefinitionAllowedResponseComponent t) { //3
2141      if (t == null)
2142        return this;
2143      if (this.allowedResponse == null)
2144        this.allowedResponse = new ArrayList<MessageDefinitionAllowedResponseComponent>();
2145      this.allowedResponse.add(t);
2146      return this;
2147    }
2148
2149    /**
2150     * @return The first repetition of repeating field {@link #allowedResponse}, creating it if it does not already exist
2151     */
2152    public MessageDefinitionAllowedResponseComponent getAllowedResponseFirstRep() { 
2153      if (getAllowedResponse().isEmpty()) {
2154        addAllowedResponse();
2155      }
2156      return getAllowedResponse().get(0);
2157    }
2158
2159      protected void listChildren(List<Property> children) {
2160        super.listChildren(children);
2161        children.add(new Property("url", "uri", "An absolute URI that is used to identify this message definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which this message definition is (or will be) published.", 0, 1, url));
2162        children.add(new Property("identifier", "Identifier", "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.", 0, 1, identifier));
2163        children.add(new Property("version", "string", "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.", 0, 1, version));
2164        children.add(new Property("name", "string", "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.", 0, 1, name));
2165        children.add(new Property("title", "string", "A short, descriptive, user-friendly title for the message definition.", 0, 1, title));
2166        children.add(new Property("replaces", "canonical(MessageDefinition)", "A MessageDefinition that is superseded by this definition.", 0, java.lang.Integer.MAX_VALUE, replaces));
2167        children.add(new Property("status", "code", "The status of this message definition. Enables tracking the life-cycle of the content.", 0, 1, status));
2168        children.add(new Property("experimental", "boolean", "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.", 0, 1, experimental));
2169        children.add(new Property("date", "dateTime", "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.", 0, 1, date));
2170        children.add(new Property("publisher", "string", "The name of the organization or individual that published the message definition.", 0, 1, publisher));
2171        children.add(new Property("contact", "ContactDetail", "Contact details to assist a user in finding and communicating with the publisher.", 0, java.lang.Integer.MAX_VALUE, contact));
2172        children.add(new Property("description", "markdown", "A free text natural language description of the message definition from a consumer's perspective.", 0, 1, description));
2173        children.add(new Property("useContext", "UsageContext", "The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate message definition instances.", 0, java.lang.Integer.MAX_VALUE, useContext));
2174        children.add(new Property("jurisdiction", "CodeableConcept", "A legal or geographic region in which the message definition is intended to be used.", 0, java.lang.Integer.MAX_VALUE, jurisdiction));
2175        children.add(new Property("purpose", "markdown", "Explanation of why this message definition is needed and why it has been designed as it has.", 0, 1, purpose));
2176        children.add(new Property("copyright", "markdown", "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.", 0, 1, copyright));
2177        children.add(new Property("base", "canonical(MessageDefinition)", "The MessageDefinition that is the basis for the contents of this resource.", 0, 1, base));
2178        children.add(new Property("parent", "canonical(ActivityDefinition|PlanDefinition)", "Identifies a protocol or workflow that this MessageDefinition represents a step in.", 0, java.lang.Integer.MAX_VALUE, parent));
2179        children.add(new Property("event[x]", "Coding|uri", "Event code or link to the EventDefinition.", 0, 1, event));
2180        children.add(new Property("category", "code", "The impact of the content of the message.", 0, 1, category));
2181        children.add(new Property("focus", "", "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.", 0, java.lang.Integer.MAX_VALUE, focus));
2182        children.add(new Property("responseRequired", "code", "Declare at a message definition level whether a response is required or only upon error or success, or never.", 0, 1, responseRequired));
2183        children.add(new Property("allowedResponse", "", "Indicates what types of messages may be sent as an application-level response to this message.", 0, java.lang.Integer.MAX_VALUE, allowedResponse));
2184      }
2185
2186      @Override
2187      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2188        switch (_hash) {
2189        case 116079: /*url*/  return new Property("url", "uri", "An absolute URI that is used to identify this message definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which this message definition is (or will be) published.", 0, 1, url);
2190        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "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.", 0, 1, identifier);
2191        case 351608024: /*version*/  return new Property("version", "string", "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.", 0, 1, version);
2192        case 3373707: /*name*/  return new Property("name", "string", "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.", 0, 1, name);
2193        case 110371416: /*title*/  return new Property("title", "string", "A short, descriptive, user-friendly title for the message definition.", 0, 1, title);
2194        case -430332865: /*replaces*/  return new Property("replaces", "canonical(MessageDefinition)", "A MessageDefinition that is superseded by this definition.", 0, java.lang.Integer.MAX_VALUE, replaces);
2195        case -892481550: /*status*/  return new Property("status", "code", "The status of this message definition. Enables tracking the life-cycle of the content.", 0, 1, status);
2196        case -404562712: /*experimental*/  return new Property("experimental", "boolean", "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.", 0, 1, experimental);
2197        case 3076014: /*date*/  return new Property("date", "dateTime", "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.", 0, 1, date);
2198        case 1447404028: /*publisher*/  return new Property("publisher", "string", "The name of the organization or individual that published the message definition.", 0, 1, publisher);
2199        case 951526432: /*contact*/  return new Property("contact", "ContactDetail", "Contact details to assist a user in finding and communicating with the publisher.", 0, java.lang.Integer.MAX_VALUE, contact);
2200        case -1724546052: /*description*/  return new Property("description", "markdown", "A free text natural language description of the message definition from a consumer's perspective.", 0, 1, description);
2201        case -669707736: /*useContext*/  return new Property("useContext", "UsageContext", "The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate message definition instances.", 0, java.lang.Integer.MAX_VALUE, useContext);
2202        case -507075711: /*jurisdiction*/  return new Property("jurisdiction", "CodeableConcept", "A legal or geographic region in which the message definition is intended to be used.", 0, java.lang.Integer.MAX_VALUE, jurisdiction);
2203        case -220463842: /*purpose*/  return new Property("purpose", "markdown", "Explanation of why this message definition is needed and why it has been designed as it has.", 0, 1, purpose);
2204        case 1522889671: /*copyright*/  return new Property("copyright", "markdown", "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.", 0, 1, copyright);
2205        case 3016401: /*base*/  return new Property("base", "canonical(MessageDefinition)", "The MessageDefinition that is the basis for the contents of this resource.", 0, 1, base);
2206        case -995424086: /*parent*/  return new Property("parent", "canonical(ActivityDefinition|PlanDefinition)", "Identifies a protocol or workflow that this MessageDefinition represents a step in.", 0, java.lang.Integer.MAX_VALUE, parent);
2207        case 278115238: /*event[x]*/  return new Property("event[x]", "Coding|uri", "Event code or link to the EventDefinition.", 0, 1, event);
2208        case 96891546: /*event*/  return new Property("event[x]", "Coding|uri", "Event code or link to the EventDefinition.", 0, 1, event);
2209        case -355957084: /*eventCoding*/  return new Property("event[x]", "Coding|uri", "Event code or link to the EventDefinition.", 0, 1, event);
2210        case 278109298: /*eventUri*/  return new Property("event[x]", "Coding|uri", "Event code or link to the EventDefinition.", 0, 1, event);
2211        case 50511102: /*category*/  return new Property("category", "code", "The impact of the content of the message.", 0, 1, category);
2212        case 97604824: /*focus*/  return new Property("focus", "", "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.", 0, java.lang.Integer.MAX_VALUE, focus);
2213        case 791597824: /*responseRequired*/  return new Property("responseRequired", "code", "Declare at a message definition level whether a response is required or only upon error or success, or never.", 0, 1, responseRequired);
2214        case -1130933751: /*allowedResponse*/  return new Property("allowedResponse", "", "Indicates what types of messages may be sent as an application-level response to this message.", 0, java.lang.Integer.MAX_VALUE, allowedResponse);
2215        default: return super.getNamedProperty(_hash, _name, _checkValid);
2216        }
2217
2218      }
2219
2220      @Override
2221      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2222        switch (hash) {
2223        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UriType
2224        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : new Base[] {this.identifier}; // Identifier
2225        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
2226        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
2227        case 110371416: /*title*/ return this.title == null ? new Base[0] : new Base[] {this.title}; // StringType
2228        case -430332865: /*replaces*/ return this.replaces == null ? new Base[0] : this.replaces.toArray(new Base[this.replaces.size()]); // CanonicalType
2229        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<PublicationStatus>
2230        case -404562712: /*experimental*/ return this.experimental == null ? new Base[0] : new Base[] {this.experimental}; // BooleanType
2231        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
2232        case 1447404028: /*publisher*/ return this.publisher == null ? new Base[0] : new Base[] {this.publisher}; // StringType
2233        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ContactDetail
2234        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
2235        case -669707736: /*useContext*/ return this.useContext == null ? new Base[0] : this.useContext.toArray(new Base[this.useContext.size()]); // UsageContext
2236        case -507075711: /*jurisdiction*/ return this.jurisdiction == null ? new Base[0] : this.jurisdiction.toArray(new Base[this.jurisdiction.size()]); // CodeableConcept
2237        case -220463842: /*purpose*/ return this.purpose == null ? new Base[0] : new Base[] {this.purpose}; // MarkdownType
2238        case 1522889671: /*copyright*/ return this.copyright == null ? new Base[0] : new Base[] {this.copyright}; // MarkdownType
2239        case 3016401: /*base*/ return this.base == null ? new Base[0] : new Base[] {this.base}; // CanonicalType
2240        case -995424086: /*parent*/ return this.parent == null ? new Base[0] : this.parent.toArray(new Base[this.parent.size()]); // CanonicalType
2241        case 96891546: /*event*/ return this.event == null ? new Base[0] : new Base[] {this.event}; // Type
2242        case 50511102: /*category*/ return this.category == null ? new Base[0] : new Base[] {this.category}; // Enumeration<MessageSignificanceCategory>
2243        case 97604824: /*focus*/ return this.focus == null ? new Base[0] : this.focus.toArray(new Base[this.focus.size()]); // MessageDefinitionFocusComponent
2244        case 791597824: /*responseRequired*/ return this.responseRequired == null ? new Base[0] : new Base[] {this.responseRequired}; // Enumeration<MessageheaderResponseRequest>
2245        case -1130933751: /*allowedResponse*/ return this.allowedResponse == null ? new Base[0] : this.allowedResponse.toArray(new Base[this.allowedResponse.size()]); // MessageDefinitionAllowedResponseComponent
2246        default: return super.getProperty(hash, name, checkValid);
2247        }
2248
2249      }
2250
2251      @Override
2252      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2253        switch (hash) {
2254        case 116079: // url
2255          this.url = castToUri(value); // UriType
2256          return value;
2257        case -1618432855: // identifier
2258          this.identifier = castToIdentifier(value); // Identifier
2259          return value;
2260        case 351608024: // version
2261          this.version = castToString(value); // StringType
2262          return value;
2263        case 3373707: // name
2264          this.name = castToString(value); // StringType
2265          return value;
2266        case 110371416: // title
2267          this.title = castToString(value); // StringType
2268          return value;
2269        case -430332865: // replaces
2270          this.getReplaces().add(castToCanonical(value)); // CanonicalType
2271          return value;
2272        case -892481550: // status
2273          value = new PublicationStatusEnumFactory().fromType(castToCode(value));
2274          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
2275          return value;
2276        case -404562712: // experimental
2277          this.experimental = castToBoolean(value); // BooleanType
2278          return value;
2279        case 3076014: // date
2280          this.date = castToDateTime(value); // DateTimeType
2281          return value;
2282        case 1447404028: // publisher
2283          this.publisher = castToString(value); // StringType
2284          return value;
2285        case 951526432: // contact
2286          this.getContact().add(castToContactDetail(value)); // ContactDetail
2287          return value;
2288        case -1724546052: // description
2289          this.description = castToMarkdown(value); // MarkdownType
2290          return value;
2291        case -669707736: // useContext
2292          this.getUseContext().add(castToUsageContext(value)); // UsageContext
2293          return value;
2294        case -507075711: // jurisdiction
2295          this.getJurisdiction().add(castToCodeableConcept(value)); // CodeableConcept
2296          return value;
2297        case -220463842: // purpose
2298          this.purpose = castToMarkdown(value); // MarkdownType
2299          return value;
2300        case 1522889671: // copyright
2301          this.copyright = castToMarkdown(value); // MarkdownType
2302          return value;
2303        case 3016401: // base
2304          this.base = castToCanonical(value); // CanonicalType
2305          return value;
2306        case -995424086: // parent
2307          this.getParent().add(castToCanonical(value)); // CanonicalType
2308          return value;
2309        case 96891546: // event
2310          this.event = castToType(value); // Type
2311          return value;
2312        case 50511102: // category
2313          value = new MessageSignificanceCategoryEnumFactory().fromType(castToCode(value));
2314          this.category = (Enumeration) value; // Enumeration<MessageSignificanceCategory>
2315          return value;
2316        case 97604824: // focus
2317          this.getFocus().add((MessageDefinitionFocusComponent) value); // MessageDefinitionFocusComponent
2318          return value;
2319        case 791597824: // responseRequired
2320          value = new MessageheaderResponseRequestEnumFactory().fromType(castToCode(value));
2321          this.responseRequired = (Enumeration) value; // Enumeration<MessageheaderResponseRequest>
2322          return value;
2323        case -1130933751: // allowedResponse
2324          this.getAllowedResponse().add((MessageDefinitionAllowedResponseComponent) value); // MessageDefinitionAllowedResponseComponent
2325          return value;
2326        default: return super.setProperty(hash, name, value);
2327        }
2328
2329      }
2330
2331      @Override
2332      public Base setProperty(String name, Base value) throws FHIRException {
2333        if (name.equals("url")) {
2334          this.url = castToUri(value); // UriType
2335        } else if (name.equals("identifier")) {
2336          this.identifier = castToIdentifier(value); // Identifier
2337        } else if (name.equals("version")) {
2338          this.version = castToString(value); // StringType
2339        } else if (name.equals("name")) {
2340          this.name = castToString(value); // StringType
2341        } else if (name.equals("title")) {
2342          this.title = castToString(value); // StringType
2343        } else if (name.equals("replaces")) {
2344          this.getReplaces().add(castToCanonical(value));
2345        } else if (name.equals("status")) {
2346          value = new PublicationStatusEnumFactory().fromType(castToCode(value));
2347          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
2348        } else if (name.equals("experimental")) {
2349          this.experimental = castToBoolean(value); // BooleanType
2350        } else if (name.equals("date")) {
2351          this.date = castToDateTime(value); // DateTimeType
2352        } else if (name.equals("publisher")) {
2353          this.publisher = castToString(value); // StringType
2354        } else if (name.equals("contact")) {
2355          this.getContact().add(castToContactDetail(value));
2356        } else if (name.equals("description")) {
2357          this.description = castToMarkdown(value); // MarkdownType
2358        } else if (name.equals("useContext")) {
2359          this.getUseContext().add(castToUsageContext(value));
2360        } else if (name.equals("jurisdiction")) {
2361          this.getJurisdiction().add(castToCodeableConcept(value));
2362        } else if (name.equals("purpose")) {
2363          this.purpose = castToMarkdown(value); // MarkdownType
2364        } else if (name.equals("copyright")) {
2365          this.copyright = castToMarkdown(value); // MarkdownType
2366        } else if (name.equals("base")) {
2367          this.base = castToCanonical(value); // CanonicalType
2368        } else if (name.equals("parent")) {
2369          this.getParent().add(castToCanonical(value));
2370        } else if (name.equals("event[x]")) {
2371          this.event = castToType(value); // Type
2372        } else if (name.equals("category")) {
2373          value = new MessageSignificanceCategoryEnumFactory().fromType(castToCode(value));
2374          this.category = (Enumeration) value; // Enumeration<MessageSignificanceCategory>
2375        } else if (name.equals("focus")) {
2376          this.getFocus().add((MessageDefinitionFocusComponent) value);
2377        } else if (name.equals("responseRequired")) {
2378          value = new MessageheaderResponseRequestEnumFactory().fromType(castToCode(value));
2379          this.responseRequired = (Enumeration) value; // Enumeration<MessageheaderResponseRequest>
2380        } else if (name.equals("allowedResponse")) {
2381          this.getAllowedResponse().add((MessageDefinitionAllowedResponseComponent) value);
2382        } else
2383          return super.setProperty(name, value);
2384        return value;
2385      }
2386
2387      @Override
2388      public Base makeProperty(int hash, String name) throws FHIRException {
2389        switch (hash) {
2390        case 116079:  return getUrlElement();
2391        case -1618432855:  return getIdentifier(); 
2392        case 351608024:  return getVersionElement();
2393        case 3373707:  return getNameElement();
2394        case 110371416:  return getTitleElement();
2395        case -430332865:  return addReplacesElement();
2396        case -892481550:  return getStatusElement();
2397        case -404562712:  return getExperimentalElement();
2398        case 3076014:  return getDateElement();
2399        case 1447404028:  return getPublisherElement();
2400        case 951526432:  return addContact(); 
2401        case -1724546052:  return getDescriptionElement();
2402        case -669707736:  return addUseContext(); 
2403        case -507075711:  return addJurisdiction(); 
2404        case -220463842:  return getPurposeElement();
2405        case 1522889671:  return getCopyrightElement();
2406        case 3016401:  return getBaseElement();
2407        case -995424086:  return addParentElement();
2408        case 278115238:  return getEvent(); 
2409        case 96891546:  return getEvent(); 
2410        case 50511102:  return getCategoryElement();
2411        case 97604824:  return addFocus(); 
2412        case 791597824:  return getResponseRequiredElement();
2413        case -1130933751:  return addAllowedResponse(); 
2414        default: return super.makeProperty(hash, name);
2415        }
2416
2417      }
2418
2419      @Override
2420      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2421        switch (hash) {
2422        case 116079: /*url*/ return new String[] {"uri"};
2423        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
2424        case 351608024: /*version*/ return new String[] {"string"};
2425        case 3373707: /*name*/ return new String[] {"string"};
2426        case 110371416: /*title*/ return new String[] {"string"};
2427        case -430332865: /*replaces*/ return new String[] {"canonical"};
2428        case -892481550: /*status*/ return new String[] {"code"};
2429        case -404562712: /*experimental*/ return new String[] {"boolean"};
2430        case 3076014: /*date*/ return new String[] {"dateTime"};
2431        case 1447404028: /*publisher*/ return new String[] {"string"};
2432        case 951526432: /*contact*/ return new String[] {"ContactDetail"};
2433        case -1724546052: /*description*/ return new String[] {"markdown"};
2434        case -669707736: /*useContext*/ return new String[] {"UsageContext"};
2435        case -507075711: /*jurisdiction*/ return new String[] {"CodeableConcept"};
2436        case -220463842: /*purpose*/ return new String[] {"markdown"};
2437        case 1522889671: /*copyright*/ return new String[] {"markdown"};
2438        case 3016401: /*base*/ return new String[] {"canonical"};
2439        case -995424086: /*parent*/ return new String[] {"canonical"};
2440        case 96891546: /*event*/ return new String[] {"Coding", "uri"};
2441        case 50511102: /*category*/ return new String[] {"code"};
2442        case 97604824: /*focus*/ return new String[] {};
2443        case 791597824: /*responseRequired*/ return new String[] {"code"};
2444        case -1130933751: /*allowedResponse*/ return new String[] {};
2445        default: return super.getTypesForProperty(hash, name);
2446        }
2447
2448      }
2449
2450      @Override
2451      public Base addChild(String name) throws FHIRException {
2452        if (name.equals("url")) {
2453          throw new FHIRException("Cannot call addChild on a primitive type MessageDefinition.url");
2454        }
2455        else if (name.equals("identifier")) {
2456          this.identifier = new Identifier();
2457          return this.identifier;
2458        }
2459        else if (name.equals("version")) {
2460          throw new FHIRException("Cannot call addChild on a primitive type MessageDefinition.version");
2461        }
2462        else if (name.equals("name")) {
2463          throw new FHIRException("Cannot call addChild on a primitive type MessageDefinition.name");
2464        }
2465        else if (name.equals("title")) {
2466          throw new FHIRException("Cannot call addChild on a primitive type MessageDefinition.title");
2467        }
2468        else if (name.equals("replaces")) {
2469          throw new FHIRException("Cannot call addChild on a primitive type MessageDefinition.replaces");
2470        }
2471        else if (name.equals("status")) {
2472          throw new FHIRException("Cannot call addChild on a primitive type MessageDefinition.status");
2473        }
2474        else if (name.equals("experimental")) {
2475          throw new FHIRException("Cannot call addChild on a primitive type MessageDefinition.experimental");
2476        }
2477        else if (name.equals("date")) {
2478          throw new FHIRException("Cannot call addChild on a primitive type MessageDefinition.date");
2479        }
2480        else if (name.equals("publisher")) {
2481          throw new FHIRException("Cannot call addChild on a primitive type MessageDefinition.publisher");
2482        }
2483        else if (name.equals("contact")) {
2484          return addContact();
2485        }
2486        else if (name.equals("description")) {
2487          throw new FHIRException("Cannot call addChild on a primitive type MessageDefinition.description");
2488        }
2489        else if (name.equals("useContext")) {
2490          return addUseContext();
2491        }
2492        else if (name.equals("jurisdiction")) {
2493          return addJurisdiction();
2494        }
2495        else if (name.equals("purpose")) {
2496          throw new FHIRException("Cannot call addChild on a primitive type MessageDefinition.purpose");
2497        }
2498        else if (name.equals("copyright")) {
2499          throw new FHIRException("Cannot call addChild on a primitive type MessageDefinition.copyright");
2500        }
2501        else if (name.equals("base")) {
2502          throw new FHIRException("Cannot call addChild on a primitive type MessageDefinition.base");
2503        }
2504        else if (name.equals("parent")) {
2505          throw new FHIRException("Cannot call addChild on a primitive type MessageDefinition.parent");
2506        }
2507        else if (name.equals("eventCoding")) {
2508          this.event = new Coding();
2509          return this.event;
2510        }
2511        else if (name.equals("eventUri")) {
2512          this.event = new UriType();
2513          return this.event;
2514        }
2515        else if (name.equals("category")) {
2516          throw new FHIRException("Cannot call addChild on a primitive type MessageDefinition.category");
2517        }
2518        else if (name.equals("focus")) {
2519          return addFocus();
2520        }
2521        else if (name.equals("responseRequired")) {
2522          throw new FHIRException("Cannot call addChild on a primitive type MessageDefinition.responseRequired");
2523        }
2524        else if (name.equals("allowedResponse")) {
2525          return addAllowedResponse();
2526        }
2527        else
2528          return super.addChild(name);
2529      }
2530
2531  public String fhirType() {
2532    return "MessageDefinition";
2533
2534  }
2535
2536      public MessageDefinition copy() {
2537        MessageDefinition dst = new MessageDefinition();
2538        copyValues(dst);
2539        dst.url = url == null ? null : url.copy();
2540        dst.identifier = identifier == null ? null : identifier.copy();
2541        dst.version = version == null ? null : version.copy();
2542        dst.name = name == null ? null : name.copy();
2543        dst.title = title == null ? null : title.copy();
2544        if (replaces != null) {
2545          dst.replaces = new ArrayList<CanonicalType>();
2546          for (CanonicalType i : replaces)
2547            dst.replaces.add(i.copy());
2548        };
2549        dst.status = status == null ? null : status.copy();
2550        dst.experimental = experimental == null ? null : experimental.copy();
2551        dst.date = date == null ? null : date.copy();
2552        dst.publisher = publisher == null ? null : publisher.copy();
2553        if (contact != null) {
2554          dst.contact = new ArrayList<ContactDetail>();
2555          for (ContactDetail i : contact)
2556            dst.contact.add(i.copy());
2557        };
2558        dst.description = description == null ? null : description.copy();
2559        if (useContext != null) {
2560          dst.useContext = new ArrayList<UsageContext>();
2561          for (UsageContext i : useContext)
2562            dst.useContext.add(i.copy());
2563        };
2564        if (jurisdiction != null) {
2565          dst.jurisdiction = new ArrayList<CodeableConcept>();
2566          for (CodeableConcept i : jurisdiction)
2567            dst.jurisdiction.add(i.copy());
2568        };
2569        dst.purpose = purpose == null ? null : purpose.copy();
2570        dst.copyright = copyright == null ? null : copyright.copy();
2571        dst.base = base == null ? null : base.copy();
2572        if (parent != null) {
2573          dst.parent = new ArrayList<CanonicalType>();
2574          for (CanonicalType i : parent)
2575            dst.parent.add(i.copy());
2576        };
2577        dst.event = event == null ? null : event.copy();
2578        dst.category = category == null ? null : category.copy();
2579        if (focus != null) {
2580          dst.focus = new ArrayList<MessageDefinitionFocusComponent>();
2581          for (MessageDefinitionFocusComponent i : focus)
2582            dst.focus.add(i.copy());
2583        };
2584        dst.responseRequired = responseRequired == null ? null : responseRequired.copy();
2585        if (allowedResponse != null) {
2586          dst.allowedResponse = new ArrayList<MessageDefinitionAllowedResponseComponent>();
2587          for (MessageDefinitionAllowedResponseComponent i : allowedResponse)
2588            dst.allowedResponse.add(i.copy());
2589        };
2590        return dst;
2591      }
2592
2593      protected MessageDefinition typedCopy() {
2594        return copy();
2595      }
2596
2597      @Override
2598      public boolean equalsDeep(Base other_) {
2599        if (!super.equalsDeep(other_))
2600          return false;
2601        if (!(other_ instanceof MessageDefinition))
2602          return false;
2603        MessageDefinition o = (MessageDefinition) other_;
2604        return compareDeep(identifier, o.identifier, true) && compareDeep(replaces, o.replaces, true) && compareDeep(purpose, o.purpose, true)
2605           && compareDeep(copyright, o.copyright, true) && compareDeep(base, o.base, true) && compareDeep(parent, o.parent, true)
2606           && compareDeep(event, o.event, true) && compareDeep(category, o.category, true) && compareDeep(focus, o.focus, true)
2607           && compareDeep(responseRequired, o.responseRequired, true) && compareDeep(allowedResponse, o.allowedResponse, true)
2608          ;
2609      }
2610
2611      @Override
2612      public boolean equalsShallow(Base other_) {
2613        if (!super.equalsShallow(other_))
2614          return false;
2615        if (!(other_ instanceof MessageDefinition))
2616          return false;
2617        MessageDefinition o = (MessageDefinition) other_;
2618        return compareValues(purpose, o.purpose, true) && compareValues(copyright, o.copyright, true) && compareValues(category, o.category, true)
2619           && compareValues(responseRequired, o.responseRequired, true);
2620      }
2621
2622      public boolean isEmpty() {
2623        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, replaces, purpose
2624          , copyright, base, parent, event, category, focus, responseRequired, allowedResponse
2625          );
2626      }
2627
2628  @Override
2629  public ResourceType getResourceType() {
2630    return ResourceType.MessageDefinition;
2631   }
2632
2633 /**
2634   * Search parameter: <b>date</b>
2635   * <p>
2636   * Description: <b>The message definition publication date</b><br>
2637   * Type: <b>date</b><br>
2638   * Path: <b>MessageDefinition.date</b><br>
2639   * </p>
2640   */
2641  @SearchParamDefinition(name="date", path="MessageDefinition.date", description="The message definition publication date", type="date" )
2642  public static final String SP_DATE = "date";
2643 /**
2644   * <b>Fluent Client</b> search parameter constant for <b>date</b>
2645   * <p>
2646   * Description: <b>The message definition publication date</b><br>
2647   * Type: <b>date</b><br>
2648   * Path: <b>MessageDefinition.date</b><br>
2649   * </p>
2650   */
2651  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
2652
2653 /**
2654   * Search parameter: <b>identifier</b>
2655   * <p>
2656   * Description: <b>External identifier for the message definition</b><br>
2657   * Type: <b>token</b><br>
2658   * Path: <b>MessageDefinition.identifier</b><br>
2659   * </p>
2660   */
2661  @SearchParamDefinition(name="identifier", path="MessageDefinition.identifier", description="External identifier for the message definition", type="token" )
2662  public static final String SP_IDENTIFIER = "identifier";
2663 /**
2664   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
2665   * <p>
2666   * Description: <b>External identifier for the message definition</b><br>
2667   * Type: <b>token</b><br>
2668   * Path: <b>MessageDefinition.identifier</b><br>
2669   * </p>
2670   */
2671  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
2672
2673 /**
2674   * Search parameter: <b>jurisdiction</b>
2675   * <p>
2676   * Description: <b>Intended jurisdiction for the message definition</b><br>
2677   * Type: <b>token</b><br>
2678   * Path: <b>MessageDefinition.jurisdiction</b><br>
2679   * </p>
2680   */
2681  @SearchParamDefinition(name="jurisdiction", path="MessageDefinition.jurisdiction", description="Intended jurisdiction for the message definition", type="token" )
2682  public static final String SP_JURISDICTION = "jurisdiction";
2683 /**
2684   * <b>Fluent Client</b> search parameter constant for <b>jurisdiction</b>
2685   * <p>
2686   * Description: <b>Intended jurisdiction for the message definition</b><br>
2687   * Type: <b>token</b><br>
2688   * Path: <b>MessageDefinition.jurisdiction</b><br>
2689   * </p>
2690   */
2691  public static final ca.uhn.fhir.rest.gclient.TokenClientParam JURISDICTION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_JURISDICTION);
2692
2693 /**
2694   * Search parameter: <b>description</b>
2695   * <p>
2696   * Description: <b>The description of the message definition</b><br>
2697   * Type: <b>string</b><br>
2698   * Path: <b>MessageDefinition.description</b><br>
2699   * </p>
2700   */
2701  @SearchParamDefinition(name="description", path="MessageDefinition.description", description="The description of the message definition", type="string" )
2702  public static final String SP_DESCRIPTION = "description";
2703 /**
2704   * <b>Fluent Client</b> search parameter constant for <b>description</b>
2705   * <p>
2706   * Description: <b>The description of the message definition</b><br>
2707   * Type: <b>string</b><br>
2708   * Path: <b>MessageDefinition.description</b><br>
2709   * </p>
2710   */
2711  public static final ca.uhn.fhir.rest.gclient.StringClientParam DESCRIPTION = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_DESCRIPTION);
2712
2713 /**
2714   * Search parameter: <b>focus</b>
2715   * <p>
2716   * Description: <b>A resource that is a permitted focus of the message</b><br>
2717   * Type: <b>token</b><br>
2718   * Path: <b>MessageDefinition.focus.code</b><br>
2719   * </p>
2720   */
2721  @SearchParamDefinition(name="focus", path="MessageDefinition.focus.code", description="A resource that is a permitted focus of the message", type="token" )
2722  public static final String SP_FOCUS = "focus";
2723 /**
2724   * <b>Fluent Client</b> search parameter constant for <b>focus</b>
2725   * <p>
2726   * Description: <b>A resource that is a permitted focus of the message</b><br>
2727   * Type: <b>token</b><br>
2728   * Path: <b>MessageDefinition.focus.code</b><br>
2729   * </p>
2730   */
2731  public static final ca.uhn.fhir.rest.gclient.TokenClientParam FOCUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_FOCUS);
2732
2733 /**
2734   * Search parameter: <b>title</b>
2735   * <p>
2736   * Description: <b>The human-friendly name of the message definition</b><br>
2737   * Type: <b>string</b><br>
2738   * Path: <b>MessageDefinition.title</b><br>
2739   * </p>
2740   */
2741  @SearchParamDefinition(name="title", path="MessageDefinition.title", description="The human-friendly name of the message definition", type="string" )
2742  public static final String SP_TITLE = "title";
2743 /**
2744   * <b>Fluent Client</b> search parameter constant for <b>title</b>
2745   * <p>
2746   * Description: <b>The human-friendly name of the message definition</b><br>
2747   * Type: <b>string</b><br>
2748   * Path: <b>MessageDefinition.title</b><br>
2749   * </p>
2750   */
2751  public static final ca.uhn.fhir.rest.gclient.StringClientParam TITLE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_TITLE);
2752
2753 /**
2754   * Search parameter: <b>version</b>
2755   * <p>
2756   * Description: <b>The business version of the message definition</b><br>
2757   * Type: <b>token</b><br>
2758   * Path: <b>MessageDefinition.version</b><br>
2759   * </p>
2760   */
2761  @SearchParamDefinition(name="version", path="MessageDefinition.version", description="The business version of the message definition", type="token" )
2762  public static final String SP_VERSION = "version";
2763 /**
2764   * <b>Fluent Client</b> search parameter constant for <b>version</b>
2765   * <p>
2766   * Description: <b>The business version of the message definition</b><br>
2767   * Type: <b>token</b><br>
2768   * Path: <b>MessageDefinition.version</b><br>
2769   * </p>
2770   */
2771  public static final ca.uhn.fhir.rest.gclient.TokenClientParam VERSION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_VERSION);
2772
2773 /**
2774   * Search parameter: <b>url</b>
2775   * <p>
2776   * Description: <b>The uri that identifies the message definition</b><br>
2777   * Type: <b>uri</b><br>
2778   * Path: <b>MessageDefinition.url</b><br>
2779   * </p>
2780   */
2781  @SearchParamDefinition(name="url", path="MessageDefinition.url", description="The uri that identifies the message definition", type="uri" )
2782  public static final String SP_URL = "url";
2783 /**
2784   * <b>Fluent Client</b> search parameter constant for <b>url</b>
2785   * <p>
2786   * Description: <b>The uri that identifies the message definition</b><br>
2787   * Type: <b>uri</b><br>
2788   * Path: <b>MessageDefinition.url</b><br>
2789   * </p>
2790   */
2791  public static final ca.uhn.fhir.rest.gclient.UriClientParam URL = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_URL);
2792
2793 /**
2794   * Search parameter: <b>name</b>
2795   * <p>
2796   * Description: <b>Computationally friendly name of the message definition</b><br>
2797   * Type: <b>string</b><br>
2798   * Path: <b>MessageDefinition.name</b><br>
2799   * </p>
2800   */
2801  @SearchParamDefinition(name="name", path="MessageDefinition.name", description="Computationally friendly name of the message definition", type="string" )
2802  public static final String SP_NAME = "name";
2803 /**
2804   * <b>Fluent Client</b> search parameter constant for <b>name</b>
2805   * <p>
2806   * Description: <b>Computationally friendly name of the message definition</b><br>
2807   * Type: <b>string</b><br>
2808   * Path: <b>MessageDefinition.name</b><br>
2809   * </p>
2810   */
2811  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_NAME);
2812
2813 /**
2814   * Search parameter: <b>publisher</b>
2815   * <p>
2816   * Description: <b>Name of the publisher of the message definition</b><br>
2817   * Type: <b>string</b><br>
2818   * Path: <b>MessageDefinition.publisher</b><br>
2819   * </p>
2820   */
2821  @SearchParamDefinition(name="publisher", path="MessageDefinition.publisher", description="Name of the publisher of the message definition", type="string" )
2822  public static final String SP_PUBLISHER = "publisher";
2823 /**
2824   * <b>Fluent Client</b> search parameter constant for <b>publisher</b>
2825   * <p>
2826   * Description: <b>Name of the publisher of the message definition</b><br>
2827   * Type: <b>string</b><br>
2828   * Path: <b>MessageDefinition.publisher</b><br>
2829   * </p>
2830   */
2831  public static final ca.uhn.fhir.rest.gclient.StringClientParam PUBLISHER = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_PUBLISHER);
2832
2833 /**
2834   * Search parameter: <b>event</b>
2835   * <p>
2836   * Description: <b>The event that triggers the message or link to the event definition.</b><br>
2837   * Type: <b>token</b><br>
2838   * Path: <b>MessageDefinition.event[x]</b><br>
2839   * </p>
2840   */
2841  @SearchParamDefinition(name="event", path="MessageDefinition.event", description="The event that triggers the message or link to the event definition.", type="token" )
2842  public static final String SP_EVENT = "event";
2843 /**
2844   * <b>Fluent Client</b> search parameter constant for <b>event</b>
2845   * <p>
2846   * Description: <b>The event that triggers the message or link to the event definition.</b><br>
2847   * Type: <b>token</b><br>
2848   * Path: <b>MessageDefinition.event[x]</b><br>
2849   * </p>
2850   */
2851  public static final ca.uhn.fhir.rest.gclient.TokenClientParam EVENT = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_EVENT);
2852
2853 /**
2854   * Search parameter: <b>category</b>
2855   * <p>
2856   * Description: <b>The behavior associated with the message</b><br>
2857   * Type: <b>token</b><br>
2858   * Path: <b>MessageDefinition.category</b><br>
2859   * </p>
2860   */
2861  @SearchParamDefinition(name="category", path="MessageDefinition.category", description="The behavior associated with the message", type="token" )
2862  public static final String SP_CATEGORY = "category";
2863 /**
2864   * <b>Fluent Client</b> search parameter constant for <b>category</b>
2865   * <p>
2866   * Description: <b>The behavior associated with the message</b><br>
2867   * Type: <b>token</b><br>
2868   * Path: <b>MessageDefinition.category</b><br>
2869   * </p>
2870   */
2871  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CATEGORY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CATEGORY);
2872
2873 /**
2874   * Search parameter: <b>status</b>
2875   * <p>
2876   * Description: <b>The current status of the message definition</b><br>
2877   * Type: <b>token</b><br>
2878   * Path: <b>MessageDefinition.status</b><br>
2879   * </p>
2880   */
2881  @SearchParamDefinition(name="status", path="MessageDefinition.status", description="The current status of the message definition", type="token" )
2882  public static final String SP_STATUS = "status";
2883 /**
2884   * <b>Fluent Client</b> search parameter constant for <b>status</b>
2885   * <p>
2886   * Description: <b>The current status of the message definition</b><br>
2887   * Type: <b>token</b><br>
2888   * Path: <b>MessageDefinition.status</b><br>
2889   * </p>
2890   */
2891  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
2892
2893
2894}
2895