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