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