001package org.hl7.fhir.r5.model;
002
003
004/*
005  Copyright (c) 2011+, HL7, Inc.
006  All rights reserved.
007  
008  Redistribution and use in source and binary forms, with or without modification, \
009  are permitted provided that the following conditions are met:
010  
011   * Redistributions of source code must retain the above copyright notice, this \
012     list of conditions and the following disclaimer.
013   * Redistributions in binary form must reproduce the above copyright notice, \
014     this list of conditions and the following disclaimer in the documentation \
015     and/or other materials provided with the distribution.
016   * Neither the name of HL7 nor the names of its contributors may be used to 
017     endorse or promote products derived from this software without specific 
018     prior written permission.
019  
020  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND \
021  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED \
022  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \
023  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, \
024  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT \
025  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR \
026  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, \
027  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \
028  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \
029  POSSIBILITY OF SUCH DAMAGE.
030  */
031
032// Generated on Thu, Mar 23, 2023 19:59+1100 for FHIR v5.0.0
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.utilities.Utilities;
038import org.hl7.fhir.r5.model.Enumerations.*;
039import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
040import org.hl7.fhir.exceptions.FHIRException;
041import org.hl7.fhir.instance.model.api.ICompositeType;
042import ca.uhn.fhir.model.api.annotation.ResourceDef;
043import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
044import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
045import ca.uhn.fhir.model.api.annotation.Child;
046import ca.uhn.fhir.model.api.annotation.ChildOrder;
047import ca.uhn.fhir.model.api.annotation.Description;
048import ca.uhn.fhir.model.api.annotation.Block;
049
050/**
051 * The Citation Resource enables reference to any knowledge artifact for purposes of identification and attribution. The Citation Resource supports existing reference structures and developing publication practices such as versioning, expressing complex contributorship roles, and referencing computable resources.
052 */
053@ResourceDef(name="Citation", profile="http://hl7.org/fhir/StructureDefinition/Citation")
054public class Citation extends MetadataResource {
055
056    public enum RelatedArtifactTypeExpanded {
057        /**
058         * Additional documentation for the knowledge resource. This would include additional instructions on usage as well as additional information on clinical context or appropriateness.
059         */
060        DOCUMENTATION, 
061        /**
062         * The target artifact is a summary of the justification for the knowledge resource including supporting evidence, relevant guidelines, or other clinically important information. This information is intended to provide a way to make the justification for the knowledge resource available to the consumer of interventions or results produced by the knowledge resource.
063         */
064        JUSTIFICATION, 
065        /**
066         * Bibliographic citation for papers, references, or other relevant material for the knowledge resource. This is intended to allow for citation of related material, but that was not necessarily specifically prepared in connection with this knowledge resource.
067         */
068        CITATION, 
069        /**
070         * The previous version of the knowledge artifact, used to establish an ordering of versions of an artifact, independent of the status of each version.
071         */
072        PREDECESSOR, 
073        /**
074         * The subsequent version of the knowledge artfact, used to establish an ordering of versions of an artifact, independent of the status of each version.
075         */
076        SUCCESSOR, 
077        /**
078         * This artifact is derived from the target artifact. This is intended to capture the relationship in which a particular knowledge resource is based on the content of another artifact, but is modified to capture either a different set of overall requirements, or a more specific set of requirements such as those involved in a particular institution or clinical setting. The artifact may be derived from one or more target artifacts.
079         */
080        DERIVEDFROM, 
081        /**
082         * This artifact depends on the target artifact. There is a requirement to use the target artifact in the creation or interpretation of this artifact.
083         */
084        DEPENDSON, 
085        /**
086         * This artifact is composed of the target artifact. This artifact is constructed with the target artifact as a component. The target artifact is a part of this artifact. (A dataset is composed of data.).
087         */
088        COMPOSEDOF, 
089        /**
090         * This artifact is a part of the target artifact. The target artifact is composed of this artifact (and possibly other artifacts).
091         */
092        PARTOF, 
093        /**
094         * This artifact amends or changes the target artifact. This artifact adds additional information that is functionally expected to replace information in the target artifact. This artifact replaces a part but not all of the target artifact.
095         */
096        AMENDS, 
097        /**
098         * This artifact is amended with or changed by the target artifact. There is information in this artifact that should be functionally replaced with information in the target artifact.
099         */
100        AMENDEDWITH, 
101        /**
102         * This artifact adds additional information to the target artifact. The additional information does not replace or change information in the target artifact.
103         */
104        APPENDS, 
105        /**
106         * This artifact has additional information in the target artifact.
107         */
108        APPENDEDWITH, 
109        /**
110         * This artifact cites the target artifact. This may be a bibliographic citation for papers, references, or other relevant material for the knowledge resource. This is intended to allow for citation of related material, but that was not necessarily specifically prepared in connection with this knowledge resource.
111         */
112        CITES, 
113        /**
114         * This artifact is cited by the target artifact.
115         */
116        CITEDBY, 
117        /**
118         * This artifact contains comments about the target artifact.
119         */
120        COMMENTSON, 
121        /**
122         * This artifact has comments about it in the target artifact.  The type of comments may be expressed in the targetClassifier element such as reply, review, editorial, feedback, solicited, unsolicited, structured, unstructured.
123         */
124        COMMENTIN, 
125        /**
126         * This artifact is a container in which the target artifact is contained. A container is a data structure whose instances are collections of other objects. (A database contains the dataset.).
127         */
128        CONTAINS, 
129        /**
130         * This artifact is contained in the target artifact. The target artifact is a data structure whose instances are collections of other objects.
131         */
132        CONTAINEDIN, 
133        /**
134         * This artifact identifies errors and replacement content for the target artifact.
135         */
136        CORRECTS, 
137        /**
138         * This artifact has corrections to it in the target artifact. The target artifact identifies errors and replacement content for this artifact.
139         */
140        CORRECTIONIN, 
141        /**
142         * This artifact replaces or supersedes the target artifact. The target artifact may be considered deprecated.
143         */
144        REPLACES, 
145        /**
146         * This artifact is replaced with or superseded by the target artifact. This artifact may be considered deprecated.
147         */
148        REPLACEDWITH, 
149        /**
150         * This artifact retracts the target artifact. The content that was published in the target artifact should be considered removed from publication and should no longer be considered part of the public record.
151         */
152        RETRACTS, 
153        /**
154         * This artifact is retracted by the target artifact. The content that was published in this artifact should be considered removed from publication and should no longer be considered part of the public record.
155         */
156        RETRACTEDBY, 
157        /**
158         * This artifact is a signature of the target artifact.
159         */
160        SIGNS, 
161        /**
162         * This artifact has characteristics in common with the target artifact. This relationship may be used in systems to ?deduplicate? knowledge artifacts from different sources, or in systems to show ?similar items?.
163         */
164        SIMILARTO, 
165        /**
166         * This artifact provides additional support for the target artifact. The type of support  is not documentation as it does not describe, explain, or instruct regarding the target artifact.
167         */
168        SUPPORTS, 
169        /**
170         * The target artifact contains additional information related to the knowledge artifact but is not documentation as the additional information does not describe, explain, or instruct regarding the knowledge artifact content or application. This could include an associated dataset.
171         */
172        SUPPORTEDWITH, 
173        /**
174         * This artifact was generated by transforming the target artifact (e.g., format or language conversion). This is intended to capture the relationship in which a particular knowledge resource is based on the content of another artifact, but changes are only apparent in form and there is only one target artifact with the ?transforms? relationship type.
175         */
176        TRANSFORMS, 
177        /**
178         * This artifact was transformed into the target artifact (e.g., by format or language conversion).
179         */
180        TRANSFORMEDINTO, 
181        /**
182         * This artifact was generated by transforming a related artifact (e.g., format or language conversion), noted separately with the ?transforms? relationship type. This transformation used the target artifact to inform the transformation. The target artifact may be a conversion script or translation guide.
183         */
184        TRANSFORMEDWITH, 
185        /**
186         * This artifact provides additional documentation for the target artifact. This could include additional instructions on usage as well as additional information on clinical context or appropriateness.
187         */
188        DOCUMENTS, 
189        /**
190         * The target artifact is a precise description of a concept in this artifact. This may be used when the RelatedArtifact datatype is used in elements contained in this artifact.
191         */
192        SPECIFICATIONOF, 
193        /**
194         * This artifact was created with the target artifact. The target artifact is a tool or support material used in the creation of the artifact, and not content that the artifact was derived from.
195         */
196        CREATEDWITH, 
197        /**
198         * The related artifact is the citation for this artifact.
199         */
200        CITEAS, 
201        /**
202         * A copy of the artifact in a publication with a different artifact identifier.
203         */
204        REPRINT, 
205        /**
206         * The original version of record for which the current artifact is a copy.
207         */
208        REPRINTOF, 
209        /**
210         * added to help the parsers with the generic types
211         */
212        NULL;
213        public static RelatedArtifactTypeExpanded fromCode(String codeString) throws FHIRException {
214            if (codeString == null || "".equals(codeString))
215                return null;
216        if ("documentation".equals(codeString))
217          return DOCUMENTATION;
218        if ("justification".equals(codeString))
219          return JUSTIFICATION;
220        if ("citation".equals(codeString))
221          return CITATION;
222        if ("predecessor".equals(codeString))
223          return PREDECESSOR;
224        if ("successor".equals(codeString))
225          return SUCCESSOR;
226        if ("derived-from".equals(codeString))
227          return DERIVEDFROM;
228        if ("depends-on".equals(codeString))
229          return DEPENDSON;
230        if ("composed-of".equals(codeString))
231          return COMPOSEDOF;
232        if ("part-of".equals(codeString))
233          return PARTOF;
234        if ("amends".equals(codeString))
235          return AMENDS;
236        if ("amended-with".equals(codeString))
237          return AMENDEDWITH;
238        if ("appends".equals(codeString))
239          return APPENDS;
240        if ("appended-with".equals(codeString))
241          return APPENDEDWITH;
242        if ("cites".equals(codeString))
243          return CITES;
244        if ("cited-by".equals(codeString))
245          return CITEDBY;
246        if ("comments-on".equals(codeString))
247          return COMMENTSON;
248        if ("comment-in".equals(codeString))
249          return COMMENTIN;
250        if ("contains".equals(codeString))
251          return CONTAINS;
252        if ("contained-in".equals(codeString))
253          return CONTAINEDIN;
254        if ("corrects".equals(codeString))
255          return CORRECTS;
256        if ("correction-in".equals(codeString))
257          return CORRECTIONIN;
258        if ("replaces".equals(codeString))
259          return REPLACES;
260        if ("replaced-with".equals(codeString))
261          return REPLACEDWITH;
262        if ("retracts".equals(codeString))
263          return RETRACTS;
264        if ("retracted-by".equals(codeString))
265          return RETRACTEDBY;
266        if ("signs".equals(codeString))
267          return SIGNS;
268        if ("similar-to".equals(codeString))
269          return SIMILARTO;
270        if ("supports".equals(codeString))
271          return SUPPORTS;
272        if ("supported-with".equals(codeString))
273          return SUPPORTEDWITH;
274        if ("transforms".equals(codeString))
275          return TRANSFORMS;
276        if ("transformed-into".equals(codeString))
277          return TRANSFORMEDINTO;
278        if ("transformed-with".equals(codeString))
279          return TRANSFORMEDWITH;
280        if ("documents".equals(codeString))
281          return DOCUMENTS;
282        if ("specification-of".equals(codeString))
283          return SPECIFICATIONOF;
284        if ("created-with".equals(codeString))
285          return CREATEDWITH;
286        if ("cite-as".equals(codeString))
287          return CITEAS;
288        if ("reprint".equals(codeString))
289          return REPRINT;
290        if ("reprint-of".equals(codeString))
291          return REPRINTOF;
292        if (Configuration.isAcceptInvalidEnums())
293          return null;
294        else
295          throw new FHIRException("Unknown RelatedArtifactTypeExpanded code '"+codeString+"'");
296        }
297        public String toCode() {
298          switch (this) {
299            case DOCUMENTATION: return "documentation";
300            case JUSTIFICATION: return "justification";
301            case CITATION: return "citation";
302            case PREDECESSOR: return "predecessor";
303            case SUCCESSOR: return "successor";
304            case DERIVEDFROM: return "derived-from";
305            case DEPENDSON: return "depends-on";
306            case COMPOSEDOF: return "composed-of";
307            case PARTOF: return "part-of";
308            case AMENDS: return "amends";
309            case AMENDEDWITH: return "amended-with";
310            case APPENDS: return "appends";
311            case APPENDEDWITH: return "appended-with";
312            case CITES: return "cites";
313            case CITEDBY: return "cited-by";
314            case COMMENTSON: return "comments-on";
315            case COMMENTIN: return "comment-in";
316            case CONTAINS: return "contains";
317            case CONTAINEDIN: return "contained-in";
318            case CORRECTS: return "corrects";
319            case CORRECTIONIN: return "correction-in";
320            case REPLACES: return "replaces";
321            case REPLACEDWITH: return "replaced-with";
322            case RETRACTS: return "retracts";
323            case RETRACTEDBY: return "retracted-by";
324            case SIGNS: return "signs";
325            case SIMILARTO: return "similar-to";
326            case SUPPORTS: return "supports";
327            case SUPPORTEDWITH: return "supported-with";
328            case TRANSFORMS: return "transforms";
329            case TRANSFORMEDINTO: return "transformed-into";
330            case TRANSFORMEDWITH: return "transformed-with";
331            case DOCUMENTS: return "documents";
332            case SPECIFICATIONOF: return "specification-of";
333            case CREATEDWITH: return "created-with";
334            case CITEAS: return "cite-as";
335            case REPRINT: return "reprint";
336            case REPRINTOF: return "reprint-of";
337            case NULL: return null;
338            default: return "?";
339          }
340        }
341        public String getSystem() {
342          switch (this) {
343            case DOCUMENTATION: return "http://hl7.org/fhir/related-artifact-type";
344            case JUSTIFICATION: return "http://hl7.org/fhir/related-artifact-type";
345            case CITATION: return "http://hl7.org/fhir/related-artifact-type";
346            case PREDECESSOR: return "http://hl7.org/fhir/related-artifact-type";
347            case SUCCESSOR: return "http://hl7.org/fhir/related-artifact-type";
348            case DERIVEDFROM: return "http://hl7.org/fhir/related-artifact-type";
349            case DEPENDSON: return "http://hl7.org/fhir/related-artifact-type";
350            case COMPOSEDOF: return "http://hl7.org/fhir/related-artifact-type";
351            case PARTOF: return "http://hl7.org/fhir/related-artifact-type";
352            case AMENDS: return "http://hl7.org/fhir/related-artifact-type";
353            case AMENDEDWITH: return "http://hl7.org/fhir/related-artifact-type";
354            case APPENDS: return "http://hl7.org/fhir/related-artifact-type";
355            case APPENDEDWITH: return "http://hl7.org/fhir/related-artifact-type";
356            case CITES: return "http://hl7.org/fhir/related-artifact-type";
357            case CITEDBY: return "http://hl7.org/fhir/related-artifact-type";
358            case COMMENTSON: return "http://hl7.org/fhir/related-artifact-type";
359            case COMMENTIN: return "http://hl7.org/fhir/related-artifact-type";
360            case CONTAINS: return "http://hl7.org/fhir/related-artifact-type";
361            case CONTAINEDIN: return "http://hl7.org/fhir/related-artifact-type";
362            case CORRECTS: return "http://hl7.org/fhir/related-artifact-type";
363            case CORRECTIONIN: return "http://hl7.org/fhir/related-artifact-type";
364            case REPLACES: return "http://hl7.org/fhir/related-artifact-type";
365            case REPLACEDWITH: return "http://hl7.org/fhir/related-artifact-type";
366            case RETRACTS: return "http://hl7.org/fhir/related-artifact-type";
367            case RETRACTEDBY: return "http://hl7.org/fhir/related-artifact-type";
368            case SIGNS: return "http://hl7.org/fhir/related-artifact-type";
369            case SIMILARTO: return "http://hl7.org/fhir/related-artifact-type";
370            case SUPPORTS: return "http://hl7.org/fhir/related-artifact-type";
371            case SUPPORTEDWITH: return "http://hl7.org/fhir/related-artifact-type";
372            case TRANSFORMS: return "http://hl7.org/fhir/related-artifact-type";
373            case TRANSFORMEDINTO: return "http://hl7.org/fhir/related-artifact-type";
374            case TRANSFORMEDWITH: return "http://hl7.org/fhir/related-artifact-type";
375            case DOCUMENTS: return "http://hl7.org/fhir/related-artifact-type";
376            case SPECIFICATIONOF: return "http://hl7.org/fhir/related-artifact-type";
377            case CREATEDWITH: return "http://hl7.org/fhir/related-artifact-type";
378            case CITEAS: return "http://hl7.org/fhir/related-artifact-type";
379            case REPRINT: return "http://hl7.org/fhir/related-artifact-type-expanded";
380            case REPRINTOF: return "http://hl7.org/fhir/related-artifact-type-expanded";
381            case NULL: return null;
382            default: return "?";
383          }
384        }
385        public String getDefinition() {
386          switch (this) {
387            case DOCUMENTATION: return "Additional documentation for the knowledge resource. This would include additional instructions on usage as well as additional information on clinical context or appropriateness.";
388            case JUSTIFICATION: return "The target artifact is a summary of the justification for the knowledge resource including supporting evidence, relevant guidelines, or other clinically important information. This information is intended to provide a way to make the justification for the knowledge resource available to the consumer of interventions or results produced by the knowledge resource.";
389            case CITATION: return "Bibliographic citation for papers, references, or other relevant material for the knowledge resource. This is intended to allow for citation of related material, but that was not necessarily specifically prepared in connection with this knowledge resource.";
390            case PREDECESSOR: return "The previous version of the knowledge artifact, used to establish an ordering of versions of an artifact, independent of the status of each version.";
391            case SUCCESSOR: return "The subsequent version of the knowledge artfact, used to establish an ordering of versions of an artifact, independent of the status of each version.";
392            case DERIVEDFROM: return "This artifact is derived from the target artifact. This is intended to capture the relationship in which a particular knowledge resource is based on the content of another artifact, but is modified to capture either a different set of overall requirements, or a more specific set of requirements such as those involved in a particular institution or clinical setting. The artifact may be derived from one or more target artifacts.";
393            case DEPENDSON: return "This artifact depends on the target artifact. There is a requirement to use the target artifact in the creation or interpretation of this artifact.";
394            case COMPOSEDOF: return "This artifact is composed of the target artifact. This artifact is constructed with the target artifact as a component. The target artifact is a part of this artifact. (A dataset is composed of data.).";
395            case PARTOF: return "This artifact is a part of the target artifact. The target artifact is composed of this artifact (and possibly other artifacts).";
396            case AMENDS: return "This artifact amends or changes the target artifact. This artifact adds additional information that is functionally expected to replace information in the target artifact. This artifact replaces a part but not all of the target artifact.";
397            case AMENDEDWITH: return "This artifact is amended with or changed by the target artifact. There is information in this artifact that should be functionally replaced with information in the target artifact.";
398            case APPENDS: return "This artifact adds additional information to the target artifact. The additional information does not replace or change information in the target artifact.";
399            case APPENDEDWITH: return "This artifact has additional information in the target artifact.";
400            case CITES: return "This artifact cites the target artifact. This may be a bibliographic citation for papers, references, or other relevant material for the knowledge resource. This is intended to allow for citation of related material, but that was not necessarily specifically prepared in connection with this knowledge resource.";
401            case CITEDBY: return "This artifact is cited by the target artifact.";
402            case COMMENTSON: return "This artifact contains comments about the target artifact.";
403            case COMMENTIN: return "This artifact has comments about it in the target artifact.  The type of comments may be expressed in the targetClassifier element such as reply, review, editorial, feedback, solicited, unsolicited, structured, unstructured.";
404            case CONTAINS: return "This artifact is a container in which the target artifact is contained. A container is a data structure whose instances are collections of other objects. (A database contains the dataset.).";
405            case CONTAINEDIN: return "This artifact is contained in the target artifact. The target artifact is a data structure whose instances are collections of other objects.";
406            case CORRECTS: return "This artifact identifies errors and replacement content for the target artifact.";
407            case CORRECTIONIN: return "This artifact has corrections to it in the target artifact. The target artifact identifies errors and replacement content for this artifact.";
408            case REPLACES: return "This artifact replaces or supersedes the target artifact. The target artifact may be considered deprecated.";
409            case REPLACEDWITH: return "This artifact is replaced with or superseded by the target artifact. This artifact may be considered deprecated.";
410            case RETRACTS: return "This artifact retracts the target artifact. The content that was published in the target artifact should be considered removed from publication and should no longer be considered part of the public record.";
411            case RETRACTEDBY: return "This artifact is retracted by the target artifact. The content that was published in this artifact should be considered removed from publication and should no longer be considered part of the public record.";
412            case SIGNS: return "This artifact is a signature of the target artifact.";
413            case SIMILARTO: return "This artifact has characteristics in common with the target artifact. This relationship may be used in systems to ?deduplicate? knowledge artifacts from different sources, or in systems to show ?similar items?.";
414            case SUPPORTS: return "This artifact provides additional support for the target artifact. The type of support  is not documentation as it does not describe, explain, or instruct regarding the target artifact.";
415            case SUPPORTEDWITH: return "The target artifact contains additional information related to the knowledge artifact but is not documentation as the additional information does not describe, explain, or instruct regarding the knowledge artifact content or application. This could include an associated dataset.";
416            case TRANSFORMS: return "This artifact was generated by transforming the target artifact (e.g., format or language conversion). This is intended to capture the relationship in which a particular knowledge resource is based on the content of another artifact, but changes are only apparent in form and there is only one target artifact with the ?transforms? relationship type.";
417            case TRANSFORMEDINTO: return "This artifact was transformed into the target artifact (e.g., by format or language conversion).";
418            case TRANSFORMEDWITH: return "This artifact was generated by transforming a related artifact (e.g., format or language conversion), noted separately with the ?transforms? relationship type. This transformation used the target artifact to inform the transformation. The target artifact may be a conversion script or translation guide.";
419            case DOCUMENTS: return "This artifact provides additional documentation for the target artifact. This could include additional instructions on usage as well as additional information on clinical context or appropriateness.";
420            case SPECIFICATIONOF: return "The target artifact is a precise description of a concept in this artifact. This may be used when the RelatedArtifact datatype is used in elements contained in this artifact.";
421            case CREATEDWITH: return "This artifact was created with the target artifact. The target artifact is a tool or support material used in the creation of the artifact, and not content that the artifact was derived from.";
422            case CITEAS: return "The related artifact is the citation for this artifact.";
423            case REPRINT: return "A copy of the artifact in a publication with a different artifact identifier.";
424            case REPRINTOF: return "The original version of record for which the current artifact is a copy.";
425            case NULL: return null;
426            default: return "?";
427          }
428        }
429        public String getDisplay() {
430          switch (this) {
431            case DOCUMENTATION: return "Documentation";
432            case JUSTIFICATION: return "Justification";
433            case CITATION: return "Citation";
434            case PREDECESSOR: return "Predecessor";
435            case SUCCESSOR: return "Successor";
436            case DERIVEDFROM: return "Derived From";
437            case DEPENDSON: return "Depends On";
438            case COMPOSEDOF: return "Composed Of";
439            case PARTOF: return "Part Of";
440            case AMENDS: return "Amends";
441            case AMENDEDWITH: return "Amended With";
442            case APPENDS: return "Appends";
443            case APPENDEDWITH: return "Appended With";
444            case CITES: return "Cites";
445            case CITEDBY: return "Cited By";
446            case COMMENTSON: return "Is Comment On";
447            case COMMENTIN: return "Has Comment In";
448            case CONTAINS: return "Contains";
449            case CONTAINEDIN: return "Contained In";
450            case CORRECTS: return "Corrects";
451            case CORRECTIONIN: return "Correction In";
452            case REPLACES: return "Replaces";
453            case REPLACEDWITH: return "Replaced With";
454            case RETRACTS: return "Retracts";
455            case RETRACTEDBY: return "Retracted By";
456            case SIGNS: return "Signs";
457            case SIMILARTO: return "Similar To";
458            case SUPPORTS: return "Supports";
459            case SUPPORTEDWITH: return "Supported With";
460            case TRANSFORMS: return "Transforms";
461            case TRANSFORMEDINTO: return "Transformed Into";
462            case TRANSFORMEDWITH: return "Transformed With";
463            case DOCUMENTS: return "Documents";
464            case SPECIFICATIONOF: return "Specification Of";
465            case CREATEDWITH: return "Created With";
466            case CITEAS: return "Cite As";
467            case REPRINT: return "Reprint";
468            case REPRINTOF: return "Reprint Of";
469            case NULL: return null;
470            default: return "?";
471          }
472        }
473    }
474
475  public static class RelatedArtifactTypeExpandedEnumFactory implements EnumFactory<RelatedArtifactTypeExpanded> {
476    public RelatedArtifactTypeExpanded fromCode(String codeString) throws IllegalArgumentException {
477      if (codeString == null || "".equals(codeString))
478            if (codeString == null || "".equals(codeString))
479                return null;
480        if ("documentation".equals(codeString))
481          return RelatedArtifactTypeExpanded.DOCUMENTATION;
482        if ("justification".equals(codeString))
483          return RelatedArtifactTypeExpanded.JUSTIFICATION;
484        if ("citation".equals(codeString))
485          return RelatedArtifactTypeExpanded.CITATION;
486        if ("predecessor".equals(codeString))
487          return RelatedArtifactTypeExpanded.PREDECESSOR;
488        if ("successor".equals(codeString))
489          return RelatedArtifactTypeExpanded.SUCCESSOR;
490        if ("derived-from".equals(codeString))
491          return RelatedArtifactTypeExpanded.DERIVEDFROM;
492        if ("depends-on".equals(codeString))
493          return RelatedArtifactTypeExpanded.DEPENDSON;
494        if ("composed-of".equals(codeString))
495          return RelatedArtifactTypeExpanded.COMPOSEDOF;
496        if ("part-of".equals(codeString))
497          return RelatedArtifactTypeExpanded.PARTOF;
498        if ("amends".equals(codeString))
499          return RelatedArtifactTypeExpanded.AMENDS;
500        if ("amended-with".equals(codeString))
501          return RelatedArtifactTypeExpanded.AMENDEDWITH;
502        if ("appends".equals(codeString))
503          return RelatedArtifactTypeExpanded.APPENDS;
504        if ("appended-with".equals(codeString))
505          return RelatedArtifactTypeExpanded.APPENDEDWITH;
506        if ("cites".equals(codeString))
507          return RelatedArtifactTypeExpanded.CITES;
508        if ("cited-by".equals(codeString))
509          return RelatedArtifactTypeExpanded.CITEDBY;
510        if ("comments-on".equals(codeString))
511          return RelatedArtifactTypeExpanded.COMMENTSON;
512        if ("comment-in".equals(codeString))
513          return RelatedArtifactTypeExpanded.COMMENTIN;
514        if ("contains".equals(codeString))
515          return RelatedArtifactTypeExpanded.CONTAINS;
516        if ("contained-in".equals(codeString))
517          return RelatedArtifactTypeExpanded.CONTAINEDIN;
518        if ("corrects".equals(codeString))
519          return RelatedArtifactTypeExpanded.CORRECTS;
520        if ("correction-in".equals(codeString))
521          return RelatedArtifactTypeExpanded.CORRECTIONIN;
522        if ("replaces".equals(codeString))
523          return RelatedArtifactTypeExpanded.REPLACES;
524        if ("replaced-with".equals(codeString))
525          return RelatedArtifactTypeExpanded.REPLACEDWITH;
526        if ("retracts".equals(codeString))
527          return RelatedArtifactTypeExpanded.RETRACTS;
528        if ("retracted-by".equals(codeString))
529          return RelatedArtifactTypeExpanded.RETRACTEDBY;
530        if ("signs".equals(codeString))
531          return RelatedArtifactTypeExpanded.SIGNS;
532        if ("similar-to".equals(codeString))
533          return RelatedArtifactTypeExpanded.SIMILARTO;
534        if ("supports".equals(codeString))
535          return RelatedArtifactTypeExpanded.SUPPORTS;
536        if ("supported-with".equals(codeString))
537          return RelatedArtifactTypeExpanded.SUPPORTEDWITH;
538        if ("transforms".equals(codeString))
539          return RelatedArtifactTypeExpanded.TRANSFORMS;
540        if ("transformed-into".equals(codeString))
541          return RelatedArtifactTypeExpanded.TRANSFORMEDINTO;
542        if ("transformed-with".equals(codeString))
543          return RelatedArtifactTypeExpanded.TRANSFORMEDWITH;
544        if ("documents".equals(codeString))
545          return RelatedArtifactTypeExpanded.DOCUMENTS;
546        if ("specification-of".equals(codeString))
547          return RelatedArtifactTypeExpanded.SPECIFICATIONOF;
548        if ("created-with".equals(codeString))
549          return RelatedArtifactTypeExpanded.CREATEDWITH;
550        if ("cite-as".equals(codeString))
551          return RelatedArtifactTypeExpanded.CITEAS;
552        if ("reprint".equals(codeString))
553          return RelatedArtifactTypeExpanded.REPRINT;
554        if ("reprint-of".equals(codeString))
555          return RelatedArtifactTypeExpanded.REPRINTOF;
556        throw new IllegalArgumentException("Unknown RelatedArtifactTypeExpanded code '"+codeString+"'");
557        }
558        public Enumeration<RelatedArtifactTypeExpanded> fromType(PrimitiveType<?> code) throws FHIRException {
559          if (code == null)
560            return null;
561          if (code.isEmpty())
562            return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.NULL, code);
563          String codeString = ((PrimitiveType) code).asStringValue();
564          if (codeString == null || "".equals(codeString))
565            return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.NULL, code);
566        if ("documentation".equals(codeString))
567          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.DOCUMENTATION, code);
568        if ("justification".equals(codeString))
569          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.JUSTIFICATION, code);
570        if ("citation".equals(codeString))
571          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.CITATION, code);
572        if ("predecessor".equals(codeString))
573          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.PREDECESSOR, code);
574        if ("successor".equals(codeString))
575          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.SUCCESSOR, code);
576        if ("derived-from".equals(codeString))
577          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.DERIVEDFROM, code);
578        if ("depends-on".equals(codeString))
579          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.DEPENDSON, code);
580        if ("composed-of".equals(codeString))
581          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.COMPOSEDOF, code);
582        if ("part-of".equals(codeString))
583          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.PARTOF, code);
584        if ("amends".equals(codeString))
585          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.AMENDS, code);
586        if ("amended-with".equals(codeString))
587          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.AMENDEDWITH, code);
588        if ("appends".equals(codeString))
589          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.APPENDS, code);
590        if ("appended-with".equals(codeString))
591          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.APPENDEDWITH, code);
592        if ("cites".equals(codeString))
593          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.CITES, code);
594        if ("cited-by".equals(codeString))
595          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.CITEDBY, code);
596        if ("comments-on".equals(codeString))
597          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.COMMENTSON, code);
598        if ("comment-in".equals(codeString))
599          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.COMMENTIN, code);
600        if ("contains".equals(codeString))
601          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.CONTAINS, code);
602        if ("contained-in".equals(codeString))
603          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.CONTAINEDIN, code);
604        if ("corrects".equals(codeString))
605          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.CORRECTS, code);
606        if ("correction-in".equals(codeString))
607          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.CORRECTIONIN, code);
608        if ("replaces".equals(codeString))
609          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.REPLACES, code);
610        if ("replaced-with".equals(codeString))
611          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.REPLACEDWITH, code);
612        if ("retracts".equals(codeString))
613          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.RETRACTS, code);
614        if ("retracted-by".equals(codeString))
615          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.RETRACTEDBY, code);
616        if ("signs".equals(codeString))
617          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.SIGNS, code);
618        if ("similar-to".equals(codeString))
619          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.SIMILARTO, code);
620        if ("supports".equals(codeString))
621          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.SUPPORTS, code);
622        if ("supported-with".equals(codeString))
623          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.SUPPORTEDWITH, code);
624        if ("transforms".equals(codeString))
625          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.TRANSFORMS, code);
626        if ("transformed-into".equals(codeString))
627          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.TRANSFORMEDINTO, code);
628        if ("transformed-with".equals(codeString))
629          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.TRANSFORMEDWITH, code);
630        if ("documents".equals(codeString))
631          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.DOCUMENTS, code);
632        if ("specification-of".equals(codeString))
633          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.SPECIFICATIONOF, code);
634        if ("created-with".equals(codeString))
635          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.CREATEDWITH, code);
636        if ("cite-as".equals(codeString))
637          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.CITEAS, code);
638        if ("reprint".equals(codeString))
639          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.REPRINT, code);
640        if ("reprint-of".equals(codeString))
641          return new Enumeration<RelatedArtifactTypeExpanded>(this, RelatedArtifactTypeExpanded.REPRINTOF, code);
642        throw new FHIRException("Unknown RelatedArtifactTypeExpanded code '"+codeString+"'");
643        }
644    public String toCode(RelatedArtifactTypeExpanded code) {
645       if (code == RelatedArtifactTypeExpanded.NULL)
646           return null;
647       if (code == RelatedArtifactTypeExpanded.DOCUMENTATION)
648        return "documentation";
649      if (code == RelatedArtifactTypeExpanded.JUSTIFICATION)
650        return "justification";
651      if (code == RelatedArtifactTypeExpanded.CITATION)
652        return "citation";
653      if (code == RelatedArtifactTypeExpanded.PREDECESSOR)
654        return "predecessor";
655      if (code == RelatedArtifactTypeExpanded.SUCCESSOR)
656        return "successor";
657      if (code == RelatedArtifactTypeExpanded.DERIVEDFROM)
658        return "derived-from";
659      if (code == RelatedArtifactTypeExpanded.DEPENDSON)
660        return "depends-on";
661      if (code == RelatedArtifactTypeExpanded.COMPOSEDOF)
662        return "composed-of";
663      if (code == RelatedArtifactTypeExpanded.PARTOF)
664        return "part-of";
665      if (code == RelatedArtifactTypeExpanded.AMENDS)
666        return "amends";
667      if (code == RelatedArtifactTypeExpanded.AMENDEDWITH)
668        return "amended-with";
669      if (code == RelatedArtifactTypeExpanded.APPENDS)
670        return "appends";
671      if (code == RelatedArtifactTypeExpanded.APPENDEDWITH)
672        return "appended-with";
673      if (code == RelatedArtifactTypeExpanded.CITES)
674        return "cites";
675      if (code == RelatedArtifactTypeExpanded.CITEDBY)
676        return "cited-by";
677      if (code == RelatedArtifactTypeExpanded.COMMENTSON)
678        return "comments-on";
679      if (code == RelatedArtifactTypeExpanded.COMMENTIN)
680        return "comment-in";
681      if (code == RelatedArtifactTypeExpanded.CONTAINS)
682        return "contains";
683      if (code == RelatedArtifactTypeExpanded.CONTAINEDIN)
684        return "contained-in";
685      if (code == RelatedArtifactTypeExpanded.CORRECTS)
686        return "corrects";
687      if (code == RelatedArtifactTypeExpanded.CORRECTIONIN)
688        return "correction-in";
689      if (code == RelatedArtifactTypeExpanded.REPLACES)
690        return "replaces";
691      if (code == RelatedArtifactTypeExpanded.REPLACEDWITH)
692        return "replaced-with";
693      if (code == RelatedArtifactTypeExpanded.RETRACTS)
694        return "retracts";
695      if (code == RelatedArtifactTypeExpanded.RETRACTEDBY)
696        return "retracted-by";
697      if (code == RelatedArtifactTypeExpanded.SIGNS)
698        return "signs";
699      if (code == RelatedArtifactTypeExpanded.SIMILARTO)
700        return "similar-to";
701      if (code == RelatedArtifactTypeExpanded.SUPPORTS)
702        return "supports";
703      if (code == RelatedArtifactTypeExpanded.SUPPORTEDWITH)
704        return "supported-with";
705      if (code == RelatedArtifactTypeExpanded.TRANSFORMS)
706        return "transforms";
707      if (code == RelatedArtifactTypeExpanded.TRANSFORMEDINTO)
708        return "transformed-into";
709      if (code == RelatedArtifactTypeExpanded.TRANSFORMEDWITH)
710        return "transformed-with";
711      if (code == RelatedArtifactTypeExpanded.DOCUMENTS)
712        return "documents";
713      if (code == RelatedArtifactTypeExpanded.SPECIFICATIONOF)
714        return "specification-of";
715      if (code == RelatedArtifactTypeExpanded.CREATEDWITH)
716        return "created-with";
717      if (code == RelatedArtifactTypeExpanded.CITEAS)
718        return "cite-as";
719      if (code == RelatedArtifactTypeExpanded.REPRINT)
720        return "reprint";
721      if (code == RelatedArtifactTypeExpanded.REPRINTOF)
722        return "reprint-of";
723      return "?";
724   }
725    public String toSystem(RelatedArtifactTypeExpanded code) {
726      return code.getSystem();
727      }
728    }
729
730    @Block()
731    public static class CitationSummaryComponent extends BackboneElement implements IBaseBackboneElement {
732        /**
733         * Format for display of the citation summary.
734         */
735        @Child(name = "style", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=false)
736        @Description(shortDefinition="Format for display of the citation summary", formalDefinition="Format for display of the citation summary." )
737        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/citation-summary-style")
738        protected CodeableConcept style;
739
740        /**
741         * The human-readable display of the citation summary.
742         */
743        @Child(name = "text", type = {MarkdownType.class}, order=2, min=1, max=1, modifier=false, summary=true)
744        @Description(shortDefinition="The human-readable display of the citation summary", formalDefinition="The human-readable display of the citation summary." )
745        protected MarkdownType text;
746
747        private static final long serialVersionUID = 123416446L;
748
749    /**
750     * Constructor
751     */
752      public CitationSummaryComponent() {
753        super();
754      }
755
756    /**
757     * Constructor
758     */
759      public CitationSummaryComponent(String text) {
760        super();
761        this.setText(text);
762      }
763
764        /**
765         * @return {@link #style} (Format for display of the citation summary.)
766         */
767        public CodeableConcept getStyle() { 
768          if (this.style == null)
769            if (Configuration.errorOnAutoCreate())
770              throw new Error("Attempt to auto-create CitationSummaryComponent.style");
771            else if (Configuration.doAutoCreate())
772              this.style = new CodeableConcept(); // cc
773          return this.style;
774        }
775
776        public boolean hasStyle() { 
777          return this.style != null && !this.style.isEmpty();
778        }
779
780        /**
781         * @param value {@link #style} (Format for display of the citation summary.)
782         */
783        public CitationSummaryComponent setStyle(CodeableConcept value) { 
784          this.style = value;
785          return this;
786        }
787
788        /**
789         * @return {@link #text} (The human-readable display of the citation summary.). This is the underlying object with id, value and extensions. The accessor "getText" gives direct access to the value
790         */
791        public MarkdownType getTextElement() { 
792          if (this.text == null)
793            if (Configuration.errorOnAutoCreate())
794              throw new Error("Attempt to auto-create CitationSummaryComponent.text");
795            else if (Configuration.doAutoCreate())
796              this.text = new MarkdownType(); // bb
797          return this.text;
798        }
799
800        public boolean hasTextElement() { 
801          return this.text != null && !this.text.isEmpty();
802        }
803
804        public boolean hasText() { 
805          return this.text != null && !this.text.isEmpty();
806        }
807
808        /**
809         * @param value {@link #text} (The human-readable display of the citation summary.). This is the underlying object with id, value and extensions. The accessor "getText" gives direct access to the value
810         */
811        public CitationSummaryComponent setTextElement(MarkdownType value) { 
812          this.text = value;
813          return this;
814        }
815
816        /**
817         * @return The human-readable display of the citation summary.
818         */
819        public String getText() { 
820          return this.text == null ? null : this.text.getValue();
821        }
822
823        /**
824         * @param value The human-readable display of the citation summary.
825         */
826        public CitationSummaryComponent setText(String value) { 
827            if (this.text == null)
828              this.text = new MarkdownType();
829            this.text.setValue(value);
830          return this;
831        }
832
833        protected void listChildren(List<Property> children) {
834          super.listChildren(children);
835          children.add(new Property("style", "CodeableConcept", "Format for display of the citation summary.", 0, 1, style));
836          children.add(new Property("text", "markdown", "The human-readable display of the citation summary.", 0, 1, text));
837        }
838
839        @Override
840        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
841          switch (_hash) {
842          case 109780401: /*style*/  return new Property("style", "CodeableConcept", "Format for display of the citation summary.", 0, 1, style);
843          case 3556653: /*text*/  return new Property("text", "markdown", "The human-readable display of the citation summary.", 0, 1, text);
844          default: return super.getNamedProperty(_hash, _name, _checkValid);
845          }
846
847        }
848
849      @Override
850      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
851        switch (hash) {
852        case 109780401: /*style*/ return this.style == null ? new Base[0] : new Base[] {this.style}; // CodeableConcept
853        case 3556653: /*text*/ return this.text == null ? new Base[0] : new Base[] {this.text}; // MarkdownType
854        default: return super.getProperty(hash, name, checkValid);
855        }
856
857      }
858
859      @Override
860      public Base setProperty(int hash, String name, Base value) throws FHIRException {
861        switch (hash) {
862        case 109780401: // style
863          this.style = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
864          return value;
865        case 3556653: // text
866          this.text = TypeConvertor.castToMarkdown(value); // MarkdownType
867          return value;
868        default: return super.setProperty(hash, name, value);
869        }
870
871      }
872
873      @Override
874      public Base setProperty(String name, Base value) throws FHIRException {
875        if (name.equals("style")) {
876          this.style = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
877        } else if (name.equals("text")) {
878          this.text = TypeConvertor.castToMarkdown(value); // MarkdownType
879        } else
880          return super.setProperty(name, value);
881        return value;
882      }
883
884  @Override
885  public void removeChild(String name, Base value) throws FHIRException {
886        if (name.equals("style")) {
887          this.style = null;
888        } else if (name.equals("text")) {
889          this.text = null;
890        } else
891          super.removeChild(name, value);
892        
893      }
894
895      @Override
896      public Base makeProperty(int hash, String name) throws FHIRException {
897        switch (hash) {
898        case 109780401:  return getStyle();
899        case 3556653:  return getTextElement();
900        default: return super.makeProperty(hash, name);
901        }
902
903      }
904
905      @Override
906      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
907        switch (hash) {
908        case 109780401: /*style*/ return new String[] {"CodeableConcept"};
909        case 3556653: /*text*/ return new String[] {"markdown"};
910        default: return super.getTypesForProperty(hash, name);
911        }
912
913      }
914
915      @Override
916      public Base addChild(String name) throws FHIRException {
917        if (name.equals("style")) {
918          this.style = new CodeableConcept();
919          return this.style;
920        }
921        else if (name.equals("text")) {
922          throw new FHIRException("Cannot call addChild on a singleton property Citation.summary.text");
923        }
924        else
925          return super.addChild(name);
926      }
927
928      public CitationSummaryComponent copy() {
929        CitationSummaryComponent dst = new CitationSummaryComponent();
930        copyValues(dst);
931        return dst;
932      }
933
934      public void copyValues(CitationSummaryComponent dst) {
935        super.copyValues(dst);
936        dst.style = style == null ? null : style.copy();
937        dst.text = text == null ? null : text.copy();
938      }
939
940      @Override
941      public boolean equalsDeep(Base other_) {
942        if (!super.equalsDeep(other_))
943          return false;
944        if (!(other_ instanceof CitationSummaryComponent))
945          return false;
946        CitationSummaryComponent o = (CitationSummaryComponent) other_;
947        return compareDeep(style, o.style, true) && compareDeep(text, o.text, true);
948      }
949
950      @Override
951      public boolean equalsShallow(Base other_) {
952        if (!super.equalsShallow(other_))
953          return false;
954        if (!(other_ instanceof CitationSummaryComponent))
955          return false;
956        CitationSummaryComponent o = (CitationSummaryComponent) other_;
957        return compareValues(text, o.text, true);
958      }
959
960      public boolean isEmpty() {
961        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(style, text);
962      }
963
964  public String fhirType() {
965    return "Citation.summary";
966
967  }
968
969  }
970
971    @Block()
972    public static class CitationClassificationComponent extends BackboneElement implements IBaseBackboneElement {
973        /**
974         * The kind of classifier (e.g. publication type, keyword).
975         */
976        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=false)
977        @Description(shortDefinition="The kind of classifier (e.g. publication type, keyword)", formalDefinition="The kind of classifier (e.g. publication type, keyword)." )
978        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/citation-classification-type")
979        protected CodeableConcept type;
980
981        /**
982         * The specific classification value.
983         */
984        @Child(name = "classifier", type = {CodeableConcept.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
985        @Description(shortDefinition="The specific classification value", formalDefinition="The specific classification value." )
986        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/citation-artifact-classifier")
987        protected List<CodeableConcept> classifier;
988
989        private static final long serialVersionUID = -283121869L;
990
991    /**
992     * Constructor
993     */
994      public CitationClassificationComponent() {
995        super();
996      }
997
998        /**
999         * @return {@link #type} (The kind of classifier (e.g. publication type, keyword).)
1000         */
1001        public CodeableConcept getType() { 
1002          if (this.type == null)
1003            if (Configuration.errorOnAutoCreate())
1004              throw new Error("Attempt to auto-create CitationClassificationComponent.type");
1005            else if (Configuration.doAutoCreate())
1006              this.type = new CodeableConcept(); // cc
1007          return this.type;
1008        }
1009
1010        public boolean hasType() { 
1011          return this.type != null && !this.type.isEmpty();
1012        }
1013
1014        /**
1015         * @param value {@link #type} (The kind of classifier (e.g. publication type, keyword).)
1016         */
1017        public CitationClassificationComponent setType(CodeableConcept value) { 
1018          this.type = value;
1019          return this;
1020        }
1021
1022        /**
1023         * @return {@link #classifier} (The specific classification value.)
1024         */
1025        public List<CodeableConcept> getClassifier() { 
1026          if (this.classifier == null)
1027            this.classifier = new ArrayList<CodeableConcept>();
1028          return this.classifier;
1029        }
1030
1031        /**
1032         * @return Returns a reference to <code>this</code> for easy method chaining
1033         */
1034        public CitationClassificationComponent setClassifier(List<CodeableConcept> theClassifier) { 
1035          this.classifier = theClassifier;
1036          return this;
1037        }
1038
1039        public boolean hasClassifier() { 
1040          if (this.classifier == null)
1041            return false;
1042          for (CodeableConcept item : this.classifier)
1043            if (!item.isEmpty())
1044              return true;
1045          return false;
1046        }
1047
1048        public CodeableConcept addClassifier() { //3
1049          CodeableConcept t = new CodeableConcept();
1050          if (this.classifier == null)
1051            this.classifier = new ArrayList<CodeableConcept>();
1052          this.classifier.add(t);
1053          return t;
1054        }
1055
1056        public CitationClassificationComponent addClassifier(CodeableConcept t) { //3
1057          if (t == null)
1058            return this;
1059          if (this.classifier == null)
1060            this.classifier = new ArrayList<CodeableConcept>();
1061          this.classifier.add(t);
1062          return this;
1063        }
1064
1065        /**
1066         * @return The first repetition of repeating field {@link #classifier}, creating it if it does not already exist {3}
1067         */
1068        public CodeableConcept getClassifierFirstRep() { 
1069          if (getClassifier().isEmpty()) {
1070            addClassifier();
1071          }
1072          return getClassifier().get(0);
1073        }
1074
1075        protected void listChildren(List<Property> children) {
1076          super.listChildren(children);
1077          children.add(new Property("type", "CodeableConcept", "The kind of classifier (e.g. publication type, keyword).", 0, 1, type));
1078          children.add(new Property("classifier", "CodeableConcept", "The specific classification value.", 0, java.lang.Integer.MAX_VALUE, classifier));
1079        }
1080
1081        @Override
1082        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1083          switch (_hash) {
1084          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "The kind of classifier (e.g. publication type, keyword).", 0, 1, type);
1085          case -281470431: /*classifier*/  return new Property("classifier", "CodeableConcept", "The specific classification value.", 0, java.lang.Integer.MAX_VALUE, classifier);
1086          default: return super.getNamedProperty(_hash, _name, _checkValid);
1087          }
1088
1089        }
1090
1091      @Override
1092      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1093        switch (hash) {
1094        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
1095        case -281470431: /*classifier*/ return this.classifier == null ? new Base[0] : this.classifier.toArray(new Base[this.classifier.size()]); // CodeableConcept
1096        default: return super.getProperty(hash, name, checkValid);
1097        }
1098
1099      }
1100
1101      @Override
1102      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1103        switch (hash) {
1104        case 3575610: // type
1105          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1106          return value;
1107        case -281470431: // classifier
1108          this.getClassifier().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
1109          return value;
1110        default: return super.setProperty(hash, name, value);
1111        }
1112
1113      }
1114
1115      @Override
1116      public Base setProperty(String name, Base value) throws FHIRException {
1117        if (name.equals("type")) {
1118          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1119        } else if (name.equals("classifier")) {
1120          this.getClassifier().add(TypeConvertor.castToCodeableConcept(value));
1121        } else
1122          return super.setProperty(name, value);
1123        return value;
1124      }
1125
1126  @Override
1127  public void removeChild(String name, Base value) throws FHIRException {
1128        if (name.equals("type")) {
1129          this.type = null;
1130        } else if (name.equals("classifier")) {
1131          this.getClassifier().remove(value);
1132        } else
1133          super.removeChild(name, value);
1134        
1135      }
1136
1137      @Override
1138      public Base makeProperty(int hash, String name) throws FHIRException {
1139        switch (hash) {
1140        case 3575610:  return getType();
1141        case -281470431:  return addClassifier(); 
1142        default: return super.makeProperty(hash, name);
1143        }
1144
1145      }
1146
1147      @Override
1148      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1149        switch (hash) {
1150        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
1151        case -281470431: /*classifier*/ return new String[] {"CodeableConcept"};
1152        default: return super.getTypesForProperty(hash, name);
1153        }
1154
1155      }
1156
1157      @Override
1158      public Base addChild(String name) throws FHIRException {
1159        if (name.equals("type")) {
1160          this.type = new CodeableConcept();
1161          return this.type;
1162        }
1163        else if (name.equals("classifier")) {
1164          return addClassifier();
1165        }
1166        else
1167          return super.addChild(name);
1168      }
1169
1170      public CitationClassificationComponent copy() {
1171        CitationClassificationComponent dst = new CitationClassificationComponent();
1172        copyValues(dst);
1173        return dst;
1174      }
1175
1176      public void copyValues(CitationClassificationComponent dst) {
1177        super.copyValues(dst);
1178        dst.type = type == null ? null : type.copy();
1179        if (classifier != null) {
1180          dst.classifier = new ArrayList<CodeableConcept>();
1181          for (CodeableConcept i : classifier)
1182            dst.classifier.add(i.copy());
1183        };
1184      }
1185
1186      @Override
1187      public boolean equalsDeep(Base other_) {
1188        if (!super.equalsDeep(other_))
1189          return false;
1190        if (!(other_ instanceof CitationClassificationComponent))
1191          return false;
1192        CitationClassificationComponent o = (CitationClassificationComponent) other_;
1193        return compareDeep(type, o.type, true) && compareDeep(classifier, o.classifier, true);
1194      }
1195
1196      @Override
1197      public boolean equalsShallow(Base other_) {
1198        if (!super.equalsShallow(other_))
1199          return false;
1200        if (!(other_ instanceof CitationClassificationComponent))
1201          return false;
1202        CitationClassificationComponent o = (CitationClassificationComponent) other_;
1203        return true;
1204      }
1205
1206      public boolean isEmpty() {
1207        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, classifier);
1208      }
1209
1210  public String fhirType() {
1211    return "Citation.classification";
1212
1213  }
1214
1215  }
1216
1217    @Block()
1218    public static class CitationStatusDateComponent extends BackboneElement implements IBaseBackboneElement {
1219        /**
1220         * The state or status of the citation record (that will be paired with the period).
1221         */
1222        @Child(name = "activity", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
1223        @Description(shortDefinition="Classification of the status", formalDefinition="The state or status of the citation record (that will be paired with the period)." )
1224        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/citation-status-type")
1225        protected CodeableConcept activity;
1226
1227        /**
1228         * Whether the status date is actual (has occurred) or expected (estimated or anticipated).
1229         */
1230        @Child(name = "actual", type = {BooleanType.class}, order=2, min=0, max=1, modifier=false, summary=false)
1231        @Description(shortDefinition="Either occurred or expected", formalDefinition="Whether the status date is actual (has occurred) or expected (estimated or anticipated)." )
1232        protected BooleanType actual;
1233
1234        /**
1235         * When the status started and/or ended.
1236         */
1237        @Child(name = "period", type = {Period.class}, order=3, min=1, max=1, modifier=false, summary=false)
1238        @Description(shortDefinition="When the status started and/or ended", formalDefinition="When the status started and/or ended." )
1239        protected Period period;
1240
1241        private static final long serialVersionUID = 1123586924L;
1242
1243    /**
1244     * Constructor
1245     */
1246      public CitationStatusDateComponent() {
1247        super();
1248      }
1249
1250    /**
1251     * Constructor
1252     */
1253      public CitationStatusDateComponent(CodeableConcept activity, Period period) {
1254        super();
1255        this.setActivity(activity);
1256        this.setPeriod(period);
1257      }
1258
1259        /**
1260         * @return {@link #activity} (The state or status of the citation record (that will be paired with the period).)
1261         */
1262        public CodeableConcept getActivity() { 
1263          if (this.activity == null)
1264            if (Configuration.errorOnAutoCreate())
1265              throw new Error("Attempt to auto-create CitationStatusDateComponent.activity");
1266            else if (Configuration.doAutoCreate())
1267              this.activity = new CodeableConcept(); // cc
1268          return this.activity;
1269        }
1270
1271        public boolean hasActivity() { 
1272          return this.activity != null && !this.activity.isEmpty();
1273        }
1274
1275        /**
1276         * @param value {@link #activity} (The state or status of the citation record (that will be paired with the period).)
1277         */
1278        public CitationStatusDateComponent setActivity(CodeableConcept value) { 
1279          this.activity = value;
1280          return this;
1281        }
1282
1283        /**
1284         * @return {@link #actual} (Whether the status date is actual (has occurred) or expected (estimated or anticipated).). This is the underlying object with id, value and extensions. The accessor "getActual" gives direct access to the value
1285         */
1286        public BooleanType getActualElement() { 
1287          if (this.actual == null)
1288            if (Configuration.errorOnAutoCreate())
1289              throw new Error("Attempt to auto-create CitationStatusDateComponent.actual");
1290            else if (Configuration.doAutoCreate())
1291              this.actual = new BooleanType(); // bb
1292          return this.actual;
1293        }
1294
1295        public boolean hasActualElement() { 
1296          return this.actual != null && !this.actual.isEmpty();
1297        }
1298
1299        public boolean hasActual() { 
1300          return this.actual != null && !this.actual.isEmpty();
1301        }
1302
1303        /**
1304         * @param value {@link #actual} (Whether the status date is actual (has occurred) or expected (estimated or anticipated).). This is the underlying object with id, value and extensions. The accessor "getActual" gives direct access to the value
1305         */
1306        public CitationStatusDateComponent setActualElement(BooleanType value) { 
1307          this.actual = value;
1308          return this;
1309        }
1310
1311        /**
1312         * @return Whether the status date is actual (has occurred) or expected (estimated or anticipated).
1313         */
1314        public boolean getActual() { 
1315          return this.actual == null || this.actual.isEmpty() ? false : this.actual.getValue();
1316        }
1317
1318        /**
1319         * @param value Whether the status date is actual (has occurred) or expected (estimated or anticipated).
1320         */
1321        public CitationStatusDateComponent setActual(boolean value) { 
1322            if (this.actual == null)
1323              this.actual = new BooleanType();
1324            this.actual.setValue(value);
1325          return this;
1326        }
1327
1328        /**
1329         * @return {@link #period} (When the status started and/or ended.)
1330         */
1331        public Period getPeriod() { 
1332          if (this.period == null)
1333            if (Configuration.errorOnAutoCreate())
1334              throw new Error("Attempt to auto-create CitationStatusDateComponent.period");
1335            else if (Configuration.doAutoCreate())
1336              this.period = new Period(); // cc
1337          return this.period;
1338        }
1339
1340        public boolean hasPeriod() { 
1341          return this.period != null && !this.period.isEmpty();
1342        }
1343
1344        /**
1345         * @param value {@link #period} (When the status started and/or ended.)
1346         */
1347        public CitationStatusDateComponent setPeriod(Period value) { 
1348          this.period = value;
1349          return this;
1350        }
1351
1352        protected void listChildren(List<Property> children) {
1353          super.listChildren(children);
1354          children.add(new Property("activity", "CodeableConcept", "The state or status of the citation record (that will be paired with the period).", 0, 1, activity));
1355          children.add(new Property("actual", "boolean", "Whether the status date is actual (has occurred) or expected (estimated or anticipated).", 0, 1, actual));
1356          children.add(new Property("period", "Period", "When the status started and/or ended.", 0, 1, period));
1357        }
1358
1359        @Override
1360        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1361          switch (_hash) {
1362          case -1655966961: /*activity*/  return new Property("activity", "CodeableConcept", "The state or status of the citation record (that will be paired with the period).", 0, 1, activity);
1363          case -1422939762: /*actual*/  return new Property("actual", "boolean", "Whether the status date is actual (has occurred) or expected (estimated or anticipated).", 0, 1, actual);
1364          case -991726143: /*period*/  return new Property("period", "Period", "When the status started and/or ended.", 0, 1, period);
1365          default: return super.getNamedProperty(_hash, _name, _checkValid);
1366          }
1367
1368        }
1369
1370      @Override
1371      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1372        switch (hash) {
1373        case -1655966961: /*activity*/ return this.activity == null ? new Base[0] : new Base[] {this.activity}; // CodeableConcept
1374        case -1422939762: /*actual*/ return this.actual == null ? new Base[0] : new Base[] {this.actual}; // BooleanType
1375        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
1376        default: return super.getProperty(hash, name, checkValid);
1377        }
1378
1379      }
1380
1381      @Override
1382      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1383        switch (hash) {
1384        case -1655966961: // activity
1385          this.activity = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1386          return value;
1387        case -1422939762: // actual
1388          this.actual = TypeConvertor.castToBoolean(value); // BooleanType
1389          return value;
1390        case -991726143: // period
1391          this.period = TypeConvertor.castToPeriod(value); // Period
1392          return value;
1393        default: return super.setProperty(hash, name, value);
1394        }
1395
1396      }
1397
1398      @Override
1399      public Base setProperty(String name, Base value) throws FHIRException {
1400        if (name.equals("activity")) {
1401          this.activity = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1402        } else if (name.equals("actual")) {
1403          this.actual = TypeConvertor.castToBoolean(value); // BooleanType
1404        } else if (name.equals("period")) {
1405          this.period = TypeConvertor.castToPeriod(value); // Period
1406        } else
1407          return super.setProperty(name, value);
1408        return value;
1409      }
1410
1411  @Override
1412  public void removeChild(String name, Base value) throws FHIRException {
1413        if (name.equals("activity")) {
1414          this.activity = null;
1415        } else if (name.equals("actual")) {
1416          this.actual = null;
1417        } else if (name.equals("period")) {
1418          this.period = null;
1419        } else
1420          super.removeChild(name, value);
1421        
1422      }
1423
1424      @Override
1425      public Base makeProperty(int hash, String name) throws FHIRException {
1426        switch (hash) {
1427        case -1655966961:  return getActivity();
1428        case -1422939762:  return getActualElement();
1429        case -991726143:  return getPeriod();
1430        default: return super.makeProperty(hash, name);
1431        }
1432
1433      }
1434
1435      @Override
1436      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1437        switch (hash) {
1438        case -1655966961: /*activity*/ return new String[] {"CodeableConcept"};
1439        case -1422939762: /*actual*/ return new String[] {"boolean"};
1440        case -991726143: /*period*/ return new String[] {"Period"};
1441        default: return super.getTypesForProperty(hash, name);
1442        }
1443
1444      }
1445
1446      @Override
1447      public Base addChild(String name) throws FHIRException {
1448        if (name.equals("activity")) {
1449          this.activity = new CodeableConcept();
1450          return this.activity;
1451        }
1452        else if (name.equals("actual")) {
1453          throw new FHIRException("Cannot call addChild on a singleton property Citation.statusDate.actual");
1454        }
1455        else if (name.equals("period")) {
1456          this.period = new Period();
1457          return this.period;
1458        }
1459        else
1460          return super.addChild(name);
1461      }
1462
1463      public CitationStatusDateComponent copy() {
1464        CitationStatusDateComponent dst = new CitationStatusDateComponent();
1465        copyValues(dst);
1466        return dst;
1467      }
1468
1469      public void copyValues(CitationStatusDateComponent dst) {
1470        super.copyValues(dst);
1471        dst.activity = activity == null ? null : activity.copy();
1472        dst.actual = actual == null ? null : actual.copy();
1473        dst.period = period == null ? null : period.copy();
1474      }
1475
1476      @Override
1477      public boolean equalsDeep(Base other_) {
1478        if (!super.equalsDeep(other_))
1479          return false;
1480        if (!(other_ instanceof CitationStatusDateComponent))
1481          return false;
1482        CitationStatusDateComponent o = (CitationStatusDateComponent) other_;
1483        return compareDeep(activity, o.activity, true) && compareDeep(actual, o.actual, true) && compareDeep(period, o.period, true)
1484          ;
1485      }
1486
1487      @Override
1488      public boolean equalsShallow(Base other_) {
1489        if (!super.equalsShallow(other_))
1490          return false;
1491        if (!(other_ instanceof CitationStatusDateComponent))
1492          return false;
1493        CitationStatusDateComponent o = (CitationStatusDateComponent) other_;
1494        return compareValues(actual, o.actual, true);
1495      }
1496
1497      public boolean isEmpty() {
1498        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(activity, actual, period
1499          );
1500      }
1501
1502  public String fhirType() {
1503    return "Citation.statusDate";
1504
1505  }
1506
1507  }
1508
1509    @Block()
1510    public static class CitationCitedArtifactComponent extends BackboneElement implements IBaseBackboneElement {
1511        /**
1512         * A formal identifier that is used to identify the cited artifact when it is represented in other formats, or referenced in a specification, model, design or an instance.
1513         */
1514        @Child(name = "identifier", type = {Identifier.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1515        @Description(shortDefinition="Unique identifier. May include DOI, PMID, PMCID, etc", formalDefinition="A formal identifier that is used to identify the cited artifact when it is represented in other formats, or referenced in a specification, model, design or an instance." )
1516        protected List<Identifier> identifier;
1517
1518        /**
1519         * A formal identifier that is used to identify things closely related to the cited artifact.
1520         */
1521        @Child(name = "relatedIdentifier", type = {Identifier.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1522        @Description(shortDefinition="Identifier not unique to the cited artifact. May include trial registry identifiers", formalDefinition="A formal identifier that is used to identify things closely related to the cited artifact." )
1523        protected List<Identifier> relatedIdentifier;
1524
1525        /**
1526         * When the cited artifact was accessed.
1527         */
1528        @Child(name = "dateAccessed", type = {DateTimeType.class}, order=3, min=0, max=1, modifier=false, summary=true)
1529        @Description(shortDefinition="When the cited artifact was accessed", formalDefinition="When the cited artifact was accessed." )
1530        protected DateTimeType dateAccessed;
1531
1532        /**
1533         * The defined version of the cited artifact.
1534         */
1535        @Child(name = "version", type = {}, order=4, min=0, max=1, modifier=false, summary=false)
1536        @Description(shortDefinition="The defined version of the cited artifact", formalDefinition="The defined version of the cited artifact." )
1537        protected CitationCitedArtifactVersionComponent version;
1538
1539        /**
1540         * The status of the cited artifact.
1541         */
1542        @Child(name = "currentState", type = {CodeableConcept.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1543        @Description(shortDefinition="The status of the cited artifact", formalDefinition="The status of the cited artifact." )
1544        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/cited-artifact-status-type")
1545        protected List<CodeableConcept> currentState;
1546
1547        /**
1548         * An effective date or period, historical or future, actual or expected, for a status of the cited artifact.
1549         */
1550        @Child(name = "statusDate", type = {}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1551        @Description(shortDefinition="An effective date or period for a status of the cited artifact", formalDefinition="An effective date or period, historical or future, actual or expected, for a status of the cited artifact." )
1552        protected List<CitationCitedArtifactStatusDateComponent> statusDate;
1553
1554        /**
1555         * The title details of the article or artifact.
1556         */
1557        @Child(name = "title", type = {}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1558        @Description(shortDefinition="The title details of the article or artifact", formalDefinition="The title details of the article or artifact." )
1559        protected List<CitationCitedArtifactTitleComponent> title;
1560
1561        /**
1562         * The abstract may be used to convey article-contained abstracts, externally-created abstracts, or other descriptive summaries.
1563         */
1564        @Child(name = "abstract", type = {}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1565        @Description(shortDefinition="Summary of the article or artifact", formalDefinition="The abstract may be used to convey article-contained abstracts, externally-created abstracts, or other descriptive summaries." )
1566        protected List<CitationCitedArtifactAbstractComponent> abstract_;
1567
1568        /**
1569         * The component of the article or artifact.
1570         */
1571        @Child(name = "part", type = {}, order=9, min=0, max=1, modifier=false, summary=false)
1572        @Description(shortDefinition="The component of the article or artifact", formalDefinition="The component of the article or artifact." )
1573        protected CitationCitedArtifactPartComponent part;
1574
1575        /**
1576         * The artifact related to the cited artifact.
1577         */
1578        @Child(name = "relatesTo", type = {}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1579        @Description(shortDefinition="The artifact related to the cited artifact", formalDefinition="The artifact related to the cited artifact." )
1580        protected List<CitationCitedArtifactRelatesToComponent> relatesTo;
1581
1582        /**
1583         * If multiple, used to represent alternative forms of the article that are not separate citations.
1584         */
1585        @Child(name = "publicationForm", type = {}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1586        @Description(shortDefinition="If multiple, used to represent alternative forms of the article that are not separate citations", formalDefinition="If multiple, used to represent alternative forms of the article that are not separate citations." )
1587        protected List<CitationCitedArtifactPublicationFormComponent> publicationForm;
1588
1589        /**
1590         * Used for any URL for the article or artifact cited.
1591         */
1592        @Child(name = "webLocation", type = {}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1593        @Description(shortDefinition="Used for any URL for the article or artifact cited", formalDefinition="Used for any URL for the article or artifact cited." )
1594        protected List<CitationCitedArtifactWebLocationComponent> webLocation;
1595
1596        /**
1597         * The assignment to an organizing scheme.
1598         */
1599        @Child(name = "classification", type = {}, order=13, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1600        @Description(shortDefinition="The assignment to an organizing scheme", formalDefinition="The assignment to an organizing scheme." )
1601        protected List<CitationCitedArtifactClassificationComponent> classification;
1602
1603        /**
1604         * This element is used to list authors and other contributors, their contact information, specific contributions, and summary statements.
1605         */
1606        @Child(name = "contributorship", type = {}, order=14, min=0, max=1, modifier=false, summary=false)
1607        @Description(shortDefinition="Attribution of authors and other contributors", formalDefinition="This element is used to list authors and other contributors, their contact information, specific contributions, and summary statements." )
1608        protected CitationCitedArtifactContributorshipComponent contributorship;
1609
1610        /**
1611         * Any additional information or content for the article or artifact.
1612         */
1613        @Child(name = "note", type = {Annotation.class}, order=15, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1614        @Description(shortDefinition="Any additional information or content for the article or artifact", formalDefinition="Any additional information or content for the article or artifact." )
1615        protected List<Annotation> note;
1616
1617        private static final long serialVersionUID = -1685890486L;
1618
1619    /**
1620     * Constructor
1621     */
1622      public CitationCitedArtifactComponent() {
1623        super();
1624      }
1625
1626        /**
1627         * @return {@link #identifier} (A formal identifier that is used to identify the cited artifact when it is represented in other formats, or referenced in a specification, model, design or an instance.)
1628         */
1629        public List<Identifier> getIdentifier() { 
1630          if (this.identifier == null)
1631            this.identifier = new ArrayList<Identifier>();
1632          return this.identifier;
1633        }
1634
1635        /**
1636         * @return Returns a reference to <code>this</code> for easy method chaining
1637         */
1638        public CitationCitedArtifactComponent setIdentifier(List<Identifier> theIdentifier) { 
1639          this.identifier = theIdentifier;
1640          return this;
1641        }
1642
1643        public boolean hasIdentifier() { 
1644          if (this.identifier == null)
1645            return false;
1646          for (Identifier item : this.identifier)
1647            if (!item.isEmpty())
1648              return true;
1649          return false;
1650        }
1651
1652        public Identifier addIdentifier() { //3
1653          Identifier t = new Identifier();
1654          if (this.identifier == null)
1655            this.identifier = new ArrayList<Identifier>();
1656          this.identifier.add(t);
1657          return t;
1658        }
1659
1660        public CitationCitedArtifactComponent addIdentifier(Identifier t) { //3
1661          if (t == null)
1662            return this;
1663          if (this.identifier == null)
1664            this.identifier = new ArrayList<Identifier>();
1665          this.identifier.add(t);
1666          return this;
1667        }
1668
1669        /**
1670         * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
1671         */
1672        public Identifier getIdentifierFirstRep() { 
1673          if (getIdentifier().isEmpty()) {
1674            addIdentifier();
1675          }
1676          return getIdentifier().get(0);
1677        }
1678
1679        /**
1680         * @return {@link #relatedIdentifier} (A formal identifier that is used to identify things closely related to the cited artifact.)
1681         */
1682        public List<Identifier> getRelatedIdentifier() { 
1683          if (this.relatedIdentifier == null)
1684            this.relatedIdentifier = new ArrayList<Identifier>();
1685          return this.relatedIdentifier;
1686        }
1687
1688        /**
1689         * @return Returns a reference to <code>this</code> for easy method chaining
1690         */
1691        public CitationCitedArtifactComponent setRelatedIdentifier(List<Identifier> theRelatedIdentifier) { 
1692          this.relatedIdentifier = theRelatedIdentifier;
1693          return this;
1694        }
1695
1696        public boolean hasRelatedIdentifier() { 
1697          if (this.relatedIdentifier == null)
1698            return false;
1699          for (Identifier item : this.relatedIdentifier)
1700            if (!item.isEmpty())
1701              return true;
1702          return false;
1703        }
1704
1705        public Identifier addRelatedIdentifier() { //3
1706          Identifier t = new Identifier();
1707          if (this.relatedIdentifier == null)
1708            this.relatedIdentifier = new ArrayList<Identifier>();
1709          this.relatedIdentifier.add(t);
1710          return t;
1711        }
1712
1713        public CitationCitedArtifactComponent addRelatedIdentifier(Identifier t) { //3
1714          if (t == null)
1715            return this;
1716          if (this.relatedIdentifier == null)
1717            this.relatedIdentifier = new ArrayList<Identifier>();
1718          this.relatedIdentifier.add(t);
1719          return this;
1720        }
1721
1722        /**
1723         * @return The first repetition of repeating field {@link #relatedIdentifier}, creating it if it does not already exist {3}
1724         */
1725        public Identifier getRelatedIdentifierFirstRep() { 
1726          if (getRelatedIdentifier().isEmpty()) {
1727            addRelatedIdentifier();
1728          }
1729          return getRelatedIdentifier().get(0);
1730        }
1731
1732        /**
1733         * @return {@link #dateAccessed} (When the cited artifact was accessed.). This is the underlying object with id, value and extensions. The accessor "getDateAccessed" gives direct access to the value
1734         */
1735        public DateTimeType getDateAccessedElement() { 
1736          if (this.dateAccessed == null)
1737            if (Configuration.errorOnAutoCreate())
1738              throw new Error("Attempt to auto-create CitationCitedArtifactComponent.dateAccessed");
1739            else if (Configuration.doAutoCreate())
1740              this.dateAccessed = new DateTimeType(); // bb
1741          return this.dateAccessed;
1742        }
1743
1744        public boolean hasDateAccessedElement() { 
1745          return this.dateAccessed != null && !this.dateAccessed.isEmpty();
1746        }
1747
1748        public boolean hasDateAccessed() { 
1749          return this.dateAccessed != null && !this.dateAccessed.isEmpty();
1750        }
1751
1752        /**
1753         * @param value {@link #dateAccessed} (When the cited artifact was accessed.). This is the underlying object with id, value and extensions. The accessor "getDateAccessed" gives direct access to the value
1754         */
1755        public CitationCitedArtifactComponent setDateAccessedElement(DateTimeType value) { 
1756          this.dateAccessed = value;
1757          return this;
1758        }
1759
1760        /**
1761         * @return When the cited artifact was accessed.
1762         */
1763        public Date getDateAccessed() { 
1764          return this.dateAccessed == null ? null : this.dateAccessed.getValue();
1765        }
1766
1767        /**
1768         * @param value When the cited artifact was accessed.
1769         */
1770        public CitationCitedArtifactComponent setDateAccessed(Date value) { 
1771          if (value == null)
1772            this.dateAccessed = null;
1773          else {
1774            if (this.dateAccessed == null)
1775              this.dateAccessed = new DateTimeType();
1776            this.dateAccessed.setValue(value);
1777          }
1778          return this;
1779        }
1780
1781        /**
1782         * @return {@link #version} (The defined version of the cited artifact.)
1783         */
1784        public CitationCitedArtifactVersionComponent getVersion() { 
1785          if (this.version == null)
1786            if (Configuration.errorOnAutoCreate())
1787              throw new Error("Attempt to auto-create CitationCitedArtifactComponent.version");
1788            else if (Configuration.doAutoCreate())
1789              this.version = new CitationCitedArtifactVersionComponent(); // cc
1790          return this.version;
1791        }
1792
1793        public boolean hasVersion() { 
1794          return this.version != null && !this.version.isEmpty();
1795        }
1796
1797        /**
1798         * @param value {@link #version} (The defined version of the cited artifact.)
1799         */
1800        public CitationCitedArtifactComponent setVersion(CitationCitedArtifactVersionComponent value) { 
1801          this.version = value;
1802          return this;
1803        }
1804
1805        /**
1806         * @return {@link #currentState} (The status of the cited artifact.)
1807         */
1808        public List<CodeableConcept> getCurrentState() { 
1809          if (this.currentState == null)
1810            this.currentState = new ArrayList<CodeableConcept>();
1811          return this.currentState;
1812        }
1813
1814        /**
1815         * @return Returns a reference to <code>this</code> for easy method chaining
1816         */
1817        public CitationCitedArtifactComponent setCurrentState(List<CodeableConcept> theCurrentState) { 
1818          this.currentState = theCurrentState;
1819          return this;
1820        }
1821
1822        public boolean hasCurrentState() { 
1823          if (this.currentState == null)
1824            return false;
1825          for (CodeableConcept item : this.currentState)
1826            if (!item.isEmpty())
1827              return true;
1828          return false;
1829        }
1830
1831        public CodeableConcept addCurrentState() { //3
1832          CodeableConcept t = new CodeableConcept();
1833          if (this.currentState == null)
1834            this.currentState = new ArrayList<CodeableConcept>();
1835          this.currentState.add(t);
1836          return t;
1837        }
1838
1839        public CitationCitedArtifactComponent addCurrentState(CodeableConcept t) { //3
1840          if (t == null)
1841            return this;
1842          if (this.currentState == null)
1843            this.currentState = new ArrayList<CodeableConcept>();
1844          this.currentState.add(t);
1845          return this;
1846        }
1847
1848        /**
1849         * @return The first repetition of repeating field {@link #currentState}, creating it if it does not already exist {3}
1850         */
1851        public CodeableConcept getCurrentStateFirstRep() { 
1852          if (getCurrentState().isEmpty()) {
1853            addCurrentState();
1854          }
1855          return getCurrentState().get(0);
1856        }
1857
1858        /**
1859         * @return {@link #statusDate} (An effective date or period, historical or future, actual or expected, for a status of the cited artifact.)
1860         */
1861        public List<CitationCitedArtifactStatusDateComponent> getStatusDate() { 
1862          if (this.statusDate == null)
1863            this.statusDate = new ArrayList<CitationCitedArtifactStatusDateComponent>();
1864          return this.statusDate;
1865        }
1866
1867        /**
1868         * @return Returns a reference to <code>this</code> for easy method chaining
1869         */
1870        public CitationCitedArtifactComponent setStatusDate(List<CitationCitedArtifactStatusDateComponent> theStatusDate) { 
1871          this.statusDate = theStatusDate;
1872          return this;
1873        }
1874
1875        public boolean hasStatusDate() { 
1876          if (this.statusDate == null)
1877            return false;
1878          for (CitationCitedArtifactStatusDateComponent item : this.statusDate)
1879            if (!item.isEmpty())
1880              return true;
1881          return false;
1882        }
1883
1884        public CitationCitedArtifactStatusDateComponent addStatusDate() { //3
1885          CitationCitedArtifactStatusDateComponent t = new CitationCitedArtifactStatusDateComponent();
1886          if (this.statusDate == null)
1887            this.statusDate = new ArrayList<CitationCitedArtifactStatusDateComponent>();
1888          this.statusDate.add(t);
1889          return t;
1890        }
1891
1892        public CitationCitedArtifactComponent addStatusDate(CitationCitedArtifactStatusDateComponent t) { //3
1893          if (t == null)
1894            return this;
1895          if (this.statusDate == null)
1896            this.statusDate = new ArrayList<CitationCitedArtifactStatusDateComponent>();
1897          this.statusDate.add(t);
1898          return this;
1899        }
1900
1901        /**
1902         * @return The first repetition of repeating field {@link #statusDate}, creating it if it does not already exist {3}
1903         */
1904        public CitationCitedArtifactStatusDateComponent getStatusDateFirstRep() { 
1905          if (getStatusDate().isEmpty()) {
1906            addStatusDate();
1907          }
1908          return getStatusDate().get(0);
1909        }
1910
1911        /**
1912         * @return {@link #title} (The title details of the article or artifact.)
1913         */
1914        public List<CitationCitedArtifactTitleComponent> getTitle() { 
1915          if (this.title == null)
1916            this.title = new ArrayList<CitationCitedArtifactTitleComponent>();
1917          return this.title;
1918        }
1919
1920        /**
1921         * @return Returns a reference to <code>this</code> for easy method chaining
1922         */
1923        public CitationCitedArtifactComponent setTitle(List<CitationCitedArtifactTitleComponent> theTitle) { 
1924          this.title = theTitle;
1925          return this;
1926        }
1927
1928        public boolean hasTitle() { 
1929          if (this.title == null)
1930            return false;
1931          for (CitationCitedArtifactTitleComponent item : this.title)
1932            if (!item.isEmpty())
1933              return true;
1934          return false;
1935        }
1936
1937        public CitationCitedArtifactTitleComponent addTitle() { //3
1938          CitationCitedArtifactTitleComponent t = new CitationCitedArtifactTitleComponent();
1939          if (this.title == null)
1940            this.title = new ArrayList<CitationCitedArtifactTitleComponent>();
1941          this.title.add(t);
1942          return t;
1943        }
1944
1945        public CitationCitedArtifactComponent addTitle(CitationCitedArtifactTitleComponent t) { //3
1946          if (t == null)
1947            return this;
1948          if (this.title == null)
1949            this.title = new ArrayList<CitationCitedArtifactTitleComponent>();
1950          this.title.add(t);
1951          return this;
1952        }
1953
1954        /**
1955         * @return The first repetition of repeating field {@link #title}, creating it if it does not already exist {3}
1956         */
1957        public CitationCitedArtifactTitleComponent getTitleFirstRep() { 
1958          if (getTitle().isEmpty()) {
1959            addTitle();
1960          }
1961          return getTitle().get(0);
1962        }
1963
1964        /**
1965         * @return {@link #abstract_} (The abstract may be used to convey article-contained abstracts, externally-created abstracts, or other descriptive summaries.)
1966         */
1967        public List<CitationCitedArtifactAbstractComponent> getAbstract() { 
1968          if (this.abstract_ == null)
1969            this.abstract_ = new ArrayList<CitationCitedArtifactAbstractComponent>();
1970          return this.abstract_;
1971        }
1972
1973        /**
1974         * @return Returns a reference to <code>this</code> for easy method chaining
1975         */
1976        public CitationCitedArtifactComponent setAbstract(List<CitationCitedArtifactAbstractComponent> theAbstract) { 
1977          this.abstract_ = theAbstract;
1978          return this;
1979        }
1980
1981        public boolean hasAbstract() { 
1982          if (this.abstract_ == null)
1983            return false;
1984          for (CitationCitedArtifactAbstractComponent item : this.abstract_)
1985            if (!item.isEmpty())
1986              return true;
1987          return false;
1988        }
1989
1990        public CitationCitedArtifactAbstractComponent addAbstract() { //3
1991          CitationCitedArtifactAbstractComponent t = new CitationCitedArtifactAbstractComponent();
1992          if (this.abstract_ == null)
1993            this.abstract_ = new ArrayList<CitationCitedArtifactAbstractComponent>();
1994          this.abstract_.add(t);
1995          return t;
1996        }
1997
1998        public CitationCitedArtifactComponent addAbstract(CitationCitedArtifactAbstractComponent t) { //3
1999          if (t == null)
2000            return this;
2001          if (this.abstract_ == null)
2002            this.abstract_ = new ArrayList<CitationCitedArtifactAbstractComponent>();
2003          this.abstract_.add(t);
2004          return this;
2005        }
2006
2007        /**
2008         * @return The first repetition of repeating field {@link #abstract_}, creating it if it does not already exist {3}
2009         */
2010        public CitationCitedArtifactAbstractComponent getAbstractFirstRep() { 
2011          if (getAbstract().isEmpty()) {
2012            addAbstract();
2013          }
2014          return getAbstract().get(0);
2015        }
2016
2017        /**
2018         * @return {@link #part} (The component of the article or artifact.)
2019         */
2020        public CitationCitedArtifactPartComponent getPart() { 
2021          if (this.part == null)
2022            if (Configuration.errorOnAutoCreate())
2023              throw new Error("Attempt to auto-create CitationCitedArtifactComponent.part");
2024            else if (Configuration.doAutoCreate())
2025              this.part = new CitationCitedArtifactPartComponent(); // cc
2026          return this.part;
2027        }
2028
2029        public boolean hasPart() { 
2030          return this.part != null && !this.part.isEmpty();
2031        }
2032
2033        /**
2034         * @param value {@link #part} (The component of the article or artifact.)
2035         */
2036        public CitationCitedArtifactComponent setPart(CitationCitedArtifactPartComponent value) { 
2037          this.part = value;
2038          return this;
2039        }
2040
2041        /**
2042         * @return {@link #relatesTo} (The artifact related to the cited artifact.)
2043         */
2044        public List<CitationCitedArtifactRelatesToComponent> getRelatesTo() { 
2045          if (this.relatesTo == null)
2046            this.relatesTo = new ArrayList<CitationCitedArtifactRelatesToComponent>();
2047          return this.relatesTo;
2048        }
2049
2050        /**
2051         * @return Returns a reference to <code>this</code> for easy method chaining
2052         */
2053        public CitationCitedArtifactComponent setRelatesTo(List<CitationCitedArtifactRelatesToComponent> theRelatesTo) { 
2054          this.relatesTo = theRelatesTo;
2055          return this;
2056        }
2057
2058        public boolean hasRelatesTo() { 
2059          if (this.relatesTo == null)
2060            return false;
2061          for (CitationCitedArtifactRelatesToComponent item : this.relatesTo)
2062            if (!item.isEmpty())
2063              return true;
2064          return false;
2065        }
2066
2067        public CitationCitedArtifactRelatesToComponent addRelatesTo() { //3
2068          CitationCitedArtifactRelatesToComponent t = new CitationCitedArtifactRelatesToComponent();
2069          if (this.relatesTo == null)
2070            this.relatesTo = new ArrayList<CitationCitedArtifactRelatesToComponent>();
2071          this.relatesTo.add(t);
2072          return t;
2073        }
2074
2075        public CitationCitedArtifactComponent addRelatesTo(CitationCitedArtifactRelatesToComponent t) { //3
2076          if (t == null)
2077            return this;
2078          if (this.relatesTo == null)
2079            this.relatesTo = new ArrayList<CitationCitedArtifactRelatesToComponent>();
2080          this.relatesTo.add(t);
2081          return this;
2082        }
2083
2084        /**
2085         * @return The first repetition of repeating field {@link #relatesTo}, creating it if it does not already exist {3}
2086         */
2087        public CitationCitedArtifactRelatesToComponent getRelatesToFirstRep() { 
2088          if (getRelatesTo().isEmpty()) {
2089            addRelatesTo();
2090          }
2091          return getRelatesTo().get(0);
2092        }
2093
2094        /**
2095         * @return {@link #publicationForm} (If multiple, used to represent alternative forms of the article that are not separate citations.)
2096         */
2097        public List<CitationCitedArtifactPublicationFormComponent> getPublicationForm() { 
2098          if (this.publicationForm == null)
2099            this.publicationForm = new ArrayList<CitationCitedArtifactPublicationFormComponent>();
2100          return this.publicationForm;
2101        }
2102
2103        /**
2104         * @return Returns a reference to <code>this</code> for easy method chaining
2105         */
2106        public CitationCitedArtifactComponent setPublicationForm(List<CitationCitedArtifactPublicationFormComponent> thePublicationForm) { 
2107          this.publicationForm = thePublicationForm;
2108          return this;
2109        }
2110
2111        public boolean hasPublicationForm() { 
2112          if (this.publicationForm == null)
2113            return false;
2114          for (CitationCitedArtifactPublicationFormComponent item : this.publicationForm)
2115            if (!item.isEmpty())
2116              return true;
2117          return false;
2118        }
2119
2120        public CitationCitedArtifactPublicationFormComponent addPublicationForm() { //3
2121          CitationCitedArtifactPublicationFormComponent t = new CitationCitedArtifactPublicationFormComponent();
2122          if (this.publicationForm == null)
2123            this.publicationForm = new ArrayList<CitationCitedArtifactPublicationFormComponent>();
2124          this.publicationForm.add(t);
2125          return t;
2126        }
2127
2128        public CitationCitedArtifactComponent addPublicationForm(CitationCitedArtifactPublicationFormComponent t) { //3
2129          if (t == null)
2130            return this;
2131          if (this.publicationForm == null)
2132            this.publicationForm = new ArrayList<CitationCitedArtifactPublicationFormComponent>();
2133          this.publicationForm.add(t);
2134          return this;
2135        }
2136
2137        /**
2138         * @return The first repetition of repeating field {@link #publicationForm}, creating it if it does not already exist {3}
2139         */
2140        public CitationCitedArtifactPublicationFormComponent getPublicationFormFirstRep() { 
2141          if (getPublicationForm().isEmpty()) {
2142            addPublicationForm();
2143          }
2144          return getPublicationForm().get(0);
2145        }
2146
2147        /**
2148         * @return {@link #webLocation} (Used for any URL for the article or artifact cited.)
2149         */
2150        public List<CitationCitedArtifactWebLocationComponent> getWebLocation() { 
2151          if (this.webLocation == null)
2152            this.webLocation = new ArrayList<CitationCitedArtifactWebLocationComponent>();
2153          return this.webLocation;
2154        }
2155
2156        /**
2157         * @return Returns a reference to <code>this</code> for easy method chaining
2158         */
2159        public CitationCitedArtifactComponent setWebLocation(List<CitationCitedArtifactWebLocationComponent> theWebLocation) { 
2160          this.webLocation = theWebLocation;
2161          return this;
2162        }
2163
2164        public boolean hasWebLocation() { 
2165          if (this.webLocation == null)
2166            return false;
2167          for (CitationCitedArtifactWebLocationComponent item : this.webLocation)
2168            if (!item.isEmpty())
2169              return true;
2170          return false;
2171        }
2172
2173        public CitationCitedArtifactWebLocationComponent addWebLocation() { //3
2174          CitationCitedArtifactWebLocationComponent t = new CitationCitedArtifactWebLocationComponent();
2175          if (this.webLocation == null)
2176            this.webLocation = new ArrayList<CitationCitedArtifactWebLocationComponent>();
2177          this.webLocation.add(t);
2178          return t;
2179        }
2180
2181        public CitationCitedArtifactComponent addWebLocation(CitationCitedArtifactWebLocationComponent t) { //3
2182          if (t == null)
2183            return this;
2184          if (this.webLocation == null)
2185            this.webLocation = new ArrayList<CitationCitedArtifactWebLocationComponent>();
2186          this.webLocation.add(t);
2187          return this;
2188        }
2189
2190        /**
2191         * @return The first repetition of repeating field {@link #webLocation}, creating it if it does not already exist {3}
2192         */
2193        public CitationCitedArtifactWebLocationComponent getWebLocationFirstRep() { 
2194          if (getWebLocation().isEmpty()) {
2195            addWebLocation();
2196          }
2197          return getWebLocation().get(0);
2198        }
2199
2200        /**
2201         * @return {@link #classification} (The assignment to an organizing scheme.)
2202         */
2203        public List<CitationCitedArtifactClassificationComponent> getClassification() { 
2204          if (this.classification == null)
2205            this.classification = new ArrayList<CitationCitedArtifactClassificationComponent>();
2206          return this.classification;
2207        }
2208
2209        /**
2210         * @return Returns a reference to <code>this</code> for easy method chaining
2211         */
2212        public CitationCitedArtifactComponent setClassification(List<CitationCitedArtifactClassificationComponent> theClassification) { 
2213          this.classification = theClassification;
2214          return this;
2215        }
2216
2217        public boolean hasClassification() { 
2218          if (this.classification == null)
2219            return false;
2220          for (CitationCitedArtifactClassificationComponent item : this.classification)
2221            if (!item.isEmpty())
2222              return true;
2223          return false;
2224        }
2225
2226        public CitationCitedArtifactClassificationComponent addClassification() { //3
2227          CitationCitedArtifactClassificationComponent t = new CitationCitedArtifactClassificationComponent();
2228          if (this.classification == null)
2229            this.classification = new ArrayList<CitationCitedArtifactClassificationComponent>();
2230          this.classification.add(t);
2231          return t;
2232        }
2233
2234        public CitationCitedArtifactComponent addClassification(CitationCitedArtifactClassificationComponent t) { //3
2235          if (t == null)
2236            return this;
2237          if (this.classification == null)
2238            this.classification = new ArrayList<CitationCitedArtifactClassificationComponent>();
2239          this.classification.add(t);
2240          return this;
2241        }
2242
2243        /**
2244         * @return The first repetition of repeating field {@link #classification}, creating it if it does not already exist {3}
2245         */
2246        public CitationCitedArtifactClassificationComponent getClassificationFirstRep() { 
2247          if (getClassification().isEmpty()) {
2248            addClassification();
2249          }
2250          return getClassification().get(0);
2251        }
2252
2253        /**
2254         * @return {@link #contributorship} (This element is used to list authors and other contributors, their contact information, specific contributions, and summary statements.)
2255         */
2256        public CitationCitedArtifactContributorshipComponent getContributorship() { 
2257          if (this.contributorship == null)
2258            if (Configuration.errorOnAutoCreate())
2259              throw new Error("Attempt to auto-create CitationCitedArtifactComponent.contributorship");
2260            else if (Configuration.doAutoCreate())
2261              this.contributorship = new CitationCitedArtifactContributorshipComponent(); // cc
2262          return this.contributorship;
2263        }
2264
2265        public boolean hasContributorship() { 
2266          return this.contributorship != null && !this.contributorship.isEmpty();
2267        }
2268
2269        /**
2270         * @param value {@link #contributorship} (This element is used to list authors and other contributors, their contact information, specific contributions, and summary statements.)
2271         */
2272        public CitationCitedArtifactComponent setContributorship(CitationCitedArtifactContributorshipComponent value) { 
2273          this.contributorship = value;
2274          return this;
2275        }
2276
2277        /**
2278         * @return {@link #note} (Any additional information or content for the article or artifact.)
2279         */
2280        public List<Annotation> getNote() { 
2281          if (this.note == null)
2282            this.note = new ArrayList<Annotation>();
2283          return this.note;
2284        }
2285
2286        /**
2287         * @return Returns a reference to <code>this</code> for easy method chaining
2288         */
2289        public CitationCitedArtifactComponent setNote(List<Annotation> theNote) { 
2290          this.note = theNote;
2291          return this;
2292        }
2293
2294        public boolean hasNote() { 
2295          if (this.note == null)
2296            return false;
2297          for (Annotation item : this.note)
2298            if (!item.isEmpty())
2299              return true;
2300          return false;
2301        }
2302
2303        public Annotation addNote() { //3
2304          Annotation t = new Annotation();
2305          if (this.note == null)
2306            this.note = new ArrayList<Annotation>();
2307          this.note.add(t);
2308          return t;
2309        }
2310
2311        public CitationCitedArtifactComponent addNote(Annotation t) { //3
2312          if (t == null)
2313            return this;
2314          if (this.note == null)
2315            this.note = new ArrayList<Annotation>();
2316          this.note.add(t);
2317          return this;
2318        }
2319
2320        /**
2321         * @return The first repetition of repeating field {@link #note}, creating it if it does not already exist {3}
2322         */
2323        public Annotation getNoteFirstRep() { 
2324          if (getNote().isEmpty()) {
2325            addNote();
2326          }
2327          return getNote().get(0);
2328        }
2329
2330        protected void listChildren(List<Property> children) {
2331          super.listChildren(children);
2332          children.add(new Property("identifier", "Identifier", "A formal identifier that is used to identify the cited artifact when it is represented in other formats, or referenced in a specification, model, design or an instance.", 0, java.lang.Integer.MAX_VALUE, identifier));
2333          children.add(new Property("relatedIdentifier", "Identifier", "A formal identifier that is used to identify things closely related to the cited artifact.", 0, java.lang.Integer.MAX_VALUE, relatedIdentifier));
2334          children.add(new Property("dateAccessed", "dateTime", "When the cited artifact was accessed.", 0, 1, dateAccessed));
2335          children.add(new Property("version", "", "The defined version of the cited artifact.", 0, 1, version));
2336          children.add(new Property("currentState", "CodeableConcept", "The status of the cited artifact.", 0, java.lang.Integer.MAX_VALUE, currentState));
2337          children.add(new Property("statusDate", "", "An effective date or period, historical or future, actual or expected, for a status of the cited artifact.", 0, java.lang.Integer.MAX_VALUE, statusDate));
2338          children.add(new Property("title", "", "The title details of the article or artifact.", 0, java.lang.Integer.MAX_VALUE, title));
2339          children.add(new Property("abstract", "", "The abstract may be used to convey article-contained abstracts, externally-created abstracts, or other descriptive summaries.", 0, java.lang.Integer.MAX_VALUE, abstract_));
2340          children.add(new Property("part", "", "The component of the article or artifact.", 0, 1, part));
2341          children.add(new Property("relatesTo", "", "The artifact related to the cited artifact.", 0, java.lang.Integer.MAX_VALUE, relatesTo));
2342          children.add(new Property("publicationForm", "", "If multiple, used to represent alternative forms of the article that are not separate citations.", 0, java.lang.Integer.MAX_VALUE, publicationForm));
2343          children.add(new Property("webLocation", "", "Used for any URL for the article or artifact cited.", 0, java.lang.Integer.MAX_VALUE, webLocation));
2344          children.add(new Property("classification", "", "The assignment to an organizing scheme.", 0, java.lang.Integer.MAX_VALUE, classification));
2345          children.add(new Property("contributorship", "", "This element is used to list authors and other contributors, their contact information, specific contributions, and summary statements.", 0, 1, contributorship));
2346          children.add(new Property("note", "Annotation", "Any additional information or content for the article or artifact.", 0, java.lang.Integer.MAX_VALUE, note));
2347        }
2348
2349        @Override
2350        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2351          switch (_hash) {
2352          case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "A formal identifier that is used to identify the cited artifact when it is represented in other formats, or referenced in a specification, model, design or an instance.", 0, java.lang.Integer.MAX_VALUE, identifier);
2353          case -1007604940: /*relatedIdentifier*/  return new Property("relatedIdentifier", "Identifier", "A formal identifier that is used to identify things closely related to the cited artifact.", 0, java.lang.Integer.MAX_VALUE, relatedIdentifier);
2354          case 540917457: /*dateAccessed*/  return new Property("dateAccessed", "dateTime", "When the cited artifact was accessed.", 0, 1, dateAccessed);
2355          case 351608024: /*version*/  return new Property("version", "", "The defined version of the cited artifact.", 0, 1, version);
2356          case 1457822360: /*currentState*/  return new Property("currentState", "CodeableConcept", "The status of the cited artifact.", 0, java.lang.Integer.MAX_VALUE, currentState);
2357          case 247524032: /*statusDate*/  return new Property("statusDate", "", "An effective date or period, historical or future, actual or expected, for a status of the cited artifact.", 0, java.lang.Integer.MAX_VALUE, statusDate);
2358          case 110371416: /*title*/  return new Property("title", "", "The title details of the article or artifact.", 0, java.lang.Integer.MAX_VALUE, title);
2359          case 1732898850: /*abstract*/  return new Property("abstract", "", "The abstract may be used to convey article-contained abstracts, externally-created abstracts, or other descriptive summaries.", 0, java.lang.Integer.MAX_VALUE, abstract_);
2360          case 3433459: /*part*/  return new Property("part", "", "The component of the article or artifact.", 0, 1, part);
2361          case -7765931: /*relatesTo*/  return new Property("relatesTo", "", "The artifact related to the cited artifact.", 0, java.lang.Integer.MAX_VALUE, relatesTo);
2362          case 1470639376: /*publicationForm*/  return new Property("publicationForm", "", "If multiple, used to represent alternative forms of the article that are not separate citations.", 0, java.lang.Integer.MAX_VALUE, publicationForm);
2363          case -828032215: /*webLocation*/  return new Property("webLocation", "", "Used for any URL for the article or artifact cited.", 0, java.lang.Integer.MAX_VALUE, webLocation);
2364          case 382350310: /*classification*/  return new Property("classification", "", "The assignment to an organizing scheme.", 0, java.lang.Integer.MAX_VALUE, classification);
2365          case 538727831: /*contributorship*/  return new Property("contributorship", "", "This element is used to list authors and other contributors, their contact information, specific contributions, and summary statements.", 0, 1, contributorship);
2366          case 3387378: /*note*/  return new Property("note", "Annotation", "Any additional information or content for the article or artifact.", 0, java.lang.Integer.MAX_VALUE, note);
2367          default: return super.getNamedProperty(_hash, _name, _checkValid);
2368          }
2369
2370        }
2371
2372      @Override
2373      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2374        switch (hash) {
2375        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
2376        case -1007604940: /*relatedIdentifier*/ return this.relatedIdentifier == null ? new Base[0] : this.relatedIdentifier.toArray(new Base[this.relatedIdentifier.size()]); // Identifier
2377        case 540917457: /*dateAccessed*/ return this.dateAccessed == null ? new Base[0] : new Base[] {this.dateAccessed}; // DateTimeType
2378        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // CitationCitedArtifactVersionComponent
2379        case 1457822360: /*currentState*/ return this.currentState == null ? new Base[0] : this.currentState.toArray(new Base[this.currentState.size()]); // CodeableConcept
2380        case 247524032: /*statusDate*/ return this.statusDate == null ? new Base[0] : this.statusDate.toArray(new Base[this.statusDate.size()]); // CitationCitedArtifactStatusDateComponent
2381        case 110371416: /*title*/ return this.title == null ? new Base[0] : this.title.toArray(new Base[this.title.size()]); // CitationCitedArtifactTitleComponent
2382        case 1732898850: /*abstract*/ return this.abstract_ == null ? new Base[0] : this.abstract_.toArray(new Base[this.abstract_.size()]); // CitationCitedArtifactAbstractComponent
2383        case 3433459: /*part*/ return this.part == null ? new Base[0] : new Base[] {this.part}; // CitationCitedArtifactPartComponent
2384        case -7765931: /*relatesTo*/ return this.relatesTo == null ? new Base[0] : this.relatesTo.toArray(new Base[this.relatesTo.size()]); // CitationCitedArtifactRelatesToComponent
2385        case 1470639376: /*publicationForm*/ return this.publicationForm == null ? new Base[0] : this.publicationForm.toArray(new Base[this.publicationForm.size()]); // CitationCitedArtifactPublicationFormComponent
2386        case -828032215: /*webLocation*/ return this.webLocation == null ? new Base[0] : this.webLocation.toArray(new Base[this.webLocation.size()]); // CitationCitedArtifactWebLocationComponent
2387        case 382350310: /*classification*/ return this.classification == null ? new Base[0] : this.classification.toArray(new Base[this.classification.size()]); // CitationCitedArtifactClassificationComponent
2388        case 538727831: /*contributorship*/ return this.contributorship == null ? new Base[0] : new Base[] {this.contributorship}; // CitationCitedArtifactContributorshipComponent
2389        case 3387378: /*note*/ return this.note == null ? new Base[0] : this.note.toArray(new Base[this.note.size()]); // Annotation
2390        default: return super.getProperty(hash, name, checkValid);
2391        }
2392
2393      }
2394
2395      @Override
2396      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2397        switch (hash) {
2398        case -1618432855: // identifier
2399          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
2400          return value;
2401        case -1007604940: // relatedIdentifier
2402          this.getRelatedIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
2403          return value;
2404        case 540917457: // dateAccessed
2405          this.dateAccessed = TypeConvertor.castToDateTime(value); // DateTimeType
2406          return value;
2407        case 351608024: // version
2408          this.version = (CitationCitedArtifactVersionComponent) value; // CitationCitedArtifactVersionComponent
2409          return value;
2410        case 1457822360: // currentState
2411          this.getCurrentState().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
2412          return value;
2413        case 247524032: // statusDate
2414          this.getStatusDate().add((CitationCitedArtifactStatusDateComponent) value); // CitationCitedArtifactStatusDateComponent
2415          return value;
2416        case 110371416: // title
2417          this.getTitle().add((CitationCitedArtifactTitleComponent) value); // CitationCitedArtifactTitleComponent
2418          return value;
2419        case 1732898850: // abstract
2420          this.getAbstract().add((CitationCitedArtifactAbstractComponent) value); // CitationCitedArtifactAbstractComponent
2421          return value;
2422        case 3433459: // part
2423          this.part = (CitationCitedArtifactPartComponent) value; // CitationCitedArtifactPartComponent
2424          return value;
2425        case -7765931: // relatesTo
2426          this.getRelatesTo().add((CitationCitedArtifactRelatesToComponent) value); // CitationCitedArtifactRelatesToComponent
2427          return value;
2428        case 1470639376: // publicationForm
2429          this.getPublicationForm().add((CitationCitedArtifactPublicationFormComponent) value); // CitationCitedArtifactPublicationFormComponent
2430          return value;
2431        case -828032215: // webLocation
2432          this.getWebLocation().add((CitationCitedArtifactWebLocationComponent) value); // CitationCitedArtifactWebLocationComponent
2433          return value;
2434        case 382350310: // classification
2435          this.getClassification().add((CitationCitedArtifactClassificationComponent) value); // CitationCitedArtifactClassificationComponent
2436          return value;
2437        case 538727831: // contributorship
2438          this.contributorship = (CitationCitedArtifactContributorshipComponent) value; // CitationCitedArtifactContributorshipComponent
2439          return value;
2440        case 3387378: // note
2441          this.getNote().add(TypeConvertor.castToAnnotation(value)); // Annotation
2442          return value;
2443        default: return super.setProperty(hash, name, value);
2444        }
2445
2446      }
2447
2448      @Override
2449      public Base setProperty(String name, Base value) throws FHIRException {
2450        if (name.equals("identifier")) {
2451          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
2452        } else if (name.equals("relatedIdentifier")) {
2453          this.getRelatedIdentifier().add(TypeConvertor.castToIdentifier(value));
2454        } else if (name.equals("dateAccessed")) {
2455          this.dateAccessed = TypeConvertor.castToDateTime(value); // DateTimeType
2456        } else if (name.equals("version")) {
2457          this.version = (CitationCitedArtifactVersionComponent) value; // CitationCitedArtifactVersionComponent
2458        } else if (name.equals("currentState")) {
2459          this.getCurrentState().add(TypeConvertor.castToCodeableConcept(value));
2460        } else if (name.equals("statusDate")) {
2461          this.getStatusDate().add((CitationCitedArtifactStatusDateComponent) value);
2462        } else if (name.equals("title")) {
2463          this.getTitle().add((CitationCitedArtifactTitleComponent) value);
2464        } else if (name.equals("abstract")) {
2465          this.getAbstract().add((CitationCitedArtifactAbstractComponent) value);
2466        } else if (name.equals("part")) {
2467          this.part = (CitationCitedArtifactPartComponent) value; // CitationCitedArtifactPartComponent
2468        } else if (name.equals("relatesTo")) {
2469          this.getRelatesTo().add((CitationCitedArtifactRelatesToComponent) value);
2470        } else if (name.equals("publicationForm")) {
2471          this.getPublicationForm().add((CitationCitedArtifactPublicationFormComponent) value);
2472        } else if (name.equals("webLocation")) {
2473          this.getWebLocation().add((CitationCitedArtifactWebLocationComponent) value);
2474        } else if (name.equals("classification")) {
2475          this.getClassification().add((CitationCitedArtifactClassificationComponent) value);
2476        } else if (name.equals("contributorship")) {
2477          this.contributorship = (CitationCitedArtifactContributorshipComponent) value; // CitationCitedArtifactContributorshipComponent
2478        } else if (name.equals("note")) {
2479          this.getNote().add(TypeConvertor.castToAnnotation(value));
2480        } else
2481          return super.setProperty(name, value);
2482        return value;
2483      }
2484
2485  @Override
2486  public void removeChild(String name, Base value) throws FHIRException {
2487        if (name.equals("identifier")) {
2488          this.getIdentifier().remove(value);
2489        } else if (name.equals("relatedIdentifier")) {
2490          this.getRelatedIdentifier().remove(value);
2491        } else if (name.equals("dateAccessed")) {
2492          this.dateAccessed = null;
2493        } else if (name.equals("version")) {
2494          this.version = (CitationCitedArtifactVersionComponent) value; // CitationCitedArtifactVersionComponent
2495        } else if (name.equals("currentState")) {
2496          this.getCurrentState().remove(value);
2497        } else if (name.equals("statusDate")) {
2498          this.getStatusDate().remove((CitationCitedArtifactStatusDateComponent) value);
2499        } else if (name.equals("title")) {
2500          this.getTitle().remove((CitationCitedArtifactTitleComponent) value);
2501        } else if (name.equals("abstract")) {
2502          this.getAbstract().remove((CitationCitedArtifactAbstractComponent) value);
2503        } else if (name.equals("part")) {
2504          this.part = (CitationCitedArtifactPartComponent) value; // CitationCitedArtifactPartComponent
2505        } else if (name.equals("relatesTo")) {
2506          this.getRelatesTo().remove((CitationCitedArtifactRelatesToComponent) value);
2507        } else if (name.equals("publicationForm")) {
2508          this.getPublicationForm().remove((CitationCitedArtifactPublicationFormComponent) value);
2509        } else if (name.equals("webLocation")) {
2510          this.getWebLocation().remove((CitationCitedArtifactWebLocationComponent) value);
2511        } else if (name.equals("classification")) {
2512          this.getClassification().remove((CitationCitedArtifactClassificationComponent) value);
2513        } else if (name.equals("contributorship")) {
2514          this.contributorship = (CitationCitedArtifactContributorshipComponent) value; // CitationCitedArtifactContributorshipComponent
2515        } else if (name.equals("note")) {
2516          this.getNote().remove(value);
2517        } else
2518          super.removeChild(name, value);
2519        
2520      }
2521
2522      @Override
2523      public Base makeProperty(int hash, String name) throws FHIRException {
2524        switch (hash) {
2525        case -1618432855:  return addIdentifier(); 
2526        case -1007604940:  return addRelatedIdentifier(); 
2527        case 540917457:  return getDateAccessedElement();
2528        case 351608024:  return getVersion();
2529        case 1457822360:  return addCurrentState(); 
2530        case 247524032:  return addStatusDate(); 
2531        case 110371416:  return addTitle(); 
2532        case 1732898850:  return addAbstract(); 
2533        case 3433459:  return getPart();
2534        case -7765931:  return addRelatesTo(); 
2535        case 1470639376:  return addPublicationForm(); 
2536        case -828032215:  return addWebLocation(); 
2537        case 382350310:  return addClassification(); 
2538        case 538727831:  return getContributorship();
2539        case 3387378:  return addNote(); 
2540        default: return super.makeProperty(hash, name);
2541        }
2542
2543      }
2544
2545      @Override
2546      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2547        switch (hash) {
2548        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
2549        case -1007604940: /*relatedIdentifier*/ return new String[] {"Identifier"};
2550        case 540917457: /*dateAccessed*/ return new String[] {"dateTime"};
2551        case 351608024: /*version*/ return new String[] {};
2552        case 1457822360: /*currentState*/ return new String[] {"CodeableConcept"};
2553        case 247524032: /*statusDate*/ return new String[] {};
2554        case 110371416: /*title*/ return new String[] {};
2555        case 1732898850: /*abstract*/ return new String[] {};
2556        case 3433459: /*part*/ return new String[] {};
2557        case -7765931: /*relatesTo*/ return new String[] {};
2558        case 1470639376: /*publicationForm*/ return new String[] {};
2559        case -828032215: /*webLocation*/ return new String[] {};
2560        case 382350310: /*classification*/ return new String[] {};
2561        case 538727831: /*contributorship*/ return new String[] {};
2562        case 3387378: /*note*/ return new String[] {"Annotation"};
2563        default: return super.getTypesForProperty(hash, name);
2564        }
2565
2566      }
2567
2568      @Override
2569      public Base addChild(String name) throws FHIRException {
2570        if (name.equals("identifier")) {
2571          return addIdentifier();
2572        }
2573        else if (name.equals("relatedIdentifier")) {
2574          return addRelatedIdentifier();
2575        }
2576        else if (name.equals("dateAccessed")) {
2577          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.dateAccessed");
2578        }
2579        else if (name.equals("version")) {
2580          this.version = new CitationCitedArtifactVersionComponent();
2581          return this.version;
2582        }
2583        else if (name.equals("currentState")) {
2584          return addCurrentState();
2585        }
2586        else if (name.equals("statusDate")) {
2587          return addStatusDate();
2588        }
2589        else if (name.equals("title")) {
2590          return addTitle();
2591        }
2592        else if (name.equals("abstract")) {
2593          return addAbstract();
2594        }
2595        else if (name.equals("part")) {
2596          this.part = new CitationCitedArtifactPartComponent();
2597          return this.part;
2598        }
2599        else if (name.equals("relatesTo")) {
2600          return addRelatesTo();
2601        }
2602        else if (name.equals("publicationForm")) {
2603          return addPublicationForm();
2604        }
2605        else if (name.equals("webLocation")) {
2606          return addWebLocation();
2607        }
2608        else if (name.equals("classification")) {
2609          return addClassification();
2610        }
2611        else if (name.equals("contributorship")) {
2612          this.contributorship = new CitationCitedArtifactContributorshipComponent();
2613          return this.contributorship;
2614        }
2615        else if (name.equals("note")) {
2616          return addNote();
2617        }
2618        else
2619          return super.addChild(name);
2620      }
2621
2622      public CitationCitedArtifactComponent copy() {
2623        CitationCitedArtifactComponent dst = new CitationCitedArtifactComponent();
2624        copyValues(dst);
2625        return dst;
2626      }
2627
2628      public void copyValues(CitationCitedArtifactComponent dst) {
2629        super.copyValues(dst);
2630        if (identifier != null) {
2631          dst.identifier = new ArrayList<Identifier>();
2632          for (Identifier i : identifier)
2633            dst.identifier.add(i.copy());
2634        };
2635        if (relatedIdentifier != null) {
2636          dst.relatedIdentifier = new ArrayList<Identifier>();
2637          for (Identifier i : relatedIdentifier)
2638            dst.relatedIdentifier.add(i.copy());
2639        };
2640        dst.dateAccessed = dateAccessed == null ? null : dateAccessed.copy();
2641        dst.version = version == null ? null : version.copy();
2642        if (currentState != null) {
2643          dst.currentState = new ArrayList<CodeableConcept>();
2644          for (CodeableConcept i : currentState)
2645            dst.currentState.add(i.copy());
2646        };
2647        if (statusDate != null) {
2648          dst.statusDate = new ArrayList<CitationCitedArtifactStatusDateComponent>();
2649          for (CitationCitedArtifactStatusDateComponent i : statusDate)
2650            dst.statusDate.add(i.copy());
2651        };
2652        if (title != null) {
2653          dst.title = new ArrayList<CitationCitedArtifactTitleComponent>();
2654          for (CitationCitedArtifactTitleComponent i : title)
2655            dst.title.add(i.copy());
2656        };
2657        if (abstract_ != null) {
2658          dst.abstract_ = new ArrayList<CitationCitedArtifactAbstractComponent>();
2659          for (CitationCitedArtifactAbstractComponent i : abstract_)
2660            dst.abstract_.add(i.copy());
2661        };
2662        dst.part = part == null ? null : part.copy();
2663        if (relatesTo != null) {
2664          dst.relatesTo = new ArrayList<CitationCitedArtifactRelatesToComponent>();
2665          for (CitationCitedArtifactRelatesToComponent i : relatesTo)
2666            dst.relatesTo.add(i.copy());
2667        };
2668        if (publicationForm != null) {
2669          dst.publicationForm = new ArrayList<CitationCitedArtifactPublicationFormComponent>();
2670          for (CitationCitedArtifactPublicationFormComponent i : publicationForm)
2671            dst.publicationForm.add(i.copy());
2672        };
2673        if (webLocation != null) {
2674          dst.webLocation = new ArrayList<CitationCitedArtifactWebLocationComponent>();
2675          for (CitationCitedArtifactWebLocationComponent i : webLocation)
2676            dst.webLocation.add(i.copy());
2677        };
2678        if (classification != null) {
2679          dst.classification = new ArrayList<CitationCitedArtifactClassificationComponent>();
2680          for (CitationCitedArtifactClassificationComponent i : classification)
2681            dst.classification.add(i.copy());
2682        };
2683        dst.contributorship = contributorship == null ? null : contributorship.copy();
2684        if (note != null) {
2685          dst.note = new ArrayList<Annotation>();
2686          for (Annotation i : note)
2687            dst.note.add(i.copy());
2688        };
2689      }
2690
2691      @Override
2692      public boolean equalsDeep(Base other_) {
2693        if (!super.equalsDeep(other_))
2694          return false;
2695        if (!(other_ instanceof CitationCitedArtifactComponent))
2696          return false;
2697        CitationCitedArtifactComponent o = (CitationCitedArtifactComponent) other_;
2698        return compareDeep(identifier, o.identifier, true) && compareDeep(relatedIdentifier, o.relatedIdentifier, true)
2699           && compareDeep(dateAccessed, o.dateAccessed, true) && compareDeep(version, o.version, true) && compareDeep(currentState, o.currentState, true)
2700           && compareDeep(statusDate, o.statusDate, true) && compareDeep(title, o.title, true) && compareDeep(abstract_, o.abstract_, true)
2701           && compareDeep(part, o.part, true) && compareDeep(relatesTo, o.relatesTo, true) && compareDeep(publicationForm, o.publicationForm, true)
2702           && compareDeep(webLocation, o.webLocation, true) && compareDeep(classification, o.classification, true)
2703           && compareDeep(contributorship, o.contributorship, true) && compareDeep(note, o.note, true);
2704      }
2705
2706      @Override
2707      public boolean equalsShallow(Base other_) {
2708        if (!super.equalsShallow(other_))
2709          return false;
2710        if (!(other_ instanceof CitationCitedArtifactComponent))
2711          return false;
2712        CitationCitedArtifactComponent o = (CitationCitedArtifactComponent) other_;
2713        return compareValues(dateAccessed, o.dateAccessed, true);
2714      }
2715
2716      public boolean isEmpty() {
2717        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, relatedIdentifier
2718          , dateAccessed, version, currentState, statusDate, title, abstract_, part, relatesTo
2719          , publicationForm, webLocation, classification, contributorship, note);
2720      }
2721
2722  public String fhirType() {
2723    return "Citation.citedArtifact";
2724
2725  }
2726
2727  }
2728
2729    @Block()
2730    public static class CitationCitedArtifactVersionComponent extends BackboneElement implements IBaseBackboneElement {
2731        /**
2732         * The version number or other version identifier.
2733         */
2734        @Child(name = "value", type = {StringType.class}, order=1, min=1, max=1, modifier=false, summary=false)
2735        @Description(shortDefinition="The version number or other version identifier", formalDefinition="The version number or other version identifier." )
2736        protected StringType value;
2737
2738        /**
2739         * Citation for the main version of the cited artifact.
2740         */
2741        @Child(name = "baseCitation", type = {Citation.class}, order=2, min=0, max=1, modifier=false, summary=false)
2742        @Description(shortDefinition="Citation for the main version of the cited artifact", formalDefinition="Citation for the main version of the cited artifact." )
2743        protected Reference baseCitation;
2744
2745        private static final long serialVersionUID = 1437090319L;
2746
2747    /**
2748     * Constructor
2749     */
2750      public CitationCitedArtifactVersionComponent() {
2751        super();
2752      }
2753
2754    /**
2755     * Constructor
2756     */
2757      public CitationCitedArtifactVersionComponent(String value) {
2758        super();
2759        this.setValue(value);
2760      }
2761
2762        /**
2763         * @return {@link #value} (The version number or other version identifier.). This is the underlying object with id, value and extensions. The accessor "getValue" gives direct access to the value
2764         */
2765        public StringType getValueElement() { 
2766          if (this.value == null)
2767            if (Configuration.errorOnAutoCreate())
2768              throw new Error("Attempt to auto-create CitationCitedArtifactVersionComponent.value");
2769            else if (Configuration.doAutoCreate())
2770              this.value = new StringType(); // bb
2771          return this.value;
2772        }
2773
2774        public boolean hasValueElement() { 
2775          return this.value != null && !this.value.isEmpty();
2776        }
2777
2778        public boolean hasValue() { 
2779          return this.value != null && !this.value.isEmpty();
2780        }
2781
2782        /**
2783         * @param value {@link #value} (The version number or other version identifier.). This is the underlying object with id, value and extensions. The accessor "getValue" gives direct access to the value
2784         */
2785        public CitationCitedArtifactVersionComponent setValueElement(StringType value) { 
2786          this.value = value;
2787          return this;
2788        }
2789
2790        /**
2791         * @return The version number or other version identifier.
2792         */
2793        public String getValue() { 
2794          return this.value == null ? null : this.value.getValue();
2795        }
2796
2797        /**
2798         * @param value The version number or other version identifier.
2799         */
2800        public CitationCitedArtifactVersionComponent setValue(String value) { 
2801            if (this.value == null)
2802              this.value = new StringType();
2803            this.value.setValue(value);
2804          return this;
2805        }
2806
2807        /**
2808         * @return {@link #baseCitation} (Citation for the main version of the cited artifact.)
2809         */
2810        public Reference getBaseCitation() { 
2811          if (this.baseCitation == null)
2812            if (Configuration.errorOnAutoCreate())
2813              throw new Error("Attempt to auto-create CitationCitedArtifactVersionComponent.baseCitation");
2814            else if (Configuration.doAutoCreate())
2815              this.baseCitation = new Reference(); // cc
2816          return this.baseCitation;
2817        }
2818
2819        public boolean hasBaseCitation() { 
2820          return this.baseCitation != null && !this.baseCitation.isEmpty();
2821        }
2822
2823        /**
2824         * @param value {@link #baseCitation} (Citation for the main version of the cited artifact.)
2825         */
2826        public CitationCitedArtifactVersionComponent setBaseCitation(Reference value) { 
2827          this.baseCitation = value;
2828          return this;
2829        }
2830
2831        protected void listChildren(List<Property> children) {
2832          super.listChildren(children);
2833          children.add(new Property("value", "string", "The version number or other version identifier.", 0, 1, value));
2834          children.add(new Property("baseCitation", "Reference(Citation)", "Citation for the main version of the cited artifact.", 0, 1, baseCitation));
2835        }
2836
2837        @Override
2838        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2839          switch (_hash) {
2840          case 111972721: /*value*/  return new Property("value", "string", "The version number or other version identifier.", 0, 1, value);
2841          case 1182995672: /*baseCitation*/  return new Property("baseCitation", "Reference(Citation)", "Citation for the main version of the cited artifact.", 0, 1, baseCitation);
2842          default: return super.getNamedProperty(_hash, _name, _checkValid);
2843          }
2844
2845        }
2846
2847      @Override
2848      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2849        switch (hash) {
2850        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // StringType
2851        case 1182995672: /*baseCitation*/ return this.baseCitation == null ? new Base[0] : new Base[] {this.baseCitation}; // Reference
2852        default: return super.getProperty(hash, name, checkValid);
2853        }
2854
2855      }
2856
2857      @Override
2858      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2859        switch (hash) {
2860        case 111972721: // value
2861          this.value = TypeConvertor.castToString(value); // StringType
2862          return value;
2863        case 1182995672: // baseCitation
2864          this.baseCitation = TypeConvertor.castToReference(value); // Reference
2865          return value;
2866        default: return super.setProperty(hash, name, value);
2867        }
2868
2869      }
2870
2871      @Override
2872      public Base setProperty(String name, Base value) throws FHIRException {
2873        if (name.equals("value")) {
2874          this.value = TypeConvertor.castToString(value); // StringType
2875        } else if (name.equals("baseCitation")) {
2876          this.baseCitation = TypeConvertor.castToReference(value); // Reference
2877        } else
2878          return super.setProperty(name, value);
2879        return value;
2880      }
2881
2882  @Override
2883  public void removeChild(String name, Base value) throws FHIRException {
2884        if (name.equals("value")) {
2885          this.value = null;
2886        } else if (name.equals("baseCitation")) {
2887          this.baseCitation = null;
2888        } else
2889          super.removeChild(name, value);
2890        
2891      }
2892
2893      @Override
2894      public Base makeProperty(int hash, String name) throws FHIRException {
2895        switch (hash) {
2896        case 111972721:  return getValueElement();
2897        case 1182995672:  return getBaseCitation();
2898        default: return super.makeProperty(hash, name);
2899        }
2900
2901      }
2902
2903      @Override
2904      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2905        switch (hash) {
2906        case 111972721: /*value*/ return new String[] {"string"};
2907        case 1182995672: /*baseCitation*/ return new String[] {"Reference"};
2908        default: return super.getTypesForProperty(hash, name);
2909        }
2910
2911      }
2912
2913      @Override
2914      public Base addChild(String name) throws FHIRException {
2915        if (name.equals("value")) {
2916          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.version.value");
2917        }
2918        else if (name.equals("baseCitation")) {
2919          this.baseCitation = new Reference();
2920          return this.baseCitation;
2921        }
2922        else
2923          return super.addChild(name);
2924      }
2925
2926      public CitationCitedArtifactVersionComponent copy() {
2927        CitationCitedArtifactVersionComponent dst = new CitationCitedArtifactVersionComponent();
2928        copyValues(dst);
2929        return dst;
2930      }
2931
2932      public void copyValues(CitationCitedArtifactVersionComponent dst) {
2933        super.copyValues(dst);
2934        dst.value = value == null ? null : value.copy();
2935        dst.baseCitation = baseCitation == null ? null : baseCitation.copy();
2936      }
2937
2938      @Override
2939      public boolean equalsDeep(Base other_) {
2940        if (!super.equalsDeep(other_))
2941          return false;
2942        if (!(other_ instanceof CitationCitedArtifactVersionComponent))
2943          return false;
2944        CitationCitedArtifactVersionComponent o = (CitationCitedArtifactVersionComponent) other_;
2945        return compareDeep(value, o.value, true) && compareDeep(baseCitation, o.baseCitation, true);
2946      }
2947
2948      @Override
2949      public boolean equalsShallow(Base other_) {
2950        if (!super.equalsShallow(other_))
2951          return false;
2952        if (!(other_ instanceof CitationCitedArtifactVersionComponent))
2953          return false;
2954        CitationCitedArtifactVersionComponent o = (CitationCitedArtifactVersionComponent) other_;
2955        return compareValues(value, o.value, true);
2956      }
2957
2958      public boolean isEmpty() {
2959        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(value, baseCitation);
2960      }
2961
2962  public String fhirType() {
2963    return "Citation.citedArtifact.version";
2964
2965  }
2966
2967  }
2968
2969    @Block()
2970    public static class CitationCitedArtifactStatusDateComponent extends BackboneElement implements IBaseBackboneElement {
2971        /**
2972         * A definition of the status associated with a date or period.
2973         */
2974        @Child(name = "activity", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
2975        @Description(shortDefinition="Classification of the status", formalDefinition="A definition of the status associated with a date or period." )
2976        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/cited-artifact-status-type")
2977        protected CodeableConcept activity;
2978
2979        /**
2980         * Either occurred or expected.
2981         */
2982        @Child(name = "actual", type = {BooleanType.class}, order=2, min=0, max=1, modifier=false, summary=false)
2983        @Description(shortDefinition="Either occurred or expected", formalDefinition="Either occurred or expected." )
2984        protected BooleanType actual;
2985
2986        /**
2987         * When the status started and/or ended.
2988         */
2989        @Child(name = "period", type = {Period.class}, order=3, min=1, max=1, modifier=false, summary=false)
2990        @Description(shortDefinition="When the status started and/or ended", formalDefinition="When the status started and/or ended." )
2991        protected Period period;
2992
2993        private static final long serialVersionUID = 1123586924L;
2994
2995    /**
2996     * Constructor
2997     */
2998      public CitationCitedArtifactStatusDateComponent() {
2999        super();
3000      }
3001
3002    /**
3003     * Constructor
3004     */
3005      public CitationCitedArtifactStatusDateComponent(CodeableConcept activity, Period period) {
3006        super();
3007        this.setActivity(activity);
3008        this.setPeriod(period);
3009      }
3010
3011        /**
3012         * @return {@link #activity} (A definition of the status associated with a date or period.)
3013         */
3014        public CodeableConcept getActivity() { 
3015          if (this.activity == null)
3016            if (Configuration.errorOnAutoCreate())
3017              throw new Error("Attempt to auto-create CitationCitedArtifactStatusDateComponent.activity");
3018            else if (Configuration.doAutoCreate())
3019              this.activity = new CodeableConcept(); // cc
3020          return this.activity;
3021        }
3022
3023        public boolean hasActivity() { 
3024          return this.activity != null && !this.activity.isEmpty();
3025        }
3026
3027        /**
3028         * @param value {@link #activity} (A definition of the status associated with a date or period.)
3029         */
3030        public CitationCitedArtifactStatusDateComponent setActivity(CodeableConcept value) { 
3031          this.activity = value;
3032          return this;
3033        }
3034
3035        /**
3036         * @return {@link #actual} (Either occurred or expected.). This is the underlying object with id, value and extensions. The accessor "getActual" gives direct access to the value
3037         */
3038        public BooleanType getActualElement() { 
3039          if (this.actual == null)
3040            if (Configuration.errorOnAutoCreate())
3041              throw new Error("Attempt to auto-create CitationCitedArtifactStatusDateComponent.actual");
3042            else if (Configuration.doAutoCreate())
3043              this.actual = new BooleanType(); // bb
3044          return this.actual;
3045        }
3046
3047        public boolean hasActualElement() { 
3048          return this.actual != null && !this.actual.isEmpty();
3049        }
3050
3051        public boolean hasActual() { 
3052          return this.actual != null && !this.actual.isEmpty();
3053        }
3054
3055        /**
3056         * @param value {@link #actual} (Either occurred or expected.). This is the underlying object with id, value and extensions. The accessor "getActual" gives direct access to the value
3057         */
3058        public CitationCitedArtifactStatusDateComponent setActualElement(BooleanType value) { 
3059          this.actual = value;
3060          return this;
3061        }
3062
3063        /**
3064         * @return Either occurred or expected.
3065         */
3066        public boolean getActual() { 
3067          return this.actual == null || this.actual.isEmpty() ? false : this.actual.getValue();
3068        }
3069
3070        /**
3071         * @param value Either occurred or expected.
3072         */
3073        public CitationCitedArtifactStatusDateComponent setActual(boolean value) { 
3074            if (this.actual == null)
3075              this.actual = new BooleanType();
3076            this.actual.setValue(value);
3077          return this;
3078        }
3079
3080        /**
3081         * @return {@link #period} (When the status started and/or ended.)
3082         */
3083        public Period getPeriod() { 
3084          if (this.period == null)
3085            if (Configuration.errorOnAutoCreate())
3086              throw new Error("Attempt to auto-create CitationCitedArtifactStatusDateComponent.period");
3087            else if (Configuration.doAutoCreate())
3088              this.period = new Period(); // cc
3089          return this.period;
3090        }
3091
3092        public boolean hasPeriod() { 
3093          return this.period != null && !this.period.isEmpty();
3094        }
3095
3096        /**
3097         * @param value {@link #period} (When the status started and/or ended.)
3098         */
3099        public CitationCitedArtifactStatusDateComponent setPeriod(Period value) { 
3100          this.period = value;
3101          return this;
3102        }
3103
3104        protected void listChildren(List<Property> children) {
3105          super.listChildren(children);
3106          children.add(new Property("activity", "CodeableConcept", "A definition of the status associated with a date or period.", 0, 1, activity));
3107          children.add(new Property("actual", "boolean", "Either occurred or expected.", 0, 1, actual));
3108          children.add(new Property("period", "Period", "When the status started and/or ended.", 0, 1, period));
3109        }
3110
3111        @Override
3112        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3113          switch (_hash) {
3114          case -1655966961: /*activity*/  return new Property("activity", "CodeableConcept", "A definition of the status associated with a date or period.", 0, 1, activity);
3115          case -1422939762: /*actual*/  return new Property("actual", "boolean", "Either occurred or expected.", 0, 1, actual);
3116          case -991726143: /*period*/  return new Property("period", "Period", "When the status started and/or ended.", 0, 1, period);
3117          default: return super.getNamedProperty(_hash, _name, _checkValid);
3118          }
3119
3120        }
3121
3122      @Override
3123      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3124        switch (hash) {
3125        case -1655966961: /*activity*/ return this.activity == null ? new Base[0] : new Base[] {this.activity}; // CodeableConcept
3126        case -1422939762: /*actual*/ return this.actual == null ? new Base[0] : new Base[] {this.actual}; // BooleanType
3127        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
3128        default: return super.getProperty(hash, name, checkValid);
3129        }
3130
3131      }
3132
3133      @Override
3134      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3135        switch (hash) {
3136        case -1655966961: // activity
3137          this.activity = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3138          return value;
3139        case -1422939762: // actual
3140          this.actual = TypeConvertor.castToBoolean(value); // BooleanType
3141          return value;
3142        case -991726143: // period
3143          this.period = TypeConvertor.castToPeriod(value); // Period
3144          return value;
3145        default: return super.setProperty(hash, name, value);
3146        }
3147
3148      }
3149
3150      @Override
3151      public Base setProperty(String name, Base value) throws FHIRException {
3152        if (name.equals("activity")) {
3153          this.activity = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3154        } else if (name.equals("actual")) {
3155          this.actual = TypeConvertor.castToBoolean(value); // BooleanType
3156        } else if (name.equals("period")) {
3157          this.period = TypeConvertor.castToPeriod(value); // Period
3158        } else
3159          return super.setProperty(name, value);
3160        return value;
3161      }
3162
3163  @Override
3164  public void removeChild(String name, Base value) throws FHIRException {
3165        if (name.equals("activity")) {
3166          this.activity = null;
3167        } else if (name.equals("actual")) {
3168          this.actual = null;
3169        } else if (name.equals("period")) {
3170          this.period = null;
3171        } else
3172          super.removeChild(name, value);
3173        
3174      }
3175
3176      @Override
3177      public Base makeProperty(int hash, String name) throws FHIRException {
3178        switch (hash) {
3179        case -1655966961:  return getActivity();
3180        case -1422939762:  return getActualElement();
3181        case -991726143:  return getPeriod();
3182        default: return super.makeProperty(hash, name);
3183        }
3184
3185      }
3186
3187      @Override
3188      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3189        switch (hash) {
3190        case -1655966961: /*activity*/ return new String[] {"CodeableConcept"};
3191        case -1422939762: /*actual*/ return new String[] {"boolean"};
3192        case -991726143: /*period*/ return new String[] {"Period"};
3193        default: return super.getTypesForProperty(hash, name);
3194        }
3195
3196      }
3197
3198      @Override
3199      public Base addChild(String name) throws FHIRException {
3200        if (name.equals("activity")) {
3201          this.activity = new CodeableConcept();
3202          return this.activity;
3203        }
3204        else if (name.equals("actual")) {
3205          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.statusDate.actual");
3206        }
3207        else if (name.equals("period")) {
3208          this.period = new Period();
3209          return this.period;
3210        }
3211        else
3212          return super.addChild(name);
3213      }
3214
3215      public CitationCitedArtifactStatusDateComponent copy() {
3216        CitationCitedArtifactStatusDateComponent dst = new CitationCitedArtifactStatusDateComponent();
3217        copyValues(dst);
3218        return dst;
3219      }
3220
3221      public void copyValues(CitationCitedArtifactStatusDateComponent dst) {
3222        super.copyValues(dst);
3223        dst.activity = activity == null ? null : activity.copy();
3224        dst.actual = actual == null ? null : actual.copy();
3225        dst.period = period == null ? null : period.copy();
3226      }
3227
3228      @Override
3229      public boolean equalsDeep(Base other_) {
3230        if (!super.equalsDeep(other_))
3231          return false;
3232        if (!(other_ instanceof CitationCitedArtifactStatusDateComponent))
3233          return false;
3234        CitationCitedArtifactStatusDateComponent o = (CitationCitedArtifactStatusDateComponent) other_;
3235        return compareDeep(activity, o.activity, true) && compareDeep(actual, o.actual, true) && compareDeep(period, o.period, true)
3236          ;
3237      }
3238
3239      @Override
3240      public boolean equalsShallow(Base other_) {
3241        if (!super.equalsShallow(other_))
3242          return false;
3243        if (!(other_ instanceof CitationCitedArtifactStatusDateComponent))
3244          return false;
3245        CitationCitedArtifactStatusDateComponent o = (CitationCitedArtifactStatusDateComponent) other_;
3246        return compareValues(actual, o.actual, true);
3247      }
3248
3249      public boolean isEmpty() {
3250        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(activity, actual, period
3251          );
3252      }
3253
3254  public String fhirType() {
3255    return "Citation.citedArtifact.statusDate";
3256
3257  }
3258
3259  }
3260
3261    @Block()
3262    public static class CitationCitedArtifactTitleComponent extends BackboneElement implements IBaseBackboneElement {
3263        /**
3264         * Used to express the reason for or classification of the title.
3265         */
3266        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3267        @Description(shortDefinition="The kind of title", formalDefinition="Used to express the reason for or classification of the title." )
3268        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/title-type")
3269        protected List<CodeableConcept> type;
3270
3271        /**
3272         * Used to express the specific language of the title.
3273         */
3274        @Child(name = "language", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
3275        @Description(shortDefinition="Used to express the specific language", formalDefinition="Used to express the specific language of the title." )
3276        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/languages")
3277        protected CodeableConcept language;
3278
3279        /**
3280         * The title of the article or artifact.
3281         */
3282        @Child(name = "text", type = {MarkdownType.class}, order=3, min=1, max=1, modifier=false, summary=false)
3283        @Description(shortDefinition="The title of the article or artifact", formalDefinition="The title of the article or artifact." )
3284        protected MarkdownType text;
3285
3286        private static final long serialVersionUID = 1526221998L;
3287
3288    /**
3289     * Constructor
3290     */
3291      public CitationCitedArtifactTitleComponent() {
3292        super();
3293      }
3294
3295    /**
3296     * Constructor
3297     */
3298      public CitationCitedArtifactTitleComponent(String text) {
3299        super();
3300        this.setText(text);
3301      }
3302
3303        /**
3304         * @return {@link #type} (Used to express the reason for or classification of the title.)
3305         */
3306        public List<CodeableConcept> getType() { 
3307          if (this.type == null)
3308            this.type = new ArrayList<CodeableConcept>();
3309          return this.type;
3310        }
3311
3312        /**
3313         * @return Returns a reference to <code>this</code> for easy method chaining
3314         */
3315        public CitationCitedArtifactTitleComponent setType(List<CodeableConcept> theType) { 
3316          this.type = theType;
3317          return this;
3318        }
3319
3320        public boolean hasType() { 
3321          if (this.type == null)
3322            return false;
3323          for (CodeableConcept item : this.type)
3324            if (!item.isEmpty())
3325              return true;
3326          return false;
3327        }
3328
3329        public CodeableConcept addType() { //3
3330          CodeableConcept t = new CodeableConcept();
3331          if (this.type == null)
3332            this.type = new ArrayList<CodeableConcept>();
3333          this.type.add(t);
3334          return t;
3335        }
3336
3337        public CitationCitedArtifactTitleComponent addType(CodeableConcept t) { //3
3338          if (t == null)
3339            return this;
3340          if (this.type == null)
3341            this.type = new ArrayList<CodeableConcept>();
3342          this.type.add(t);
3343          return this;
3344        }
3345
3346        /**
3347         * @return The first repetition of repeating field {@link #type}, creating it if it does not already exist {3}
3348         */
3349        public CodeableConcept getTypeFirstRep() { 
3350          if (getType().isEmpty()) {
3351            addType();
3352          }
3353          return getType().get(0);
3354        }
3355
3356        /**
3357         * @return {@link #language} (Used to express the specific language of the title.)
3358         */
3359        public CodeableConcept getLanguage() { 
3360          if (this.language == null)
3361            if (Configuration.errorOnAutoCreate())
3362              throw new Error("Attempt to auto-create CitationCitedArtifactTitleComponent.language");
3363            else if (Configuration.doAutoCreate())
3364              this.language = new CodeableConcept(); // cc
3365          return this.language;
3366        }
3367
3368        public boolean hasLanguage() { 
3369          return this.language != null && !this.language.isEmpty();
3370        }
3371
3372        /**
3373         * @param value {@link #language} (Used to express the specific language of the title.)
3374         */
3375        public CitationCitedArtifactTitleComponent setLanguage(CodeableConcept value) { 
3376          this.language = value;
3377          return this;
3378        }
3379
3380        /**
3381         * @return {@link #text} (The title of the article or artifact.). This is the underlying object with id, value and extensions. The accessor "getText" gives direct access to the value
3382         */
3383        public MarkdownType getTextElement() { 
3384          if (this.text == null)
3385            if (Configuration.errorOnAutoCreate())
3386              throw new Error("Attempt to auto-create CitationCitedArtifactTitleComponent.text");
3387            else if (Configuration.doAutoCreate())
3388              this.text = new MarkdownType(); // bb
3389          return this.text;
3390        }
3391
3392        public boolean hasTextElement() { 
3393          return this.text != null && !this.text.isEmpty();
3394        }
3395
3396        public boolean hasText() { 
3397          return this.text != null && !this.text.isEmpty();
3398        }
3399
3400        /**
3401         * @param value {@link #text} (The title of the article or artifact.). This is the underlying object with id, value and extensions. The accessor "getText" gives direct access to the value
3402         */
3403        public CitationCitedArtifactTitleComponent setTextElement(MarkdownType value) { 
3404          this.text = value;
3405          return this;
3406        }
3407
3408        /**
3409         * @return The title of the article or artifact.
3410         */
3411        public String getText() { 
3412          return this.text == null ? null : this.text.getValue();
3413        }
3414
3415        /**
3416         * @param value The title of the article or artifact.
3417         */
3418        public CitationCitedArtifactTitleComponent setText(String value) { 
3419            if (this.text == null)
3420              this.text = new MarkdownType();
3421            this.text.setValue(value);
3422          return this;
3423        }
3424
3425        protected void listChildren(List<Property> children) {
3426          super.listChildren(children);
3427          children.add(new Property("type", "CodeableConcept", "Used to express the reason for or classification of the title.", 0, java.lang.Integer.MAX_VALUE, type));
3428          children.add(new Property("language", "CodeableConcept", "Used to express the specific language of the title.", 0, 1, language));
3429          children.add(new Property("text", "markdown", "The title of the article or artifact.", 0, 1, text));
3430        }
3431
3432        @Override
3433        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3434          switch (_hash) {
3435          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Used to express the reason for or classification of the title.", 0, java.lang.Integer.MAX_VALUE, type);
3436          case -1613589672: /*language*/  return new Property("language", "CodeableConcept", "Used to express the specific language of the title.", 0, 1, language);
3437          case 3556653: /*text*/  return new Property("text", "markdown", "The title of the article or artifact.", 0, 1, text);
3438          default: return super.getNamedProperty(_hash, _name, _checkValid);
3439          }
3440
3441        }
3442
3443      @Override
3444      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3445        switch (hash) {
3446        case 3575610: /*type*/ return this.type == null ? new Base[0] : this.type.toArray(new Base[this.type.size()]); // CodeableConcept
3447        case -1613589672: /*language*/ return this.language == null ? new Base[0] : new Base[] {this.language}; // CodeableConcept
3448        case 3556653: /*text*/ return this.text == null ? new Base[0] : new Base[] {this.text}; // MarkdownType
3449        default: return super.getProperty(hash, name, checkValid);
3450        }
3451
3452      }
3453
3454      @Override
3455      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3456        switch (hash) {
3457        case 3575610: // type
3458          this.getType().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
3459          return value;
3460        case -1613589672: // language
3461          this.language = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3462          return value;
3463        case 3556653: // text
3464          this.text = TypeConvertor.castToMarkdown(value); // MarkdownType
3465          return value;
3466        default: return super.setProperty(hash, name, value);
3467        }
3468
3469      }
3470
3471      @Override
3472      public Base setProperty(String name, Base value) throws FHIRException {
3473        if (name.equals("type")) {
3474          this.getType().add(TypeConvertor.castToCodeableConcept(value));
3475        } else if (name.equals("language")) {
3476          this.language = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3477        } else if (name.equals("text")) {
3478          this.text = TypeConvertor.castToMarkdown(value); // MarkdownType
3479        } else
3480          return super.setProperty(name, value);
3481        return value;
3482      }
3483
3484  @Override
3485  public void removeChild(String name, Base value) throws FHIRException {
3486        if (name.equals("type")) {
3487          this.getType().remove(value);
3488        } else if (name.equals("language")) {
3489          this.language = null;
3490        } else if (name.equals("text")) {
3491          this.text = null;
3492        } else
3493          super.removeChild(name, value);
3494        
3495      }
3496
3497      @Override
3498      public Base makeProperty(int hash, String name) throws FHIRException {
3499        switch (hash) {
3500        case 3575610:  return addType(); 
3501        case -1613589672:  return getLanguage();
3502        case 3556653:  return getTextElement();
3503        default: return super.makeProperty(hash, name);
3504        }
3505
3506      }
3507
3508      @Override
3509      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3510        switch (hash) {
3511        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
3512        case -1613589672: /*language*/ return new String[] {"CodeableConcept"};
3513        case 3556653: /*text*/ return new String[] {"markdown"};
3514        default: return super.getTypesForProperty(hash, name);
3515        }
3516
3517      }
3518
3519      @Override
3520      public Base addChild(String name) throws FHIRException {
3521        if (name.equals("type")) {
3522          return addType();
3523        }
3524        else if (name.equals("language")) {
3525          this.language = new CodeableConcept();
3526          return this.language;
3527        }
3528        else if (name.equals("text")) {
3529          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.title.text");
3530        }
3531        else
3532          return super.addChild(name);
3533      }
3534
3535      public CitationCitedArtifactTitleComponent copy() {
3536        CitationCitedArtifactTitleComponent dst = new CitationCitedArtifactTitleComponent();
3537        copyValues(dst);
3538        return dst;
3539      }
3540
3541      public void copyValues(CitationCitedArtifactTitleComponent dst) {
3542        super.copyValues(dst);
3543        if (type != null) {
3544          dst.type = new ArrayList<CodeableConcept>();
3545          for (CodeableConcept i : type)
3546            dst.type.add(i.copy());
3547        };
3548        dst.language = language == null ? null : language.copy();
3549        dst.text = text == null ? null : text.copy();
3550      }
3551
3552      @Override
3553      public boolean equalsDeep(Base other_) {
3554        if (!super.equalsDeep(other_))
3555          return false;
3556        if (!(other_ instanceof CitationCitedArtifactTitleComponent))
3557          return false;
3558        CitationCitedArtifactTitleComponent o = (CitationCitedArtifactTitleComponent) other_;
3559        return compareDeep(type, o.type, true) && compareDeep(language, o.language, true) && compareDeep(text, o.text, true)
3560          ;
3561      }
3562
3563      @Override
3564      public boolean equalsShallow(Base other_) {
3565        if (!super.equalsShallow(other_))
3566          return false;
3567        if (!(other_ instanceof CitationCitedArtifactTitleComponent))
3568          return false;
3569        CitationCitedArtifactTitleComponent o = (CitationCitedArtifactTitleComponent) other_;
3570        return compareValues(text, o.text, true);
3571      }
3572
3573      public boolean isEmpty() {
3574        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, language, text);
3575      }
3576
3577  public String fhirType() {
3578    return "Citation.citedArtifact.title";
3579
3580  }
3581
3582  }
3583
3584    @Block()
3585    public static class CitationCitedArtifactAbstractComponent extends BackboneElement implements IBaseBackboneElement {
3586        /**
3587         * Used to express the reason for or classification of the abstract.
3588         */
3589        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=false)
3590        @Description(shortDefinition="The kind of abstract", formalDefinition="Used to express the reason for or classification of the abstract." )
3591        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/cited-artifact-abstract-type")
3592        protected CodeableConcept type;
3593
3594        /**
3595         * Used to express the specific language of the abstract.
3596         */
3597        @Child(name = "language", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
3598        @Description(shortDefinition="Used to express the specific language", formalDefinition="Used to express the specific language of the abstract." )
3599        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/languages")
3600        protected CodeableConcept language;
3601
3602        /**
3603         * Abstract content.
3604         */
3605        @Child(name = "text", type = {MarkdownType.class}, order=3, min=1, max=1, modifier=false, summary=false)
3606        @Description(shortDefinition="Abstract content", formalDefinition="Abstract content." )
3607        protected MarkdownType text;
3608
3609        /**
3610         * Copyright notice for the abstract.
3611         */
3612        @Child(name = "copyright", type = {MarkdownType.class}, order=4, min=0, max=1, modifier=false, summary=false)
3613        @Description(shortDefinition="Copyright notice for the abstract", formalDefinition="Copyright notice for the abstract." )
3614        protected MarkdownType copyright;
3615
3616        private static final long serialVersionUID = -1882363442L;
3617
3618    /**
3619     * Constructor
3620     */
3621      public CitationCitedArtifactAbstractComponent() {
3622        super();
3623      }
3624
3625    /**
3626     * Constructor
3627     */
3628      public CitationCitedArtifactAbstractComponent(String text) {
3629        super();
3630        this.setText(text);
3631      }
3632
3633        /**
3634         * @return {@link #type} (Used to express the reason for or classification of the abstract.)
3635         */
3636        public CodeableConcept getType() { 
3637          if (this.type == null)
3638            if (Configuration.errorOnAutoCreate())
3639              throw new Error("Attempt to auto-create CitationCitedArtifactAbstractComponent.type");
3640            else if (Configuration.doAutoCreate())
3641              this.type = new CodeableConcept(); // cc
3642          return this.type;
3643        }
3644
3645        public boolean hasType() { 
3646          return this.type != null && !this.type.isEmpty();
3647        }
3648
3649        /**
3650         * @param value {@link #type} (Used to express the reason for or classification of the abstract.)
3651         */
3652        public CitationCitedArtifactAbstractComponent setType(CodeableConcept value) { 
3653          this.type = value;
3654          return this;
3655        }
3656
3657        /**
3658         * @return {@link #language} (Used to express the specific language of the abstract.)
3659         */
3660        public CodeableConcept getLanguage() { 
3661          if (this.language == null)
3662            if (Configuration.errorOnAutoCreate())
3663              throw new Error("Attempt to auto-create CitationCitedArtifactAbstractComponent.language");
3664            else if (Configuration.doAutoCreate())
3665              this.language = new CodeableConcept(); // cc
3666          return this.language;
3667        }
3668
3669        public boolean hasLanguage() { 
3670          return this.language != null && !this.language.isEmpty();
3671        }
3672
3673        /**
3674         * @param value {@link #language} (Used to express the specific language of the abstract.)
3675         */
3676        public CitationCitedArtifactAbstractComponent setLanguage(CodeableConcept value) { 
3677          this.language = value;
3678          return this;
3679        }
3680
3681        /**
3682         * @return {@link #text} (Abstract content.). This is the underlying object with id, value and extensions. The accessor "getText" gives direct access to the value
3683         */
3684        public MarkdownType getTextElement() { 
3685          if (this.text == null)
3686            if (Configuration.errorOnAutoCreate())
3687              throw new Error("Attempt to auto-create CitationCitedArtifactAbstractComponent.text");
3688            else if (Configuration.doAutoCreate())
3689              this.text = new MarkdownType(); // bb
3690          return this.text;
3691        }
3692
3693        public boolean hasTextElement() { 
3694          return this.text != null && !this.text.isEmpty();
3695        }
3696
3697        public boolean hasText() { 
3698          return this.text != null && !this.text.isEmpty();
3699        }
3700
3701        /**
3702         * @param value {@link #text} (Abstract content.). This is the underlying object with id, value and extensions. The accessor "getText" gives direct access to the value
3703         */
3704        public CitationCitedArtifactAbstractComponent setTextElement(MarkdownType value) { 
3705          this.text = value;
3706          return this;
3707        }
3708
3709        /**
3710         * @return Abstract content.
3711         */
3712        public String getText() { 
3713          return this.text == null ? null : this.text.getValue();
3714        }
3715
3716        /**
3717         * @param value Abstract content.
3718         */
3719        public CitationCitedArtifactAbstractComponent setText(String value) { 
3720            if (this.text == null)
3721              this.text = new MarkdownType();
3722            this.text.setValue(value);
3723          return this;
3724        }
3725
3726        /**
3727         * @return {@link #copyright} (Copyright notice for the abstract.). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
3728         */
3729        public MarkdownType getCopyrightElement() { 
3730          if (this.copyright == null)
3731            if (Configuration.errorOnAutoCreate())
3732              throw new Error("Attempt to auto-create CitationCitedArtifactAbstractComponent.copyright");
3733            else if (Configuration.doAutoCreate())
3734              this.copyright = new MarkdownType(); // bb
3735          return this.copyright;
3736        }
3737
3738        public boolean hasCopyrightElement() { 
3739          return this.copyright != null && !this.copyright.isEmpty();
3740        }
3741
3742        public boolean hasCopyright() { 
3743          return this.copyright != null && !this.copyright.isEmpty();
3744        }
3745
3746        /**
3747         * @param value {@link #copyright} (Copyright notice for the abstract.). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
3748         */
3749        public CitationCitedArtifactAbstractComponent setCopyrightElement(MarkdownType value) { 
3750          this.copyright = value;
3751          return this;
3752        }
3753
3754        /**
3755         * @return Copyright notice for the abstract.
3756         */
3757        public String getCopyright() { 
3758          return this.copyright == null ? null : this.copyright.getValue();
3759        }
3760
3761        /**
3762         * @param value Copyright notice for the abstract.
3763         */
3764        public CitationCitedArtifactAbstractComponent setCopyright(String value) { 
3765          if (Utilities.noString(value))
3766            this.copyright = null;
3767          else {
3768            if (this.copyright == null)
3769              this.copyright = new MarkdownType();
3770            this.copyright.setValue(value);
3771          }
3772          return this;
3773        }
3774
3775        protected void listChildren(List<Property> children) {
3776          super.listChildren(children);
3777          children.add(new Property("type", "CodeableConcept", "Used to express the reason for or classification of the abstract.", 0, 1, type));
3778          children.add(new Property("language", "CodeableConcept", "Used to express the specific language of the abstract.", 0, 1, language));
3779          children.add(new Property("text", "markdown", "Abstract content.", 0, 1, text));
3780          children.add(new Property("copyright", "markdown", "Copyright notice for the abstract.", 0, 1, copyright));
3781        }
3782
3783        @Override
3784        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3785          switch (_hash) {
3786          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Used to express the reason for or classification of the abstract.", 0, 1, type);
3787          case -1613589672: /*language*/  return new Property("language", "CodeableConcept", "Used to express the specific language of the abstract.", 0, 1, language);
3788          case 3556653: /*text*/  return new Property("text", "markdown", "Abstract content.", 0, 1, text);
3789          case 1522889671: /*copyright*/  return new Property("copyright", "markdown", "Copyright notice for the abstract.", 0, 1, copyright);
3790          default: return super.getNamedProperty(_hash, _name, _checkValid);
3791          }
3792
3793        }
3794
3795      @Override
3796      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3797        switch (hash) {
3798        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
3799        case -1613589672: /*language*/ return this.language == null ? new Base[0] : new Base[] {this.language}; // CodeableConcept
3800        case 3556653: /*text*/ return this.text == null ? new Base[0] : new Base[] {this.text}; // MarkdownType
3801        case 1522889671: /*copyright*/ return this.copyright == null ? new Base[0] : new Base[] {this.copyright}; // MarkdownType
3802        default: return super.getProperty(hash, name, checkValid);
3803        }
3804
3805      }
3806
3807      @Override
3808      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3809        switch (hash) {
3810        case 3575610: // type
3811          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3812          return value;
3813        case -1613589672: // language
3814          this.language = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3815          return value;
3816        case 3556653: // text
3817          this.text = TypeConvertor.castToMarkdown(value); // MarkdownType
3818          return value;
3819        case 1522889671: // copyright
3820          this.copyright = TypeConvertor.castToMarkdown(value); // MarkdownType
3821          return value;
3822        default: return super.setProperty(hash, name, value);
3823        }
3824
3825      }
3826
3827      @Override
3828      public Base setProperty(String name, Base value) throws FHIRException {
3829        if (name.equals("type")) {
3830          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3831        } else if (name.equals("language")) {
3832          this.language = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3833        } else if (name.equals("text")) {
3834          this.text = TypeConvertor.castToMarkdown(value); // MarkdownType
3835        } else if (name.equals("copyright")) {
3836          this.copyright = TypeConvertor.castToMarkdown(value); // MarkdownType
3837        } else
3838          return super.setProperty(name, value);
3839        return value;
3840      }
3841
3842  @Override
3843  public void removeChild(String name, Base value) throws FHIRException {
3844        if (name.equals("type")) {
3845          this.type = null;
3846        } else if (name.equals("language")) {
3847          this.language = null;
3848        } else if (name.equals("text")) {
3849          this.text = null;
3850        } else if (name.equals("copyright")) {
3851          this.copyright = null;
3852        } else
3853          super.removeChild(name, value);
3854        
3855      }
3856
3857      @Override
3858      public Base makeProperty(int hash, String name) throws FHIRException {
3859        switch (hash) {
3860        case 3575610:  return getType();
3861        case -1613589672:  return getLanguage();
3862        case 3556653:  return getTextElement();
3863        case 1522889671:  return getCopyrightElement();
3864        default: return super.makeProperty(hash, name);
3865        }
3866
3867      }
3868
3869      @Override
3870      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3871        switch (hash) {
3872        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
3873        case -1613589672: /*language*/ return new String[] {"CodeableConcept"};
3874        case 3556653: /*text*/ return new String[] {"markdown"};
3875        case 1522889671: /*copyright*/ return new String[] {"markdown"};
3876        default: return super.getTypesForProperty(hash, name);
3877        }
3878
3879      }
3880
3881      @Override
3882      public Base addChild(String name) throws FHIRException {
3883        if (name.equals("type")) {
3884          this.type = new CodeableConcept();
3885          return this.type;
3886        }
3887        else if (name.equals("language")) {
3888          this.language = new CodeableConcept();
3889          return this.language;
3890        }
3891        else if (name.equals("text")) {
3892          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.abstract.text");
3893        }
3894        else if (name.equals("copyright")) {
3895          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.abstract.copyright");
3896        }
3897        else
3898          return super.addChild(name);
3899      }
3900
3901      public CitationCitedArtifactAbstractComponent copy() {
3902        CitationCitedArtifactAbstractComponent dst = new CitationCitedArtifactAbstractComponent();
3903        copyValues(dst);
3904        return dst;
3905      }
3906
3907      public void copyValues(CitationCitedArtifactAbstractComponent dst) {
3908        super.copyValues(dst);
3909        dst.type = type == null ? null : type.copy();
3910        dst.language = language == null ? null : language.copy();
3911        dst.text = text == null ? null : text.copy();
3912        dst.copyright = copyright == null ? null : copyright.copy();
3913      }
3914
3915      @Override
3916      public boolean equalsDeep(Base other_) {
3917        if (!super.equalsDeep(other_))
3918          return false;
3919        if (!(other_ instanceof CitationCitedArtifactAbstractComponent))
3920          return false;
3921        CitationCitedArtifactAbstractComponent o = (CitationCitedArtifactAbstractComponent) other_;
3922        return compareDeep(type, o.type, true) && compareDeep(language, o.language, true) && compareDeep(text, o.text, true)
3923           && compareDeep(copyright, o.copyright, true);
3924      }
3925
3926      @Override
3927      public boolean equalsShallow(Base other_) {
3928        if (!super.equalsShallow(other_))
3929          return false;
3930        if (!(other_ instanceof CitationCitedArtifactAbstractComponent))
3931          return false;
3932        CitationCitedArtifactAbstractComponent o = (CitationCitedArtifactAbstractComponent) other_;
3933        return compareValues(text, o.text, true) && compareValues(copyright, o.copyright, true);
3934      }
3935
3936      public boolean isEmpty() {
3937        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, language, text, copyright
3938          );
3939      }
3940
3941  public String fhirType() {
3942    return "Citation.citedArtifact.abstract";
3943
3944  }
3945
3946  }
3947
3948    @Block()
3949    public static class CitationCitedArtifactPartComponent extends BackboneElement implements IBaseBackboneElement {
3950        /**
3951         * The kind of component.
3952         */
3953        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=false)
3954        @Description(shortDefinition="The kind of component", formalDefinition="The kind of component." )
3955        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/cited-artifact-part-type")
3956        protected CodeableConcept type;
3957
3958        /**
3959         * The specification of the component.
3960         */
3961        @Child(name = "value", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
3962        @Description(shortDefinition="The specification of the component", formalDefinition="The specification of the component." )
3963        protected StringType value;
3964
3965        /**
3966         * The citation for the full article or artifact.
3967         */
3968        @Child(name = "baseCitation", type = {Citation.class}, order=3, min=0, max=1, modifier=false, summary=false)
3969        @Description(shortDefinition="The citation for the full article or artifact", formalDefinition="The citation for the full article or artifact." )
3970        protected Reference baseCitation;
3971
3972        private static final long serialVersionUID = -765350500L;
3973
3974    /**
3975     * Constructor
3976     */
3977      public CitationCitedArtifactPartComponent() {
3978        super();
3979      }
3980
3981        /**
3982         * @return {@link #type} (The kind of component.)
3983         */
3984        public CodeableConcept getType() { 
3985          if (this.type == null)
3986            if (Configuration.errorOnAutoCreate())
3987              throw new Error("Attempt to auto-create CitationCitedArtifactPartComponent.type");
3988            else if (Configuration.doAutoCreate())
3989              this.type = new CodeableConcept(); // cc
3990          return this.type;
3991        }
3992
3993        public boolean hasType() { 
3994          return this.type != null && !this.type.isEmpty();
3995        }
3996
3997        /**
3998         * @param value {@link #type} (The kind of component.)
3999         */
4000        public CitationCitedArtifactPartComponent setType(CodeableConcept value) { 
4001          this.type = value;
4002          return this;
4003        }
4004
4005        /**
4006         * @return {@link #value} (The specification of the component.). This is the underlying object with id, value and extensions. The accessor "getValue" gives direct access to the value
4007         */
4008        public StringType getValueElement() { 
4009          if (this.value == null)
4010            if (Configuration.errorOnAutoCreate())
4011              throw new Error("Attempt to auto-create CitationCitedArtifactPartComponent.value");
4012            else if (Configuration.doAutoCreate())
4013              this.value = new StringType(); // bb
4014          return this.value;
4015        }
4016
4017        public boolean hasValueElement() { 
4018          return this.value != null && !this.value.isEmpty();
4019        }
4020
4021        public boolean hasValue() { 
4022          return this.value != null && !this.value.isEmpty();
4023        }
4024
4025        /**
4026         * @param value {@link #value} (The specification of the component.). This is the underlying object with id, value and extensions. The accessor "getValue" gives direct access to the value
4027         */
4028        public CitationCitedArtifactPartComponent setValueElement(StringType value) { 
4029          this.value = value;
4030          return this;
4031        }
4032
4033        /**
4034         * @return The specification of the component.
4035         */
4036        public String getValue() { 
4037          return this.value == null ? null : this.value.getValue();
4038        }
4039
4040        /**
4041         * @param value The specification of the component.
4042         */
4043        public CitationCitedArtifactPartComponent setValue(String value) { 
4044          if (Utilities.noString(value))
4045            this.value = null;
4046          else {
4047            if (this.value == null)
4048              this.value = new StringType();
4049            this.value.setValue(value);
4050          }
4051          return this;
4052        }
4053
4054        /**
4055         * @return {@link #baseCitation} (The citation for the full article or artifact.)
4056         */
4057        public Reference getBaseCitation() { 
4058          if (this.baseCitation == null)
4059            if (Configuration.errorOnAutoCreate())
4060              throw new Error("Attempt to auto-create CitationCitedArtifactPartComponent.baseCitation");
4061            else if (Configuration.doAutoCreate())
4062              this.baseCitation = new Reference(); // cc
4063          return this.baseCitation;
4064        }
4065
4066        public boolean hasBaseCitation() { 
4067          return this.baseCitation != null && !this.baseCitation.isEmpty();
4068        }
4069
4070        /**
4071         * @param value {@link #baseCitation} (The citation for the full article or artifact.)
4072         */
4073        public CitationCitedArtifactPartComponent setBaseCitation(Reference value) { 
4074          this.baseCitation = value;
4075          return this;
4076        }
4077
4078        protected void listChildren(List<Property> children) {
4079          super.listChildren(children);
4080          children.add(new Property("type", "CodeableConcept", "The kind of component.", 0, 1, type));
4081          children.add(new Property("value", "string", "The specification of the component.", 0, 1, value));
4082          children.add(new Property("baseCitation", "Reference(Citation)", "The citation for the full article or artifact.", 0, 1, baseCitation));
4083        }
4084
4085        @Override
4086        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
4087          switch (_hash) {
4088          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "The kind of component.", 0, 1, type);
4089          case 111972721: /*value*/  return new Property("value", "string", "The specification of the component.", 0, 1, value);
4090          case 1182995672: /*baseCitation*/  return new Property("baseCitation", "Reference(Citation)", "The citation for the full article or artifact.", 0, 1, baseCitation);
4091          default: return super.getNamedProperty(_hash, _name, _checkValid);
4092          }
4093
4094        }
4095
4096      @Override
4097      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
4098        switch (hash) {
4099        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
4100        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // StringType
4101        case 1182995672: /*baseCitation*/ return this.baseCitation == null ? new Base[0] : new Base[] {this.baseCitation}; // Reference
4102        default: return super.getProperty(hash, name, checkValid);
4103        }
4104
4105      }
4106
4107      @Override
4108      public Base setProperty(int hash, String name, Base value) throws FHIRException {
4109        switch (hash) {
4110        case 3575610: // type
4111          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
4112          return value;
4113        case 111972721: // value
4114          this.value = TypeConvertor.castToString(value); // StringType
4115          return value;
4116        case 1182995672: // baseCitation
4117          this.baseCitation = TypeConvertor.castToReference(value); // Reference
4118          return value;
4119        default: return super.setProperty(hash, name, value);
4120        }
4121
4122      }
4123
4124      @Override
4125      public Base setProperty(String name, Base value) throws FHIRException {
4126        if (name.equals("type")) {
4127          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
4128        } else if (name.equals("value")) {
4129          this.value = TypeConvertor.castToString(value); // StringType
4130        } else if (name.equals("baseCitation")) {
4131          this.baseCitation = TypeConvertor.castToReference(value); // Reference
4132        } else
4133          return super.setProperty(name, value);
4134        return value;
4135      }
4136
4137  @Override
4138  public void removeChild(String name, Base value) throws FHIRException {
4139        if (name.equals("type")) {
4140          this.type = null;
4141        } else if (name.equals("value")) {
4142          this.value = null;
4143        } else if (name.equals("baseCitation")) {
4144          this.baseCitation = null;
4145        } else
4146          super.removeChild(name, value);
4147        
4148      }
4149
4150      @Override
4151      public Base makeProperty(int hash, String name) throws FHIRException {
4152        switch (hash) {
4153        case 3575610:  return getType();
4154        case 111972721:  return getValueElement();
4155        case 1182995672:  return getBaseCitation();
4156        default: return super.makeProperty(hash, name);
4157        }
4158
4159      }
4160
4161      @Override
4162      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
4163        switch (hash) {
4164        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
4165        case 111972721: /*value*/ return new String[] {"string"};
4166        case 1182995672: /*baseCitation*/ return new String[] {"Reference"};
4167        default: return super.getTypesForProperty(hash, name);
4168        }
4169
4170      }
4171
4172      @Override
4173      public Base addChild(String name) throws FHIRException {
4174        if (name.equals("type")) {
4175          this.type = new CodeableConcept();
4176          return this.type;
4177        }
4178        else if (name.equals("value")) {
4179          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.part.value");
4180        }
4181        else if (name.equals("baseCitation")) {
4182          this.baseCitation = new Reference();
4183          return this.baseCitation;
4184        }
4185        else
4186          return super.addChild(name);
4187      }
4188
4189      public CitationCitedArtifactPartComponent copy() {
4190        CitationCitedArtifactPartComponent dst = new CitationCitedArtifactPartComponent();
4191        copyValues(dst);
4192        return dst;
4193      }
4194
4195      public void copyValues(CitationCitedArtifactPartComponent dst) {
4196        super.copyValues(dst);
4197        dst.type = type == null ? null : type.copy();
4198        dst.value = value == null ? null : value.copy();
4199        dst.baseCitation = baseCitation == null ? null : baseCitation.copy();
4200      }
4201
4202      @Override
4203      public boolean equalsDeep(Base other_) {
4204        if (!super.equalsDeep(other_))
4205          return false;
4206        if (!(other_ instanceof CitationCitedArtifactPartComponent))
4207          return false;
4208        CitationCitedArtifactPartComponent o = (CitationCitedArtifactPartComponent) other_;
4209        return compareDeep(type, o.type, true) && compareDeep(value, o.value, true) && compareDeep(baseCitation, o.baseCitation, true)
4210          ;
4211      }
4212
4213      @Override
4214      public boolean equalsShallow(Base other_) {
4215        if (!super.equalsShallow(other_))
4216          return false;
4217        if (!(other_ instanceof CitationCitedArtifactPartComponent))
4218          return false;
4219        CitationCitedArtifactPartComponent o = (CitationCitedArtifactPartComponent) other_;
4220        return compareValues(value, o.value, true);
4221      }
4222
4223      public boolean isEmpty() {
4224        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, value, baseCitation
4225          );
4226      }
4227
4228  public String fhirType() {
4229    return "Citation.citedArtifact.part";
4230
4231  }
4232
4233  }
4234
4235    @Block()
4236    public static class CitationCitedArtifactRelatesToComponent extends BackboneElement implements IBaseBackboneElement {
4237        /**
4238         * The type of relationship to the related artifact.
4239         */
4240        @Child(name = "type", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=false)
4241        @Description(shortDefinition="documentation | justification | citation | predecessor | successor | derived-from | depends-on | composed-of | part-of | amends | amended-with | appends | appended-with | cites | cited-by | comments-on | comment-in | contains | contained-in | corrects | correction-in | replaces | replaced-with | retracts | retracted-by | signs | similar-to | supports | supported-with | transforms | transformed-into | transformed-with | documents | specification-of | created-with | cite-as | reprint | reprint-of", formalDefinition="The type of relationship to the related artifact." )
4242        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/related-artifact-type-all")
4243        protected Enumeration<RelatedArtifactTypeExpanded> type;
4244
4245        /**
4246         * Provides additional classifiers of the related artifact.
4247         */
4248        @Child(name = "classifier", type = {CodeableConcept.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
4249        @Description(shortDefinition="Additional classifiers", formalDefinition="Provides additional classifiers of the related artifact." )
4250        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/citation-artifact-classifier")
4251        protected List<CodeableConcept> classifier;
4252
4253        /**
4254         * A short label that can be used to reference the related artifact from elsewhere in the containing artifact, such as a footnote index.
4255         */
4256        @Child(name = "label", type = {StringType.class}, order=3, min=0, max=1, modifier=false, summary=false)
4257        @Description(shortDefinition="Short label", formalDefinition="A short label that can be used to reference the related artifact from elsewhere in the containing artifact, such as a footnote index." )
4258        protected StringType label;
4259
4260        /**
4261         * A brief description of the document or knowledge resource being referenced, suitable for display to a consumer.
4262         */
4263        @Child(name = "display", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=false)
4264        @Description(shortDefinition="Brief description of the related artifact", formalDefinition="A brief description of the document or knowledge resource being referenced, suitable for display to a consumer." )
4265        protected StringType display;
4266
4267        /**
4268         * A bibliographic citation for the related artifact. This text SHOULD be formatted according to an accepted citation format.
4269         */
4270        @Child(name = "citation", type = {MarkdownType.class}, order=5, min=0, max=1, modifier=false, summary=false)
4271        @Description(shortDefinition="Bibliographic citation for the artifact", formalDefinition="A bibliographic citation for the related artifact. This text SHOULD be formatted according to an accepted citation format." )
4272        protected MarkdownType citation;
4273
4274        /**
4275         * The document being referenced, represented as an attachment. Do not use this element if using the resource element to provide the canonical to the related artifact.
4276         */
4277        @Child(name = "document", type = {Attachment.class}, order=6, min=0, max=1, modifier=false, summary=false)
4278        @Description(shortDefinition="What document is being referenced", formalDefinition="The document being referenced, represented as an attachment. Do not use this element if using the resource element to provide the canonical to the related artifact." )
4279        protected Attachment document;
4280
4281        /**
4282         * The related artifact, such as a library, value set, profile, or other knowledge resource.
4283         */
4284        @Child(name = "resource", type = {CanonicalType.class}, order=7, min=0, max=1, modifier=false, summary=false)
4285        @Description(shortDefinition="What artifact is being referenced", formalDefinition="The related artifact, such as a library, value set, profile, or other knowledge resource." )
4286        protected CanonicalType resource;
4287
4288        /**
4289         * The related artifact, if the artifact is not a canonical resource, or a resource reference to a canonical resource.
4290         */
4291        @Child(name = "resourceReference", type = {Reference.class}, order=8, min=0, max=1, modifier=false, summary=false)
4292        @Description(shortDefinition="What artifact, if not a conformance resource", formalDefinition="The related artifact, if the artifact is not a canonical resource, or a resource reference to a canonical resource." )
4293        protected Reference resourceReference;
4294
4295        private static final long serialVersionUID = 1537406923L;
4296
4297    /**
4298     * Constructor
4299     */
4300      public CitationCitedArtifactRelatesToComponent() {
4301        super();
4302      }
4303
4304    /**
4305     * Constructor
4306     */
4307      public CitationCitedArtifactRelatesToComponent(RelatedArtifactTypeExpanded type) {
4308        super();
4309        this.setType(type);
4310      }
4311
4312        /**
4313         * @return {@link #type} (The type of relationship to the related artifact.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
4314         */
4315        public Enumeration<RelatedArtifactTypeExpanded> getTypeElement() { 
4316          if (this.type == null)
4317            if (Configuration.errorOnAutoCreate())
4318              throw new Error("Attempt to auto-create CitationCitedArtifactRelatesToComponent.type");
4319            else if (Configuration.doAutoCreate())
4320              this.type = new Enumeration<RelatedArtifactTypeExpanded>(new RelatedArtifactTypeExpandedEnumFactory()); // bb
4321          return this.type;
4322        }
4323
4324        public boolean hasTypeElement() { 
4325          return this.type != null && !this.type.isEmpty();
4326        }
4327
4328        public boolean hasType() { 
4329          return this.type != null && !this.type.isEmpty();
4330        }
4331
4332        /**
4333         * @param value {@link #type} (The type of relationship to the related artifact.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
4334         */
4335        public CitationCitedArtifactRelatesToComponent setTypeElement(Enumeration<RelatedArtifactTypeExpanded> value) { 
4336          this.type = value;
4337          return this;
4338        }
4339
4340        /**
4341         * @return The type of relationship to the related artifact.
4342         */
4343        public RelatedArtifactTypeExpanded getType() { 
4344          return this.type == null ? null : this.type.getValue();
4345        }
4346
4347        /**
4348         * @param value The type of relationship to the related artifact.
4349         */
4350        public CitationCitedArtifactRelatesToComponent setType(RelatedArtifactTypeExpanded value) { 
4351            if (this.type == null)
4352              this.type = new Enumeration<RelatedArtifactTypeExpanded>(new RelatedArtifactTypeExpandedEnumFactory());
4353            this.type.setValue(value);
4354          return this;
4355        }
4356
4357        /**
4358         * @return {@link #classifier} (Provides additional classifiers of the related artifact.)
4359         */
4360        public List<CodeableConcept> getClassifier() { 
4361          if (this.classifier == null)
4362            this.classifier = new ArrayList<CodeableConcept>();
4363          return this.classifier;
4364        }
4365
4366        /**
4367         * @return Returns a reference to <code>this</code> for easy method chaining
4368         */
4369        public CitationCitedArtifactRelatesToComponent setClassifier(List<CodeableConcept> theClassifier) { 
4370          this.classifier = theClassifier;
4371          return this;
4372        }
4373
4374        public boolean hasClassifier() { 
4375          if (this.classifier == null)
4376            return false;
4377          for (CodeableConcept item : this.classifier)
4378            if (!item.isEmpty())
4379              return true;
4380          return false;
4381        }
4382
4383        public CodeableConcept addClassifier() { //3
4384          CodeableConcept t = new CodeableConcept();
4385          if (this.classifier == null)
4386            this.classifier = new ArrayList<CodeableConcept>();
4387          this.classifier.add(t);
4388          return t;
4389        }
4390
4391        public CitationCitedArtifactRelatesToComponent addClassifier(CodeableConcept t) { //3
4392          if (t == null)
4393            return this;
4394          if (this.classifier == null)
4395            this.classifier = new ArrayList<CodeableConcept>();
4396          this.classifier.add(t);
4397          return this;
4398        }
4399
4400        /**
4401         * @return The first repetition of repeating field {@link #classifier}, creating it if it does not already exist {3}
4402         */
4403        public CodeableConcept getClassifierFirstRep() { 
4404          if (getClassifier().isEmpty()) {
4405            addClassifier();
4406          }
4407          return getClassifier().get(0);
4408        }
4409
4410        /**
4411         * @return {@link #label} (A short label that can be used to reference the related artifact from elsewhere in the containing artifact, such as a footnote index.). This is the underlying object with id, value and extensions. The accessor "getLabel" gives direct access to the value
4412         */
4413        public StringType getLabelElement() { 
4414          if (this.label == null)
4415            if (Configuration.errorOnAutoCreate())
4416              throw new Error("Attempt to auto-create CitationCitedArtifactRelatesToComponent.label");
4417            else if (Configuration.doAutoCreate())
4418              this.label = new StringType(); // bb
4419          return this.label;
4420        }
4421
4422        public boolean hasLabelElement() { 
4423          return this.label != null && !this.label.isEmpty();
4424        }
4425
4426        public boolean hasLabel() { 
4427          return this.label != null && !this.label.isEmpty();
4428        }
4429
4430        /**
4431         * @param value {@link #label} (A short label that can be used to reference the related artifact from elsewhere in the containing artifact, such as a footnote index.). This is the underlying object with id, value and extensions. The accessor "getLabel" gives direct access to the value
4432         */
4433        public CitationCitedArtifactRelatesToComponent setLabelElement(StringType value) { 
4434          this.label = value;
4435          return this;
4436        }
4437
4438        /**
4439         * @return A short label that can be used to reference the related artifact from elsewhere in the containing artifact, such as a footnote index.
4440         */
4441        public String getLabel() { 
4442          return this.label == null ? null : this.label.getValue();
4443        }
4444
4445        /**
4446         * @param value A short label that can be used to reference the related artifact from elsewhere in the containing artifact, such as a footnote index.
4447         */
4448        public CitationCitedArtifactRelatesToComponent setLabel(String value) { 
4449          if (Utilities.noString(value))
4450            this.label = null;
4451          else {
4452            if (this.label == null)
4453              this.label = new StringType();
4454            this.label.setValue(value);
4455          }
4456          return this;
4457        }
4458
4459        /**
4460         * @return {@link #display} (A brief description of the document or knowledge resource being referenced, suitable for display to a consumer.). This is the underlying object with id, value and extensions. The accessor "getDisplay" gives direct access to the value
4461         */
4462        public StringType getDisplayElement() { 
4463          if (this.display == null)
4464            if (Configuration.errorOnAutoCreate())
4465              throw new Error("Attempt to auto-create CitationCitedArtifactRelatesToComponent.display");
4466            else if (Configuration.doAutoCreate())
4467              this.display = new StringType(); // bb
4468          return this.display;
4469        }
4470
4471        public boolean hasDisplayElement() { 
4472          return this.display != null && !this.display.isEmpty();
4473        }
4474
4475        public boolean hasDisplay() { 
4476          return this.display != null && !this.display.isEmpty();
4477        }
4478
4479        /**
4480         * @param value {@link #display} (A brief description of the document or knowledge resource being referenced, suitable for display to a consumer.). This is the underlying object with id, value and extensions. The accessor "getDisplay" gives direct access to the value
4481         */
4482        public CitationCitedArtifactRelatesToComponent setDisplayElement(StringType value) { 
4483          this.display = value;
4484          return this;
4485        }
4486
4487        /**
4488         * @return A brief description of the document or knowledge resource being referenced, suitable for display to a consumer.
4489         */
4490        public String getDisplay() { 
4491          return this.display == null ? null : this.display.getValue();
4492        }
4493
4494        /**
4495         * @param value A brief description of the document or knowledge resource being referenced, suitable for display to a consumer.
4496         */
4497        public CitationCitedArtifactRelatesToComponent setDisplay(String value) { 
4498          if (Utilities.noString(value))
4499            this.display = null;
4500          else {
4501            if (this.display == null)
4502              this.display = new StringType();
4503            this.display.setValue(value);
4504          }
4505          return this;
4506        }
4507
4508        /**
4509         * @return {@link #citation} (A bibliographic citation for the related artifact. This text SHOULD be formatted according to an accepted citation format.). This is the underlying object with id, value and extensions. The accessor "getCitation" gives direct access to the value
4510         */
4511        public MarkdownType getCitationElement() { 
4512          if (this.citation == null)
4513            if (Configuration.errorOnAutoCreate())
4514              throw new Error("Attempt to auto-create CitationCitedArtifactRelatesToComponent.citation");
4515            else if (Configuration.doAutoCreate())
4516              this.citation = new MarkdownType(); // bb
4517          return this.citation;
4518        }
4519
4520        public boolean hasCitationElement() { 
4521          return this.citation != null && !this.citation.isEmpty();
4522        }
4523
4524        public boolean hasCitation() { 
4525          return this.citation != null && !this.citation.isEmpty();
4526        }
4527
4528        /**
4529         * @param value {@link #citation} (A bibliographic citation for the related artifact. This text SHOULD be formatted according to an accepted citation format.). This is the underlying object with id, value and extensions. The accessor "getCitation" gives direct access to the value
4530         */
4531        public CitationCitedArtifactRelatesToComponent setCitationElement(MarkdownType value) { 
4532          this.citation = value;
4533          return this;
4534        }
4535
4536        /**
4537         * @return A bibliographic citation for the related artifact. This text SHOULD be formatted according to an accepted citation format.
4538         */
4539        public String getCitation() { 
4540          return this.citation == null ? null : this.citation.getValue();
4541        }
4542
4543        /**
4544         * @param value A bibliographic citation for the related artifact. This text SHOULD be formatted according to an accepted citation format.
4545         */
4546        public CitationCitedArtifactRelatesToComponent setCitation(String value) { 
4547          if (Utilities.noString(value))
4548            this.citation = null;
4549          else {
4550            if (this.citation == null)
4551              this.citation = new MarkdownType();
4552            this.citation.setValue(value);
4553          }
4554          return this;
4555        }
4556
4557        /**
4558         * @return {@link #document} (The document being referenced, represented as an attachment. Do not use this element if using the resource element to provide the canonical to the related artifact.)
4559         */
4560        public Attachment getDocument() { 
4561          if (this.document == null)
4562            if (Configuration.errorOnAutoCreate())
4563              throw new Error("Attempt to auto-create CitationCitedArtifactRelatesToComponent.document");
4564            else if (Configuration.doAutoCreate())
4565              this.document = new Attachment(); // cc
4566          return this.document;
4567        }
4568
4569        public boolean hasDocument() { 
4570          return this.document != null && !this.document.isEmpty();
4571        }
4572
4573        /**
4574         * @param value {@link #document} (The document being referenced, represented as an attachment. Do not use this element if using the resource element to provide the canonical to the related artifact.)
4575         */
4576        public CitationCitedArtifactRelatesToComponent setDocument(Attachment value) { 
4577          this.document = value;
4578          return this;
4579        }
4580
4581        /**
4582         * @return {@link #resource} (The related artifact, such as a library, value set, profile, or other knowledge resource.). This is the underlying object with id, value and extensions. The accessor "getResource" gives direct access to the value
4583         */
4584        public CanonicalType getResourceElement() { 
4585          if (this.resource == null)
4586            if (Configuration.errorOnAutoCreate())
4587              throw new Error("Attempt to auto-create CitationCitedArtifactRelatesToComponent.resource");
4588            else if (Configuration.doAutoCreate())
4589              this.resource = new CanonicalType(); // bb
4590          return this.resource;
4591        }
4592
4593        public boolean hasResourceElement() { 
4594          return this.resource != null && !this.resource.isEmpty();
4595        }
4596
4597        public boolean hasResource() { 
4598          return this.resource != null && !this.resource.isEmpty();
4599        }
4600
4601        /**
4602         * @param value {@link #resource} (The related artifact, such as a library, value set, profile, or other knowledge resource.). This is the underlying object with id, value and extensions. The accessor "getResource" gives direct access to the value
4603         */
4604        public CitationCitedArtifactRelatesToComponent setResourceElement(CanonicalType value) { 
4605          this.resource = value;
4606          return this;
4607        }
4608
4609        /**
4610         * @return The related artifact, such as a library, value set, profile, or other knowledge resource.
4611         */
4612        public String getResource() { 
4613          return this.resource == null ? null : this.resource.getValue();
4614        }
4615
4616        /**
4617         * @param value The related artifact, such as a library, value set, profile, or other knowledge resource.
4618         */
4619        public CitationCitedArtifactRelatesToComponent setResource(String value) { 
4620          if (Utilities.noString(value))
4621            this.resource = null;
4622          else {
4623            if (this.resource == null)
4624              this.resource = new CanonicalType();
4625            this.resource.setValue(value);
4626          }
4627          return this;
4628        }
4629
4630        /**
4631         * @return {@link #resourceReference} (The related artifact, if the artifact is not a canonical resource, or a resource reference to a canonical resource.)
4632         */
4633        public Reference getResourceReference() { 
4634          if (this.resourceReference == null)
4635            if (Configuration.errorOnAutoCreate())
4636              throw new Error("Attempt to auto-create CitationCitedArtifactRelatesToComponent.resourceReference");
4637            else if (Configuration.doAutoCreate())
4638              this.resourceReference = new Reference(); // cc
4639          return this.resourceReference;
4640        }
4641
4642        public boolean hasResourceReference() { 
4643          return this.resourceReference != null && !this.resourceReference.isEmpty();
4644        }
4645
4646        /**
4647         * @param value {@link #resourceReference} (The related artifact, if the artifact is not a canonical resource, or a resource reference to a canonical resource.)
4648         */
4649        public CitationCitedArtifactRelatesToComponent setResourceReference(Reference value) { 
4650          this.resourceReference = value;
4651          return this;
4652        }
4653
4654        protected void listChildren(List<Property> children) {
4655          super.listChildren(children);
4656          children.add(new Property("type", "code", "The type of relationship to the related artifact.", 0, 1, type));
4657          children.add(new Property("classifier", "CodeableConcept", "Provides additional classifiers of the related artifact.", 0, java.lang.Integer.MAX_VALUE, classifier));
4658          children.add(new Property("label", "string", "A short label that can be used to reference the related artifact from elsewhere in the containing artifact, such as a footnote index.", 0, 1, label));
4659          children.add(new Property("display", "string", "A brief description of the document or knowledge resource being referenced, suitable for display to a consumer.", 0, 1, display));
4660          children.add(new Property("citation", "markdown", "A bibliographic citation for the related artifact. This text SHOULD be formatted according to an accepted citation format.", 0, 1, citation));
4661          children.add(new Property("document", "Attachment", "The document being referenced, represented as an attachment. Do not use this element if using the resource element to provide the canonical to the related artifact.", 0, 1, document));
4662          children.add(new Property("resource", "canonical", "The related artifact, such as a library, value set, profile, or other knowledge resource.", 0, 1, resource));
4663          children.add(new Property("resourceReference", "Reference", "The related artifact, if the artifact is not a canonical resource, or a resource reference to a canonical resource.", 0, 1, resourceReference));
4664        }
4665
4666        @Override
4667        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
4668          switch (_hash) {
4669          case 3575610: /*type*/  return new Property("type", "code", "The type of relationship to the related artifact.", 0, 1, type);
4670          case -281470431: /*classifier*/  return new Property("classifier", "CodeableConcept", "Provides additional classifiers of the related artifact.", 0, java.lang.Integer.MAX_VALUE, classifier);
4671          case 102727412: /*label*/  return new Property("label", "string", "A short label that can be used to reference the related artifact from elsewhere in the containing artifact, such as a footnote index.", 0, 1, label);
4672          case 1671764162: /*display*/  return new Property("display", "string", "A brief description of the document or knowledge resource being referenced, suitable for display to a consumer.", 0, 1, display);
4673          case -1442706713: /*citation*/  return new Property("citation", "markdown", "A bibliographic citation for the related artifact. This text SHOULD be formatted according to an accepted citation format.", 0, 1, citation);
4674          case 861720859: /*document*/  return new Property("document", "Attachment", "The document being referenced, represented as an attachment. Do not use this element if using the resource element to provide the canonical to the related artifact.", 0, 1, document);
4675          case -341064690: /*resource*/  return new Property("resource", "canonical", "The related artifact, such as a library, value set, profile, or other knowledge resource.", 0, 1, resource);
4676          case -610120995: /*resourceReference*/  return new Property("resourceReference", "Reference", "The related artifact, if the artifact is not a canonical resource, or a resource reference to a canonical resource.", 0, 1, resourceReference);
4677          default: return super.getNamedProperty(_hash, _name, _checkValid);
4678          }
4679
4680        }
4681
4682      @Override
4683      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
4684        switch (hash) {
4685        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // Enumeration<RelatedArtifactTypeExpanded>
4686        case -281470431: /*classifier*/ return this.classifier == null ? new Base[0] : this.classifier.toArray(new Base[this.classifier.size()]); // CodeableConcept
4687        case 102727412: /*label*/ return this.label == null ? new Base[0] : new Base[] {this.label}; // StringType
4688        case 1671764162: /*display*/ return this.display == null ? new Base[0] : new Base[] {this.display}; // StringType
4689        case -1442706713: /*citation*/ return this.citation == null ? new Base[0] : new Base[] {this.citation}; // MarkdownType
4690        case 861720859: /*document*/ return this.document == null ? new Base[0] : new Base[] {this.document}; // Attachment
4691        case -341064690: /*resource*/ return this.resource == null ? new Base[0] : new Base[] {this.resource}; // CanonicalType
4692        case -610120995: /*resourceReference*/ return this.resourceReference == null ? new Base[0] : new Base[] {this.resourceReference}; // Reference
4693        default: return super.getProperty(hash, name, checkValid);
4694        }
4695
4696      }
4697
4698      @Override
4699      public Base setProperty(int hash, String name, Base value) throws FHIRException {
4700        switch (hash) {
4701        case 3575610: // type
4702          value = new RelatedArtifactTypeExpandedEnumFactory().fromType(TypeConvertor.castToCode(value));
4703          this.type = (Enumeration) value; // Enumeration<RelatedArtifactTypeExpanded>
4704          return value;
4705        case -281470431: // classifier
4706          this.getClassifier().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
4707          return value;
4708        case 102727412: // label
4709          this.label = TypeConvertor.castToString(value); // StringType
4710          return value;
4711        case 1671764162: // display
4712          this.display = TypeConvertor.castToString(value); // StringType
4713          return value;
4714        case -1442706713: // citation
4715          this.citation = TypeConvertor.castToMarkdown(value); // MarkdownType
4716          return value;
4717        case 861720859: // document
4718          this.document = TypeConvertor.castToAttachment(value); // Attachment
4719          return value;
4720        case -341064690: // resource
4721          this.resource = TypeConvertor.castToCanonical(value); // CanonicalType
4722          return value;
4723        case -610120995: // resourceReference
4724          this.resourceReference = TypeConvertor.castToReference(value); // Reference
4725          return value;
4726        default: return super.setProperty(hash, name, value);
4727        }
4728
4729      }
4730
4731      @Override
4732      public Base setProperty(String name, Base value) throws FHIRException {
4733        if (name.equals("type")) {
4734          value = new RelatedArtifactTypeExpandedEnumFactory().fromType(TypeConvertor.castToCode(value));
4735          this.type = (Enumeration) value; // Enumeration<RelatedArtifactTypeExpanded>
4736        } else if (name.equals("classifier")) {
4737          this.getClassifier().add(TypeConvertor.castToCodeableConcept(value));
4738        } else if (name.equals("label")) {
4739          this.label = TypeConvertor.castToString(value); // StringType
4740        } else if (name.equals("display")) {
4741          this.display = TypeConvertor.castToString(value); // StringType
4742        } else if (name.equals("citation")) {
4743          this.citation = TypeConvertor.castToMarkdown(value); // MarkdownType
4744        } else if (name.equals("document")) {
4745          this.document = TypeConvertor.castToAttachment(value); // Attachment
4746        } else if (name.equals("resource")) {
4747          this.resource = TypeConvertor.castToCanonical(value); // CanonicalType
4748        } else if (name.equals("resourceReference")) {
4749          this.resourceReference = TypeConvertor.castToReference(value); // Reference
4750        } else
4751          return super.setProperty(name, value);
4752        return value;
4753      }
4754
4755  @Override
4756  public void removeChild(String name, Base value) throws FHIRException {
4757        if (name.equals("type")) {
4758          value = new RelatedArtifactTypeExpandedEnumFactory().fromType(TypeConvertor.castToCode(value));
4759          this.type = (Enumeration) value; // Enumeration<RelatedArtifactTypeExpanded>
4760        } else if (name.equals("classifier")) {
4761          this.getClassifier().remove(value);
4762        } else if (name.equals("label")) {
4763          this.label = null;
4764        } else if (name.equals("display")) {
4765          this.display = null;
4766        } else if (name.equals("citation")) {
4767          this.citation = null;
4768        } else if (name.equals("document")) {
4769          this.document = null;
4770        } else if (name.equals("resource")) {
4771          this.resource = null;
4772        } else if (name.equals("resourceReference")) {
4773          this.resourceReference = null;
4774        } else
4775          super.removeChild(name, value);
4776        
4777      }
4778
4779      @Override
4780      public Base makeProperty(int hash, String name) throws FHIRException {
4781        switch (hash) {
4782        case 3575610:  return getTypeElement();
4783        case -281470431:  return addClassifier(); 
4784        case 102727412:  return getLabelElement();
4785        case 1671764162:  return getDisplayElement();
4786        case -1442706713:  return getCitationElement();
4787        case 861720859:  return getDocument();
4788        case -341064690:  return getResourceElement();
4789        case -610120995:  return getResourceReference();
4790        default: return super.makeProperty(hash, name);
4791        }
4792
4793      }
4794
4795      @Override
4796      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
4797        switch (hash) {
4798        case 3575610: /*type*/ return new String[] {"code"};
4799        case -281470431: /*classifier*/ return new String[] {"CodeableConcept"};
4800        case 102727412: /*label*/ return new String[] {"string"};
4801        case 1671764162: /*display*/ return new String[] {"string"};
4802        case -1442706713: /*citation*/ return new String[] {"markdown"};
4803        case 861720859: /*document*/ return new String[] {"Attachment"};
4804        case -341064690: /*resource*/ return new String[] {"canonical"};
4805        case -610120995: /*resourceReference*/ return new String[] {"Reference"};
4806        default: return super.getTypesForProperty(hash, name);
4807        }
4808
4809      }
4810
4811      @Override
4812      public Base addChild(String name) throws FHIRException {
4813        if (name.equals("type")) {
4814          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.relatesTo.type");
4815        }
4816        else if (name.equals("classifier")) {
4817          return addClassifier();
4818        }
4819        else if (name.equals("label")) {
4820          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.relatesTo.label");
4821        }
4822        else if (name.equals("display")) {
4823          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.relatesTo.display");
4824        }
4825        else if (name.equals("citation")) {
4826          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.relatesTo.citation");
4827        }
4828        else if (name.equals("document")) {
4829          this.document = new Attachment();
4830          return this.document;
4831        }
4832        else if (name.equals("resource")) {
4833          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.relatesTo.resource");
4834        }
4835        else if (name.equals("resourceReference")) {
4836          this.resourceReference = new Reference();
4837          return this.resourceReference;
4838        }
4839        else
4840          return super.addChild(name);
4841      }
4842
4843      public CitationCitedArtifactRelatesToComponent copy() {
4844        CitationCitedArtifactRelatesToComponent dst = new CitationCitedArtifactRelatesToComponent();
4845        copyValues(dst);
4846        return dst;
4847      }
4848
4849      public void copyValues(CitationCitedArtifactRelatesToComponent dst) {
4850        super.copyValues(dst);
4851        dst.type = type == null ? null : type.copy();
4852        if (classifier != null) {
4853          dst.classifier = new ArrayList<CodeableConcept>();
4854          for (CodeableConcept i : classifier)
4855            dst.classifier.add(i.copy());
4856        };
4857        dst.label = label == null ? null : label.copy();
4858        dst.display = display == null ? null : display.copy();
4859        dst.citation = citation == null ? null : citation.copy();
4860        dst.document = document == null ? null : document.copy();
4861        dst.resource = resource == null ? null : resource.copy();
4862        dst.resourceReference = resourceReference == null ? null : resourceReference.copy();
4863      }
4864
4865      @Override
4866      public boolean equalsDeep(Base other_) {
4867        if (!super.equalsDeep(other_))
4868          return false;
4869        if (!(other_ instanceof CitationCitedArtifactRelatesToComponent))
4870          return false;
4871        CitationCitedArtifactRelatesToComponent o = (CitationCitedArtifactRelatesToComponent) other_;
4872        return compareDeep(type, o.type, true) && compareDeep(classifier, o.classifier, true) && compareDeep(label, o.label, true)
4873           && compareDeep(display, o.display, true) && compareDeep(citation, o.citation, true) && compareDeep(document, o.document, true)
4874           && compareDeep(resource, o.resource, true) && compareDeep(resourceReference, o.resourceReference, true)
4875          ;
4876      }
4877
4878      @Override
4879      public boolean equalsShallow(Base other_) {
4880        if (!super.equalsShallow(other_))
4881          return false;
4882        if (!(other_ instanceof CitationCitedArtifactRelatesToComponent))
4883          return false;
4884        CitationCitedArtifactRelatesToComponent o = (CitationCitedArtifactRelatesToComponent) other_;
4885        return compareValues(type, o.type, true) && compareValues(label, o.label, true) && compareValues(display, o.display, true)
4886           && compareValues(citation, o.citation, true) && compareValues(resource, o.resource, true);
4887      }
4888
4889      public boolean isEmpty() {
4890        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, classifier, label
4891          , display, citation, document, resource, resourceReference);
4892      }
4893
4894  public String fhirType() {
4895    return "Citation.citedArtifact.relatesTo";
4896
4897  }
4898
4899  }
4900
4901    @Block()
4902    public static class CitationCitedArtifactPublicationFormComponent extends BackboneElement implements IBaseBackboneElement {
4903        /**
4904         * The collection the cited article or artifact is published in.
4905         */
4906        @Child(name = "publishedIn", type = {}, order=1, min=0, max=1, modifier=false, summary=false)
4907        @Description(shortDefinition="The collection the cited article or artifact is published in", formalDefinition="The collection the cited article or artifact is published in." )
4908        protected CitationCitedArtifactPublicationFormPublishedInComponent publishedIn;
4909
4910        /**
4911         * Describes the form of the medium cited. Common codes are "Internet" or "Print". The CitedMedium value set has 6 codes. The codes internet, print, and offline-digital-storage are the common codes for a typical publication form, though internet and print are more common for study citations. Three additional codes (each appending one of the primary codes with "-without-issue" are used for situations when a study is published both within an issue (of a periodical release as commonly done for journals) AND is published separately from the issue (as commonly done with early online publication), to represent specific identification of the publication form not associated with the issue.
4912         */
4913        @Child(name = "citedMedium", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
4914        @Description(shortDefinition="Internet or Print", formalDefinition="Describes the form of the medium cited. Common codes are \"Internet\" or \"Print\". The CitedMedium value set has 6 codes. The codes internet, print, and offline-digital-storage are the common codes for a typical publication form, though internet and print are more common for study citations. Three additional codes (each appending one of the primary codes with \"-without-issue\" are used for situations when a study is published both within an issue (of a periodical release as commonly done for journals) AND is published separately from the issue (as commonly done with early online publication), to represent specific identification of the publication form not associated with the issue." )
4915        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/cited-medium")
4916        protected CodeableConcept citedMedium;
4917
4918        /**
4919         * Volume number of journal or other collection in which the article is published.
4920         */
4921        @Child(name = "volume", type = {StringType.class}, order=3, min=0, max=1, modifier=false, summary=false)
4922        @Description(shortDefinition="Volume number of journal or other collection in which the article is published", formalDefinition="Volume number of journal or other collection in which the article is published." )
4923        protected StringType volume;
4924
4925        /**
4926         * Issue, part or supplement of journal or other collection in which the article is published.
4927         */
4928        @Child(name = "issue", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=false)
4929        @Description(shortDefinition="Issue, part or supplement of journal or other collection in which the article is published", formalDefinition="Issue, part or supplement of journal or other collection in which the article is published." )
4930        protected StringType issue;
4931
4932        /**
4933         * The date the article was added to the database, or the date the article was released.
4934         */
4935        @Child(name = "articleDate", type = {DateTimeType.class}, order=5, min=0, max=1, modifier=false, summary=false)
4936        @Description(shortDefinition="The date the article was added to the database, or the date the article was released", formalDefinition="The date the article was added to the database, or the date the article was released." )
4937        protected DateTimeType articleDate;
4938
4939        /**
4940         * Text representation of the date on which the issue of the cited artifact was published.
4941         */
4942        @Child(name = "publicationDateText", type = {StringType.class}, order=6, min=0, max=1, modifier=false, summary=false)
4943        @Description(shortDefinition="Text representation of the date on which the issue of the cited artifact was published", formalDefinition="Text representation of the date on which the issue of the cited artifact was published." )
4944        protected StringType publicationDateText;
4945
4946        /**
4947         * Spring, Summer, Fall/Autumn, Winter.
4948         */
4949        @Child(name = "publicationDateSeason", type = {StringType.class}, order=7, min=0, max=1, modifier=false, summary=false)
4950        @Description(shortDefinition="Season in which the cited artifact was published", formalDefinition="Spring, Summer, Fall/Autumn, Winter." )
4951        protected StringType publicationDateSeason;
4952
4953        /**
4954         * The date the article was last revised or updated in the database.
4955         */
4956        @Child(name = "lastRevisionDate", type = {DateTimeType.class}, order=8, min=0, max=1, modifier=false, summary=false)
4957        @Description(shortDefinition="The date the article was last revised or updated in the database", formalDefinition="The date the article was last revised or updated in the database." )
4958        protected DateTimeType lastRevisionDate;
4959
4960        /**
4961         * The language or languages in which this form of the article is published.
4962         */
4963        @Child(name = "language", type = {CodeableConcept.class}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
4964        @Description(shortDefinition="Language(s) in which this form of the article is published", formalDefinition="The language or languages in which this form of the article is published." )
4965        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/languages")
4966        protected List<CodeableConcept> language;
4967
4968        /**
4969         * Entry number or identifier for inclusion in a database.
4970         */
4971        @Child(name = "accessionNumber", type = {StringType.class}, order=10, min=0, max=1, modifier=false, summary=false)
4972        @Description(shortDefinition="Entry number or identifier for inclusion in a database", formalDefinition="Entry number or identifier for inclusion in a database." )
4973        protected StringType accessionNumber;
4974
4975        /**
4976         * Used for full display of pagination.
4977         */
4978        @Child(name = "pageString", type = {StringType.class}, order=11, min=0, max=1, modifier=false, summary=false)
4979        @Description(shortDefinition="Used for full display of pagination", formalDefinition="Used for full display of pagination." )
4980        protected StringType pageString;
4981
4982        /**
4983         * Used for isolated representation of first page.
4984         */
4985        @Child(name = "firstPage", type = {StringType.class}, order=12, min=0, max=1, modifier=false, summary=false)
4986        @Description(shortDefinition="Used for isolated representation of first page", formalDefinition="Used for isolated representation of first page." )
4987        protected StringType firstPage;
4988
4989        /**
4990         * Used for isolated representation of last page.
4991         */
4992        @Child(name = "lastPage", type = {StringType.class}, order=13, min=0, max=1, modifier=false, summary=false)
4993        @Description(shortDefinition="Used for isolated representation of last page", formalDefinition="Used for isolated representation of last page." )
4994        protected StringType lastPage;
4995
4996        /**
4997         * Actual or approximate number of pages or screens. Distinct from reporting the page numbers.
4998         */
4999        @Child(name = "pageCount", type = {StringType.class}, order=14, min=0, max=1, modifier=false, summary=false)
5000        @Description(shortDefinition="Number of pages or screens", formalDefinition="Actual or approximate number of pages or screens. Distinct from reporting the page numbers." )
5001        protected StringType pageCount;
5002
5003        /**
5004         * Copyright notice for the full article or artifact.
5005         */
5006        @Child(name = "copyright", type = {MarkdownType.class}, order=15, min=0, max=1, modifier=false, summary=false)
5007        @Description(shortDefinition="Copyright notice for the full article or artifact", formalDefinition="Copyright notice for the full article or artifact." )
5008        protected MarkdownType copyright;
5009
5010        private static final long serialVersionUID = 1791622597L;
5011
5012    /**
5013     * Constructor
5014     */
5015      public CitationCitedArtifactPublicationFormComponent() {
5016        super();
5017      }
5018
5019        /**
5020         * @return {@link #publishedIn} (The collection the cited article or artifact is published in.)
5021         */
5022        public CitationCitedArtifactPublicationFormPublishedInComponent getPublishedIn() { 
5023          if (this.publishedIn == null)
5024            if (Configuration.errorOnAutoCreate())
5025              throw new Error("Attempt to auto-create CitationCitedArtifactPublicationFormComponent.publishedIn");
5026            else if (Configuration.doAutoCreate())
5027              this.publishedIn = new CitationCitedArtifactPublicationFormPublishedInComponent(); // cc
5028          return this.publishedIn;
5029        }
5030
5031        public boolean hasPublishedIn() { 
5032          return this.publishedIn != null && !this.publishedIn.isEmpty();
5033        }
5034
5035        /**
5036         * @param value {@link #publishedIn} (The collection the cited article or artifact is published in.)
5037         */
5038        public CitationCitedArtifactPublicationFormComponent setPublishedIn(CitationCitedArtifactPublicationFormPublishedInComponent value) { 
5039          this.publishedIn = value;
5040          return this;
5041        }
5042
5043        /**
5044         * @return {@link #citedMedium} (Describes the form of the medium cited. Common codes are "Internet" or "Print". The CitedMedium value set has 6 codes. The codes internet, print, and offline-digital-storage are the common codes for a typical publication form, though internet and print are more common for study citations. Three additional codes (each appending one of the primary codes with "-without-issue" are used for situations when a study is published both within an issue (of a periodical release as commonly done for journals) AND is published separately from the issue (as commonly done with early online publication), to represent specific identification of the publication form not associated with the issue.)
5045         */
5046        public CodeableConcept getCitedMedium() { 
5047          if (this.citedMedium == null)
5048            if (Configuration.errorOnAutoCreate())
5049              throw new Error("Attempt to auto-create CitationCitedArtifactPublicationFormComponent.citedMedium");
5050            else if (Configuration.doAutoCreate())
5051              this.citedMedium = new CodeableConcept(); // cc
5052          return this.citedMedium;
5053        }
5054
5055        public boolean hasCitedMedium() { 
5056          return this.citedMedium != null && !this.citedMedium.isEmpty();
5057        }
5058
5059        /**
5060         * @param value {@link #citedMedium} (Describes the form of the medium cited. Common codes are "Internet" or "Print". The CitedMedium value set has 6 codes. The codes internet, print, and offline-digital-storage are the common codes for a typical publication form, though internet and print are more common for study citations. Three additional codes (each appending one of the primary codes with "-without-issue" are used for situations when a study is published both within an issue (of a periodical release as commonly done for journals) AND is published separately from the issue (as commonly done with early online publication), to represent specific identification of the publication form not associated with the issue.)
5061         */
5062        public CitationCitedArtifactPublicationFormComponent setCitedMedium(CodeableConcept value) { 
5063          this.citedMedium = value;
5064          return this;
5065        }
5066
5067        /**
5068         * @return {@link #volume} (Volume number of journal or other collection in which the article is published.). This is the underlying object with id, value and extensions. The accessor "getVolume" gives direct access to the value
5069         */
5070        public StringType getVolumeElement() { 
5071          if (this.volume == null)
5072            if (Configuration.errorOnAutoCreate())
5073              throw new Error("Attempt to auto-create CitationCitedArtifactPublicationFormComponent.volume");
5074            else if (Configuration.doAutoCreate())
5075              this.volume = new StringType(); // bb
5076          return this.volume;
5077        }
5078
5079        public boolean hasVolumeElement() { 
5080          return this.volume != null && !this.volume.isEmpty();
5081        }
5082
5083        public boolean hasVolume() { 
5084          return this.volume != null && !this.volume.isEmpty();
5085        }
5086
5087        /**
5088         * @param value {@link #volume} (Volume number of journal or other collection in which the article is published.). This is the underlying object with id, value and extensions. The accessor "getVolume" gives direct access to the value
5089         */
5090        public CitationCitedArtifactPublicationFormComponent setVolumeElement(StringType value) { 
5091          this.volume = value;
5092          return this;
5093        }
5094
5095        /**
5096         * @return Volume number of journal or other collection in which the article is published.
5097         */
5098        public String getVolume() { 
5099          return this.volume == null ? null : this.volume.getValue();
5100        }
5101
5102        /**
5103         * @param value Volume number of journal or other collection in which the article is published.
5104         */
5105        public CitationCitedArtifactPublicationFormComponent setVolume(String value) { 
5106          if (Utilities.noString(value))
5107            this.volume = null;
5108          else {
5109            if (this.volume == null)
5110              this.volume = new StringType();
5111            this.volume.setValue(value);
5112          }
5113          return this;
5114        }
5115
5116        /**
5117         * @return {@link #issue} (Issue, part or supplement of journal or other collection in which the article is published.). This is the underlying object with id, value and extensions. The accessor "getIssue" gives direct access to the value
5118         */
5119        public StringType getIssueElement() { 
5120          if (this.issue == null)
5121            if (Configuration.errorOnAutoCreate())
5122              throw new Error("Attempt to auto-create CitationCitedArtifactPublicationFormComponent.issue");
5123            else if (Configuration.doAutoCreate())
5124              this.issue = new StringType(); // bb
5125          return this.issue;
5126        }
5127
5128        public boolean hasIssueElement() { 
5129          return this.issue != null && !this.issue.isEmpty();
5130        }
5131
5132        public boolean hasIssue() { 
5133          return this.issue != null && !this.issue.isEmpty();
5134        }
5135
5136        /**
5137         * @param value {@link #issue} (Issue, part or supplement of journal or other collection in which the article is published.). This is the underlying object with id, value and extensions. The accessor "getIssue" gives direct access to the value
5138         */
5139        public CitationCitedArtifactPublicationFormComponent setIssueElement(StringType value) { 
5140          this.issue = value;
5141          return this;
5142        }
5143
5144        /**
5145         * @return Issue, part or supplement of journal or other collection in which the article is published.
5146         */
5147        public String getIssue() { 
5148          return this.issue == null ? null : this.issue.getValue();
5149        }
5150
5151        /**
5152         * @param value Issue, part or supplement of journal or other collection in which the article is published.
5153         */
5154        public CitationCitedArtifactPublicationFormComponent setIssue(String value) { 
5155          if (Utilities.noString(value))
5156            this.issue = null;
5157          else {
5158            if (this.issue == null)
5159              this.issue = new StringType();
5160            this.issue.setValue(value);
5161          }
5162          return this;
5163        }
5164
5165        /**
5166         * @return {@link #articleDate} (The date the article was added to the database, or the date the article was released.). This is the underlying object with id, value and extensions. The accessor "getArticleDate" gives direct access to the value
5167         */
5168        public DateTimeType getArticleDateElement() { 
5169          if (this.articleDate == null)
5170            if (Configuration.errorOnAutoCreate())
5171              throw new Error("Attempt to auto-create CitationCitedArtifactPublicationFormComponent.articleDate");
5172            else if (Configuration.doAutoCreate())
5173              this.articleDate = new DateTimeType(); // bb
5174          return this.articleDate;
5175        }
5176
5177        public boolean hasArticleDateElement() { 
5178          return this.articleDate != null && !this.articleDate.isEmpty();
5179        }
5180
5181        public boolean hasArticleDate() { 
5182          return this.articleDate != null && !this.articleDate.isEmpty();
5183        }
5184
5185        /**
5186         * @param value {@link #articleDate} (The date the article was added to the database, or the date the article was released.). This is the underlying object with id, value and extensions. The accessor "getArticleDate" gives direct access to the value
5187         */
5188        public CitationCitedArtifactPublicationFormComponent setArticleDateElement(DateTimeType value) { 
5189          this.articleDate = value;
5190          return this;
5191        }
5192
5193        /**
5194         * @return The date the article was added to the database, or the date the article was released.
5195         */
5196        public Date getArticleDate() { 
5197          return this.articleDate == null ? null : this.articleDate.getValue();
5198        }
5199
5200        /**
5201         * @param value The date the article was added to the database, or the date the article was released.
5202         */
5203        public CitationCitedArtifactPublicationFormComponent setArticleDate(Date value) { 
5204          if (value == null)
5205            this.articleDate = null;
5206          else {
5207            if (this.articleDate == null)
5208              this.articleDate = new DateTimeType();
5209            this.articleDate.setValue(value);
5210          }
5211          return this;
5212        }
5213
5214        /**
5215         * @return {@link #publicationDateText} (Text representation of the date on which the issue of the cited artifact was published.). This is the underlying object with id, value and extensions. The accessor "getPublicationDateText" gives direct access to the value
5216         */
5217        public StringType getPublicationDateTextElement() { 
5218          if (this.publicationDateText == null)
5219            if (Configuration.errorOnAutoCreate())
5220              throw new Error("Attempt to auto-create CitationCitedArtifactPublicationFormComponent.publicationDateText");
5221            else if (Configuration.doAutoCreate())
5222              this.publicationDateText = new StringType(); // bb
5223          return this.publicationDateText;
5224        }
5225
5226        public boolean hasPublicationDateTextElement() { 
5227          return this.publicationDateText != null && !this.publicationDateText.isEmpty();
5228        }
5229
5230        public boolean hasPublicationDateText() { 
5231          return this.publicationDateText != null && !this.publicationDateText.isEmpty();
5232        }
5233
5234        /**
5235         * @param value {@link #publicationDateText} (Text representation of the date on which the issue of the cited artifact was published.). This is the underlying object with id, value and extensions. The accessor "getPublicationDateText" gives direct access to the value
5236         */
5237        public CitationCitedArtifactPublicationFormComponent setPublicationDateTextElement(StringType value) { 
5238          this.publicationDateText = value;
5239          return this;
5240        }
5241
5242        /**
5243         * @return Text representation of the date on which the issue of the cited artifact was published.
5244         */
5245        public String getPublicationDateText() { 
5246          return this.publicationDateText == null ? null : this.publicationDateText.getValue();
5247        }
5248
5249        /**
5250         * @param value Text representation of the date on which the issue of the cited artifact was published.
5251         */
5252        public CitationCitedArtifactPublicationFormComponent setPublicationDateText(String value) { 
5253          if (Utilities.noString(value))
5254            this.publicationDateText = null;
5255          else {
5256            if (this.publicationDateText == null)
5257              this.publicationDateText = new StringType();
5258            this.publicationDateText.setValue(value);
5259          }
5260          return this;
5261        }
5262
5263        /**
5264         * @return {@link #publicationDateSeason} (Spring, Summer, Fall/Autumn, Winter.). This is the underlying object with id, value and extensions. The accessor "getPublicationDateSeason" gives direct access to the value
5265         */
5266        public StringType getPublicationDateSeasonElement() { 
5267          if (this.publicationDateSeason == null)
5268            if (Configuration.errorOnAutoCreate())
5269              throw new Error("Attempt to auto-create CitationCitedArtifactPublicationFormComponent.publicationDateSeason");
5270            else if (Configuration.doAutoCreate())
5271              this.publicationDateSeason = new StringType(); // bb
5272          return this.publicationDateSeason;
5273        }
5274
5275        public boolean hasPublicationDateSeasonElement() { 
5276          return this.publicationDateSeason != null && !this.publicationDateSeason.isEmpty();
5277        }
5278
5279        public boolean hasPublicationDateSeason() { 
5280          return this.publicationDateSeason != null && !this.publicationDateSeason.isEmpty();
5281        }
5282
5283        /**
5284         * @param value {@link #publicationDateSeason} (Spring, Summer, Fall/Autumn, Winter.). This is the underlying object with id, value and extensions. The accessor "getPublicationDateSeason" gives direct access to the value
5285         */
5286        public CitationCitedArtifactPublicationFormComponent setPublicationDateSeasonElement(StringType value) { 
5287          this.publicationDateSeason = value;
5288          return this;
5289        }
5290
5291        /**
5292         * @return Spring, Summer, Fall/Autumn, Winter.
5293         */
5294        public String getPublicationDateSeason() { 
5295          return this.publicationDateSeason == null ? null : this.publicationDateSeason.getValue();
5296        }
5297
5298        /**
5299         * @param value Spring, Summer, Fall/Autumn, Winter.
5300         */
5301        public CitationCitedArtifactPublicationFormComponent setPublicationDateSeason(String value) { 
5302          if (Utilities.noString(value))
5303            this.publicationDateSeason = null;
5304          else {
5305            if (this.publicationDateSeason == null)
5306              this.publicationDateSeason = new StringType();
5307            this.publicationDateSeason.setValue(value);
5308          }
5309          return this;
5310        }
5311
5312        /**
5313         * @return {@link #lastRevisionDate} (The date the article was last revised or updated in the database.). This is the underlying object with id, value and extensions. The accessor "getLastRevisionDate" gives direct access to the value
5314         */
5315        public DateTimeType getLastRevisionDateElement() { 
5316          if (this.lastRevisionDate == null)
5317            if (Configuration.errorOnAutoCreate())
5318              throw new Error("Attempt to auto-create CitationCitedArtifactPublicationFormComponent.lastRevisionDate");
5319            else if (Configuration.doAutoCreate())
5320              this.lastRevisionDate = new DateTimeType(); // bb
5321          return this.lastRevisionDate;
5322        }
5323
5324        public boolean hasLastRevisionDateElement() { 
5325          return this.lastRevisionDate != null && !this.lastRevisionDate.isEmpty();
5326        }
5327
5328        public boolean hasLastRevisionDate() { 
5329          return this.lastRevisionDate != null && !this.lastRevisionDate.isEmpty();
5330        }
5331
5332        /**
5333         * @param value {@link #lastRevisionDate} (The date the article was last revised or updated in the database.). This is the underlying object with id, value and extensions. The accessor "getLastRevisionDate" gives direct access to the value
5334         */
5335        public CitationCitedArtifactPublicationFormComponent setLastRevisionDateElement(DateTimeType value) { 
5336          this.lastRevisionDate = value;
5337          return this;
5338        }
5339
5340        /**
5341         * @return The date the article was last revised or updated in the database.
5342         */
5343        public Date getLastRevisionDate() { 
5344          return this.lastRevisionDate == null ? null : this.lastRevisionDate.getValue();
5345        }
5346
5347        /**
5348         * @param value The date the article was last revised or updated in the database.
5349         */
5350        public CitationCitedArtifactPublicationFormComponent setLastRevisionDate(Date value) { 
5351          if (value == null)
5352            this.lastRevisionDate = null;
5353          else {
5354            if (this.lastRevisionDate == null)
5355              this.lastRevisionDate = new DateTimeType();
5356            this.lastRevisionDate.setValue(value);
5357          }
5358          return this;
5359        }
5360
5361        /**
5362         * @return {@link #language} (The language or languages in which this form of the article is published.)
5363         */
5364        public List<CodeableConcept> getLanguage() { 
5365          if (this.language == null)
5366            this.language = new ArrayList<CodeableConcept>();
5367          return this.language;
5368        }
5369
5370        /**
5371         * @return Returns a reference to <code>this</code> for easy method chaining
5372         */
5373        public CitationCitedArtifactPublicationFormComponent setLanguage(List<CodeableConcept> theLanguage) { 
5374          this.language = theLanguage;
5375          return this;
5376        }
5377
5378        public boolean hasLanguage() { 
5379          if (this.language == null)
5380            return false;
5381          for (CodeableConcept item : this.language)
5382            if (!item.isEmpty())
5383              return true;
5384          return false;
5385        }
5386
5387        public CodeableConcept addLanguage() { //3
5388          CodeableConcept t = new CodeableConcept();
5389          if (this.language == null)
5390            this.language = new ArrayList<CodeableConcept>();
5391          this.language.add(t);
5392          return t;
5393        }
5394
5395        public CitationCitedArtifactPublicationFormComponent addLanguage(CodeableConcept t) { //3
5396          if (t == null)
5397            return this;
5398          if (this.language == null)
5399            this.language = new ArrayList<CodeableConcept>();
5400          this.language.add(t);
5401          return this;
5402        }
5403
5404        /**
5405         * @return The first repetition of repeating field {@link #language}, creating it if it does not already exist {3}
5406         */
5407        public CodeableConcept getLanguageFirstRep() { 
5408          if (getLanguage().isEmpty()) {
5409            addLanguage();
5410          }
5411          return getLanguage().get(0);
5412        }
5413
5414        /**
5415         * @return {@link #accessionNumber} (Entry number or identifier for inclusion in a database.). This is the underlying object with id, value and extensions. The accessor "getAccessionNumber" gives direct access to the value
5416         */
5417        public StringType getAccessionNumberElement() { 
5418          if (this.accessionNumber == null)
5419            if (Configuration.errorOnAutoCreate())
5420              throw new Error("Attempt to auto-create CitationCitedArtifactPublicationFormComponent.accessionNumber");
5421            else if (Configuration.doAutoCreate())
5422              this.accessionNumber = new StringType(); // bb
5423          return this.accessionNumber;
5424        }
5425
5426        public boolean hasAccessionNumberElement() { 
5427          return this.accessionNumber != null && !this.accessionNumber.isEmpty();
5428        }
5429
5430        public boolean hasAccessionNumber() { 
5431          return this.accessionNumber != null && !this.accessionNumber.isEmpty();
5432        }
5433
5434        /**
5435         * @param value {@link #accessionNumber} (Entry number or identifier for inclusion in a database.). This is the underlying object with id, value and extensions. The accessor "getAccessionNumber" gives direct access to the value
5436         */
5437        public CitationCitedArtifactPublicationFormComponent setAccessionNumberElement(StringType value) { 
5438          this.accessionNumber = value;
5439          return this;
5440        }
5441
5442        /**
5443         * @return Entry number or identifier for inclusion in a database.
5444         */
5445        public String getAccessionNumber() { 
5446          return this.accessionNumber == null ? null : this.accessionNumber.getValue();
5447        }
5448
5449        /**
5450         * @param value Entry number or identifier for inclusion in a database.
5451         */
5452        public CitationCitedArtifactPublicationFormComponent setAccessionNumber(String value) { 
5453          if (Utilities.noString(value))
5454            this.accessionNumber = null;
5455          else {
5456            if (this.accessionNumber == null)
5457              this.accessionNumber = new StringType();
5458            this.accessionNumber.setValue(value);
5459          }
5460          return this;
5461        }
5462
5463        /**
5464         * @return {@link #pageString} (Used for full display of pagination.). This is the underlying object with id, value and extensions. The accessor "getPageString" gives direct access to the value
5465         */
5466        public StringType getPageStringElement() { 
5467          if (this.pageString == null)
5468            if (Configuration.errorOnAutoCreate())
5469              throw new Error("Attempt to auto-create CitationCitedArtifactPublicationFormComponent.pageString");
5470            else if (Configuration.doAutoCreate())
5471              this.pageString = new StringType(); // bb
5472          return this.pageString;
5473        }
5474
5475        public boolean hasPageStringElement() { 
5476          return this.pageString != null && !this.pageString.isEmpty();
5477        }
5478
5479        public boolean hasPageString() { 
5480          return this.pageString != null && !this.pageString.isEmpty();
5481        }
5482
5483        /**
5484         * @param value {@link #pageString} (Used for full display of pagination.). This is the underlying object with id, value and extensions. The accessor "getPageString" gives direct access to the value
5485         */
5486        public CitationCitedArtifactPublicationFormComponent setPageStringElement(StringType value) { 
5487          this.pageString = value;
5488          return this;
5489        }
5490
5491        /**
5492         * @return Used for full display of pagination.
5493         */
5494        public String getPageString() { 
5495          return this.pageString == null ? null : this.pageString.getValue();
5496        }
5497
5498        /**
5499         * @param value Used for full display of pagination.
5500         */
5501        public CitationCitedArtifactPublicationFormComponent setPageString(String value) { 
5502          if (Utilities.noString(value))
5503            this.pageString = null;
5504          else {
5505            if (this.pageString == null)
5506              this.pageString = new StringType();
5507            this.pageString.setValue(value);
5508          }
5509          return this;
5510        }
5511
5512        /**
5513         * @return {@link #firstPage} (Used for isolated representation of first page.). This is the underlying object with id, value and extensions. The accessor "getFirstPage" gives direct access to the value
5514         */
5515        public StringType getFirstPageElement() { 
5516          if (this.firstPage == null)
5517            if (Configuration.errorOnAutoCreate())
5518              throw new Error("Attempt to auto-create CitationCitedArtifactPublicationFormComponent.firstPage");
5519            else if (Configuration.doAutoCreate())
5520              this.firstPage = new StringType(); // bb
5521          return this.firstPage;
5522        }
5523
5524        public boolean hasFirstPageElement() { 
5525          return this.firstPage != null && !this.firstPage.isEmpty();
5526        }
5527
5528        public boolean hasFirstPage() { 
5529          return this.firstPage != null && !this.firstPage.isEmpty();
5530        }
5531
5532        /**
5533         * @param value {@link #firstPage} (Used for isolated representation of first page.). This is the underlying object with id, value and extensions. The accessor "getFirstPage" gives direct access to the value
5534         */
5535        public CitationCitedArtifactPublicationFormComponent setFirstPageElement(StringType value) { 
5536          this.firstPage = value;
5537          return this;
5538        }
5539
5540        /**
5541         * @return Used for isolated representation of first page.
5542         */
5543        public String getFirstPage() { 
5544          return this.firstPage == null ? null : this.firstPage.getValue();
5545        }
5546
5547        /**
5548         * @param value Used for isolated representation of first page.
5549         */
5550        public CitationCitedArtifactPublicationFormComponent setFirstPage(String value) { 
5551          if (Utilities.noString(value))
5552            this.firstPage = null;
5553          else {
5554            if (this.firstPage == null)
5555              this.firstPage = new StringType();
5556            this.firstPage.setValue(value);
5557          }
5558          return this;
5559        }
5560
5561        /**
5562         * @return {@link #lastPage} (Used for isolated representation of last page.). This is the underlying object with id, value and extensions. The accessor "getLastPage" gives direct access to the value
5563         */
5564        public StringType getLastPageElement() { 
5565          if (this.lastPage == null)
5566            if (Configuration.errorOnAutoCreate())
5567              throw new Error("Attempt to auto-create CitationCitedArtifactPublicationFormComponent.lastPage");
5568            else if (Configuration.doAutoCreate())
5569              this.lastPage = new StringType(); // bb
5570          return this.lastPage;
5571        }
5572
5573        public boolean hasLastPageElement() { 
5574          return this.lastPage != null && !this.lastPage.isEmpty();
5575        }
5576
5577        public boolean hasLastPage() { 
5578          return this.lastPage != null && !this.lastPage.isEmpty();
5579        }
5580
5581        /**
5582         * @param value {@link #lastPage} (Used for isolated representation of last page.). This is the underlying object with id, value and extensions. The accessor "getLastPage" gives direct access to the value
5583         */
5584        public CitationCitedArtifactPublicationFormComponent setLastPageElement(StringType value) { 
5585          this.lastPage = value;
5586          return this;
5587        }
5588
5589        /**
5590         * @return Used for isolated representation of last page.
5591         */
5592        public String getLastPage() { 
5593          return this.lastPage == null ? null : this.lastPage.getValue();
5594        }
5595
5596        /**
5597         * @param value Used for isolated representation of last page.
5598         */
5599        public CitationCitedArtifactPublicationFormComponent setLastPage(String value) { 
5600          if (Utilities.noString(value))
5601            this.lastPage = null;
5602          else {
5603            if (this.lastPage == null)
5604              this.lastPage = new StringType();
5605            this.lastPage.setValue(value);
5606          }
5607          return this;
5608        }
5609
5610        /**
5611         * @return {@link #pageCount} (Actual or approximate number of pages or screens. Distinct from reporting the page numbers.). This is the underlying object with id, value and extensions. The accessor "getPageCount" gives direct access to the value
5612         */
5613        public StringType getPageCountElement() { 
5614          if (this.pageCount == null)
5615            if (Configuration.errorOnAutoCreate())
5616              throw new Error("Attempt to auto-create CitationCitedArtifactPublicationFormComponent.pageCount");
5617            else if (Configuration.doAutoCreate())
5618              this.pageCount = new StringType(); // bb
5619          return this.pageCount;
5620        }
5621
5622        public boolean hasPageCountElement() { 
5623          return this.pageCount != null && !this.pageCount.isEmpty();
5624        }
5625
5626        public boolean hasPageCount() { 
5627          return this.pageCount != null && !this.pageCount.isEmpty();
5628        }
5629
5630        /**
5631         * @param value {@link #pageCount} (Actual or approximate number of pages or screens. Distinct from reporting the page numbers.). This is the underlying object with id, value and extensions. The accessor "getPageCount" gives direct access to the value
5632         */
5633        public CitationCitedArtifactPublicationFormComponent setPageCountElement(StringType value) { 
5634          this.pageCount = value;
5635          return this;
5636        }
5637
5638        /**
5639         * @return Actual or approximate number of pages or screens. Distinct from reporting the page numbers.
5640         */
5641        public String getPageCount() { 
5642          return this.pageCount == null ? null : this.pageCount.getValue();
5643        }
5644
5645        /**
5646         * @param value Actual or approximate number of pages or screens. Distinct from reporting the page numbers.
5647         */
5648        public CitationCitedArtifactPublicationFormComponent setPageCount(String value) { 
5649          if (Utilities.noString(value))
5650            this.pageCount = null;
5651          else {
5652            if (this.pageCount == null)
5653              this.pageCount = new StringType();
5654            this.pageCount.setValue(value);
5655          }
5656          return this;
5657        }
5658
5659        /**
5660         * @return {@link #copyright} (Copyright notice for the full article or artifact.). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
5661         */
5662        public MarkdownType getCopyrightElement() { 
5663          if (this.copyright == null)
5664            if (Configuration.errorOnAutoCreate())
5665              throw new Error("Attempt to auto-create CitationCitedArtifactPublicationFormComponent.copyright");
5666            else if (Configuration.doAutoCreate())
5667              this.copyright = new MarkdownType(); // bb
5668          return this.copyright;
5669        }
5670
5671        public boolean hasCopyrightElement() { 
5672          return this.copyright != null && !this.copyright.isEmpty();
5673        }
5674
5675        public boolean hasCopyright() { 
5676          return this.copyright != null && !this.copyright.isEmpty();
5677        }
5678
5679        /**
5680         * @param value {@link #copyright} (Copyright notice for the full article or artifact.). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
5681         */
5682        public CitationCitedArtifactPublicationFormComponent setCopyrightElement(MarkdownType value) { 
5683          this.copyright = value;
5684          return this;
5685        }
5686
5687        /**
5688         * @return Copyright notice for the full article or artifact.
5689         */
5690        public String getCopyright() { 
5691          return this.copyright == null ? null : this.copyright.getValue();
5692        }
5693
5694        /**
5695         * @param value Copyright notice for the full article or artifact.
5696         */
5697        public CitationCitedArtifactPublicationFormComponent setCopyright(String value) { 
5698          if (Utilities.noString(value))
5699            this.copyright = null;
5700          else {
5701            if (this.copyright == null)
5702              this.copyright = new MarkdownType();
5703            this.copyright.setValue(value);
5704          }
5705          return this;
5706        }
5707
5708        protected void listChildren(List<Property> children) {
5709          super.listChildren(children);
5710          children.add(new Property("publishedIn", "", "The collection the cited article or artifact is published in.", 0, 1, publishedIn));
5711          children.add(new Property("citedMedium", "CodeableConcept", "Describes the form of the medium cited. Common codes are \"Internet\" or \"Print\". The CitedMedium value set has 6 codes. The codes internet, print, and offline-digital-storage are the common codes for a typical publication form, though internet and print are more common for study citations. Three additional codes (each appending one of the primary codes with \"-without-issue\" are used for situations when a study is published both within an issue (of a periodical release as commonly done for journals) AND is published separately from the issue (as commonly done with early online publication), to represent specific identification of the publication form not associated with the issue.", 0, 1, citedMedium));
5712          children.add(new Property("volume", "string", "Volume number of journal or other collection in which the article is published.", 0, 1, volume));
5713          children.add(new Property("issue", "string", "Issue, part or supplement of journal or other collection in which the article is published.", 0, 1, issue));
5714          children.add(new Property("articleDate", "dateTime", "The date the article was added to the database, or the date the article was released.", 0, 1, articleDate));
5715          children.add(new Property("publicationDateText", "string", "Text representation of the date on which the issue of the cited artifact was published.", 0, 1, publicationDateText));
5716          children.add(new Property("publicationDateSeason", "string", "Spring, Summer, Fall/Autumn, Winter.", 0, 1, publicationDateSeason));
5717          children.add(new Property("lastRevisionDate", "dateTime", "The date the article was last revised or updated in the database.", 0, 1, lastRevisionDate));
5718          children.add(new Property("language", "CodeableConcept", "The language or languages in which this form of the article is published.", 0, java.lang.Integer.MAX_VALUE, language));
5719          children.add(new Property("accessionNumber", "string", "Entry number or identifier for inclusion in a database.", 0, 1, accessionNumber));
5720          children.add(new Property("pageString", "string", "Used for full display of pagination.", 0, 1, pageString));
5721          children.add(new Property("firstPage", "string", "Used for isolated representation of first page.", 0, 1, firstPage));
5722          children.add(new Property("lastPage", "string", "Used for isolated representation of last page.", 0, 1, lastPage));
5723          children.add(new Property("pageCount", "string", "Actual or approximate number of pages or screens. Distinct from reporting the page numbers.", 0, 1, pageCount));
5724          children.add(new Property("copyright", "markdown", "Copyright notice for the full article or artifact.", 0, 1, copyright));
5725        }
5726
5727        @Override
5728        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
5729          switch (_hash) {
5730          case -614144077: /*publishedIn*/  return new Property("publishedIn", "", "The collection the cited article or artifact is published in.", 0, 1, publishedIn);
5731          case 612116418: /*citedMedium*/  return new Property("citedMedium", "CodeableConcept", "Describes the form of the medium cited. Common codes are \"Internet\" or \"Print\". The CitedMedium value set has 6 codes. The codes internet, print, and offline-digital-storage are the common codes for a typical publication form, though internet and print are more common for study citations. Three additional codes (each appending one of the primary codes with \"-without-issue\" are used for situations when a study is published both within an issue (of a periodical release as commonly done for journals) AND is published separately from the issue (as commonly done with early online publication), to represent specific identification of the publication form not associated with the issue.", 0, 1, citedMedium);
5732          case -810883302: /*volume*/  return new Property("volume", "string", "Volume number of journal or other collection in which the article is published.", 0, 1, volume);
5733          case 100509913: /*issue*/  return new Property("issue", "string", "Issue, part or supplement of journal or other collection in which the article is published.", 0, 1, issue);
5734          case 817743300: /*articleDate*/  return new Property("articleDate", "dateTime", "The date the article was added to the database, or the date the article was released.", 0, 1, articleDate);
5735          case 225590343: /*publicationDateText*/  return new Property("publicationDateText", "string", "Text representation of the date on which the issue of the cited artifact was published.", 0, 1, publicationDateText);
5736          case 2014643069: /*publicationDateSeason*/  return new Property("publicationDateSeason", "string", "Spring, Summer, Fall/Autumn, Winter.", 0, 1, publicationDateSeason);
5737          case 2129161183: /*lastRevisionDate*/  return new Property("lastRevisionDate", "dateTime", "The date the article was last revised or updated in the database.", 0, 1, lastRevisionDate);
5738          case -1613589672: /*language*/  return new Property("language", "CodeableConcept", "The language or languages in which this form of the article is published.", 0, java.lang.Integer.MAX_VALUE, language);
5739          case 1807963277: /*accessionNumber*/  return new Property("accessionNumber", "string", "Entry number or identifier for inclusion in a database.", 0, 1, accessionNumber);
5740          case 1287145344: /*pageString*/  return new Property("pageString", "string", "Used for full display of pagination.", 0, 1, pageString);
5741          case 132895071: /*firstPage*/  return new Property("firstPage", "string", "Used for isolated representation of first page.", 0, 1, firstPage);
5742          case -1459540411: /*lastPage*/  return new Property("lastPage", "string", "Used for isolated representation of last page.", 0, 1, lastPage);
5743          case 857882560: /*pageCount*/  return new Property("pageCount", "string", "Actual or approximate number of pages or screens. Distinct from reporting the page numbers.", 0, 1, pageCount);
5744          case 1522889671: /*copyright*/  return new Property("copyright", "markdown", "Copyright notice for the full article or artifact.", 0, 1, copyright);
5745          default: return super.getNamedProperty(_hash, _name, _checkValid);
5746          }
5747
5748        }
5749
5750      @Override
5751      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
5752        switch (hash) {
5753        case -614144077: /*publishedIn*/ return this.publishedIn == null ? new Base[0] : new Base[] {this.publishedIn}; // CitationCitedArtifactPublicationFormPublishedInComponent
5754        case 612116418: /*citedMedium*/ return this.citedMedium == null ? new Base[0] : new Base[] {this.citedMedium}; // CodeableConcept
5755        case -810883302: /*volume*/ return this.volume == null ? new Base[0] : new Base[] {this.volume}; // StringType
5756        case 100509913: /*issue*/ return this.issue == null ? new Base[0] : new Base[] {this.issue}; // StringType
5757        case 817743300: /*articleDate*/ return this.articleDate == null ? new Base[0] : new Base[] {this.articleDate}; // DateTimeType
5758        case 225590343: /*publicationDateText*/ return this.publicationDateText == null ? new Base[0] : new Base[] {this.publicationDateText}; // StringType
5759        case 2014643069: /*publicationDateSeason*/ return this.publicationDateSeason == null ? new Base[0] : new Base[] {this.publicationDateSeason}; // StringType
5760        case 2129161183: /*lastRevisionDate*/ return this.lastRevisionDate == null ? new Base[0] : new Base[] {this.lastRevisionDate}; // DateTimeType
5761        case -1613589672: /*language*/ return this.language == null ? new Base[0] : this.language.toArray(new Base[this.language.size()]); // CodeableConcept
5762        case 1807963277: /*accessionNumber*/ return this.accessionNumber == null ? new Base[0] : new Base[] {this.accessionNumber}; // StringType
5763        case 1287145344: /*pageString*/ return this.pageString == null ? new Base[0] : new Base[] {this.pageString}; // StringType
5764        case 132895071: /*firstPage*/ return this.firstPage == null ? new Base[0] : new Base[] {this.firstPage}; // StringType
5765        case -1459540411: /*lastPage*/ return this.lastPage == null ? new Base[0] : new Base[] {this.lastPage}; // StringType
5766        case 857882560: /*pageCount*/ return this.pageCount == null ? new Base[0] : new Base[] {this.pageCount}; // StringType
5767        case 1522889671: /*copyright*/ return this.copyright == null ? new Base[0] : new Base[] {this.copyright}; // MarkdownType
5768        default: return super.getProperty(hash, name, checkValid);
5769        }
5770
5771      }
5772
5773      @Override
5774      public Base setProperty(int hash, String name, Base value) throws FHIRException {
5775        switch (hash) {
5776        case -614144077: // publishedIn
5777          this.publishedIn = (CitationCitedArtifactPublicationFormPublishedInComponent) value; // CitationCitedArtifactPublicationFormPublishedInComponent
5778          return value;
5779        case 612116418: // citedMedium
5780          this.citedMedium = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
5781          return value;
5782        case -810883302: // volume
5783          this.volume = TypeConvertor.castToString(value); // StringType
5784          return value;
5785        case 100509913: // issue
5786          this.issue = TypeConvertor.castToString(value); // StringType
5787          return value;
5788        case 817743300: // articleDate
5789          this.articleDate = TypeConvertor.castToDateTime(value); // DateTimeType
5790          return value;
5791        case 225590343: // publicationDateText
5792          this.publicationDateText = TypeConvertor.castToString(value); // StringType
5793          return value;
5794        case 2014643069: // publicationDateSeason
5795          this.publicationDateSeason = TypeConvertor.castToString(value); // StringType
5796          return value;
5797        case 2129161183: // lastRevisionDate
5798          this.lastRevisionDate = TypeConvertor.castToDateTime(value); // DateTimeType
5799          return value;
5800        case -1613589672: // language
5801          this.getLanguage().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
5802          return value;
5803        case 1807963277: // accessionNumber
5804          this.accessionNumber = TypeConvertor.castToString(value); // StringType
5805          return value;
5806        case 1287145344: // pageString
5807          this.pageString = TypeConvertor.castToString(value); // StringType
5808          return value;
5809        case 132895071: // firstPage
5810          this.firstPage = TypeConvertor.castToString(value); // StringType
5811          return value;
5812        case -1459540411: // lastPage
5813          this.lastPage = TypeConvertor.castToString(value); // StringType
5814          return value;
5815        case 857882560: // pageCount
5816          this.pageCount = TypeConvertor.castToString(value); // StringType
5817          return value;
5818        case 1522889671: // copyright
5819          this.copyright = TypeConvertor.castToMarkdown(value); // MarkdownType
5820          return value;
5821        default: return super.setProperty(hash, name, value);
5822        }
5823
5824      }
5825
5826      @Override
5827      public Base setProperty(String name, Base value) throws FHIRException {
5828        if (name.equals("publishedIn")) {
5829          this.publishedIn = (CitationCitedArtifactPublicationFormPublishedInComponent) value; // CitationCitedArtifactPublicationFormPublishedInComponent
5830        } else if (name.equals("citedMedium")) {
5831          this.citedMedium = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
5832        } else if (name.equals("volume")) {
5833          this.volume = TypeConvertor.castToString(value); // StringType
5834        } else if (name.equals("issue")) {
5835          this.issue = TypeConvertor.castToString(value); // StringType
5836        } else if (name.equals("articleDate")) {
5837          this.articleDate = TypeConvertor.castToDateTime(value); // DateTimeType
5838        } else if (name.equals("publicationDateText")) {
5839          this.publicationDateText = TypeConvertor.castToString(value); // StringType
5840        } else if (name.equals("publicationDateSeason")) {
5841          this.publicationDateSeason = TypeConvertor.castToString(value); // StringType
5842        } else if (name.equals("lastRevisionDate")) {
5843          this.lastRevisionDate = TypeConvertor.castToDateTime(value); // DateTimeType
5844        } else if (name.equals("language")) {
5845          this.getLanguage().add(TypeConvertor.castToCodeableConcept(value));
5846        } else if (name.equals("accessionNumber")) {
5847          this.accessionNumber = TypeConvertor.castToString(value); // StringType
5848        } else if (name.equals("pageString")) {
5849          this.pageString = TypeConvertor.castToString(value); // StringType
5850        } else if (name.equals("firstPage")) {
5851          this.firstPage = TypeConvertor.castToString(value); // StringType
5852        } else if (name.equals("lastPage")) {
5853          this.lastPage = TypeConvertor.castToString(value); // StringType
5854        } else if (name.equals("pageCount")) {
5855          this.pageCount = TypeConvertor.castToString(value); // StringType
5856        } else if (name.equals("copyright")) {
5857          this.copyright = TypeConvertor.castToMarkdown(value); // MarkdownType
5858        } else
5859          return super.setProperty(name, value);
5860        return value;
5861      }
5862
5863  @Override
5864  public void removeChild(String name, Base value) throws FHIRException {
5865        if (name.equals("publishedIn")) {
5866          this.publishedIn = (CitationCitedArtifactPublicationFormPublishedInComponent) value; // CitationCitedArtifactPublicationFormPublishedInComponent
5867        } else if (name.equals("citedMedium")) {
5868          this.citedMedium = null;
5869        } else if (name.equals("volume")) {
5870          this.volume = null;
5871        } else if (name.equals("issue")) {
5872          this.issue = null;
5873        } else if (name.equals("articleDate")) {
5874          this.articleDate = null;
5875        } else if (name.equals("publicationDateText")) {
5876          this.publicationDateText = null;
5877        } else if (name.equals("publicationDateSeason")) {
5878          this.publicationDateSeason = null;
5879        } else if (name.equals("lastRevisionDate")) {
5880          this.lastRevisionDate = null;
5881        } else if (name.equals("language")) {
5882          this.getLanguage().remove(value);
5883        } else if (name.equals("accessionNumber")) {
5884          this.accessionNumber = null;
5885        } else if (name.equals("pageString")) {
5886          this.pageString = null;
5887        } else if (name.equals("firstPage")) {
5888          this.firstPage = null;
5889        } else if (name.equals("lastPage")) {
5890          this.lastPage = null;
5891        } else if (name.equals("pageCount")) {
5892          this.pageCount = null;
5893        } else if (name.equals("copyright")) {
5894          this.copyright = null;
5895        } else
5896          super.removeChild(name, value);
5897        
5898      }
5899
5900      @Override
5901      public Base makeProperty(int hash, String name) throws FHIRException {
5902        switch (hash) {
5903        case -614144077:  return getPublishedIn();
5904        case 612116418:  return getCitedMedium();
5905        case -810883302:  return getVolumeElement();
5906        case 100509913:  return getIssueElement();
5907        case 817743300:  return getArticleDateElement();
5908        case 225590343:  return getPublicationDateTextElement();
5909        case 2014643069:  return getPublicationDateSeasonElement();
5910        case 2129161183:  return getLastRevisionDateElement();
5911        case -1613589672:  return addLanguage(); 
5912        case 1807963277:  return getAccessionNumberElement();
5913        case 1287145344:  return getPageStringElement();
5914        case 132895071:  return getFirstPageElement();
5915        case -1459540411:  return getLastPageElement();
5916        case 857882560:  return getPageCountElement();
5917        case 1522889671:  return getCopyrightElement();
5918        default: return super.makeProperty(hash, name);
5919        }
5920
5921      }
5922
5923      @Override
5924      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
5925        switch (hash) {
5926        case -614144077: /*publishedIn*/ return new String[] {};
5927        case 612116418: /*citedMedium*/ return new String[] {"CodeableConcept"};
5928        case -810883302: /*volume*/ return new String[] {"string"};
5929        case 100509913: /*issue*/ return new String[] {"string"};
5930        case 817743300: /*articleDate*/ return new String[] {"dateTime"};
5931        case 225590343: /*publicationDateText*/ return new String[] {"string"};
5932        case 2014643069: /*publicationDateSeason*/ return new String[] {"string"};
5933        case 2129161183: /*lastRevisionDate*/ return new String[] {"dateTime"};
5934        case -1613589672: /*language*/ return new String[] {"CodeableConcept"};
5935        case 1807963277: /*accessionNumber*/ return new String[] {"string"};
5936        case 1287145344: /*pageString*/ return new String[] {"string"};
5937        case 132895071: /*firstPage*/ return new String[] {"string"};
5938        case -1459540411: /*lastPage*/ return new String[] {"string"};
5939        case 857882560: /*pageCount*/ return new String[] {"string"};
5940        case 1522889671: /*copyright*/ return new String[] {"markdown"};
5941        default: return super.getTypesForProperty(hash, name);
5942        }
5943
5944      }
5945
5946      @Override
5947      public Base addChild(String name) throws FHIRException {
5948        if (name.equals("publishedIn")) {
5949          this.publishedIn = new CitationCitedArtifactPublicationFormPublishedInComponent();
5950          return this.publishedIn;
5951        }
5952        else if (name.equals("citedMedium")) {
5953          this.citedMedium = new CodeableConcept();
5954          return this.citedMedium;
5955        }
5956        else if (name.equals("volume")) {
5957          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.publicationForm.volume");
5958        }
5959        else if (name.equals("issue")) {
5960          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.publicationForm.issue");
5961        }
5962        else if (name.equals("articleDate")) {
5963          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.publicationForm.articleDate");
5964        }
5965        else if (name.equals("publicationDateText")) {
5966          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.publicationForm.publicationDateText");
5967        }
5968        else if (name.equals("publicationDateSeason")) {
5969          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.publicationForm.publicationDateSeason");
5970        }
5971        else if (name.equals("lastRevisionDate")) {
5972          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.publicationForm.lastRevisionDate");
5973        }
5974        else if (name.equals("language")) {
5975          return addLanguage();
5976        }
5977        else if (name.equals("accessionNumber")) {
5978          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.publicationForm.accessionNumber");
5979        }
5980        else if (name.equals("pageString")) {
5981          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.publicationForm.pageString");
5982        }
5983        else if (name.equals("firstPage")) {
5984          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.publicationForm.firstPage");
5985        }
5986        else if (name.equals("lastPage")) {
5987          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.publicationForm.lastPage");
5988        }
5989        else if (name.equals("pageCount")) {
5990          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.publicationForm.pageCount");
5991        }
5992        else if (name.equals("copyright")) {
5993          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.publicationForm.copyright");
5994        }
5995        else
5996          return super.addChild(name);
5997      }
5998
5999      public CitationCitedArtifactPublicationFormComponent copy() {
6000        CitationCitedArtifactPublicationFormComponent dst = new CitationCitedArtifactPublicationFormComponent();
6001        copyValues(dst);
6002        return dst;
6003      }
6004
6005      public void copyValues(CitationCitedArtifactPublicationFormComponent dst) {
6006        super.copyValues(dst);
6007        dst.publishedIn = publishedIn == null ? null : publishedIn.copy();
6008        dst.citedMedium = citedMedium == null ? null : citedMedium.copy();
6009        dst.volume = volume == null ? null : volume.copy();
6010        dst.issue = issue == null ? null : issue.copy();
6011        dst.articleDate = articleDate == null ? null : articleDate.copy();
6012        dst.publicationDateText = publicationDateText == null ? null : publicationDateText.copy();
6013        dst.publicationDateSeason = publicationDateSeason == null ? null : publicationDateSeason.copy();
6014        dst.lastRevisionDate = lastRevisionDate == null ? null : lastRevisionDate.copy();
6015        if (language != null) {
6016          dst.language = new ArrayList<CodeableConcept>();
6017          for (CodeableConcept i : language)
6018            dst.language.add(i.copy());
6019        };
6020        dst.accessionNumber = accessionNumber == null ? null : accessionNumber.copy();
6021        dst.pageString = pageString == null ? null : pageString.copy();
6022        dst.firstPage = firstPage == null ? null : firstPage.copy();
6023        dst.lastPage = lastPage == null ? null : lastPage.copy();
6024        dst.pageCount = pageCount == null ? null : pageCount.copy();
6025        dst.copyright = copyright == null ? null : copyright.copy();
6026      }
6027
6028      @Override
6029      public boolean equalsDeep(Base other_) {
6030        if (!super.equalsDeep(other_))
6031          return false;
6032        if (!(other_ instanceof CitationCitedArtifactPublicationFormComponent))
6033          return false;
6034        CitationCitedArtifactPublicationFormComponent o = (CitationCitedArtifactPublicationFormComponent) other_;
6035        return compareDeep(publishedIn, o.publishedIn, true) && compareDeep(citedMedium, o.citedMedium, true)
6036           && compareDeep(volume, o.volume, true) && compareDeep(issue, o.issue, true) && compareDeep(articleDate, o.articleDate, true)
6037           && compareDeep(publicationDateText, o.publicationDateText, true) && compareDeep(publicationDateSeason, o.publicationDateSeason, true)
6038           && compareDeep(lastRevisionDate, o.lastRevisionDate, true) && compareDeep(language, o.language, true)
6039           && compareDeep(accessionNumber, o.accessionNumber, true) && compareDeep(pageString, o.pageString, true)
6040           && compareDeep(firstPage, o.firstPage, true) && compareDeep(lastPage, o.lastPage, true) && compareDeep(pageCount, o.pageCount, true)
6041           && compareDeep(copyright, o.copyright, true);
6042      }
6043
6044      @Override
6045      public boolean equalsShallow(Base other_) {
6046        if (!super.equalsShallow(other_))
6047          return false;
6048        if (!(other_ instanceof CitationCitedArtifactPublicationFormComponent))
6049          return false;
6050        CitationCitedArtifactPublicationFormComponent o = (CitationCitedArtifactPublicationFormComponent) other_;
6051        return compareValues(volume, o.volume, true) && compareValues(issue, o.issue, true) && compareValues(articleDate, o.articleDate, true)
6052           && compareValues(publicationDateText, o.publicationDateText, true) && compareValues(publicationDateSeason, o.publicationDateSeason, true)
6053           && compareValues(lastRevisionDate, o.lastRevisionDate, true) && compareValues(accessionNumber, o.accessionNumber, true)
6054           && compareValues(pageString, o.pageString, true) && compareValues(firstPage, o.firstPage, true) && compareValues(lastPage, o.lastPage, true)
6055           && compareValues(pageCount, o.pageCount, true) && compareValues(copyright, o.copyright, true);
6056      }
6057
6058      public boolean isEmpty() {
6059        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(publishedIn, citedMedium, volume
6060          , issue, articleDate, publicationDateText, publicationDateSeason, lastRevisionDate
6061          , language, accessionNumber, pageString, firstPage, lastPage, pageCount, copyright
6062          );
6063      }
6064
6065  public String fhirType() {
6066    return "Citation.citedArtifact.publicationForm";
6067
6068  }
6069
6070  }
6071
6072    @Block()
6073    public static class CitationCitedArtifactPublicationFormPublishedInComponent extends BackboneElement implements IBaseBackboneElement {
6074        /**
6075         * Kind of container (e.g. Periodical, database, or book).
6076         */
6077        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=false)
6078        @Description(shortDefinition="Kind of container (e.g. Periodical, database, or book)", formalDefinition="Kind of container (e.g. Periodical, database, or book)." )
6079        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/published-in-type")
6080        protected CodeableConcept type;
6081
6082        /**
6083         * Journal identifiers include ISSN, ISO Abbreviation and NLMuniqueID; Book identifiers include ISBN.
6084         */
6085        @Child(name = "identifier", type = {Identifier.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
6086        @Description(shortDefinition="Journal identifiers include ISSN, ISO Abbreviation and NLMuniqueID; Book identifiers include ISBN", formalDefinition="Journal identifiers include ISSN, ISO Abbreviation and NLMuniqueID; Book identifiers include ISBN." )
6087        protected List<Identifier> identifier;
6088
6089        /**
6090         * Name of the database or title of the book or journal.
6091         */
6092        @Child(name = "title", type = {StringType.class}, order=3, min=0, max=1, modifier=false, summary=false)
6093        @Description(shortDefinition="Name of the database or title of the book or journal", formalDefinition="Name of the database or title of the book or journal." )
6094        protected StringType title;
6095
6096        /**
6097         * Name of or resource describing the publisher.
6098         */
6099        @Child(name = "publisher", type = {Organization.class}, order=4, min=0, max=1, modifier=false, summary=false)
6100        @Description(shortDefinition="Name of or resource describing the publisher", formalDefinition="Name of or resource describing the publisher." )
6101        protected Reference publisher;
6102
6103        /**
6104         * Geographic location of the publisher.
6105         */
6106        @Child(name = "publisherLocation", type = {StringType.class}, order=5, min=0, max=1, modifier=false, summary=false)
6107        @Description(shortDefinition="Geographic location of the publisher", formalDefinition="Geographic location of the publisher." )
6108        protected StringType publisherLocation;
6109
6110        private static final long serialVersionUID = 1440066953L;
6111
6112    /**
6113     * Constructor
6114     */
6115      public CitationCitedArtifactPublicationFormPublishedInComponent() {
6116        super();
6117      }
6118
6119        /**
6120         * @return {@link #type} (Kind of container (e.g. Periodical, database, or book).)
6121         */
6122        public CodeableConcept getType() { 
6123          if (this.type == null)
6124            if (Configuration.errorOnAutoCreate())
6125              throw new Error("Attempt to auto-create CitationCitedArtifactPublicationFormPublishedInComponent.type");
6126            else if (Configuration.doAutoCreate())
6127              this.type = new CodeableConcept(); // cc
6128          return this.type;
6129        }
6130
6131        public boolean hasType() { 
6132          return this.type != null && !this.type.isEmpty();
6133        }
6134
6135        /**
6136         * @param value {@link #type} (Kind of container (e.g. Periodical, database, or book).)
6137         */
6138        public CitationCitedArtifactPublicationFormPublishedInComponent setType(CodeableConcept value) { 
6139          this.type = value;
6140          return this;
6141        }
6142
6143        /**
6144         * @return {@link #identifier} (Journal identifiers include ISSN, ISO Abbreviation and NLMuniqueID; Book identifiers include ISBN.)
6145         */
6146        public List<Identifier> getIdentifier() { 
6147          if (this.identifier == null)
6148            this.identifier = new ArrayList<Identifier>();
6149          return this.identifier;
6150        }
6151
6152        /**
6153         * @return Returns a reference to <code>this</code> for easy method chaining
6154         */
6155        public CitationCitedArtifactPublicationFormPublishedInComponent setIdentifier(List<Identifier> theIdentifier) { 
6156          this.identifier = theIdentifier;
6157          return this;
6158        }
6159
6160        public boolean hasIdentifier() { 
6161          if (this.identifier == null)
6162            return false;
6163          for (Identifier item : this.identifier)
6164            if (!item.isEmpty())
6165              return true;
6166          return false;
6167        }
6168
6169        public Identifier addIdentifier() { //3
6170          Identifier t = new Identifier();
6171          if (this.identifier == null)
6172            this.identifier = new ArrayList<Identifier>();
6173          this.identifier.add(t);
6174          return t;
6175        }
6176
6177        public CitationCitedArtifactPublicationFormPublishedInComponent addIdentifier(Identifier t) { //3
6178          if (t == null)
6179            return this;
6180          if (this.identifier == null)
6181            this.identifier = new ArrayList<Identifier>();
6182          this.identifier.add(t);
6183          return this;
6184        }
6185
6186        /**
6187         * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
6188         */
6189        public Identifier getIdentifierFirstRep() { 
6190          if (getIdentifier().isEmpty()) {
6191            addIdentifier();
6192          }
6193          return getIdentifier().get(0);
6194        }
6195
6196        /**
6197         * @return {@link #title} (Name of the database or title of the book or journal.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
6198         */
6199        public StringType getTitleElement() { 
6200          if (this.title == null)
6201            if (Configuration.errorOnAutoCreate())
6202              throw new Error("Attempt to auto-create CitationCitedArtifactPublicationFormPublishedInComponent.title");
6203            else if (Configuration.doAutoCreate())
6204              this.title = new StringType(); // bb
6205          return this.title;
6206        }
6207
6208        public boolean hasTitleElement() { 
6209          return this.title != null && !this.title.isEmpty();
6210        }
6211
6212        public boolean hasTitle() { 
6213          return this.title != null && !this.title.isEmpty();
6214        }
6215
6216        /**
6217         * @param value {@link #title} (Name of the database or title of the book or journal.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
6218         */
6219        public CitationCitedArtifactPublicationFormPublishedInComponent setTitleElement(StringType value) { 
6220          this.title = value;
6221          return this;
6222        }
6223
6224        /**
6225         * @return Name of the database or title of the book or journal.
6226         */
6227        public String getTitle() { 
6228          return this.title == null ? null : this.title.getValue();
6229        }
6230
6231        /**
6232         * @param value Name of the database or title of the book or journal.
6233         */
6234        public CitationCitedArtifactPublicationFormPublishedInComponent setTitle(String value) { 
6235          if (Utilities.noString(value))
6236            this.title = null;
6237          else {
6238            if (this.title == null)
6239              this.title = new StringType();
6240            this.title.setValue(value);
6241          }
6242          return this;
6243        }
6244
6245        /**
6246         * @return {@link #publisher} (Name of or resource describing the publisher.)
6247         */
6248        public Reference getPublisher() { 
6249          if (this.publisher == null)
6250            if (Configuration.errorOnAutoCreate())
6251              throw new Error("Attempt to auto-create CitationCitedArtifactPublicationFormPublishedInComponent.publisher");
6252            else if (Configuration.doAutoCreate())
6253              this.publisher = new Reference(); // cc
6254          return this.publisher;
6255        }
6256
6257        public boolean hasPublisher() { 
6258          return this.publisher != null && !this.publisher.isEmpty();
6259        }
6260
6261        /**
6262         * @param value {@link #publisher} (Name of or resource describing the publisher.)
6263         */
6264        public CitationCitedArtifactPublicationFormPublishedInComponent setPublisher(Reference value) { 
6265          this.publisher = value;
6266          return this;
6267        }
6268
6269        /**
6270         * @return {@link #publisherLocation} (Geographic location of the publisher.). This is the underlying object with id, value and extensions. The accessor "getPublisherLocation" gives direct access to the value
6271         */
6272        public StringType getPublisherLocationElement() { 
6273          if (this.publisherLocation == null)
6274            if (Configuration.errorOnAutoCreate())
6275              throw new Error("Attempt to auto-create CitationCitedArtifactPublicationFormPublishedInComponent.publisherLocation");
6276            else if (Configuration.doAutoCreate())
6277              this.publisherLocation = new StringType(); // bb
6278          return this.publisherLocation;
6279        }
6280
6281        public boolean hasPublisherLocationElement() { 
6282          return this.publisherLocation != null && !this.publisherLocation.isEmpty();
6283        }
6284
6285        public boolean hasPublisherLocation() { 
6286          return this.publisherLocation != null && !this.publisherLocation.isEmpty();
6287        }
6288
6289        /**
6290         * @param value {@link #publisherLocation} (Geographic location of the publisher.). This is the underlying object with id, value and extensions. The accessor "getPublisherLocation" gives direct access to the value
6291         */
6292        public CitationCitedArtifactPublicationFormPublishedInComponent setPublisherLocationElement(StringType value) { 
6293          this.publisherLocation = value;
6294          return this;
6295        }
6296
6297        /**
6298         * @return Geographic location of the publisher.
6299         */
6300        public String getPublisherLocation() { 
6301          return this.publisherLocation == null ? null : this.publisherLocation.getValue();
6302        }
6303
6304        /**
6305         * @param value Geographic location of the publisher.
6306         */
6307        public CitationCitedArtifactPublicationFormPublishedInComponent setPublisherLocation(String value) { 
6308          if (Utilities.noString(value))
6309            this.publisherLocation = null;
6310          else {
6311            if (this.publisherLocation == null)
6312              this.publisherLocation = new StringType();
6313            this.publisherLocation.setValue(value);
6314          }
6315          return this;
6316        }
6317
6318        protected void listChildren(List<Property> children) {
6319          super.listChildren(children);
6320          children.add(new Property("type", "CodeableConcept", "Kind of container (e.g. Periodical, database, or book).", 0, 1, type));
6321          children.add(new Property("identifier", "Identifier", "Journal identifiers include ISSN, ISO Abbreviation and NLMuniqueID; Book identifiers include ISBN.", 0, java.lang.Integer.MAX_VALUE, identifier));
6322          children.add(new Property("title", "string", "Name of the database or title of the book or journal.", 0, 1, title));
6323          children.add(new Property("publisher", "Reference(Organization)", "Name of or resource describing the publisher.", 0, 1, publisher));
6324          children.add(new Property("publisherLocation", "string", "Geographic location of the publisher.", 0, 1, publisherLocation));
6325        }
6326
6327        @Override
6328        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
6329          switch (_hash) {
6330          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Kind of container (e.g. Periodical, database, or book).", 0, 1, type);
6331          case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "Journal identifiers include ISSN, ISO Abbreviation and NLMuniqueID; Book identifiers include ISBN.", 0, java.lang.Integer.MAX_VALUE, identifier);
6332          case 110371416: /*title*/  return new Property("title", "string", "Name of the database or title of the book or journal.", 0, 1, title);
6333          case 1447404028: /*publisher*/  return new Property("publisher", "Reference(Organization)", "Name of or resource describing the publisher.", 0, 1, publisher);
6334          case -1281627695: /*publisherLocation*/  return new Property("publisherLocation", "string", "Geographic location of the publisher.", 0, 1, publisherLocation);
6335          default: return super.getNamedProperty(_hash, _name, _checkValid);
6336          }
6337
6338        }
6339
6340      @Override
6341      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
6342        switch (hash) {
6343        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
6344        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
6345        case 110371416: /*title*/ return this.title == null ? new Base[0] : new Base[] {this.title}; // StringType
6346        case 1447404028: /*publisher*/ return this.publisher == null ? new Base[0] : new Base[] {this.publisher}; // Reference
6347        case -1281627695: /*publisherLocation*/ return this.publisherLocation == null ? new Base[0] : new Base[] {this.publisherLocation}; // StringType
6348        default: return super.getProperty(hash, name, checkValid);
6349        }
6350
6351      }
6352
6353      @Override
6354      public Base setProperty(int hash, String name, Base value) throws FHIRException {
6355        switch (hash) {
6356        case 3575610: // type
6357          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
6358          return value;
6359        case -1618432855: // identifier
6360          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
6361          return value;
6362        case 110371416: // title
6363          this.title = TypeConvertor.castToString(value); // StringType
6364          return value;
6365        case 1447404028: // publisher
6366          this.publisher = TypeConvertor.castToReference(value); // Reference
6367          return value;
6368        case -1281627695: // publisherLocation
6369          this.publisherLocation = TypeConvertor.castToString(value); // StringType
6370          return value;
6371        default: return super.setProperty(hash, name, value);
6372        }
6373
6374      }
6375
6376      @Override
6377      public Base setProperty(String name, Base value) throws FHIRException {
6378        if (name.equals("type")) {
6379          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
6380        } else if (name.equals("identifier")) {
6381          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
6382        } else if (name.equals("title")) {
6383          this.title = TypeConvertor.castToString(value); // StringType
6384        } else if (name.equals("publisher")) {
6385          this.publisher = TypeConvertor.castToReference(value); // Reference
6386        } else if (name.equals("publisherLocation")) {
6387          this.publisherLocation = TypeConvertor.castToString(value); // StringType
6388        } else
6389          return super.setProperty(name, value);
6390        return value;
6391      }
6392
6393  @Override
6394  public void removeChild(String name, Base value) throws FHIRException {
6395        if (name.equals("type")) {
6396          this.type = null;
6397        } else if (name.equals("identifier")) {
6398          this.getIdentifier().remove(value);
6399        } else if (name.equals("title")) {
6400          this.title = null;
6401        } else if (name.equals("publisher")) {
6402          this.publisher = null;
6403        } else if (name.equals("publisherLocation")) {
6404          this.publisherLocation = null;
6405        } else
6406          super.removeChild(name, value);
6407        
6408      }
6409
6410      @Override
6411      public Base makeProperty(int hash, String name) throws FHIRException {
6412        switch (hash) {
6413        case 3575610:  return getType();
6414        case -1618432855:  return addIdentifier(); 
6415        case 110371416:  return getTitleElement();
6416        case 1447404028:  return getPublisher();
6417        case -1281627695:  return getPublisherLocationElement();
6418        default: return super.makeProperty(hash, name);
6419        }
6420
6421      }
6422
6423      @Override
6424      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
6425        switch (hash) {
6426        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
6427        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
6428        case 110371416: /*title*/ return new String[] {"string"};
6429        case 1447404028: /*publisher*/ return new String[] {"Reference"};
6430        case -1281627695: /*publisherLocation*/ return new String[] {"string"};
6431        default: return super.getTypesForProperty(hash, name);
6432        }
6433
6434      }
6435
6436      @Override
6437      public Base addChild(String name) throws FHIRException {
6438        if (name.equals("type")) {
6439          this.type = new CodeableConcept();
6440          return this.type;
6441        }
6442        else if (name.equals("identifier")) {
6443          return addIdentifier();
6444        }
6445        else if (name.equals("title")) {
6446          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.publicationForm.publishedIn.title");
6447        }
6448        else if (name.equals("publisher")) {
6449          this.publisher = new Reference();
6450          return this.publisher;
6451        }
6452        else if (name.equals("publisherLocation")) {
6453          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.publicationForm.publishedIn.publisherLocation");
6454        }
6455        else
6456          return super.addChild(name);
6457      }
6458
6459      public CitationCitedArtifactPublicationFormPublishedInComponent copy() {
6460        CitationCitedArtifactPublicationFormPublishedInComponent dst = new CitationCitedArtifactPublicationFormPublishedInComponent();
6461        copyValues(dst);
6462        return dst;
6463      }
6464
6465      public void copyValues(CitationCitedArtifactPublicationFormPublishedInComponent dst) {
6466        super.copyValues(dst);
6467        dst.type = type == null ? null : type.copy();
6468        if (identifier != null) {
6469          dst.identifier = new ArrayList<Identifier>();
6470          for (Identifier i : identifier)
6471            dst.identifier.add(i.copy());
6472        };
6473        dst.title = title == null ? null : title.copy();
6474        dst.publisher = publisher == null ? null : publisher.copy();
6475        dst.publisherLocation = publisherLocation == null ? null : publisherLocation.copy();
6476      }
6477
6478      @Override
6479      public boolean equalsDeep(Base other_) {
6480        if (!super.equalsDeep(other_))
6481          return false;
6482        if (!(other_ instanceof CitationCitedArtifactPublicationFormPublishedInComponent))
6483          return false;
6484        CitationCitedArtifactPublicationFormPublishedInComponent o = (CitationCitedArtifactPublicationFormPublishedInComponent) other_;
6485        return compareDeep(type, o.type, true) && compareDeep(identifier, o.identifier, true) && compareDeep(title, o.title, true)
6486           && compareDeep(publisher, o.publisher, true) && compareDeep(publisherLocation, o.publisherLocation, true)
6487          ;
6488      }
6489
6490      @Override
6491      public boolean equalsShallow(Base other_) {
6492        if (!super.equalsShallow(other_))
6493          return false;
6494        if (!(other_ instanceof CitationCitedArtifactPublicationFormPublishedInComponent))
6495          return false;
6496        CitationCitedArtifactPublicationFormPublishedInComponent o = (CitationCitedArtifactPublicationFormPublishedInComponent) other_;
6497        return compareValues(title, o.title, true) && compareValues(publisherLocation, o.publisherLocation, true)
6498          ;
6499      }
6500
6501      public boolean isEmpty() {
6502        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, identifier, title
6503          , publisher, publisherLocation);
6504      }
6505
6506  public String fhirType() {
6507    return "Citation.citedArtifact.publicationForm.publishedIn";
6508
6509  }
6510
6511  }
6512
6513    @Block()
6514    public static class CitationCitedArtifactWebLocationComponent extends BackboneElement implements IBaseBackboneElement {
6515        /**
6516         * A characterization of the object expected at the web location.
6517         */
6518        @Child(name = "classifier", type = {CodeableConcept.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
6519        @Description(shortDefinition="Code the reason for different URLs, e.g. abstract and full-text", formalDefinition="A characterization of the object expected at the web location." )
6520        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/artifact-url-classifier")
6521        protected List<CodeableConcept> classifier;
6522
6523        /**
6524         * The specific URL.
6525         */
6526        @Child(name = "url", type = {UriType.class}, order=2, min=0, max=1, modifier=false, summary=false)
6527        @Description(shortDefinition="The specific URL", formalDefinition="The specific URL." )
6528        protected UriType url;
6529
6530        private static final long serialVersionUID = -1300703403L;
6531
6532    /**
6533     * Constructor
6534     */
6535      public CitationCitedArtifactWebLocationComponent() {
6536        super();
6537      }
6538
6539        /**
6540         * @return {@link #classifier} (A characterization of the object expected at the web location.)
6541         */
6542        public List<CodeableConcept> getClassifier() { 
6543          if (this.classifier == null)
6544            this.classifier = new ArrayList<CodeableConcept>();
6545          return this.classifier;
6546        }
6547
6548        /**
6549         * @return Returns a reference to <code>this</code> for easy method chaining
6550         */
6551        public CitationCitedArtifactWebLocationComponent setClassifier(List<CodeableConcept> theClassifier) { 
6552          this.classifier = theClassifier;
6553          return this;
6554        }
6555
6556        public boolean hasClassifier() { 
6557          if (this.classifier == null)
6558            return false;
6559          for (CodeableConcept item : this.classifier)
6560            if (!item.isEmpty())
6561              return true;
6562          return false;
6563        }
6564
6565        public CodeableConcept addClassifier() { //3
6566          CodeableConcept t = new CodeableConcept();
6567          if (this.classifier == null)
6568            this.classifier = new ArrayList<CodeableConcept>();
6569          this.classifier.add(t);
6570          return t;
6571        }
6572
6573        public CitationCitedArtifactWebLocationComponent addClassifier(CodeableConcept t) { //3
6574          if (t == null)
6575            return this;
6576          if (this.classifier == null)
6577            this.classifier = new ArrayList<CodeableConcept>();
6578          this.classifier.add(t);
6579          return this;
6580        }
6581
6582        /**
6583         * @return The first repetition of repeating field {@link #classifier}, creating it if it does not already exist {3}
6584         */
6585        public CodeableConcept getClassifierFirstRep() { 
6586          if (getClassifier().isEmpty()) {
6587            addClassifier();
6588          }
6589          return getClassifier().get(0);
6590        }
6591
6592        /**
6593         * @return {@link #url} (The specific URL.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
6594         */
6595        public UriType getUrlElement() { 
6596          if (this.url == null)
6597            if (Configuration.errorOnAutoCreate())
6598              throw new Error("Attempt to auto-create CitationCitedArtifactWebLocationComponent.url");
6599            else if (Configuration.doAutoCreate())
6600              this.url = new UriType(); // bb
6601          return this.url;
6602        }
6603
6604        public boolean hasUrlElement() { 
6605          return this.url != null && !this.url.isEmpty();
6606        }
6607
6608        public boolean hasUrl() { 
6609          return this.url != null && !this.url.isEmpty();
6610        }
6611
6612        /**
6613         * @param value {@link #url} (The specific URL.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
6614         */
6615        public CitationCitedArtifactWebLocationComponent setUrlElement(UriType value) { 
6616          this.url = value;
6617          return this;
6618        }
6619
6620        /**
6621         * @return The specific URL.
6622         */
6623        public String getUrl() { 
6624          return this.url == null ? null : this.url.getValue();
6625        }
6626
6627        /**
6628         * @param value The specific URL.
6629         */
6630        public CitationCitedArtifactWebLocationComponent setUrl(String value) { 
6631          if (Utilities.noString(value))
6632            this.url = null;
6633          else {
6634            if (this.url == null)
6635              this.url = new UriType();
6636            this.url.setValue(value);
6637          }
6638          return this;
6639        }
6640
6641        protected void listChildren(List<Property> children) {
6642          super.listChildren(children);
6643          children.add(new Property("classifier", "CodeableConcept", "A characterization of the object expected at the web location.", 0, java.lang.Integer.MAX_VALUE, classifier));
6644          children.add(new Property("url", "uri", "The specific URL.", 0, 1, url));
6645        }
6646
6647        @Override
6648        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
6649          switch (_hash) {
6650          case -281470431: /*classifier*/  return new Property("classifier", "CodeableConcept", "A characterization of the object expected at the web location.", 0, java.lang.Integer.MAX_VALUE, classifier);
6651          case 116079: /*url*/  return new Property("url", "uri", "The specific URL.", 0, 1, url);
6652          default: return super.getNamedProperty(_hash, _name, _checkValid);
6653          }
6654
6655        }
6656
6657      @Override
6658      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
6659        switch (hash) {
6660        case -281470431: /*classifier*/ return this.classifier == null ? new Base[0] : this.classifier.toArray(new Base[this.classifier.size()]); // CodeableConcept
6661        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UriType
6662        default: return super.getProperty(hash, name, checkValid);
6663        }
6664
6665      }
6666
6667      @Override
6668      public Base setProperty(int hash, String name, Base value) throws FHIRException {
6669        switch (hash) {
6670        case -281470431: // classifier
6671          this.getClassifier().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
6672          return value;
6673        case 116079: // url
6674          this.url = TypeConvertor.castToUri(value); // UriType
6675          return value;
6676        default: return super.setProperty(hash, name, value);
6677        }
6678
6679      }
6680
6681      @Override
6682      public Base setProperty(String name, Base value) throws FHIRException {
6683        if (name.equals("classifier")) {
6684          this.getClassifier().add(TypeConvertor.castToCodeableConcept(value));
6685        } else if (name.equals("url")) {
6686          this.url = TypeConvertor.castToUri(value); // UriType
6687        } else
6688          return super.setProperty(name, value);
6689        return value;
6690      }
6691
6692  @Override
6693  public void removeChild(String name, Base value) throws FHIRException {
6694        if (name.equals("classifier")) {
6695          this.getClassifier().remove(value);
6696        } else if (name.equals("url")) {
6697          this.url = null;
6698        } else
6699          super.removeChild(name, value);
6700        
6701      }
6702
6703      @Override
6704      public Base makeProperty(int hash, String name) throws FHIRException {
6705        switch (hash) {
6706        case -281470431:  return addClassifier(); 
6707        case 116079:  return getUrlElement();
6708        default: return super.makeProperty(hash, name);
6709        }
6710
6711      }
6712
6713      @Override
6714      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
6715        switch (hash) {
6716        case -281470431: /*classifier*/ return new String[] {"CodeableConcept"};
6717        case 116079: /*url*/ return new String[] {"uri"};
6718        default: return super.getTypesForProperty(hash, name);
6719        }
6720
6721      }
6722
6723      @Override
6724      public Base addChild(String name) throws FHIRException {
6725        if (name.equals("classifier")) {
6726          return addClassifier();
6727        }
6728        else if (name.equals("url")) {
6729          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.webLocation.url");
6730        }
6731        else
6732          return super.addChild(name);
6733      }
6734
6735      public CitationCitedArtifactWebLocationComponent copy() {
6736        CitationCitedArtifactWebLocationComponent dst = new CitationCitedArtifactWebLocationComponent();
6737        copyValues(dst);
6738        return dst;
6739      }
6740
6741      public void copyValues(CitationCitedArtifactWebLocationComponent dst) {
6742        super.copyValues(dst);
6743        if (classifier != null) {
6744          dst.classifier = new ArrayList<CodeableConcept>();
6745          for (CodeableConcept i : classifier)
6746            dst.classifier.add(i.copy());
6747        };
6748        dst.url = url == null ? null : url.copy();
6749      }
6750
6751      @Override
6752      public boolean equalsDeep(Base other_) {
6753        if (!super.equalsDeep(other_))
6754          return false;
6755        if (!(other_ instanceof CitationCitedArtifactWebLocationComponent))
6756          return false;
6757        CitationCitedArtifactWebLocationComponent o = (CitationCitedArtifactWebLocationComponent) other_;
6758        return compareDeep(classifier, o.classifier, true) && compareDeep(url, o.url, true);
6759      }
6760
6761      @Override
6762      public boolean equalsShallow(Base other_) {
6763        if (!super.equalsShallow(other_))
6764          return false;
6765        if (!(other_ instanceof CitationCitedArtifactWebLocationComponent))
6766          return false;
6767        CitationCitedArtifactWebLocationComponent o = (CitationCitedArtifactWebLocationComponent) other_;
6768        return compareValues(url, o.url, true);
6769      }
6770
6771      public boolean isEmpty() {
6772        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(classifier, url);
6773      }
6774
6775  public String fhirType() {
6776    return "Citation.citedArtifact.webLocation";
6777
6778  }
6779
6780  }
6781
6782    @Block()
6783    public static class CitationCitedArtifactClassificationComponent extends BackboneElement implements IBaseBackboneElement {
6784        /**
6785         * The kind of classifier (e.g. publication type, keyword).
6786         */
6787        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=false)
6788        @Description(shortDefinition="The kind of classifier (e.g. publication type, keyword)", formalDefinition="The kind of classifier (e.g. publication type, keyword)." )
6789        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/cited-artifact-classification-type")
6790        protected CodeableConcept type;
6791
6792        /**
6793         * The specific classification value.
6794         */
6795        @Child(name = "classifier", type = {CodeableConcept.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
6796        @Description(shortDefinition="The specific classification value", formalDefinition="The specific classification value." )
6797        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/citation-artifact-classifier")
6798        protected List<CodeableConcept> classifier;
6799
6800        /**
6801         * Complex or externally created classification.
6802         */
6803        @Child(name = "artifactAssessment", type = {ArtifactAssessment.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
6804        @Description(shortDefinition="Complex or externally created classification", formalDefinition="Complex or externally created classification." )
6805        protected List<Reference> artifactAssessment;
6806
6807        private static final long serialVersionUID = 394554928L;
6808
6809    /**
6810     * Constructor
6811     */
6812      public CitationCitedArtifactClassificationComponent() {
6813        super();
6814      }
6815
6816        /**
6817         * @return {@link #type} (The kind of classifier (e.g. publication type, keyword).)
6818         */
6819        public CodeableConcept getType() { 
6820          if (this.type == null)
6821            if (Configuration.errorOnAutoCreate())
6822              throw new Error("Attempt to auto-create CitationCitedArtifactClassificationComponent.type");
6823            else if (Configuration.doAutoCreate())
6824              this.type = new CodeableConcept(); // cc
6825          return this.type;
6826        }
6827
6828        public boolean hasType() { 
6829          return this.type != null && !this.type.isEmpty();
6830        }
6831
6832        /**
6833         * @param value {@link #type} (The kind of classifier (e.g. publication type, keyword).)
6834         */
6835        public CitationCitedArtifactClassificationComponent setType(CodeableConcept value) { 
6836          this.type = value;
6837          return this;
6838        }
6839
6840        /**
6841         * @return {@link #classifier} (The specific classification value.)
6842         */
6843        public List<CodeableConcept> getClassifier() { 
6844          if (this.classifier == null)
6845            this.classifier = new ArrayList<CodeableConcept>();
6846          return this.classifier;
6847        }
6848
6849        /**
6850         * @return Returns a reference to <code>this</code> for easy method chaining
6851         */
6852        public CitationCitedArtifactClassificationComponent setClassifier(List<CodeableConcept> theClassifier) { 
6853          this.classifier = theClassifier;
6854          return this;
6855        }
6856
6857        public boolean hasClassifier() { 
6858          if (this.classifier == null)
6859            return false;
6860          for (CodeableConcept item : this.classifier)
6861            if (!item.isEmpty())
6862              return true;
6863          return false;
6864        }
6865
6866        public CodeableConcept addClassifier() { //3
6867          CodeableConcept t = new CodeableConcept();
6868          if (this.classifier == null)
6869            this.classifier = new ArrayList<CodeableConcept>();
6870          this.classifier.add(t);
6871          return t;
6872        }
6873
6874        public CitationCitedArtifactClassificationComponent addClassifier(CodeableConcept t) { //3
6875          if (t == null)
6876            return this;
6877          if (this.classifier == null)
6878            this.classifier = new ArrayList<CodeableConcept>();
6879          this.classifier.add(t);
6880          return this;
6881        }
6882
6883        /**
6884         * @return The first repetition of repeating field {@link #classifier}, creating it if it does not already exist {3}
6885         */
6886        public CodeableConcept getClassifierFirstRep() { 
6887          if (getClassifier().isEmpty()) {
6888            addClassifier();
6889          }
6890          return getClassifier().get(0);
6891        }
6892
6893        /**
6894         * @return {@link #artifactAssessment} (Complex or externally created classification.)
6895         */
6896        public List<Reference> getArtifactAssessment() { 
6897          if (this.artifactAssessment == null)
6898            this.artifactAssessment = new ArrayList<Reference>();
6899          return this.artifactAssessment;
6900        }
6901
6902        /**
6903         * @return Returns a reference to <code>this</code> for easy method chaining
6904         */
6905        public CitationCitedArtifactClassificationComponent setArtifactAssessment(List<Reference> theArtifactAssessment) { 
6906          this.artifactAssessment = theArtifactAssessment;
6907          return this;
6908        }
6909
6910        public boolean hasArtifactAssessment() { 
6911          if (this.artifactAssessment == null)
6912            return false;
6913          for (Reference item : this.artifactAssessment)
6914            if (!item.isEmpty())
6915              return true;
6916          return false;
6917        }
6918
6919        public Reference addArtifactAssessment() { //3
6920          Reference t = new Reference();
6921          if (this.artifactAssessment == null)
6922            this.artifactAssessment = new ArrayList<Reference>();
6923          this.artifactAssessment.add(t);
6924          return t;
6925        }
6926
6927        public CitationCitedArtifactClassificationComponent addArtifactAssessment(Reference t) { //3
6928          if (t == null)
6929            return this;
6930          if (this.artifactAssessment == null)
6931            this.artifactAssessment = new ArrayList<Reference>();
6932          this.artifactAssessment.add(t);
6933          return this;
6934        }
6935
6936        /**
6937         * @return The first repetition of repeating field {@link #artifactAssessment}, creating it if it does not already exist {3}
6938         */
6939        public Reference getArtifactAssessmentFirstRep() { 
6940          if (getArtifactAssessment().isEmpty()) {
6941            addArtifactAssessment();
6942          }
6943          return getArtifactAssessment().get(0);
6944        }
6945
6946        protected void listChildren(List<Property> children) {
6947          super.listChildren(children);
6948          children.add(new Property("type", "CodeableConcept", "The kind of classifier (e.g. publication type, keyword).", 0, 1, type));
6949          children.add(new Property("classifier", "CodeableConcept", "The specific classification value.", 0, java.lang.Integer.MAX_VALUE, classifier));
6950          children.add(new Property("artifactAssessment", "Reference(ArtifactAssessment)", "Complex or externally created classification.", 0, java.lang.Integer.MAX_VALUE, artifactAssessment));
6951        }
6952
6953        @Override
6954        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
6955          switch (_hash) {
6956          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "The kind of classifier (e.g. publication type, keyword).", 0, 1, type);
6957          case -281470431: /*classifier*/  return new Property("classifier", "CodeableConcept", "The specific classification value.", 0, java.lang.Integer.MAX_VALUE, classifier);
6958          case 1014987316: /*artifactAssessment*/  return new Property("artifactAssessment", "Reference(ArtifactAssessment)", "Complex or externally created classification.", 0, java.lang.Integer.MAX_VALUE, artifactAssessment);
6959          default: return super.getNamedProperty(_hash, _name, _checkValid);
6960          }
6961
6962        }
6963
6964      @Override
6965      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
6966        switch (hash) {
6967        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
6968        case -281470431: /*classifier*/ return this.classifier == null ? new Base[0] : this.classifier.toArray(new Base[this.classifier.size()]); // CodeableConcept
6969        case 1014987316: /*artifactAssessment*/ return this.artifactAssessment == null ? new Base[0] : this.artifactAssessment.toArray(new Base[this.artifactAssessment.size()]); // Reference
6970        default: return super.getProperty(hash, name, checkValid);
6971        }
6972
6973      }
6974
6975      @Override
6976      public Base setProperty(int hash, String name, Base value) throws FHIRException {
6977        switch (hash) {
6978        case 3575610: // type
6979          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
6980          return value;
6981        case -281470431: // classifier
6982          this.getClassifier().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
6983          return value;
6984        case 1014987316: // artifactAssessment
6985          this.getArtifactAssessment().add(TypeConvertor.castToReference(value)); // Reference
6986          return value;
6987        default: return super.setProperty(hash, name, value);
6988        }
6989
6990      }
6991
6992      @Override
6993      public Base setProperty(String name, Base value) throws FHIRException {
6994        if (name.equals("type")) {
6995          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
6996        } else if (name.equals("classifier")) {
6997          this.getClassifier().add(TypeConvertor.castToCodeableConcept(value));
6998        } else if (name.equals("artifactAssessment")) {
6999          this.getArtifactAssessment().add(TypeConvertor.castToReference(value));
7000        } else
7001          return super.setProperty(name, value);
7002        return value;
7003      }
7004
7005  @Override
7006  public void removeChild(String name, Base value) throws FHIRException {
7007        if (name.equals("type")) {
7008          this.type = null;
7009        } else if (name.equals("classifier")) {
7010          this.getClassifier().remove(value);
7011        } else if (name.equals("artifactAssessment")) {
7012          this.getArtifactAssessment().remove(value);
7013        } else
7014          super.removeChild(name, value);
7015        
7016      }
7017
7018      @Override
7019      public Base makeProperty(int hash, String name) throws FHIRException {
7020        switch (hash) {
7021        case 3575610:  return getType();
7022        case -281470431:  return addClassifier(); 
7023        case 1014987316:  return addArtifactAssessment(); 
7024        default: return super.makeProperty(hash, name);
7025        }
7026
7027      }
7028
7029      @Override
7030      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
7031        switch (hash) {
7032        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
7033        case -281470431: /*classifier*/ return new String[] {"CodeableConcept"};
7034        case 1014987316: /*artifactAssessment*/ return new String[] {"Reference"};
7035        default: return super.getTypesForProperty(hash, name);
7036        }
7037
7038      }
7039
7040      @Override
7041      public Base addChild(String name) throws FHIRException {
7042        if (name.equals("type")) {
7043          this.type = new CodeableConcept();
7044          return this.type;
7045        }
7046        else if (name.equals("classifier")) {
7047          return addClassifier();
7048        }
7049        else if (name.equals("artifactAssessment")) {
7050          return addArtifactAssessment();
7051        }
7052        else
7053          return super.addChild(name);
7054      }
7055
7056      public CitationCitedArtifactClassificationComponent copy() {
7057        CitationCitedArtifactClassificationComponent dst = new CitationCitedArtifactClassificationComponent();
7058        copyValues(dst);
7059        return dst;
7060      }
7061
7062      public void copyValues(CitationCitedArtifactClassificationComponent dst) {
7063        super.copyValues(dst);
7064        dst.type = type == null ? null : type.copy();
7065        if (classifier != null) {
7066          dst.classifier = new ArrayList<CodeableConcept>();
7067          for (CodeableConcept i : classifier)
7068            dst.classifier.add(i.copy());
7069        };
7070        if (artifactAssessment != null) {
7071          dst.artifactAssessment = new ArrayList<Reference>();
7072          for (Reference i : artifactAssessment)
7073            dst.artifactAssessment.add(i.copy());
7074        };
7075      }
7076
7077      @Override
7078      public boolean equalsDeep(Base other_) {
7079        if (!super.equalsDeep(other_))
7080          return false;
7081        if (!(other_ instanceof CitationCitedArtifactClassificationComponent))
7082          return false;
7083        CitationCitedArtifactClassificationComponent o = (CitationCitedArtifactClassificationComponent) other_;
7084        return compareDeep(type, o.type, true) && compareDeep(classifier, o.classifier, true) && compareDeep(artifactAssessment, o.artifactAssessment, true)
7085          ;
7086      }
7087
7088      @Override
7089      public boolean equalsShallow(Base other_) {
7090        if (!super.equalsShallow(other_))
7091          return false;
7092        if (!(other_ instanceof CitationCitedArtifactClassificationComponent))
7093          return false;
7094        CitationCitedArtifactClassificationComponent o = (CitationCitedArtifactClassificationComponent) other_;
7095        return true;
7096      }
7097
7098      public boolean isEmpty() {
7099        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, classifier, artifactAssessment
7100          );
7101      }
7102
7103  public String fhirType() {
7104    return "Citation.citedArtifact.classification";
7105
7106  }
7107
7108  }
7109
7110    @Block()
7111    public static class CitationCitedArtifactContributorshipComponent extends BackboneElement implements IBaseBackboneElement {
7112        /**
7113         * Indicates if the list includes all authors and/or contributors.
7114         */
7115        @Child(name = "complete", type = {BooleanType.class}, order=1, min=0, max=1, modifier=false, summary=false)
7116        @Description(shortDefinition="Indicates if the list includes all authors and/or contributors", formalDefinition="Indicates if the list includes all authors and/or contributors." )
7117        protected BooleanType complete;
7118
7119        /**
7120         * An individual entity named as a contributor, for example in the author list or contributor list.
7121         */
7122        @Child(name = "entry", type = {}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
7123        @Description(shortDefinition="An individual entity named as a contributor", formalDefinition="An individual entity named as a contributor, for example in the author list or contributor list." )
7124        protected List<CitationCitedArtifactContributorshipEntryComponent> entry;
7125
7126        /**
7127         * Used to record a display of the author/contributor list without separate data element for each list member.
7128         */
7129        @Child(name = "summary", type = {}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
7130        @Description(shortDefinition="Used to record a display of the author/contributor list without separate data element for each list member", formalDefinition="Used to record a display of the author/contributor list without separate data element for each list member." )
7131        protected List<ContributorshipSummaryComponent> summary;
7132
7133        private static final long serialVersionUID = 662810405L;
7134
7135    /**
7136     * Constructor
7137     */
7138      public CitationCitedArtifactContributorshipComponent() {
7139        super();
7140      }
7141
7142        /**
7143         * @return {@link #complete} (Indicates if the list includes all authors and/or contributors.). This is the underlying object with id, value and extensions. The accessor "getComplete" gives direct access to the value
7144         */
7145        public BooleanType getCompleteElement() { 
7146          if (this.complete == null)
7147            if (Configuration.errorOnAutoCreate())
7148              throw new Error("Attempt to auto-create CitationCitedArtifactContributorshipComponent.complete");
7149            else if (Configuration.doAutoCreate())
7150              this.complete = new BooleanType(); // bb
7151          return this.complete;
7152        }
7153
7154        public boolean hasCompleteElement() { 
7155          return this.complete != null && !this.complete.isEmpty();
7156        }
7157
7158        public boolean hasComplete() { 
7159          return this.complete != null && !this.complete.isEmpty();
7160        }
7161
7162        /**
7163         * @param value {@link #complete} (Indicates if the list includes all authors and/or contributors.). This is the underlying object with id, value and extensions. The accessor "getComplete" gives direct access to the value
7164         */
7165        public CitationCitedArtifactContributorshipComponent setCompleteElement(BooleanType value) { 
7166          this.complete = value;
7167          return this;
7168        }
7169
7170        /**
7171         * @return Indicates if the list includes all authors and/or contributors.
7172         */
7173        public boolean getComplete() { 
7174          return this.complete == null || this.complete.isEmpty() ? false : this.complete.getValue();
7175        }
7176
7177        /**
7178         * @param value Indicates if the list includes all authors and/or contributors.
7179         */
7180        public CitationCitedArtifactContributorshipComponent setComplete(boolean value) { 
7181            if (this.complete == null)
7182              this.complete = new BooleanType();
7183            this.complete.setValue(value);
7184          return this;
7185        }
7186
7187        /**
7188         * @return {@link #entry} (An individual entity named as a contributor, for example in the author list or contributor list.)
7189         */
7190        public List<CitationCitedArtifactContributorshipEntryComponent> getEntry() { 
7191          if (this.entry == null)
7192            this.entry = new ArrayList<CitationCitedArtifactContributorshipEntryComponent>();
7193          return this.entry;
7194        }
7195
7196        /**
7197         * @return Returns a reference to <code>this</code> for easy method chaining
7198         */
7199        public CitationCitedArtifactContributorshipComponent setEntry(List<CitationCitedArtifactContributorshipEntryComponent> theEntry) { 
7200          this.entry = theEntry;
7201          return this;
7202        }
7203
7204        public boolean hasEntry() { 
7205          if (this.entry == null)
7206            return false;
7207          for (CitationCitedArtifactContributorshipEntryComponent item : this.entry)
7208            if (!item.isEmpty())
7209              return true;
7210          return false;
7211        }
7212
7213        public CitationCitedArtifactContributorshipEntryComponent addEntry() { //3
7214          CitationCitedArtifactContributorshipEntryComponent t = new CitationCitedArtifactContributorshipEntryComponent();
7215          if (this.entry == null)
7216            this.entry = new ArrayList<CitationCitedArtifactContributorshipEntryComponent>();
7217          this.entry.add(t);
7218          return t;
7219        }
7220
7221        public CitationCitedArtifactContributorshipComponent addEntry(CitationCitedArtifactContributorshipEntryComponent t) { //3
7222          if (t == null)
7223            return this;
7224          if (this.entry == null)
7225            this.entry = new ArrayList<CitationCitedArtifactContributorshipEntryComponent>();
7226          this.entry.add(t);
7227          return this;
7228        }
7229
7230        /**
7231         * @return The first repetition of repeating field {@link #entry}, creating it if it does not already exist {3}
7232         */
7233        public CitationCitedArtifactContributorshipEntryComponent getEntryFirstRep() { 
7234          if (getEntry().isEmpty()) {
7235            addEntry();
7236          }
7237          return getEntry().get(0);
7238        }
7239
7240        /**
7241         * @return {@link #summary} (Used to record a display of the author/contributor list without separate data element for each list member.)
7242         */
7243        public List<ContributorshipSummaryComponent> getSummary() { 
7244          if (this.summary == null)
7245            this.summary = new ArrayList<ContributorshipSummaryComponent>();
7246          return this.summary;
7247        }
7248
7249        /**
7250         * @return Returns a reference to <code>this</code> for easy method chaining
7251         */
7252        public CitationCitedArtifactContributorshipComponent setSummary(List<ContributorshipSummaryComponent> theSummary) { 
7253          this.summary = theSummary;
7254          return this;
7255        }
7256
7257        public boolean hasSummary() { 
7258          if (this.summary == null)
7259            return false;
7260          for (ContributorshipSummaryComponent item : this.summary)
7261            if (!item.isEmpty())
7262              return true;
7263          return false;
7264        }
7265
7266        public ContributorshipSummaryComponent addSummary() { //3
7267          ContributorshipSummaryComponent t = new ContributorshipSummaryComponent();
7268          if (this.summary == null)
7269            this.summary = new ArrayList<ContributorshipSummaryComponent>();
7270          this.summary.add(t);
7271          return t;
7272        }
7273
7274        public CitationCitedArtifactContributorshipComponent addSummary(ContributorshipSummaryComponent t) { //3
7275          if (t == null)
7276            return this;
7277          if (this.summary == null)
7278            this.summary = new ArrayList<ContributorshipSummaryComponent>();
7279          this.summary.add(t);
7280          return this;
7281        }
7282
7283        /**
7284         * @return The first repetition of repeating field {@link #summary}, creating it if it does not already exist {3}
7285         */
7286        public ContributorshipSummaryComponent getSummaryFirstRep() { 
7287          if (getSummary().isEmpty()) {
7288            addSummary();
7289          }
7290          return getSummary().get(0);
7291        }
7292
7293        protected void listChildren(List<Property> children) {
7294          super.listChildren(children);
7295          children.add(new Property("complete", "boolean", "Indicates if the list includes all authors and/or contributors.", 0, 1, complete));
7296          children.add(new Property("entry", "", "An individual entity named as a contributor, for example in the author list or contributor list.", 0, java.lang.Integer.MAX_VALUE, entry));
7297          children.add(new Property("summary", "", "Used to record a display of the author/contributor list without separate data element for each list member.", 0, java.lang.Integer.MAX_VALUE, summary));
7298        }
7299
7300        @Override
7301        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
7302          switch (_hash) {
7303          case -599445191: /*complete*/  return new Property("complete", "boolean", "Indicates if the list includes all authors and/or contributors.", 0, 1, complete);
7304          case 96667762: /*entry*/  return new Property("entry", "", "An individual entity named as a contributor, for example in the author list or contributor list.", 0, java.lang.Integer.MAX_VALUE, entry);
7305          case -1857640538: /*summary*/  return new Property("summary", "", "Used to record a display of the author/contributor list without separate data element for each list member.", 0, java.lang.Integer.MAX_VALUE, summary);
7306          default: return super.getNamedProperty(_hash, _name, _checkValid);
7307          }
7308
7309        }
7310
7311      @Override
7312      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
7313        switch (hash) {
7314        case -599445191: /*complete*/ return this.complete == null ? new Base[0] : new Base[] {this.complete}; // BooleanType
7315        case 96667762: /*entry*/ return this.entry == null ? new Base[0] : this.entry.toArray(new Base[this.entry.size()]); // CitationCitedArtifactContributorshipEntryComponent
7316        case -1857640538: /*summary*/ return this.summary == null ? new Base[0] : this.summary.toArray(new Base[this.summary.size()]); // ContributorshipSummaryComponent
7317        default: return super.getProperty(hash, name, checkValid);
7318        }
7319
7320      }
7321
7322      @Override
7323      public Base setProperty(int hash, String name, Base value) throws FHIRException {
7324        switch (hash) {
7325        case -599445191: // complete
7326          this.complete = TypeConvertor.castToBoolean(value); // BooleanType
7327          return value;
7328        case 96667762: // entry
7329          this.getEntry().add((CitationCitedArtifactContributorshipEntryComponent) value); // CitationCitedArtifactContributorshipEntryComponent
7330          return value;
7331        case -1857640538: // summary
7332          this.getSummary().add((ContributorshipSummaryComponent) value); // ContributorshipSummaryComponent
7333          return value;
7334        default: return super.setProperty(hash, name, value);
7335        }
7336
7337      }
7338
7339      @Override
7340      public Base setProperty(String name, Base value) throws FHIRException {
7341        if (name.equals("complete")) {
7342          this.complete = TypeConvertor.castToBoolean(value); // BooleanType
7343        } else if (name.equals("entry")) {
7344          this.getEntry().add((CitationCitedArtifactContributorshipEntryComponent) value);
7345        } else if (name.equals("summary")) {
7346          this.getSummary().add((ContributorshipSummaryComponent) value);
7347        } else
7348          return super.setProperty(name, value);
7349        return value;
7350      }
7351
7352  @Override
7353  public void removeChild(String name, Base value) throws FHIRException {
7354        if (name.equals("complete")) {
7355          this.complete = null;
7356        } else if (name.equals("entry")) {
7357          this.getEntry().remove((CitationCitedArtifactContributorshipEntryComponent) value);
7358        } else if (name.equals("summary")) {
7359          this.getSummary().remove((ContributorshipSummaryComponent) value);
7360        } else
7361          super.removeChild(name, value);
7362        
7363      }
7364
7365      @Override
7366      public Base makeProperty(int hash, String name) throws FHIRException {
7367        switch (hash) {
7368        case -599445191:  return getCompleteElement();
7369        case 96667762:  return addEntry(); 
7370        case -1857640538:  return addSummary(); 
7371        default: return super.makeProperty(hash, name);
7372        }
7373
7374      }
7375
7376      @Override
7377      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
7378        switch (hash) {
7379        case -599445191: /*complete*/ return new String[] {"boolean"};
7380        case 96667762: /*entry*/ return new String[] {};
7381        case -1857640538: /*summary*/ return new String[] {};
7382        default: return super.getTypesForProperty(hash, name);
7383        }
7384
7385      }
7386
7387      @Override
7388      public Base addChild(String name) throws FHIRException {
7389        if (name.equals("complete")) {
7390          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.contributorship.complete");
7391        }
7392        else if (name.equals("entry")) {
7393          return addEntry();
7394        }
7395        else if (name.equals("summary")) {
7396          return addSummary();
7397        }
7398        else
7399          return super.addChild(name);
7400      }
7401
7402      public CitationCitedArtifactContributorshipComponent copy() {
7403        CitationCitedArtifactContributorshipComponent dst = new CitationCitedArtifactContributorshipComponent();
7404        copyValues(dst);
7405        return dst;
7406      }
7407
7408      public void copyValues(CitationCitedArtifactContributorshipComponent dst) {
7409        super.copyValues(dst);
7410        dst.complete = complete == null ? null : complete.copy();
7411        if (entry != null) {
7412          dst.entry = new ArrayList<CitationCitedArtifactContributorshipEntryComponent>();
7413          for (CitationCitedArtifactContributorshipEntryComponent i : entry)
7414            dst.entry.add(i.copy());
7415        };
7416        if (summary != null) {
7417          dst.summary = new ArrayList<ContributorshipSummaryComponent>();
7418          for (ContributorshipSummaryComponent i : summary)
7419            dst.summary.add(i.copy());
7420        };
7421      }
7422
7423      @Override
7424      public boolean equalsDeep(Base other_) {
7425        if (!super.equalsDeep(other_))
7426          return false;
7427        if (!(other_ instanceof CitationCitedArtifactContributorshipComponent))
7428          return false;
7429        CitationCitedArtifactContributorshipComponent o = (CitationCitedArtifactContributorshipComponent) other_;
7430        return compareDeep(complete, o.complete, true) && compareDeep(entry, o.entry, true) && compareDeep(summary, o.summary, true)
7431          ;
7432      }
7433
7434      @Override
7435      public boolean equalsShallow(Base other_) {
7436        if (!super.equalsShallow(other_))
7437          return false;
7438        if (!(other_ instanceof CitationCitedArtifactContributorshipComponent))
7439          return false;
7440        CitationCitedArtifactContributorshipComponent o = (CitationCitedArtifactContributorshipComponent) other_;
7441        return compareValues(complete, o.complete, true);
7442      }
7443
7444      public boolean isEmpty() {
7445        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(complete, entry, summary
7446          );
7447      }
7448
7449  public String fhirType() {
7450    return "Citation.citedArtifact.contributorship";
7451
7452  }
7453
7454  }
7455
7456    @Block()
7457    public static class CitationCitedArtifactContributorshipEntryComponent extends BackboneElement implements IBaseBackboneElement {
7458        /**
7459         * The identity of the individual contributor.
7460         */
7461        @Child(name = "contributor", type = {Practitioner.class, Organization.class}, order=1, min=1, max=1, modifier=false, summary=false)
7462        @Description(shortDefinition="The identity of the individual contributor", formalDefinition="The identity of the individual contributor." )
7463        protected Reference contributor;
7464
7465        /**
7466         * For citation styles that use initials.
7467         */
7468        @Child(name = "forenameInitials", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
7469        @Description(shortDefinition="For citation styles that use initials", formalDefinition="For citation styles that use initials." )
7470        protected StringType forenameInitials;
7471
7472        /**
7473         * Organization affiliated with the contributor.
7474         */
7475        @Child(name = "affiliation", type = {Organization.class, PractitionerRole.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
7476        @Description(shortDefinition="Organizational affiliation", formalDefinition="Organization affiliated with the contributor." )
7477        protected List<Reference> affiliation;
7478
7479        /**
7480         * This element identifies the specific nature of an individual?s contribution with respect to the cited work.
7481         */
7482        @Child(name = "contributionType", type = {CodeableConcept.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
7483        @Description(shortDefinition="The specific contribution", formalDefinition="This element identifies the specific nature of an individual?s contribution with respect to the cited work." )
7484        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/artifact-contribution-type")
7485        protected List<CodeableConcept> contributionType;
7486
7487        /**
7488         * The role of the contributor (e.g. author, editor, reviewer, funder).
7489         */
7490        @Child(name = "role", type = {CodeableConcept.class}, order=5, min=0, max=1, modifier=false, summary=false)
7491        @Description(shortDefinition="The role of the contributor (e.g. author, editor, reviewer, funder)", formalDefinition="The role of the contributor (e.g. author, editor, reviewer, funder)." )
7492        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/contributor-role")
7493        protected CodeableConcept role;
7494
7495        /**
7496         * Contributions with accounting for time or number.
7497         */
7498        @Child(name = "contributionInstance", type = {}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
7499        @Description(shortDefinition="Contributions with accounting for time or number", formalDefinition="Contributions with accounting for time or number." )
7500        protected List<CitationCitedArtifactContributorshipEntryContributionInstanceComponent> contributionInstance;
7501
7502        /**
7503         * Whether the contributor is the corresponding contributor for the role.
7504         */
7505        @Child(name = "correspondingContact", type = {BooleanType.class}, order=7, min=0, max=1, modifier=false, summary=false)
7506        @Description(shortDefinition="Whether the contributor is the corresponding contributor for the role", formalDefinition="Whether the contributor is the corresponding contributor for the role." )
7507        protected BooleanType correspondingContact;
7508
7509        /**
7510         * Provides a numerical ranking to represent the degree of contributorship relative to other contributors, such as 1 for first author and 2 for second author.
7511         */
7512        @Child(name = "rankingOrder", type = {PositiveIntType.class}, order=8, min=0, max=1, modifier=false, summary=false)
7513        @Description(shortDefinition="Ranked order of contribution", formalDefinition="Provides a numerical ranking to represent the degree of contributorship relative to other contributors, such as 1 for first author and 2 for second author." )
7514        protected PositiveIntType rankingOrder;
7515
7516        private static final long serialVersionUID = 1654594857L;
7517
7518    /**
7519     * Constructor
7520     */
7521      public CitationCitedArtifactContributorshipEntryComponent() {
7522        super();
7523      }
7524
7525    /**
7526     * Constructor
7527     */
7528      public CitationCitedArtifactContributorshipEntryComponent(Reference contributor) {
7529        super();
7530        this.setContributor(contributor);
7531      }
7532
7533        /**
7534         * @return {@link #contributor} (The identity of the individual contributor.)
7535         */
7536        public Reference getContributor() { 
7537          if (this.contributor == null)
7538            if (Configuration.errorOnAutoCreate())
7539              throw new Error("Attempt to auto-create CitationCitedArtifactContributorshipEntryComponent.contributor");
7540            else if (Configuration.doAutoCreate())
7541              this.contributor = new Reference(); // cc
7542          return this.contributor;
7543        }
7544
7545        public boolean hasContributor() { 
7546          return this.contributor != null && !this.contributor.isEmpty();
7547        }
7548
7549        /**
7550         * @param value {@link #contributor} (The identity of the individual contributor.)
7551         */
7552        public CitationCitedArtifactContributorshipEntryComponent setContributor(Reference value) { 
7553          this.contributor = value;
7554          return this;
7555        }
7556
7557        /**
7558         * @return {@link #forenameInitials} (For citation styles that use initials.). This is the underlying object with id, value and extensions. The accessor "getForenameInitials" gives direct access to the value
7559         */
7560        public StringType getForenameInitialsElement() { 
7561          if (this.forenameInitials == null)
7562            if (Configuration.errorOnAutoCreate())
7563              throw new Error("Attempt to auto-create CitationCitedArtifactContributorshipEntryComponent.forenameInitials");
7564            else if (Configuration.doAutoCreate())
7565              this.forenameInitials = new StringType(); // bb
7566          return this.forenameInitials;
7567        }
7568
7569        public boolean hasForenameInitialsElement() { 
7570          return this.forenameInitials != null && !this.forenameInitials.isEmpty();
7571        }
7572
7573        public boolean hasForenameInitials() { 
7574          return this.forenameInitials != null && !this.forenameInitials.isEmpty();
7575        }
7576
7577        /**
7578         * @param value {@link #forenameInitials} (For citation styles that use initials.). This is the underlying object with id, value and extensions. The accessor "getForenameInitials" gives direct access to the value
7579         */
7580        public CitationCitedArtifactContributorshipEntryComponent setForenameInitialsElement(StringType value) { 
7581          this.forenameInitials = value;
7582          return this;
7583        }
7584
7585        /**
7586         * @return For citation styles that use initials.
7587         */
7588        public String getForenameInitials() { 
7589          return this.forenameInitials == null ? null : this.forenameInitials.getValue();
7590        }
7591
7592        /**
7593         * @param value For citation styles that use initials.
7594         */
7595        public CitationCitedArtifactContributorshipEntryComponent setForenameInitials(String value) { 
7596          if (Utilities.noString(value))
7597            this.forenameInitials = null;
7598          else {
7599            if (this.forenameInitials == null)
7600              this.forenameInitials = new StringType();
7601            this.forenameInitials.setValue(value);
7602          }
7603          return this;
7604        }
7605
7606        /**
7607         * @return {@link #affiliation} (Organization affiliated with the contributor.)
7608         */
7609        public List<Reference> getAffiliation() { 
7610          if (this.affiliation == null)
7611            this.affiliation = new ArrayList<Reference>();
7612          return this.affiliation;
7613        }
7614
7615        /**
7616         * @return Returns a reference to <code>this</code> for easy method chaining
7617         */
7618        public CitationCitedArtifactContributorshipEntryComponent setAffiliation(List<Reference> theAffiliation) { 
7619          this.affiliation = theAffiliation;
7620          return this;
7621        }
7622
7623        public boolean hasAffiliation() { 
7624          if (this.affiliation == null)
7625            return false;
7626          for (Reference item : this.affiliation)
7627            if (!item.isEmpty())
7628              return true;
7629          return false;
7630        }
7631
7632        public Reference addAffiliation() { //3
7633          Reference t = new Reference();
7634          if (this.affiliation == null)
7635            this.affiliation = new ArrayList<Reference>();
7636          this.affiliation.add(t);
7637          return t;
7638        }
7639
7640        public CitationCitedArtifactContributorshipEntryComponent addAffiliation(Reference t) { //3
7641          if (t == null)
7642            return this;
7643          if (this.affiliation == null)
7644            this.affiliation = new ArrayList<Reference>();
7645          this.affiliation.add(t);
7646          return this;
7647        }
7648
7649        /**
7650         * @return The first repetition of repeating field {@link #affiliation}, creating it if it does not already exist {3}
7651         */
7652        public Reference getAffiliationFirstRep() { 
7653          if (getAffiliation().isEmpty()) {
7654            addAffiliation();
7655          }
7656          return getAffiliation().get(0);
7657        }
7658
7659        /**
7660         * @return {@link #contributionType} (This element identifies the specific nature of an individual?s contribution with respect to the cited work.)
7661         */
7662        public List<CodeableConcept> getContributionType() { 
7663          if (this.contributionType == null)
7664            this.contributionType = new ArrayList<CodeableConcept>();
7665          return this.contributionType;
7666        }
7667
7668        /**
7669         * @return Returns a reference to <code>this</code> for easy method chaining
7670         */
7671        public CitationCitedArtifactContributorshipEntryComponent setContributionType(List<CodeableConcept> theContributionType) { 
7672          this.contributionType = theContributionType;
7673          return this;
7674        }
7675
7676        public boolean hasContributionType() { 
7677          if (this.contributionType == null)
7678            return false;
7679          for (CodeableConcept item : this.contributionType)
7680            if (!item.isEmpty())
7681              return true;
7682          return false;
7683        }
7684
7685        public CodeableConcept addContributionType() { //3
7686          CodeableConcept t = new CodeableConcept();
7687          if (this.contributionType == null)
7688            this.contributionType = new ArrayList<CodeableConcept>();
7689          this.contributionType.add(t);
7690          return t;
7691        }
7692
7693        public CitationCitedArtifactContributorshipEntryComponent addContributionType(CodeableConcept t) { //3
7694          if (t == null)
7695            return this;
7696          if (this.contributionType == null)
7697            this.contributionType = new ArrayList<CodeableConcept>();
7698          this.contributionType.add(t);
7699          return this;
7700        }
7701
7702        /**
7703         * @return The first repetition of repeating field {@link #contributionType}, creating it if it does not already exist {3}
7704         */
7705        public CodeableConcept getContributionTypeFirstRep() { 
7706          if (getContributionType().isEmpty()) {
7707            addContributionType();
7708          }
7709          return getContributionType().get(0);
7710        }
7711
7712        /**
7713         * @return {@link #role} (The role of the contributor (e.g. author, editor, reviewer, funder).)
7714         */
7715        public CodeableConcept getRole() { 
7716          if (this.role == null)
7717            if (Configuration.errorOnAutoCreate())
7718              throw new Error("Attempt to auto-create CitationCitedArtifactContributorshipEntryComponent.role");
7719            else if (Configuration.doAutoCreate())
7720              this.role = new CodeableConcept(); // cc
7721          return this.role;
7722        }
7723
7724        public boolean hasRole() { 
7725          return this.role != null && !this.role.isEmpty();
7726        }
7727
7728        /**
7729         * @param value {@link #role} (The role of the contributor (e.g. author, editor, reviewer, funder).)
7730         */
7731        public CitationCitedArtifactContributorshipEntryComponent setRole(CodeableConcept value) { 
7732          this.role = value;
7733          return this;
7734        }
7735
7736        /**
7737         * @return {@link #contributionInstance} (Contributions with accounting for time or number.)
7738         */
7739        public List<CitationCitedArtifactContributorshipEntryContributionInstanceComponent> getContributionInstance() { 
7740          if (this.contributionInstance == null)
7741            this.contributionInstance = new ArrayList<CitationCitedArtifactContributorshipEntryContributionInstanceComponent>();
7742          return this.contributionInstance;
7743        }
7744
7745        /**
7746         * @return Returns a reference to <code>this</code> for easy method chaining
7747         */
7748        public CitationCitedArtifactContributorshipEntryComponent setContributionInstance(List<CitationCitedArtifactContributorshipEntryContributionInstanceComponent> theContributionInstance) { 
7749          this.contributionInstance = theContributionInstance;
7750          return this;
7751        }
7752
7753        public boolean hasContributionInstance() { 
7754          if (this.contributionInstance == null)
7755            return false;
7756          for (CitationCitedArtifactContributorshipEntryContributionInstanceComponent item : this.contributionInstance)
7757            if (!item.isEmpty())
7758              return true;
7759          return false;
7760        }
7761
7762        public CitationCitedArtifactContributorshipEntryContributionInstanceComponent addContributionInstance() { //3
7763          CitationCitedArtifactContributorshipEntryContributionInstanceComponent t = new CitationCitedArtifactContributorshipEntryContributionInstanceComponent();
7764          if (this.contributionInstance == null)
7765            this.contributionInstance = new ArrayList<CitationCitedArtifactContributorshipEntryContributionInstanceComponent>();
7766          this.contributionInstance.add(t);
7767          return t;
7768        }
7769
7770        public CitationCitedArtifactContributorshipEntryComponent addContributionInstance(CitationCitedArtifactContributorshipEntryContributionInstanceComponent t) { //3
7771          if (t == null)
7772            return this;
7773          if (this.contributionInstance == null)
7774            this.contributionInstance = new ArrayList<CitationCitedArtifactContributorshipEntryContributionInstanceComponent>();
7775          this.contributionInstance.add(t);
7776          return this;
7777        }
7778
7779        /**
7780         * @return The first repetition of repeating field {@link #contributionInstance}, creating it if it does not already exist {3}
7781         */
7782        public CitationCitedArtifactContributorshipEntryContributionInstanceComponent getContributionInstanceFirstRep() { 
7783          if (getContributionInstance().isEmpty()) {
7784            addContributionInstance();
7785          }
7786          return getContributionInstance().get(0);
7787        }
7788
7789        /**
7790         * @return {@link #correspondingContact} (Whether the contributor is the corresponding contributor for the role.). This is the underlying object with id, value and extensions. The accessor "getCorrespondingContact" gives direct access to the value
7791         */
7792        public BooleanType getCorrespondingContactElement() { 
7793          if (this.correspondingContact == null)
7794            if (Configuration.errorOnAutoCreate())
7795              throw new Error("Attempt to auto-create CitationCitedArtifactContributorshipEntryComponent.correspondingContact");
7796            else if (Configuration.doAutoCreate())
7797              this.correspondingContact = new BooleanType(); // bb
7798          return this.correspondingContact;
7799        }
7800
7801        public boolean hasCorrespondingContactElement() { 
7802          return this.correspondingContact != null && !this.correspondingContact.isEmpty();
7803        }
7804
7805        public boolean hasCorrespondingContact() { 
7806          return this.correspondingContact != null && !this.correspondingContact.isEmpty();
7807        }
7808
7809        /**
7810         * @param value {@link #correspondingContact} (Whether the contributor is the corresponding contributor for the role.). This is the underlying object with id, value and extensions. The accessor "getCorrespondingContact" gives direct access to the value
7811         */
7812        public CitationCitedArtifactContributorshipEntryComponent setCorrespondingContactElement(BooleanType value) { 
7813          this.correspondingContact = value;
7814          return this;
7815        }
7816
7817        /**
7818         * @return Whether the contributor is the corresponding contributor for the role.
7819         */
7820        public boolean getCorrespondingContact() { 
7821          return this.correspondingContact == null || this.correspondingContact.isEmpty() ? false : this.correspondingContact.getValue();
7822        }
7823
7824        /**
7825         * @param value Whether the contributor is the corresponding contributor for the role.
7826         */
7827        public CitationCitedArtifactContributorshipEntryComponent setCorrespondingContact(boolean value) { 
7828            if (this.correspondingContact == null)
7829              this.correspondingContact = new BooleanType();
7830            this.correspondingContact.setValue(value);
7831          return this;
7832        }
7833
7834        /**
7835         * @return {@link #rankingOrder} (Provides a numerical ranking to represent the degree of contributorship relative to other contributors, such as 1 for first author and 2 for second author.). This is the underlying object with id, value and extensions. The accessor "getRankingOrder" gives direct access to the value
7836         */
7837        public PositiveIntType getRankingOrderElement() { 
7838          if (this.rankingOrder == null)
7839            if (Configuration.errorOnAutoCreate())
7840              throw new Error("Attempt to auto-create CitationCitedArtifactContributorshipEntryComponent.rankingOrder");
7841            else if (Configuration.doAutoCreate())
7842              this.rankingOrder = new PositiveIntType(); // bb
7843          return this.rankingOrder;
7844        }
7845
7846        public boolean hasRankingOrderElement() { 
7847          return this.rankingOrder != null && !this.rankingOrder.isEmpty();
7848        }
7849
7850        public boolean hasRankingOrder() { 
7851          return this.rankingOrder != null && !this.rankingOrder.isEmpty();
7852        }
7853
7854        /**
7855         * @param value {@link #rankingOrder} (Provides a numerical ranking to represent the degree of contributorship relative to other contributors, such as 1 for first author and 2 for second author.). This is the underlying object with id, value and extensions. The accessor "getRankingOrder" gives direct access to the value
7856         */
7857        public CitationCitedArtifactContributorshipEntryComponent setRankingOrderElement(PositiveIntType value) { 
7858          this.rankingOrder = value;
7859          return this;
7860        }
7861
7862        /**
7863         * @return Provides a numerical ranking to represent the degree of contributorship relative to other contributors, such as 1 for first author and 2 for second author.
7864         */
7865        public int getRankingOrder() { 
7866          return this.rankingOrder == null || this.rankingOrder.isEmpty() ? 0 : this.rankingOrder.getValue();
7867        }
7868
7869        /**
7870         * @param value Provides a numerical ranking to represent the degree of contributorship relative to other contributors, such as 1 for first author and 2 for second author.
7871         */
7872        public CitationCitedArtifactContributorshipEntryComponent setRankingOrder(int value) { 
7873            if (this.rankingOrder == null)
7874              this.rankingOrder = new PositiveIntType();
7875            this.rankingOrder.setValue(value);
7876          return this;
7877        }
7878
7879        protected void listChildren(List<Property> children) {
7880          super.listChildren(children);
7881          children.add(new Property("contributor", "Reference(Practitioner|Organization)", "The identity of the individual contributor.", 0, 1, contributor));
7882          children.add(new Property("forenameInitials", "string", "For citation styles that use initials.", 0, 1, forenameInitials));
7883          children.add(new Property("affiliation", "Reference(Organization|PractitionerRole)", "Organization affiliated with the contributor.", 0, java.lang.Integer.MAX_VALUE, affiliation));
7884          children.add(new Property("contributionType", "CodeableConcept", "This element identifies the specific nature of an individual?s contribution with respect to the cited work.", 0, java.lang.Integer.MAX_VALUE, contributionType));
7885          children.add(new Property("role", "CodeableConcept", "The role of the contributor (e.g. author, editor, reviewer, funder).", 0, 1, role));
7886          children.add(new Property("contributionInstance", "", "Contributions with accounting for time or number.", 0, java.lang.Integer.MAX_VALUE, contributionInstance));
7887          children.add(new Property("correspondingContact", "boolean", "Whether the contributor is the corresponding contributor for the role.", 0, 1, correspondingContact));
7888          children.add(new Property("rankingOrder", "positiveInt", "Provides a numerical ranking to represent the degree of contributorship relative to other contributors, such as 1 for first author and 2 for second author.", 0, 1, rankingOrder));
7889        }
7890
7891        @Override
7892        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
7893          switch (_hash) {
7894          case -1895276325: /*contributor*/  return new Property("contributor", "Reference(Practitioner|Organization)", "The identity of the individual contributor.", 0, 1, contributor);
7895          case -740521962: /*forenameInitials*/  return new Property("forenameInitials", "string", "For citation styles that use initials.", 0, 1, forenameInitials);
7896          case 2019918576: /*affiliation*/  return new Property("affiliation", "Reference(Organization|PractitionerRole)", "Organization affiliated with the contributor.", 0, java.lang.Integer.MAX_VALUE, affiliation);
7897          case -1600446614: /*contributionType*/  return new Property("contributionType", "CodeableConcept", "This element identifies the specific nature of an individual?s contribution with respect to the cited work.", 0, java.lang.Integer.MAX_VALUE, contributionType);
7898          case 3506294: /*role*/  return new Property("role", "CodeableConcept", "The role of the contributor (e.g. author, editor, reviewer, funder).", 0, 1, role);
7899          case -547910459: /*contributionInstance*/  return new Property("contributionInstance", "", "Contributions with accounting for time or number.", 0, java.lang.Integer.MAX_VALUE, contributionInstance);
7900          case -1816008851: /*correspondingContact*/  return new Property("correspondingContact", "boolean", "Whether the contributor is the corresponding contributor for the role.", 0, 1, correspondingContact);
7901          case -762905416: /*rankingOrder*/  return new Property("rankingOrder", "positiveInt", "Provides a numerical ranking to represent the degree of contributorship relative to other contributors, such as 1 for first author and 2 for second author.", 0, 1, rankingOrder);
7902          default: return super.getNamedProperty(_hash, _name, _checkValid);
7903          }
7904
7905        }
7906
7907      @Override
7908      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
7909        switch (hash) {
7910        case -1895276325: /*contributor*/ return this.contributor == null ? new Base[0] : new Base[] {this.contributor}; // Reference
7911        case -740521962: /*forenameInitials*/ return this.forenameInitials == null ? new Base[0] : new Base[] {this.forenameInitials}; // StringType
7912        case 2019918576: /*affiliation*/ return this.affiliation == null ? new Base[0] : this.affiliation.toArray(new Base[this.affiliation.size()]); // Reference
7913        case -1600446614: /*contributionType*/ return this.contributionType == null ? new Base[0] : this.contributionType.toArray(new Base[this.contributionType.size()]); // CodeableConcept
7914        case 3506294: /*role*/ return this.role == null ? new Base[0] : new Base[] {this.role}; // CodeableConcept
7915        case -547910459: /*contributionInstance*/ return this.contributionInstance == null ? new Base[0] : this.contributionInstance.toArray(new Base[this.contributionInstance.size()]); // CitationCitedArtifactContributorshipEntryContributionInstanceComponent
7916        case -1816008851: /*correspondingContact*/ return this.correspondingContact == null ? new Base[0] : new Base[] {this.correspondingContact}; // BooleanType
7917        case -762905416: /*rankingOrder*/ return this.rankingOrder == null ? new Base[0] : new Base[] {this.rankingOrder}; // PositiveIntType
7918        default: return super.getProperty(hash, name, checkValid);
7919        }
7920
7921      }
7922
7923      @Override
7924      public Base setProperty(int hash, String name, Base value) throws FHIRException {
7925        switch (hash) {
7926        case -1895276325: // contributor
7927          this.contributor = TypeConvertor.castToReference(value); // Reference
7928          return value;
7929        case -740521962: // forenameInitials
7930          this.forenameInitials = TypeConvertor.castToString(value); // StringType
7931          return value;
7932        case 2019918576: // affiliation
7933          this.getAffiliation().add(TypeConvertor.castToReference(value)); // Reference
7934          return value;
7935        case -1600446614: // contributionType
7936          this.getContributionType().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
7937          return value;
7938        case 3506294: // role
7939          this.role = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
7940          return value;
7941        case -547910459: // contributionInstance
7942          this.getContributionInstance().add((CitationCitedArtifactContributorshipEntryContributionInstanceComponent) value); // CitationCitedArtifactContributorshipEntryContributionInstanceComponent
7943          return value;
7944        case -1816008851: // correspondingContact
7945          this.correspondingContact = TypeConvertor.castToBoolean(value); // BooleanType
7946          return value;
7947        case -762905416: // rankingOrder
7948          this.rankingOrder = TypeConvertor.castToPositiveInt(value); // PositiveIntType
7949          return value;
7950        default: return super.setProperty(hash, name, value);
7951        }
7952
7953      }
7954
7955      @Override
7956      public Base setProperty(String name, Base value) throws FHIRException {
7957        if (name.equals("contributor")) {
7958          this.contributor = TypeConvertor.castToReference(value); // Reference
7959        } else if (name.equals("forenameInitials")) {
7960          this.forenameInitials = TypeConvertor.castToString(value); // StringType
7961        } else if (name.equals("affiliation")) {
7962          this.getAffiliation().add(TypeConvertor.castToReference(value));
7963        } else if (name.equals("contributionType")) {
7964          this.getContributionType().add(TypeConvertor.castToCodeableConcept(value));
7965        } else if (name.equals("role")) {
7966          this.role = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
7967        } else if (name.equals("contributionInstance")) {
7968          this.getContributionInstance().add((CitationCitedArtifactContributorshipEntryContributionInstanceComponent) value);
7969        } else if (name.equals("correspondingContact")) {
7970          this.correspondingContact = TypeConvertor.castToBoolean(value); // BooleanType
7971        } else if (name.equals("rankingOrder")) {
7972          this.rankingOrder = TypeConvertor.castToPositiveInt(value); // PositiveIntType
7973        } else
7974          return super.setProperty(name, value);
7975        return value;
7976      }
7977
7978  @Override
7979  public void removeChild(String name, Base value) throws FHIRException {
7980        if (name.equals("contributor")) {
7981          this.contributor = null;
7982        } else if (name.equals("forenameInitials")) {
7983          this.forenameInitials = null;
7984        } else if (name.equals("affiliation")) {
7985          this.getAffiliation().remove(value);
7986        } else if (name.equals("contributionType")) {
7987          this.getContributionType().remove(value);
7988        } else if (name.equals("role")) {
7989          this.role = null;
7990        } else if (name.equals("contributionInstance")) {
7991          this.getContributionInstance().remove((CitationCitedArtifactContributorshipEntryContributionInstanceComponent) value);
7992        } else if (name.equals("correspondingContact")) {
7993          this.correspondingContact = null;
7994        } else if (name.equals("rankingOrder")) {
7995          this.rankingOrder = null;
7996        } else
7997          super.removeChild(name, value);
7998        
7999      }
8000
8001      @Override
8002      public Base makeProperty(int hash, String name) throws FHIRException {
8003        switch (hash) {
8004        case -1895276325:  return getContributor();
8005        case -740521962:  return getForenameInitialsElement();
8006        case 2019918576:  return addAffiliation(); 
8007        case -1600446614:  return addContributionType(); 
8008        case 3506294:  return getRole();
8009        case -547910459:  return addContributionInstance(); 
8010        case -1816008851:  return getCorrespondingContactElement();
8011        case -762905416:  return getRankingOrderElement();
8012        default: return super.makeProperty(hash, name);
8013        }
8014
8015      }
8016
8017      @Override
8018      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
8019        switch (hash) {
8020        case -1895276325: /*contributor*/ return new String[] {"Reference"};
8021        case -740521962: /*forenameInitials*/ return new String[] {"string"};
8022        case 2019918576: /*affiliation*/ return new String[] {"Reference"};
8023        case -1600446614: /*contributionType*/ return new String[] {"CodeableConcept"};
8024        case 3506294: /*role*/ return new String[] {"CodeableConcept"};
8025        case -547910459: /*contributionInstance*/ return new String[] {};
8026        case -1816008851: /*correspondingContact*/ return new String[] {"boolean"};
8027        case -762905416: /*rankingOrder*/ return new String[] {"positiveInt"};
8028        default: return super.getTypesForProperty(hash, name);
8029        }
8030
8031      }
8032
8033      @Override
8034      public Base addChild(String name) throws FHIRException {
8035        if (name.equals("contributor")) {
8036          this.contributor = new Reference();
8037          return this.contributor;
8038        }
8039        else if (name.equals("forenameInitials")) {
8040          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.contributorship.entry.forenameInitials");
8041        }
8042        else if (name.equals("affiliation")) {
8043          return addAffiliation();
8044        }
8045        else if (name.equals("contributionType")) {
8046          return addContributionType();
8047        }
8048        else if (name.equals("role")) {
8049          this.role = new CodeableConcept();
8050          return this.role;
8051        }
8052        else if (name.equals("contributionInstance")) {
8053          return addContributionInstance();
8054        }
8055        else if (name.equals("correspondingContact")) {
8056          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.contributorship.entry.correspondingContact");
8057        }
8058        else if (name.equals("rankingOrder")) {
8059          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.contributorship.entry.rankingOrder");
8060        }
8061        else
8062          return super.addChild(name);
8063      }
8064
8065      public CitationCitedArtifactContributorshipEntryComponent copy() {
8066        CitationCitedArtifactContributorshipEntryComponent dst = new CitationCitedArtifactContributorshipEntryComponent();
8067        copyValues(dst);
8068        return dst;
8069      }
8070
8071      public void copyValues(CitationCitedArtifactContributorshipEntryComponent dst) {
8072        super.copyValues(dst);
8073        dst.contributor = contributor == null ? null : contributor.copy();
8074        dst.forenameInitials = forenameInitials == null ? null : forenameInitials.copy();
8075        if (affiliation != null) {
8076          dst.affiliation = new ArrayList<Reference>();
8077          for (Reference i : affiliation)
8078            dst.affiliation.add(i.copy());
8079        };
8080        if (contributionType != null) {
8081          dst.contributionType = new ArrayList<CodeableConcept>();
8082          for (CodeableConcept i : contributionType)
8083            dst.contributionType.add(i.copy());
8084        };
8085        dst.role = role == null ? null : role.copy();
8086        if (contributionInstance != null) {
8087          dst.contributionInstance = new ArrayList<CitationCitedArtifactContributorshipEntryContributionInstanceComponent>();
8088          for (CitationCitedArtifactContributorshipEntryContributionInstanceComponent i : contributionInstance)
8089            dst.contributionInstance.add(i.copy());
8090        };
8091        dst.correspondingContact = correspondingContact == null ? null : correspondingContact.copy();
8092        dst.rankingOrder = rankingOrder == null ? null : rankingOrder.copy();
8093      }
8094
8095      @Override
8096      public boolean equalsDeep(Base other_) {
8097        if (!super.equalsDeep(other_))
8098          return false;
8099        if (!(other_ instanceof CitationCitedArtifactContributorshipEntryComponent))
8100          return false;
8101        CitationCitedArtifactContributorshipEntryComponent o = (CitationCitedArtifactContributorshipEntryComponent) other_;
8102        return compareDeep(contributor, o.contributor, true) && compareDeep(forenameInitials, o.forenameInitials, true)
8103           && compareDeep(affiliation, o.affiliation, true) && compareDeep(contributionType, o.contributionType, true)
8104           && compareDeep(role, o.role, true) && compareDeep(contributionInstance, o.contributionInstance, true)
8105           && compareDeep(correspondingContact, o.correspondingContact, true) && compareDeep(rankingOrder, o.rankingOrder, true)
8106          ;
8107      }
8108
8109      @Override
8110      public boolean equalsShallow(Base other_) {
8111        if (!super.equalsShallow(other_))
8112          return false;
8113        if (!(other_ instanceof CitationCitedArtifactContributorshipEntryComponent))
8114          return false;
8115        CitationCitedArtifactContributorshipEntryComponent o = (CitationCitedArtifactContributorshipEntryComponent) other_;
8116        return compareValues(forenameInitials, o.forenameInitials, true) && compareValues(correspondingContact, o.correspondingContact, true)
8117           && compareValues(rankingOrder, o.rankingOrder, true);
8118      }
8119
8120      public boolean isEmpty() {
8121        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(contributor, forenameInitials
8122          , affiliation, contributionType, role, contributionInstance, correspondingContact
8123          , rankingOrder);
8124      }
8125
8126  public String fhirType() {
8127    return "Citation.citedArtifact.contributorship.entry";
8128
8129  }
8130
8131  }
8132
8133    @Block()
8134    public static class CitationCitedArtifactContributorshipEntryContributionInstanceComponent extends BackboneElement implements IBaseBackboneElement {
8135        /**
8136         * The specific contribution.
8137         */
8138        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
8139        @Description(shortDefinition="The specific contribution", formalDefinition="The specific contribution." )
8140        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/artifact-contribution-instance-type")
8141        protected CodeableConcept type;
8142
8143        /**
8144         * The time that the contribution was made.
8145         */
8146        @Child(name = "time", type = {DateTimeType.class}, order=2, min=0, max=1, modifier=false, summary=false)
8147        @Description(shortDefinition="The time that the contribution was made", formalDefinition="The time that the contribution was made." )
8148        protected DateTimeType time;
8149
8150        private static final long serialVersionUID = -196837729L;
8151
8152    /**
8153     * Constructor
8154     */
8155      public CitationCitedArtifactContributorshipEntryContributionInstanceComponent() {
8156        super();
8157      }
8158
8159    /**
8160     * Constructor
8161     */
8162      public CitationCitedArtifactContributorshipEntryContributionInstanceComponent(CodeableConcept type) {
8163        super();
8164        this.setType(type);
8165      }
8166
8167        /**
8168         * @return {@link #type} (The specific contribution.)
8169         */
8170        public CodeableConcept getType() { 
8171          if (this.type == null)
8172            if (Configuration.errorOnAutoCreate())
8173              throw new Error("Attempt to auto-create CitationCitedArtifactContributorshipEntryContributionInstanceComponent.type");
8174            else if (Configuration.doAutoCreate())
8175              this.type = new CodeableConcept(); // cc
8176          return this.type;
8177        }
8178
8179        public boolean hasType() { 
8180          return this.type != null && !this.type.isEmpty();
8181        }
8182
8183        /**
8184         * @param value {@link #type} (The specific contribution.)
8185         */
8186        public CitationCitedArtifactContributorshipEntryContributionInstanceComponent setType(CodeableConcept value) { 
8187          this.type = value;
8188          return this;
8189        }
8190
8191        /**
8192         * @return {@link #time} (The time that the contribution was made.). This is the underlying object with id, value and extensions. The accessor "getTime" gives direct access to the value
8193         */
8194        public DateTimeType getTimeElement() { 
8195          if (this.time == null)
8196            if (Configuration.errorOnAutoCreate())
8197              throw new Error("Attempt to auto-create CitationCitedArtifactContributorshipEntryContributionInstanceComponent.time");
8198            else if (Configuration.doAutoCreate())
8199              this.time = new DateTimeType(); // bb
8200          return this.time;
8201        }
8202
8203        public boolean hasTimeElement() { 
8204          return this.time != null && !this.time.isEmpty();
8205        }
8206
8207        public boolean hasTime() { 
8208          return this.time != null && !this.time.isEmpty();
8209        }
8210
8211        /**
8212         * @param value {@link #time} (The time that the contribution was made.). This is the underlying object with id, value and extensions. The accessor "getTime" gives direct access to the value
8213         */
8214        public CitationCitedArtifactContributorshipEntryContributionInstanceComponent setTimeElement(DateTimeType value) { 
8215          this.time = value;
8216          return this;
8217        }
8218
8219        /**
8220         * @return The time that the contribution was made.
8221         */
8222        public Date getTime() { 
8223          return this.time == null ? null : this.time.getValue();
8224        }
8225
8226        /**
8227         * @param value The time that the contribution was made.
8228         */
8229        public CitationCitedArtifactContributorshipEntryContributionInstanceComponent setTime(Date value) { 
8230          if (value == null)
8231            this.time = null;
8232          else {
8233            if (this.time == null)
8234              this.time = new DateTimeType();
8235            this.time.setValue(value);
8236          }
8237          return this;
8238        }
8239
8240        protected void listChildren(List<Property> children) {
8241          super.listChildren(children);
8242          children.add(new Property("type", "CodeableConcept", "The specific contribution.", 0, 1, type));
8243          children.add(new Property("time", "dateTime", "The time that the contribution was made.", 0, 1, time));
8244        }
8245
8246        @Override
8247        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
8248          switch (_hash) {
8249          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "The specific contribution.", 0, 1, type);
8250          case 3560141: /*time*/  return new Property("time", "dateTime", "The time that the contribution was made.", 0, 1, time);
8251          default: return super.getNamedProperty(_hash, _name, _checkValid);
8252          }
8253
8254        }
8255
8256      @Override
8257      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
8258        switch (hash) {
8259        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
8260        case 3560141: /*time*/ return this.time == null ? new Base[0] : new Base[] {this.time}; // DateTimeType
8261        default: return super.getProperty(hash, name, checkValid);
8262        }
8263
8264      }
8265
8266      @Override
8267      public Base setProperty(int hash, String name, Base value) throws FHIRException {
8268        switch (hash) {
8269        case 3575610: // type
8270          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
8271          return value;
8272        case 3560141: // time
8273          this.time = TypeConvertor.castToDateTime(value); // DateTimeType
8274          return value;
8275        default: return super.setProperty(hash, name, value);
8276        }
8277
8278      }
8279
8280      @Override
8281      public Base setProperty(String name, Base value) throws FHIRException {
8282        if (name.equals("type")) {
8283          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
8284        } else if (name.equals("time")) {
8285          this.time = TypeConvertor.castToDateTime(value); // DateTimeType
8286        } else
8287          return super.setProperty(name, value);
8288        return value;
8289      }
8290
8291  @Override
8292  public void removeChild(String name, Base value) throws FHIRException {
8293        if (name.equals("type")) {
8294          this.type = null;
8295        } else if (name.equals("time")) {
8296          this.time = null;
8297        } else
8298          super.removeChild(name, value);
8299        
8300      }
8301
8302      @Override
8303      public Base makeProperty(int hash, String name) throws FHIRException {
8304        switch (hash) {
8305        case 3575610:  return getType();
8306        case 3560141:  return getTimeElement();
8307        default: return super.makeProperty(hash, name);
8308        }
8309
8310      }
8311
8312      @Override
8313      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
8314        switch (hash) {
8315        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
8316        case 3560141: /*time*/ return new String[] {"dateTime"};
8317        default: return super.getTypesForProperty(hash, name);
8318        }
8319
8320      }
8321
8322      @Override
8323      public Base addChild(String name) throws FHIRException {
8324        if (name.equals("type")) {
8325          this.type = new CodeableConcept();
8326          return this.type;
8327        }
8328        else if (name.equals("time")) {
8329          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.contributorship.entry.contributionInstance.time");
8330        }
8331        else
8332          return super.addChild(name);
8333      }
8334
8335      public CitationCitedArtifactContributorshipEntryContributionInstanceComponent copy() {
8336        CitationCitedArtifactContributorshipEntryContributionInstanceComponent dst = new CitationCitedArtifactContributorshipEntryContributionInstanceComponent();
8337        copyValues(dst);
8338        return dst;
8339      }
8340
8341      public void copyValues(CitationCitedArtifactContributorshipEntryContributionInstanceComponent dst) {
8342        super.copyValues(dst);
8343        dst.type = type == null ? null : type.copy();
8344        dst.time = time == null ? null : time.copy();
8345      }
8346
8347      @Override
8348      public boolean equalsDeep(Base other_) {
8349        if (!super.equalsDeep(other_))
8350          return false;
8351        if (!(other_ instanceof CitationCitedArtifactContributorshipEntryContributionInstanceComponent))
8352          return false;
8353        CitationCitedArtifactContributorshipEntryContributionInstanceComponent o = (CitationCitedArtifactContributorshipEntryContributionInstanceComponent) other_;
8354        return compareDeep(type, o.type, true) && compareDeep(time, o.time, true);
8355      }
8356
8357      @Override
8358      public boolean equalsShallow(Base other_) {
8359        if (!super.equalsShallow(other_))
8360          return false;
8361        if (!(other_ instanceof CitationCitedArtifactContributorshipEntryContributionInstanceComponent))
8362          return false;
8363        CitationCitedArtifactContributorshipEntryContributionInstanceComponent o = (CitationCitedArtifactContributorshipEntryContributionInstanceComponent) other_;
8364        return compareValues(time, o.time, true);
8365      }
8366
8367      public boolean isEmpty() {
8368        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, time);
8369      }
8370
8371  public String fhirType() {
8372    return "Citation.citedArtifact.contributorship.entry.contributionInstance";
8373
8374  }
8375
8376  }
8377
8378    @Block()
8379    public static class ContributorshipSummaryComponent extends BackboneElement implements IBaseBackboneElement {
8380        /**
8381         * Used most commonly to express an author list or a contributorship statement.
8382         */
8383        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=false)
8384        @Description(shortDefinition="Such as author list, contributorship statement, funding statement, acknowledgements statement, or conflicts of interest statement", formalDefinition="Used most commonly to express an author list or a contributorship statement." )
8385        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/contributor-summary-type")
8386        protected CodeableConcept type;
8387
8388        /**
8389         * The format for the display string, such as author last name with first letter capitalized followed by forename initials.
8390         */
8391        @Child(name = "style", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
8392        @Description(shortDefinition="The format for the display string", formalDefinition="The format for the display string, such as author last name with first letter capitalized followed by forename initials." )
8393        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/contributor-summary-style")
8394        protected CodeableConcept style;
8395
8396        /**
8397         * Used to code the producer or rule for creating the display string.
8398         */
8399        @Child(name = "source", type = {CodeableConcept.class}, order=3, min=0, max=1, modifier=false, summary=false)
8400        @Description(shortDefinition="Used to code the producer or rule for creating the display string", formalDefinition="Used to code the producer or rule for creating the display string." )
8401        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/contributor-summary-source")
8402        protected CodeableConcept source;
8403
8404        /**
8405         * The display string for the author list, contributor list, or contributorship statement.
8406         */
8407        @Child(name = "value", type = {MarkdownType.class}, order=4, min=1, max=1, modifier=false, summary=false)
8408        @Description(shortDefinition="The display string for the author list, contributor list, or contributorship statement", formalDefinition="The display string for the author list, contributor list, or contributorship statement." )
8409        protected MarkdownType value;
8410
8411        private static final long serialVersionUID = 1353383781L;
8412
8413    /**
8414     * Constructor
8415     */
8416      public ContributorshipSummaryComponent() {
8417        super();
8418      }
8419
8420    /**
8421     * Constructor
8422     */
8423      public ContributorshipSummaryComponent(String value) {
8424        super();
8425        this.setValue(value);
8426      }
8427
8428        /**
8429         * @return {@link #type} (Used most commonly to express an author list or a contributorship statement.)
8430         */
8431        public CodeableConcept getType() { 
8432          if (this.type == null)
8433            if (Configuration.errorOnAutoCreate())
8434              throw new Error("Attempt to auto-create ContributorshipSummaryComponent.type");
8435            else if (Configuration.doAutoCreate())
8436              this.type = new CodeableConcept(); // cc
8437          return this.type;
8438        }
8439
8440        public boolean hasType() { 
8441          return this.type != null && !this.type.isEmpty();
8442        }
8443
8444        /**
8445         * @param value {@link #type} (Used most commonly to express an author list or a contributorship statement.)
8446         */
8447        public ContributorshipSummaryComponent setType(CodeableConcept value) { 
8448          this.type = value;
8449          return this;
8450        }
8451
8452        /**
8453         * @return {@link #style} (The format for the display string, such as author last name with first letter capitalized followed by forename initials.)
8454         */
8455        public CodeableConcept getStyle() { 
8456          if (this.style == null)
8457            if (Configuration.errorOnAutoCreate())
8458              throw new Error("Attempt to auto-create ContributorshipSummaryComponent.style");
8459            else if (Configuration.doAutoCreate())
8460              this.style = new CodeableConcept(); // cc
8461          return this.style;
8462        }
8463
8464        public boolean hasStyle() { 
8465          return this.style != null && !this.style.isEmpty();
8466        }
8467
8468        /**
8469         * @param value {@link #style} (The format for the display string, such as author last name with first letter capitalized followed by forename initials.)
8470         */
8471        public ContributorshipSummaryComponent setStyle(CodeableConcept value) { 
8472          this.style = value;
8473          return this;
8474        }
8475
8476        /**
8477         * @return {@link #source} (Used to code the producer or rule for creating the display string.)
8478         */
8479        public CodeableConcept getSource() { 
8480          if (this.source == null)
8481            if (Configuration.errorOnAutoCreate())
8482              throw new Error("Attempt to auto-create ContributorshipSummaryComponent.source");
8483            else if (Configuration.doAutoCreate())
8484              this.source = new CodeableConcept(); // cc
8485          return this.source;
8486        }
8487
8488        public boolean hasSource() { 
8489          return this.source != null && !this.source.isEmpty();
8490        }
8491
8492        /**
8493         * @param value {@link #source} (Used to code the producer or rule for creating the display string.)
8494         */
8495        public ContributorshipSummaryComponent setSource(CodeableConcept value) { 
8496          this.source = value;
8497          return this;
8498        }
8499
8500        /**
8501         * @return {@link #value} (The display string for the author list, contributor list, or contributorship statement.). This is the underlying object with id, value and extensions. The accessor "getValue" gives direct access to the value
8502         */
8503        public MarkdownType getValueElement() { 
8504          if (this.value == null)
8505            if (Configuration.errorOnAutoCreate())
8506              throw new Error("Attempt to auto-create ContributorshipSummaryComponent.value");
8507            else if (Configuration.doAutoCreate())
8508              this.value = new MarkdownType(); // bb
8509          return this.value;
8510        }
8511
8512        public boolean hasValueElement() { 
8513          return this.value != null && !this.value.isEmpty();
8514        }
8515
8516        public boolean hasValue() { 
8517          return this.value != null && !this.value.isEmpty();
8518        }
8519
8520        /**
8521         * @param value {@link #value} (The display string for the author list, contributor list, or contributorship statement.). This is the underlying object with id, value and extensions. The accessor "getValue" gives direct access to the value
8522         */
8523        public ContributorshipSummaryComponent setValueElement(MarkdownType value) { 
8524          this.value = value;
8525          return this;
8526        }
8527
8528        /**
8529         * @return The display string for the author list, contributor list, or contributorship statement.
8530         */
8531        public String getValue() { 
8532          return this.value == null ? null : this.value.getValue();
8533        }
8534
8535        /**
8536         * @param value The display string for the author list, contributor list, or contributorship statement.
8537         */
8538        public ContributorshipSummaryComponent setValue(String value) { 
8539            if (this.value == null)
8540              this.value = new MarkdownType();
8541            this.value.setValue(value);
8542          return this;
8543        }
8544
8545        protected void listChildren(List<Property> children) {
8546          super.listChildren(children);
8547          children.add(new Property("type", "CodeableConcept", "Used most commonly to express an author list or a contributorship statement.", 0, 1, type));
8548          children.add(new Property("style", "CodeableConcept", "The format for the display string, such as author last name with first letter capitalized followed by forename initials.", 0, 1, style));
8549          children.add(new Property("source", "CodeableConcept", "Used to code the producer or rule for creating the display string.", 0, 1, source));
8550          children.add(new Property("value", "markdown", "The display string for the author list, contributor list, or contributorship statement.", 0, 1, value));
8551        }
8552
8553        @Override
8554        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
8555          switch (_hash) {
8556          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Used most commonly to express an author list or a contributorship statement.", 0, 1, type);
8557          case 109780401: /*style*/  return new Property("style", "CodeableConcept", "The format for the display string, such as author last name with first letter capitalized followed by forename initials.", 0, 1, style);
8558          case -896505829: /*source*/  return new Property("source", "CodeableConcept", "Used to code the producer or rule for creating the display string.", 0, 1, source);
8559          case 111972721: /*value*/  return new Property("value", "markdown", "The display string for the author list, contributor list, or contributorship statement.", 0, 1, value);
8560          default: return super.getNamedProperty(_hash, _name, _checkValid);
8561          }
8562
8563        }
8564
8565      @Override
8566      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
8567        switch (hash) {
8568        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
8569        case 109780401: /*style*/ return this.style == null ? new Base[0] : new Base[] {this.style}; // CodeableConcept
8570        case -896505829: /*source*/ return this.source == null ? new Base[0] : new Base[] {this.source}; // CodeableConcept
8571        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // MarkdownType
8572        default: return super.getProperty(hash, name, checkValid);
8573        }
8574
8575      }
8576
8577      @Override
8578      public Base setProperty(int hash, String name, Base value) throws FHIRException {
8579        switch (hash) {
8580        case 3575610: // type
8581          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
8582          return value;
8583        case 109780401: // style
8584          this.style = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
8585          return value;
8586        case -896505829: // source
8587          this.source = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
8588          return value;
8589        case 111972721: // value
8590          this.value = TypeConvertor.castToMarkdown(value); // MarkdownType
8591          return value;
8592        default: return super.setProperty(hash, name, value);
8593        }
8594
8595      }
8596
8597      @Override
8598      public Base setProperty(String name, Base value) throws FHIRException {
8599        if (name.equals("type")) {
8600          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
8601        } else if (name.equals("style")) {
8602          this.style = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
8603        } else if (name.equals("source")) {
8604          this.source = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
8605        } else if (name.equals("value")) {
8606          this.value = TypeConvertor.castToMarkdown(value); // MarkdownType
8607        } else
8608          return super.setProperty(name, value);
8609        return value;
8610      }
8611
8612  @Override
8613  public void removeChild(String name, Base value) throws FHIRException {
8614        if (name.equals("type")) {
8615          this.type = null;
8616        } else if (name.equals("style")) {
8617          this.style = null;
8618        } else if (name.equals("source")) {
8619          this.source = null;
8620        } else if (name.equals("value")) {
8621          this.value = null;
8622        } else
8623          super.removeChild(name, value);
8624        
8625      }
8626
8627      @Override
8628      public Base makeProperty(int hash, String name) throws FHIRException {
8629        switch (hash) {
8630        case 3575610:  return getType();
8631        case 109780401:  return getStyle();
8632        case -896505829:  return getSource();
8633        case 111972721:  return getValueElement();
8634        default: return super.makeProperty(hash, name);
8635        }
8636
8637      }
8638
8639      @Override
8640      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
8641        switch (hash) {
8642        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
8643        case 109780401: /*style*/ return new String[] {"CodeableConcept"};
8644        case -896505829: /*source*/ return new String[] {"CodeableConcept"};
8645        case 111972721: /*value*/ return new String[] {"markdown"};
8646        default: return super.getTypesForProperty(hash, name);
8647        }
8648
8649      }
8650
8651      @Override
8652      public Base addChild(String name) throws FHIRException {
8653        if (name.equals("type")) {
8654          this.type = new CodeableConcept();
8655          return this.type;
8656        }
8657        else if (name.equals("style")) {
8658          this.style = new CodeableConcept();
8659          return this.style;
8660        }
8661        else if (name.equals("source")) {
8662          this.source = new CodeableConcept();
8663          return this.source;
8664        }
8665        else if (name.equals("value")) {
8666          throw new FHIRException("Cannot call addChild on a singleton property Citation.citedArtifact.contributorship.summary.value");
8667        }
8668        else
8669          return super.addChild(name);
8670      }
8671
8672      public ContributorshipSummaryComponent copy() {
8673        ContributorshipSummaryComponent dst = new ContributorshipSummaryComponent();
8674        copyValues(dst);
8675        return dst;
8676      }
8677
8678      public void copyValues(ContributorshipSummaryComponent dst) {
8679        super.copyValues(dst);
8680        dst.type = type == null ? null : type.copy();
8681        dst.style = style == null ? null : style.copy();
8682        dst.source = source == null ? null : source.copy();
8683        dst.value = value == null ? null : value.copy();
8684      }
8685
8686      @Override
8687      public boolean equalsDeep(Base other_) {
8688        if (!super.equalsDeep(other_))
8689          return false;
8690        if (!(other_ instanceof ContributorshipSummaryComponent))
8691          return false;
8692        ContributorshipSummaryComponent o = (ContributorshipSummaryComponent) other_;
8693        return compareDeep(type, o.type, true) && compareDeep(style, o.style, true) && compareDeep(source, o.source, true)
8694           && compareDeep(value, o.value, true);
8695      }
8696
8697      @Override
8698      public boolean equalsShallow(Base other_) {
8699        if (!super.equalsShallow(other_))
8700          return false;
8701        if (!(other_ instanceof ContributorshipSummaryComponent))
8702          return false;
8703        ContributorshipSummaryComponent o = (ContributorshipSummaryComponent) other_;
8704        return compareValues(value, o.value, true);
8705      }
8706
8707      public boolean isEmpty() {
8708        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, style, source, value
8709          );
8710      }
8711
8712  public String fhirType() {
8713    return "Citation.citedArtifact.contributorship.summary";
8714
8715  }
8716
8717  }
8718
8719    /**
8720     * An absolute URI that is used to identify this citation record when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which an authoritative instance of this summary is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the summary is stored on different servers.
8721     */
8722    @Child(name = "url", type = {UriType.class}, order=0, min=0, max=1, modifier=false, summary=true)
8723    @Description(shortDefinition="Canonical identifier for this citation record, represented as a globally unique URI", formalDefinition="An absolute URI that is used to identify this citation record when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which an authoritative instance of this summary is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the summary is stored on different servers." )
8724    protected UriType url;
8725
8726    /**
8727     * A formal identifier that is used to identify this citation record when it is represented in other formats, or referenced in a specification, model, design or an instance.
8728     */
8729    @Child(name = "identifier", type = {Identifier.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
8730    @Description(shortDefinition="Identifier for the citation record itself", formalDefinition="A formal identifier that is used to identify this citation record when it is represented in other formats, or referenced in a specification, model, design or an instance." )
8731    protected List<Identifier> identifier;
8732
8733    /**
8734     * The identifier that is used to identify this version of the citation record when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the citation record 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.
8735     */
8736    @Child(name = "version", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=true)
8737    @Description(shortDefinition="Business version of the citation record", formalDefinition="The identifier that is used to identify this version of the citation record when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the citation record 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." )
8738    protected StringType version;
8739
8740    /**
8741     * Indicates the mechanism used to compare versions to determine which is more current.
8742     */
8743    @Child(name = "versionAlgorithm", type = {StringType.class, Coding.class}, order=3, min=0, max=1, modifier=false, summary=true)
8744    @Description(shortDefinition="How to compare versions", formalDefinition="Indicates the mechanism used to compare versions to determine which is more current." )
8745    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/version-algorithm")
8746    protected DataType versionAlgorithm;
8747
8748    /**
8749     * A natural language name identifying the citation record. This name should be usable as an identifier for the module by machine processing applications such as code generation.
8750     */
8751    @Child(name = "name", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=true)
8752    @Description(shortDefinition="Name for this citation record (computer friendly)", formalDefinition="A natural language name identifying the citation record. This name should be usable as an identifier for the module by machine processing applications such as code generation." )
8753    protected StringType name;
8754
8755    /**
8756     * A short, descriptive, user-friendly title for the citation record.
8757     */
8758    @Child(name = "title", type = {StringType.class}, order=5, min=0, max=1, modifier=false, summary=true)
8759    @Description(shortDefinition="Name for this citation record (human friendly)", formalDefinition="A short, descriptive, user-friendly title for the citation record." )
8760    protected StringType title;
8761
8762    /**
8763     * The status of this summary. Enables tracking the life-cycle of the content.
8764     */
8765    @Child(name = "status", type = {CodeType.class}, order=6, min=1, max=1, modifier=true, summary=true)
8766    @Description(shortDefinition="draft | active | retired | unknown", formalDefinition="The status of this summary. Enables tracking the life-cycle of the content." )
8767    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/publication-status")
8768    protected Enumeration<PublicationStatus> status;
8769
8770    /**
8771     * A Boolean value to indicate that this citation record is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.
8772     */
8773    @Child(name = "experimental", type = {BooleanType.class}, order=7, min=0, max=1, modifier=false, summary=true)
8774    @Description(shortDefinition="For testing purposes, not real usage", formalDefinition="A Boolean value to indicate that this citation record is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage." )
8775    protected BooleanType experimental;
8776
8777    /**
8778     * The date (and optionally time) when the citation record was last significantly changed. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the citation record changes.
8779     */
8780    @Child(name = "date", type = {DateTimeType.class}, order=8, min=0, max=1, modifier=false, summary=true)
8781    @Description(shortDefinition="Date last changed", formalDefinition="The date (and optionally time) when the citation record was last significantly changed. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the citation record changes." )
8782    protected DateTimeType date;
8783
8784    /**
8785     * The name of the organization or individual that published the citation record.
8786     */
8787    @Child(name = "publisher", type = {StringType.class}, order=9, min=0, max=1, modifier=false, summary=true)
8788    @Description(shortDefinition="The publisher of the citation record, not the publisher of the article or artifact being cited", formalDefinition="The name of the organization or individual that published the citation record." )
8789    protected StringType publisher;
8790
8791    /**
8792     * Contact details to assist a user in finding and communicating with the publisher.
8793     */
8794    @Child(name = "contact", type = {ContactDetail.class}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
8795    @Description(shortDefinition="Contact details for the publisher of the citation record", formalDefinition="Contact details to assist a user in finding and communicating with the publisher." )
8796    protected List<ContactDetail> contact;
8797
8798    /**
8799     * A free text natural language description of the citation from a consumer's perspective.
8800     */
8801    @Child(name = "description", type = {MarkdownType.class}, order=11, min=0, max=1, modifier=false, summary=false)
8802    @Description(shortDefinition="Natural language description of the citation", formalDefinition="A free text natural language description of the citation from a consumer's perspective." )
8803    protected MarkdownType description;
8804
8805    /**
8806     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate citation record instances.
8807     */
8808    @Child(name = "useContext", type = {UsageContext.class}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
8809    @Description(shortDefinition="The context that the citation record content is intended to support", formalDefinition="The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate citation record instances." )
8810    protected List<UsageContext> useContext;
8811
8812    /**
8813     * A legal or geographic region in which the citation record is intended to be used.
8814     */
8815    @Child(name = "jurisdiction", type = {CodeableConcept.class}, order=13, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
8816    @Description(shortDefinition="Intended jurisdiction for citation record (if applicable)", formalDefinition="A legal or geographic region in which the citation record is intended to be used." )
8817    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/jurisdiction")
8818    protected List<CodeableConcept> jurisdiction;
8819
8820    /**
8821     * Explanation of why this citation is needed and why it has been designed as it has.
8822     */
8823    @Child(name = "purpose", type = {MarkdownType.class}, order=14, min=0, max=1, modifier=false, summary=false)
8824    @Description(shortDefinition="Why this citation is defined", formalDefinition="Explanation of why this citation is needed and why it has been designed as it has." )
8825    protected MarkdownType purpose;
8826
8827    /**
8828     * Use and/or publishing restrictions for the citation record, not for the cited artifact.
8829     */
8830    @Child(name = "copyright", type = {MarkdownType.class}, order=15, min=0, max=1, modifier=false, summary=false)
8831    @Description(shortDefinition="Use and/or publishing restrictions for the citation record, not for the cited artifact", formalDefinition="Use and/or publishing restrictions for the citation record, not for the cited artifact." )
8832    protected MarkdownType copyright;
8833
8834    /**
8835     * A short string (<50 characters), suitable for inclusion in a page footer that identifies the copyright holder, effective period, and optionally whether rights are resctricted. (e.g. 'All rights reserved', 'Some rights reserved').
8836     */
8837    @Child(name = "copyrightLabel", type = {StringType.class}, order=16, min=0, max=1, modifier=false, summary=false)
8838    @Description(shortDefinition="Copyright holder and year(s) for the ciation record, not for the cited artifact", formalDefinition="A short string (<50 characters), suitable for inclusion in a page footer that identifies the copyright holder, effective period, and optionally whether rights are resctricted. (e.g. 'All rights reserved', 'Some rights reserved')." )
8839    protected StringType copyrightLabel;
8840
8841    /**
8842     * The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
8843     */
8844    @Child(name = "approvalDate", type = {DateType.class}, order=17, min=0, max=1, modifier=false, summary=false)
8845    @Description(shortDefinition="When the citation record 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." )
8846    protected DateType approvalDate;
8847
8848    /**
8849     * The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.
8850     */
8851    @Child(name = "lastReviewDate", type = {DateType.class}, order=18, min=0, max=1, modifier=false, summary=false)
8852    @Description(shortDefinition="When the citation record was last reviewed by the publisher", formalDefinition="The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date." )
8853    protected DateType lastReviewDate;
8854
8855    /**
8856     * The period during which the citation record content was or is planned to be in active use.
8857     */
8858    @Child(name = "effectivePeriod", type = {Period.class}, order=19, min=0, max=1, modifier=false, summary=true)
8859    @Description(shortDefinition="When the citation record is expected to be used", formalDefinition="The period during which the citation record content was or is planned to be in active use." )
8860    protected Period effectivePeriod;
8861
8862    /**
8863     * Who authored or created the citation record.
8864     */
8865    @Child(name = "author", type = {ContactDetail.class}, order=20, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
8866    @Description(shortDefinition="Who authored the citation record", formalDefinition="Who authored or created the citation record." )
8867    protected List<ContactDetail> author;
8868
8869    /**
8870     * Who edited or revised the citation record.
8871     */
8872    @Child(name = "editor", type = {ContactDetail.class}, order=21, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
8873    @Description(shortDefinition="Who edited the citation record", formalDefinition="Who edited or revised the citation record." )
8874    protected List<ContactDetail> editor;
8875
8876    /**
8877     * Who reviewed the citation record.
8878     */
8879    @Child(name = "reviewer", type = {ContactDetail.class}, order=22, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
8880    @Description(shortDefinition="Who reviewed the citation record", formalDefinition="Who reviewed the citation record." )
8881    protected List<ContactDetail> reviewer;
8882
8883    /**
8884     * Who endorsed the citation record.
8885     */
8886    @Child(name = "endorser", type = {ContactDetail.class}, order=23, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
8887    @Description(shortDefinition="Who endorsed the citation record", formalDefinition="Who endorsed the citation record." )
8888    protected List<ContactDetail> endorser;
8889
8890    /**
8891     * A human-readable display of key concepts to represent the citation.
8892     */
8893    @Child(name = "summary", type = {}, order=24, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
8894    @Description(shortDefinition="A human-readable display of key concepts to represent the citation", formalDefinition="A human-readable display of key concepts to represent the citation." )
8895    protected List<CitationSummaryComponent> summary;
8896
8897    /**
8898     * The assignment to an organizing scheme.
8899     */
8900    @Child(name = "classification", type = {}, order=25, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
8901    @Description(shortDefinition="The assignment to an organizing scheme", formalDefinition="The assignment to an organizing scheme." )
8902    protected List<CitationClassificationComponent> classification;
8903
8904    /**
8905     * Used for general notes and annotations not coded elsewhere.
8906     */
8907    @Child(name = "note", type = {Annotation.class}, order=26, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
8908    @Description(shortDefinition="Used for general notes and annotations not coded elsewhere", formalDefinition="Used for general notes and annotations not coded elsewhere." )
8909    protected List<Annotation> note;
8910
8911    /**
8912     * The status of the citation record.
8913     */
8914    @Child(name = "currentState", type = {CodeableConcept.class}, order=27, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
8915    @Description(shortDefinition="The status of the citation record", formalDefinition="The status of the citation record." )
8916    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/citation-status-type")
8917    protected List<CodeableConcept> currentState;
8918
8919    /**
8920     * The state or status of the citation record paired with an effective date or period for that state.
8921     */
8922    @Child(name = "statusDate", type = {}, order=28, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
8923    @Description(shortDefinition="An effective date or period for a status of the citation record", formalDefinition="The state or status of the citation record paired with an effective date or period for that state." )
8924    protected List<CitationStatusDateComponent> statusDate;
8925
8926    /**
8927     * Artifact related to the citation record.
8928     */
8929    @Child(name = "relatedArtifact", type = {RelatedArtifact.class}, order=29, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
8930    @Description(shortDefinition="Artifact related to the citation record", formalDefinition="Artifact related to the citation record." )
8931    protected List<RelatedArtifact> relatedArtifact;
8932
8933    /**
8934     * The article or artifact being described.
8935     */
8936    @Child(name = "citedArtifact", type = {}, order=30, min=0, max=1, modifier=false, summary=false)
8937    @Description(shortDefinition="The article or artifact being described", formalDefinition="The article or artifact being described." )
8938    protected CitationCitedArtifactComponent citedArtifact;
8939
8940    private static final long serialVersionUID = 717016163L;
8941
8942  /**
8943   * Constructor
8944   */
8945    public Citation() {
8946      super();
8947    }
8948
8949  /**
8950   * Constructor
8951   */
8952    public Citation(PublicationStatus status) {
8953      super();
8954      this.setStatus(status);
8955    }
8956
8957    /**
8958     * @return {@link #url} (An absolute URI that is used to identify this citation record when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which an authoritative instance of this summary is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the summary is stored on different servers.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
8959     */
8960    public UriType getUrlElement() { 
8961      if (this.url == null)
8962        if (Configuration.errorOnAutoCreate())
8963          throw new Error("Attempt to auto-create Citation.url");
8964        else if (Configuration.doAutoCreate())
8965          this.url = new UriType(); // bb
8966      return this.url;
8967    }
8968
8969    public boolean hasUrlElement() { 
8970      return this.url != null && !this.url.isEmpty();
8971    }
8972
8973    public boolean hasUrl() { 
8974      return this.url != null && !this.url.isEmpty();
8975    }
8976
8977    /**
8978     * @param value {@link #url} (An absolute URI that is used to identify this citation record when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which an authoritative instance of this summary is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the summary is stored on different servers.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
8979     */
8980    public Citation setUrlElement(UriType value) { 
8981      this.url = value;
8982      return this;
8983    }
8984
8985    /**
8986     * @return An absolute URI that is used to identify this citation record when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which an authoritative instance of this summary is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the summary is stored on different servers.
8987     */
8988    public String getUrl() { 
8989      return this.url == null ? null : this.url.getValue();
8990    }
8991
8992    /**
8993     * @param value An absolute URI that is used to identify this citation record when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which an authoritative instance of this summary is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the summary is stored on different servers.
8994     */
8995    public Citation setUrl(String value) { 
8996      if (Utilities.noString(value))
8997        this.url = null;
8998      else {
8999        if (this.url == null)
9000          this.url = new UriType();
9001        this.url.setValue(value);
9002      }
9003      return this;
9004    }
9005
9006    /**
9007     * @return {@link #identifier} (A formal identifier that is used to identify this citation record when it is represented in other formats, or referenced in a specification, model, design or an instance.)
9008     */
9009    public List<Identifier> getIdentifier() { 
9010      if (this.identifier == null)
9011        this.identifier = new ArrayList<Identifier>();
9012      return this.identifier;
9013    }
9014
9015    /**
9016     * @return Returns a reference to <code>this</code> for easy method chaining
9017     */
9018    public Citation setIdentifier(List<Identifier> theIdentifier) { 
9019      this.identifier = theIdentifier;
9020      return this;
9021    }
9022
9023    public boolean hasIdentifier() { 
9024      if (this.identifier == null)
9025        return false;
9026      for (Identifier item : this.identifier)
9027        if (!item.isEmpty())
9028          return true;
9029      return false;
9030    }
9031
9032    public Identifier addIdentifier() { //3
9033      Identifier t = new Identifier();
9034      if (this.identifier == null)
9035        this.identifier = new ArrayList<Identifier>();
9036      this.identifier.add(t);
9037      return t;
9038    }
9039
9040    public Citation addIdentifier(Identifier t) { //3
9041