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 * This Resource provides one or more comments, classifiers or ratings about a Resource and supports attribution and rights management metadata for the added content.
052 */
053@ResourceDef(name="ArtifactAssessment", profile="http://hl7.org/fhir/StructureDefinition/ArtifactAssessment")
054public class ArtifactAssessment extends DomainResource {
055
056    public enum ArtifactAssessmentDisposition {
057        /**
058         * The comment is unresolved
059         */
060        UNRESOLVED, 
061        /**
062         * The comment is not persuasive (rejected in full)
063         */
064        NOTPERSUASIVE, 
065        /**
066         * The comment is persuasive (accepted in full)
067         */
068        PERSUASIVE, 
069        /**
070         * The comment is persuasive with modification (partially accepted)
071         */
072        PERSUASIVEWITHMODIFICATION, 
073        /**
074         * The comment is not persuasive with modification (partially rejected)
075         */
076        NOTPERSUASIVEWITHMODIFICATION, 
077        /**
078         * added to help the parsers with the generic types
079         */
080        NULL;
081        public static ArtifactAssessmentDisposition fromCode(String codeString) throws FHIRException {
082            if (codeString == null || "".equals(codeString))
083                return null;
084        if ("unresolved".equals(codeString))
085          return UNRESOLVED;
086        if ("not-persuasive".equals(codeString))
087          return NOTPERSUASIVE;
088        if ("persuasive".equals(codeString))
089          return PERSUASIVE;
090        if ("persuasive-with-modification".equals(codeString))
091          return PERSUASIVEWITHMODIFICATION;
092        if ("not-persuasive-with-modification".equals(codeString))
093          return NOTPERSUASIVEWITHMODIFICATION;
094        if (Configuration.isAcceptInvalidEnums())
095          return null;
096        else
097          throw new FHIRException("Unknown ArtifactAssessmentDisposition code '"+codeString+"'");
098        }
099        public String toCode() {
100          switch (this) {
101            case UNRESOLVED: return "unresolved";
102            case NOTPERSUASIVE: return "not-persuasive";
103            case PERSUASIVE: return "persuasive";
104            case PERSUASIVEWITHMODIFICATION: return "persuasive-with-modification";
105            case NOTPERSUASIVEWITHMODIFICATION: return "not-persuasive-with-modification";
106            case NULL: return null;
107            default: return "?";
108          }
109        }
110        public String getSystem() {
111          switch (this) {
112            case UNRESOLVED: return "http://hl7.org/fhir/artifactassessment-disposition";
113            case NOTPERSUASIVE: return "http://hl7.org/fhir/artifactassessment-disposition";
114            case PERSUASIVE: return "http://hl7.org/fhir/artifactassessment-disposition";
115            case PERSUASIVEWITHMODIFICATION: return "http://hl7.org/fhir/artifactassessment-disposition";
116            case NOTPERSUASIVEWITHMODIFICATION: return "http://hl7.org/fhir/artifactassessment-disposition";
117            case NULL: return null;
118            default: return "?";
119          }
120        }
121        public String getDefinition() {
122          switch (this) {
123            case UNRESOLVED: return "The comment is unresolved";
124            case NOTPERSUASIVE: return "The comment is not persuasive (rejected in full)";
125            case PERSUASIVE: return "The comment is persuasive (accepted in full)";
126            case PERSUASIVEWITHMODIFICATION: return "The comment is persuasive with modification (partially accepted)";
127            case NOTPERSUASIVEWITHMODIFICATION: return "The comment is not persuasive with modification (partially rejected)";
128            case NULL: return null;
129            default: return "?";
130          }
131        }
132        public String getDisplay() {
133          switch (this) {
134            case UNRESOLVED: return "Unresolved";
135            case NOTPERSUASIVE: return "Not Persuasive";
136            case PERSUASIVE: return "Persuasive";
137            case PERSUASIVEWITHMODIFICATION: return "Persuasive with Modification";
138            case NOTPERSUASIVEWITHMODIFICATION: return "Not Persuasive with Modification";
139            case NULL: return null;
140            default: return "?";
141          }
142        }
143    }
144
145  public static class ArtifactAssessmentDispositionEnumFactory implements EnumFactory<ArtifactAssessmentDisposition> {
146    public ArtifactAssessmentDisposition fromCode(String codeString) throws IllegalArgumentException {
147      if (codeString == null || "".equals(codeString))
148            if (codeString == null || "".equals(codeString))
149                return null;
150        if ("unresolved".equals(codeString))
151          return ArtifactAssessmentDisposition.UNRESOLVED;
152        if ("not-persuasive".equals(codeString))
153          return ArtifactAssessmentDisposition.NOTPERSUASIVE;
154        if ("persuasive".equals(codeString))
155          return ArtifactAssessmentDisposition.PERSUASIVE;
156        if ("persuasive-with-modification".equals(codeString))
157          return ArtifactAssessmentDisposition.PERSUASIVEWITHMODIFICATION;
158        if ("not-persuasive-with-modification".equals(codeString))
159          return ArtifactAssessmentDisposition.NOTPERSUASIVEWITHMODIFICATION;
160        throw new IllegalArgumentException("Unknown ArtifactAssessmentDisposition code '"+codeString+"'");
161        }
162        public Enumeration<ArtifactAssessmentDisposition> fromType(PrimitiveType<?> code) throws FHIRException {
163          if (code == null)
164            return null;
165          if (code.isEmpty())
166            return new Enumeration<ArtifactAssessmentDisposition>(this, ArtifactAssessmentDisposition.NULL, code);
167          String codeString = ((PrimitiveType) code).asStringValue();
168          if (codeString == null || "".equals(codeString))
169            return new Enumeration<ArtifactAssessmentDisposition>(this, ArtifactAssessmentDisposition.NULL, code);
170        if ("unresolved".equals(codeString))
171          return new Enumeration<ArtifactAssessmentDisposition>(this, ArtifactAssessmentDisposition.UNRESOLVED, code);
172        if ("not-persuasive".equals(codeString))
173          return new Enumeration<ArtifactAssessmentDisposition>(this, ArtifactAssessmentDisposition.NOTPERSUASIVE, code);
174        if ("persuasive".equals(codeString))
175          return new Enumeration<ArtifactAssessmentDisposition>(this, ArtifactAssessmentDisposition.PERSUASIVE, code);
176        if ("persuasive-with-modification".equals(codeString))
177          return new Enumeration<ArtifactAssessmentDisposition>(this, ArtifactAssessmentDisposition.PERSUASIVEWITHMODIFICATION, code);
178        if ("not-persuasive-with-modification".equals(codeString))
179          return new Enumeration<ArtifactAssessmentDisposition>(this, ArtifactAssessmentDisposition.NOTPERSUASIVEWITHMODIFICATION, code);
180        throw new FHIRException("Unknown ArtifactAssessmentDisposition code '"+codeString+"'");
181        }
182    public String toCode(ArtifactAssessmentDisposition code) {
183      if (code == ArtifactAssessmentDisposition.UNRESOLVED)
184        return "unresolved";
185      if (code == ArtifactAssessmentDisposition.NOTPERSUASIVE)
186        return "not-persuasive";
187      if (code == ArtifactAssessmentDisposition.PERSUASIVE)
188        return "persuasive";
189      if (code == ArtifactAssessmentDisposition.PERSUASIVEWITHMODIFICATION)
190        return "persuasive-with-modification";
191      if (code == ArtifactAssessmentDisposition.NOTPERSUASIVEWITHMODIFICATION)
192        return "not-persuasive-with-modification";
193      return "?";
194      }
195    public String toSystem(ArtifactAssessmentDisposition code) {
196      return code.getSystem();
197      }
198    }
199
200    public enum ArtifactAssessmentInformationType {
201        /**
202         * A comment on the artifact
203         */
204        COMMENT, 
205        /**
206         * A classifier of the artifact
207         */
208        CLASSIFIER, 
209        /**
210         * A rating of the artifact
211         */
212        RATING, 
213        /**
214         * A container for multiple components
215         */
216        CONTAINER, 
217        /**
218         * A response to a comment
219         */
220        RESPONSE, 
221        /**
222         * A change request for the artifact
223         */
224        CHANGEREQUEST, 
225        /**
226         * added to help the parsers with the generic types
227         */
228        NULL;
229        public static ArtifactAssessmentInformationType fromCode(String codeString) throws FHIRException {
230            if (codeString == null || "".equals(codeString))
231                return null;
232        if ("comment".equals(codeString))
233          return COMMENT;
234        if ("classifier".equals(codeString))
235          return CLASSIFIER;
236        if ("rating".equals(codeString))
237          return RATING;
238        if ("container".equals(codeString))
239          return CONTAINER;
240        if ("response".equals(codeString))
241          return RESPONSE;
242        if ("change-request".equals(codeString))
243          return CHANGEREQUEST;
244        if (Configuration.isAcceptInvalidEnums())
245          return null;
246        else
247          throw new FHIRException("Unknown ArtifactAssessmentInformationType code '"+codeString+"'");
248        }
249        public String toCode() {
250          switch (this) {
251            case COMMENT: return "comment";
252            case CLASSIFIER: return "classifier";
253            case RATING: return "rating";
254            case CONTAINER: return "container";
255            case RESPONSE: return "response";
256            case CHANGEREQUEST: return "change-request";
257            case NULL: return null;
258            default: return "?";
259          }
260        }
261        public String getSystem() {
262          switch (this) {
263            case COMMENT: return "http://hl7.org/fhir/artifactassessment-information-type";
264            case CLASSIFIER: return "http://hl7.org/fhir/artifactassessment-information-type";
265            case RATING: return "http://hl7.org/fhir/artifactassessment-information-type";
266            case CONTAINER: return "http://hl7.org/fhir/artifactassessment-information-type";
267            case RESPONSE: return "http://hl7.org/fhir/artifactassessment-information-type";
268            case CHANGEREQUEST: return "http://hl7.org/fhir/artifactassessment-information-type";
269            case NULL: return null;
270            default: return "?";
271          }
272        }
273        public String getDefinition() {
274          switch (this) {
275            case COMMENT: return "A comment on the artifact";
276            case CLASSIFIER: return "A classifier of the artifact";
277            case RATING: return "A rating of the artifact";
278            case CONTAINER: return "A container for multiple components";
279            case RESPONSE: return "A response to a comment";
280            case CHANGEREQUEST: return "A change request for the artifact";
281            case NULL: return null;
282            default: return "?";
283          }
284        }
285        public String getDisplay() {
286          switch (this) {
287            case COMMENT: return "Comment";
288            case CLASSIFIER: return "Classifier";
289            case RATING: return "Rating";
290            case CONTAINER: return "Container";
291            case RESPONSE: return "Response";
292            case CHANGEREQUEST: return "Change Request";
293            case NULL: return null;
294            default: return "?";
295          }
296        }
297    }
298
299  public static class ArtifactAssessmentInformationTypeEnumFactory implements EnumFactory<ArtifactAssessmentInformationType> {
300    public ArtifactAssessmentInformationType fromCode(String codeString) throws IllegalArgumentException {
301      if (codeString == null || "".equals(codeString))
302            if (codeString == null || "".equals(codeString))
303                return null;
304        if ("comment".equals(codeString))
305          return ArtifactAssessmentInformationType.COMMENT;
306        if ("classifier".equals(codeString))
307          return ArtifactAssessmentInformationType.CLASSIFIER;
308        if ("rating".equals(codeString))
309          return ArtifactAssessmentInformationType.RATING;
310        if ("container".equals(codeString))
311          return ArtifactAssessmentInformationType.CONTAINER;
312        if ("response".equals(codeString))
313          return ArtifactAssessmentInformationType.RESPONSE;
314        if ("change-request".equals(codeString))
315          return ArtifactAssessmentInformationType.CHANGEREQUEST;
316        throw new IllegalArgumentException("Unknown ArtifactAssessmentInformationType code '"+codeString+"'");
317        }
318        public Enumeration<ArtifactAssessmentInformationType> fromType(PrimitiveType<?> code) throws FHIRException {
319          if (code == null)
320            return null;
321          if (code.isEmpty())
322            return new Enumeration<ArtifactAssessmentInformationType>(this, ArtifactAssessmentInformationType.NULL, code);
323          String codeString = ((PrimitiveType) code).asStringValue();
324          if (codeString == null || "".equals(codeString))
325            return new Enumeration<ArtifactAssessmentInformationType>(this, ArtifactAssessmentInformationType.NULL, code);
326        if ("comment".equals(codeString))
327          return new Enumeration<ArtifactAssessmentInformationType>(this, ArtifactAssessmentInformationType.COMMENT, code);
328        if ("classifier".equals(codeString))
329          return new Enumeration<ArtifactAssessmentInformationType>(this, ArtifactAssessmentInformationType.CLASSIFIER, code);
330        if ("rating".equals(codeString))
331          return new Enumeration<ArtifactAssessmentInformationType>(this, ArtifactAssessmentInformationType.RATING, code);
332        if ("container".equals(codeString))
333          return new Enumeration<ArtifactAssessmentInformationType>(this, ArtifactAssessmentInformationType.CONTAINER, code);
334        if ("response".equals(codeString))
335          return new Enumeration<ArtifactAssessmentInformationType>(this, ArtifactAssessmentInformationType.RESPONSE, code);
336        if ("change-request".equals(codeString))
337          return new Enumeration<ArtifactAssessmentInformationType>(this, ArtifactAssessmentInformationType.CHANGEREQUEST, code);
338        throw new FHIRException("Unknown ArtifactAssessmentInformationType code '"+codeString+"'");
339        }
340    public String toCode(ArtifactAssessmentInformationType code) {
341      if (code == ArtifactAssessmentInformationType.COMMENT)
342        return "comment";
343      if (code == ArtifactAssessmentInformationType.CLASSIFIER)
344        return "classifier";
345      if (code == ArtifactAssessmentInformationType.RATING)
346        return "rating";
347      if (code == ArtifactAssessmentInformationType.CONTAINER)
348        return "container";
349      if (code == ArtifactAssessmentInformationType.RESPONSE)
350        return "response";
351      if (code == ArtifactAssessmentInformationType.CHANGEREQUEST)
352        return "change-request";
353      return "?";
354      }
355    public String toSystem(ArtifactAssessmentInformationType code) {
356      return code.getSystem();
357      }
358    }
359
360    public enum ArtifactAssessmentWorkflowStatus {
361        /**
362         * The comment has been submitted, but the responsible party has not yet been determined, or the responsible party has not yet determined the next steps to be taken.
363         */
364        SUBMITTED, 
365        /**
366         * The comment has been triaged, meaning the responsible party has been determined and next steps have been identified to address the comment.
367         */
368        TRIAGED, 
369        /**
370         * The comment is waiting for input from a specific party before next steps can be taken.
371         */
372        WAITINGFORINPUT, 
373        /**
374         * The comment has been resolved and no changes resulted from the resolution
375         */
376        RESOLVEDNOCHANGE, 
377        /**
378         * The comment has been resolved and changes are required to address the comment
379         */
380        RESOLVEDCHANGEREQUIRED, 
381        /**
382         * The comment is acceptable, but resolution of the comment and application of any associated changes have been deferred
383         */
384        DEFERRED, 
385        /**
386         * The comment is a duplicate of another comment already received
387         */
388        DUPLICATE, 
389        /**
390         * The comment is resolved and any necessary changes have been applied
391         */
392        APPLIED, 
393        /**
394         * The necessary changes to the artifact have been published in a new version of the artifact
395         */
396        PUBLISHED, 
397        /**
398         * The assessment was entered in error
399         */
400        ENTEREDINERROR, 
401        /**
402         * added to help the parsers with the generic types
403         */
404        NULL;
405        public static ArtifactAssessmentWorkflowStatus fromCode(String codeString) throws FHIRException {
406            if (codeString == null || "".equals(codeString))
407                return null;
408        if ("submitted".equals(codeString))
409          return SUBMITTED;
410        if ("triaged".equals(codeString))
411          return TRIAGED;
412        if ("waiting-for-input".equals(codeString))
413          return WAITINGFORINPUT;
414        if ("resolved-no-change".equals(codeString))
415          return RESOLVEDNOCHANGE;
416        if ("resolved-change-required".equals(codeString))
417          return RESOLVEDCHANGEREQUIRED;
418        if ("deferred".equals(codeString))
419          return DEFERRED;
420        if ("duplicate".equals(codeString))
421          return DUPLICATE;
422        if ("applied".equals(codeString))
423          return APPLIED;
424        if ("published".equals(codeString))
425          return PUBLISHED;
426        if ("entered-in-error".equals(codeString))
427          return ENTEREDINERROR;
428        if (Configuration.isAcceptInvalidEnums())
429          return null;
430        else
431          throw new FHIRException("Unknown ArtifactAssessmentWorkflowStatus code '"+codeString+"'");
432        }
433        public String toCode() {
434          switch (this) {
435            case SUBMITTED: return "submitted";
436            case TRIAGED: return "triaged";
437            case WAITINGFORINPUT: return "waiting-for-input";
438            case RESOLVEDNOCHANGE: return "resolved-no-change";
439            case RESOLVEDCHANGEREQUIRED: return "resolved-change-required";
440            case DEFERRED: return "deferred";
441            case DUPLICATE: return "duplicate";
442            case APPLIED: return "applied";
443            case PUBLISHED: return "published";
444            case ENTEREDINERROR: return "entered-in-error";
445            case NULL: return null;
446            default: return "?";
447          }
448        }
449        public String getSystem() {
450          switch (this) {
451            case SUBMITTED: return "http://hl7.org/fhir/artifactassessment-workflow-status";
452            case TRIAGED: return "http://hl7.org/fhir/artifactassessment-workflow-status";
453            case WAITINGFORINPUT: return "http://hl7.org/fhir/artifactassessment-workflow-status";
454            case RESOLVEDNOCHANGE: return "http://hl7.org/fhir/artifactassessment-workflow-status";
455            case RESOLVEDCHANGEREQUIRED: return "http://hl7.org/fhir/artifactassessment-workflow-status";
456            case DEFERRED: return "http://hl7.org/fhir/artifactassessment-workflow-status";
457            case DUPLICATE: return "http://hl7.org/fhir/artifactassessment-workflow-status";
458            case APPLIED: return "http://hl7.org/fhir/artifactassessment-workflow-status";
459            case PUBLISHED: return "http://hl7.org/fhir/artifactassessment-workflow-status";
460            case ENTEREDINERROR: return "http://hl7.org/fhir/artifactassessment-workflow-status";
461            case NULL: return null;
462            default: return "?";
463          }
464        }
465        public String getDefinition() {
466          switch (this) {
467            case SUBMITTED: return "The comment has been submitted, but the responsible party has not yet been determined, or the responsible party has not yet determined the next steps to be taken.";
468            case TRIAGED: return "The comment has been triaged, meaning the responsible party has been determined and next steps have been identified to address the comment.";
469            case WAITINGFORINPUT: return "The comment is waiting for input from a specific party before next steps can be taken.";
470            case RESOLVEDNOCHANGE: return "The comment has been resolved and no changes resulted from the resolution";
471            case RESOLVEDCHANGEREQUIRED: return "The comment has been resolved and changes are required to address the comment";
472            case DEFERRED: return "The comment is acceptable, but resolution of the comment and application of any associated changes have been deferred";
473            case DUPLICATE: return "The comment is a duplicate of another comment already received";
474            case APPLIED: return "The comment is resolved and any necessary changes have been applied";
475            case PUBLISHED: return "The necessary changes to the artifact have been published in a new version of the artifact";
476            case ENTEREDINERROR: return "The assessment was entered in error";
477            case NULL: return null;
478            default: return "?";
479          }
480        }
481        public String getDisplay() {
482          switch (this) {
483            case SUBMITTED: return "Submitted";
484            case TRIAGED: return "Triaged";
485            case WAITINGFORINPUT: return "Waiting for Input";
486            case RESOLVEDNOCHANGE: return "Resolved - No Change";
487            case RESOLVEDCHANGEREQUIRED: return "Resolved - Change Required";
488            case DEFERRED: return "Deferred";
489            case DUPLICATE: return "Duplicate";
490            case APPLIED: return "Applied";
491            case PUBLISHED: return "Published";
492            case ENTEREDINERROR: return "Entered in Error";
493            case NULL: return null;
494            default: return "?";
495          }
496        }
497    }
498
499  public static class ArtifactAssessmentWorkflowStatusEnumFactory implements EnumFactory<ArtifactAssessmentWorkflowStatus> {
500    public ArtifactAssessmentWorkflowStatus fromCode(String codeString) throws IllegalArgumentException {
501      if (codeString == null || "".equals(codeString))
502            if (codeString == null || "".equals(codeString))
503                return null;
504        if ("submitted".equals(codeString))
505          return ArtifactAssessmentWorkflowStatus.SUBMITTED;
506        if ("triaged".equals(codeString))
507          return ArtifactAssessmentWorkflowStatus.TRIAGED;
508        if ("waiting-for-input".equals(codeString))
509          return ArtifactAssessmentWorkflowStatus.WAITINGFORINPUT;
510        if ("resolved-no-change".equals(codeString))
511          return ArtifactAssessmentWorkflowStatus.RESOLVEDNOCHANGE;
512        if ("resolved-change-required".equals(codeString))
513          return ArtifactAssessmentWorkflowStatus.RESOLVEDCHANGEREQUIRED;
514        if ("deferred".equals(codeString))
515          return ArtifactAssessmentWorkflowStatus.DEFERRED;
516        if ("duplicate".equals(codeString))
517          return ArtifactAssessmentWorkflowStatus.DUPLICATE;
518        if ("applied".equals(codeString))
519          return ArtifactAssessmentWorkflowStatus.APPLIED;
520        if ("published".equals(codeString))
521          return ArtifactAssessmentWorkflowStatus.PUBLISHED;
522        if ("entered-in-error".equals(codeString))
523          return ArtifactAssessmentWorkflowStatus.ENTEREDINERROR;
524        throw new IllegalArgumentException("Unknown ArtifactAssessmentWorkflowStatus code '"+codeString+"'");
525        }
526        public Enumeration<ArtifactAssessmentWorkflowStatus> fromType(PrimitiveType<?> code) throws FHIRException {
527          if (code == null)
528            return null;
529          if (code.isEmpty())
530            return new Enumeration<ArtifactAssessmentWorkflowStatus>(this, ArtifactAssessmentWorkflowStatus.NULL, code);
531          String codeString = ((PrimitiveType) code).asStringValue();
532          if (codeString == null || "".equals(codeString))
533            return new Enumeration<ArtifactAssessmentWorkflowStatus>(this, ArtifactAssessmentWorkflowStatus.NULL, code);
534        if ("submitted".equals(codeString))
535          return new Enumeration<ArtifactAssessmentWorkflowStatus>(this, ArtifactAssessmentWorkflowStatus.SUBMITTED, code);
536        if ("triaged".equals(codeString))
537          return new Enumeration<ArtifactAssessmentWorkflowStatus>(this, ArtifactAssessmentWorkflowStatus.TRIAGED, code);
538        if ("waiting-for-input".equals(codeString))
539          return new Enumeration<ArtifactAssessmentWorkflowStatus>(this, ArtifactAssessmentWorkflowStatus.WAITINGFORINPUT, code);
540        if ("resolved-no-change".equals(codeString))
541          return new Enumeration<ArtifactAssessmentWorkflowStatus>(this, ArtifactAssessmentWorkflowStatus.RESOLVEDNOCHANGE, code);
542        if ("resolved-change-required".equals(codeString))
543          return new Enumeration<ArtifactAssessmentWorkflowStatus>(this, ArtifactAssessmentWorkflowStatus.RESOLVEDCHANGEREQUIRED, code);
544        if ("deferred".equals(codeString))
545          return new Enumeration<ArtifactAssessmentWorkflowStatus>(this, ArtifactAssessmentWorkflowStatus.DEFERRED, code);
546        if ("duplicate".equals(codeString))
547          return new Enumeration<ArtifactAssessmentWorkflowStatus>(this, ArtifactAssessmentWorkflowStatus.DUPLICATE, code);
548        if ("applied".equals(codeString))
549          return new Enumeration<ArtifactAssessmentWorkflowStatus>(this, ArtifactAssessmentWorkflowStatus.APPLIED, code);
550        if ("published".equals(codeString))
551          return new Enumeration<ArtifactAssessmentWorkflowStatus>(this, ArtifactAssessmentWorkflowStatus.PUBLISHED, code);
552        if ("entered-in-error".equals(codeString))
553          return new Enumeration<ArtifactAssessmentWorkflowStatus>(this, ArtifactAssessmentWorkflowStatus.ENTEREDINERROR, code);
554        throw new FHIRException("Unknown ArtifactAssessmentWorkflowStatus code '"+codeString+"'");
555        }
556    public String toCode(ArtifactAssessmentWorkflowStatus code) {
557      if (code == ArtifactAssessmentWorkflowStatus.SUBMITTED)
558        return "submitted";
559      if (code == ArtifactAssessmentWorkflowStatus.TRIAGED)
560        return "triaged";
561      if (code == ArtifactAssessmentWorkflowStatus.WAITINGFORINPUT)
562        return "waiting-for-input";
563      if (code == ArtifactAssessmentWorkflowStatus.RESOLVEDNOCHANGE)
564        return "resolved-no-change";
565      if (code == ArtifactAssessmentWorkflowStatus.RESOLVEDCHANGEREQUIRED)
566        return "resolved-change-required";
567      if (code == ArtifactAssessmentWorkflowStatus.DEFERRED)
568        return "deferred";
569      if (code == ArtifactAssessmentWorkflowStatus.DUPLICATE)
570        return "duplicate";
571      if (code == ArtifactAssessmentWorkflowStatus.APPLIED)
572        return "applied";
573      if (code == ArtifactAssessmentWorkflowStatus.PUBLISHED)
574        return "published";
575      if (code == ArtifactAssessmentWorkflowStatus.ENTEREDINERROR)
576        return "entered-in-error";
577      return "?";
578      }
579    public String toSystem(ArtifactAssessmentWorkflowStatus code) {
580      return code.getSystem();
581      }
582    }
583
584    @Block()
585    public static class ArtifactAssessmentContentComponent extends BackboneElement implements IBaseBackboneElement {
586        /**
587         * The type of information this component of the content represents.
588         */
589        @Child(name = "informationType", type = {CodeType.class}, order=1, min=0, max=1, modifier=false, summary=false)
590        @Description(shortDefinition="comment | classifier | rating | container | response | change-request", formalDefinition="The type of information this component of the content represents." )
591        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/artifactassessment-information-type")
592        protected Enumeration<ArtifactAssessmentInformationType> informationType;
593
594        /**
595         * A brief summary of the content of this component.
596         */
597        @Child(name = "summary", type = {MarkdownType.class}, order=2, min=0, max=1, modifier=false, summary=false)
598        @Description(shortDefinition="Brief summary of the content", formalDefinition="A brief summary of the content of this component." )
599        protected MarkdownType summary;
600
601        /**
602         * Indicates what type of content this component represents.
603         */
604        @Child(name = "type", type = {CodeableConcept.class}, order=3, min=0, max=1, modifier=false, summary=false)
605        @Description(shortDefinition="What type of content", formalDefinition="Indicates what type of content this component represents." )
606        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/certainty-type")
607        protected CodeableConcept type;
608
609        /**
610         * Represents a rating, classifier, or assessment of the artifact.
611         */
612        @Child(name = "classifier", type = {CodeableConcept.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
613        @Description(shortDefinition="Rating, classifier, or assessment", formalDefinition="Represents a rating, classifier, or assessment of the artifact." )
614        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/certainty-rating")
615        protected List<CodeableConcept> classifier;
616
617        /**
618         * A quantitative rating of the artifact.
619         */
620        @Child(name = "quantity", type = {Quantity.class}, order=5, min=0, max=1, modifier=false, summary=false)
621        @Description(shortDefinition="Quantitative rating", formalDefinition="A quantitative rating of the artifact." )
622        protected Quantity quantity;
623
624        /**
625         * Indicates who or what authored the content.
626         */
627        @Child(name = "author", type = {Patient.class, Practitioner.class, PractitionerRole.class, Organization.class, Device.class}, order=6, min=0, max=1, modifier=false, summary=false)
628        @Description(shortDefinition="Who authored the content", formalDefinition="Indicates who or what authored the content." )
629        protected Reference author;
630
631        /**
632         * A URI that points to what the comment is about, such as a line of text in the CQL, or a specific element in a resource.
633         */
634        @Child(name = "path", type = {UriType.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
635        @Description(shortDefinition="What the comment is directed to", formalDefinition="A URI that points to what the comment is about, such as a line of text in the CQL, or a specific element in a resource." )
636        protected List<UriType> path;
637
638        /**
639         * Additional related artifacts that provide supporting documentation, additional evidence, or further information related to the content.
640         */
641        @Child(name = "relatedArtifact", type = {RelatedArtifact.class}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
642        @Description(shortDefinition="Additional information", formalDefinition="Additional related artifacts that provide supporting documentation, additional evidence, or further information related to the content." )
643        protected List<RelatedArtifact> relatedArtifact;
644
645        /**
646         * Acceptable to publicly share the comment, classifier or rating.
647         */
648        @Child(name = "freeToShare", type = {BooleanType.class}, order=9, min=0, max=1, modifier=false, summary=false)
649        @Description(shortDefinition="Acceptable to publicly share the resource content", formalDefinition="Acceptable to publicly share the comment, classifier or rating." )
650        protected BooleanType freeToShare;
651
652        /**
653         * If the informationType is container, the components of the content.
654         */
655        @Child(name = "component", type = {ArtifactAssessmentContentComponent.class}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
656        @Description(shortDefinition="Contained content", formalDefinition="If the informationType is container, the components of the content." )
657        protected List<ArtifactAssessmentContentComponent> component;
658
659        private static final long serialVersionUID = -111630435L;
660
661    /**
662     * Constructor
663     */
664      public ArtifactAssessmentContentComponent() {
665        super();
666      }
667
668        /**
669         * @return {@link #informationType} (The type of information this component of the content represents.). This is the underlying object with id, value and extensions. The accessor "getInformationType" gives direct access to the value
670         */
671        public Enumeration<ArtifactAssessmentInformationType> getInformationTypeElement() { 
672          if (this.informationType == null)
673            if (Configuration.errorOnAutoCreate())
674              throw new Error("Attempt to auto-create ArtifactAssessmentContentComponent.informationType");
675            else if (Configuration.doAutoCreate())
676              this.informationType = new Enumeration<ArtifactAssessmentInformationType>(new ArtifactAssessmentInformationTypeEnumFactory()); // bb
677          return this.informationType;
678        }
679
680        public boolean hasInformationTypeElement() { 
681          return this.informationType != null && !this.informationType.isEmpty();
682        }
683
684        public boolean hasInformationType() { 
685          return this.informationType != null && !this.informationType.isEmpty();
686        }
687
688        /**
689         * @param value {@link #informationType} (The type of information this component of the content represents.). This is the underlying object with id, value and extensions. The accessor "getInformationType" gives direct access to the value
690         */
691        public ArtifactAssessmentContentComponent setInformationTypeElement(Enumeration<ArtifactAssessmentInformationType> value) { 
692          this.informationType = value;
693          return this;
694        }
695
696        /**
697         * @return The type of information this component of the content represents.
698         */
699        public ArtifactAssessmentInformationType getInformationType() { 
700          return this.informationType == null ? null : this.informationType.getValue();
701        }
702
703        /**
704         * @param value The type of information this component of the content represents.
705         */
706        public ArtifactAssessmentContentComponent setInformationType(ArtifactAssessmentInformationType value) { 
707          if (value == null)
708            this.informationType = null;
709          else {
710            if (this.informationType == null)
711              this.informationType = new Enumeration<ArtifactAssessmentInformationType>(new ArtifactAssessmentInformationTypeEnumFactory());
712            this.informationType.setValue(value);
713          }
714          return this;
715        }
716
717        /**
718         * @return {@link #summary} (A brief summary of the content of this component.). This is the underlying object with id, value and extensions. The accessor "getSummary" gives direct access to the value
719         */
720        public MarkdownType getSummaryElement() { 
721          if (this.summary == null)
722            if (Configuration.errorOnAutoCreate())
723              throw new Error("Attempt to auto-create ArtifactAssessmentContentComponent.summary");
724            else if (Configuration.doAutoCreate())
725              this.summary = new MarkdownType(); // bb
726          return this.summary;
727        }
728
729        public boolean hasSummaryElement() { 
730          return this.summary != null && !this.summary.isEmpty();
731        }
732
733        public boolean hasSummary() { 
734          return this.summary != null && !this.summary.isEmpty();
735        }
736
737        /**
738         * @param value {@link #summary} (A brief summary of the content of this component.). This is the underlying object with id, value and extensions. The accessor "getSummary" gives direct access to the value
739         */
740        public ArtifactAssessmentContentComponent setSummaryElement(MarkdownType value) { 
741          this.summary = value;
742          return this;
743        }
744
745        /**
746         * @return A brief summary of the content of this component.
747         */
748        public String getSummary() { 
749          return this.summary == null ? null : this.summary.getValue();
750        }
751
752        /**
753         * @param value A brief summary of the content of this component.
754         */
755        public ArtifactAssessmentContentComponent setSummary(String value) { 
756          if (Utilities.noString(value))
757            this.summary = null;
758          else {
759            if (this.summary == null)
760              this.summary = new MarkdownType();
761            this.summary.setValue(value);
762          }
763          return this;
764        }
765
766        /**
767         * @return {@link #type} (Indicates what type of content this component represents.)
768         */
769        public CodeableConcept getType() { 
770          if (this.type == null)
771            if (Configuration.errorOnAutoCreate())
772              throw new Error("Attempt to auto-create ArtifactAssessmentContentComponent.type");
773            else if (Configuration.doAutoCreate())
774              this.type = new CodeableConcept(); // cc
775          return this.type;
776        }
777
778        public boolean hasType() { 
779          return this.type != null && !this.type.isEmpty();
780        }
781
782        /**
783         * @param value {@link #type} (Indicates what type of content this component represents.)
784         */
785        public ArtifactAssessmentContentComponent setType(CodeableConcept value) { 
786          this.type = value;
787          return this;
788        }
789
790        /**
791         * @return {@link #classifier} (Represents a rating, classifier, or assessment of the artifact.)
792         */
793        public List<CodeableConcept> getClassifier() { 
794          if (this.classifier == null)
795            this.classifier = new ArrayList<CodeableConcept>();
796          return this.classifier;
797        }
798
799        /**
800         * @return Returns a reference to <code>this</code> for easy method chaining
801         */
802        public ArtifactAssessmentContentComponent setClassifier(List<CodeableConcept> theClassifier) { 
803          this.classifier = theClassifier;
804          return this;
805        }
806
807        public boolean hasClassifier() { 
808          if (this.classifier == null)
809            return false;
810          for (CodeableConcept item : this.classifier)
811            if (!item.isEmpty())
812              return true;
813          return false;
814        }
815
816        public CodeableConcept addClassifier() { //3
817          CodeableConcept t = new CodeableConcept();
818          if (this.classifier == null)
819            this.classifier = new ArrayList<CodeableConcept>();
820          this.classifier.add(t);
821          return t;
822        }
823
824        public ArtifactAssessmentContentComponent addClassifier(CodeableConcept t) { //3
825          if (t == null)
826            return this;
827          if (this.classifier == null)
828            this.classifier = new ArrayList<CodeableConcept>();
829          this.classifier.add(t);
830          return this;
831        }
832
833        /**
834         * @return The first repetition of repeating field {@link #classifier}, creating it if it does not already exist {3}
835         */
836        public CodeableConcept getClassifierFirstRep() { 
837          if (getClassifier().isEmpty()) {
838            addClassifier();
839          }
840          return getClassifier().get(0);
841        }
842
843        /**
844         * @return {@link #quantity} (A quantitative rating of the artifact.)
845         */
846        public Quantity getQuantity() { 
847          if (this.quantity == null)
848            if (Configuration.errorOnAutoCreate())
849              throw new Error("Attempt to auto-create ArtifactAssessmentContentComponent.quantity");
850            else if (Configuration.doAutoCreate())
851              this.quantity = new Quantity(); // cc
852          return this.quantity;
853        }
854
855        public boolean hasQuantity() { 
856          return this.quantity != null && !this.quantity.isEmpty();
857        }
858
859        /**
860         * @param value {@link #quantity} (A quantitative rating of the artifact.)
861         */
862        public ArtifactAssessmentContentComponent setQuantity(Quantity value) { 
863          this.quantity = value;
864          return this;
865        }
866
867        /**
868         * @return {@link #author} (Indicates who or what authored the content.)
869         */
870        public Reference getAuthor() { 
871          if (this.author == null)
872            if (Configuration.errorOnAutoCreate())
873              throw new Error("Attempt to auto-create ArtifactAssessmentContentComponent.author");
874            else if (Configuration.doAutoCreate())
875              this.author = new Reference(); // cc
876          return this.author;
877        }
878
879        public boolean hasAuthor() { 
880          return this.author != null && !this.author.isEmpty();
881        }
882
883        /**
884         * @param value {@link #author} (Indicates who or what authored the content.)
885         */
886        public ArtifactAssessmentContentComponent setAuthor(Reference value) { 
887          this.author = value;
888          return this;
889        }
890
891        /**
892         * @return {@link #path} (A URI that points to what the comment is about, such as a line of text in the CQL, or a specific element in a resource.)
893         */
894        public List<UriType> getPath() { 
895          if (this.path == null)
896            this.path = new ArrayList<UriType>();
897          return this.path;
898        }
899
900        /**
901         * @return Returns a reference to <code>this</code> for easy method chaining
902         */
903        public ArtifactAssessmentContentComponent setPath(List<UriType> thePath) { 
904          this.path = thePath;
905          return this;
906        }
907
908        public boolean hasPath() { 
909          if (this.path == null)
910            return false;
911          for (UriType item : this.path)
912            if (!item.isEmpty())
913              return true;
914          return false;
915        }
916
917        /**
918         * @return {@link #path} (A URI that points to what the comment is about, such as a line of text in the CQL, or a specific element in a resource.)
919         */
920        public UriType addPathElement() {//2 
921          UriType t = new UriType();
922          if (this.path == null)
923            this.path = new ArrayList<UriType>();
924          this.path.add(t);
925          return t;
926        }
927
928        /**
929         * @param value {@link #path} (A URI that points to what the comment is about, such as a line of text in the CQL, or a specific element in a resource.)
930         */
931        public ArtifactAssessmentContentComponent addPath(String value) { //1
932          UriType t = new UriType();
933          t.setValue(value);
934          if (this.path == null)
935            this.path = new ArrayList<UriType>();
936          this.path.add(t);
937          return this;
938        }
939
940        /**
941         * @param value {@link #path} (A URI that points to what the comment is about, such as a line of text in the CQL, or a specific element in a resource.)
942         */
943        public boolean hasPath(String value) { 
944          if (this.path == null)
945            return false;
946          for (UriType v : this.path)
947            if (v.getValue().equals(value)) // uri
948              return true;
949          return false;
950        }
951
952        /**
953         * @return {@link #relatedArtifact} (Additional related artifacts that provide supporting documentation, additional evidence, or further information related to the content.)
954         */
955        public List<RelatedArtifact> getRelatedArtifact() { 
956          if (this.relatedArtifact == null)
957            this.relatedArtifact = new ArrayList<RelatedArtifact>();
958          return this.relatedArtifact;
959        }
960
961        /**
962         * @return Returns a reference to <code>this</code> for easy method chaining
963         */
964        public ArtifactAssessmentContentComponent setRelatedArtifact(List<RelatedArtifact> theRelatedArtifact) { 
965          this.relatedArtifact = theRelatedArtifact;
966          return this;
967        }
968
969        public boolean hasRelatedArtifact() { 
970          if (this.relatedArtifact == null)
971            return false;
972          for (RelatedArtifact item : this.relatedArtifact)
973            if (!item.isEmpty())
974              return true;
975          return false;
976        }
977
978        public RelatedArtifact addRelatedArtifact() { //3
979          RelatedArtifact t = new RelatedArtifact();
980          if (this.relatedArtifact == null)
981            this.relatedArtifact = new ArrayList<RelatedArtifact>();
982          this.relatedArtifact.add(t);
983          return t;
984        }
985
986        public ArtifactAssessmentContentComponent addRelatedArtifact(RelatedArtifact t) { //3
987          if (t == null)
988            return this;
989          if (this.relatedArtifact == null)
990            this.relatedArtifact = new ArrayList<RelatedArtifact>();
991          this.relatedArtifact.add(t);
992          return this;
993        }
994
995        /**
996         * @return The first repetition of repeating field {@link #relatedArtifact}, creating it if it does not already exist {3}
997         */
998        public RelatedArtifact getRelatedArtifactFirstRep() { 
999          if (getRelatedArtifact().isEmpty()) {
1000            addRelatedArtifact();
1001          }
1002          return getRelatedArtifact().get(0);
1003        }
1004
1005        /**
1006         * @return {@link #freeToShare} (Acceptable to publicly share the comment, classifier or rating.). This is the underlying object with id, value and extensions. The accessor "getFreeToShare" gives direct access to the value
1007         */
1008        public BooleanType getFreeToShareElement() { 
1009          if (this.freeToShare == null)
1010            if (Configuration.errorOnAutoCreate())
1011              throw new Error("Attempt to auto-create ArtifactAssessmentContentComponent.freeToShare");
1012            else if (Configuration.doAutoCreate())
1013              this.freeToShare = new BooleanType(); // bb
1014          return this.freeToShare;
1015        }
1016
1017        public boolean hasFreeToShareElement() { 
1018          return this.freeToShare != null && !this.freeToShare.isEmpty();
1019        }
1020
1021        public boolean hasFreeToShare() { 
1022          return this.freeToShare != null && !this.freeToShare.isEmpty();
1023        }
1024
1025        /**
1026         * @param value {@link #freeToShare} (Acceptable to publicly share the comment, classifier or rating.). This is the underlying object with id, value and extensions. The accessor "getFreeToShare" gives direct access to the value
1027         */
1028        public ArtifactAssessmentContentComponent setFreeToShareElement(BooleanType value) { 
1029          this.freeToShare = value;
1030          return this;
1031        }
1032
1033        /**
1034         * @return Acceptable to publicly share the comment, classifier or rating.
1035         */
1036        public boolean getFreeToShare() { 
1037          return this.freeToShare == null || this.freeToShare.isEmpty() ? false : this.freeToShare.getValue();
1038        }
1039
1040        /**
1041         * @param value Acceptable to publicly share the comment, classifier or rating.
1042         */
1043        public ArtifactAssessmentContentComponent setFreeToShare(boolean value) { 
1044            if (this.freeToShare == null)
1045              this.freeToShare = new BooleanType();
1046            this.freeToShare.setValue(value);
1047          return this;
1048        }
1049
1050        /**
1051         * @return {@link #component} (If the informationType is container, the components of the content.)
1052         */
1053        public List<ArtifactAssessmentContentComponent> getComponent() { 
1054          if (this.component == null)
1055            this.component = new ArrayList<ArtifactAssessmentContentComponent>();
1056          return this.component;
1057        }
1058
1059        /**
1060         * @return Returns a reference to <code>this</code> for easy method chaining
1061         */
1062        public ArtifactAssessmentContentComponent setComponent(List<ArtifactAssessmentContentComponent> theComponent) { 
1063          this.component = theComponent;
1064          return this;
1065        }
1066
1067        public boolean hasComponent() { 
1068          if (this.component == null)
1069            return false;
1070          for (ArtifactAssessmentContentComponent item : this.component)
1071            if (!item.isEmpty())
1072              return true;
1073          return false;
1074        }
1075
1076        public ArtifactAssessmentContentComponent addComponent() { //3
1077          ArtifactAssessmentContentComponent t = new ArtifactAssessmentContentComponent();
1078          if (this.component == null)
1079            this.component = new ArrayList<ArtifactAssessmentContentComponent>();
1080          this.component.add(t);
1081          return t;
1082        }
1083
1084        public ArtifactAssessmentContentComponent addComponent(ArtifactAssessmentContentComponent t) { //3
1085          if (t == null)
1086            return this;
1087          if (this.component == null)
1088            this.component = new ArrayList<ArtifactAssessmentContentComponent>();
1089          this.component.add(t);
1090          return this;
1091        }
1092
1093        /**
1094         * @return The first repetition of repeating field {@link #component}, creating it if it does not already exist {3}
1095         */
1096        public ArtifactAssessmentContentComponent getComponentFirstRep() { 
1097          if (getComponent().isEmpty()) {
1098            addComponent();
1099          }
1100          return getComponent().get(0);
1101        }
1102
1103        protected void listChildren(List<Property> children) {
1104          super.listChildren(children);
1105          children.add(new Property("informationType", "code", "The type of information this component of the content represents.", 0, 1, informationType));
1106          children.add(new Property("summary", "markdown", "A brief summary of the content of this component.", 0, 1, summary));
1107          children.add(new Property("type", "CodeableConcept", "Indicates what type of content this component represents.", 0, 1, type));
1108          children.add(new Property("classifier", "CodeableConcept", "Represents a rating, classifier, or assessment of the artifact.", 0, java.lang.Integer.MAX_VALUE, classifier));
1109          children.add(new Property("quantity", "Quantity", "A quantitative rating of the artifact.", 0, 1, quantity));
1110          children.add(new Property("author", "Reference(Patient|Practitioner|PractitionerRole|Organization|Device)", "Indicates who or what authored the content.", 0, 1, author));
1111          children.add(new Property("path", "uri", "A URI that points to what the comment is about, such as a line of text in the CQL, or a specific element in a resource.", 0, java.lang.Integer.MAX_VALUE, path));
1112          children.add(new Property("relatedArtifact", "RelatedArtifact", "Additional related artifacts that provide supporting documentation, additional evidence, or further information related to the content.", 0, java.lang.Integer.MAX_VALUE, relatedArtifact));
1113          children.add(new Property("freeToShare", "boolean", "Acceptable to publicly share the comment, classifier or rating.", 0, 1, freeToShare));
1114          children.add(new Property("component", "@ArtifactAssessment.content", "If the informationType is container, the components of the content.", 0, java.lang.Integer.MAX_VALUE, component));
1115        }
1116
1117        @Override
1118        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1119          switch (_hash) {
1120          case 1302856326: /*informationType*/  return new Property("informationType", "code", "The type of information this component of the content represents.", 0, 1, informationType);
1121          case -1857640538: /*summary*/  return new Property("summary", "markdown", "A brief summary of the content of this component.", 0, 1, summary);
1122          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Indicates what type of content this component represents.", 0, 1, type);
1123          case -281470431: /*classifier*/  return new Property("classifier", "CodeableConcept", "Represents a rating, classifier, or assessment of the artifact.", 0, java.lang.Integer.MAX_VALUE, classifier);
1124          case -1285004149: /*quantity*/  return new Property("quantity", "Quantity", "A quantitative rating of the artifact.", 0, 1, quantity);
1125          case -1406328437: /*author*/  return new Property("author", "Reference(Patient|Practitioner|PractitionerRole|Organization|Device)", "Indicates who or what authored the content.", 0, 1, author);
1126          case 3433509: /*path*/  return new Property("path", "uri", "A URI that points to what the comment is about, such as a line of text in the CQL, or a specific element in a resource.", 0, java.lang.Integer.MAX_VALUE, path);
1127          case 666807069: /*relatedArtifact*/  return new Property("relatedArtifact", "RelatedArtifact", "Additional related artifacts that provide supporting documentation, additional evidence, or further information related to the content.", 0, java.lang.Integer.MAX_VALUE, relatedArtifact);
1128          case -1268656616: /*freeToShare*/  return new Property("freeToShare", "boolean", "Acceptable to publicly share the comment, classifier or rating.", 0, 1, freeToShare);
1129          case -1399907075: /*component*/  return new Property("component", "@ArtifactAssessment.content", "If the informationType is container, the components of the content.", 0, java.lang.Integer.MAX_VALUE, component);
1130          default: return super.getNamedProperty(_hash, _name, _checkValid);
1131          }
1132
1133        }
1134
1135      @Override
1136      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1137        switch (hash) {
1138        case 1302856326: /*informationType*/ return this.informationType == null ? new Base[0] : new Base[] {this.informationType}; // Enumeration<ArtifactAssessmentInformationType>
1139        case -1857640538: /*summary*/ return this.summary == null ? new Base[0] : new Base[] {this.summary}; // MarkdownType
1140        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
1141        case -281470431: /*classifier*/ return this.classifier == null ? new Base[0] : this.classifier.toArray(new Base[this.classifier.size()]); // CodeableConcept
1142        case -1285004149: /*quantity*/ return this.quantity == null ? new Base[0] : new Base[] {this.quantity}; // Quantity
1143        case -1406328437: /*author*/ return this.author == null ? new Base[0] : new Base[] {this.author}; // Reference
1144        case 3433509: /*path*/ return this.path == null ? new Base[0] : this.path.toArray(new Base[this.path.size()]); // UriType
1145        case 666807069: /*relatedArtifact*/ return this.relatedArtifact == null ? new Base[0] : this.relatedArtifact.toArray(new Base[this.relatedArtifact.size()]); // RelatedArtifact
1146        case -1268656616: /*freeToShare*/ return this.freeToShare == null ? new Base[0] : new Base[] {this.freeToShare}; // BooleanType
1147        case -1399907075: /*component*/ return this.component == null ? new Base[0] : this.component.toArray(new Base[this.component.size()]); // ArtifactAssessmentContentComponent
1148        default: return super.getProperty(hash, name, checkValid);
1149        }
1150
1151      }
1152
1153      @Override
1154      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1155        switch (hash) {
1156        case 1302856326: // informationType
1157          value = new ArtifactAssessmentInformationTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
1158          this.informationType = (Enumeration) value; // Enumeration<ArtifactAssessmentInformationType>
1159          return value;
1160        case -1857640538: // summary
1161          this.summary = TypeConvertor.castToMarkdown(value); // MarkdownType
1162          return value;
1163        case 3575610: // type
1164          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1165          return value;
1166        case -281470431: // classifier
1167          this.getClassifier().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
1168          return value;
1169        case -1285004149: // quantity
1170          this.quantity = TypeConvertor.castToQuantity(value); // Quantity
1171          return value;
1172        case -1406328437: // author
1173          this.author = TypeConvertor.castToReference(value); // Reference
1174          return value;
1175        case 3433509: // path
1176          this.getPath().add(TypeConvertor.castToUri(value)); // UriType
1177          return value;
1178        case 666807069: // relatedArtifact
1179          this.getRelatedArtifact().add(TypeConvertor.castToRelatedArtifact(value)); // RelatedArtifact
1180          return value;
1181        case -1268656616: // freeToShare
1182          this.freeToShare = TypeConvertor.castToBoolean(value); // BooleanType
1183          return value;
1184        case -1399907075: // component
1185          this.getComponent().add((ArtifactAssessmentContentComponent) value); // ArtifactAssessmentContentComponent
1186          return value;
1187        default: return super.setProperty(hash, name, value);
1188        }
1189
1190      }
1191
1192      @Override
1193      public Base setProperty(String name, Base value) throws FHIRException {
1194        if (name.equals("informationType")) {
1195          value = new ArtifactAssessmentInformationTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
1196          this.informationType = (Enumeration) value; // Enumeration<ArtifactAssessmentInformationType>
1197        } else if (name.equals("summary")) {
1198          this.summary = TypeConvertor.castToMarkdown(value); // MarkdownType
1199        } else if (name.equals("type")) {
1200          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1201        } else if (name.equals("classifier")) {
1202          this.getClassifier().add(TypeConvertor.castToCodeableConcept(value));
1203        } else if (name.equals("quantity")) {
1204          this.quantity = TypeConvertor.castToQuantity(value); // Quantity
1205        } else if (name.equals("author")) {
1206          this.author = TypeConvertor.castToReference(value); // Reference
1207        } else if (name.equals("path")) {
1208          this.getPath().add(TypeConvertor.castToUri(value));
1209        } else if (name.equals("relatedArtifact")) {
1210          this.getRelatedArtifact().add(TypeConvertor.castToRelatedArtifact(value));
1211        } else if (name.equals("freeToShare")) {
1212          this.freeToShare = TypeConvertor.castToBoolean(value); // BooleanType
1213        } else if (name.equals("component")) {
1214          this.getComponent().add((ArtifactAssessmentContentComponent) value);
1215        } else
1216          return super.setProperty(name, value);
1217        return value;
1218      }
1219
1220  @Override
1221  public void removeChild(String name, Base value) throws FHIRException {
1222        if (name.equals("informationType")) {
1223          value = new ArtifactAssessmentInformationTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
1224          this.informationType = (Enumeration) value; // Enumeration<ArtifactAssessmentInformationType>
1225        } else if (name.equals("summary")) {
1226          this.summary = null;
1227        } else if (name.equals("type")) {
1228          this.type = null;
1229        } else if (name.equals("classifier")) {
1230          this.getClassifier().remove(value);
1231        } else if (name.equals("quantity")) {
1232          this.quantity = null;
1233        } else if (name.equals("author")) {
1234          this.author = null;
1235        } else if (name.equals("path")) {
1236          this.getPath().remove(value);
1237        } else if (name.equals("relatedArtifact")) {
1238          this.getRelatedArtifact().remove(value);
1239        } else if (name.equals("freeToShare")) {
1240          this.freeToShare = null;
1241        } else if (name.equals("component")) {
1242          this.getComponent().remove((ArtifactAssessmentContentComponent) value);
1243        } else
1244          super.removeChild(name, value);
1245        
1246      }
1247
1248      @Override
1249      public Base makeProperty(int hash, String name) throws FHIRException {
1250        switch (hash) {
1251        case 1302856326:  return getInformationTypeElement();
1252        case -1857640538:  return getSummaryElement();
1253        case 3575610:  return getType();
1254        case -281470431:  return addClassifier(); 
1255        case -1285004149:  return getQuantity();
1256        case -1406328437:  return getAuthor();
1257        case 3433509:  return addPathElement();
1258        case 666807069:  return addRelatedArtifact(); 
1259        case -1268656616:  return getFreeToShareElement();
1260        case -1399907075:  return addComponent(); 
1261        default: return super.makeProperty(hash, name);
1262        }
1263
1264      }
1265
1266      @Override
1267      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1268        switch (hash) {
1269        case 1302856326: /*informationType*/ return new String[] {"code"};
1270        case -1857640538: /*summary*/ return new String[] {"markdown"};
1271        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
1272        case -281470431: /*classifier*/ return new String[] {"CodeableConcept"};
1273        case -1285004149: /*quantity*/ return new String[] {"Quantity"};
1274        case -1406328437: /*author*/ return new String[] {"Reference"};
1275        case 3433509: /*path*/ return new String[] {"uri"};
1276        case 666807069: /*relatedArtifact*/ return new String[] {"RelatedArtifact"};
1277        case -1268656616: /*freeToShare*/ return new String[] {"boolean"};
1278        case -1399907075: /*component*/ return new String[] {"@ArtifactAssessment.content"};
1279        default: return super.getTypesForProperty(hash, name);
1280        }
1281
1282      }
1283
1284      @Override
1285      public Base addChild(String name) throws FHIRException {
1286        if (name.equals("informationType")) {
1287          throw new FHIRException("Cannot call addChild on a singleton property ArtifactAssessment.content.informationType");
1288        }
1289        else if (name.equals("summary")) {
1290          throw new FHIRException("Cannot call addChild on a singleton property ArtifactAssessment.content.summary");
1291        }
1292        else if (name.equals("type")) {
1293          this.type = new CodeableConcept();
1294          return this.type;
1295        }
1296        else if (name.equals("classifier")) {
1297          return addClassifier();
1298        }
1299        else if (name.equals("quantity")) {
1300          this.quantity = new Quantity();
1301          return this.quantity;
1302        }
1303        else if (name.equals("author")) {
1304          this.author = new Reference();
1305          return this.author;
1306        }
1307        else if (name.equals("path")) {
1308          throw new FHIRException("Cannot call addChild on a singleton property ArtifactAssessment.content.path");
1309        }
1310        else if (name.equals("relatedArtifact")) {
1311          return addRelatedArtifact();
1312        }
1313        else if (name.equals("freeToShare")) {
1314          throw new FHIRException("Cannot call addChild on a singleton property ArtifactAssessment.content.freeToShare");
1315        }
1316        else if (name.equals("component")) {
1317          return addComponent();
1318        }
1319        else
1320          return super.addChild(name);
1321      }
1322
1323      public ArtifactAssessmentContentComponent copy() {
1324        ArtifactAssessmentContentComponent dst = new ArtifactAssessmentContentComponent();
1325        copyValues(dst);
1326        return dst;
1327      }
1328
1329      public void copyValues(ArtifactAssessmentContentComponent dst) {
1330        super.copyValues(dst);
1331        dst.informationType = informationType == null ? null : informationType.copy();
1332        dst.summary = summary == null ? null : summary.copy();
1333        dst.type = type == null ? null : type.copy();
1334        if (classifier != null) {
1335          dst.classifier = new ArrayList<CodeableConcept>();
1336          for (CodeableConcept i : classifier)
1337            dst.classifier.add(i.copy());
1338        };
1339        dst.quantity = quantity == null ? null : quantity.copy();
1340        dst.author = author == null ? null : author.copy();
1341        if (path != null) {
1342          dst.path = new ArrayList<UriType>();
1343          for (UriType i : path)
1344            dst.path.add(i.copy());
1345        };
1346        if (relatedArtifact != null) {
1347          dst.relatedArtifact = new ArrayList<RelatedArtifact>();
1348          for (RelatedArtifact i : relatedArtifact)
1349            dst.relatedArtifact.add(i.copy());
1350        };
1351        dst.freeToShare = freeToShare == null ? null : freeToShare.copy();
1352        if (component != null) {
1353          dst.component = new ArrayList<ArtifactAssessmentContentComponent>();
1354          for (ArtifactAssessmentContentComponent i : component)
1355            dst.component.add(i.copy());
1356        };
1357      }
1358
1359      @Override
1360      public boolean equalsDeep(Base other_) {
1361        if (!super.equalsDeep(other_))
1362          return false;
1363        if (!(other_ instanceof ArtifactAssessmentContentComponent))
1364          return false;
1365        ArtifactAssessmentContentComponent o = (ArtifactAssessmentContentComponent) other_;
1366        return compareDeep(informationType, o.informationType, true) && compareDeep(summary, o.summary, true)
1367           && compareDeep(type, o.type, true) && compareDeep(classifier, o.classifier, true) && compareDeep(quantity, o.quantity, true)
1368           && compareDeep(author, o.author, true) && compareDeep(path, o.path, true) && compareDeep(relatedArtifact, o.relatedArtifact, true)
1369           && compareDeep(freeToShare, o.freeToShare, true) && compareDeep(component, o.component, true);
1370      }
1371
1372      @Override
1373      public boolean equalsShallow(Base other_) {
1374        if (!super.equalsShallow(other_))
1375          return false;
1376        if (!(other_ instanceof ArtifactAssessmentContentComponent))
1377          return false;
1378        ArtifactAssessmentContentComponent o = (ArtifactAssessmentContentComponent) other_;
1379        return compareValues(informationType, o.informationType, true) && compareValues(summary, o.summary, true)
1380           && compareValues(path, o.path, true) && compareValues(freeToShare, o.freeToShare, true);
1381      }
1382
1383      public boolean isEmpty() {
1384        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(informationType, summary, type
1385          , classifier, quantity, author, path, relatedArtifact, freeToShare, component
1386          );
1387      }
1388
1389  public String fhirType() {
1390    return "ArtifactAssessment.content";
1391
1392  }
1393
1394  }
1395
1396    /**
1397     * A formal identifier that is used to identify this artifact assessment when it is represented in other formats, or referenced in a specification, model, design or an instance.
1398     */
1399    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1400    @Description(shortDefinition="Additional identifier for the artifact assessment", formalDefinition="A formal identifier that is used to identify this artifact assessment when it is represented in other formats, or referenced in a specification, model, design or an instance." )
1401    protected List<Identifier> identifier;
1402
1403    /**
1404     * A short title for the assessment for use in displaying and selecting.
1405     */
1406    @Child(name = "title", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=true)
1407    @Description(shortDefinition="A short title for the assessment for use in displaying and selecting", formalDefinition="A short title for the assessment for use in displaying and selecting." )
1408    protected StringType title;
1409
1410    /**
1411     * Display of or reference to the bibliographic citation of the comment, classifier, or rating.
1412     */
1413    @Child(name = "citeAs", type = {Citation.class, MarkdownType.class}, order=2, min=0, max=1, modifier=false, summary=false)
1414    @Description(shortDefinition="How to cite the comment or rating", formalDefinition="Display of or reference to the bibliographic citation of the comment, classifier, or rating." )
1415    protected DataType citeAs;
1416
1417    /**
1418     * The date  (and optionally time) when the artifact assessment was published. The date must change when the disposition changes and it must change if the workflow status code changes. In addition, it should change when the substantive content of the artifact assessment changes.
1419     */
1420    @Child(name = "date", type = {DateTimeType.class}, order=3, min=0, max=1, modifier=false, summary=true)
1421    @Description(shortDefinition="Date last changed", formalDefinition="The date  (and optionally time) when the artifact assessment was published. The date must change when the disposition changes and it must change if the workflow status code changes. In addition, it should change when the substantive content of the artifact assessment changes." )
1422    protected DateTimeType date;
1423
1424    /**
1425     * A copyright statement relating to the artifact assessment and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the artifact assessment.
1426     */
1427    @Child(name = "copyright", type = {MarkdownType.class}, order=4, min=0, max=1, modifier=false, summary=false)
1428    @Description(shortDefinition="Use and/or publishing restrictions", formalDefinition="A copyright statement relating to the artifact assessment and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the artifact assessment." )
1429    protected MarkdownType copyright;
1430
1431    /**
1432     * The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
1433     */
1434    @Child(name = "approvalDate", type = {DateType.class}, order=5, min=0, max=1, modifier=false, summary=false)
1435    @Description(shortDefinition="When the artifact assessment 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." )
1436    protected DateType approvalDate;
1437
1438    /**
1439     * The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.
1440     */
1441    @Child(name = "lastReviewDate", type = {DateType.class}, order=6, min=0, max=1, modifier=false, summary=true)
1442    @Description(shortDefinition="When the artifact assessment 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." )
1443    protected DateType lastReviewDate;
1444
1445    /**
1446     * A reference to a resource, canonical resource, or non-FHIR resource which the comment or assessment is about.
1447     */
1448    @Child(name = "artifact", type = {Reference.class, CanonicalType.class, UriType.class}, order=7, min=1, max=1, modifier=false, summary=true)
1449    @Description(shortDefinition="The artifact assessed, commented upon or rated", formalDefinition="A reference to a resource, canonical resource, or non-FHIR resource which the comment or assessment is about." )
1450    protected DataType artifact;
1451
1452    /**
1453     * A component comment, classifier, or rating of the artifact.
1454     */
1455    @Child(name = "content", type = {}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1456    @Description(shortDefinition="Comment, classifier, or rating content", formalDefinition="A component comment, classifier, or rating of the artifact." )
1457    protected List<ArtifactAssessmentContentComponent> content;
1458
1459    /**
1460     * Indicates the workflow status of the comment or change request.
1461     */
1462    @Child(name = "workflowStatus", type = {CodeType.class}, order=9, min=0, max=1, modifier=false, summary=true)
1463    @Description(shortDefinition="submitted | triaged | waiting-for-input | resolved-no-change | resolved-change-required | deferred | duplicate | applied | published | entered-in-error", formalDefinition="Indicates the workflow status of the comment or change request." )
1464    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/artifactassessment-workflow-status")
1465    protected Enumeration<ArtifactAssessmentWorkflowStatus> workflowStatus;
1466
1467    /**
1468     * Indicates the disposition of the responsible party to the comment or change request.
1469     */
1470    @Child(name = "disposition", type = {CodeType.class}, order=10, min=0, max=1, modifier=false, summary=true)
1471    @Description(shortDefinition="unresolved | not-persuasive | persuasive | persuasive-with-modification | not-persuasive-with-modification", formalDefinition="Indicates the disposition of the responsible party to the comment or change request." )
1472    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/artifactassessment-disposition")
1473    protected Enumeration<ArtifactAssessmentDisposition> disposition;
1474
1475    private static final long serialVersionUID = 525457507L;
1476
1477  /**
1478   * Constructor
1479   */
1480    public ArtifactAssessment() {
1481      super();
1482    }
1483
1484  /**
1485   * Constructor
1486   */
1487    public ArtifactAssessment(DataType artifact) {
1488      super();
1489      this.setArtifact(artifact);
1490    }
1491
1492    /**
1493     * @return {@link #identifier} (A formal identifier that is used to identify this artifact assessment when it is represented in other formats, or referenced in a specification, model, design or an instance.)
1494     */
1495    public List<Identifier> getIdentifier() { 
1496      if (this.identifier == null)
1497        this.identifier = new ArrayList<Identifier>();
1498      return this.identifier;
1499    }
1500
1501    /**
1502     * @return Returns a reference to <code>this</code> for easy method chaining
1503     */
1504    public ArtifactAssessment setIdentifier(List<Identifier> theIdentifier) { 
1505      this.identifier = theIdentifier;
1506      return this;
1507    }
1508
1509    public boolean hasIdentifier() { 
1510      if (this.identifier == null)
1511        return false;
1512      for (Identifier item : this.identifier)
1513        if (!item.isEmpty())
1514          return true;
1515      return false;
1516    }
1517
1518    public Identifier addIdentifier() { //3
1519      Identifier t = new Identifier();
1520      if (this.identifier == null)
1521        this.identifier = new ArrayList<Identifier>();
1522      this.identifier.add(t);
1523      return t;
1524    }
1525
1526    public ArtifactAssessment addIdentifier(Identifier t) { //3
1527      if (t == null)
1528        return this;
1529      if (this.identifier == null)
1530        this.identifier = new ArrayList<Identifier>();
1531      this.identifier.add(t);
1532      return this;
1533    }
1534
1535    /**
1536     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
1537     */
1538    public Identifier getIdentifierFirstRep() { 
1539      if (getIdentifier().isEmpty()) {
1540        addIdentifier();
1541      }
1542      return getIdentifier().get(0);
1543    }
1544
1545    /**
1546     * @return {@link #title} (A short title for the assessment for use in displaying and selecting.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
1547     */
1548    public StringType getTitleElement() { 
1549      if (this.title == null)
1550        if (Configuration.errorOnAutoCreate())
1551          throw new Error("Attempt to auto-create ArtifactAssessment.title");
1552        else if (Configuration.doAutoCreate())
1553          this.title = new StringType(); // bb
1554      return this.title;
1555    }
1556
1557    public boolean hasTitleElement() { 
1558      return this.title != null && !this.title.isEmpty();
1559    }
1560
1561    public boolean hasTitle() { 
1562      return this.title != null && !this.title.isEmpty();
1563    }
1564
1565    /**
1566     * @param value {@link #title} (A short title for the assessment for use in displaying and selecting.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
1567     */
1568    public ArtifactAssessment setTitleElement(StringType value) { 
1569      this.title = value;
1570      return this;
1571    }
1572
1573    /**
1574     * @return A short title for the assessment for use in displaying and selecting.
1575     */
1576    public String getTitle() { 
1577      return this.title == null ? null : this.title.getValue();
1578    }
1579
1580    /**
1581     * @param value A short title for the assessment for use in displaying and selecting.
1582     */
1583    public ArtifactAssessment setTitle(String value) { 
1584      if (Utilities.noString(value))
1585        this.title = null;
1586      else {
1587        if (this.title == null)
1588          this.title = new StringType();
1589        this.title.setValue(value);
1590      }
1591      return this;
1592    }
1593
1594    /**
1595     * @return {@link #citeAs} (Display of or reference to the bibliographic citation of the comment, classifier, or rating.)
1596     */
1597    public DataType getCiteAs() { 
1598      return this.citeAs;
1599    }
1600
1601    /**
1602     * @return {@link #citeAs} (Display of or reference to the bibliographic citation of the comment, classifier, or rating.)
1603     */
1604    public Reference getCiteAsReference() throws FHIRException { 
1605      if (this.citeAs == null)
1606        this.citeAs = new Reference();
1607      if (!(this.citeAs instanceof Reference))
1608        throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.citeAs.getClass().getName()+" was encountered");
1609      return (Reference) this.citeAs;
1610    }
1611
1612    public boolean hasCiteAsReference() { 
1613      return this != null && this.citeAs instanceof Reference;
1614    }
1615
1616    /**
1617     * @return {@link #citeAs} (Display of or reference to the bibliographic citation of the comment, classifier, or rating.)
1618     */
1619    public MarkdownType getCiteAsMarkdownType() throws FHIRException { 
1620      if (this.citeAs == null)
1621        this.citeAs = new MarkdownType();
1622      if (!(this.citeAs instanceof MarkdownType))
1623        throw new FHIRException("Type mismatch: the type MarkdownType was expected, but "+this.citeAs.getClass().getName()+" was encountered");
1624      return (MarkdownType) this.citeAs;
1625    }
1626
1627    public boolean hasCiteAsMarkdownType() { 
1628      return this != null && this.citeAs instanceof MarkdownType;
1629    }
1630
1631    public boolean hasCiteAs() { 
1632      return this.citeAs != null && !this.citeAs.isEmpty();
1633    }
1634
1635    /**
1636     * @param value {@link #citeAs} (Display of or reference to the bibliographic citation of the comment, classifier, or rating.)
1637     */
1638    public ArtifactAssessment setCiteAs(DataType value) { 
1639      if (value != null && !(value instanceof Reference || value instanceof MarkdownType))
1640        throw new FHIRException("Not the right type for ArtifactAssessment.citeAs[x]: "+value.fhirType());
1641      this.citeAs = value;
1642      return this;
1643    }
1644
1645    /**
1646     * @return {@link #date} (The date  (and optionally time) when the artifact assessment was published. The date must change when the disposition changes and it must change if the workflow status code changes. In addition, it should change when the substantive content of the artifact assessment changes.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
1647     */
1648    public DateTimeType getDateElement() { 
1649      if (this.date == null)
1650        if (Configuration.errorOnAutoCreate())
1651          throw new Error("Attempt to auto-create ArtifactAssessment.date");
1652        else if (Configuration.doAutoCreate())
1653          this.date = new DateTimeType(); // bb
1654      return this.date;
1655    }
1656
1657    public boolean hasDateElement() { 
1658      return this.date != null && !this.date.isEmpty();
1659    }
1660
1661    public boolean hasDate() { 
1662      return this.date != null && !this.date.isEmpty();
1663    }
1664
1665    /**
1666     * @param value {@link #date} (The date  (and optionally time) when the artifact assessment was published. The date must change when the disposition changes and it must change if the workflow status code changes. In addition, it should change when the substantive content of the artifact assessment changes.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
1667     */
1668    public ArtifactAssessment setDateElement(DateTimeType value) { 
1669      this.date = value;
1670      return this;
1671    }
1672
1673    /**
1674     * @return The date  (and optionally time) when the artifact assessment was published. The date must change when the disposition changes and it must change if the workflow status code changes. In addition, it should change when the substantive content of the artifact assessment changes.
1675     */
1676    public Date getDate() { 
1677      return this.date == null ? null : this.date.getValue();
1678    }
1679
1680    /**
1681     * @param value The date  (and optionally time) when the artifact assessment was published. The date must change when the disposition changes and it must change if the workflow status code changes. In addition, it should change when the substantive content of the artifact assessment changes.
1682     */
1683    public ArtifactAssessment setDate(Date value) { 
1684      if (value == null)
1685        this.date = null;
1686      else {
1687        if (this.date == null)
1688          this.date = new DateTimeType();
1689        this.date.setValue(value);
1690      }
1691      return this;
1692    }
1693
1694    /**
1695     * @return {@link #copyright} (A copyright statement relating to the artifact assessment and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the artifact assessment.). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
1696     */
1697    public MarkdownType getCopyrightElement() { 
1698      if (this.copyright == null)
1699        if (Configuration.errorOnAutoCreate())
1700          throw new Error("Attempt to auto-create ArtifactAssessment.copyright");
1701        else if (Configuration.doAutoCreate())
1702          this.copyright = new MarkdownType(); // bb
1703      return this.copyright;
1704    }
1705
1706    public boolean hasCopyrightElement() { 
1707      return this.copyright != null && !this.copyright.isEmpty();
1708    }
1709
1710    public boolean hasCopyright() { 
1711      return this.copyright != null && !this.copyright.isEmpty();
1712    }
1713
1714    /**
1715     * @param value {@link #copyright} (A copyright statement relating to the artifact assessment and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the artifact assessment.). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
1716     */
1717    public ArtifactAssessment setCopyrightElement(MarkdownType value) { 
1718      this.copyright = value;
1719      return this;
1720    }
1721
1722    /**
1723     * @return A copyright statement relating to the artifact assessment and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the artifact assessment.
1724     */
1725    public String getCopyright() { 
1726      return this.copyright == null ? null : this.copyright.getValue();
1727    }
1728
1729    /**
1730     * @param value A copyright statement relating to the artifact assessment and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the artifact assessment.
1731     */
1732    public ArtifactAssessment setCopyright(String value) { 
1733      if (Utilities.noString(value))
1734        this.copyright = null;
1735      else {
1736        if (this.copyright == null)
1737          this.copyright = new MarkdownType();
1738        this.copyright.setValue(value);
1739      }
1740      return this;
1741    }
1742
1743    /**
1744     * @return {@link #approvalDate} (The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.). This is the underlying object with id, value and extensions. The accessor "getApprovalDate" gives direct access to the value
1745     */
1746    public DateType getApprovalDateElement() { 
1747      if (this.approvalDate == null)
1748        if (Configuration.errorOnAutoCreate())
1749          throw new Error("Attempt to auto-create ArtifactAssessment.approvalDate");
1750        else if (Configuration.doAutoCreate())
1751          this.approvalDate = new DateType(); // bb
1752      return this.approvalDate;
1753    }
1754
1755    public boolean hasApprovalDateElement() { 
1756      return this.approvalDate != null && !this.approvalDate.isEmpty();
1757    }
1758
1759    public boolean hasApprovalDate() { 
1760      return this.approvalDate != null && !this.approvalDate.isEmpty();
1761    }
1762
1763    /**
1764     * @param value {@link #approvalDate} (The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.). This is the underlying object with id, value and extensions. The accessor "getApprovalDate" gives direct access to the value
1765     */
1766    public ArtifactAssessment setApprovalDateElement(DateType value) { 
1767      this.approvalDate = value;
1768      return this;
1769    }
1770
1771    /**
1772     * @return The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
1773     */
1774    public Date getApprovalDate() { 
1775      return this.approvalDate == null ? null : this.approvalDate.getValue();
1776    }
1777
1778    /**
1779     * @param value The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
1780     */
1781    public ArtifactAssessment setApprovalDate(Date value) { 
1782      if (value == null)
1783        this.approvalDate = null;
1784      else {
1785        if (this.approvalDate == null)
1786          this.approvalDate = new DateType();
1787        this.approvalDate.setValue(value);
1788      }
1789      return this;
1790    }
1791
1792    /**
1793     * @return {@link #lastReviewDate} (The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.). This is the underlying object with id, value and extensions. The accessor "getLastReviewDate" gives direct access to the value
1794     */
1795    public DateType getLastReviewDateElement() { 
1796      if (this.lastReviewDate == null)
1797        if (Configuration.errorOnAutoCreate())
1798          throw new Error("Attempt to auto-create ArtifactAssessment.lastReviewDate");
1799        else if (Configuration.doAutoCreate())
1800          this.lastReviewDate = new DateType(); // bb
1801      return this.lastReviewDate;
1802    }
1803
1804    public boolean hasLastReviewDateElement() { 
1805      return this.lastReviewDate != null && !this.lastReviewDate.isEmpty();
1806    }
1807
1808    public boolean hasLastReviewDate() { 
1809      return this.lastReviewDate != null && !this.lastReviewDate.isEmpty();
1810    }
1811
1812    /**
1813     * @param value {@link #lastReviewDate} (The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.). This is the underlying object with id, value and extensions. The accessor "getLastReviewDate" gives direct access to the value
1814     */
1815    public ArtifactAssessment setLastReviewDateElement(DateType value) { 
1816      this.lastReviewDate = value;
1817      return this;
1818    }
1819
1820    /**
1821     * @return The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.
1822     */
1823    public Date getLastReviewDate() { 
1824      return this.lastReviewDate == null ? null : this.lastReviewDate.getValue();
1825    }
1826
1827    /**
1828     * @param value The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.
1829     */
1830    public ArtifactAssessment setLastReviewDate(Date value) { 
1831      if (value == null)
1832        this.lastReviewDate = null;
1833      else {
1834        if (this.lastReviewDate == null)
1835          this.lastReviewDate = new DateType();
1836        this.lastReviewDate.setValue(value);
1837      }
1838      return this;
1839    }
1840
1841    /**
1842     * @return {@link #artifact} (A reference to a resource, canonical resource, or non-FHIR resource which the comment or assessment is about.)
1843     */
1844    public DataType getArtifact() { 
1845      return this.artifact;
1846    }
1847
1848    /**
1849     * @return {@link #artifact} (A reference to a resource, canonical resource, or non-FHIR resource which the comment or assessment is about.)
1850     */
1851    public Reference getArtifactReference() throws FHIRException { 
1852      if (this.artifact == null)
1853        this.artifact = new Reference();
1854      if (!(this.artifact instanceof Reference))
1855        throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.artifact.getClass().getName()+" was encountered");
1856      return (Reference) this.artifact;
1857    }
1858
1859    public boolean hasArtifactReference() { 
1860      return this != null && this.artifact instanceof Reference;
1861    }
1862
1863    /**
1864     * @return {@link #artifact} (A reference to a resource, canonical resource, or non-FHIR resource which the comment or assessment is about.)
1865     */
1866    public CanonicalType getArtifactCanonicalType() throws FHIRException { 
1867      if (this.artifact == null)
1868        this.artifact = new CanonicalType();
1869      if (!(this.artifact instanceof CanonicalType))
1870        throw new FHIRException("Type mismatch: the type CanonicalType was expected, but "+this.artifact.getClass().getName()+" was encountered");
1871      return (CanonicalType) this.artifact;
1872    }
1873
1874    public boolean hasArtifactCanonicalType() { 
1875      return this != null && this.artifact instanceof CanonicalType;
1876    }
1877
1878    /**
1879     * @return {@link #artifact} (A reference to a resource, canonical resource, or non-FHIR resource which the comment or assessment is about.)
1880     */
1881    public UriType getArtifactUriType() throws FHIRException { 
1882      if (this.artifact == null)
1883        this.artifact = new UriType();
1884      if (!(this.artifact instanceof UriType))
1885        throw new FHIRException("Type mismatch: the type UriType was expected, but "+this.artifact.getClass().getName()+" was encountered");
1886      return (UriType) this.artifact;
1887    }
1888
1889    public boolean hasArtifactUriType() { 
1890      return this != null && this.artifact instanceof UriType;
1891    }
1892
1893    public boolean hasArtifact() { 
1894      return this.artifact != null && !this.artifact.isEmpty();
1895    }
1896
1897    /**
1898     * @param value {@link #artifact} (A reference to a resource, canonical resource, or non-FHIR resource which the comment or assessment is about.)
1899     */
1900    public ArtifactAssessment setArtifact(DataType value) { 
1901      if (value != null && !(value instanceof Reference || value instanceof CanonicalType || value instanceof UriType))
1902        throw new FHIRException("Not the right type for ArtifactAssessment.artifact[x]: "+value.fhirType());
1903      this.artifact = value;
1904      return this;
1905    }
1906
1907    /**
1908     * @return {@link #content} (A component comment, classifier, or rating of the artifact.)
1909     */
1910    public List<ArtifactAssessmentContentComponent> getContent() { 
1911      if (this.content == null)
1912        this.content = new ArrayList<ArtifactAssessmentContentComponent>();
1913      return this.content;
1914    }
1915
1916    /**
1917     * @return Returns a reference to <code>this</code> for easy method chaining
1918     */
1919    public ArtifactAssessment setContent(List<ArtifactAssessmentContentComponent> theContent) { 
1920      this.content = theContent;
1921      return this;
1922    }
1923
1924    public boolean hasContent() { 
1925      if (this.content == null)
1926        return false;
1927      for (ArtifactAssessmentContentComponent item : this.content)
1928        if (!item.isEmpty())
1929          return true;
1930      return false;
1931    }
1932
1933    public ArtifactAssessmentContentComponent addContent() { //3
1934      ArtifactAssessmentContentComponent t = new ArtifactAssessmentContentComponent();
1935      if (this.content == null)
1936        this.content = new ArrayList<ArtifactAssessmentContentComponent>();
1937      this.content.add(t);
1938      return t;
1939    }
1940
1941    public ArtifactAssessment addContent(ArtifactAssessmentContentComponent t) { //3
1942      if (t == null)
1943        return this;
1944      if (this.content == null)
1945        this.content = new ArrayList<ArtifactAssessmentContentComponent>();
1946      this.content.add(t);
1947      return this;
1948    }
1949
1950    /**
1951     * @return The first repetition of repeating field {@link #content}, creating it if it does not already exist {3}
1952     */
1953    public ArtifactAssessmentContentComponent getContentFirstRep() { 
1954      if (getContent().isEmpty()) {
1955        addContent();
1956      }
1957      return getContent().get(0);
1958    }
1959
1960    /**
1961     * @return {@link #workflowStatus} (Indicates the workflow status of the comment or change request.). This is the underlying object with id, value and extensions. The accessor "getWorkflowStatus" gives direct access to the value
1962     */
1963    public Enumeration<ArtifactAssessmentWorkflowStatus> getWorkflowStatusElement() { 
1964      if (this.workflowStatus == null)
1965        if (Configuration.errorOnAutoCreate())
1966          throw new Error("Attempt to auto-create ArtifactAssessment.workflowStatus");
1967        else if (Configuration.doAutoCreate())
1968          this.workflowStatus = new Enumeration<ArtifactAssessmentWorkflowStatus>(new ArtifactAssessmentWorkflowStatusEnumFactory()); // bb
1969      return this.workflowStatus;
1970    }
1971
1972    public boolean hasWorkflowStatusElement() { 
1973      return this.workflowStatus != null && !this.workflowStatus.isEmpty();
1974    }
1975
1976    public boolean hasWorkflowStatus() { 
1977      return this.workflowStatus != null && !this.workflowStatus.isEmpty();
1978    }
1979
1980    /**
1981     * @param value {@link #workflowStatus} (Indicates the workflow status of the comment or change request.). This is the underlying object with id, value and extensions. The accessor "getWorkflowStatus" gives direct access to the value
1982     */
1983    public ArtifactAssessment setWorkflowStatusElement(Enumeration<ArtifactAssessmentWorkflowStatus> value) { 
1984      this.workflowStatus = value;
1985      return this;
1986    }
1987
1988    /**
1989     * @return Indicates the workflow status of the comment or change request.
1990     */
1991    public ArtifactAssessmentWorkflowStatus getWorkflowStatus() { 
1992      return this.workflowStatus == null ? null : this.workflowStatus.getValue();
1993    }
1994
1995    /**
1996     * @param value Indicates the workflow status of the comment or change request.
1997     */
1998    public ArtifactAssessment setWorkflowStatus(ArtifactAssessmentWorkflowStatus value) { 
1999      if (value == null)
2000        this.workflowStatus = null;
2001      else {
2002        if (this.workflowStatus == null)
2003          this.workflowStatus = new Enumeration<ArtifactAssessmentWorkflowStatus>(new ArtifactAssessmentWorkflowStatusEnumFactory());
2004        this.workflowStatus.setValue(value);
2005      }
2006      return this;
2007    }
2008
2009    /**
2010     * @return {@link #disposition} (Indicates the disposition of the responsible party to the comment or change request.). This is the underlying object with id, value and extensions. The accessor "getDisposition" gives direct access to the value
2011     */
2012    public Enumeration<ArtifactAssessmentDisposition> getDispositionElement() { 
2013      if (this.disposition == null)
2014        if (Configuration.errorOnAutoCreate())
2015          throw new Error("Attempt to auto-create ArtifactAssessment.disposition");
2016        else if (Configuration.doAutoCreate())
2017          this.disposition = new Enumeration<ArtifactAssessmentDisposition>(new ArtifactAssessmentDispositionEnumFactory()); // bb
2018      return this.disposition;
2019    }
2020
2021    public boolean hasDispositionElement() { 
2022      return this.disposition != null && !this.disposition.isEmpty();
2023    }
2024
2025    public boolean hasDisposition() { 
2026      return this.disposition != null && !this.disposition.isEmpty();
2027    }
2028
2029    /**
2030     * @param value {@link #disposition} (Indicates the disposition of the responsible party to the comment or change request.). This is the underlying object with id, value and extensions. The accessor "getDisposition" gives direct access to the value
2031     */
2032    public ArtifactAssessment setDispositionElement(Enumeration<ArtifactAssessmentDisposition> value) { 
2033      this.disposition = value;
2034      return this;
2035    }
2036
2037    /**
2038     * @return Indicates the disposition of the responsible party to the comment or change request.
2039     */
2040    public ArtifactAssessmentDisposition getDisposition() { 
2041      return this.disposition == null ? null : this.disposition.getValue();
2042    }
2043
2044    /**
2045     * @param value Indicates the disposition of the responsible party to the comment or change request.
2046     */
2047    public ArtifactAssessment setDisposition(ArtifactAssessmentDisposition value) { 
2048      if (value == null)
2049        this.disposition = null;
2050      else {
2051        if (this.disposition == null)
2052          this.disposition = new Enumeration<ArtifactAssessmentDisposition>(new ArtifactAssessmentDispositionEnumFactory());
2053        this.disposition.setValue(value);
2054      }
2055      return this;
2056    }
2057
2058      protected void listChildren(List<Property> children) {
2059        super.listChildren(children);
2060        children.add(new Property("identifier", "Identifier", "A formal identifier that is used to identify this artifact assessment when it is represented in other formats, or referenced in a specification, model, design or an instance.", 0, java.lang.Integer.MAX_VALUE, identifier));
2061        children.add(new Property("title", "string", "A short title for the assessment for use in displaying and selecting.", 0, 1, title));
2062        children.add(new Property("citeAs[x]", "Reference(Citation)|markdown", "Display of or reference to the bibliographic citation of the comment, classifier, or rating.", 0, 1, citeAs));
2063        children.add(new Property("date", "dateTime", "The date  (and optionally time) when the artifact assessment was published. The date must change when the disposition changes and it must change if the workflow status code changes. In addition, it should change when the substantive content of the artifact assessment changes.", 0, 1, date));
2064        children.add(new Property("copyright", "markdown", "A copyright statement relating to the artifact assessment and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the artifact assessment.", 0, 1, copyright));
2065        children.add(new Property("approvalDate", "date", "The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.", 0, 1, approvalDate));
2066        children.add(new Property("lastReviewDate", "date", "The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.", 0, 1, lastReviewDate));
2067        children.add(new Property("artifact[x]", "Reference(Any)|canonical|uri", "A reference to a resource, canonical resource, or non-FHIR resource which the comment or assessment is about.", 0, 1, artifact));
2068        children.add(new Property("content", "", "A component comment, classifier, or rating of the artifact.", 0, java.lang.Integer.MAX_VALUE, content));
2069        children.add(new Property("workflowStatus", "code", "Indicates the workflow status of the comment or change request.", 0, 1, workflowStatus));
2070        children.add(new Property("disposition", "code", "Indicates the disposition of the responsible party to the comment or change request.", 0, 1, disposition));
2071      }
2072
2073      @Override
2074      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2075        switch (_hash) {
2076        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "A formal identifier that is used to identify this artifact assessment when it is represented in other formats, or referenced in a specification, model, design or an instance.", 0, java.lang.Integer.MAX_VALUE, identifier);
2077        case 110371416: /*title*/  return new Property("title", "string", "A short title for the assessment for use in displaying and selecting.", 0, 1, title);
2078        case -1706539017: /*citeAs[x]*/  return new Property("citeAs[x]", "Reference(Citation)|markdown", "Display of or reference to the bibliographic citation of the comment, classifier, or rating.", 0, 1, citeAs);
2079        case -1360156695: /*citeAs*/  return new Property("citeAs[x]", "Reference(Citation)|markdown", "Display of or reference to the bibliographic citation of the comment, classifier, or rating.", 0, 1, citeAs);
2080        case 1269009762: /*citeAsReference*/  return new Property("citeAs[x]", "Reference(Citation)", "Display of or reference to the bibliographic citation of the comment, classifier, or rating.", 0, 1, citeAs);
2081        case 456265720: /*citeAsMarkdown*/  return new Property("citeAs[x]", "markdown", "Display of or reference to the bibliographic citation of the comment, classifier, or rating.", 0, 1, citeAs);
2082        case 3076014: /*date*/  return new Property("date", "dateTime", "The date  (and optionally time) when the artifact assessment was published. The date must change when the disposition changes and it must change if the workflow status code changes. In addition, it should change when the substantive content of the artifact assessment changes.", 0, 1, date);
2083        case 1522889671: /*copyright*/  return new Property("copyright", "markdown", "A copyright statement relating to the artifact assessment and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the artifact assessment.", 0, 1, copyright);
2084        case 223539345: /*approvalDate*/  return new Property("approvalDate", "date", "The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.", 0, 1, approvalDate);
2085        case -1687512484: /*lastReviewDate*/  return new Property("lastReviewDate", "date", "The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.", 0, 1, lastReviewDate);
2086        case -1130056338: /*artifact[x]*/  return new Property("artifact[x]", "Reference(Any)|canonical|uri", "A reference to a resource, canonical resource, or non-FHIR resource which the comment or assessment is about.", 0, 1, artifact);
2087        case -1228798510: /*artifact*/  return new Property("artifact[x]", "Reference(Any)|canonical|uri", "A reference to a resource, canonical resource, or non-FHIR resource which the comment or assessment is about.", 0, 1, artifact);
2088        case -683686503: /*artifactReference*/  return new Property("artifact[x]", "Reference(Any)", "A reference to a resource, canonical resource, or non-FHIR resource which the comment or assessment is about.", 0, 1, artifact);
2089        case 1069820738: /*artifactCanonical*/  return new Property("artifact[x]", "canonical", "A reference to a resource, canonical resource, or non-FHIR resource which the comment or assessment is about.", 0, 1, artifact);
2090        case -1130062278: /*artifactUri*/  return new Property("artifact[x]", "uri", "A reference to a resource, canonical resource, or non-FHIR resource which the comment or assessment is about.", 0, 1, artifact);
2091        case 951530617: /*content*/  return new Property("content", "", "A component comment, classifier, or rating of the artifact.", 0, java.lang.Integer.MAX_VALUE, content);
2092        case 697796753: /*workflowStatus*/  return new Property("workflowStatus", "code", "Indicates the workflow status of the comment or change request.", 0, 1, workflowStatus);
2093        case 583380919: /*disposition*/  return new Property("disposition", "code", "Indicates the disposition of the responsible party to the comment or change request.", 0, 1, disposition);
2094        default: return super.getNamedProperty(_hash, _name, _checkValid);
2095        }
2096
2097      }
2098
2099      @Override
2100      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2101        switch (hash) {
2102        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
2103        case 110371416: /*title*/ return this.title == null ? new Base[0] : new Base[] {this.title}; // StringType
2104        case -1360156695: /*citeAs*/ return this.citeAs == null ? new Base[0] : new Base[] {this.citeAs}; // DataType
2105        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
2106        case 1522889671: /*copyright*/ return this.copyright == null ? new Base[0] : new Base[] {this.copyright}; // MarkdownType
2107        case 223539345: /*approvalDate*/ return this.approvalDate == null ? new Base[0] : new Base[] {this.approvalDate}; // DateType
2108        case -1687512484: /*lastReviewDate*/ return this.lastReviewDate == null ? new Base[0] : new Base[] {this.lastReviewDate}; // DateType
2109        case -1228798510: /*artifact*/ return this.artifact == null ? new Base[0] : new Base[] {this.artifact}; // DataType
2110        case 951530617: /*content*/ return this.content == null ? new Base[0] : this.content.toArray(new Base[this.content.size()]); // ArtifactAssessmentContentComponent
2111        case 697796753: /*workflowStatus*/ return this.workflowStatus == null ? new Base[0] : new Base[] {this.workflowStatus}; // Enumeration<ArtifactAssessmentWorkflowStatus>
2112        case 583380919: /*disposition*/ return this.disposition == null ? new Base[0] : new Base[] {this.disposition}; // Enumeration<ArtifactAssessmentDisposition>
2113        default: return super.getProperty(hash, name, checkValid);
2114        }
2115
2116      }
2117
2118      @Override
2119      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2120        switch (hash) {
2121        case -1618432855: // identifier
2122          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
2123          return value;
2124        case 110371416: // title
2125          this.title = TypeConvertor.castToString(value); // StringType
2126          return value;
2127        case -1360156695: // citeAs
2128          this.citeAs = TypeConvertor.castToType(value); // DataType
2129          return value;
2130        case 3076014: // date
2131          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
2132          return value;
2133        case 1522889671: // copyright
2134          this.copyright = TypeConvertor.castToMarkdown(value); // MarkdownType
2135          return value;
2136        case 223539345: // approvalDate
2137          this.approvalDate = TypeConvertor.castToDate(value); // DateType
2138          return value;
2139        case -1687512484: // lastReviewDate
2140          this.lastReviewDate = TypeConvertor.castToDate(value); // DateType
2141          return value;
2142        case -1228798510: // artifact
2143          this.artifact = TypeConvertor.castToType(value); // DataType
2144          return value;
2145        case 951530617: // content
2146          this.getContent().add((ArtifactAssessmentContentComponent) value); // ArtifactAssessmentContentComponent
2147          return value;
2148        case 697796753: // workflowStatus
2149          value = new ArtifactAssessmentWorkflowStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
2150          this.workflowStatus = (Enumeration) value; // Enumeration<ArtifactAssessmentWorkflowStatus>
2151          return value;
2152        case 583380919: // disposition
2153          value = new ArtifactAssessmentDispositionEnumFactory().fromType(TypeConvertor.castToCode(value));
2154          this.disposition = (Enumeration) value; // Enumeration<ArtifactAssessmentDisposition>
2155          return value;
2156        default: return super.setProperty(hash, name, value);
2157        }
2158
2159      }
2160
2161      @Override
2162      public Base setProperty(String name, Base value) throws FHIRException {
2163        if (name.equals("identifier")) {
2164          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
2165        } else if (name.equals("title")) {
2166          this.title = TypeConvertor.castToString(value); // StringType
2167        } else if (name.equals("citeAs[x]")) {
2168          this.citeAs = TypeConvertor.castToType(value); // DataType
2169        } else if (name.equals("date")) {
2170          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
2171        } else if (name.equals("copyright")) {
2172          this.copyright = TypeConvertor.castToMarkdown(value); // MarkdownType
2173        } else if (name.equals("approvalDate")) {
2174          this.approvalDate = TypeConvertor.castToDate(value); // DateType
2175        } else if (name.equals("lastReviewDate")) {
2176          this.lastReviewDate = TypeConvertor.castToDate(value); // DateType
2177        } else if (name.equals("artifact[x]")) {
2178          this.artifact = TypeConvertor.castToType(value); // DataType
2179        } else if (name.equals("content")) {
2180          this.getContent().add((ArtifactAssessmentContentComponent) value);
2181        } else if (name.equals("workflowStatus")) {
2182          value = new ArtifactAssessmentWorkflowStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
2183          this.workflowStatus = (Enumeration) value; // Enumeration<ArtifactAssessmentWorkflowStatus>
2184        } else if (name.equals("disposition")) {
2185          value = new ArtifactAssessmentDispositionEnumFactory().fromType(TypeConvertor.castToCode(value));
2186          this.disposition = (Enumeration) value; // Enumeration<ArtifactAssessmentDisposition>
2187        } else
2188          return super.setProperty(name, value);
2189        return value;
2190      }
2191
2192  @Override
2193  public void removeChild(String name, Base value) throws FHIRException {
2194        if (name.equals("identifier")) {
2195          this.getIdentifier().remove(value);
2196        } else if (name.equals("title")) {
2197          this.title = null;
2198        } else if (name.equals("citeAs[x]")) {
2199          this.citeAs = null;
2200        } else if (name.equals("date")) {
2201          this.date = null;
2202        } else if (name.equals("copyright")) {
2203          this.copyright = null;
2204        } else if (name.equals("approvalDate")) {
2205          this.approvalDate = null;
2206        } else if (name.equals("lastReviewDate")) {
2207          this.lastReviewDate = null;
2208        } else if (name.equals("artifact[x]")) {
2209          this.artifact = null;
2210        } else if (name.equals("content")) {
2211          this.getContent().remove((ArtifactAssessmentContentComponent) value);
2212        } else if (name.equals("workflowStatus")) {
2213          value = new ArtifactAssessmentWorkflowStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
2214          this.workflowStatus = (Enumeration) value; // Enumeration<ArtifactAssessmentWorkflowStatus>
2215        } else if (name.equals("disposition")) {
2216          value = new ArtifactAssessmentDispositionEnumFactory().fromType(TypeConvertor.castToCode(value));
2217          this.disposition = (Enumeration) value; // Enumeration<ArtifactAssessmentDisposition>
2218        } else
2219          super.removeChild(name, value);
2220        
2221      }
2222
2223      @Override
2224      public Base makeProperty(int hash, String name) throws FHIRException {
2225        switch (hash) {
2226        case -1618432855:  return addIdentifier(); 
2227        case 110371416:  return getTitleElement();
2228        case -1706539017:  return getCiteAs();
2229        case -1360156695:  return getCiteAs();
2230        case 3076014:  return getDateElement();
2231        case 1522889671:  return getCopyrightElement();
2232        case 223539345:  return getApprovalDateElement();
2233        case -1687512484:  return getLastReviewDateElement();
2234        case -1130056338:  return getArtifact();
2235        case -1228798510:  return getArtifact();
2236        case 951530617:  return addContent(); 
2237        case 697796753:  return getWorkflowStatusElement();
2238        case 583380919:  return getDispositionElement();
2239        default: return super.makeProperty(hash, name);
2240        }
2241
2242      }
2243
2244      @Override
2245      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2246        switch (hash) {
2247        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
2248        case 110371416: /*title*/ return new String[] {"string"};
2249        case -1360156695: /*citeAs*/ return new String[] {"Reference", "markdown"};
2250        case 3076014: /*date*/ return new String[] {"dateTime"};
2251        case 1522889671: /*copyright*/ return new String[] {"markdown"};
2252        case 223539345: /*approvalDate*/ return new String[] {"date"};
2253        case -1687512484: /*lastReviewDate*/ return new String[] {"date"};
2254        case -1228798510: /*artifact*/ return new String[] {"Reference", "canonical", "uri"};
2255        case 951530617: /*content*/ return new String[] {};
2256        case 697796753: /*workflowStatus*/ return new String[] {"code"};
2257        case 583380919: /*disposition*/ return new String[] {"code"};
2258        default: return super.getTypesForProperty(hash, name);
2259        }
2260
2261      }
2262
2263      @Override
2264      public Base addChild(String name) throws FHIRException {
2265        if (name.equals("identifier")) {
2266          return addIdentifier();
2267        }
2268        else if (name.equals("title")) {
2269          throw new FHIRException("Cannot call addChild on a singleton property ArtifactAssessment.title");
2270        }
2271        else if (name.equals("citeAsReference")) {
2272          this.citeAs = new Reference();
2273          return this.citeAs;
2274        }
2275        else if (name.equals("citeAsMarkdown")) {
2276          this.citeAs = new MarkdownType();
2277          return this.citeAs;
2278        }
2279        else if (name.equals("date")) {
2280          throw new FHIRException("Cannot call addChild on a singleton property ArtifactAssessment.date");
2281        }
2282        else if (name.equals("copyright")) {
2283          throw new FHIRException("Cannot call addChild on a singleton property ArtifactAssessment.copyright");
2284        }
2285        else if (name.equals("approvalDate")) {
2286          throw new FHIRException("Cannot call addChild on a singleton property ArtifactAssessment.approvalDate");
2287        }
2288        else if (name.equals("lastReviewDate")) {
2289          throw new FHIRException("Cannot call addChild on a singleton property ArtifactAssessment.lastReviewDate");
2290        }
2291        else if (name.equals("artifactReference")) {
2292          this.artifact = new Reference();
2293          return this.artifact;
2294        }
2295        else if (name.equals("artifactCanonical")) {
2296          this.artifact = new CanonicalType();
2297          return this.artifact;
2298        }
2299        else if (name.equals("artifactUri")) {
2300          this.artifact = new UriType();
2301          return this.artifact;
2302        }
2303        else if (name.equals("content")) {
2304          return addContent();
2305        }
2306        else if (name.equals("workflowStatus")) {
2307          throw new FHIRException("Cannot call addChild on a singleton property ArtifactAssessment.workflowStatus");
2308        }
2309        else if (name.equals("disposition")) {
2310          throw new FHIRException("Cannot call addChild on a singleton property ArtifactAssessment.disposition");
2311        }
2312        else
2313          return super.addChild(name);
2314      }
2315
2316  public String fhirType() {
2317    return "ArtifactAssessment";
2318
2319  }
2320
2321      public ArtifactAssessment copy() {
2322        ArtifactAssessment dst = new ArtifactAssessment();
2323        copyValues(dst);
2324        return dst;
2325      }
2326
2327      public void copyValues(ArtifactAssessment dst) {
2328        super.copyValues(dst);
2329        if (identifier != null) {
2330          dst.identifier = new ArrayList<Identifier>();
2331          for (Identifier i : identifier)
2332            dst.identifier.add(i.copy());
2333        };
2334        dst.title = title == null ? null : title.copy();
2335        dst.citeAs = citeAs == null ? null : citeAs.copy();
2336        dst.date = date == null ? null : date.copy();
2337        dst.copyright = copyright == null ? null : copyright.copy();
2338        dst.approvalDate = approvalDate == null ? null : approvalDate.copy();
2339        dst.lastReviewDate = lastReviewDate == null ? null : lastReviewDate.copy();
2340        dst.artifact = artifact == null ? null : artifact.copy();
2341        if (content != null) {
2342          dst.content = new ArrayList<ArtifactAssessmentContentComponent>();
2343          for (ArtifactAssessmentContentComponent i : content)
2344            dst.content.add(i.copy());
2345        };
2346        dst.workflowStatus = workflowStatus == null ? null : workflowStatus.copy();
2347        dst.disposition = disposition == null ? null : disposition.copy();
2348      }
2349
2350      protected ArtifactAssessment typedCopy() {
2351        return copy();
2352      }
2353
2354      @Override
2355      public boolean equalsDeep(Base other_) {
2356        if (!super.equalsDeep(other_))
2357          return false;
2358        if (!(other_ instanceof ArtifactAssessment))
2359          return false;
2360        ArtifactAssessment o = (ArtifactAssessment) other_;
2361        return compareDeep(identifier, o.identifier, true) && compareDeep(title, o.title, true) && compareDeep(citeAs, o.citeAs, true)
2362           && compareDeep(date, o.date, true) && compareDeep(copyright, o.copyright, true) && compareDeep(approvalDate, o.approvalDate, true)
2363           && compareDeep(lastReviewDate, o.lastReviewDate, true) && compareDeep(artifact, o.artifact, true)
2364           && compareDeep(content, o.content, true) && compareDeep(workflowStatus, o.workflowStatus, true)
2365           && compareDeep(disposition, o.disposition, true);
2366      }
2367
2368      @Override
2369      public boolean equalsShallow(Base other_) {
2370        if (!super.equalsShallow(other_))
2371          return false;
2372        if (!(other_ instanceof ArtifactAssessment))
2373          return false;
2374        ArtifactAssessment o = (ArtifactAssessment) other_;
2375        return compareValues(title, o.title, true) && compareValues(date, o.date, true) && compareValues(copyright, o.copyright, true)
2376           && compareValues(approvalDate, o.approvalDate, true) && compareValues(lastReviewDate, o.lastReviewDate, true)
2377           && compareValues(workflowStatus, o.workflowStatus, true) && compareValues(disposition, o.disposition, true)
2378          ;
2379      }
2380
2381      public boolean isEmpty() {
2382        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, title, citeAs
2383          , date, copyright, approvalDate, lastReviewDate, artifact, content, workflowStatus
2384          , disposition);
2385      }
2386
2387  @Override
2388  public ResourceType getResourceType() {
2389    return ResourceType.ArtifactAssessment;
2390   }
2391
2392 /**
2393   * Search parameter: <b>date</b>
2394   * <p>
2395   * Description: <b>The artifact assessment publication date</b><br>
2396   * Type: <b>date</b><br>
2397   * Path: <b>ArtifactAssessment.date</b><br>
2398   * </p>
2399   */
2400  @SearchParamDefinition(name="date", path="ArtifactAssessment.date", description="The artifact assessment publication date", type="date" )
2401  public static final String SP_DATE = "date";
2402 /**
2403   * <b>Fluent Client</b> search parameter constant for <b>date</b>
2404   * <p>
2405   * Description: <b>The artifact assessment publication date</b><br>
2406   * Type: <b>date</b><br>
2407   * Path: <b>ArtifactAssessment.date</b><br>
2408   * </p>
2409   */
2410  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
2411
2412 /**
2413   * Search parameter: <b>identifier</b>
2414   * <p>
2415   * Description: <b>The artifact assessment identifier</b><br>
2416   * Type: <b>token</b><br>
2417   * Path: <b>ArtifactAssessment.identifier</b><br>
2418   * </p>
2419   */
2420  @SearchParamDefinition(name="identifier", path="ArtifactAssessment.identifier", description="The artifact assessment identifier", type="token" )
2421  public static final String SP_IDENTIFIER = "identifier";
2422 /**
2423   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
2424   * <p>
2425   * Description: <b>The artifact assessment identifier</b><br>
2426   * Type: <b>token</b><br>
2427   * Path: <b>ArtifactAssessment.identifier</b><br>
2428   * </p>
2429   */
2430  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
2431
2432
2433}
2434