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