001package org.hl7.fhir.dstu3.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 Mon, Apr 17, 2017 17:38-0400 for FHIR v3.0.1
033
034import java.util.*;
035
036import org.hl7.fhir.utilities.Utilities;
037import org.hl7.fhir.dstu3.model.Enumerations.*;
038import ca.uhn.fhir.model.api.annotation.ResourceDef;
039import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
040import ca.uhn.fhir.model.api.annotation.Child;
041import ca.uhn.fhir.model.api.annotation.ChildOrder;
042import ca.uhn.fhir.model.api.annotation.Description;
043import ca.uhn.fhir.model.api.annotation.Block;
044import org.hl7.fhir.instance.model.api.*;
045import org.hl7.fhir.exceptions.FHIRException;
046/**
047 * The ServiceDefinition describes a unit of decision support functionality that is made available as a service, such as immunization modules or drug-drug interaction checking.
048 */
049@ResourceDef(name="ServiceDefinition", profile="http://hl7.org/fhir/Profile/ServiceDefinition")
050@ChildOrder(names={"url", "identifier", "version", "name", "title", "status", "experimental", "date", "publisher", "description", "purpose", "usage", "approvalDate", "lastReviewDate", "effectivePeriod", "useContext", "jurisdiction", "topic", "contributor", "contact", "copyright", "relatedArtifact", "trigger", "dataRequirement", "operationDefinition"})
051public class ServiceDefinition extends MetadataResource {
052
053    /**
054     * A formal identifier that is used to identify this service definition when it is represented in other formats, or referenced in a specification, model, design or an instance. This is used for CMS or NQF identifiers for a measure artifact. Note that at least one identifier is required for non-experimental active artifacts.
055     */
056    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
057    @Description(shortDefinition="Additional identifier for the service definition", formalDefinition="A formal identifier that is used to identify this service definition when it is represented in other formats, or referenced in a specification, model, design or an instance. This is used for CMS or NQF identifiers for a measure artifact. Note that at least one identifier is required for non-experimental active artifacts." )
058    protected List<Identifier> identifier;
059
060    /**
061     * Explaination of why this service definition is needed and why it has been designed as it has.
062     */
063    @Child(name = "purpose", type = {MarkdownType.class}, order=1, min=0, max=1, modifier=false, summary=false)
064    @Description(shortDefinition="Why this service definition is defined", formalDefinition="Explaination of why this service definition is needed and why it has been designed as it has." )
065    protected MarkdownType purpose;
066
067    /**
068     * A detailed description of how the module is used from a clinical perspective.
069     */
070    @Child(name = "usage", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
071    @Description(shortDefinition="Describes the clinical usage of the module", formalDefinition="A detailed description of how the module is used from a clinical perspective." )
072    protected StringType usage;
073
074    /**
075     * The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
076     */
077    @Child(name = "approvalDate", type = {DateType.class}, order=3, min=0, max=1, modifier=false, summary=false)
078    @Description(shortDefinition="When the service 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." )
079    protected DateType approvalDate;
080
081    /**
082     * The date on which the resource content was last reviewed. Review happens periodically after approval, but doesn't change the original approval date.
083     */
084    @Child(name = "lastReviewDate", type = {DateType.class}, order=4, min=0, max=1, modifier=false, summary=false)
085    @Description(shortDefinition="When the service definition was last reviewed", formalDefinition="The date on which the resource content was last reviewed. Review happens periodically after approval, but doesn't change the original approval date." )
086    protected DateType lastReviewDate;
087
088    /**
089     * The period during which the service definition content was or is planned to be in active use.
090     */
091    @Child(name = "effectivePeriod", type = {Period.class}, order=5, min=0, max=1, modifier=false, summary=true)
092    @Description(shortDefinition="When the service definition is expected to be used", formalDefinition="The period during which the service definition content was or is planned to be in active use." )
093    protected Period effectivePeriod;
094
095    /**
096     * Descriptive topics related to the module. Topics provide a high-level categorization of the module that can be useful for filtering and searching.
097     */
098    @Child(name = "topic", type = {CodeableConcept.class}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
099    @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." )
100    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/definition-topic")
101    protected List<CodeableConcept> topic;
102
103    /**
104     * A contributor to the content of the module, including authors, editors, reviewers, and endorsers.
105     */
106    @Child(name = "contributor", type = {Contributor.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
107    @Description(shortDefinition="A content contributor", formalDefinition="A contributor to the content of the module, including authors, editors, reviewers, and endorsers." )
108    protected List<Contributor> contributor;
109
110    /**
111     * A copyright statement relating to the service definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the service definition.
112     */
113    @Child(name = "copyright", type = {MarkdownType.class}, order=8, min=0, max=1, modifier=false, summary=false)
114    @Description(shortDefinition="Use and/or publishing restrictions", formalDefinition="A copyright statement relating to the service definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the service definition." )
115    protected MarkdownType copyright;
116
117    /**
118     * Related resources such as additional documentation, justification, or bibliographic references.
119     */
120    @Child(name = "relatedArtifact", type = {RelatedArtifact.class}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
121    @Description(shortDefinition="Additional documentation, citations, etc", formalDefinition="Related resources such as additional documentation, justification, or bibliographic references." )
122    protected List<RelatedArtifact> relatedArtifact;
123
124    /**
125     * The trigger element defines when the rule should be invoked. This information is used by consumers of the rule to determine how to integrate the rule into a specific workflow.
126     */
127    @Child(name = "trigger", type = {TriggerDefinition.class}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
128    @Description(shortDefinition="\"when\" the module should be invoked", formalDefinition="The trigger element defines when the rule should be invoked. This information is used by consumers of the rule to determine how to integrate the rule into a specific workflow." )
129    protected List<TriggerDefinition> trigger;
130
131    /**
132     * Data requirements are a machine processable description of the data required by the module in order to perform a successful evaluation.
133     */
134    @Child(name = "dataRequirement", type = {DataRequirement.class}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
135    @Description(shortDefinition="What data is used by the module", formalDefinition="Data requirements are a machine processable description of the data required by the module in order to perform a successful evaluation." )
136    protected List<DataRequirement> dataRequirement;
137
138    /**
139     * A reference to the operation that is used to invoke this service.
140     */
141    @Child(name = "operationDefinition", type = {OperationDefinition.class}, order=12, min=0, max=1, modifier=false, summary=false)
142    @Description(shortDefinition="Operation to invoke", formalDefinition="A reference to the operation that is used to invoke this service." )
143    protected Reference operationDefinition;
144
145    /**
146     * The actual object that is the target of the reference (A reference to the operation that is used to invoke this service.)
147     */
148    protected OperationDefinition operationDefinitionTarget;
149
150    private static final long serialVersionUID = -1517933892L;
151
152  /**
153   * Constructor
154   */
155    public ServiceDefinition() {
156      super();
157    }
158
159  /**
160   * Constructor
161   */
162    public ServiceDefinition(Enumeration<PublicationStatus> status) {
163      super();
164      this.status = status;
165    }
166
167    /**
168     * @return {@link #url} (An absolute URI that is used to identify this service definition when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this service definition is (or will be) published. The URL SHOULD include the major version of the service definition. For more information see [Technical and Business Versions](resource.html#versions).). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
169     */
170    public UriType getUrlElement() { 
171      if (this.url == null)
172        if (Configuration.errorOnAutoCreate())
173          throw new Error("Attempt to auto-create ServiceDefinition.url");
174        else if (Configuration.doAutoCreate())
175          this.url = new UriType(); // bb
176      return this.url;
177    }
178
179    public boolean hasUrlElement() { 
180      return this.url != null && !this.url.isEmpty();
181    }
182
183    public boolean hasUrl() { 
184      return this.url != null && !this.url.isEmpty();
185    }
186
187    /**
188     * @param value {@link #url} (An absolute URI that is used to identify this service definition when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this service definition is (or will be) published. The URL SHOULD include the major version of the service definition. For more information see [Technical and Business Versions](resource.html#versions).). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
189     */
190    public ServiceDefinition setUrlElement(UriType value) { 
191      this.url = value;
192      return this;
193    }
194
195    /**
196     * @return An absolute URI that is used to identify this service definition when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this service definition is (or will be) published. The URL SHOULD include the major version of the service definition. For more information see [Technical and Business Versions](resource.html#versions).
197     */
198    public String getUrl() { 
199      return this.url == null ? null : this.url.getValue();
200    }
201
202    /**
203     * @param value An absolute URI that is used to identify this service definition when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this service definition is (or will be) published. The URL SHOULD include the major version of the service definition. For more information see [Technical and Business Versions](resource.html#versions).
204     */
205    public ServiceDefinition setUrl(String value) { 
206      if (Utilities.noString(value))
207        this.url = null;
208      else {
209        if (this.url == null)
210          this.url = new UriType();
211        this.url.setValue(value);
212      }
213      return this;
214    }
215
216    /**
217     * @return {@link #identifier} (A formal identifier that is used to identify this service definition when it is represented in other formats, or referenced in a specification, model, design or an instance. This is used for CMS or NQF identifiers for a measure artifact. Note that at least one identifier is required for non-experimental active artifacts.)
218     */
219    public List<Identifier> getIdentifier() { 
220      if (this.identifier == null)
221        this.identifier = new ArrayList<Identifier>();
222      return this.identifier;
223    }
224
225    /**
226     * @return Returns a reference to <code>this</code> for easy method chaining
227     */
228    public ServiceDefinition setIdentifier(List<Identifier> theIdentifier) { 
229      this.identifier = theIdentifier;
230      return this;
231    }
232
233    public boolean hasIdentifier() { 
234      if (this.identifier == null)
235        return false;
236      for (Identifier item : this.identifier)
237        if (!item.isEmpty())
238          return true;
239      return false;
240    }
241
242    public Identifier addIdentifier() { //3
243      Identifier t = new Identifier();
244      if (this.identifier == null)
245        this.identifier = new ArrayList<Identifier>();
246      this.identifier.add(t);
247      return t;
248    }
249
250    public ServiceDefinition addIdentifier(Identifier t) { //3
251      if (t == null)
252        return this;
253      if (this.identifier == null)
254        this.identifier = new ArrayList<Identifier>();
255      this.identifier.add(t);
256      return this;
257    }
258
259    /**
260     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist
261     */
262    public Identifier getIdentifierFirstRep() { 
263      if (getIdentifier().isEmpty()) {
264        addIdentifier();
265      }
266      return getIdentifier().get(0);
267    }
268
269    /**
270     * @return {@link #version} (The identifier that is used to identify this version of the service definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the service definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
271     */
272    public StringType getVersionElement() { 
273      if (this.version == null)
274        if (Configuration.errorOnAutoCreate())
275          throw new Error("Attempt to auto-create ServiceDefinition.version");
276        else if (Configuration.doAutoCreate())
277          this.version = new StringType(); // bb
278      return this.version;
279    }
280
281    public boolean hasVersionElement() { 
282      return this.version != null && !this.version.isEmpty();
283    }
284
285    public boolean hasVersion() { 
286      return this.version != null && !this.version.isEmpty();
287    }
288
289    /**
290     * @param value {@link #version} (The identifier that is used to identify this version of the service definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the service definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
291     */
292    public ServiceDefinition setVersionElement(StringType value) { 
293      this.version = value;
294      return this;
295    }
296
297    /**
298     * @return The identifier that is used to identify this version of the service definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the service 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.
299     */
300    public String getVersion() { 
301      return this.version == null ? null : this.version.getValue();
302    }
303
304    /**
305     * @param value The identifier that is used to identify this version of the service definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the service 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.
306     */
307    public ServiceDefinition setVersion(String value) { 
308      if (Utilities.noString(value))
309        this.version = null;
310      else {
311        if (this.version == null)
312          this.version = new StringType();
313        this.version.setValue(value);
314      }
315      return this;
316    }
317
318    /**
319     * @return {@link #name} (A natural language name identifying the service definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
320     */
321    public StringType getNameElement() { 
322      if (this.name == null)
323        if (Configuration.errorOnAutoCreate())
324          throw new Error("Attempt to auto-create ServiceDefinition.name");
325        else if (Configuration.doAutoCreate())
326          this.name = new StringType(); // bb
327      return this.name;
328    }
329
330    public boolean hasNameElement() { 
331      return this.name != null && !this.name.isEmpty();
332    }
333
334    public boolean hasName() { 
335      return this.name != null && !this.name.isEmpty();
336    }
337
338    /**
339     * @param value {@link #name} (A natural language name identifying the service definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
340     */
341    public ServiceDefinition setNameElement(StringType value) { 
342      this.name = value;
343      return this;
344    }
345
346    /**
347     * @return A natural language name identifying the service definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.
348     */
349    public String getName() { 
350      return this.name == null ? null : this.name.getValue();
351    }
352
353    /**
354     * @param value A natural language name identifying the service definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.
355     */
356    public ServiceDefinition setName(String value) { 
357      if (Utilities.noString(value))
358        this.name = null;
359      else {
360        if (this.name == null)
361          this.name = new StringType();
362        this.name.setValue(value);
363      }
364      return this;
365    }
366
367    /**
368     * @return {@link #title} (A short, descriptive, user-friendly title for the service definition.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
369     */
370    public StringType getTitleElement() { 
371      if (this.title == null)
372        if (Configuration.errorOnAutoCreate())
373          throw new Error("Attempt to auto-create ServiceDefinition.title");
374        else if (Configuration.doAutoCreate())
375          this.title = new StringType(); // bb
376      return this.title;
377    }
378
379    public boolean hasTitleElement() { 
380      return this.title != null && !this.title.isEmpty();
381    }
382
383    public boolean hasTitle() { 
384      return this.title != null && !this.title.isEmpty();
385    }
386
387    /**
388     * @param value {@link #title} (A short, descriptive, user-friendly title for the service definition.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
389     */
390    public ServiceDefinition setTitleElement(StringType value) { 
391      this.title = value;
392      return this;
393    }
394
395    /**
396     * @return A short, descriptive, user-friendly title for the service definition.
397     */
398    public String getTitle() { 
399      return this.title == null ? null : this.title.getValue();
400    }
401
402    /**
403     * @param value A short, descriptive, user-friendly title for the service definition.
404     */
405    public ServiceDefinition setTitle(String value) { 
406      if (Utilities.noString(value))
407        this.title = null;
408      else {
409        if (this.title == null)
410          this.title = new StringType();
411        this.title.setValue(value);
412      }
413      return this;
414    }
415
416    /**
417     * @return {@link #status} (The status of this service definition. Enables tracking the life-cycle of the content.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
418     */
419    public Enumeration<PublicationStatus> getStatusElement() { 
420      if (this.status == null)
421        if (Configuration.errorOnAutoCreate())
422          throw new Error("Attempt to auto-create ServiceDefinition.status");
423        else if (Configuration.doAutoCreate())
424          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory()); // bb
425      return this.status;
426    }
427
428    public boolean hasStatusElement() { 
429      return this.status != null && !this.status.isEmpty();
430    }
431
432    public boolean hasStatus() { 
433      return this.status != null && !this.status.isEmpty();
434    }
435
436    /**
437     * @param value {@link #status} (The status of this service definition. Enables tracking the life-cycle of the content.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
438     */
439    public ServiceDefinition setStatusElement(Enumeration<PublicationStatus> value) { 
440      this.status = value;
441      return this;
442    }
443
444    /**
445     * @return The status of this service definition. Enables tracking the life-cycle of the content.
446     */
447    public PublicationStatus getStatus() { 
448      return this.status == null ? null : this.status.getValue();
449    }
450
451    /**
452     * @param value The status of this service definition. Enables tracking the life-cycle of the content.
453     */
454    public ServiceDefinition setStatus(PublicationStatus value) { 
455        if (this.status == null)
456          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory());
457        this.status.setValue(value);
458      return this;
459    }
460
461    /**
462     * @return {@link #experimental} (A boolean value to indicate that this service definition is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.). This is the underlying object with id, value and extensions. The accessor "getExperimental" gives direct access to the value
463     */
464    public BooleanType getExperimentalElement() { 
465      if (this.experimental == null)
466        if (Configuration.errorOnAutoCreate())
467          throw new Error("Attempt to auto-create ServiceDefinition.experimental");
468        else if (Configuration.doAutoCreate())
469          this.experimental = new BooleanType(); // bb
470      return this.experimental;
471    }
472
473    public boolean hasExperimentalElement() { 
474      return this.experimental != null && !this.experimental.isEmpty();
475    }
476
477    public boolean hasExperimental() { 
478      return this.experimental != null && !this.experimental.isEmpty();
479    }
480
481    /**
482     * @param value {@link #experimental} (A boolean value to indicate that this service definition is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.). This is the underlying object with id, value and extensions. The accessor "getExperimental" gives direct access to the value
483     */
484    public ServiceDefinition setExperimentalElement(BooleanType value) { 
485      this.experimental = value;
486      return this;
487    }
488
489    /**
490     * @return A boolean value to indicate that this service definition is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
491     */
492    public boolean getExperimental() { 
493      return this.experimental == null || this.experimental.isEmpty() ? false : this.experimental.getValue();
494    }
495
496    /**
497     * @param value A boolean value to indicate that this service definition is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
498     */
499    public ServiceDefinition setExperimental(boolean value) { 
500        if (this.experimental == null)
501          this.experimental = new BooleanType();
502        this.experimental.setValue(value);
503      return this;
504    }
505
506    /**
507     * @return {@link #date} (The date  (and optionally time) when the service definition was published. The date must change if and 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 service definition changes.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
508     */
509    public DateTimeType getDateElement() { 
510      if (this.date == null)
511        if (Configuration.errorOnAutoCreate())
512          throw new Error("Attempt to auto-create ServiceDefinition.date");
513        else if (Configuration.doAutoCreate())
514          this.date = new DateTimeType(); // bb
515      return this.date;
516    }
517
518    public boolean hasDateElement() { 
519      return this.date != null && !this.date.isEmpty();
520    }
521
522    public boolean hasDate() { 
523      return this.date != null && !this.date.isEmpty();
524    }
525
526    /**
527     * @param value {@link #date} (The date  (and optionally time) when the service definition was published. The date must change if and 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 service definition changes.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
528     */
529    public ServiceDefinition setDateElement(DateTimeType value) { 
530      this.date = value;
531      return this;
532    }
533
534    /**
535     * @return The date  (and optionally time) when the service definition was published. The date must change if and 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 service definition changes.
536     */
537    public Date getDate() { 
538      return this.date == null ? null : this.date.getValue();
539    }
540
541    /**
542     * @param value The date  (and optionally time) when the service definition was published. The date must change if and 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 service definition changes.
543     */
544    public ServiceDefinition setDate(Date value) { 
545      if (value == null)
546        this.date = null;
547      else {
548        if (this.date == null)
549          this.date = new DateTimeType();
550        this.date.setValue(value);
551      }
552      return this;
553    }
554
555    /**
556     * @return {@link #publisher} (The name of the individual or organization that published the service definition.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
557     */
558    public StringType getPublisherElement() { 
559      if (this.publisher == null)
560        if (Configuration.errorOnAutoCreate())
561          throw new Error("Attempt to auto-create ServiceDefinition.publisher");
562        else if (Configuration.doAutoCreate())
563          this.publisher = new StringType(); // bb
564      return this.publisher;
565    }
566
567    public boolean hasPublisherElement() { 
568      return this.publisher != null && !this.publisher.isEmpty();
569    }
570
571    public boolean hasPublisher() { 
572      return this.publisher != null && !this.publisher.isEmpty();
573    }
574
575    /**
576     * @param value {@link #publisher} (The name of the individual or organization that published the service definition.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
577     */
578    public ServiceDefinition setPublisherElement(StringType value) { 
579      this.publisher = value;
580      return this;
581    }
582
583    /**
584     * @return The name of the individual or organization that published the service definition.
585     */
586    public String getPublisher() { 
587      return this.publisher == null ? null : this.publisher.getValue();
588    }
589
590    /**
591     * @param value The name of the individual or organization that published the service definition.
592     */
593    public ServiceDefinition setPublisher(String value) { 
594      if (Utilities.noString(value))
595        this.publisher = null;
596      else {
597        if (this.publisher == null)
598          this.publisher = new StringType();
599        this.publisher.setValue(value);
600      }
601      return this;
602    }
603
604    /**
605     * @return {@link #description} (A free text natural language description of the service definition from a consumer's perspective.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
606     */
607    public MarkdownType getDescriptionElement() { 
608      if (this.description == null)
609        if (Configuration.errorOnAutoCreate())
610          throw new Error("Attempt to auto-create ServiceDefinition.description");
611        else if (Configuration.doAutoCreate())
612          this.description = new MarkdownType(); // bb
613      return this.description;
614    }
615
616    public boolean hasDescriptionElement() { 
617      return this.description != null && !this.description.isEmpty();
618    }
619
620    public boolean hasDescription() { 
621      return this.description != null && !this.description.isEmpty();
622    }
623
624    /**
625     * @param value {@link #description} (A free text natural language description of the service definition from a consumer's perspective.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
626     */
627    public ServiceDefinition setDescriptionElement(MarkdownType value) { 
628      this.description = value;
629      return this;
630    }
631
632    /**
633     * @return A free text natural language description of the service definition from a consumer's perspective.
634     */
635    public String getDescription() { 
636      return this.description == null ? null : this.description.getValue();
637    }
638
639    /**
640     * @param value A free text natural language description of the service definition from a consumer's perspective.
641     */
642    public ServiceDefinition setDescription(String value) { 
643      if (value == null)
644        this.description = null;
645      else {
646        if (this.description == null)
647          this.description = new MarkdownType();
648        this.description.setValue(value);
649      }
650      return this;
651    }
652
653    /**
654     * @return {@link #purpose} (Explaination of why this service definition is needed and why it has been designed as it has.). This is the underlying object with id, value and extensions. The accessor "getPurpose" gives direct access to the value
655     */
656    public MarkdownType getPurposeElement() { 
657      if (this.purpose == null)
658        if (Configuration.errorOnAutoCreate())
659          throw new Error("Attempt to auto-create ServiceDefinition.purpose");
660        else if (Configuration.doAutoCreate())
661          this.purpose = new MarkdownType(); // bb
662      return this.purpose;
663    }
664
665    public boolean hasPurposeElement() { 
666      return this.purpose != null && !this.purpose.isEmpty();
667    }
668
669    public boolean hasPurpose() { 
670      return this.purpose != null && !this.purpose.isEmpty();
671    }
672
673    /**
674     * @param value {@link #purpose} (Explaination of why this service definition is needed and why it has been designed as it has.). This is the underlying object with id, value and extensions. The accessor "getPurpose" gives direct access to the value
675     */
676    public ServiceDefinition setPurposeElement(MarkdownType value) { 
677      this.purpose = value;
678      return this;
679    }
680
681    /**
682     * @return Explaination of why this service definition is needed and why it has been designed as it has.
683     */
684    public String getPurpose() { 
685      return this.purpose == null ? null : this.purpose.getValue();
686    }
687
688    /**
689     * @param value Explaination of why this service definition is needed and why it has been designed as it has.
690     */
691    public ServiceDefinition setPurpose(String value) { 
692      if (value == null)
693        this.purpose = null;
694      else {
695        if (this.purpose == null)
696          this.purpose = new MarkdownType();
697        this.purpose.setValue(value);
698      }
699      return this;
700    }
701
702    /**
703     * @return {@link #usage} (A detailed description of how the module is used from a clinical perspective.). This is the underlying object with id, value and extensions. The accessor "getUsage" gives direct access to the value
704     */
705    public StringType getUsageElement() { 
706      if (this.usage == null)
707        if (Configuration.errorOnAutoCreate())
708          throw new Error("Attempt to auto-create ServiceDefinition.usage");
709        else if (Configuration.doAutoCreate())
710          this.usage = new StringType(); // bb
711      return this.usage;
712    }
713
714    public boolean hasUsageElement() { 
715      return this.usage != null && !this.usage.isEmpty();
716    }
717
718    public boolean hasUsage() { 
719      return this.usage != null && !this.usage.isEmpty();
720    }
721
722    /**
723     * @param value {@link #usage} (A detailed description of how the module is used from a clinical perspective.). This is the underlying object with id, value and extensions. The accessor "getUsage" gives direct access to the value
724     */
725    public ServiceDefinition setUsageElement(StringType value) { 
726      this.usage = value;
727      return this;
728    }
729
730    /**
731     * @return A detailed description of how the module is used from a clinical perspective.
732     */
733    public String getUsage() { 
734      return this.usage == null ? null : this.usage.getValue();
735    }
736
737    /**
738     * @param value A detailed description of how the module is used from a clinical perspective.
739     */
740    public ServiceDefinition setUsage(String value) { 
741      if (Utilities.noString(value))
742        this.usage = null;
743      else {
744        if (this.usage == null)
745          this.usage = new StringType();
746        this.usage.setValue(value);
747      }
748      return this;
749    }
750
751    /**
752     * @return {@link #approvalDate} (The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.). This is the underlying object with id, value and extensions. The accessor "getApprovalDate" gives direct access to the value
753     */
754    public DateType getApprovalDateElement() { 
755      if (this.approvalDate == null)
756        if (Configuration.errorOnAutoCreate())
757          throw new Error("Attempt to auto-create ServiceDefinition.approvalDate");
758        else if (Configuration.doAutoCreate())
759          this.approvalDate = new DateType(); // bb
760      return this.approvalDate;
761    }
762
763    public boolean hasApprovalDateElement() { 
764      return this.approvalDate != null && !this.approvalDate.isEmpty();
765    }
766
767    public boolean hasApprovalDate() { 
768      return this.approvalDate != null && !this.approvalDate.isEmpty();
769    }
770
771    /**
772     * @param value {@link #approvalDate} (The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.). This is the underlying object with id, value and extensions. The accessor "getApprovalDate" gives direct access to the value
773     */
774    public ServiceDefinition setApprovalDateElement(DateType value) { 
775      this.approvalDate = value;
776      return this;
777    }
778
779    /**
780     * @return The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
781     */
782    public Date getApprovalDate() { 
783      return this.approvalDate == null ? null : this.approvalDate.getValue();
784    }
785
786    /**
787     * @param value The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
788     */
789    public ServiceDefinition setApprovalDate(Date value) { 
790      if (value == null)
791        this.approvalDate = null;
792      else {
793        if (this.approvalDate == null)
794          this.approvalDate = new DateType();
795        this.approvalDate.setValue(value);
796      }
797      return this;
798    }
799
800    /**
801     * @return {@link #lastReviewDate} (The date on which the resource content was last reviewed. Review happens periodically after approval, but doesn't change the original approval date.). This is the underlying object with id, value and extensions. The accessor "getLastReviewDate" gives direct access to the value
802     */
803    public DateType getLastReviewDateElement() { 
804      if (this.lastReviewDate == null)
805        if (Configuration.errorOnAutoCreate())
806          throw new Error("Attempt to auto-create ServiceDefinition.lastReviewDate");
807        else if (Configuration.doAutoCreate())
808          this.lastReviewDate = new DateType(); // bb
809      return this.lastReviewDate;
810    }
811
812    public boolean hasLastReviewDateElement() { 
813      return this.lastReviewDate != null && !this.lastReviewDate.isEmpty();
814    }
815
816    public boolean hasLastReviewDate() { 
817      return this.lastReviewDate != null && !this.lastReviewDate.isEmpty();
818    }
819
820    /**
821     * @param value {@link #lastReviewDate} (The date on which the resource content was last reviewed. Review happens periodically after approval, but doesn't change the original approval date.). This is the underlying object with id, value and extensions. The accessor "getLastReviewDate" gives direct access to the value
822     */
823    public ServiceDefinition setLastReviewDateElement(DateType value) { 
824      this.lastReviewDate = value;
825      return this;
826    }
827
828    /**
829     * @return The date on which the resource content was last reviewed. Review happens periodically after approval, but doesn't change the original approval date.
830     */
831    public Date getLastReviewDate() { 
832      return this.lastReviewDate == null ? null : this.lastReviewDate.getValue();
833    }
834
835    /**
836     * @param value The date on which the resource content was last reviewed. Review happens periodically after approval, but doesn't change the original approval date.
837     */
838    public ServiceDefinition setLastReviewDate(Date value) { 
839      if (value == null)
840        this.lastReviewDate = null;
841      else {
842        if (this.lastReviewDate == null)
843          this.lastReviewDate = new DateType();
844        this.lastReviewDate.setValue(value);
845      }
846      return this;
847    }
848
849    /**
850     * @return {@link #effectivePeriod} (The period during which the service definition content was or is planned to be in active use.)
851     */
852    public Period getEffectivePeriod() { 
853      if (this.effectivePeriod == null)
854        if (Configuration.errorOnAutoCreate())
855          throw new Error("Attempt to auto-create ServiceDefinition.effectivePeriod");
856        else if (Configuration.doAutoCreate())
857          this.effectivePeriod = new Period(); // cc
858      return this.effectivePeriod;
859    }
860
861    public boolean hasEffectivePeriod() { 
862      return this.effectivePeriod != null && !this.effectivePeriod.isEmpty();
863    }
864
865    /**
866     * @param value {@link #effectivePeriod} (The period during which the service definition content was or is planned to be in active use.)
867     */
868    public ServiceDefinition setEffectivePeriod(Period value) { 
869      this.effectivePeriod = value;
870      return this;
871    }
872
873    /**
874     * @return {@link #useContext} (The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate service definition instances.)
875     */
876    public List<UsageContext> getUseContext() { 
877      if (this.useContext == null)
878        this.useContext = new ArrayList<UsageContext>();
879      return this.useContext;
880    }
881
882    /**
883     * @return Returns a reference to <code>this</code> for easy method chaining
884     */
885    public ServiceDefinition setUseContext(List<UsageContext> theUseContext) { 
886      this.useContext = theUseContext;
887      return this;
888    }
889
890    public boolean hasUseContext() { 
891      if (this.useContext == null)
892        return false;
893      for (UsageContext item : this.useContext)
894        if (!item.isEmpty())
895          return true;
896      return false;
897    }
898
899    public UsageContext addUseContext() { //3
900      UsageContext t = new UsageContext();
901      if (this.useContext == null)
902        this.useContext = new ArrayList<UsageContext>();
903      this.useContext.add(t);
904      return t;
905    }
906
907    public ServiceDefinition addUseContext(UsageContext t) { //3
908      if (t == null)
909        return this;
910      if (this.useContext == null)
911        this.useContext = new ArrayList<UsageContext>();
912      this.useContext.add(t);
913      return this;
914    }
915
916    /**
917     * @return The first repetition of repeating field {@link #useContext}, creating it if it does not already exist
918     */
919    public UsageContext getUseContextFirstRep() { 
920      if (getUseContext().isEmpty()) {
921        addUseContext();
922      }
923      return getUseContext().get(0);
924    }
925
926    /**
927     * @return {@link #jurisdiction} (A legal or geographic region in which the service definition is intended to be used.)
928     */
929    public List<CodeableConcept> getJurisdiction() { 
930      if (this.jurisdiction == null)
931        this.jurisdiction = new ArrayList<CodeableConcept>();
932      return this.jurisdiction;
933    }
934
935    /**
936     * @return Returns a reference to <code>this</code> for easy method chaining
937     */
938    public ServiceDefinition setJurisdiction(List<CodeableConcept> theJurisdiction) { 
939      this.jurisdiction = theJurisdiction;
940      return this;
941    }
942
943    public boolean hasJurisdiction() { 
944      if (this.jurisdiction == null)
945        return false;
946      for (CodeableConcept item : this.jurisdiction)
947        if (!item.isEmpty())
948          return true;
949      return false;
950    }
951
952    public CodeableConcept addJurisdiction() { //3
953      CodeableConcept t = new CodeableConcept();
954      if (this.jurisdiction == null)
955        this.jurisdiction = new ArrayList<CodeableConcept>();
956      this.jurisdiction.add(t);
957      return t;
958    }
959
960    public ServiceDefinition addJurisdiction(CodeableConcept t) { //3
961      if (t == null)
962        return this;
963      if (this.jurisdiction == null)
964        this.jurisdiction = new ArrayList<CodeableConcept>();
965      this.jurisdiction.add(t);
966      return this;
967    }
968
969    /**
970     * @return The first repetition of repeating field {@link #jurisdiction}, creating it if it does not already exist
971     */
972    public CodeableConcept getJurisdictionFirstRep() { 
973      if (getJurisdiction().isEmpty()) {
974        addJurisdiction();
975      }
976      return getJurisdiction().get(0);
977    }
978
979    /**
980     * @return {@link #topic} (Descriptive topics related to the module. Topics provide a high-level categorization of the module that can be useful for filtering and searching.)
981     */
982    public List<CodeableConcept> getTopic() { 
983      if (this.topic == null)
984        this.topic = new ArrayList<CodeableConcept>();
985      return this.topic;
986    }
987
988    /**
989     * @return Returns a reference to <code>this</code> for easy method chaining
990     */
991    public ServiceDefinition setTopic(List<CodeableConcept> theTopic) { 
992      this.topic = theTopic;
993      return this;
994    }
995
996    public boolean hasTopic() { 
997      if (this.topic == null)
998        return false;
999      for (CodeableConcept item : this.topic)
1000        if (!item.isEmpty())
1001          return true;
1002      return false;
1003    }
1004
1005    public CodeableConcept addTopic() { //3
1006      CodeableConcept t = new CodeableConcept();
1007      if (this.topic == null)
1008        this.topic = new ArrayList<CodeableConcept>();
1009      this.topic.add(t);
1010      return t;
1011    }
1012
1013    public ServiceDefinition addTopic(CodeableConcept t) { //3
1014      if (t == null)
1015        return this;
1016      if (this.topic == null)
1017        this.topic = new ArrayList<CodeableConcept>();
1018      this.topic.add(t);
1019      return this;
1020    }
1021
1022    /**
1023     * @return The first repetition of repeating field {@link #topic}, creating it if it does not already exist
1024     */
1025    public CodeableConcept getTopicFirstRep() { 
1026      if (getTopic().isEmpty()) {
1027        addTopic();
1028      }
1029      return getTopic().get(0);
1030    }
1031
1032    /**
1033     * @return {@link #contributor} (A contributor to the content of the module, including authors, editors, reviewers, and endorsers.)
1034     */
1035    public List<Contributor> getContributor() { 
1036      if (this.contributor == null)
1037        this.contributor = new ArrayList<Contributor>();
1038      return this.contributor;
1039    }
1040
1041    /**
1042     * @return Returns a reference to <code>this</code> for easy method chaining
1043     */
1044    public ServiceDefinition setContributor(List<Contributor> theContributor) { 
1045      this.contributor = theContributor;
1046      return this;
1047    }
1048
1049    public boolean hasContributor() { 
1050      if (this.contributor == null)
1051        return false;
1052      for (Contributor item : this.contributor)
1053        if (!item.isEmpty())
1054          return true;
1055      return false;
1056    }
1057
1058    public Contributor addContributor() { //3
1059      Contributor t = new Contributor();
1060      if (this.contributor == null)
1061        this.contributor = new ArrayList<Contributor>();
1062      this.contributor.add(t);
1063      return t;
1064    }
1065
1066    public ServiceDefinition addContributor(Contributor t) { //3
1067      if (t == null)
1068        return this;
1069      if (this.contributor == null)
1070        this.contributor = new ArrayList<Contributor>();
1071      this.contributor.add(t);
1072      return this;
1073    }
1074
1075    /**
1076     * @return The first repetition of repeating field {@link #contributor}, creating it if it does not already exist
1077     */
1078    public Contributor getContributorFirstRep() { 
1079      if (getContributor().isEmpty()) {
1080        addContributor();
1081      }
1082      return getContributor().get(0);
1083    }
1084
1085    /**
1086     * @return {@link #contact} (Contact details to assist a user in finding and communicating with the publisher.)
1087     */
1088    public List<ContactDetail> getContact() { 
1089      if (this.contact == null)
1090        this.contact = new ArrayList<ContactDetail>();
1091      return this.contact;
1092    }
1093
1094    /**
1095     * @return Returns a reference to <code>this</code> for easy method chaining
1096     */
1097    public ServiceDefinition setContact(List<ContactDetail> theContact) { 
1098      this.contact = theContact;
1099      return this;
1100    }
1101
1102    public boolean hasContact() { 
1103      if (this.contact == null)
1104        return false;
1105      for (ContactDetail item : this.contact)
1106        if (!item.isEmpty())
1107          return true;
1108      return false;
1109    }
1110
1111    public ContactDetail addContact() { //3
1112      ContactDetail t = new ContactDetail();
1113      if (this.contact == null)
1114        this.contact = new ArrayList<ContactDetail>();
1115      this.contact.add(t);
1116      return t;
1117    }
1118
1119    public ServiceDefinition addContact(ContactDetail t) { //3
1120      if (t == null)
1121        return this;
1122      if (this.contact == null)
1123        this.contact = new ArrayList<ContactDetail>();
1124      this.contact.add(t);
1125      return this;
1126    }
1127
1128    /**
1129     * @return The first repetition of repeating field {@link #contact}, creating it if it does not already exist
1130     */
1131    public ContactDetail getContactFirstRep() { 
1132      if (getContact().isEmpty()) {
1133        addContact();
1134      }
1135      return getContact().get(0);
1136    }
1137
1138    /**
1139     * @return {@link #copyright} (A copyright statement relating to the service definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the service definition.). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
1140     */
1141    public MarkdownType getCopyrightElement() { 
1142      if (this.copyright == null)
1143        if (Configuration.errorOnAutoCreate())
1144          throw new Error("Attempt to auto-create ServiceDefinition.copyright");
1145        else if (Configuration.doAutoCreate())
1146          this.copyright = new MarkdownType(); // bb
1147      return this.copyright;
1148    }
1149
1150    public boolean hasCopyrightElement() { 
1151      return this.copyright != null && !this.copyright.isEmpty();
1152    }
1153
1154    public boolean hasCopyright() { 
1155      return this.copyright != null && !this.copyright.isEmpty();
1156    }
1157
1158    /**
1159     * @param value {@link #copyright} (A copyright statement relating to the service definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the service definition.). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
1160     */
1161    public ServiceDefinition setCopyrightElement(MarkdownType value) { 
1162      this.copyright = value;
1163      return this;
1164    }
1165
1166    /**
1167     * @return A copyright statement relating to the service definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the service definition.
1168     */
1169    public String getCopyright() { 
1170      return this.copyright == null ? null : this.copyright.getValue();
1171    }
1172
1173    /**
1174     * @param value A copyright statement relating to the service definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the service definition.
1175     */
1176    public ServiceDefinition setCopyright(String value) { 
1177      if (value == null)
1178        this.copyright = null;
1179      else {
1180        if (this.copyright == null)
1181          this.copyright = new MarkdownType();
1182        this.copyright.setValue(value);
1183      }
1184      return this;
1185    }
1186
1187    /**
1188     * @return {@link #relatedArtifact} (Related resources such as additional documentation, justification, or bibliographic references.)
1189     */
1190    public List<RelatedArtifact> getRelatedArtifact() { 
1191      if (this.relatedArtifact == null)
1192        this.relatedArtifact = new ArrayList<RelatedArtifact>();
1193      return this.relatedArtifact;
1194    }
1195
1196    /**
1197     * @return Returns a reference to <code>this</code> for easy method chaining
1198     */
1199    public ServiceDefinition setRelatedArtifact(List<RelatedArtifact> theRelatedArtifact) { 
1200      this.relatedArtifact = theRelatedArtifact;
1201      return this;
1202    }
1203
1204    public boolean hasRelatedArtifact() { 
1205      if (this.relatedArtifact == null)
1206        return false;
1207      for (RelatedArtifact item : this.relatedArtifact)
1208        if (!item.isEmpty())
1209          return true;
1210      return false;
1211    }
1212
1213    public RelatedArtifact addRelatedArtifact() { //3
1214      RelatedArtifact t = new RelatedArtifact();
1215      if (this.relatedArtifact == null)
1216        this.relatedArtifact = new ArrayList<RelatedArtifact>();
1217      this.relatedArtifact.add(t);
1218      return t;
1219    }
1220
1221    public ServiceDefinition addRelatedArtifact(RelatedArtifact t) { //3
1222      if (t == null)
1223        return this;
1224      if (this.relatedArtifact == null)
1225        this.relatedArtifact = new ArrayList<RelatedArtifact>();
1226      this.relatedArtifact.add(t);
1227      return this;
1228    }
1229
1230    /**
1231     * @return The first repetition of repeating field {@link #relatedArtifact}, creating it if it does not already exist
1232     */
1233    public RelatedArtifact getRelatedArtifactFirstRep() { 
1234      if (getRelatedArtifact().isEmpty()) {
1235        addRelatedArtifact();
1236      }
1237      return getRelatedArtifact().get(0);
1238    }
1239
1240    /**
1241     * @return {@link #trigger} (The trigger element defines when the rule should be invoked. This information is used by consumers of the rule to determine how to integrate the rule into a specific workflow.)
1242     */
1243    public List<TriggerDefinition> getTrigger() { 
1244      if (this.trigger == null)
1245        this.trigger = new ArrayList<TriggerDefinition>();
1246      return this.trigger;
1247    }
1248
1249    /**
1250     * @return Returns a reference to <code>this</code> for easy method chaining
1251     */
1252    public ServiceDefinition setTrigger(List<TriggerDefinition> theTrigger) { 
1253      this.trigger = theTrigger;
1254      return this;
1255    }
1256
1257    public boolean hasTrigger() { 
1258      if (this.trigger == null)
1259        return false;
1260      for (TriggerDefinition item : this.trigger)
1261        if (!item.isEmpty())
1262          return true;
1263      return false;
1264    }
1265
1266    public TriggerDefinition addTrigger() { //3
1267      TriggerDefinition t = new TriggerDefinition();
1268      if (this.trigger == null)
1269        this.trigger = new ArrayList<TriggerDefinition>();
1270      this.trigger.add(t);
1271      return t;
1272    }
1273
1274    public ServiceDefinition addTrigger(TriggerDefinition t) { //3
1275      if (t == null)
1276        return this;
1277      if (this.trigger == null)
1278        this.trigger = new ArrayList<TriggerDefinition>();
1279      this.trigger.add(t);
1280      return this;
1281    }
1282
1283    /**
1284     * @return The first repetition of repeating field {@link #trigger}, creating it if it does not already exist
1285     */
1286    public TriggerDefinition getTriggerFirstRep() { 
1287      if (getTrigger().isEmpty()) {
1288        addTrigger();
1289      }
1290      return getTrigger().get(0);
1291    }
1292
1293    /**
1294     * @return {@link #dataRequirement} (Data requirements are a machine processable description of the data required by the module in order to perform a successful evaluation.)
1295     */
1296    public List<DataRequirement> getDataRequirement() { 
1297      if (this.dataRequirement == null)
1298        this.dataRequirement = new ArrayList<DataRequirement>();
1299      return this.dataRequirement;
1300    }
1301
1302    /**
1303     * @return Returns a reference to <code>this</code> for easy method chaining
1304     */
1305    public ServiceDefinition setDataRequirement(List<DataRequirement> theDataRequirement) { 
1306      this.dataRequirement = theDataRequirement;
1307      return this;
1308    }
1309
1310    public boolean hasDataRequirement() { 
1311      if (this.dataRequirement == null)
1312        return false;
1313      for (DataRequirement item : this.dataRequirement)
1314        if (!item.isEmpty())
1315          return true;
1316      return false;
1317    }
1318
1319    public DataRequirement addDataRequirement() { //3
1320      DataRequirement t = new DataRequirement();
1321      if (this.dataRequirement == null)
1322        this.dataRequirement = new ArrayList<DataRequirement>();
1323      this.dataRequirement.add(t);
1324      return t;
1325    }
1326
1327    public ServiceDefinition addDataRequirement(DataRequirement t) { //3
1328      if (t == null)
1329        return this;
1330      if (this.dataRequirement == null)
1331        this.dataRequirement = new ArrayList<DataRequirement>();
1332      this.dataRequirement.add(t);
1333      return this;
1334    }
1335
1336    /**
1337     * @return The first repetition of repeating field {@link #dataRequirement}, creating it if it does not already exist
1338     */
1339    public DataRequirement getDataRequirementFirstRep() { 
1340      if (getDataRequirement().isEmpty()) {
1341        addDataRequirement();
1342      }
1343      return getDataRequirement().get(0);
1344    }
1345
1346    /**
1347     * @return {@link #operationDefinition} (A reference to the operation that is used to invoke this service.)
1348     */
1349    public Reference getOperationDefinition() { 
1350      if (this.operationDefinition == null)
1351        if (Configuration.errorOnAutoCreate())
1352          throw new Error("Attempt to auto-create ServiceDefinition.operationDefinition");
1353        else if (Configuration.doAutoCreate())
1354          this.operationDefinition = new Reference(); // cc
1355      return this.operationDefinition;
1356    }
1357
1358    public boolean hasOperationDefinition() { 
1359      return this.operationDefinition != null && !this.operationDefinition.isEmpty();
1360    }
1361
1362    /**
1363     * @param value {@link #operationDefinition} (A reference to the operation that is used to invoke this service.)
1364     */
1365    public ServiceDefinition setOperationDefinition(Reference value) { 
1366      this.operationDefinition = value;
1367      return this;
1368    }
1369
1370    /**
1371     * @return {@link #operationDefinition} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (A reference to the operation that is used to invoke this service.)
1372     */
1373    public OperationDefinition getOperationDefinitionTarget() { 
1374      if (this.operationDefinitionTarget == null)
1375        if (Configuration.errorOnAutoCreate())
1376          throw new Error("Attempt to auto-create ServiceDefinition.operationDefinition");
1377        else if (Configuration.doAutoCreate())
1378          this.operationDefinitionTarget = new OperationDefinition(); // aa
1379      return this.operationDefinitionTarget;
1380    }
1381
1382    /**
1383     * @param value {@link #operationDefinition} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (A reference to the operation that is used to invoke this service.)
1384     */
1385    public ServiceDefinition setOperationDefinitionTarget(OperationDefinition value) { 
1386      this.operationDefinitionTarget = value;
1387      return this;
1388    }
1389
1390      protected void listChildren(List<Property> childrenList) {
1391        super.listChildren(childrenList);
1392        childrenList.add(new Property("url", "uri", "An absolute URI that is used to identify this service definition when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this service definition is (or will be) published. The URL SHOULD include the major version of the service definition. For more information see [Technical and Business Versions](resource.html#versions).", 0, java.lang.Integer.MAX_VALUE, url));
1393        childrenList.add(new Property("identifier", "Identifier", "A formal identifier that is used to identify this service definition when it is represented in other formats, or referenced in a specification, model, design or an instance. This is used for CMS or NQF identifiers for a measure artifact. Note that at least one identifier is required for non-experimental active artifacts.", 0, java.lang.Integer.MAX_VALUE, identifier));
1394        childrenList.add(new Property("version", "string", "The identifier that is used to identify this version of the service definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the service definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.", 0, java.lang.Integer.MAX_VALUE, version));
1395        childrenList.add(new Property("name", "string", "A natural language name identifying the service definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.", 0, java.lang.Integer.MAX_VALUE, name));
1396        childrenList.add(new Property("title", "string", "A short, descriptive, user-friendly title for the service definition.", 0, java.lang.Integer.MAX_VALUE, title));
1397        childrenList.add(new Property("status", "code", "The status of this service definition. Enables tracking the life-cycle of the content.", 0, java.lang.Integer.MAX_VALUE, status));
1398        childrenList.add(new Property("experimental", "boolean", "A boolean value to indicate that this service definition is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.", 0, java.lang.Integer.MAX_VALUE, experimental));
1399        childrenList.add(new Property("date", "dateTime", "The date  (and optionally time) when the service definition was published. The date must change if and 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 service definition changes.", 0, java.lang.Integer.MAX_VALUE, date));
1400        childrenList.add(new Property("publisher", "string", "The name of the individual or organization that published the service definition.", 0, java.lang.Integer.MAX_VALUE, publisher));
1401        childrenList.add(new Property("description", "markdown", "A free text natural language description of the service definition from a consumer's perspective.", 0, java.lang.Integer.MAX_VALUE, description));
1402        childrenList.add(new Property("purpose", "markdown", "Explaination of why this service definition is needed and why it has been designed as it has.", 0, java.lang.Integer.MAX_VALUE, purpose));
1403        childrenList.add(new Property("usage", "string", "A detailed description of how the module is used from a clinical perspective.", 0, java.lang.Integer.MAX_VALUE, usage));
1404        childrenList.add(new Property("approvalDate", "date", "The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.", 0, java.lang.Integer.MAX_VALUE, approvalDate));
1405        childrenList.add(new Property("lastReviewDate", "date", "The date on which the resource content was last reviewed. Review happens periodically after approval, but doesn't change the original approval date.", 0, java.lang.Integer.MAX_VALUE, lastReviewDate));
1406        childrenList.add(new Property("effectivePeriod", "Period", "The period during which the service definition content was or is planned to be in active use.", 0, java.lang.Integer.MAX_VALUE, effectivePeriod));
1407        childrenList.add(new Property("useContext", "UsageContext", "The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate service definition instances.", 0, java.lang.Integer.MAX_VALUE, useContext));
1408        childrenList.add(new Property("jurisdiction", "CodeableConcept", "A legal or geographic region in which the service definition is intended to be used.", 0, java.lang.Integer.MAX_VALUE, jurisdiction));
1409        childrenList.add(new Property("topic", "CodeableConcept", "Descriptive topics related to the module. Topics provide a high-level categorization of the module that can be useful for filtering and searching.", 0, java.lang.Integer.MAX_VALUE, topic));
1410        childrenList.add(new Property("contributor", "Contributor", "A contributor to the content of the module, including authors, editors, reviewers, and endorsers.", 0, java.lang.Integer.MAX_VALUE, contributor));
1411        childrenList.add(new Property("contact", "ContactDetail", "Contact details to assist a user in finding and communicating with the publisher.", 0, java.lang.Integer.MAX_VALUE, contact));
1412        childrenList.add(new Property("copyright", "markdown", "A copyright statement relating to the service definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the service definition.", 0, java.lang.Integer.MAX_VALUE, copyright));
1413        childrenList.add(new Property("relatedArtifact", "RelatedArtifact", "Related resources such as additional documentation, justification, or bibliographic references.", 0, java.lang.Integer.MAX_VALUE, relatedArtifact));
1414        childrenList.add(new Property("trigger", "TriggerDefinition", "The trigger element defines when the rule should be invoked. This information is used by consumers of the rule to determine how to integrate the rule into a specific workflow.", 0, java.lang.Integer.MAX_VALUE, trigger));
1415        childrenList.add(new Property("dataRequirement", "DataRequirement", "Data requirements are a machine processable description of the data required by the module in order to perform a successful evaluation.", 0, java.lang.Integer.MAX_VALUE, dataRequirement));
1416        childrenList.add(new Property("operationDefinition", "Reference(OperationDefinition)", "A reference to the operation that is used to invoke this service.", 0, java.lang.Integer.MAX_VALUE, operationDefinition));
1417      }
1418
1419      @Override
1420      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1421        switch (hash) {
1422        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UriType
1423        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
1424        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
1425        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
1426        case 110371416: /*title*/ return this.title == null ? new Base[0] : new Base[] {this.title}; // StringType
1427        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<PublicationStatus>
1428        case -404562712: /*experimental*/ return this.experimental == null ? new Base[0] : new Base[] {this.experimental}; // BooleanType
1429        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
1430        case 1447404028: /*publisher*/ return this.publisher == null ? new Base[0] : new Base[] {this.publisher}; // StringType
1431        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
1432        case -220463842: /*purpose*/ return this.purpose == null ? new Base[0] : new Base[] {this.purpose}; // MarkdownType
1433        case 111574433: /*usage*/ return this.usage == null ? new Base[0] : new Base[] {this.usage}; // StringType
1434        case 223539345: /*approvalDate*/ return this.approvalDate == null ? new Base[0] : new Base[] {this.approvalDate}; // DateType
1435        case -1687512484: /*lastReviewDate*/ return this.lastReviewDate == null ? new Base[0] : new Base[] {this.lastReviewDate}; // DateType
1436        case -403934648: /*effectivePeriod*/ return this.effectivePeriod == null ? new Base[0] : new Base[] {this.effectivePeriod}; // Period
1437        case -669707736: /*useContext*/ return this.useContext == null ? new Base[0] : this.useContext.toArray(new Base[this.useContext.size()]); // UsageContext
1438        case -507075711: /*jurisdiction*/ return this.jurisdiction == null ? new Base[0] : this.jurisdiction.toArray(new Base[this.jurisdiction.size()]); // CodeableConcept
1439        case 110546223: /*topic*/ return this.topic == null ? new Base[0] : this.topic.toArray(new Base[this.topic.size()]); // CodeableConcept
1440        case -1895276325: /*contributor*/ return this.contributor == null ? new Base[0] : this.contributor.toArray(new Base[this.contributor.size()]); // Contributor
1441        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ContactDetail
1442        case 1522889671: /*copyright*/ return this.copyright == null ? new Base[0] : new Base[] {this.copyright}; // MarkdownType
1443        case 666807069: /*relatedArtifact*/ return this.relatedArtifact == null ? new Base[0] : this.relatedArtifact.toArray(new Base[this.relatedArtifact.size()]); // RelatedArtifact
1444        case -1059891784: /*trigger*/ return this.trigger == null ? new Base[0] : this.trigger.toArray(new Base[this.trigger.size()]); // TriggerDefinition
1445        case 629147193: /*dataRequirement*/ return this.dataRequirement == null ? new Base[0] : this.dataRequirement.toArray(new Base[this.dataRequirement.size()]); // DataRequirement
1446        case 900960794: /*operationDefinition*/ return this.operationDefinition == null ? new Base[0] : new Base[] {this.operationDefinition}; // Reference
1447        default: return super.getProperty(hash, name, checkValid);
1448        }
1449
1450      }
1451
1452      @Override
1453      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1454        switch (hash) {
1455        case 116079: // url
1456          this.url = castToUri(value); // UriType
1457          return value;
1458        case -1618432855: // identifier
1459          this.getIdentifier().add(castToIdentifier(value)); // Identifier
1460          return value;
1461        case 351608024: // version
1462          this.version = castToString(value); // StringType
1463          return value;
1464        case 3373707: // name
1465          this.name = castToString(value); // StringType
1466          return value;
1467        case 110371416: // title
1468          this.title = castToString(value); // StringType
1469          return value;
1470        case -892481550: // status
1471          value = new PublicationStatusEnumFactory().fromType(castToCode(value));
1472          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
1473          return value;
1474        case -404562712: // experimental
1475          this.experimental = castToBoolean(value); // BooleanType
1476          return value;
1477        case 3076014: // date
1478          this.date = castToDateTime(value); // DateTimeType
1479          return value;
1480        case 1447404028: // publisher
1481          this.publisher = castToString(value); // StringType
1482          return value;
1483        case -1724546052: // description
1484          this.description = castToMarkdown(value); // MarkdownType
1485          return value;
1486        case -220463842: // purpose
1487          this.purpose = castToMarkdown(value); // MarkdownType
1488          return value;
1489        case 111574433: // usage
1490          this.usage = castToString(value); // StringType
1491          return value;
1492        case 223539345: // approvalDate
1493          this.approvalDate = castToDate(value); // DateType
1494          return value;
1495        case -1687512484: // lastReviewDate
1496          this.lastReviewDate = castToDate(value); // DateType
1497          return value;
1498        case -403934648: // effectivePeriod
1499          this.effectivePeriod = castToPeriod(value); // Period
1500          return value;
1501        case -669707736: // useContext
1502          this.getUseContext().add(castToUsageContext(value)); // UsageContext
1503          return value;
1504        case -507075711: // jurisdiction
1505          this.getJurisdiction().add(castToCodeableConcept(value)); // CodeableConcept
1506          return value;
1507        case 110546223: // topic
1508          this.getTopic().add(castToCodeableConcept(value)); // CodeableConcept
1509          return value;
1510        case -1895276325: // contributor
1511          this.getContributor().add(castToContributor(value)); // Contributor
1512          return value;
1513        case 951526432: // contact
1514          this.getContact().add(castToContactDetail(value)); // ContactDetail
1515          return value;
1516        case 1522889671: // copyright
1517          this.copyright = castToMarkdown(value); // MarkdownType
1518          return value;
1519        case 666807069: // relatedArtifact
1520          this.getRelatedArtifact().add(castToRelatedArtifact(value)); // RelatedArtifact
1521          return value;
1522        case -1059891784: // trigger
1523          this.getTrigger().add(castToTriggerDefinition(value)); // TriggerDefinition
1524          return value;
1525        case 629147193: // dataRequirement
1526          this.getDataRequirement().add(castToDataRequirement(value)); // DataRequirement
1527          return value;
1528        case 900960794: // operationDefinition
1529          this.operationDefinition = castToReference(value); // Reference
1530          return value;
1531        default: return super.setProperty(hash, name, value);
1532        }
1533
1534      }
1535
1536      @Override
1537      public Base setProperty(String name, Base value) throws FHIRException {
1538        if (name.equals("url")) {
1539          this.url = castToUri(value); // UriType
1540        } else if (name.equals("identifier")) {
1541          this.getIdentifier().add(castToIdentifier(value));
1542        } else if (name.equals("version")) {
1543          this.version = castToString(value); // StringType
1544        } else if (name.equals("name")) {
1545          this.name = castToString(value); // StringType
1546        } else if (name.equals("title")) {
1547          this.title = castToString(value); // StringType
1548        } else if (name.equals("status")) {
1549          value = new PublicationStatusEnumFactory().fromType(castToCode(value));
1550          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
1551        } else if (name.equals("experimental")) {
1552          this.experimental = castToBoolean(value); // BooleanType
1553        } else if (name.equals("date")) {
1554          this.date = castToDateTime(value); // DateTimeType
1555        } else if (name.equals("publisher")) {
1556          this.publisher = castToString(value); // StringType
1557        } else if (name.equals("description")) {
1558          this.description = castToMarkdown(value); // MarkdownType
1559        } else if (name.equals("purpose")) {
1560          this.purpose = castToMarkdown(value); // MarkdownType
1561        } else if (name.equals("usage")) {
1562          this.usage = castToString(value); // StringType
1563        } else if (name.equals("approvalDate")) {
1564          this.approvalDate = castToDate(value); // DateType
1565        } else if (name.equals("lastReviewDate")) {
1566          this.lastReviewDate = castToDate(value); // DateType
1567        } else if (name.equals("effectivePeriod")) {
1568          this.effectivePeriod = castToPeriod(value); // Period
1569        } else if (name.equals("useContext")) {
1570          this.getUseContext().add(castToUsageContext(value));
1571        } else if (name.equals("jurisdiction")) {
1572          this.getJurisdiction().add(castToCodeableConcept(value));
1573        } else if (name.equals("topic")) {
1574          this.getTopic().add(castToCodeableConcept(value));
1575        } else if (name.equals("contributor")) {
1576          this.getContributor().add(castToContributor(value));
1577        } else if (name.equals("contact")) {
1578          this.getContact().add(castToContactDetail(value));
1579        } else if (name.equals("copyright")) {
1580          this.copyright = castToMarkdown(value); // MarkdownType
1581        } else if (name.equals("relatedArtifact")) {
1582          this.getRelatedArtifact().add(castToRelatedArtifact(value));
1583        } else if (name.equals("trigger")) {
1584          this.getTrigger().add(castToTriggerDefinition(value));
1585        } else if (name.equals("dataRequirement")) {
1586          this.getDataRequirement().add(castToDataRequirement(value));
1587        } else if (name.equals("operationDefinition")) {
1588          this.operationDefinition = castToReference(value); // Reference
1589        } else
1590          return super.setProperty(name, value);
1591        return value;
1592      }
1593
1594      @Override
1595      public Base makeProperty(int hash, String name) throws FHIRException {
1596        switch (hash) {
1597        case 116079:  return getUrlElement();
1598        case -1618432855:  return addIdentifier(); 
1599        case 351608024:  return getVersionElement();
1600        case 3373707:  return getNameElement();
1601        case 110371416:  return getTitleElement();
1602        case -892481550:  return getStatusElement();
1603        case -404562712:  return getExperimentalElement();
1604        case 3076014:  return getDateElement();
1605        case 1447404028:  return getPublisherElement();
1606        case -1724546052:  return getDescriptionElement();
1607        case -220463842:  return getPurposeElement();
1608        case 111574433:  return getUsageElement();
1609        case 223539345:  return getApprovalDateElement();
1610        case -1687512484:  return getLastReviewDateElement();
1611        case -403934648:  return getEffectivePeriod(); 
1612        case -669707736:  return addUseContext(); 
1613        case -507075711:  return addJurisdiction(); 
1614        case 110546223:  return addTopic(); 
1615        case -1895276325:  return addContributor(); 
1616        case 951526432:  return addContact(); 
1617        case 1522889671:  return getCopyrightElement();
1618        case 666807069:  return addRelatedArtifact(); 
1619        case -1059891784:  return addTrigger(); 
1620        case 629147193:  return addDataRequirement(); 
1621        case 900960794:  return getOperationDefinition(); 
1622        default: return super.makeProperty(hash, name);
1623        }
1624
1625      }
1626
1627      @Override
1628      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1629        switch (hash) {
1630        case 116079: /*url*/ return new String[] {"uri"};
1631        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
1632        case 351608024: /*version*/ return new String[] {"string"};
1633        case 3373707: /*name*/ return new String[] {"string"};
1634        case 110371416: /*title*/ return new String[] {"string"};
1635        case -892481550: /*status*/ return new String[] {"code"};
1636        case -404562712: /*experimental*/ return new String[] {"boolean"};
1637        case 3076014: /*date*/ return new String[] {"dateTime"};
1638        case 1447404028: /*publisher*/ return new String[] {"string"};
1639        case -1724546052: /*description*/ return new String[] {"markdown"};
1640        case -220463842: /*purpose*/ return new String[] {"markdown"};
1641        case 111574433: /*usage*/ return new String[] {"string"};
1642        case 223539345: /*approvalDate*/ return new String[] {"date"};
1643        case -1687512484: /*lastReviewDate*/ return new String[] {"date"};
1644        case -403934648: /*effectivePeriod*/ return new String[] {"Period"};
1645        case -669707736: /*useContext*/ return new String[] {"UsageContext"};
1646        case -507075711: /*jurisdiction*/ return new String[] {"CodeableConcept"};
1647        case 110546223: /*topic*/ return new String[] {"CodeableConcept"};
1648        case -1895276325: /*contributor*/ return new String[] {"Contributor"};
1649        case 951526432: /*contact*/ return new String[] {"ContactDetail"};
1650        case 1522889671: /*copyright*/ return new String[] {"markdown"};
1651        case 666807069: /*relatedArtifact*/ return new String[] {"RelatedArtifact"};
1652        case -1059891784: /*trigger*/ return new String[] {"TriggerDefinition"};
1653        case 629147193: /*dataRequirement*/ return new String[] {"DataRequirement"};
1654        case 900960794: /*operationDefinition*/ return new String[] {"Reference"};
1655        default: return super.getTypesForProperty(hash, name);
1656        }
1657
1658      }
1659
1660      @Override
1661      public Base addChild(String name) throws FHIRException {
1662        if (name.equals("url")) {
1663          throw new FHIRException("Cannot call addChild on a primitive type ServiceDefinition.url");
1664        }
1665        else if (name.equals("identifier")) {
1666          return addIdentifier();
1667        }
1668        else if (name.equals("version")) {
1669          throw new FHIRException("Cannot call addChild on a primitive type ServiceDefinition.version");
1670        }
1671        else if (name.equals("name")) {
1672          throw new FHIRException("Cannot call addChild on a primitive type ServiceDefinition.name");
1673        }
1674        else if (name.equals("title")) {
1675          throw new FHIRException("Cannot call addChild on a primitive type ServiceDefinition.title");
1676        }
1677        else if (name.equals("status")) {
1678          throw new FHIRException("Cannot call addChild on a primitive type ServiceDefinition.status");
1679        }
1680        else if (name.equals("experimental")) {
1681          throw new FHIRException("Cannot call addChild on a primitive type ServiceDefinition.experimental");
1682        }
1683        else if (name.equals("date")) {
1684          throw new FHIRException("Cannot call addChild on a primitive type ServiceDefinition.date");
1685        }
1686        else if (name.equals("publisher")) {
1687          throw new FHIRException("Cannot call addChild on a primitive type ServiceDefinition.publisher");
1688        }
1689        else if (name.equals("description")) {
1690          throw new FHIRException("Cannot call addChild on a primitive type ServiceDefinition.description");
1691        }
1692        else if (name.equals("purpose")) {
1693          throw new FHIRException("Cannot call addChild on a primitive type ServiceDefinition.purpose");
1694        }
1695        else if (name.equals("usage")) {
1696          throw new FHIRException("Cannot call addChild on a primitive type ServiceDefinition.usage");
1697        }
1698        else if (name.equals("approvalDate")) {
1699          throw new FHIRException("Cannot call addChild on a primitive type ServiceDefinition.approvalDate");
1700        }
1701        else if (name.equals("lastReviewDate")) {
1702          throw new FHIRException("Cannot call addChild on a primitive type ServiceDefinition.lastReviewDate");
1703        }
1704        else if (name.equals("effectivePeriod")) {
1705          this.effectivePeriod = new Period();
1706          return this.effectivePeriod;
1707        }
1708        else if (name.equals("useContext")) {
1709          return addUseContext();
1710        }
1711        else if (name.equals("jurisdiction")) {
1712          return addJurisdiction();
1713        }
1714        else if (name.equals("topic")) {
1715          return addTopic();
1716        }
1717        else if (name.equals("contributor")) {
1718          return addContributor();
1719        }
1720        else if (name.equals("contact")) {
1721          return addContact();
1722        }
1723        else if (name.equals("copyright")) {
1724          throw new FHIRException("Cannot call addChild on a primitive type ServiceDefinition.copyright");
1725        }
1726        else if (name.equals("relatedArtifact")) {
1727          return addRelatedArtifact();
1728        }
1729        else if (name.equals("trigger")) {
1730          return addTrigger();
1731        }
1732        else if (name.equals("dataRequirement")) {
1733          return addDataRequirement();
1734        }
1735        else if (name.equals("operationDefinition")) {
1736          this.operationDefinition = new Reference();
1737          return this.operationDefinition;
1738        }
1739        else
1740          return super.addChild(name);
1741      }
1742
1743  public String fhirType() {
1744    return "ServiceDefinition";
1745
1746  }
1747
1748      public ServiceDefinition copy() {
1749        ServiceDefinition dst = new ServiceDefinition();
1750        copyValues(dst);
1751        dst.url = url == null ? null : url.copy();
1752        if (identifier != null) {
1753          dst.identifier = new ArrayList<Identifier>();
1754          for (Identifier i : identifier)
1755            dst.identifier.add(i.copy());
1756        };
1757        dst.version = version == null ? null : version.copy();
1758        dst.name = name == null ? null : name.copy();
1759        dst.title = title == null ? null : title.copy();
1760        dst.status = status == null ? null : status.copy();
1761        dst.experimental = experimental == null ? null : experimental.copy();
1762        dst.date = date == null ? null : date.copy();
1763        dst.publisher = publisher == null ? null : publisher.copy();
1764        dst.description = description == null ? null : description.copy();
1765        dst.purpose = purpose == null ? null : purpose.copy();
1766        dst.usage = usage == null ? null : usage.copy();
1767        dst.approvalDate = approvalDate == null ? null : approvalDate.copy();
1768        dst.lastReviewDate = lastReviewDate == null ? null : lastReviewDate.copy();
1769        dst.effectivePeriod = effectivePeriod == null ? null : effectivePeriod.copy();
1770        if (useContext != null) {
1771          dst.useContext = new ArrayList<UsageContext>();
1772          for (UsageContext i : useContext)
1773            dst.useContext.add(i.copy());
1774        };
1775        if (jurisdiction != null) {
1776          dst.jurisdiction = new ArrayList<CodeableConcept>();
1777          for (CodeableConcept i : jurisdiction)
1778            dst.jurisdiction.add(i.copy());
1779        };
1780        if (topic != null) {
1781          dst.topic = new ArrayList<CodeableConcept>();
1782          for (CodeableConcept i : topic)
1783            dst.topic.add(i.copy());
1784        };
1785        if (contributor != null) {
1786          dst.contributor = new ArrayList<Contributor>();
1787          for (Contributor i : contributor)
1788            dst.contributor.add(i.copy());
1789        };
1790        if (contact != null) {
1791          dst.contact = new ArrayList<ContactDetail>();
1792          for (ContactDetail i : contact)
1793            dst.contact.add(i.copy());
1794        };
1795        dst.copyright = copyright == null ? null : copyright.copy();
1796        if (relatedArtifact != null) {
1797          dst.relatedArtifact = new ArrayList<RelatedArtifact>();
1798          for (RelatedArtifact i : relatedArtifact)
1799            dst.relatedArtifact.add(i.copy());
1800        };
1801        if (trigger != null) {
1802          dst.trigger = new ArrayList<TriggerDefinition>();
1803          for (TriggerDefinition i : trigger)
1804            dst.trigger.add(i.copy());
1805        };
1806        if (dataRequirement != null) {
1807          dst.dataRequirement = new ArrayList<DataRequirement>();
1808          for (DataRequirement i : dataRequirement)
1809            dst.dataRequirement.add(i.copy());
1810        };
1811        dst.operationDefinition = operationDefinition == null ? null : operationDefinition.copy();
1812        return dst;
1813      }
1814
1815      protected ServiceDefinition typedCopy() {
1816        return copy();
1817      }
1818
1819      @Override
1820      public boolean equalsDeep(Base other) {
1821        if (!super.equalsDeep(other))
1822          return false;
1823        if (!(other instanceof ServiceDefinition))
1824          return false;
1825        ServiceDefinition o = (ServiceDefinition) other;
1826        return compareDeep(identifier, o.identifier, true) && compareDeep(purpose, o.purpose, true) && compareDeep(usage, o.usage, true)
1827           && compareDeep(approvalDate, o.approvalDate, true) && compareDeep(lastReviewDate, o.lastReviewDate, true)
1828           && compareDeep(effectivePeriod, o.effectivePeriod, true) && compareDeep(topic, o.topic, true) && compareDeep(contributor, o.contributor, true)
1829           && compareDeep(copyright, o.copyright, true) && compareDeep(relatedArtifact, o.relatedArtifact, true)
1830           && compareDeep(trigger, o.trigger, true) && compareDeep(dataRequirement, o.dataRequirement, true)
1831           && compareDeep(operationDefinition, o.operationDefinition, true);
1832      }
1833
1834      @Override
1835      public boolean equalsShallow(Base other) {
1836        if (!super.equalsShallow(other))
1837          return false;
1838        if (!(other instanceof ServiceDefinition))
1839          return false;
1840        ServiceDefinition o = (ServiceDefinition) other;
1841        return compareValues(purpose, o.purpose, true) && compareValues(usage, o.usage, true) && compareValues(approvalDate, o.approvalDate, true)
1842           && compareValues(lastReviewDate, o.lastReviewDate, true) && compareValues(copyright, o.copyright, true)
1843          ;
1844      }
1845
1846      public boolean isEmpty() {
1847        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, purpose, usage
1848          , approvalDate, lastReviewDate, effectivePeriod, topic, contributor, copyright, relatedArtifact
1849          , trigger, dataRequirement, operationDefinition);
1850      }
1851
1852  @Override
1853  public ResourceType getResourceType() {
1854    return ResourceType.ServiceDefinition;
1855   }
1856
1857 /**
1858   * Search parameter: <b>date</b>
1859   * <p>
1860   * Description: <b>The service definition publication date</b><br>
1861   * Type: <b>date</b><br>
1862   * Path: <b>ServiceDefinition.date</b><br>
1863   * </p>
1864   */
1865  @SearchParamDefinition(name="date", path="ServiceDefinition.date", description="The service definition publication date", type="date" )
1866  public static final String SP_DATE = "date";
1867 /**
1868   * <b>Fluent Client</b> search parameter constant for <b>date</b>
1869   * <p>
1870   * Description: <b>The service definition publication date</b><br>
1871   * Type: <b>date</b><br>
1872   * Path: <b>ServiceDefinition.date</b><br>
1873   * </p>
1874   */
1875  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
1876
1877 /**
1878   * Search parameter: <b>identifier</b>
1879   * <p>
1880   * Description: <b>External identifier for the service definition</b><br>
1881   * Type: <b>token</b><br>
1882   * Path: <b>ServiceDefinition.identifier</b><br>
1883   * </p>
1884   */
1885  @SearchParamDefinition(name="identifier", path="ServiceDefinition.identifier", description="External identifier for the service definition", type="token" )
1886  public static final String SP_IDENTIFIER = "identifier";
1887 /**
1888   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
1889   * <p>
1890   * Description: <b>External identifier for the service definition</b><br>
1891   * Type: <b>token</b><br>
1892   * Path: <b>ServiceDefinition.identifier</b><br>
1893   * </p>
1894   */
1895  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
1896
1897 /**
1898   * Search parameter: <b>successor</b>
1899   * <p>
1900   * Description: <b>What resource is being referenced</b><br>
1901   * Type: <b>reference</b><br>
1902   * Path: <b>ServiceDefinition.relatedArtifact.resource</b><br>
1903   * </p>
1904   */
1905  @SearchParamDefinition(name="successor", path="ServiceDefinition.relatedArtifact.where(type='successor').resource", description="What resource is being referenced", type="reference" )
1906  public static final String SP_SUCCESSOR = "successor";
1907 /**
1908   * <b>Fluent Client</b> search parameter constant for <b>successor</b>
1909   * <p>
1910   * Description: <b>What resource is being referenced</b><br>
1911   * Type: <b>reference</b><br>
1912   * Path: <b>ServiceDefinition.relatedArtifact.resource</b><br>
1913   * </p>
1914   */
1915  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SUCCESSOR = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SUCCESSOR);
1916
1917/**
1918   * Constant for fluent queries to be used to add include statements. Specifies
1919   * the path value of "<b>ServiceDefinition:successor</b>".
1920   */
1921  public static final ca.uhn.fhir.model.api.Include INCLUDE_SUCCESSOR = new ca.uhn.fhir.model.api.Include("ServiceDefinition:successor").toLocked();
1922
1923 /**
1924   * Search parameter: <b>jurisdiction</b>
1925   * <p>
1926   * Description: <b>Intended jurisdiction for the service definition</b><br>
1927   * Type: <b>token</b><br>
1928   * Path: <b>ServiceDefinition.jurisdiction</b><br>
1929   * </p>
1930   */
1931  @SearchParamDefinition(name="jurisdiction", path="ServiceDefinition.jurisdiction", description="Intended jurisdiction for the service definition", type="token" )
1932  public static final String SP_JURISDICTION = "jurisdiction";
1933 /**
1934   * <b>Fluent Client</b> search parameter constant for <b>jurisdiction</b>
1935   * <p>
1936   * Description: <b>Intended jurisdiction for the service definition</b><br>
1937   * Type: <b>token</b><br>
1938   * Path: <b>ServiceDefinition.jurisdiction</b><br>
1939   * </p>
1940   */
1941  public static final ca.uhn.fhir.rest.gclient.TokenClientParam JURISDICTION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_JURISDICTION);
1942
1943 /**
1944   * Search parameter: <b>description</b>
1945   * <p>
1946   * Description: <b>The description of the service definition</b><br>
1947   * Type: <b>string</b><br>
1948   * Path: <b>ServiceDefinition.description</b><br>
1949   * </p>
1950   */
1951  @SearchParamDefinition(name="description", path="ServiceDefinition.description", description="The description of the service definition", type="string" )
1952  public static final String SP_DESCRIPTION = "description";
1953 /**
1954   * <b>Fluent Client</b> search parameter constant for <b>description</b>
1955   * <p>
1956   * Description: <b>The description of the service definition</b><br>
1957   * Type: <b>string</b><br>
1958   * Path: <b>ServiceDefinition.description</b><br>
1959   * </p>
1960   */
1961  public static final ca.uhn.fhir.rest.gclient.StringClientParam DESCRIPTION = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_DESCRIPTION);
1962
1963 /**
1964   * Search parameter: <b>derived-from</b>
1965   * <p>
1966   * Description: <b>What resource is being referenced</b><br>
1967   * Type: <b>reference</b><br>
1968   * Path: <b>ServiceDefinition.relatedArtifact.resource</b><br>
1969   * </p>
1970   */
1971  @SearchParamDefinition(name="derived-from", path="ServiceDefinition.relatedArtifact.where(type='derived-from').resource", description="What resource is being referenced", type="reference" )
1972  public static final String SP_DERIVED_FROM = "derived-from";
1973 /**
1974   * <b>Fluent Client</b> search parameter constant for <b>derived-from</b>
1975   * <p>
1976   * Description: <b>What resource is being referenced</b><br>
1977   * Type: <b>reference</b><br>
1978   * Path: <b>ServiceDefinition.relatedArtifact.resource</b><br>
1979   * </p>
1980   */
1981  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam DERIVED_FROM = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_DERIVED_FROM);
1982
1983/**
1984   * Constant for fluent queries to be used to add include statements. Specifies
1985   * the path value of "<b>ServiceDefinition:derived-from</b>".
1986   */
1987  public static final ca.uhn.fhir.model.api.Include INCLUDE_DERIVED_FROM = new ca.uhn.fhir.model.api.Include("ServiceDefinition:derived-from").toLocked();
1988
1989 /**
1990   * Search parameter: <b>predecessor</b>
1991   * <p>
1992   * Description: <b>What resource is being referenced</b><br>
1993   * Type: <b>reference</b><br>
1994   * Path: <b>ServiceDefinition.relatedArtifact.resource</b><br>
1995   * </p>
1996   */
1997  @SearchParamDefinition(name="predecessor", path="ServiceDefinition.relatedArtifact.where(type='predecessor').resource", description="What resource is being referenced", type="reference" )
1998  public static final String SP_PREDECESSOR = "predecessor";
1999 /**
2000   * <b>Fluent Client</b> search parameter constant for <b>predecessor</b>
2001   * <p>
2002   * Description: <b>What resource is being referenced</b><br>
2003   * Type: <b>reference</b><br>
2004   * Path: <b>ServiceDefinition.relatedArtifact.resource</b><br>
2005   * </p>
2006   */
2007  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PREDECESSOR = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PREDECESSOR);
2008
2009/**
2010   * Constant for fluent queries to be used to add include statements. Specifies
2011   * the path value of "<b>ServiceDefinition:predecessor</b>".
2012   */
2013  public static final ca.uhn.fhir.model.api.Include INCLUDE_PREDECESSOR = new ca.uhn.fhir.model.api.Include("ServiceDefinition:predecessor").toLocked();
2014
2015 /**
2016   * Search parameter: <b>title</b>
2017   * <p>
2018   * Description: <b>The human-friendly name of the service definition</b><br>
2019   * Type: <b>string</b><br>
2020   * Path: <b>ServiceDefinition.title</b><br>
2021   * </p>
2022   */
2023  @SearchParamDefinition(name="title", path="ServiceDefinition.title", description="The human-friendly name of the service definition", type="string" )
2024  public static final String SP_TITLE = "title";
2025 /**
2026   * <b>Fluent Client</b> search parameter constant for <b>title</b>
2027   * <p>
2028   * Description: <b>The human-friendly name of the service definition</b><br>
2029   * Type: <b>string</b><br>
2030   * Path: <b>ServiceDefinition.title</b><br>
2031   * </p>
2032   */
2033  public static final ca.uhn.fhir.rest.gclient.StringClientParam TITLE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_TITLE);
2034
2035 /**
2036   * Search parameter: <b>composed-of</b>
2037   * <p>
2038   * Description: <b>What resource is being referenced</b><br>
2039   * Type: <b>reference</b><br>
2040   * Path: <b>ServiceDefinition.relatedArtifact.resource</b><br>
2041   * </p>
2042   */
2043  @SearchParamDefinition(name="composed-of", path="ServiceDefinition.relatedArtifact.where(type='composed-of').resource", description="What resource is being referenced", type="reference" )
2044  public static final String SP_COMPOSED_OF = "composed-of";
2045 /**
2046   * <b>Fluent Client</b> search parameter constant for <b>composed-of</b>
2047   * <p>
2048   * Description: <b>What resource is being referenced</b><br>
2049   * Type: <b>reference</b><br>
2050   * Path: <b>ServiceDefinition.relatedArtifact.resource</b><br>
2051   * </p>
2052   */
2053  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam COMPOSED_OF = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_COMPOSED_OF);
2054
2055/**
2056   * Constant for fluent queries to be used to add include statements. Specifies
2057   * the path value of "<b>ServiceDefinition:composed-of</b>".
2058   */
2059  public static final ca.uhn.fhir.model.api.Include INCLUDE_COMPOSED_OF = new ca.uhn.fhir.model.api.Include("ServiceDefinition:composed-of").toLocked();
2060
2061 /**
2062   * Search parameter: <b>version</b>
2063   * <p>
2064   * Description: <b>The business version of the service definition</b><br>
2065   * Type: <b>token</b><br>
2066   * Path: <b>ServiceDefinition.version</b><br>
2067   * </p>
2068   */
2069  @SearchParamDefinition(name="version", path="ServiceDefinition.version", description="The business version of the service definition", type="token" )
2070  public static final String SP_VERSION = "version";
2071 /**
2072   * <b>Fluent Client</b> search parameter constant for <b>version</b>
2073   * <p>
2074   * Description: <b>The business version of the service definition</b><br>
2075   * Type: <b>token</b><br>
2076   * Path: <b>ServiceDefinition.version</b><br>
2077   * </p>
2078   */
2079  public static final ca.uhn.fhir.rest.gclient.TokenClientParam VERSION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_VERSION);
2080
2081 /**
2082   * Search parameter: <b>url</b>
2083   * <p>
2084   * Description: <b>The uri that identifies the service definition</b><br>
2085   * Type: <b>uri</b><br>
2086   * Path: <b>ServiceDefinition.url</b><br>
2087   * </p>
2088   */
2089  @SearchParamDefinition(name="url", path="ServiceDefinition.url", description="The uri that identifies the service definition", type="uri" )
2090  public static final String SP_URL = "url";
2091 /**
2092   * <b>Fluent Client</b> search parameter constant for <b>url</b>
2093   * <p>
2094   * Description: <b>The uri that identifies the service definition</b><br>
2095   * Type: <b>uri</b><br>
2096   * Path: <b>ServiceDefinition.url</b><br>
2097   * </p>
2098   */
2099  public static final ca.uhn.fhir.rest.gclient.UriClientParam URL = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_URL);
2100
2101 /**
2102   * Search parameter: <b>effective</b>
2103   * <p>
2104   * Description: <b>The time during which the service definition is intended to be in use</b><br>
2105   * Type: <b>date</b><br>
2106   * Path: <b>ServiceDefinition.effectivePeriod</b><br>
2107   * </p>
2108   */
2109  @SearchParamDefinition(name="effective", path="ServiceDefinition.effectivePeriod", description="The time during which the service definition is intended to be in use", type="date" )
2110  public static final String SP_EFFECTIVE = "effective";
2111 /**
2112   * <b>Fluent Client</b> search parameter constant for <b>effective</b>
2113   * <p>
2114   * Description: <b>The time during which the service definition is intended to be in use</b><br>
2115   * Type: <b>date</b><br>
2116   * Path: <b>ServiceDefinition.effectivePeriod</b><br>
2117   * </p>
2118   */
2119  public static final ca.uhn.fhir.rest.gclient.DateClientParam EFFECTIVE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_EFFECTIVE);
2120
2121 /**
2122   * Search parameter: <b>depends-on</b>
2123   * <p>
2124   * Description: <b>What resource is being referenced</b><br>
2125   * Type: <b>reference</b><br>
2126   * Path: <b>ServiceDefinition.relatedArtifact.resource</b><br>
2127   * </p>
2128   */
2129  @SearchParamDefinition(name="depends-on", path="ServiceDefinition.relatedArtifact.where(type='depends-on').resource", description="What resource is being referenced", type="reference" )
2130  public static final String SP_DEPENDS_ON = "depends-on";
2131 /**
2132   * <b>Fluent Client</b> search parameter constant for <b>depends-on</b>
2133   * <p>
2134   * Description: <b>What resource is being referenced</b><br>
2135   * Type: <b>reference</b><br>
2136   * Path: <b>ServiceDefinition.relatedArtifact.resource</b><br>
2137   * </p>
2138   */
2139  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam DEPENDS_ON = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_DEPENDS_ON);
2140
2141/**
2142   * Constant for fluent queries to be used to add include statements. Specifies
2143   * the path value of "<b>ServiceDefinition:depends-on</b>".
2144   */
2145  public static final ca.uhn.fhir.model.api.Include INCLUDE_DEPENDS_ON = new ca.uhn.fhir.model.api.Include("ServiceDefinition:depends-on").toLocked();
2146
2147 /**
2148   * Search parameter: <b>name</b>
2149   * <p>
2150   * Description: <b>Computationally friendly name of the service definition</b><br>
2151   * Type: <b>string</b><br>
2152   * Path: <b>ServiceDefinition.name</b><br>
2153   * </p>
2154   */
2155  @SearchParamDefinition(name="name", path="ServiceDefinition.name", description="Computationally friendly name of the service definition", type="string" )
2156  public static final String SP_NAME = "name";
2157 /**
2158   * <b>Fluent Client</b> search parameter constant for <b>name</b>
2159   * <p>
2160   * Description: <b>Computationally friendly name of the service definition</b><br>
2161   * Type: <b>string</b><br>
2162   * Path: <b>ServiceDefinition.name</b><br>
2163   * </p>
2164   */
2165  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_NAME);
2166
2167 /**
2168   * Search parameter: <b>publisher</b>
2169   * <p>
2170   * Description: <b>Name of the publisher of the service definition</b><br>
2171   * Type: <b>string</b><br>
2172   * Path: <b>ServiceDefinition.publisher</b><br>
2173   * </p>
2174   */
2175  @SearchParamDefinition(name="publisher", path="ServiceDefinition.publisher", description="Name of the publisher of the service definition", type="string" )
2176  public static final String SP_PUBLISHER = "publisher";
2177 /**
2178   * <b>Fluent Client</b> search parameter constant for <b>publisher</b>
2179   * <p>
2180   * Description: <b>Name of the publisher of the service definition</b><br>
2181   * Type: <b>string</b><br>
2182   * Path: <b>ServiceDefinition.publisher</b><br>
2183   * </p>
2184   */
2185  public static final ca.uhn.fhir.rest.gclient.StringClientParam PUBLISHER = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_PUBLISHER);
2186
2187 /**
2188   * Search parameter: <b>topic</b>
2189   * <p>
2190   * Description: <b>Topics associated with the module</b><br>
2191   * Type: <b>token</b><br>
2192   * Path: <b>ServiceDefinition.topic</b><br>
2193   * </p>
2194   */
2195  @SearchParamDefinition(name="topic", path="ServiceDefinition.topic", description="Topics associated with the module", type="token" )
2196  public static final String SP_TOPIC = "topic";
2197 /**
2198   * <b>Fluent Client</b> search parameter constant for <b>topic</b>
2199   * <p>
2200   * Description: <b>Topics associated with the module</b><br>
2201   * Type: <b>token</b><br>
2202   * Path: <b>ServiceDefinition.topic</b><br>
2203   * </p>
2204   */
2205  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TOPIC = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_TOPIC);
2206
2207 /**
2208   * Search parameter: <b>status</b>
2209   * <p>
2210   * Description: <b>The current status of the service definition</b><br>
2211   * Type: <b>token</b><br>
2212   * Path: <b>ServiceDefinition.status</b><br>
2213   * </p>
2214   */
2215  @SearchParamDefinition(name="status", path="ServiceDefinition.status", description="The current status of the service definition", type="token" )
2216  public static final String SP_STATUS = "status";
2217 /**
2218   * <b>Fluent Client</b> search parameter constant for <b>status</b>
2219   * <p>
2220   * Description: <b>The current status of the service definition</b><br>
2221   * Type: <b>token</b><br>
2222   * Path: <b>ServiceDefinition.status</b><br>
2223   * </p>
2224   */
2225  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
2226
2227
2228}
2229