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