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