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