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