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