001package org.hl7.fhir.r4.model;
002
003/*
004  Copyright (c) 2011+, HL7, Inc.
005  All rights reserved.
006  
007  Redistribution and use in source and binary forms, with or without modification, 
008  are permitted provided that the following conditions are met:
009  
010   * Redistributions of source code must retain the above copyright notice, this 
011     list of conditions and the following disclaimer.
012   * Redistributions in binary form must reproduce the above copyright notice, 
013     this list of conditions and the following disclaimer in the documentation 
014     and/or other materials provided with the distribution.
015   * Neither the name of HL7 nor the names of its contributors may be used to 
016     endorse or promote products derived from this software without specific 
017     prior written permission.
018  
019  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
020  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
021  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
022  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
023  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
024  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
025  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
026  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
027  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
028  POSSIBILITY OF SUCH DAMAGE.
029  
030*/
031
032// Generated on Tue, May 12, 2020 07:26+1000 for FHIR v4.0.1
033import java.util.ArrayList;
034import java.util.Date;
035import java.util.List;
036
037import org.hl7.fhir.exceptions.FHIRException;
038import org.hl7.fhir.r4.model.Enumerations.PublicationStatus;
039import org.hl7.fhir.r4.model.Enumerations.PublicationStatusEnumFactory;
040import org.hl7.fhir.utilities.Utilities;
041
042import ca.uhn.fhir.model.api.annotation.Child;
043import ca.uhn.fhir.model.api.annotation.ChildOrder;
044import ca.uhn.fhir.model.api.annotation.Description;
045import ca.uhn.fhir.model.api.annotation.ResourceDef;
046import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
047
048/**
049 * The EventDefinition resource provides a reusable description of when a
050 * particular event can occur.
051 */
052@ResourceDef(name = "EventDefinition", profile = "http://hl7.org/fhir/StructureDefinition/EventDefinition")
053@ChildOrder(names = { "url", "identifier", "version", "name", "title", "subtitle", "status", "experimental",
054    "subject[x]", "date", "publisher", "contact", "description", "useContext", "jurisdiction", "purpose", "usage",
055    "copyright", "approvalDate", "lastReviewDate", "effectivePeriod", "topic", "author", "editor", "reviewer",
056    "endorser", "relatedArtifact", "trigger" })
057public class EventDefinition extends MetadataResource {
058
059  /**
060   * A formal identifier that is used to identify this event definition when it is
061   * represented in other formats, or referenced in a specification, model, design
062   * or an instance.
063   */
064  @Child(name = "identifier", type = {
065      Identifier.class }, order = 0, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = true)
066  @Description(shortDefinition = "Additional identifier for the event definition", formalDefinition = "A formal identifier that is used to identify this event definition when it is represented in other formats, or referenced in a specification, model, design or an instance.")
067  protected List<Identifier> identifier;
068
069  /**
070   * An explanatory or alternate title for the event definition giving additional
071   * information about its content.
072   */
073  @Child(name = "subtitle", type = { StringType.class }, order = 1, min = 0, max = 1, modifier = false, summary = false)
074  @Description(shortDefinition = "Subordinate title of the event definition", formalDefinition = "An explanatory or alternate title for the event definition giving additional information about its content.")
075  protected StringType subtitle;
076
077  /**
078   * A code or group definition that describes the intended subject of the event
079   * definition.
080   */
081  @Child(name = "subject", type = { CodeableConcept.class,
082      Group.class }, order = 2, min = 0, max = 1, modifier = false, summary = false)
083  @Description(shortDefinition = "Type of individual the event definition is focused on", formalDefinition = "A code or group definition that describes the intended subject of the event definition.")
084  @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/subject-type")
085  protected Type subject;
086
087  /**
088   * Explanation of why this event definition is needed and why it has been
089   * designed as it has.
090   */
091  @Child(name = "purpose", type = {
092      MarkdownType.class }, order = 3, min = 0, max = 1, modifier = false, summary = false)
093  @Description(shortDefinition = "Why this event definition is defined", formalDefinition = "Explanation of why this event definition is needed and why it has been designed as it has.")
094  protected MarkdownType purpose;
095
096  /**
097   * A detailed description of how the event definition is used from a clinical
098   * perspective.
099   */
100  @Child(name = "usage", type = { StringType.class }, order = 4, min = 0, max = 1, modifier = false, summary = false)
101  @Description(shortDefinition = "Describes the clinical usage of the event definition", formalDefinition = "A detailed description of how the event definition is used from a clinical perspective.")
102  protected StringType usage;
103
104  /**
105   * A copyright statement relating to the event definition and/or its contents.
106   * Copyright statements are generally legal restrictions on the use and
107   * publishing of the event definition.
108   */
109  @Child(name = "copyright", type = {
110      MarkdownType.class }, order = 5, min = 0, max = 1, modifier = false, summary = false)
111  @Description(shortDefinition = "Use and/or publishing restrictions", formalDefinition = "A copyright statement relating to the event definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the event definition.")
112  protected MarkdownType copyright;
113
114  /**
115   * The date on which the resource content was approved by the publisher.
116   * Approval happens once when the content is officially approved for usage.
117   */
118  @Child(name = "approvalDate", type = {
119      DateType.class }, order = 6, min = 0, max = 1, modifier = false, summary = true)
120  @Description(shortDefinition = "When the event definition was approved by publisher", formalDefinition = "The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.")
121  protected DateType approvalDate;
122
123  /**
124   * The date on which the resource content was last reviewed. Review happens
125   * periodically after approval but does not change the original approval date.
126   */
127  @Child(name = "lastReviewDate", type = {
128      DateType.class }, order = 7, min = 0, max = 1, modifier = false, summary = true)
129  @Description(shortDefinition = "When the event definition was last reviewed", formalDefinition = "The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.")
130  protected DateType lastReviewDate;
131
132  /**
133   * The period during which the event definition content was or is planned to be
134   * in active use.
135   */
136  @Child(name = "effectivePeriod", type = {
137      Period.class }, order = 8, min = 0, max = 1, modifier = false, summary = true)
138  @Description(shortDefinition = "When the event definition is expected to be used", formalDefinition = "The period during which the event definition content was or is planned to be in active use.")
139  protected Period effectivePeriod;
140
141  /**
142   * Descriptive topics related to the module. Topics provide a high-level
143   * categorization of the module that can be useful for filtering and searching.
144   */
145  @Child(name = "topic", type = {
146      CodeableConcept.class }, order = 9, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
147  @Description(shortDefinition = "E.g. Education, Treatment, Assessment, etc.", formalDefinition = "Descriptive topics related to the module. Topics provide a high-level categorization of the module that can be useful for filtering and searching.")
148  @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/definition-topic")
149  protected List<CodeableConcept> topic;
150
151  /**
152   * An individiual or organization primarily involved in the creation and
153   * maintenance of the content.
154   */
155  @Child(name = "author", type = {
156      ContactDetail.class }, order = 10, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
157  @Description(shortDefinition = "Who authored the content", formalDefinition = "An individiual or organization primarily involved in the creation and maintenance of the content.")
158  protected List<ContactDetail> author;
159
160  /**
161   * An individual or organization primarily responsible for internal coherence of
162   * the content.
163   */
164  @Child(name = "editor", type = {
165      ContactDetail.class }, order = 11, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
166  @Description(shortDefinition = "Who edited the content", formalDefinition = "An individual or organization primarily responsible for internal coherence of the content.")
167  protected List<ContactDetail> editor;
168
169  /**
170   * An individual or organization primarily responsible for review of some aspect
171   * of the content.
172   */
173  @Child(name = "reviewer", type = {
174      ContactDetail.class }, order = 12, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
175  @Description(shortDefinition = "Who reviewed the content", formalDefinition = "An individual or organization primarily responsible for review of some aspect of the content.")
176  protected List<ContactDetail> reviewer;
177
178  /**
179   * An individual or organization responsible for officially endorsing the
180   * content for use in some setting.
181   */
182  @Child(name = "endorser", type = {
183      ContactDetail.class }, order = 13, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
184  @Description(shortDefinition = "Who endorsed the content", formalDefinition = "An individual or organization responsible for officially endorsing the content for use in some setting.")
185  protected List<ContactDetail> endorser;
186
187  /**
188   * Related resources such as additional documentation, justification, or
189   * bibliographic references.
190   */
191  @Child(name = "relatedArtifact", type = {
192      RelatedArtifact.class }, order = 14, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
193  @Description(shortDefinition = "Additional documentation, citations, etc.", formalDefinition = "Related resources such as additional documentation, justification, or bibliographic references.")
194  protected List<RelatedArtifact> relatedArtifact;
195
196  /**
197   * The trigger element defines when the event occurs. If more than one trigger
198   * condition is specified, the event fires whenever any one of the trigger
199   * conditions is met.
200   */
201  @Child(name = "trigger", type = {
202      TriggerDefinition.class }, order = 15, min = 1, max = Child.MAX_UNLIMITED, modifier = false, summary = true)
203  @Description(shortDefinition = "\"when\" the event occurs (multiple = 'or')", formalDefinition = "The trigger element defines when the event occurs. If more than one trigger condition is specified, the event fires whenever any one of the trigger conditions is met.")
204  protected List<TriggerDefinition> trigger;
205
206  private static final long serialVersionUID = 1022506246L;
207
208  /**
209   * Constructor
210   */
211  public EventDefinition() {
212    super();
213  }
214
215  /**
216   * Constructor
217   */
218  public EventDefinition(Enumeration<PublicationStatus> status) {
219    super();
220    this.status = status;
221  }
222
223  /**
224   * @return {@link #url} (An absolute URI that is used to identify this event
225   *         definition when it is referenced in a specification, model, design or
226   *         an instance; also called its canonical identifier. This SHOULD be
227   *         globally unique and SHOULD be a literal address at which at which an
228   *         authoritative instance of this event definition is (or will be)
229   *         published. This URL can be the target of a canonical reference. It
230   *         SHALL remain the same when the event definition is stored on
231   *         different servers.). This is the underlying object with id, value and
232   *         extensions. The accessor "getUrl" gives direct access to the value
233   */
234  public UriType getUrlElement() {
235    if (this.url == null)
236      if (Configuration.errorOnAutoCreate())
237        throw new Error("Attempt to auto-create EventDefinition.url");
238      else if (Configuration.doAutoCreate())
239        this.url = new UriType(); // bb
240    return this.url;
241  }
242
243  public boolean hasUrlElement() {
244    return this.url != null && !this.url.isEmpty();
245  }
246
247  public boolean hasUrl() {
248    return this.url != null && !this.url.isEmpty();
249  }
250
251  /**
252   * @param value {@link #url} (An absolute URI that is used to identify this
253   *              event definition when it is referenced in a specification,
254   *              model, design or an instance; also called its canonical
255   *              identifier. This SHOULD be globally unique and SHOULD be a
256   *              literal address at which at which an authoritative instance of
257   *              this event definition is (or will be) published. This URL can be
258   *              the target of a canonical reference. It SHALL remain the same
259   *              when the event definition is stored on different servers.). This
260   *              is the underlying object with id, value and extensions. The
261   *              accessor "getUrl" gives direct access to the value
262   */
263  public EventDefinition setUrlElement(UriType value) {
264    this.url = value;
265    return this;
266  }
267
268  /**
269   * @return An absolute URI that is used to identify this event definition when
270   *         it is referenced in a specification, model, design or an instance;
271   *         also called its canonical identifier. This SHOULD be globally unique
272   *         and SHOULD be a literal address at which at which an authoritative
273   *         instance of this event definition is (or will be) published. This URL
274   *         can be the target of a canonical reference. It SHALL remain the same
275   *         when the event definition is stored on different servers.
276   */
277  public String getUrl() {
278    return this.url == null ? null : this.url.getValue();
279  }
280
281  /**
282   * @param value An absolute URI that is used to identify this event definition
283   *              when it is referenced in a specification, model, design or an
284   *              instance; also called its canonical identifier. This SHOULD be
285   *              globally unique and SHOULD be a literal address at which at
286   *              which an authoritative instance of this event definition is (or
287   *              will be) published. This URL can be the target of a canonical
288   *              reference. It SHALL remain the same when the event definition is
289   *              stored on different servers.
290   */
291  public EventDefinition setUrl(String value) {
292    if (Utilities.noString(value))
293      this.url = null;
294    else {
295      if (this.url == null)
296        this.url = new UriType();
297      this.url.setValue(value);
298    }
299    return this;
300  }
301
302  /**
303   * @return {@link #identifier} (A formal identifier that is used to identify
304   *         this event definition when it is represented in other formats, or
305   *         referenced in a specification, model, design or an instance.)
306   */
307  public List<Identifier> getIdentifier() {
308    if (this.identifier == null)
309      this.identifier = new ArrayList<Identifier>();
310    return this.identifier;
311  }
312
313  /**
314   * @return Returns a reference to <code>this</code> for easy method chaining
315   */
316  public EventDefinition setIdentifier(List<Identifier> theIdentifier) {
317    this.identifier = theIdentifier;
318    return this;
319  }
320
321  public boolean hasIdentifier() {
322    if (this.identifier == null)
323      return false;
324    for (Identifier item : this.identifier)
325      if (!item.isEmpty())
326        return true;
327    return false;
328  }
329
330  public Identifier addIdentifier() { // 3
331    Identifier t = new Identifier();
332    if (this.identifier == null)
333      this.identifier = new ArrayList<Identifier>();
334    this.identifier.add(t);
335    return t;
336  }
337
338  public EventDefinition addIdentifier(Identifier t) { // 3
339    if (t == null)
340      return this;
341    if (this.identifier == null)
342      this.identifier = new ArrayList<Identifier>();
343    this.identifier.add(t);
344    return this;
345  }
346
347  /**
348   * @return The first repetition of repeating field {@link #identifier}, creating
349   *         it if it does not already exist
350   */
351  public Identifier getIdentifierFirstRep() {
352    if (getIdentifier().isEmpty()) {
353      addIdentifier();
354    }
355    return getIdentifier().get(0);
356  }
357
358  /**
359   * @return {@link #version} (The identifier that is used to identify this
360   *         version of the event definition when it is referenced in a
361   *         specification, model, design or instance. This is an arbitrary value
362   *         managed by the event definition author and is not expected to be
363   *         globally unique. For example, it might be a timestamp (e.g. yyyymmdd)
364   *         if a managed version is not available. There is also no expectation
365   *         that versions can be placed in a lexicographical sequence.). This is
366   *         the underlying object with id, value and extensions. The accessor
367   *         "getVersion" gives direct access to the value
368   */
369  public StringType getVersionElement() {
370    if (this.version == null)
371      if (Configuration.errorOnAutoCreate())
372        throw new Error("Attempt to auto-create EventDefinition.version");
373      else if (Configuration.doAutoCreate())
374        this.version = new StringType(); // bb
375    return this.version;
376  }
377
378  public boolean hasVersionElement() {
379    return this.version != null && !this.version.isEmpty();
380  }
381
382  public boolean hasVersion() {
383    return this.version != null && !this.version.isEmpty();
384  }
385
386  /**
387   * @param value {@link #version} (The identifier that is used to identify this
388   *              version of the event definition when it is referenced in a
389   *              specification, model, design or instance. This is an arbitrary
390   *              value managed by the event definition author and is not expected
391   *              to be globally unique. For example, it might be a timestamp
392   *              (e.g. yyyymmdd) if a managed version is not available. There is
393   *              also no expectation that versions can be placed in a
394   *              lexicographical sequence.). This is the underlying object with
395   *              id, value and extensions. The accessor "getVersion" gives direct
396   *              access to the value
397   */
398  public EventDefinition setVersionElement(StringType value) {
399    this.version = value;
400    return this;
401  }
402
403  /**
404   * @return The identifier that is used to identify this version of the event
405   *         definition when it is referenced in a specification, model, design or
406   *         instance. This is an arbitrary value managed by the event definition
407   *         author and is not expected to be globally unique. For example, it
408   *         might be a timestamp (e.g. yyyymmdd) if a managed version is not
409   *         available. There is also no expectation that versions can be placed
410   *         in a lexicographical sequence.
411   */
412  public String getVersion() {
413    return this.version == null ? null : this.version.getValue();
414  }
415
416  /**
417   * @param value The identifier that is used to identify this version of the
418   *              event definition when it is referenced in a specification,
419   *              model, design or instance. This is an arbitrary value managed by
420   *              the event definition author and is not expected to be globally
421   *              unique. For example, it might be a timestamp (e.g. yyyymmdd) if
422   *              a managed version is not available. There is also no expectation
423   *              that versions can be placed in a lexicographical sequence.
424   */
425  public EventDefinition setVersion(String value) {
426    if (Utilities.noString(value))
427      this.version = null;
428    else {
429      if (this.version == null)
430        this.version = new StringType();
431      this.version.setValue(value);
432    }
433    return this;
434  }
435
436  /**
437   * @return {@link #name} (A natural language name identifying the event
438   *         definition. This name should be usable as an identifier for the
439   *         module by machine processing applications such as code generation.).
440   *         This is the underlying object with id, value and extensions. The
441   *         accessor "getName" gives direct access to the value
442   */
443  public StringType getNameElement() {
444    if (this.name == null)
445      if (Configuration.errorOnAutoCreate())
446        throw new Error("Attempt to auto-create EventDefinition.name");
447      else if (Configuration.doAutoCreate())
448        this.name = new StringType(); // bb
449    return this.name;
450  }
451
452  public boolean hasNameElement() {
453    return this.name != null && !this.name.isEmpty();
454  }
455
456  public boolean hasName() {
457    return this.name != null && !this.name.isEmpty();
458  }
459
460  /**
461   * @param value {@link #name} (A natural language name identifying the event
462   *              definition. This name should be usable as an identifier for the
463   *              module by machine processing applications such as code
464   *              generation.). This is the underlying object with id, value and
465   *              extensions. The accessor "getName" gives direct access to the
466   *              value
467   */
468  public EventDefinition setNameElement(StringType value) {
469    this.name = value;
470    return this;
471  }
472
473  /**
474   * @return A natural language name identifying the event definition. This name
475   *         should be usable as an identifier for the module by machine
476   *         processing applications such as code generation.
477   */
478  public String getName() {
479    return this.name == null ? null : this.name.getValue();
480  }
481
482  /**
483   * @param value A natural language name identifying the event definition. This
484   *              name should be usable as an identifier for the module by machine
485   *              processing applications such as code generation.
486   */
487  public EventDefinition setName(String value) {
488    if (Utilities.noString(value))
489      this.name = null;
490    else {
491      if (this.name == null)
492        this.name = new StringType();
493      this.name.setValue(value);
494    }
495    return this;
496  }
497
498  /**
499   * @return {@link #title} (A short, descriptive, user-friendly title for the
500   *         event definition.). This is the underlying object with id, value and
501   *         extensions. The accessor "getTitle" gives direct access to the value
502   */
503  public StringType getTitleElement() {
504    if (this.title == null)
505      if (Configuration.errorOnAutoCreate())
506        throw new Error("Attempt to auto-create EventDefinition.title");
507      else if (Configuration.doAutoCreate())
508        this.title = new StringType(); // bb
509    return this.title;
510  }
511
512  public boolean hasTitleElement() {
513    return this.title != null && !this.title.isEmpty();
514  }
515
516  public boolean hasTitle() {
517    return this.title != null && !this.title.isEmpty();
518  }
519
520  /**
521   * @param value {@link #title} (A short, descriptive, user-friendly title for
522   *              the event definition.). This is the underlying object with id,
523   *              value and extensions. The accessor "getTitle" gives direct
524   *              access to the value
525   */
526  public EventDefinition setTitleElement(StringType value) {
527    this.title = value;
528    return this;
529  }
530
531  /**
532   * @return A short, descriptive, user-friendly title for the event definition.
533   */
534  public String getTitle() {
535    return this.title == null ? null : this.title.getValue();
536  }
537
538  /**
539   * @param value A short, descriptive, user-friendly title for the event
540   *              definition.
541   */
542  public EventDefinition setTitle(String value) {
543    if (Utilities.noString(value))
544      this.title = null;
545    else {
546      if (this.title == null)
547        this.title = new StringType();
548      this.title.setValue(value);
549    }
550    return this;
551  }
552
553  /**
554   * @return {@link #subtitle} (An explanatory or alternate title for the event
555   *         definition giving additional information about its content.). This is
556   *         the underlying object with id, value and extensions. The accessor
557   *         "getSubtitle" gives direct access to the value
558   */
559  public StringType getSubtitleElement() {
560    if (this.subtitle == null)
561      if (Configuration.errorOnAutoCreate())
562        throw new Error("Attempt to auto-create EventDefinition.subtitle");
563      else if (Configuration.doAutoCreate())
564        this.subtitle = new StringType(); // bb
565    return this.subtitle;
566  }
567
568  public boolean hasSubtitleElement() {
569    return this.subtitle != null && !this.subtitle.isEmpty();
570  }
571
572  public boolean hasSubtitle() {
573    return this.subtitle != null && !this.subtitle.isEmpty();
574  }
575
576  /**
577   * @param value {@link #subtitle} (An explanatory or alternate title for the
578   *              event definition giving additional information about its
579   *              content.). This is the underlying object with id, value and
580   *              extensions. The accessor "getSubtitle" gives direct access to
581   *              the value
582   */
583  public EventDefinition setSubtitleElement(StringType value) {
584    this.subtitle = value;
585    return this;
586  }
587
588  /**
589   * @return An explanatory or alternate title for the event definition giving
590   *         additional information about its content.
591   */
592  public String getSubtitle() {
593    return this.subtitle == null ? null : this.subtitle.getValue();
594  }
595
596  /**
597   * @param value An explanatory or alternate title for the event definition
598   *              giving additional information about its content.
599   */
600  public EventDefinition setSubtitle(String value) {
601    if (Utilities.noString(value))
602      this.subtitle = null;
603    else {
604      if (this.subtitle == null)
605        this.subtitle = new StringType();
606      this.subtitle.setValue(value);
607    }
608    return this;
609  }
610
611  /**
612   * @return {@link #status} (The status of this event definition. Enables
613   *         tracking the life-cycle of the content.). This is the underlying
614   *         object with id, value and extensions. The accessor "getStatus" gives
615   *         direct access to the value
616   */
617  public Enumeration<PublicationStatus> getStatusElement() {
618    if (this.status == null)
619      if (Configuration.errorOnAutoCreate())
620        throw new Error("Attempt to auto-create EventDefinition.status");
621      else if (Configuration.doAutoCreate())
622        this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory()); // bb
623    return this.status;
624  }
625
626  public boolean hasStatusElement() {
627    return this.status != null && !this.status.isEmpty();
628  }
629
630  public boolean hasStatus() {
631    return this.status != null && !this.status.isEmpty();
632  }
633
634  /**
635   * @param value {@link #status} (The status of this event definition. Enables
636   *              tracking the life-cycle of the content.). This is the underlying
637   *              object with id, value and extensions. The accessor "getStatus"
638   *              gives direct access to the value
639   */
640  public EventDefinition setStatusElement(Enumeration<PublicationStatus> value) {
641    this.status = value;
642    return this;
643  }
644
645  /**
646   * @return The status of this event definition. Enables tracking the life-cycle
647   *         of the content.
648   */
649  public PublicationStatus getStatus() {
650    return this.status == null ? null : this.status.getValue();
651  }
652
653  /**
654   * @param value The status of this event definition. Enables tracking the
655   *              life-cycle of the content.
656   */
657  public EventDefinition setStatus(PublicationStatus value) {
658    if (this.status == null)
659      this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory());
660    this.status.setValue(value);
661    return this;
662  }
663
664  /**
665   * @return {@link #experimental} (A Boolean value to indicate that this event
666   *         definition is authored for testing purposes (or
667   *         education/evaluation/marketing) and is not intended to be used for
668   *         genuine usage.). This is the underlying object with id, value and
669   *         extensions. The accessor "getExperimental" gives direct access to the
670   *         value
671   */
672  public BooleanType getExperimentalElement() {
673    if (this.experimental == null)
674      if (Configuration.errorOnAutoCreate())
675        throw new Error("Attempt to auto-create EventDefinition.experimental");
676      else if (Configuration.doAutoCreate())
677        this.experimental = new BooleanType(); // bb
678    return this.experimental;
679  }
680
681  public boolean hasExperimentalElement() {
682    return this.experimental != null && !this.experimental.isEmpty();
683  }
684
685  public boolean hasExperimental() {
686    return this.experimental != null && !this.experimental.isEmpty();
687  }
688
689  /**
690   * @param value {@link #experimental} (A Boolean value to indicate that this
691   *              event definition is authored for testing purposes (or
692   *              education/evaluation/marketing) and is not intended to be used
693   *              for genuine usage.). This is the underlying object with id,
694   *              value and extensions. The accessor "getExperimental" gives
695   *              direct access to the value
696   */
697  public EventDefinition setExperimentalElement(BooleanType value) {
698    this.experimental = value;
699    return this;
700  }
701
702  /**
703   * @return A Boolean value to indicate that this event definition is authored
704   *         for testing purposes (or education/evaluation/marketing) and is not
705   *         intended to be used for genuine usage.
706   */
707  public boolean getExperimental() {
708    return this.experimental == null || this.experimental.isEmpty() ? false : this.experimental.getValue();
709  }
710
711  /**
712   * @param value A Boolean value to indicate that this event definition is
713   *              authored for testing purposes (or
714   *              education/evaluation/marketing) and is not intended to be used
715   *              for genuine usage.
716   */
717  public EventDefinition setExperimental(boolean value) {
718    if (this.experimental == null)
719      this.experimental = new BooleanType();
720    this.experimental.setValue(value);
721    return this;
722  }
723
724  /**
725   * @return {@link #subject} (A code or group definition that describes the
726   *         intended subject of the event definition.)
727   */
728  public Type getSubject() {
729    return this.subject;
730  }
731
732  /**
733   * @return {@link #subject} (A code or group definition that describes the
734   *         intended subject of the event definition.)
735   */
736  public CodeableConcept getSubjectCodeableConcept() throws FHIRException {
737    if (this.subject == null)
738      this.subject = new CodeableConcept();
739    if (!(this.subject instanceof CodeableConcept))
740      throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "
741          + this.subject.getClass().getName() + " was encountered");
742    return (CodeableConcept) this.subject;
743  }
744
745  public boolean hasSubjectCodeableConcept() {
746    return this != null && this.subject instanceof CodeableConcept;
747  }
748
749  /**
750   * @return {@link #subject} (A code or group definition that describes the
751   *         intended subject of the event definition.)
752   */
753  public Reference getSubjectReference() throws FHIRException {
754    if (this.subject == null)
755      this.subject = new Reference();
756    if (!(this.subject instanceof Reference))
757      throw new FHIRException("Type mismatch: the type Reference was expected, but " + this.subject.getClass().getName()
758          + " was encountered");
759    return (Reference) this.subject;
760  }
761
762  public boolean hasSubjectReference() {
763    return this != null && this.subject instanceof Reference;
764  }
765
766  public boolean hasSubject() {
767    return this.subject != null && !this.subject.isEmpty();
768  }
769
770  /**
771   * @param value {@link #subject} (A code or group definition that describes the
772   *              intended subject of the event definition.)
773   */
774  public EventDefinition setSubject(Type value) {
775    if (value != null && !(value instanceof CodeableConcept || value instanceof Reference))
776      throw new Error("Not the right type for EventDefinition.subject[x]: " + value.fhirType());
777    this.subject = value;
778    return this;
779  }
780
781  /**
782   * @return {@link #date} (The date (and optionally time) when the event
783   *         definition was published. The date must change when the business
784   *         version changes and it must change if the status code changes. In
785   *         addition, it should change when the substantive content of the event
786   *         definition changes.). This is the underlying object with id, value
787   *         and extensions. The accessor "getDate" gives direct access to the
788   *         value
789   */
790  public DateTimeType getDateElement() {
791    if (this.date == null)
792      if (Configuration.errorOnAutoCreate())
793        throw new Error("Attempt to auto-create EventDefinition.date");
794      else if (Configuration.doAutoCreate())
795        this.date = new DateTimeType(); // bb
796    return this.date;
797  }
798
799  public boolean hasDateElement() {
800    return this.date != null && !this.date.isEmpty();
801  }
802
803  public boolean hasDate() {
804    return this.date != null && !this.date.isEmpty();
805  }
806
807  /**
808   * @param value {@link #date} (The date (and optionally time) when the event
809   *              definition was published. The date must change when the business
810   *              version changes and it must change if the status code changes.
811   *              In addition, it should change when the substantive content of
812   *              the event definition changes.). This is the underlying object
813   *              with id, value and extensions. The accessor "getDate" gives
814   *              direct access to the value
815   */
816  public EventDefinition setDateElement(DateTimeType value) {
817    this.date = value;
818    return this;
819  }
820
821  /**
822   * @return The date (and optionally time) when the event definition was
823   *         published. The date must change when the business version changes and
824   *         it must change if the status code changes. In addition, it should
825   *         change when the substantive content of the event definition changes.
826   */
827  public Date getDate() {
828    return this.date == null ? null : this.date.getValue();
829  }
830
831  /**
832   * @param value The date (and optionally time) when the event definition was
833   *              published. The date must change when the business version
834   *              changes and it must change if the status code changes. In
835   *              addition, it should change when the substantive content of the
836   *              event definition changes.
837   */
838  public EventDefinition setDate(Date value) {
839    if (value == null)
840      this.date = null;
841    else {
842      if (this.date == null)
843        this.date = new DateTimeType();
844      this.date.setValue(value);
845    }
846    return this;
847  }
848
849  /**
850   * @return {@link #publisher} (The name of the organization or individual that
851   *         published the event definition.). This is the underlying object with
852   *         id, value and extensions. The accessor "getPublisher" gives direct
853   *         access to the value
854   */
855  public StringType getPublisherElement() {
856    if (this.publisher == null)
857      if (Configuration.errorOnAutoCreate())
858        throw new Error("Attempt to auto-create EventDefinition.publisher");
859      else if (Configuration.doAutoCreate())
860        this.publisher = new StringType(); // bb
861    return this.publisher;
862  }
863
864  public boolean hasPublisherElement() {
865    return this.publisher != null && !this.publisher.isEmpty();
866  }
867
868  public boolean hasPublisher() {
869    return this.publisher != null && !this.publisher.isEmpty();
870  }
871
872  /**
873   * @param value {@link #publisher} (The name of the organization or individual
874   *              that published the event definition.). This is the underlying
875   *              object with id, value and extensions. The accessor
876   *              "getPublisher" gives direct access to the value
877   */
878  public EventDefinition setPublisherElement(StringType value) {
879    this.publisher = value;
880    return this;
881  }
882
883  /**
884   * @return The name of the organization or individual that published the event
885   *         definition.
886   */
887  public String getPublisher() {
888    return this.publisher == null ? null : this.publisher.getValue();
889  }
890
891  /**
892   * @param value The name of the organization or individual that published the
893   *              event definition.
894   */
895  public EventDefinition setPublisher(String value) {
896    if (Utilities.noString(value))
897      this.publisher = null;
898    else {
899      if (this.publisher == null)
900        this.publisher = new StringType();
901      this.publisher.setValue(value);
902    }
903    return this;
904  }
905
906  /**
907   * @return {@link #contact} (Contact details to assist a user in finding and
908   *         communicating with the publisher.)
909   */
910  public List<ContactDetail> getContact() {
911    if (this.contact == null)
912      this.contact = new ArrayList<ContactDetail>();
913    return this.contact;
914  }
915
916  /**
917   * @return Returns a reference to <code>this</code> for easy method chaining
918   */
919  public EventDefinition setContact(List<ContactDetail> theContact) {
920    this.contact = theContact;
921    return this;
922  }
923
924  public boolean hasContact() {
925    if (this.contact == null)
926      return false;
927    for (ContactDetail item : this.contact)
928      if (!item.isEmpty())
929        return true;
930    return false;
931  }
932
933  public ContactDetail addContact() { // 3
934    ContactDetail t = new ContactDetail();
935    if (this.contact == null)
936      this.contact = new ArrayList<ContactDetail>();
937    this.contact.add(t);
938    return t;
939  }
940
941  public EventDefinition addContact(ContactDetail t) { // 3
942    if (t == null)
943      return this;
944    if (this.contact == null)
945      this.contact = new ArrayList<ContactDetail>();
946    this.contact.add(t);
947    return this;
948  }
949
950  /**
951   * @return The first repetition of repeating field {@link #contact}, creating it
952   *         if it does not already exist
953   */
954  public ContactDetail getContactFirstRep() {
955    if (getContact().isEmpty()) {
956      addContact();
957    }
958    return getContact().get(0);
959  }
960
961  /**
962   * @return {@link #description} (A free text natural language description of the
963   *         event definition from a consumer's perspective.). This is the
964   *         underlying object with id, value and extensions. The accessor
965   *         "getDescription" gives direct access to the value
966   */
967  public MarkdownType getDescriptionElement() {
968    if (this.description == null)
969      if (Configuration.errorOnAutoCreate())
970        throw new Error("Attempt to auto-create EventDefinition.description");
971      else if (Configuration.doAutoCreate())
972        this.description = new MarkdownType(); // bb
973    return this.description;
974  }
975
976  public boolean hasDescriptionElement() {
977    return this.description != null && !this.description.isEmpty();
978  }
979
980  public boolean hasDescription() {
981    return this.description != null && !this.description.isEmpty();
982  }
983
984  /**
985   * @param value {@link #description} (A free text natural language description
986   *              of the event definition from a consumer's perspective.). This is
987   *              the underlying object with id, value and extensions. The
988   *              accessor "getDescription" gives direct access to the value
989   */
990  public EventDefinition setDescriptionElement(MarkdownType value) {
991    this.description = value;
992    return this;
993  }
994
995  /**
996   * @return A free text natural language description of the event definition from
997   *         a consumer's perspective.
998   */
999  public String getDescription() {
1000    return this.description == null ? null : this.description.getValue();
1001  }
1002
1003  /**
1004   * @param value A free text natural language description of the event definition
1005   *              from a consumer's perspective.
1006   */
1007  public EventDefinition setDescription(String value) {
1008    if (value == null)
1009      this.description = null;
1010    else {
1011      if (this.description == null)
1012        this.description = new MarkdownType();
1013      this.description.setValue(value);
1014    }
1015    return this;
1016  }
1017
1018  /**
1019   * @return {@link #useContext} (The content was developed with a focus and
1020   *         intent of supporting the contexts that are listed. These contexts may
1021   *         be general categories (gender, age, ...) or may be references to
1022   *         specific programs (insurance plans, studies, ...) and may be used to
1023   *         assist with indexing and searching for appropriate event definition
1024   *         instances.)
1025   */
1026  public List<UsageContext> getUseContext() {
1027    if (this.useContext == null)
1028      this.useContext = new ArrayList<UsageContext>();
1029    return this.useContext;
1030  }
1031
1032  /**
1033   * @return Returns a reference to <code>this</code> for easy method chaining
1034   */
1035  public EventDefinition setUseContext(List<UsageContext> theUseContext) {
1036    this.useContext = theUseContext;
1037    return this;
1038  }
1039
1040  public boolean hasUseContext() {
1041    if (this.useContext == null)
1042      return false;
1043    for (UsageContext item : this.useContext)
1044      if (!item.isEmpty())
1045        return true;
1046    return false;
1047  }
1048
1049  public UsageContext addUseContext() { // 3
1050    UsageContext t = new UsageContext();
1051    if (this.useContext == null)
1052      this.useContext = new ArrayList<UsageContext>();
1053    this.useContext.add(t);
1054    return t;
1055  }
1056
1057  public EventDefinition addUseContext(UsageContext t) { // 3
1058    if (t == null)
1059      return this;
1060    if (this.useContext == null)
1061      this.useContext = new ArrayList<UsageContext>();
1062    this.useContext.add(t);
1063    return this;
1064  }
1065
1066  /**
1067   * @return The first repetition of repeating field {@link #useContext}, creating
1068   *         it if it does not already exist
1069   */
1070  public UsageContext getUseContextFirstRep() {
1071    if (getUseContext().isEmpty()) {
1072      addUseContext();
1073    }
1074    return getUseContext().get(0);
1075  }
1076
1077  /**
1078   * @return {@link #jurisdiction} (A legal or geographic region in which the
1079   *         event definition is intended to be used.)
1080   */
1081  public List<CodeableConcept> getJurisdiction() {
1082    if (this.jurisdiction == null)
1083      this.jurisdiction = new ArrayList<CodeableConcept>();
1084    return this.jurisdiction;
1085  }
1086
1087  /**
1088   * @return Returns a reference to <code>this</code> for easy method chaining
1089   */
1090  public EventDefinition setJurisdiction(List<CodeableConcept> theJurisdiction) {
1091    this.jurisdiction = theJurisdiction;
1092    return this;
1093  }
1094
1095  public boolean hasJurisdiction() {
1096    if (this.jurisdiction == null)
1097      return false;
1098    for (CodeableConcept item : this.jurisdiction)
1099      if (!item.isEmpty())
1100        return true;
1101    return false;
1102  }
1103
1104  public CodeableConcept addJurisdiction() { // 3
1105    CodeableConcept t = new CodeableConcept();
1106    if (this.jurisdiction == null)
1107      this.jurisdiction = new ArrayList<CodeableConcept>();
1108    this.jurisdiction.add(t);
1109    return t;
1110  }
1111
1112  public EventDefinition addJurisdiction(CodeableConcept t) { // 3
1113    if (t == null)
1114      return this;
1115    if (this.jurisdiction == null)
1116      this.jurisdiction = new ArrayList<CodeableConcept>();
1117    this.jurisdiction.add(t);
1118    return this;
1119  }
1120
1121  /**
1122   * @return The first repetition of repeating field {@link #jurisdiction},
1123   *         creating it if it does not already exist
1124   */
1125  public CodeableConcept getJurisdictionFirstRep() {
1126    if (getJurisdiction().isEmpty()) {
1127      addJurisdiction();
1128    }
1129    return getJurisdiction().get(0);
1130  }
1131
1132  /**
1133   * @return {@link #purpose} (Explanation of why this event definition is needed
1134   *         and why it has been designed as it has.). This is the underlying
1135   *         object with id, value and extensions. The accessor "getPurpose" gives
1136   *         direct access to the value
1137   */
1138  public MarkdownType getPurposeElement() {
1139    if (this.purpose == null)
1140      if (Configuration.errorOnAutoCreate())
1141        throw new Error("Attempt to auto-create EventDefinition.purpose");
1142      else if (Configuration.doAutoCreate())
1143        this.purpose = new MarkdownType(); // bb
1144    return this.purpose;
1145  }
1146
1147  public boolean hasPurposeElement() {
1148    return this.purpose != null && !this.purpose.isEmpty();
1149  }
1150
1151  public boolean hasPurpose() {
1152    return this.purpose != null && !this.purpose.isEmpty();
1153  }
1154
1155  /**
1156   * @param value {@link #purpose} (Explanation of why this event definition is
1157   *              needed and why it has been designed as it has.). This is the
1158   *              underlying object with id, value and extensions. The accessor
1159   *              "getPurpose" gives direct access to the value
1160   */
1161  public EventDefinition setPurposeElement(MarkdownType value) {
1162    this.purpose = value;
1163    return this;
1164  }
1165
1166  /**
1167   * @return Explanation of why this event definition is needed and why it has
1168   *         been designed as it has.
1169   */
1170  public String getPurpose() {
1171    return this.purpose == null ? null : this.purpose.getValue();
1172  }
1173
1174  /**
1175   * @param value Explanation of why this event definition is needed and why it
1176   *              has been designed as it has.
1177   */
1178  public EventDefinition setPurpose(String value) {
1179    if (value == null)
1180      this.purpose = null;
1181    else {
1182      if (this.purpose == null)
1183        this.purpose = new MarkdownType();
1184      this.purpose.setValue(value);
1185    }
1186    return this;
1187  }
1188
1189  /**
1190   * @return {@link #usage} (A detailed description of how the event definition is
1191   *         used from a clinical perspective.). This is the underlying object
1192   *         with id, value and extensions. The accessor "getUsage" gives direct
1193   *         access to the value
1194   */
1195  public StringType getUsageElement() {
1196    if (this.usage == null)
1197      if (Configuration.errorOnAutoCreate())
1198        throw new Error("Attempt to auto-create EventDefinition.usage");
1199      else if (Configuration.doAutoCreate())
1200        this.usage = new StringType(); // bb
1201    return this.usage;
1202  }
1203
1204  public boolean hasUsageElement() {
1205    return this.usage != null && !this.usage.isEmpty();
1206  }
1207
1208  public boolean hasUsage() {
1209    return this.usage != null && !this.usage.isEmpty();
1210  }
1211
1212  /**
1213   * @param value {@link #usage} (A detailed description of how the event
1214   *              definition is used from a clinical perspective.). This is the
1215   *              underlying object with id, value and extensions. The accessor
1216   *              "getUsage" gives direct access to the value
1217   */
1218  public EventDefinition setUsageElement(StringType value) {
1219    this.usage = value;
1220    return this;
1221  }
1222
1223  /**
1224   * @return A detailed description of how the event definition is used from a
1225   *         clinical perspective.
1226   */
1227  public String getUsage() {
1228    return this.usage == null ? null : this.usage.getValue();
1229  }
1230
1231  /**
1232   * @param value A detailed description of how the event definition is used from
1233   *              a clinical perspective.
1234   */
1235  public EventDefinition setUsage(String value) {
1236    if (Utilities.noString(value))
1237      this.usage = null;
1238    else {
1239      if (this.usage == null)
1240        this.usage = new StringType();
1241      this.usage.setValue(value);
1242    }
1243    return this;
1244  }
1245
1246  /**
1247   * @return {@link #copyright} (A copyright statement relating to the event
1248   *         definition and/or its contents. Copyright statements are generally
1249   *         legal restrictions on the use and publishing of the event
1250   *         definition.). This is the underlying object with id, value and
1251   *         extensions. The accessor "getCopyright" gives direct access to the
1252   *         value
1253   */
1254  public MarkdownType getCopyrightElement() {
1255    if (this.copyright == null)
1256      if (Configuration.errorOnAutoCreate())
1257        throw new Error("Attempt to auto-create EventDefinition.copyright");
1258      else if (Configuration.doAutoCreate())
1259        this.copyright = new MarkdownType(); // bb
1260    return this.copyright;
1261  }
1262
1263  public boolean hasCopyrightElement() {
1264    return this.copyright != null && !this.copyright.isEmpty();
1265  }
1266
1267  public boolean hasCopyright() {
1268    return this.copyright != null && !this.copyright.isEmpty();
1269  }
1270
1271  /**
1272   * @param value {@link #copyright} (A copyright statement relating to the event
1273   *              definition and/or its contents. Copyright statements are
1274   *              generally legal restrictions on the use and publishing of the
1275   *              event definition.). This is the underlying object with id, value
1276   *              and extensions. The accessor "getCopyright" gives direct access
1277   *              to the value
1278   */
1279  public EventDefinition setCopyrightElement(MarkdownType value) {
1280    this.copyright = value;
1281    return this;
1282  }
1283
1284  /**
1285   * @return A copyright statement relating to the event definition and/or its
1286   *         contents. Copyright statements are generally legal restrictions on
1287   *         the use and publishing of the event definition.
1288   */
1289  public String getCopyright() {
1290    return this.copyright == null ? null : this.copyright.getValue();
1291  }
1292
1293  /**
1294   * @param value A copyright statement relating to the event definition and/or
1295   *              its contents. Copyright statements are generally legal
1296   *              restrictions on the use and publishing of the event definition.
1297   */
1298  public EventDefinition setCopyright(String value) {
1299    if (value == null)
1300      this.copyright = null;
1301    else {
1302      if (this.copyright == null)
1303        this.copyright = new MarkdownType();
1304      this.copyright.setValue(value);
1305    }
1306    return this;
1307  }
1308
1309  /**
1310   * @return {@link #approvalDate} (The date on which the resource content was
1311   *         approved by the publisher. Approval happens once when the content is
1312   *         officially approved for usage.). This is the underlying object with
1313   *         id, value and extensions. The accessor "getApprovalDate" gives direct
1314   *         access to the value
1315   */
1316  public DateType getApprovalDateElement() {
1317    if (this.approvalDate == null)
1318      if (Configuration.errorOnAutoCreate())
1319        throw new Error("Attempt to auto-create EventDefinition.approvalDate");
1320      else if (Configuration.doAutoCreate())
1321        this.approvalDate = new DateType(); // bb
1322    return this.approvalDate;
1323  }
1324
1325  public boolean hasApprovalDateElement() {
1326    return this.approvalDate != null && !this.approvalDate.isEmpty();
1327  }
1328
1329  public boolean hasApprovalDate() {
1330    return this.approvalDate != null && !this.approvalDate.isEmpty();
1331  }
1332
1333  /**
1334   * @param value {@link #approvalDate} (The date on which the resource content
1335   *              was approved by the publisher. Approval happens once when the
1336   *              content is officially approved for usage.). This is the
1337   *              underlying object with id, value and extensions. The accessor
1338   *              "getApprovalDate" gives direct access to the value
1339   */
1340  public EventDefinition setApprovalDateElement(DateType value) {
1341    this.approvalDate = value;
1342    return this;
1343  }
1344
1345  /**
1346   * @return The date on which the resource content was approved by the publisher.
1347   *         Approval happens once when the content is officially approved for
1348   *         usage.
1349   */
1350  public Date getApprovalDate() {
1351    return this.approvalDate == null ? null : this.approvalDate.getValue();
1352  }
1353
1354  /**
1355   * @param value The date on which the resource content was approved by the
1356   *              publisher. Approval happens once when the content is officially
1357   *              approved for usage.
1358   */
1359  public EventDefinition setApprovalDate(Date value) {
1360    if (value == null)
1361      this.approvalDate = null;
1362    else {
1363      if (this.approvalDate == null)
1364        this.approvalDate = new DateType();
1365      this.approvalDate.setValue(value);
1366    }
1367    return this;
1368  }
1369
1370  /**
1371   * @return {@link #lastReviewDate} (The date on which the resource content was
1372   *         last reviewed. Review happens periodically after approval but does
1373   *         not change the original approval date.). This is the underlying
1374   *         object with id, value and extensions. The accessor
1375   *         "getLastReviewDate" gives direct access to the value
1376   */
1377  public DateType getLastReviewDateElement() {
1378    if (this.lastReviewDate == null)
1379      if (Configuration.errorOnAutoCreate())
1380        throw new Error("Attempt to auto-create EventDefinition.lastReviewDate");
1381      else if (Configuration.doAutoCreate())
1382        this.lastReviewDate = new DateType(); // bb
1383    return this.lastReviewDate;
1384  }
1385
1386  public boolean hasLastReviewDateElement() {
1387    return this.lastReviewDate != null && !this.lastReviewDate.isEmpty();
1388  }
1389
1390  public boolean hasLastReviewDate() {
1391    return this.lastReviewDate != null && !this.lastReviewDate.isEmpty();
1392  }
1393
1394  /**
1395   * @param value {@link #lastReviewDate} (The date on which the resource content
1396   *              was last reviewed. Review happens periodically after approval
1397   *              but does not change the original approval date.). This is the
1398   *              underlying object with id, value and extensions. The accessor
1399   *              "getLastReviewDate" gives direct access to the value
1400   */
1401  public EventDefinition setLastReviewDateElement(DateType value) {
1402    this.lastReviewDate = value;
1403    return this;
1404  }
1405
1406  /**
1407   * @return The date on which the resource content was last reviewed. Review
1408   *         happens periodically after approval but does not change the original
1409   *         approval date.
1410   */
1411  public Date getLastReviewDate() {
1412    return this.lastReviewDate == null ? null : this.lastReviewDate.getValue();
1413  }
1414
1415  /**
1416   * @param value The date on which the resource content was last reviewed. Review
1417   *              happens periodically after approval but does not change the
1418   *              original approval date.
1419   */
1420  public EventDefinition setLastReviewDate(Date value) {
1421    if (value == null)
1422      this.lastReviewDate = null;
1423    else {
1424      if (this.lastReviewDate == null)
1425        this.lastReviewDate = new DateType();
1426      this.lastReviewDate.setValue(value);
1427    }
1428    return this;
1429  }
1430
1431  /**
1432   * @return {@link #effectivePeriod} (The period during which the event
1433   *         definition content was or is planned to be in active use.)
1434   */
1435  public Period getEffectivePeriod() {
1436    if (this.effectivePeriod == null)
1437      if (Configuration.errorOnAutoCreate())
1438        throw new Error("Attempt to auto-create EventDefinition.effectivePeriod");
1439      else if (Configuration.doAutoCreate())
1440        this.effectivePeriod = new Period(); // cc
1441    return this.effectivePeriod;
1442  }
1443
1444  public boolean hasEffectivePeriod() {
1445    return this.effectivePeriod != null && !this.effectivePeriod.isEmpty();
1446  }
1447
1448  /**
1449   * @param value {@link #effectivePeriod} (The period during which the event
1450   *              definition content was or is planned to be in active use.)
1451   */
1452  public EventDefinition setEffectivePeriod(Period value) {
1453    this.effectivePeriod = value;
1454    return this;
1455  }
1456
1457  /**
1458   * @return {@link #topic} (Descriptive topics related to the module. Topics
1459   *         provide a high-level categorization of the module that can be useful
1460   *         for filtering and searching.)
1461   */
1462  public List<CodeableConcept> getTopic() {
1463    if (this.topic == null)
1464      this.topic = new ArrayList<CodeableConcept>();
1465    return this.topic;
1466  }
1467
1468  /**
1469   * @return Returns a reference to <code>this</code> for easy method chaining
1470   */
1471  public EventDefinition setTopic(List<CodeableConcept> theTopic) {
1472    this.topic = theTopic;
1473    return this;
1474  }
1475
1476  public boolean hasTopic() {
1477    if (this.topic == null)
1478      return false;
1479    for (CodeableConcept item : this.topic)
1480      if (!item.isEmpty())
1481        return true;
1482    return false;
1483  }
1484
1485  public CodeableConcept addTopic() { // 3
1486    CodeableConcept t = new CodeableConcept();
1487    if (this.topic == null)
1488      this.topic = new ArrayList<CodeableConcept>();
1489    this.topic.add(t);
1490    return t;
1491  }
1492
1493  public EventDefinition addTopic(CodeableConcept t) { // 3
1494    if (t == null)
1495      return this;
1496    if (this.topic == null)
1497      this.topic = new ArrayList<CodeableConcept>();
1498    this.topic.add(t);
1499    return this;
1500  }
1501
1502  /**
1503   * @return The first repetition of repeating field {@link #topic}, creating it
1504   *         if it does not already exist
1505   */
1506  public CodeableConcept getTopicFirstRep() {
1507    if (getTopic().isEmpty()) {
1508      addTopic();
1509    }
1510    return getTopic().get(0);
1511  }
1512
1513  /**
1514   * @return {@link #author} (An individiual or organization primarily involved in
1515   *         the creation and maintenance of the content.)
1516   */
1517  public List<ContactDetail> getAuthor() {
1518    if (this.author == null)
1519      this.author = new ArrayList<ContactDetail>();
1520    return this.author;
1521  }
1522
1523  /**
1524   * @return Returns a reference to <code>this</code> for easy method chaining
1525   */
1526  public EventDefinition setAuthor(List<ContactDetail> theAuthor) {
1527    this.author = theAuthor;
1528    return this;
1529  }
1530
1531  public boolean hasAuthor() {
1532    if (this.author == null)
1533      return false;
1534    for (ContactDetail item : this.author)
1535      if (!item.isEmpty())
1536        return true;
1537    return false;
1538  }
1539
1540  public ContactDetail addAuthor() { // 3
1541    ContactDetail t = new ContactDetail();
1542    if (this.author == null)
1543      this.author = new ArrayList<ContactDetail>();
1544    this.author.add(t);
1545    return t;
1546  }
1547
1548  public EventDefinition addAuthor(ContactDetail t) { // 3
1549    if (t == null)
1550      return this;
1551    if (this.author == null)
1552      this.author = new ArrayList<ContactDetail>();
1553    this.author.add(t);
1554    return this;
1555  }
1556
1557  /**
1558   * @return The first repetition of repeating field {@link #author}, creating it
1559   *         if it does not already exist
1560   */
1561  public ContactDetail getAuthorFirstRep() {
1562    if (getAuthor().isEmpty()) {
1563      addAuthor();
1564    }
1565    return getAuthor().get(0);
1566  }
1567
1568  /**
1569   * @return {@link #editor} (An individual or organization primarily responsible
1570   *         for internal coherence of the content.)
1571   */
1572  public List<ContactDetail> getEditor() {
1573    if (this.editor == null)
1574      this.editor = new ArrayList<ContactDetail>();
1575    return this.editor;
1576  }
1577
1578  /**
1579   * @return Returns a reference to <code>this</code> for easy method chaining
1580   */
1581  public EventDefinition setEditor(List<ContactDetail> theEditor) {
1582    this.editor = theEditor;
1583    return this;
1584  }
1585
1586  public boolean hasEditor() {
1587    if (this.editor == null)
1588      return false;
1589    for (ContactDetail item : this.editor)
1590      if (!item.isEmpty())
1591        return true;
1592    return false;
1593  }
1594
1595  public ContactDetail addEditor() { // 3
1596    ContactDetail t = new ContactDetail();
1597    if (this.editor == null)
1598      this.editor = new ArrayList<ContactDetail>();
1599    this.editor.add(t);
1600    return t;
1601  }
1602
1603  public EventDefinition addEditor(ContactDetail t) { // 3
1604    if (t == null)
1605      return this;
1606    if (this.editor == null)
1607      this.editor = new ArrayList<ContactDetail>();
1608    this.editor.add(t);
1609    return this;
1610  }
1611
1612  /**
1613   * @return The first repetition of repeating field {@link #editor}, creating it
1614   *         if it does not already exist
1615   */
1616  public ContactDetail getEditorFirstRep() {
1617    if (getEditor().isEmpty()) {
1618      addEditor();
1619    }
1620    return getEditor().get(0);
1621  }
1622
1623  /**
1624   * @return {@link #reviewer} (An individual or organization primarily
1625   *         responsible for review of some aspect of the content.)
1626   */
1627  public List<ContactDetail> getReviewer() {
1628    if (this.reviewer == null)
1629      this.reviewer = new ArrayList<ContactDetail>();
1630    return this.reviewer;
1631  }
1632
1633  /**
1634   * @return Returns a reference to <code>this</code> for easy method chaining
1635   */
1636  public EventDefinition setReviewer(List<ContactDetail> theReviewer) {
1637    this.reviewer = theReviewer;
1638    return this;
1639  }
1640
1641  public boolean hasReviewer() {
1642    if (this.reviewer == null)
1643      return false;
1644    for (ContactDetail item : this.reviewer)
1645      if (!item.isEmpty())
1646        return true;
1647    return false;
1648  }
1649
1650  public ContactDetail addReviewer() { // 3
1651    ContactDetail t = new ContactDetail();
1652    if (this.reviewer == null)
1653      this.reviewer = new ArrayList<ContactDetail>();
1654    this.reviewer.add(t);
1655    return t;
1656  }
1657
1658  public EventDefinition addReviewer(ContactDetail t) { // 3
1659    if (t == null)
1660      return this;
1661    if (this.reviewer == null)
1662      this.reviewer = new ArrayList<ContactDetail>();
1663    this.reviewer.add(t);
1664    return this;
1665  }
1666
1667  /**
1668   * @return The first repetition of repeating field {@link #reviewer}, creating
1669   *         it if it does not already exist
1670   */
1671  public ContactDetail getReviewerFirstRep() {
1672    if (getReviewer().isEmpty()) {
1673      addReviewer();
1674    }
1675    return getReviewer().get(0);
1676  }
1677
1678  /**
1679   * @return {@link #endorser} (An individual or organization responsible for
1680   *         officially endorsing the content for use in some setting.)
1681   */
1682  public List<ContactDetail> getEndorser() {
1683    if (this.endorser == null)
1684      this.endorser = new ArrayList<ContactDetail>();
1685    return this.endorser;
1686  }
1687
1688  /**
1689   * @return Returns a reference to <code>this</code> for easy method chaining
1690   */
1691  public EventDefinition setEndorser(List<ContactDetail> theEndorser) {
1692    this.endorser = theEndorser;
1693    return this;
1694  }
1695
1696  public boolean hasEndorser() {
1697    if (this.endorser == null)
1698      return false;
1699    for (ContactDetail item : this.endorser)
1700      if (!item.isEmpty())
1701        return true;
1702    return false;
1703  }
1704
1705  public ContactDetail addEndorser() { // 3
1706    ContactDetail t = new ContactDetail();
1707    if (this.endorser == null)
1708      this.endorser = new ArrayList<ContactDetail>();
1709    this.endorser.add(t);
1710    return t;
1711  }
1712
1713  public EventDefinition addEndorser(ContactDetail t) { // 3
1714    if (t == null)
1715      return this;
1716    if (this.endorser == null)
1717      this.endorser = new ArrayList<ContactDetail>();
1718    this.endorser.add(t);
1719    return this;
1720  }
1721
1722  /**
1723   * @return The first repetition of repeating field {@link #endorser}, creating
1724   *         it if it does not already exist
1725   */
1726  public ContactDetail getEndorserFirstRep() {
1727    if (getEndorser().isEmpty()) {
1728      addEndorser();
1729    }
1730    return getEndorser().get(0);
1731  }
1732
1733  /**
1734   * @return {@link #relatedArtifact} (Related resources such as additional
1735   *         documentation, justification, or bibliographic references.)
1736   */
1737  public List<RelatedArtifact> getRelatedArtifact() {
1738    if (this.relatedArtifact == null)
1739      this.relatedArtifact = new ArrayList<RelatedArtifact>();
1740    return this.relatedArtifact;
1741  }
1742
1743  /**
1744   * @return Returns a reference to <code>this</code> for easy method chaining
1745   */
1746  public EventDefinition setRelatedArtifact(List<RelatedArtifact> theRelatedArtifact) {
1747    this.relatedArtifact = theRelatedArtifact;
1748    return this;
1749  }
1750
1751  public boolean hasRelatedArtifact() {
1752    if (this.relatedArtifact == null)
1753      return false;
1754    for (RelatedArtifact item : this.relatedArtifact)
1755      if (!item.isEmpty())
1756        return true;
1757    return false;
1758  }
1759
1760  public RelatedArtifact addRelatedArtifact() { // 3
1761    RelatedArtifact t = new RelatedArtifact();
1762    if (this.relatedArtifact == null)
1763      this.relatedArtifact = new ArrayList<RelatedArtifact>();
1764    this.relatedArtifact.add(t);
1765    return t;
1766  }
1767
1768  public EventDefinition addRelatedArtifact(RelatedArtifact t) { // 3
1769    if (t == null)
1770      return this;
1771    if (this.relatedArtifact == null)
1772      this.relatedArtifact = new ArrayList<RelatedArtifact>();
1773    this.relatedArtifact.add(t);
1774    return this;
1775  }
1776
1777  /**
1778   * @return The first repetition of repeating field {@link #relatedArtifact},
1779   *         creating it if it does not already exist
1780   */
1781  public RelatedArtifact getRelatedArtifactFirstRep() {
1782    if (getRelatedArtifact().isEmpty()) {
1783      addRelatedArtifact();
1784    }
1785    return getRelatedArtifact().get(0);
1786  }
1787
1788  /**
1789   * @return {@link #trigger} (The trigger element defines when the event occurs.
1790   *         If more than one trigger condition is specified, the event fires
1791   *         whenever any one of the trigger conditions is met.)
1792   */
1793  public List<TriggerDefinition> getTrigger() {
1794    if (this.trigger == null)
1795      this.trigger = new ArrayList<TriggerDefinition>();
1796    return this.trigger;
1797  }
1798
1799  /**
1800   * @return Returns a reference to <code>this</code> for easy method chaining
1801   */
1802  public EventDefinition setTrigger(List<TriggerDefinition> theTrigger) {
1803    this.trigger = theTrigger;
1804    return this;
1805  }
1806
1807  public boolean hasTrigger() {
1808    if (this.trigger == null)
1809      return false;
1810    for (TriggerDefinition item : this.trigger)
1811      if (!item.isEmpty())
1812        return true;
1813    return false;
1814  }
1815
1816  public TriggerDefinition addTrigger() { // 3
1817    TriggerDefinition t = new TriggerDefinition();
1818    if (this.trigger == null)
1819      this.trigger = new ArrayList<TriggerDefinition>();
1820    this.trigger.add(t);
1821    return t;
1822  }
1823
1824  public EventDefinition addTrigger(TriggerDefinition t) { // 3
1825    if (t == null)
1826      return this;
1827    if (this.trigger == null)
1828      this.trigger = new ArrayList<TriggerDefinition>();
1829    this.trigger.add(t);
1830    return this;
1831  }
1832
1833  /**
1834   * @return The first repetition of repeating field {@link #trigger}, creating it
1835   *         if it does not already exist
1836   */
1837  public TriggerDefinition getTriggerFirstRep() {
1838    if (getTrigger().isEmpty()) {
1839      addTrigger();
1840    }
1841    return getTrigger().get(0);
1842  }
1843
1844  protected void listChildren(List<Property> children) {
1845    super.listChildren(children);
1846    children.add(new Property("url", "uri",
1847        "An absolute URI that is used to identify this event 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 at which an authoritative instance of this event definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the event definition is stored on different servers.",
1848        0, 1, url));
1849    children.add(new Property("identifier", "Identifier",
1850        "A formal identifier that is used to identify this event definition when it is represented in other formats, or referenced in a specification, model, design or an instance.",
1851        0, java.lang.Integer.MAX_VALUE, identifier));
1852    children.add(new Property("version", "string",
1853        "The identifier that is used to identify this version of the event definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the event 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.",
1854        0, 1, version));
1855    children.add(new Property("name", "string",
1856        "A natural language name identifying the event definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.",
1857        0, 1, name));
1858    children.add(new Property("title", "string", "A short, descriptive, user-friendly title for the event definition.",
1859        0, 1, title));
1860    children.add(new Property("subtitle", "string",
1861        "An explanatory or alternate title for the event definition giving additional information about its content.",
1862        0, 1, subtitle));
1863    children.add(new Property("status", "code",
1864        "The status of this event definition. Enables tracking the life-cycle of the content.", 0, 1, status));
1865    children.add(new Property("experimental", "boolean",
1866        "A Boolean value to indicate that this event definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.",
1867        0, 1, experimental));
1868    children.add(new Property("subject[x]", "CodeableConcept|Reference(Group)",
1869        "A code or group definition that describes the intended subject of the event definition.", 0, 1, subject));
1870    children.add(new Property("date", "dateTime",
1871        "The date  (and optionally time) when the event 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 event definition changes.",
1872        0, 1, date));
1873    children.add(new Property("publisher", "string",
1874        "The name of the organization or individual that published the event definition.", 0, 1, publisher));
1875    children.add(new Property("contact", "ContactDetail",
1876        "Contact details to assist a user in finding and communicating with the publisher.", 0,
1877        java.lang.Integer.MAX_VALUE, contact));
1878    children.add(new Property("description", "markdown",
1879        "A free text natural language description of the event definition from a consumer's perspective.", 0, 1,
1880        description));
1881    children.add(new Property("useContext", "UsageContext",
1882        "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate event definition instances.",
1883        0, java.lang.Integer.MAX_VALUE, useContext));
1884    children.add(new Property("jurisdiction", "CodeableConcept",
1885        "A legal or geographic region in which the event definition is intended to be used.", 0,
1886        java.lang.Integer.MAX_VALUE, jurisdiction));
1887    children.add(new Property("purpose", "markdown",
1888        "Explanation of why this event definition is needed and why it has been designed as it has.", 0, 1, purpose));
1889    children.add(new Property("usage", "string",
1890        "A detailed description of how the event definition is used from a clinical perspective.", 0, 1, usage));
1891    children.add(new Property("copyright", "markdown",
1892        "A copyright statement relating to the event definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the event definition.",
1893        0, 1, copyright));
1894    children.add(new Property("approvalDate", "date",
1895        "The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.",
1896        0, 1, approvalDate));
1897    children.add(new Property("lastReviewDate", "date",
1898        "The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.",
1899        0, 1, lastReviewDate));
1900    children.add(new Property("effectivePeriod", "Period",
1901        "The period during which the event definition content was or is planned to be in active use.", 0, 1,
1902        effectivePeriod));
1903    children.add(new Property("topic", "CodeableConcept",
1904        "Descriptive topics related to the module. Topics provide a high-level categorization of the module that can be useful for filtering and searching.",
1905        0, java.lang.Integer.MAX_VALUE, topic));
1906    children.add(new Property("author", "ContactDetail",
1907        "An individiual or organization primarily involved in the creation and maintenance of the content.", 0,
1908        java.lang.Integer.MAX_VALUE, author));
1909    children.add(new Property("editor", "ContactDetail",
1910        "An individual or organization primarily responsible for internal coherence of the content.", 0,
1911        java.lang.Integer.MAX_VALUE, editor));
1912    children.add(new Property("reviewer", "ContactDetail",
1913        "An individual or organization primarily responsible for review of some aspect of the content.", 0,
1914        java.lang.Integer.MAX_VALUE, reviewer));
1915    children.add(new Property("endorser", "ContactDetail",
1916        "An individual or organization responsible for officially endorsing the content for use in some setting.", 0,
1917        java.lang.Integer.MAX_VALUE, endorser));
1918    children.add(new Property("relatedArtifact", "RelatedArtifact",
1919        "Related resources such as additional documentation, justification, or bibliographic references.", 0,
1920        java.lang.Integer.MAX_VALUE, relatedArtifact));
1921    children.add(new Property("trigger", "TriggerDefinition",
1922        "The trigger element defines when the event occurs. If more than one trigger condition is specified, the event fires whenever any one of the trigger conditions is met.",
1923        0, java.lang.Integer.MAX_VALUE, trigger));
1924  }
1925
1926  @Override
1927  public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1928    switch (_hash) {
1929    case 116079:
1930      /* url */ return new Property("url", "uri",
1931          "An absolute URI that is used to identify this event 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 at which an authoritative instance of this event definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the event definition is stored on different servers.",
1932          0, 1, url);
1933    case -1618432855:
1934      /* identifier */ return new Property("identifier", "Identifier",
1935          "A formal identifier that is used to identify this event definition when it is represented in other formats, or referenced in a specification, model, design or an instance.",
1936          0, java.lang.Integer.MAX_VALUE, identifier);
1937    case 351608024:
1938      /* version */ return new Property("version", "string",
1939          "The identifier that is used to identify this version of the event definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the event 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.",
1940          0, 1, version);
1941    case 3373707:
1942      /* name */ return new Property("name", "string",
1943          "A natural language name identifying the event definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.",
1944          0, 1, name);
1945    case 110371416:
1946      /* title */ return new Property("title", "string",
1947          "A short, descriptive, user-friendly title for the event definition.", 0, 1, title);
1948    case -2060497896:
1949      /* subtitle */ return new Property("subtitle", "string",
1950          "An explanatory or alternate title for the event definition giving additional information about its content.",
1951          0, 1, subtitle);
1952    case -892481550:
1953      /* status */ return new Property("status", "code",
1954          "The status of this event definition. Enables tracking the life-cycle of the content.", 0, 1, status);
1955    case -404562712:
1956      /* experimental */ return new Property("experimental", "boolean",
1957          "A Boolean value to indicate that this event definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.",
1958          0, 1, experimental);
1959    case -573640748:
1960      /* subject[x] */ return new Property("subject[x]", "CodeableConcept|Reference(Group)",
1961          "A code or group definition that describes the intended subject of the event definition.", 0, 1, subject);
1962    case -1867885268:
1963      /* subject */ return new Property("subject[x]", "CodeableConcept|Reference(Group)",
1964          "A code or group definition that describes the intended subject of the event definition.", 0, 1, subject);
1965    case -1257122603:
1966      /* subjectCodeableConcept */ return new Property("subject[x]", "CodeableConcept|Reference(Group)",
1967          "A code or group definition that describes the intended subject of the event definition.", 0, 1, subject);
1968    case 772938623:
1969      /* subjectReference */ return new Property("subject[x]", "CodeableConcept|Reference(Group)",
1970          "A code or group definition that describes the intended subject of the event definition.", 0, 1, subject);
1971    case 3076014:
1972      /* date */ return new Property("date", "dateTime",
1973          "The date  (and optionally time) when the event 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 event definition changes.",
1974          0, 1, date);
1975    case 1447404028:
1976      /* publisher */ return new Property("publisher", "string",
1977          "The name of the organization or individual that published the event definition.", 0, 1, publisher);
1978    case 951526432:
1979      /* contact */ return new Property("contact", "ContactDetail",
1980          "Contact details to assist a user in finding and communicating with the publisher.", 0,
1981          java.lang.Integer.MAX_VALUE, contact);
1982    case -1724546052:
1983      /* description */ return new Property("description", "markdown",
1984          "A free text natural language description of the event definition from a consumer's perspective.", 0, 1,
1985          description);
1986    case -669707736:
1987      /* useContext */ return new Property("useContext", "UsageContext",
1988          "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate event definition instances.",
1989          0, java.lang.Integer.MAX_VALUE, useContext);
1990    case -507075711:
1991      /* jurisdiction */ return new Property("jurisdiction", "CodeableConcept",
1992          "A legal or geographic region in which the event definition is intended to be used.", 0,
1993          java.lang.Integer.MAX_VALUE, jurisdiction);
1994    case -220463842:
1995      /* purpose */ return new Property("purpose", "markdown",
1996          "Explanation of why this event definition is needed and why it has been designed as it has.", 0, 1, purpose);
1997    case 111574433:
1998      /* usage */ return new Property("usage", "string",
1999          "A detailed description of how the event definition is used from a clinical perspective.", 0, 1, usage);
2000    case 1522889671:
2001      /* copyright */ return new Property("copyright", "markdown",
2002          "A copyright statement relating to the event definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the event definition.",
2003          0, 1, copyright);
2004    case 223539345:
2005      /* approvalDate */ return new Property("approvalDate", "date",
2006          "The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.",
2007          0, 1, approvalDate);
2008    case -1687512484:
2009      /* lastReviewDate */ return new Property("lastReviewDate", "date",
2010          "The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.",
2011          0, 1, lastReviewDate);
2012    case -403934648:
2013      /* effectivePeriod */ return new Property("effectivePeriod", "Period",
2014          "The period during which the event definition content was or is planned to be in active use.", 0, 1,
2015          effectivePeriod);
2016    case 110546223:
2017      /* topic */ return new Property("topic", "CodeableConcept",
2018          "Descriptive topics related to the module. Topics provide a high-level categorization of the module that can be useful for filtering and searching.",
2019          0, java.lang.Integer.MAX_VALUE, topic);
2020    case -1406328437:
2021      /* author */ return new Property("author", "ContactDetail",
2022          "An individiual or organization primarily involved in the creation and maintenance of the content.", 0,
2023          java.lang.Integer.MAX_VALUE, author);
2024    case -1307827859:
2025      /* editor */ return new Property("editor", "ContactDetail",
2026          "An individual or organization primarily responsible for internal coherence of the content.", 0,
2027          java.lang.Integer.MAX_VALUE, editor);
2028    case -261190139:
2029      /* reviewer */ return new Property("reviewer", "ContactDetail",
2030          "An individual or organization primarily responsible for review of some aspect of the content.", 0,
2031          java.lang.Integer.MAX_VALUE, reviewer);
2032    case 1740277666:
2033      /* endorser */ return new Property("endorser", "ContactDetail",
2034          "An individual or organization responsible for officially endorsing the content for use in some setting.", 0,
2035          java.lang.Integer.MAX_VALUE, endorser);
2036    case 666807069:
2037      /* relatedArtifact */ return new Property("relatedArtifact", "RelatedArtifact",
2038          "Related resources such as additional documentation, justification, or bibliographic references.", 0,
2039          java.lang.Integer.MAX_VALUE, relatedArtifact);
2040    case -1059891784:
2041      /* trigger */ return new Property("trigger", "TriggerDefinition",
2042          "The trigger element defines when the event occurs. If more than one trigger condition is specified, the event fires whenever any one of the trigger conditions is met.",
2043          0, java.lang.Integer.MAX_VALUE, trigger);
2044    default:
2045      return super.getNamedProperty(_hash, _name, _checkValid);
2046    }
2047
2048  }
2049
2050  @Override
2051  public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2052    switch (hash) {
2053    case 116079:
2054      /* url */ return this.url == null ? new Base[0] : new Base[] { this.url }; // UriType
2055    case -1618432855:
2056      /* identifier */ return this.identifier == null ? new Base[0]
2057          : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
2058    case 351608024:
2059      /* version */ return this.version == null ? new Base[0] : new Base[] { this.version }; // StringType
2060    case 3373707:
2061      /* name */ return this.name == null ? new Base[0] : new Base[] { this.name }; // StringType
2062    case 110371416:
2063      /* title */ return this.title == null ? new Base[0] : new Base[] { this.title }; // StringType
2064    case -2060497896:
2065      /* subtitle */ return this.subtitle == null ? new Base[0] : new Base[] { this.subtitle }; // StringType
2066    case -892481550:
2067      /* status */ return this.status == null ? new Base[0] : new Base[] { this.status }; // Enumeration<PublicationStatus>
2068    case -404562712:
2069      /* experimental */ return this.experimental == null ? new Base[0] : new Base[] { this.experimental }; // BooleanType
2070    case -1867885268:
2071      /* subject */ return this.subject == null ? new Base[0] : new Base[] { this.subject }; // Type
2072    case 3076014:
2073      /* date */ return this.date == null ? new Base[0] : new Base[] { this.date }; // DateTimeType
2074    case 1447404028:
2075      /* publisher */ return this.publisher == null ? new Base[0] : new Base[] { this.publisher }; // StringType
2076    case 951526432:
2077      /* contact */ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ContactDetail
2078    case -1724546052:
2079      /* description */ return this.description == null ? new Base[0] : new Base[] { this.description }; // MarkdownType
2080    case -669707736:
2081      /* useContext */ return this.useContext == null ? new Base[0]
2082          : this.useContext.toArray(new Base[this.useContext.size()]); // UsageContext
2083    case -507075711:
2084      /* jurisdiction */ return this.jurisdiction == null ? new Base[0]
2085          : this.jurisdiction.toArray(new Base[this.jurisdiction.size()]); // CodeableConcept
2086    case -220463842:
2087      /* purpose */ return this.purpose == null ? new Base[0] : new Base[] { this.purpose }; // MarkdownType
2088    case 111574433:
2089      /* usage */ return this.usage == null ? new Base[0] : new Base[] { this.usage }; // StringType
2090    case 1522889671:
2091      /* copyright */ return this.copyright == null ? new Base[0] : new Base[] { this.copyright }; // MarkdownType
2092    case 223539345:
2093      /* approvalDate */ return this.approvalDate == null ? new Base[0] : new Base[] { this.approvalDate }; // DateType
2094    case -1687512484:
2095      /* lastReviewDate */ return this.lastReviewDate == null ? new Base[0] : new Base[] { this.lastReviewDate }; // DateType
2096    case -403934648:
2097      /* effectivePeriod */ return this.effectivePeriod == null ? new Base[0] : new Base[] { this.effectivePeriod }; // Period
2098    case 110546223:
2099      /* topic */ return this.topic == null ? new Base[0] : this.topic.toArray(new Base[this.topic.size()]); // CodeableConcept
2100    case -1406328437:
2101      /* author */ return this.author == null ? new Base[0] : this.author.toArray(new Base[this.author.size()]); // ContactDetail
2102    case -1307827859:
2103      /* editor */ return this.editor == null ? new Base[0] : this.editor.toArray(new Base[this.editor.size()]); // ContactDetail
2104    case -261190139:
2105      /* reviewer */ return this.reviewer == null ? new Base[0] : this.reviewer.toArray(new Base[this.reviewer.size()]); // ContactDetail
2106    case 1740277666:
2107      /* endorser */ return this.endorser == null ? new Base[0] : this.endorser.toArray(new Base[this.endorser.size()]); // ContactDetail
2108    case 666807069:
2109      /* relatedArtifact */ return this.relatedArtifact == null ? new Base[0]
2110          : this.relatedArtifact.toArray(new Base[this.relatedArtifact.size()]); // RelatedArtifact
2111    case -1059891784:
2112      /* trigger */ return this.trigger == null ? new Base[0] : this.trigger.toArray(new Base[this.trigger.size()]); // TriggerDefinition
2113    default:
2114      return super.getProperty(hash, name, checkValid);
2115    }
2116
2117  }
2118
2119  @Override
2120  public Base setProperty(int hash, String name, Base value) throws FHIRException {
2121    switch (hash) {
2122    case 116079: // url
2123      this.url = castToUri(value); // UriType
2124      return value;
2125    case -1618432855: // identifier
2126      this.getIdentifier().add(castToIdentifier(value)); // Identifier
2127      return value;
2128    case 351608024: // version
2129      this.version = castToString(value); // StringType
2130      return value;
2131    case 3373707: // name
2132      this.name = castToString(value); // StringType
2133      return value;
2134    case 110371416: // title
2135      this.title = castToString(value); // StringType
2136      return value;
2137    case -2060497896: // subtitle
2138      this.subtitle = castToString(value); // StringType
2139      return value;
2140    case -892481550: // status
2141      value = new PublicationStatusEnumFactory().fromType(castToCode(value));
2142      this.status = (Enumeration) value; // Enumeration<PublicationStatus>
2143      return value;
2144    case -404562712: // experimental
2145      this.experimental = castToBoolean(value); // BooleanType
2146      return value;
2147    case -1867885268: // subject
2148      this.subject = castToType(value); // Type
2149      return value;
2150    case 3076014: // date
2151      this.date = castToDateTime(value); // DateTimeType
2152      return value;
2153    case 1447404028: // publisher
2154      this.publisher = castToString(value); // StringType
2155      return value;
2156    case 951526432: // contact
2157      this.getContact().add(castToContactDetail(value)); // ContactDetail
2158      return value;
2159    case -1724546052: // description
2160      this.description = castToMarkdown(value); // MarkdownType
2161      return value;
2162    case -669707736: // useContext
2163      this.getUseContext().add(castToUsageContext(value)); // UsageContext
2164      return value;
2165    case -507075711: // jurisdiction
2166      this.getJurisdiction().add(castToCodeableConcept(value)); // CodeableConcept
2167      return value;
2168    case -220463842: // purpose
2169      this.purpose = castToMarkdown(value); // MarkdownType
2170      return value;
2171    case 111574433: // usage
2172      this.usage = castToString(value); // StringType
2173      return value;
2174    case 1522889671: // copyright
2175      this.copyright = castToMarkdown(value); // MarkdownType
2176      return value;
2177    case 223539345: // approvalDate
2178      this.approvalDate = castToDate(value); // DateType
2179      return value;
2180    case -1687512484: // lastReviewDate
2181      this.lastReviewDate = castToDate(value); // DateType
2182      return value;
2183    case -403934648: // effectivePeriod
2184      this.effectivePeriod = castToPeriod(value); // Period
2185      return value;
2186    case 110546223: // topic
2187      this.getTopic().add(castToCodeableConcept(value)); // CodeableConcept
2188      return value;
2189    case -1406328437: // author
2190      this.getAuthor().add(castToContactDetail(value)); // ContactDetail
2191      return value;
2192    case -1307827859: // editor
2193      this.getEditor().add(castToContactDetail(value)); // ContactDetail
2194      return value;
2195    case -261190139: // reviewer
2196      this.getReviewer().add(castToContactDetail(value)); // ContactDetail
2197      return value;
2198    case 1740277666: // endorser
2199      this.getEndorser().add(castToContactDetail(value)); // ContactDetail
2200      return value;
2201    case 666807069: // relatedArtifact
2202      this.getRelatedArtifact().add(castToRelatedArtifact(value)); // RelatedArtifact
2203      return value;
2204    case -1059891784: // trigger
2205      this.getTrigger().add(castToTriggerDefinition(value)); // TriggerDefinition
2206      return value;
2207    default:
2208      return super.setProperty(hash, name, value);
2209    }
2210
2211  }
2212
2213  @Override
2214  public Base setProperty(String name, Base value) throws FHIRException {
2215    if (name.equals("url")) {
2216      this.url = castToUri(value); // UriType
2217    } else if (name.equals("identifier")) {
2218      this.getIdentifier().add(castToIdentifier(value));
2219    } else if (name.equals("version")) {
2220      this.version = castToString(value); // StringType
2221    } else if (name.equals("name")) {
2222      this.name = castToString(value); // StringType
2223    } else if (name.equals("title")) {
2224      this.title = castToString(value); // StringType
2225    } else if (name.equals("subtitle")) {
2226      this.subtitle = castToString(value); // StringType
2227    } else if (name.equals("status")) {
2228      value = new PublicationStatusEnumFactory().fromType(castToCode(value));
2229      this.status = (Enumeration) value; // Enumeration<PublicationStatus>
2230    } else if (name.equals("experimental")) {
2231      this.experimental = castToBoolean(value); // BooleanType
2232    } else if (name.equals("subject[x]")) {
2233      this.subject = castToType(value); // Type
2234    } else if (name.equals("date")) {
2235      this.date = castToDateTime(value); // DateTimeType
2236    } else if (name.equals("publisher")) {
2237      this.publisher = castToString(value); // StringType
2238    } else if (name.equals("contact")) {
2239      this.getContact().add(castToContactDetail(value));
2240    } else if (name.equals("description")) {
2241      this.description = castToMarkdown(value); // MarkdownType
2242    } else if (name.equals("useContext")) {
2243      this.getUseContext().add(castToUsageContext(value));
2244    } else if (name.equals("jurisdiction")) {
2245      this.getJurisdiction().add(castToCodeableConcept(value));
2246    } else if (name.equals("purpose")) {
2247      this.purpose = castToMarkdown(value); // MarkdownType
2248    } else if (name.equals("usage")) {
2249      this.usage = castToString(value); // StringType
2250    } else if (name.equals("copyright")) {
2251      this.copyright = castToMarkdown(value); // MarkdownType
2252    } else if (name.equals("approvalDate")) {
2253      this.approvalDate = castToDate(value); // DateType
2254    } else if (name.equals("lastReviewDate")) {
2255      this.lastReviewDate = castToDate(value); // DateType
2256    } else if (name.equals("effectivePeriod")) {
2257      this.effectivePeriod = castToPeriod(value); // Period
2258    } else if (name.equals("topic")) {
2259      this.getTopic().add(castToCodeableConcept(value));
2260    } else if (name.equals("author")) {
2261      this.getAuthor().add(castToContactDetail(value));
2262    } else if (name.equals("editor")) {
2263      this.getEditor().add(castToContactDetail(value));
2264    } else if (name.equals("reviewer")) {
2265      this.getReviewer().add(castToContactDetail(value));
2266    } else if (name.equals("endorser")) {
2267      this.getEndorser().add(castToContactDetail(value));
2268    } else if (name.equals("relatedArtifact")) {
2269      this.getRelatedArtifact().add(castToRelatedArtifact(value));
2270    } else if (name.equals("trigger")) {
2271      this.getTrigger().add(castToTriggerDefinition(value));
2272    } else
2273      return super.setProperty(name, value);
2274    return value;
2275  }
2276
2277  @Override
2278  public Base makeProperty(int hash, String name) throws FHIRException {
2279    switch (hash) {
2280    case 116079:
2281      return getUrlElement();
2282    case -1618432855:
2283      return addIdentifier();
2284    case 351608024:
2285      return getVersionElement();
2286    case 3373707:
2287      return getNameElement();
2288    case 110371416:
2289      return getTitleElement();
2290    case -2060497896:
2291      return getSubtitleElement();
2292    case -892481550:
2293      return getStatusElement();
2294    case -404562712:
2295      return getExperimentalElement();
2296    case -573640748:
2297      return getSubject();
2298    case -1867885268:
2299      return getSubject();
2300    case 3076014:
2301      return getDateElement();
2302    case 1447404028:
2303      return getPublisherElement();
2304    case 951526432:
2305      return addContact();
2306    case -1724546052:
2307      return getDescriptionElement();
2308    case -669707736:
2309      return addUseContext();
2310    case -507075711:
2311      return addJurisdiction();
2312    case -220463842:
2313      return getPurposeElement();
2314    case 111574433:
2315      return getUsageElement();
2316    case 1522889671:
2317      return getCopyrightElement();
2318    case 223539345:
2319      return getApprovalDateElement();
2320    case -1687512484:
2321      return getLastReviewDateElement();
2322    case -403934648:
2323      return getEffectivePeriod();
2324    case 110546223:
2325      return addTopic();
2326    case -1406328437:
2327      return addAuthor();
2328    case -1307827859:
2329      return addEditor();
2330    case -261190139:
2331      return addReviewer();
2332    case 1740277666:
2333      return addEndorser();
2334    case 666807069:
2335      return addRelatedArtifact();
2336    case -1059891784:
2337      return addTrigger();
2338    default:
2339      return super.makeProperty(hash, name);
2340    }
2341
2342  }
2343
2344  @Override
2345  public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2346    switch (hash) {
2347    case 116079:
2348      /* url */ return new String[] { "uri" };
2349    case -1618432855:
2350      /* identifier */ return new String[] { "Identifier" };
2351    case 351608024:
2352      /* version */ return new String[] { "string" };
2353    case 3373707:
2354      /* name */ return new String[] { "string" };
2355    case 110371416:
2356      /* title */ return new String[] { "string" };
2357    case -2060497896:
2358      /* subtitle */ return new String[] { "string" };
2359    case -892481550:
2360      /* status */ return new String[] { "code" };
2361    case -404562712:
2362      /* experimental */ return new String[] { "boolean" };
2363    case -1867885268:
2364      /* subject */ return new String[] { "CodeableConcept", "Reference" };
2365    case 3076014:
2366      /* date */ return new String[] { "dateTime" };
2367    case 1447404028:
2368      /* publisher */ return new String[] { "string" };
2369    case 951526432:
2370      /* contact */ return new String[] { "ContactDetail" };
2371    case -1724546052:
2372      /* description */ return new String[] { "markdown" };
2373    case -669707736:
2374      /* useContext */ return new String[] { "UsageContext" };
2375    case -507075711:
2376      /* jurisdiction */ return new String[] { "CodeableConcept" };
2377    case -220463842:
2378      /* purpose */ return new String[] { "markdown" };
2379    case 111574433:
2380      /* usage */ return new String[] { "string" };
2381    case 1522889671:
2382      /* copyright */ return new String[] { "markdown" };
2383    case 223539345:
2384      /* approvalDate */ return new String[] { "date" };
2385    case -1687512484:
2386      /* lastReviewDate */ return new String[] { "date" };
2387    case -403934648:
2388      /* effectivePeriod */ return new String[] { "Period" };
2389    case 110546223:
2390      /* topic */ return new String[] { "CodeableConcept" };
2391    case -1406328437:
2392      /* author */ return new String[] { "ContactDetail" };
2393    case -1307827859:
2394      /* editor */ return new String[] { "ContactDetail" };
2395    case -261190139:
2396      /* reviewer */ return new String[] { "ContactDetail" };
2397    case 1740277666:
2398      /* endorser */ return new String[] { "ContactDetail" };
2399    case 666807069:
2400      /* relatedArtifact */ return new String[] { "RelatedArtifact" };
2401    case -1059891784:
2402      /* trigger */ return new String[] { "TriggerDefinition" };
2403    default:
2404      return super.getTypesForProperty(hash, name);
2405    }
2406
2407  }
2408
2409  @Override
2410  public Base addChild(String name) throws FHIRException {
2411    if (name.equals("url")) {
2412      throw new FHIRException("Cannot call addChild on a singleton property EventDefinition.url");
2413    } else if (name.equals("identifier")) {
2414      return addIdentifier();
2415    } else if (name.equals("version")) {
2416      throw new FHIRException("Cannot call addChild on a singleton property EventDefinition.version");
2417    } else if (name.equals("name")) {
2418      throw new FHIRException("Cannot call addChild on a singleton property EventDefinition.name");
2419    } else if (name.equals("title")) {
2420      throw new FHIRException("Cannot call addChild on a singleton property EventDefinition.title");
2421    } else if (name.equals("subtitle")) {
2422      throw new FHIRException("Cannot call addChild on a singleton property EventDefinition.subtitle");
2423    } else if (name.equals("status")) {
2424      throw new FHIRException("Cannot call addChild on a singleton property EventDefinition.status");
2425    } else if (name.equals("experimental")) {
2426      throw new FHIRException("Cannot call addChild on a singleton property EventDefinition.experimental");
2427    } else if (name.equals("subjectCodeableConcept")) {
2428      this.subject = new CodeableConcept();
2429      return this.subject;
2430    } else if (name.equals("subjectReference")) {
2431      this.subject = new Reference();
2432      return this.subject;
2433    } else if (name.equals("date")) {
2434      throw new FHIRException("Cannot call addChild on a singleton property EventDefinition.date");
2435    } else if (name.equals("publisher")) {
2436      throw new FHIRException("Cannot call addChild on a singleton property EventDefinition.publisher");
2437    } else if (name.equals("contact")) {
2438      return addContact();
2439    } else if (name.equals("description")) {
2440      throw new FHIRException("Cannot call addChild on a singleton property EventDefinition.description");
2441    } else if (name.equals("useContext")) {
2442      return addUseContext();
2443    } else if (name.equals("jurisdiction")) {
2444      return addJurisdiction();
2445    } else if (name.equals("purpose")) {
2446      throw new FHIRException("Cannot call addChild on a singleton property EventDefinition.purpose");
2447    } else if (name.equals("usage")) {
2448      throw new FHIRException("Cannot call addChild on a singleton property EventDefinition.usage");
2449    } else if (name.equals("copyright")) {
2450      throw new FHIRException("Cannot call addChild on a singleton property EventDefinition.copyright");
2451    } else if (name.equals("approvalDate")) {
2452      throw new FHIRException("Cannot call addChild on a singleton property EventDefinition.approvalDate");
2453    } else if (name.equals("lastReviewDate")) {
2454      throw new FHIRException("Cannot call addChild on a singleton property EventDefinition.lastReviewDate");
2455    } else if (name.equals("effectivePeriod")) {
2456      this.effectivePeriod = new Period();
2457      return this.effectivePeriod;
2458    } else if (name.equals("topic")) {
2459      return addTopic();
2460    } else if (name.equals("author")) {
2461      return addAuthor();
2462    } else if (name.equals("editor")) {
2463      return addEditor();
2464    } else if (name.equals("reviewer")) {
2465      return addReviewer();
2466    } else if (name.equals("endorser")) {
2467      return addEndorser();
2468    } else if (name.equals("relatedArtifact")) {
2469      return addRelatedArtifact();
2470    } else if (name.equals("trigger")) {
2471      return addTrigger();
2472    } else
2473      return super.addChild(name);
2474  }
2475
2476  public String fhirType() {
2477    return "EventDefinition";
2478
2479  }
2480
2481  public EventDefinition copy() {
2482    EventDefinition dst = new EventDefinition();
2483    copyValues(dst);
2484    return dst;
2485  }
2486
2487  public void copyValues(EventDefinition dst) {
2488    super.copyValues(dst);
2489    dst.url = url == null ? null : url.copy();
2490    if (identifier != null) {
2491      dst.identifier = new ArrayList<Identifier>();
2492      for (Identifier i : identifier)
2493        dst.identifier.add(i.copy());
2494    }
2495    ;
2496    dst.version = version == null ? null : version.copy();
2497    dst.name = name == null ? null : name.copy();
2498    dst.title = title == null ? null : title.copy();
2499    dst.subtitle = subtitle == null ? null : subtitle.copy();
2500    dst.status = status == null ? null : status.copy();
2501    dst.experimental = experimental == null ? null : experimental.copy();
2502    dst.subject = subject == null ? null : subject.copy();
2503    dst.date = date == null ? null : date.copy();
2504    dst.publisher = publisher == null ? null : publisher.copy();
2505    if (contact != null) {
2506      dst.contact = new ArrayList<ContactDetail>();
2507      for (ContactDetail i : contact)
2508        dst.contact.add(i.copy());
2509    }
2510    ;
2511    dst.description = description == null ? null : description.copy();
2512    if (useContext != null) {
2513      dst.useContext = new ArrayList<UsageContext>();
2514      for (UsageContext i : useContext)
2515        dst.useContext.add(i.copy());
2516    }
2517    ;
2518    if (jurisdiction != null) {
2519      dst.jurisdiction = new ArrayList<CodeableConcept>();
2520      for (CodeableConcept i : jurisdiction)
2521        dst.jurisdiction.add(i.copy());
2522    }
2523    ;
2524    dst.purpose = purpose == null ? null : purpose.copy();
2525    dst.usage = usage == null ? null : usage.copy();
2526    dst.copyright = copyright == null ? null : copyright.copy();
2527    dst.approvalDate = approvalDate == null ? null : approvalDate.copy();
2528    dst.lastReviewDate = lastReviewDate == null ? null : lastReviewDate.copy();
2529    dst.effectivePeriod = effectivePeriod == null ? null : effectivePeriod.copy();
2530    if (topic != null) {
2531      dst.topic = new ArrayList<CodeableConcept>();
2532      for (CodeableConcept i : topic)
2533        dst.topic.add(i.copy());
2534    }
2535    ;
2536    if (author != null) {
2537      dst.author = new ArrayList<ContactDetail>();
2538      for (ContactDetail i : author)
2539        dst.author.add(i.copy());
2540    }
2541    ;
2542    if (editor != null) {
2543      dst.editor = new ArrayList<ContactDetail>();
2544      for (ContactDetail i : editor)
2545        dst.editor.add(i.copy());
2546    }
2547    ;
2548    if (reviewer != null) {
2549      dst.reviewer = new ArrayList<ContactDetail>();
2550      for (ContactDetail i : reviewer)
2551        dst.reviewer.add(i.copy());
2552    }
2553    ;
2554    if (endorser != null) {
2555      dst.endorser = new ArrayList<ContactDetail>();
2556      for (ContactDetail i : endorser)
2557        dst.endorser.add(i.copy());
2558    }
2559    ;
2560    if (relatedArtifact != null) {
2561      dst.relatedArtifact = new ArrayList<RelatedArtifact>();
2562      for (RelatedArtifact i : relatedArtifact)
2563        dst.relatedArtifact.add(i.copy());
2564    }
2565    ;
2566    if (trigger != null) {
2567      dst.trigger = new ArrayList<TriggerDefinition>();
2568      for (TriggerDefinition i : trigger)
2569        dst.trigger.add(i.copy());
2570    }
2571    ;
2572  }
2573
2574  protected EventDefinition typedCopy() {
2575    return copy();
2576  }
2577
2578  @Override
2579  public boolean equalsDeep(Base other_) {
2580    if (!super.equalsDeep(other_))
2581      return false;
2582    if (!(other_ instanceof EventDefinition))
2583      return false;
2584    EventDefinition o = (EventDefinition) other_;
2585    return compareDeep(identifier, o.identifier, true) && compareDeep(subtitle, o.subtitle, true)
2586        && compareDeep(subject, o.subject, true) && compareDeep(purpose, o.purpose, true)
2587        && compareDeep(usage, o.usage, true) && compareDeep(copyright, o.copyright, true)
2588        && compareDeep(approvalDate, o.approvalDate, true) && compareDeep(lastReviewDate, o.lastReviewDate, true)
2589        && compareDeep(effectivePeriod, o.effectivePeriod, true) && compareDeep(topic, o.topic, true)
2590        && compareDeep(author, o.author, true) && compareDeep(editor, o.editor, true)
2591        && compareDeep(reviewer, o.reviewer, true) && compareDeep(endorser, o.endorser, true)
2592        && compareDeep(relatedArtifact, o.relatedArtifact, true) && compareDeep(trigger, o.trigger, true);
2593  }
2594
2595  @Override
2596  public boolean equalsShallow(Base other_) {
2597    if (!super.equalsShallow(other_))
2598      return false;
2599    if (!(other_ instanceof EventDefinition))
2600      return false;
2601    EventDefinition o = (EventDefinition) other_;
2602    return compareValues(subtitle, o.subtitle, true) && compareValues(purpose, o.purpose, true)
2603        && compareValues(usage, o.usage, true) && compareValues(copyright, o.copyright, true)
2604        && compareValues(approvalDate, o.approvalDate, true) && compareValues(lastReviewDate, o.lastReviewDate, true);
2605  }
2606
2607  public boolean isEmpty() {
2608    return super.isEmpty()
2609        && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, subtitle, subject, purpose, usage, copyright, approvalDate,
2610            lastReviewDate, effectivePeriod, topic, author, editor, reviewer, endorser, relatedArtifact, trigger);
2611  }
2612
2613  @Override
2614  public ResourceType getResourceType() {
2615    return ResourceType.EventDefinition;
2616  }
2617
2618  /**
2619   * Search parameter: <b>date</b>
2620   * <p>
2621   * Description: <b>The event definition publication date</b><br>
2622   * Type: <b>date</b><br>
2623   * Path: <b>EventDefinition.date</b><br>
2624   * </p>
2625   */
2626  @SearchParamDefinition(name = "date", path = "EventDefinition.date", description = "The event definition publication date", type = "date")
2627  public static final String SP_DATE = "date";
2628  /**
2629   * <b>Fluent Client</b> search parameter constant for <b>date</b>
2630   * <p>
2631   * Description: <b>The event definition publication date</b><br>
2632   * Type: <b>date</b><br>
2633   * Path: <b>EventDefinition.date</b><br>
2634   * </p>
2635   */
2636  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(
2637      SP_DATE);
2638
2639  /**
2640   * Search parameter: <b>identifier</b>
2641   * <p>
2642   * Description: <b>External identifier for the event definition</b><br>
2643   * Type: <b>token</b><br>
2644   * Path: <b>EventDefinition.identifier</b><br>
2645   * </p>
2646   */
2647  @SearchParamDefinition(name = "identifier", path = "EventDefinition.identifier", description = "External identifier for the event definition", type = "token")
2648  public static final String SP_IDENTIFIER = "identifier";
2649  /**
2650   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
2651   * <p>
2652   * Description: <b>External identifier for the event definition</b><br>
2653   * Type: <b>token</b><br>
2654   * Path: <b>EventDefinition.identifier</b><br>
2655   * </p>
2656   */
2657  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(
2658      SP_IDENTIFIER);
2659
2660  /**
2661   * Search parameter: <b>successor</b>
2662   * <p>
2663   * Description: <b>What resource is being referenced</b><br>
2664   * Type: <b>reference</b><br>
2665   * Path: <b>EventDefinition.relatedArtifact.resource</b><br>
2666   * </p>
2667   */
2668  @SearchParamDefinition(name = "successor", path = "EventDefinition.relatedArtifact.where(type='successor').resource", description = "What resource is being referenced", type = "reference")
2669  public static final String SP_SUCCESSOR = "successor";
2670  /**
2671   * <b>Fluent Client</b> search parameter constant for <b>successor</b>
2672   * <p>
2673   * Description: <b>What resource is being referenced</b><br>
2674   * Type: <b>reference</b><br>
2675   * Path: <b>EventDefinition.relatedArtifact.resource</b><br>
2676   * </p>
2677   */
2678  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SUCCESSOR = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(
2679      SP_SUCCESSOR);
2680
2681  /**
2682   * Constant for fluent queries to be used to add include statements. Specifies
2683   * the path value of "<b>EventDefinition:successor</b>".
2684   */
2685  public static final ca.uhn.fhir.model.api.Include INCLUDE_SUCCESSOR = new ca.uhn.fhir.model.api.Include(
2686      "EventDefinition:successor").toLocked();
2687
2688  /**
2689   * Search parameter: <b>context-type-value</b>
2690   * <p>
2691   * Description: <b>A use context type and value assigned to the event
2692   * definition</b><br>
2693   * Type: <b>composite</b><br>
2694   * Path: <b></b><br>
2695   * </p>
2696   */
2697  @SearchParamDefinition(name = "context-type-value", path = "EventDefinition.useContext", description = "A use context type and value assigned to the event definition", type = "composite", compositeOf = {
2698      "context-type", "context" })
2699  public static final String SP_CONTEXT_TYPE_VALUE = "context-type-value";
2700  /**
2701   * <b>Fluent Client</b> search parameter constant for <b>context-type-value</b>
2702   * <p>
2703   * Description: <b>A use context type and value assigned to the event
2704   * definition</b><br>
2705   * Type: <b>composite</b><br>
2706   * Path: <b></b><br>
2707   * </p>
2708   */
2709  public static final ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.TokenClientParam> CONTEXT_TYPE_VALUE = new ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.TokenClientParam>(
2710      SP_CONTEXT_TYPE_VALUE);
2711
2712  /**
2713   * Search parameter: <b>jurisdiction</b>
2714   * <p>
2715   * Description: <b>Intended jurisdiction for the event definition</b><br>
2716   * Type: <b>token</b><br>
2717   * Path: <b>EventDefinition.jurisdiction</b><br>
2718   * </p>
2719   */
2720  @SearchParamDefinition(name = "jurisdiction", path = "EventDefinition.jurisdiction", description = "Intended jurisdiction for the event definition", type = "token")
2721  public static final String SP_JURISDICTION = "jurisdiction";
2722  /**
2723   * <b>Fluent Client</b> search parameter constant for <b>jurisdiction</b>
2724   * <p>
2725   * Description: <b>Intended jurisdiction for the event definition</b><br>
2726   * Type: <b>token</b><br>
2727   * Path: <b>EventDefinition.jurisdiction</b><br>
2728   * </p>
2729   */
2730  public static final ca.uhn.fhir.rest.gclient.TokenClientParam JURISDICTION = new ca.uhn.fhir.rest.gclient.TokenClientParam(
2731      SP_JURISDICTION);
2732
2733  /**
2734   * Search parameter: <b>description</b>
2735   * <p>
2736   * Description: <b>The description of the event definition</b><br>
2737   * Type: <b>string</b><br>
2738   * Path: <b>EventDefinition.description</b><br>
2739   * </p>
2740   */
2741  @SearchParamDefinition(name = "description", path = "EventDefinition.description", description = "The description of the event definition", type = "string")
2742  public static final String SP_DESCRIPTION = "description";
2743  /**
2744   * <b>Fluent Client</b> search parameter constant for <b>description</b>
2745   * <p>
2746   * Description: <b>The description of the event definition</b><br>
2747   * Type: <b>string</b><br>
2748   * Path: <b>EventDefinition.description</b><br>
2749   * </p>
2750   */
2751  public static final ca.uhn.fhir.rest.gclient.StringClientParam DESCRIPTION = new ca.uhn.fhir.rest.gclient.StringClientParam(
2752      SP_DESCRIPTION);
2753
2754  /**
2755   * Search parameter: <b>derived-from</b>
2756   * <p>
2757   * Description: <b>What resource is being referenced</b><br>
2758   * Type: <b>reference</b><br>
2759   * Path: <b>EventDefinition.relatedArtifact.resource</b><br>
2760   * </p>
2761   */
2762  @SearchParamDefinition(name = "derived-from", path = "EventDefinition.relatedArtifact.where(type='derived-from').resource", description = "What resource is being referenced", type = "reference")
2763  public static final String SP_DERIVED_FROM = "derived-from";
2764  /**
2765   * <b>Fluent Client</b> search parameter constant for <b>derived-from</b>
2766   * <p>
2767   * Description: <b>What resource is being referenced</b><br>
2768   * Type: <b>reference</b><br>
2769   * Path: <b>EventDefinition.relatedArtifact.resource</b><br>
2770   * </p>
2771   */
2772  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam DERIVED_FROM = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(
2773      SP_DERIVED_FROM);
2774
2775  /**
2776   * Constant for fluent queries to be used to add include statements. Specifies
2777   * the path value of "<b>EventDefinition:derived-from</b>".
2778   */
2779  public static final ca.uhn.fhir.model.api.Include INCLUDE_DERIVED_FROM = new ca.uhn.fhir.model.api.Include(
2780      "EventDefinition:derived-from").toLocked();
2781
2782  /**
2783   * Search parameter: <b>context-type</b>
2784   * <p>
2785   * Description: <b>A type of use context assigned to the event
2786   * definition</b><br>
2787   * Type: <b>token</b><br>
2788   * Path: <b>EventDefinition.useContext.code</b><br>
2789   * </p>
2790   */
2791  @SearchParamDefinition(name = "context-type", path = "EventDefinition.useContext.code", description = "A type of use context assigned to the event definition", type = "token")
2792  public static final String SP_CONTEXT_TYPE = "context-type";
2793  /**
2794   * <b>Fluent Client</b> search parameter constant for <b>context-type</b>
2795   * <p>
2796   * Description: <b>A type of use context assigned to the event
2797   * definition</b><br>
2798   * Type: <b>token</b><br>
2799   * Path: <b>EventDefinition.useContext.code</b><br>
2800   * </p>
2801   */
2802  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT_TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(
2803      SP_CONTEXT_TYPE);
2804
2805  /**
2806   * Search parameter: <b>predecessor</b>
2807   * <p>
2808   * Description: <b>What resource is being referenced</b><br>
2809   * Type: <b>reference</b><br>
2810   * Path: <b>EventDefinition.relatedArtifact.resource</b><br>
2811   * </p>
2812   */
2813  @SearchParamDefinition(name = "predecessor", path = "EventDefinition.relatedArtifact.where(type='predecessor').resource", description = "What resource is being referenced", type = "reference")
2814  public static final String SP_PREDECESSOR = "predecessor";
2815  /**
2816   * <b>Fluent Client</b> search parameter constant for <b>predecessor</b>
2817   * <p>
2818   * Description: <b>What resource is being referenced</b><br>
2819   * Type: <b>reference</b><br>
2820   * Path: <b>EventDefinition.relatedArtifact.resource</b><br>
2821   * </p>
2822   */
2823  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PREDECESSOR = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(
2824      SP_PREDECESSOR);
2825
2826  /**
2827   * Constant for fluent queries to be used to add include statements. Specifies
2828   * the path value of "<b>EventDefinition:predecessor</b>".
2829   */
2830  public static final ca.uhn.fhir.model.api.Include INCLUDE_PREDECESSOR = new ca.uhn.fhir.model.api.Include(
2831      "EventDefinition:predecessor").toLocked();
2832
2833  /**
2834   * Search parameter: <b>title</b>
2835   * <p>
2836   * Description: <b>The human-friendly name of the event definition</b><br>
2837   * Type: <b>string</b><br>
2838   * Path: <b>EventDefinition.title</b><br>
2839   * </p>
2840   */
2841  @SearchParamDefinition(name = "title", path = "EventDefinition.title", description = "The human-friendly name of the event definition", type = "string")
2842  public static final String SP_TITLE = "title";
2843  /**
2844   * <b>Fluent Client</b> search parameter constant for <b>title</b>
2845   * <p>
2846   * Description: <b>The human-friendly name of the event definition</b><br>
2847   * Type: <b>string</b><br>
2848   * Path: <b>EventDefinition.title</b><br>
2849   * </p>
2850   */
2851  public static final ca.uhn.fhir.rest.gclient.StringClientParam TITLE = new ca.uhn.fhir.rest.gclient.StringClientParam(
2852      SP_TITLE);
2853
2854  /**
2855   * Search parameter: <b>composed-of</b>
2856   * <p>
2857   * Description: <b>What resource is being referenced</b><br>
2858   * Type: <b>reference</b><br>
2859   * Path: <b>EventDefinition.relatedArtifact.resource</b><br>
2860   * </p>
2861   */
2862  @SearchParamDefinition(name = "composed-of", path = "EventDefinition.relatedArtifact.where(type='composed-of').resource", description = "What resource is being referenced", type = "reference")
2863  public static final String SP_COMPOSED_OF = "composed-of";
2864  /**
2865   * <b>Fluent Client</b> search parameter constant for <b>composed-of</b>
2866   * <p>
2867   * Description: <b>What resource is being referenced</b><br>
2868   * Type: <b>reference</b><br>
2869   * Path: <b>EventDefinition.relatedArtifact.resource</b><br>
2870   * </p>
2871   */
2872  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam COMPOSED_OF = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(
2873      SP_COMPOSED_OF);
2874
2875  /**
2876   * Constant for fluent queries to be used to add include statements. Specifies
2877   * the path value of "<b>EventDefinition:composed-of</b>".
2878   */
2879  public static final ca.uhn.fhir.model.api.Include INCLUDE_COMPOSED_OF = new ca.uhn.fhir.model.api.Include(
2880      "EventDefinition:composed-of").toLocked();
2881
2882  /**
2883   * Search parameter: <b>version</b>
2884   * <p>
2885   * Description: <b>The business version of the event definition</b><br>
2886   * Type: <b>token</b><br>
2887   * Path: <b>EventDefinition.version</b><br>
2888   * </p>
2889   */
2890  @SearchParamDefinition(name = "version", path = "EventDefinition.version", description = "The business version of the event definition", type = "token")
2891  public static final String SP_VERSION = "version";
2892  /**
2893   * <b>Fluent Client</b> search parameter constant for <b>version</b>
2894   * <p>
2895   * Description: <b>The business version of the event definition</b><br>
2896   * Type: <b>token</b><br>
2897   * Path: <b>EventDefinition.version</b><br>
2898   * </p>
2899   */
2900  public static final ca.uhn.fhir.rest.gclient.TokenClientParam VERSION = new ca.uhn.fhir.rest.gclient.TokenClientParam(
2901      SP_VERSION);
2902
2903  /**
2904   * Search parameter: <b>url</b>
2905   * <p>
2906   * Description: <b>The uri that identifies the event definition</b><br>
2907   * Type: <b>uri</b><br>
2908   * Path: <b>EventDefinition.url</b><br>
2909   * </p>
2910   */
2911  @SearchParamDefinition(name = "url", path = "EventDefinition.url", description = "The uri that identifies the event definition", type = "uri")
2912  public static final String SP_URL = "url";
2913  /**
2914   * <b>Fluent Client</b> search parameter constant for <b>url</b>
2915   * <p>
2916   * Description: <b>The uri that identifies the event definition</b><br>
2917   * Type: <b>uri</b><br>
2918   * Path: <b>EventDefinition.url</b><br>
2919   * </p>
2920   */
2921  public static final ca.uhn.fhir.rest.gclient.UriClientParam URL = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_URL);
2922
2923  /**
2924   * Search parameter: <b>context-quantity</b>
2925   * <p>
2926   * Description: <b>A quantity- or range-valued use context assigned to the event
2927   * definition</b><br>
2928   * Type: <b>quantity</b><br>
2929   * Path: <b>EventDefinition.useContext.valueQuantity,
2930   * EventDefinition.useContext.valueRange</b><br>
2931   * </p>
2932   */
2933  @SearchParamDefinition(name = "context-quantity", path = "(EventDefinition.useContext.value as Quantity) | (EventDefinition.useContext.value as Range)", description = "A quantity- or range-valued use context assigned to the event definition", type = "quantity")
2934  public static final String SP_CONTEXT_QUANTITY = "context-quantity";
2935  /**
2936   * <b>Fluent Client</b> search parameter constant for <b>context-quantity</b>
2937   * <p>
2938   * Description: <b>A quantity- or range-valued use context assigned to the event
2939   * definition</b><br>
2940   * Type: <b>quantity</b><br>
2941   * Path: <b>EventDefinition.useContext.valueQuantity,
2942   * EventDefinition.useContext.valueRange</b><br>
2943   * </p>
2944   */
2945  public static final ca.uhn.fhir.rest.gclient.QuantityClientParam CONTEXT_QUANTITY = new ca.uhn.fhir.rest.gclient.QuantityClientParam(
2946      SP_CONTEXT_QUANTITY);
2947
2948  /**
2949   * Search parameter: <b>effective</b>
2950   * <p>
2951   * Description: <b>The time during which the event definition is intended to be
2952   * in use</b><br>
2953   * Type: <b>date</b><br>
2954   * Path: <b>EventDefinition.effectivePeriod</b><br>
2955   * </p>
2956   */
2957  @SearchParamDefinition(name = "effective", path = "EventDefinition.effectivePeriod", description = "The time during which the event definition is intended to be in use", type = "date")
2958  public static final String SP_EFFECTIVE = "effective";
2959  /**
2960   * <b>Fluent Client</b> search parameter constant for <b>effective</b>
2961   * <p>
2962   * Description: <b>The time during which the event definition is intended to be
2963   * in use</b><br>
2964   * Type: <b>date</b><br>
2965   * Path: <b>EventDefinition.effectivePeriod</b><br>
2966   * </p>
2967   */
2968  public static final ca.uhn.fhir.rest.gclient.DateClientParam EFFECTIVE = new ca.uhn.fhir.rest.gclient.DateClientParam(
2969      SP_EFFECTIVE);
2970
2971  /**
2972   * Search parameter: <b>depends-on</b>
2973   * <p>
2974   * Description: <b>What resource is being referenced</b><br>
2975   * Type: <b>reference</b><br>
2976   * Path: <b>EventDefinition.relatedArtifact.resource</b><br>
2977   * </p>
2978   */
2979  @SearchParamDefinition(name = "depends-on", path = "EventDefinition.relatedArtifact.where(type='depends-on').resource", description = "What resource is being referenced", type = "reference")
2980  public static final String SP_DEPENDS_ON = "depends-on";
2981  /**
2982   * <b>Fluent Client</b> search parameter constant for <b>depends-on</b>
2983   * <p>
2984   * Description: <b>What resource is being referenced</b><br>
2985   * Type: <b>reference</b><br>
2986   * Path: <b>EventDefinition.relatedArtifact.resource</b><br>
2987   * </p>
2988   */
2989  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam DEPENDS_ON = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(
2990      SP_DEPENDS_ON);
2991
2992  /**
2993   * Constant for fluent queries to be used to add include statements. Specifies
2994   * the path value of "<b>EventDefinition:depends-on</b>".
2995   */
2996  public static final ca.uhn.fhir.model.api.Include INCLUDE_DEPENDS_ON = new ca.uhn.fhir.model.api.Include(
2997      "EventDefinition:depends-on").toLocked();
2998
2999  /**
3000   * Search parameter: <b>name</b>
3001   * <p>
3002   * Description: <b>Computationally friendly name of the event definition</b><br>
3003   * Type: <b>string</b><br>
3004   * Path: <b>EventDefinition.name</b><br>
3005   * </p>
3006   */
3007  @SearchParamDefinition(name = "name", path = "EventDefinition.name", description = "Computationally friendly name of the event definition", type = "string")
3008  public static final String SP_NAME = "name";
3009  /**
3010   * <b>Fluent Client</b> search parameter constant for <b>name</b>
3011   * <p>
3012   * Description: <b>Computationally friendly name of the event definition</b><br>
3013   * Type: <b>string</b><br>
3014   * Path: <b>EventDefinition.name</b><br>
3015   * </p>
3016   */
3017  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(
3018      SP_NAME);
3019
3020  /**
3021   * Search parameter: <b>context</b>
3022   * <p>
3023   * Description: <b>A use context assigned to the event definition</b><br>
3024   * Type: <b>token</b><br>
3025   * Path: <b>EventDefinition.useContext.valueCodeableConcept</b><br>
3026   * </p>
3027   */
3028  @SearchParamDefinition(name = "context", path = "(EventDefinition.useContext.value as CodeableConcept)", description = "A use context assigned to the event definition", type = "token")
3029  public static final String SP_CONTEXT = "context";
3030  /**
3031   * <b>Fluent Client</b> search parameter constant for <b>context</b>
3032   * <p>
3033   * Description: <b>A use context assigned to the event definition</b><br>
3034   * Type: <b>token</b><br>
3035   * Path: <b>EventDefinition.useContext.valueCodeableConcept</b><br>
3036   * </p>
3037   */
3038  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT = new ca.uhn.fhir.rest.gclient.TokenClientParam(
3039      SP_CONTEXT);
3040
3041  /**
3042   * Search parameter: <b>publisher</b>
3043   * <p>
3044   * Description: <b>Name of the publisher of the event definition</b><br>
3045   * Type: <b>string</b><br>
3046   * Path: <b>EventDefinition.publisher</b><br>
3047   * </p>
3048   */
3049  @SearchParamDefinition(name = "publisher", path = "EventDefinition.publisher", description = "Name of the publisher of the event definition", type = "string")
3050  public static final String SP_PUBLISHER = "publisher";
3051  /**
3052   * <b>Fluent Client</b> search parameter constant for <b>publisher</b>
3053   * <p>
3054   * Description: <b>Name of the publisher of the event definition</b><br>
3055   * Type: <b>string</b><br>
3056   * Path: <b>EventDefinition.publisher</b><br>
3057   * </p>
3058   */
3059  public static final ca.uhn.fhir.rest.gclient.StringClientParam PUBLISHER = new ca.uhn.fhir.rest.gclient.StringClientParam(
3060      SP_PUBLISHER);
3061
3062  /**
3063   * Search parameter: <b>topic</b>
3064   * <p>
3065   * Description: <b>Topics associated with the module</b><br>
3066   * Type: <b>token</b><br>
3067   * Path: <b>EventDefinition.topic</b><br>
3068   * </p>
3069   */
3070  @SearchParamDefinition(name = "topic", path = "EventDefinition.topic", description = "Topics associated with the module", type = "token")
3071  public static final String SP_TOPIC = "topic";
3072  /**
3073   * <b>Fluent Client</b> search parameter constant for <b>topic</b>
3074   * <p>
3075   * Description: <b>Topics associated with the module</b><br>
3076   * Type: <b>token</b><br>
3077   * Path: <b>EventDefinition.topic</b><br>
3078   * </p>
3079   */
3080  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TOPIC = new ca.uhn.fhir.rest.gclient.TokenClientParam(
3081      SP_TOPIC);
3082
3083  /**
3084   * Search parameter: <b>context-type-quantity</b>
3085   * <p>
3086   * Description: <b>A use context type and quantity- or range-based value
3087   * assigned to the event definition</b><br>
3088   * Type: <b>composite</b><br>
3089   * Path: <b></b><br>
3090   * </p>
3091   */
3092  @SearchParamDefinition(name = "context-type-quantity", path = "EventDefinition.useContext", description = "A use context type and quantity- or range-based value assigned to the event definition", type = "composite", compositeOf = {
3093      "context-type", "context-quantity" })
3094  public static final String SP_CONTEXT_TYPE_QUANTITY = "context-type-quantity";
3095  /**
3096   * <b>Fluent Client</b> search parameter constant for
3097   * <b>context-type-quantity</b>
3098   * <p>
3099   * Description: <b>A use context type and quantity- or range-based value
3100   * assigned to the event definition</b><br>
3101   * Type: <b>composite</b><br>
3102   * Path: <b></b><br>
3103   * </p>
3104   */
3105  public static final ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.QuantityClientParam> CONTEXT_TYPE_QUANTITY = new ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.QuantityClientParam>(
3106      SP_CONTEXT_TYPE_QUANTITY);
3107
3108  /**
3109   * Search parameter: <b>status</b>
3110   * <p>
3111   * Description: <b>The current status of the event definition</b><br>
3112   * Type: <b>token</b><br>
3113   * Path: <b>EventDefinition.status</b><br>
3114   * </p>
3115   */
3116  @SearchParamDefinition(name = "status", path = "EventDefinition.status", description = "The current status of the event definition", type = "token")
3117  public static final String SP_STATUS = "status";
3118  /**
3119   * <b>Fluent Client</b> search parameter constant for <b>status</b>
3120   * <p>
3121   * Description: <b>The current status of the event definition</b><br>
3122   * Type: <b>token</b><br>
3123   * Path: <b>EventDefinition.status</b><br>
3124   * </p>
3125   */
3126  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(
3127      SP_STATUS);
3128
3129}