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 Tue, Dec 28, 2021 07:16+1100 for FHIR v5.0.0-snapshot1
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 MetadataResource {
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            default: return "?";
107          }
108        }
109        public String getSystem() {
110          switch (this) {
111            case UNRESOLVED: return "http://hl7.org/fhir/artifactassessment-disposition";
112            case NOTPERSUASIVE: return "http://hl7.org/fhir/artifactassessment-disposition";
113            case PERSUASIVE: return "http://hl7.org/fhir/artifactassessment-disposition";
114            case PERSUASIVEWITHMODIFICATION: return "http://hl7.org/fhir/artifactassessment-disposition";
115            case NOTPERSUASIVEWITHMODIFICATION: return "http://hl7.org/fhir/artifactassessment-disposition";
116            default: return "?";
117          }
118        }
119        public String getDefinition() {
120          switch (this) {
121            case UNRESOLVED: return "The comment is unresolved";
122            case NOTPERSUASIVE: return "The comment is not persuasive (rejected in full)";
123            case PERSUASIVE: return "The comment is persuasive (accepted in full)";
124            case PERSUASIVEWITHMODIFICATION: return "The comment is persuasive with modification (partially accepted)";
125            case NOTPERSUASIVEWITHMODIFICATION: return "The comment is not persuasive with modification (partially rejected)";
126            default: return "?";
127          }
128        }
129        public String getDisplay() {
130          switch (this) {
131            case UNRESOLVED: return "Unresolved";
132            case NOTPERSUASIVE: return "Not Persuasive";
133            case PERSUASIVE: return "Persuasive";
134            case PERSUASIVEWITHMODIFICATION: return "Persuasive with Modification";
135            case NOTPERSUASIVEWITHMODIFICATION: return "Not Persuasive with Modification";
136            default: return "?";
137          }
138        }
139    }
140
141  public static class ArtifactAssessmentDispositionEnumFactory implements EnumFactory<ArtifactAssessmentDisposition> {
142    public ArtifactAssessmentDisposition fromCode(String codeString) throws IllegalArgumentException {
143      if (codeString == null || "".equals(codeString))
144            if (codeString == null || "".equals(codeString))
145                return null;
146        if ("unresolved".equals(codeString))
147          return ArtifactAssessmentDisposition.UNRESOLVED;
148        if ("not-persuasive".equals(codeString))
149          return ArtifactAssessmentDisposition.NOTPERSUASIVE;
150        if ("persuasive".equals(codeString))
151          return ArtifactAssessmentDisposition.PERSUASIVE;
152        if ("persuasive-with-modification".equals(codeString))
153          return ArtifactAssessmentDisposition.PERSUASIVEWITHMODIFICATION;
154        if ("not-persuasive-with-modification".equals(codeString))
155          return ArtifactAssessmentDisposition.NOTPERSUASIVEWITHMODIFICATION;
156        throw new IllegalArgumentException("Unknown ArtifactAssessmentDisposition code '"+codeString+"'");
157        }
158        public Enumeration<ArtifactAssessmentDisposition> fromType(Base code) throws FHIRException {
159          if (code == null)
160            return null;
161          if (code.isEmpty())
162            return new Enumeration<ArtifactAssessmentDisposition>(this);
163          String codeString = ((PrimitiveType) code).asStringValue();
164          if (codeString == null || "".equals(codeString))
165            return null;
166        if ("unresolved".equals(codeString))
167          return new Enumeration<ArtifactAssessmentDisposition>(this, ArtifactAssessmentDisposition.UNRESOLVED);
168        if ("not-persuasive".equals(codeString))
169          return new Enumeration<ArtifactAssessmentDisposition>(this, ArtifactAssessmentDisposition.NOTPERSUASIVE);
170        if ("persuasive".equals(codeString))
171          return new Enumeration<ArtifactAssessmentDisposition>(this, ArtifactAssessmentDisposition.PERSUASIVE);
172        if ("persuasive-with-modification".equals(codeString))
173          return new Enumeration<ArtifactAssessmentDisposition>(this, ArtifactAssessmentDisposition.PERSUASIVEWITHMODIFICATION);
174        if ("not-persuasive-with-modification".equals(codeString))
175          return new Enumeration<ArtifactAssessmentDisposition>(this, ArtifactAssessmentDisposition.NOTPERSUASIVEWITHMODIFICATION);
176        throw new FHIRException("Unknown ArtifactAssessmentDisposition code '"+codeString+"'");
177        }
178    public String toCode(ArtifactAssessmentDisposition code) {
179      if (code == ArtifactAssessmentDisposition.UNRESOLVED)
180        return "unresolved";
181      if (code == ArtifactAssessmentDisposition.NOTPERSUASIVE)
182        return "not-persuasive";
183      if (code == ArtifactAssessmentDisposition.PERSUASIVE)
184        return "persuasive";
185      if (code == ArtifactAssessmentDisposition.PERSUASIVEWITHMODIFICATION)
186        return "persuasive-with-modification";
187      if (code == ArtifactAssessmentDisposition.NOTPERSUASIVEWITHMODIFICATION)
188        return "not-persuasive-with-modification";
189      return "?";
190      }
191    public String toSystem(ArtifactAssessmentDisposition code) {
192      return code.getSystem();
193      }
194    }
195
196    public enum ArtifactAssessmentInformationType {
197        /**
198         * A comment on the artifact
199         */
200        COMMENT, 
201        /**
202         * A classifier of the artifact
203         */
204        CLASSIFIER, 
205        /**
206         * A rating of the artifact
207         */
208        RATING, 
209        /**
210         * A container for multiple components
211         */
212        CONTAINER, 
213        /**
214         * A response to a comment
215         */
216        RESPONSE, 
217        /**
218         * A change request for the artifact
219         */
220        CHANGEREQUEST, 
221        /**
222         * added to help the parsers with the generic types
223         */
224        NULL;
225        public static ArtifactAssessmentInformationType fromCode(String codeString) throws FHIRException {
226            if (codeString == null || "".equals(codeString))
227                return null;
228        if ("comment".equals(codeString))
229          return COMMENT;
230        if ("classifier".equals(codeString))
231          return CLASSIFIER;
232        if ("rating".equals(codeString))
233          return RATING;
234        if ("container".equals(codeString))
235          return CONTAINER;
236        if ("response".equals(codeString))
237          return RESPONSE;
238        if ("change-request".equals(codeString))
239          return CHANGEREQUEST;
240        if (Configuration.isAcceptInvalidEnums())
241          return null;
242        else
243          throw new FHIRException("Unknown ArtifactAssessmentInformationType code '"+codeString+"'");
244        }
245        public String toCode() {
246          switch (this) {
247            case COMMENT: return "comment";
248            case CLASSIFIER: return "classifier";
249            case RATING: return "rating";
250            case CONTAINER: return "container";
251            case RESPONSE: return "response";
252            case CHANGEREQUEST: return "change-request";
253            default: return "?";
254          }
255        }
256        public String getSystem() {
257          switch (this) {
258            case COMMENT: return "http://hl7.org/fhir/artifactassessment-information-type";
259            case CLASSIFIER: return "http://hl7.org/fhir/artifactassessment-information-type";
260            case RATING: return "http://hl7.org/fhir/artifactassessment-information-type";
261            case CONTAINER: return "http://hl7.org/fhir/artifactassessment-information-type";
262            case RESPONSE: return "http://hl7.org/fhir/artifactassessment-information-type";
263            case CHANGEREQUEST: return "http://hl7.org/fhir/artifactassessment-information-type";
264            default: return "?";
265          }
266        }
267        public String getDefinition() {
268          switch (this) {
269            case COMMENT: return "A comment on the artifact";
270            case CLASSIFIER: return "A classifier of the artifact";
271            case RATING: return "A rating of the artifact";
272            case CONTAINER: return "A container for multiple components";
273            case RESPONSE: return "A response to a comment";
274            case CHANGEREQUEST: return "A change request for the artifact";
275            default: return "?";
276          }
277        }
278        public String getDisplay() {
279          switch (this) {
280            case COMMENT: return "Comment";
281            case CLASSIFIER: return "Classifier";
282            case RATING: return "Rating";
283            case CONTAINER: return "Container";
284            case RESPONSE: return "Response";
285            case CHANGEREQUEST: return "Change Request";
286            default: return "?";
287          }
288        }
289    }
290
291  public static class ArtifactAssessmentInformationTypeEnumFactory implements EnumFactory<ArtifactAssessmentInformationType> {
292    public ArtifactAssessmentInformationType fromCode(String codeString) throws IllegalArgumentException {
293      if (codeString == null || "".equals(codeString))
294            if (codeString == null || "".equals(codeString))
295                return null;
296        if ("comment".equals(codeString))
297          return ArtifactAssessmentInformationType.COMMENT;
298        if ("classifier".equals(codeString))
299          return ArtifactAssessmentInformationType.CLASSIFIER;
300        if ("rating".equals(codeString))
301          return ArtifactAssessmentInformationType.RATING;
302        if ("container".equals(codeString))
303          return ArtifactAssessmentInformationType.CONTAINER;
304        if ("response".equals(codeString))
305          return ArtifactAssessmentInformationType.RESPONSE;
306        if ("change-request".equals(codeString))
307          return ArtifactAssessmentInformationType.CHANGEREQUEST;
308        throw new IllegalArgumentException("Unknown ArtifactAssessmentInformationType code '"+codeString+"'");
309        }
310        public Enumeration<ArtifactAssessmentInformationType> fromType(Base code) throws FHIRException {
311          if (code == null)
312            return null;
313          if (code.isEmpty())
314            return new Enumeration<ArtifactAssessmentInformationType>(this);
315          String codeString = ((PrimitiveType) code).asStringValue();
316          if (codeString == null || "".equals(codeString))
317            return null;
318        if ("comment".equals(codeString))
319          return new Enumeration<ArtifactAssessmentInformationType>(this, ArtifactAssessmentInformationType.COMMENT);
320        if ("classifier".equals(codeString))
321          return new Enumeration<ArtifactAssessmentInformationType>(this, ArtifactAssessmentInformationType.CLASSIFIER);
322        if ("rating".equals(codeString))
323          return new Enumeration<ArtifactAssessmentInformationType>(this, ArtifactAssessmentInformationType.RATING);
324        if ("container".equals(codeString))
325          return new Enumeration<ArtifactAssessmentInformationType>(this, ArtifactAssessmentInformationType.CONTAINER);
326        if ("response".equals(codeString))
327          return new Enumeration<ArtifactAssessmentInformationType>(this, ArtifactAssessmentInformationType.RESPONSE);
328        if ("change-request".equals(codeString))
329          return new Enumeration<ArtifactAssessmentInformationType>(this, ArtifactAssessmentInformationType.CHANGEREQUEST);
330        throw new FHIRException("Unknown ArtifactAssessmentInformationType code '"+codeString+"'");
331        }
332    public String toCode(ArtifactAssessmentInformationType code) {
333      if (code == ArtifactAssessmentInformationType.COMMENT)
334        return "comment";
335      if (code == ArtifactAssessmentInformationType.CLASSIFIER)
336        return "classifier";
337      if (code == ArtifactAssessmentInformationType.RATING)
338        return "rating";
339      if (code == ArtifactAssessmentInformationType.CONTAINER)
340        return "container";
341      if (code == ArtifactAssessmentInformationType.RESPONSE)
342        return "response";
343      if (code == ArtifactAssessmentInformationType.CHANGEREQUEST)
344        return "change-request";
345      return "?";
346      }
347    public String toSystem(ArtifactAssessmentInformationType code) {
348      return code.getSystem();
349      }
350    }
351
352    public enum ArtifactAssessmentWorkflowStatus {
353        /**
354         * 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.
355         */
356        SUBMITTED, 
357        /**
358         * The comment has been triaged, meaning the responsible party has been determined and next steps have been identified to address the comment.
359         */
360        TRIAGED, 
361        /**
362         * The comment is waiting for input from a specific party before next steps can be taken.
363         */
364        WAITINGFORINPUT, 
365        /**
366         * The comment has been resolved and no changes resulted from the resolution
367         */
368        RESOLVEDNOCHANGE, 
369        /**
370         * The comment has been resolved and changes are required to address the comment
371         */
372        RESOLVEDCHANGEREQUIRED, 
373        /**
374         * The comment is acceptable, but resolution of the comment and application of any associated changes have been deferred
375         */
376        DEFERRED, 
377        /**
378         * The comment is a duplicate of another comment already received
379         */
380        DUPLICATE, 
381        /**
382         * The comment is resolved and any necessary changes have been applied
383         */
384        APPLIED, 
385        /**
386         * The necessary changes to the artifact have been published in a new version of the artifact
387         */
388        PUBLISHED, 
389        /**
390         * added to help the parsers with the generic types
391         */
392        NULL;
393        public static ArtifactAssessmentWorkflowStatus fromCode(String codeString) throws FHIRException {
394            if (codeString == null || "".equals(codeString))
395                return null;
396        if ("submitted".equals(codeString))
397          return SUBMITTED;
398        if ("triaged".equals(codeString))
399          return TRIAGED;
400        if ("waiting-for-input".equals(codeString))
401          return WAITINGFORINPUT;
402        if ("resolved-no-change".equals(codeString))
403          return RESOLVEDNOCHANGE;
404        if ("resolved-change-required".equals(codeString))
405          return RESOLVEDCHANGEREQUIRED;
406        if ("deferred".equals(codeString))
407          return DEFERRED;
408        if ("duplicate".equals(codeString))
409          return DUPLICATE;
410        if ("applied".equals(codeString))
411          return APPLIED;
412        if ("published".equals(codeString))
413          return PUBLISHED;
414        if (Configuration.isAcceptInvalidEnums())
415          return null;
416        else
417          throw new FHIRException("Unknown ArtifactAssessmentWorkflowStatus code '"+codeString+"'");
418        }
419        public String toCode() {
420          switch (this) {
421            case SUBMITTED: return "submitted";
422            case TRIAGED: return "triaged";
423            case WAITINGFORINPUT: return "waiting-for-input";
424            case RESOLVEDNOCHANGE: return "resolved-no-change";
425            case RESOLVEDCHANGEREQUIRED: return "resolved-change-required";
426            case DEFERRED: return "deferred";
427            case DUPLICATE: return "duplicate";
428            case APPLIED: return "applied";
429            case PUBLISHED: return "published";
430            default: return "?";
431          }
432        }
433        public String getSystem() {
434          switch (this) {
435            case SUBMITTED: return "http://hl7.org/fhir/artifactassessment-workflow-status";
436            case TRIAGED: return "http://hl7.org/fhir/artifactassessment-workflow-status";
437            case WAITINGFORINPUT: return "http://hl7.org/fhir/artifactassessment-workflow-status";
438            case RESOLVEDNOCHANGE: return "http://hl7.org/fhir/artifactassessment-workflow-status";
439            case RESOLVEDCHANGEREQUIRED: return "http://hl7.org/fhir/artifactassessment-workflow-status";
440            case DEFERRED: return "http://hl7.org/fhir/artifactassessment-workflow-status";
441            case DUPLICATE: return "http://hl7.org/fhir/artifactassessment-workflow-status";
442            case APPLIED: return "http://hl7.org/fhir/artifactassessment-workflow-status";
443            case PUBLISHED: return "http://hl7.org/fhir/artifactassessment-workflow-status";
444            default: return "?";
445          }
446        }
447        public String getDefinition() {
448          switch (this) {
449            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.";
450            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.";
451            case WAITINGFORINPUT: return "The comment is waiting for input from a specific party before next steps can be taken.";
452            case RESOLVEDNOCHANGE: return "The comment has been resolved and no changes resulted from the resolution";
453            case RESOLVEDCHANGEREQUIRED: return "The comment has been resolved and changes are required to address the comment";
454            case DEFERRED: return "The comment is acceptable, but resolution of the comment and application of any associated changes have been deferred";
455            case DUPLICATE: return "The comment is a duplicate of another comment already received";
456            case APPLIED: return "The comment is resolved and any necessary changes have been applied";
457            case PUBLISHED: return "The necessary changes to the artifact have been published in a new version of the artifact";
458            default: return "?";
459          }
460        }
461        public String getDisplay() {
462          switch (this) {
463            case SUBMITTED: return "Submitted";
464            case TRIAGED: return "Triaged";
465            case WAITINGFORINPUT: return "Waiting for Input";
466            case RESOLVEDNOCHANGE: return "Resolved - No Change";
467            case RESOLVEDCHANGEREQUIRED: return "Resolved - Change Required";
468            case DEFERRED: return "Deferred";
469            case DUPLICATE: return "Duplicate";
470            case APPLIED: return "Applied";
471            case PUBLISHED: return "Published";
472            default: return "?";
473          }
474        }
475    }
476
477  public static class ArtifactAssessmentWorkflowStatusEnumFactory implements EnumFactory<ArtifactAssessmentWorkflowStatus> {
478    public ArtifactAssessmentWorkflowStatus fromCode(String codeString) throws IllegalArgumentException {
479      if (codeString == null || "".equals(codeString))
480            if (codeString == null || "".equals(codeString))
481                return null;
482        if ("submitted".equals(codeString))
483          return ArtifactAssessmentWorkflowStatus.SUBMITTED;
484        if ("triaged".equals(codeString))
485          return ArtifactAssessmentWorkflowStatus.TRIAGED;
486        if ("waiting-for-input".equals(codeString))
487          return ArtifactAssessmentWorkflowStatus.WAITINGFORINPUT;
488        if ("resolved-no-change".equals(codeString))
489          return ArtifactAssessmentWorkflowStatus.RESOLVEDNOCHANGE;
490        if ("resolved-change-required".equals(codeString))
491          return ArtifactAssessmentWorkflowStatus.RESOLVEDCHANGEREQUIRED;
492        if ("deferred".equals(codeString))
493          return ArtifactAssessmentWorkflowStatus.DEFERRED;
494        if ("duplicate".equals(codeString))
495          return ArtifactAssessmentWorkflowStatus.DUPLICATE;
496        if ("applied".equals(codeString))
497          return ArtifactAssessmentWorkflowStatus.APPLIED;
498        if ("published".equals(codeString))
499          return ArtifactAssessmentWorkflowStatus.PUBLISHED;
500        throw new IllegalArgumentException("Unknown ArtifactAssessmentWorkflowStatus code '"+codeString+"'");
501        }
502        public Enumeration<ArtifactAssessmentWorkflowStatus> fromType(Base code) throws FHIRException {
503          if (code == null)
504            return null;
505          if (code.isEmpty())
506            return new Enumeration<ArtifactAssessmentWorkflowStatus>(this);
507          String codeString = ((PrimitiveType) code).asStringValue();
508          if (codeString == null || "".equals(codeString))
509            return null;
510        if ("submitted".equals(codeString))
511          return new Enumeration<ArtifactAssessmentWorkflowStatus>(this, ArtifactAssessmentWorkflowStatus.SUBMITTED);
512        if ("triaged".equals(codeString))
513          return new Enumeration<ArtifactAssessmentWorkflowStatus>(this, ArtifactAssessmentWorkflowStatus.TRIAGED);
514        if ("waiting-for-input".equals(codeString))
515          return new Enumeration<ArtifactAssessmentWorkflowStatus>(this, ArtifactAssessmentWorkflowStatus.WAITINGFORINPUT);
516        if ("resolved-no-change".equals(codeString))
517          return new Enumeration<ArtifactAssessmentWorkflowStatus>(this, ArtifactAssessmentWorkflowStatus.RESOLVEDNOCHANGE);
518        if ("resolved-change-required".equals(codeString))
519          return new Enumeration<ArtifactAssessmentWorkflowStatus>(this, ArtifactAssessmentWorkflowStatus.RESOLVEDCHANGEREQUIRED);
520        if ("deferred".equals(codeString))
521          return new Enumeration<ArtifactAssessmentWorkflowStatus>(this, ArtifactAssessmentWorkflowStatus.DEFERRED);
522        if ("duplicate".equals(codeString))
523          return new Enumeration<ArtifactAssessmentWorkflowStatus>(this, ArtifactAssessmentWorkflowStatus.DUPLICATE);
524        if ("applied".equals(codeString))
525          return new Enumeration<ArtifactAssessmentWorkflowStatus>(this, ArtifactAssessmentWorkflowStatus.APPLIED);
526        if ("published".equals(codeString))
527          return new Enumeration<ArtifactAssessmentWorkflowStatus>(this, ArtifactAssessmentWorkflowStatus.PUBLISHED);
528        throw new FHIRException("Unknown ArtifactAssessmentWorkflowStatus code '"+codeString+"'");
529        }
530    public String toCode(ArtifactAssessmentWorkflowStatus code) {
531      if (code == ArtifactAssessmentWorkflowStatus.SUBMITTED)
532        return "submitted";
533      if (code == ArtifactAssessmentWorkflowStatus.TRIAGED)
534        return "triaged";
535      if (code == ArtifactAssessmentWorkflowStatus.WAITINGFORINPUT)
536        return "waiting-for-input";
537      if (code == ArtifactAssessmentWorkflowStatus.RESOLVEDNOCHANGE)
538        return "resolved-no-change";
539      if (code == ArtifactAssessmentWorkflowStatus.RESOLVEDCHANGEREQUIRED)
540        return "resolved-change-required";
541      if (code == ArtifactAssessmentWorkflowStatus.DEFERRED)
542        return "deferred";
543      if (code == ArtifactAssessmentWorkflowStatus.DUPLICATE)
544        return "duplicate";
545      if (code == ArtifactAssessmentWorkflowStatus.APPLIED)
546        return "applied";
547      if (code == ArtifactAssessmentWorkflowStatus.PUBLISHED)
548        return "published";
549      return "?";
550      }
551    public String toSystem(ArtifactAssessmentWorkflowStatus code) {
552      return code.getSystem();
553      }
554    }
555
556    @Block()
557    public static class ArtifactAssessmentContentComponent extends BackboneElement implements IBaseBackboneElement {
558        /**
559         * The type of information this component of the content represents.
560         */
561        @Child(name = "informationType", type = {CodeType.class}, order=1, min=0, max=1, modifier=false, summary=false)
562        @Description(shortDefinition="comment | classifier | rating | container | response | change-request", formalDefinition="The type of information this component of the content represents." )
563        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/artifactassessment-information-type")
564        protected Enumeration<ArtifactAssessmentInformationType> informationType;
565
566        /**
567         * A brief summary of the content of this component.
568         */
569        @Child(name = "summary", type = {MarkdownType.class}, order=2, min=0, max=1, modifier=false, summary=false)
570        @Description(shortDefinition="Brief summary of the content", formalDefinition="A brief summary of the content of this component." )
571        protected MarkdownType summary;
572
573        /**
574         * Indicates what type of content this component represents.
575         */
576        @Child(name = "type", type = {CodeableConcept.class}, order=3, min=0, max=1, modifier=false, summary=false)
577        @Description(shortDefinition="What type of content", formalDefinition="Indicates what type of content this component represents." )
578        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/certainty-type")
579        protected CodeableConcept type;
580
581        /**
582         * Represents a rating, classifier, or assessment of the artifact.
583         */
584        @Child(name = "classifier", type = {CodeableConcept.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
585        @Description(shortDefinition="Rating, classifier, or assessment", formalDefinition="Represents a rating, classifier, or assessment of the artifact." )
586        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/certainty-rating")
587        protected List<CodeableConcept> classifier;
588
589        /**
590         * Indicates who or what authored the content.
591         */
592        @Child(name = "author", type = {Patient.class, Practitioner.class, PractitionerRole.class, Organization.class, Device.class}, order=5, min=0, max=1, modifier=false, summary=false)
593        @Description(shortDefinition="Who authored the content", formalDefinition="Indicates who or what authored the content." )
594        protected Reference author;
595
596        /**
597         * 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.
598         */
599        @Child(name = "path", type = {UriType.class}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
600        @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." )
601        protected List<UriType> path;
602
603        /**
604         * Additional related artifacts that provide supporting documentation, additional evidence, or further information related to the content.
605         */
606        @Child(name = "relatedArtifact", type = {RelatedArtifact.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
607        @Description(shortDefinition="Additional information", formalDefinition="Additional related artifacts that provide supporting documentation, additional evidence, or further information related to the content." )
608        protected List<RelatedArtifact> relatedArtifact;
609
610        /**
611         * Acceptable to publicly share the comment, classifier or rating.
612         */
613        @Child(name = "freeToShare", type = {BooleanType.class}, order=8, min=0, max=1, modifier=false, summary=false)
614        @Description(shortDefinition="Acceptable to publicly share the resource content", formalDefinition="Acceptable to publicly share the comment, classifier or rating." )
615        protected BooleanType freeToShare;
616
617        /**
618         * If the informationType is container, the components of the content.
619         */
620        @Child(name = "component", type = {ArtifactAssessmentContentComponent.class}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
621        @Description(shortDefinition="Contained content", formalDefinition="If the informationType is container, the components of the content." )
622        protected List<ArtifactAssessmentContentComponent> component;
623
624        private static final long serialVersionUID = -1157330937L;
625
626    /**
627     * Constructor
628     */
629      public ArtifactAssessmentContentComponent() {
630        super();
631      }
632
633        /**
634         * @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
635         */
636        public Enumeration<ArtifactAssessmentInformationType> getInformationTypeElement() { 
637          if (this.informationType == null)
638            if (Configuration.errorOnAutoCreate())
639              throw new Error("Attempt to auto-create ArtifactAssessmentContentComponent.informationType");
640            else if (Configuration.doAutoCreate())
641              this.informationType = new Enumeration<ArtifactAssessmentInformationType>(new ArtifactAssessmentInformationTypeEnumFactory()); // bb
642          return this.informationType;
643        }
644
645        public boolean hasInformationTypeElement() { 
646          return this.informationType != null && !this.informationType.isEmpty();
647        }
648
649        public boolean hasInformationType() { 
650          return this.informationType != null && !this.informationType.isEmpty();
651        }
652
653        /**
654         * @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
655         */
656        public ArtifactAssessmentContentComponent setInformationTypeElement(Enumeration<ArtifactAssessmentInformationType> value) { 
657          this.informationType = value;
658          return this;
659        }
660
661        /**
662         * @return The type of information this component of the content represents.
663         */
664        public ArtifactAssessmentInformationType getInformationType() { 
665          return this.informationType == null ? null : this.informationType.getValue();
666        }
667
668        /**
669         * @param value The type of information this component of the content represents.
670         */
671        public ArtifactAssessmentContentComponent setInformationType(ArtifactAssessmentInformationType value) { 
672          if (value == null)
673            this.informationType = null;
674          else {
675            if (this.informationType == null)
676              this.informationType = new Enumeration<ArtifactAssessmentInformationType>(new ArtifactAssessmentInformationTypeEnumFactory());
677            this.informationType.setValue(value);
678          }
679          return this;
680        }
681
682        /**
683         * @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
684         */
685        public MarkdownType getSummaryElement() { 
686          if (this.summary == null)
687            if (Configuration.errorOnAutoCreate())
688              throw new Error("Attempt to auto-create ArtifactAssessmentContentComponent.summary");
689            else if (Configuration.doAutoCreate())
690              this.summary = new MarkdownType(); // bb
691          return this.summary;
692        }
693
694        public boolean hasSummaryElement() { 
695          return this.summary != null && !this.summary.isEmpty();
696        }
697
698        public boolean hasSummary() { 
699          return this.summary != null && !this.summary.isEmpty();
700        }
701
702        /**
703         * @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
704         */
705        public ArtifactAssessmentContentComponent setSummaryElement(MarkdownType value) { 
706          this.summary = value;
707          return this;
708        }
709
710        /**
711         * @return A brief summary of the content of this component.
712         */
713        public String getSummary() { 
714          return this.summary == null ? null : this.summary.getValue();
715        }
716
717        /**
718         * @param value A brief summary of the content of this component.
719         */
720        public ArtifactAssessmentContentComponent setSummary(String value) { 
721          if (value == null)
722            this.summary = null;
723          else {
724            if (this.summary == null)
725              this.summary = new MarkdownType();
726            this.summary.setValue(value);
727          }
728          return this;
729        }
730
731        /**
732         * @return {@link #type} (Indicates what type of content this component represents.)
733         */
734        public CodeableConcept getType() { 
735          if (this.type == null)
736            if (Configuration.errorOnAutoCreate())
737              throw new Error("Attempt to auto-create ArtifactAssessmentContentComponent.type");
738            else if (Configuration.doAutoCreate())
739              this.type = new CodeableConcept(); // cc
740          return this.type;
741        }
742
743        public boolean hasType() { 
744          return this.type != null && !this.type.isEmpty();
745        }
746
747        /**
748         * @param value {@link #type} (Indicates what type of content this component represents.)
749         */
750        public ArtifactAssessmentContentComponent setType(CodeableConcept value) { 
751          this.type = value;
752          return this;
753        }
754
755        /**
756         * @return {@link #classifier} (Represents a rating, classifier, or assessment of the artifact.)
757         */
758        public List<CodeableConcept> getClassifier() { 
759          if (this.classifier == null)
760            this.classifier = new ArrayList<CodeableConcept>();
761          return this.classifier;
762        }
763
764        /**
765         * @return Returns a reference to <code>this</code> for easy method chaining
766         */
767        public ArtifactAssessmentContentComponent setClassifier(List<CodeableConcept> theClassifier) { 
768          this.classifier = theClassifier;
769          return this;
770        }
771
772        public boolean hasClassifier() { 
773          if (this.classifier == null)
774            return false;
775          for (CodeableConcept item : this.classifier)
776            if (!item.isEmpty())
777              return true;
778          return false;
779        }
780
781        public CodeableConcept addClassifier() { //3
782          CodeableConcept t = new CodeableConcept();
783          if (this.classifier == null)
784            this.classifier = new ArrayList<CodeableConcept>();
785          this.classifier.add(t);
786          return t;
787        }
788
789        public ArtifactAssessmentContentComponent addClassifier(CodeableConcept t) { //3
790          if (t == null)
791            return this;
792          if (this.classifier == null)
793            this.classifier = new ArrayList<CodeableConcept>();
794          this.classifier.add(t);
795          return this;
796        }
797
798        /**
799         * @return The first repetition of repeating field {@link #classifier}, creating it if it does not already exist {3}
800         */
801        public CodeableConcept getClassifierFirstRep() { 
802          if (getClassifier().isEmpty()) {
803            addClassifier();
804          }
805          return getClassifier().get(0);
806        }
807
808        /**
809         * @return {@link #author} (Indicates who or what authored the content.)
810         */
811        public Reference getAuthor() { 
812          if (this.author == null)
813            if (Configuration.errorOnAutoCreate())
814              throw new Error("Attempt to auto-create ArtifactAssessmentContentComponent.author");
815            else if (Configuration.doAutoCreate())
816              this.author = new Reference(); // cc
817          return this.author;
818        }
819
820        public boolean hasAuthor() { 
821          return this.author != null && !this.author.isEmpty();
822        }
823
824        /**
825         * @param value {@link #author} (Indicates who or what authored the content.)
826         */
827        public ArtifactAssessmentContentComponent setAuthor(Reference value) { 
828          this.author = value;
829          return this;
830        }
831
832        /**
833         * @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.)
834         */
835        public List<UriType> getPath() { 
836          if (this.path == null)
837            this.path = new ArrayList<UriType>();
838          return this.path;
839        }
840
841        /**
842         * @return Returns a reference to <code>this</code> for easy method chaining
843         */
844        public ArtifactAssessmentContentComponent setPath(List<UriType> thePath) { 
845          this.path = thePath;
846          return this;
847        }
848
849        public boolean hasPath() { 
850          if (this.path == null)
851            return false;
852          for (UriType item : this.path)
853            if (!item.isEmpty())
854              return true;
855          return false;
856        }
857
858        /**
859         * @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.)
860         */
861        public UriType addPathElement() {//2 
862          UriType t = new UriType();
863          if (this.path == null)
864            this.path = new ArrayList<UriType>();
865          this.path.add(t);
866          return t;
867        }
868
869        /**
870         * @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.)
871         */
872        public ArtifactAssessmentContentComponent addPath(String value) { //1
873          UriType t = new UriType();
874          t.setValue(value);
875          if (this.path == null)
876            this.path = new ArrayList<UriType>();
877          this.path.add(t);
878          return this;
879        }
880
881        /**
882         * @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.)
883         */
884        public boolean hasPath(String value) { 
885          if (this.path == null)
886            return false;
887          for (UriType v : this.path)
888            if (v.getValue().equals(value)) // uri
889              return true;
890          return false;
891        }
892
893        /**
894         * @return {@link #relatedArtifact} (Additional related artifacts that provide supporting documentation, additional evidence, or further information related to the content.)
895         */
896        public List<RelatedArtifact> getRelatedArtifact() { 
897          if (this.relatedArtifact == null)
898            this.relatedArtifact = new ArrayList<RelatedArtifact>();
899          return this.relatedArtifact;
900        }
901
902        /**
903         * @return Returns a reference to <code>this</code> for easy method chaining
904         */
905        public ArtifactAssessmentContentComponent setRelatedArtifact(List<RelatedArtifact> theRelatedArtifact) { 
906          this.relatedArtifact = theRelatedArtifact;
907          return this;
908        }
909
910        public boolean hasRelatedArtifact() { 
911          if (this.relatedArtifact == null)
912            return false;
913          for (RelatedArtifact item : this.relatedArtifact)
914            if (!item.isEmpty())
915              return true;
916          return false;
917        }
918
919        public RelatedArtifact addRelatedArtifact() { //3
920          RelatedArtifact t = new RelatedArtifact();
921          if (this.relatedArtifact == null)
922            this.relatedArtifact = new ArrayList<RelatedArtifact>();
923          this.relatedArtifact.add(t);
924          return t;
925        }
926
927        public ArtifactAssessmentContentComponent addRelatedArtifact(RelatedArtifact t) { //3
928          if (t == null)
929            return this;
930          if (this.relatedArtifact == null)
931            this.relatedArtifact = new ArrayList<RelatedArtifact>();
932          this.relatedArtifact.add(t);
933          return this;
934        }
935
936        /**
937         * @return The first repetition of repeating field {@link #relatedArtifact}, creating it if it does not already exist {3}
938         */
939        public RelatedArtifact getRelatedArtifactFirstRep() { 
940          if (getRelatedArtifact().isEmpty()) {
941            addRelatedArtifact();
942          }
943          return getRelatedArtifact().get(0);
944        }
945
946        /**
947         * @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
948         */
949        public BooleanType getFreeToShareElement() { 
950          if (this.freeToShare == null)
951            if (Configuration.errorOnAutoCreate())
952              throw new Error("Attempt to auto-create ArtifactAssessmentContentComponent.freeToShare");
953            else if (Configuration.doAutoCreate())
954              this.freeToShare = new BooleanType(); // bb
955          return this.freeToShare;
956        }
957
958        public boolean hasFreeToShareElement() { 
959          return this.freeToShare != null && !this.freeToShare.isEmpty();
960        }
961
962        public boolean hasFreeToShare() { 
963          return this.freeToShare != null && !this.freeToShare.isEmpty();
964        }
965
966        /**
967         * @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
968         */
969        public ArtifactAssessmentContentComponent setFreeToShareElement(BooleanType value) { 
970          this.freeToShare = value;
971          return this;
972        }
973
974        /**
975         * @return Acceptable to publicly share the comment, classifier or rating.
976         */
977        public boolean getFreeToShare() { 
978          return this.freeToShare == null || this.freeToShare.isEmpty() ? false : this.freeToShare.getValue();
979        }
980
981        /**
982         * @param value Acceptable to publicly share the comment, classifier or rating.
983         */
984        public ArtifactAssessmentContentComponent setFreeToShare(boolean value) { 
985            if (this.freeToShare == null)
986              this.freeToShare = new BooleanType();
987            this.freeToShare.setValue(value);
988          return this;
989        }
990
991        /**
992         * @return {@link #component} (If the informationType is container, the components of the content.)
993         */
994        public List<ArtifactAssessmentContentComponent> getComponent() { 
995          if (this.component == null)
996            this.component = new ArrayList<ArtifactAssessmentContentComponent>();
997          return this.component;
998        }
999
1000        /**
1001         * @return Returns a reference to <code>this</code> for easy method chaining
1002         */
1003        public ArtifactAssessmentContentComponent setComponent(List<ArtifactAssessmentContentComponent> theComponent) { 
1004          this.component = theComponent;
1005          return this;
1006        }
1007
1008        public boolean hasComponent() { 
1009          if (this.component == null)
1010            return false;
1011          for (ArtifactAssessmentContentComponent item : this.component)
1012            if (!item.isEmpty())
1013              return true;
1014          return false;
1015        }
1016
1017        public ArtifactAssessmentContentComponent addComponent() { //3
1018          ArtifactAssessmentContentComponent t = new ArtifactAssessmentContentComponent();
1019          if (this.component == null)
1020            this.component = new ArrayList<ArtifactAssessmentContentComponent>();
1021          this.component.add(t);
1022          return t;
1023        }
1024
1025        public ArtifactAssessmentContentComponent addComponent(ArtifactAssessmentContentComponent t) { //3
1026          if (t == null)
1027            return this;
1028          if (this.component == null)
1029            this.component = new ArrayList<ArtifactAssessmentContentComponent>();
1030          this.component.add(t);
1031          return this;
1032        }
1033
1034        /**
1035         * @return The first repetition of repeating field {@link #component}, creating it if it does not already exist {3}
1036         */
1037        public ArtifactAssessmentContentComponent getComponentFirstRep() { 
1038          if (getComponent().isEmpty()) {
1039            addComponent();
1040          }
1041          return getComponent().get(0);
1042        }
1043
1044        protected void listChildren(List<Property> children) {
1045          super.listChildren(children);
1046          children.add(new Property("informationType", "code", "The type of information this component of the content represents.", 0, 1, informationType));
1047          children.add(new Property("summary", "markdown", "A brief summary of the content of this component.", 0, 1, summary));
1048          children.add(new Property("type", "CodeableConcept", "Indicates what type of content this component represents.", 0, 1, type));
1049          children.add(new Property("classifier", "CodeableConcept", "Represents a rating, classifier, or assessment of the artifact.", 0, java.lang.Integer.MAX_VALUE, classifier));
1050          children.add(new Property("author", "Reference(Patient|Practitioner|PractitionerRole|Organization|Device)", "Indicates who or what authored the content.", 0, 1, author));
1051          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));
1052          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));
1053          children.add(new Property("freeToShare", "boolean", "Acceptable to publicly share the comment, classifier or rating.", 0, 1, freeToShare));
1054          children.add(new Property("component", "@ArtifactAssessment.content", "If the informationType is container, the components of the content.", 0, java.lang.Integer.MAX_VALUE, component));
1055        }
1056
1057        @Override
1058        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1059          switch (_hash) {
1060          case 1302856326: /*informationType*/  return new Property("informationType", "code", "The type of information this component of the content represents.", 0, 1, informationType);
1061          case -1857640538: /*summary*/  return new Property("summary", "markdown", "A brief summary of the content of this component.", 0, 1, summary);
1062          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Indicates what type of content this component represents.", 0, 1, type);
1063          case -281470431: /*classifier*/  return new Property("classifier", "CodeableConcept", "Represents a rating, classifier, or assessment of the artifact.", 0, java.lang.Integer.MAX_VALUE, classifier);
1064          case -1406328437: /*author*/  return new Property("author", "Reference(Patient|Practitioner|PractitionerRole|Organization|Device)", "Indicates who or what authored the content.", 0, 1, author);
1065          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);
1066          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);
1067          case -1268656616: /*freeToShare*/  return new Property("freeToShare", "boolean", "Acceptable to publicly share the comment, classifier or rating.", 0, 1, freeToShare);
1068          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);
1069          default: return super.getNamedProperty(_hash, _name, _checkValid);
1070          }
1071
1072        }
1073
1074      @Override
1075      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1076        switch (hash) {
1077        case 1302856326: /*informationType*/ return this.informationType == null ? new Base[0] : new Base[] {this.informationType}; // Enumeration<ArtifactAssessmentInformationType>
1078        case -1857640538: /*summary*/ return this.summary == null ? new Base[0] : new Base[] {this.summary}; // MarkdownType
1079        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
1080        case -281470431: /*classifier*/ return this.classifier == null ? new Base[0] : this.classifier.toArray(new Base[this.classifier.size()]); // CodeableConcept
1081        case -1406328437: /*author*/ return this.author == null ? new Base[0] : new Base[] {this.author}; // Reference
1082        case 3433509: /*path*/ return this.path == null ? new Base[0] : this.path.toArray(new Base[this.path.size()]); // UriType
1083        case 666807069: /*relatedArtifact*/ return this.relatedArtifact == null ? new Base[0] : this.relatedArtifact.toArray(new Base[this.relatedArtifact.size()]); // RelatedArtifact
1084        case -1268656616: /*freeToShare*/ return this.freeToShare == null ? new Base[0] : new Base[] {this.freeToShare}; // BooleanType
1085        case -1399907075: /*component*/ return this.component == null ? new Base[0] : this.component.toArray(new Base[this.component.size()]); // ArtifactAssessmentContentComponent
1086        default: return super.getProperty(hash, name, checkValid);
1087        }
1088
1089      }
1090
1091      @Override
1092      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1093        switch (hash) {
1094        case 1302856326: // informationType
1095          value = new ArtifactAssessmentInformationTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
1096          this.informationType = (Enumeration) value; // Enumeration<ArtifactAssessmentInformationType>
1097          return value;
1098        case -1857640538: // summary
1099          this.summary = TypeConvertor.castToMarkdown(value); // MarkdownType
1100          return value;
1101        case 3575610: // type
1102          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1103          return value;
1104        case -281470431: // classifier
1105          this.getClassifier().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
1106          return value;
1107        case -1406328437: // author
1108          this.author = TypeConvertor.castToReference(value); // Reference
1109          return value;
1110        case 3433509: // path
1111          this.getPath().add(TypeConvertor.castToUri(value)); // UriType
1112          return value;
1113        case 666807069: // relatedArtifact
1114          this.getRelatedArtifact().add(TypeConvertor.castToRelatedArtifact(value)); // RelatedArtifact
1115          return value;
1116        case -1268656616: // freeToShare
1117          this.freeToShare = TypeConvertor.castToBoolean(value); // BooleanType
1118          return value;
1119        case -1399907075: // component
1120          this.getComponent().add((ArtifactAssessmentContentComponent) value); // ArtifactAssessmentContentComponent
1121          return value;
1122        default: return super.setProperty(hash, name, value);
1123        }
1124
1125      }
1126
1127      @Override
1128      public Base setProperty(String name, Base value) throws FHIRException {
1129        if (name.equals("informationType")) {
1130          value = new ArtifactAssessmentInformationTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
1131          this.informationType = (Enumeration) value; // Enumeration<ArtifactAssessmentInformationType>
1132        } else if (name.equals("summary")) {
1133          this.summary = TypeConvertor.castToMarkdown(value); // MarkdownType
1134        } else if (name.equals("type")) {
1135          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1136        } else if (name.equals("classifier")) {
1137          this.getClassifier().add(TypeConvertor.castToCodeableConcept(value));
1138        } else if (name.equals("author")) {
1139          this.author = TypeConvertor.castToReference(value); // Reference
1140        } else if (name.equals("path")) {
1141          this.getPath().add(TypeConvertor.castToUri(value));
1142        } else if (name.equals("relatedArtifact")) {
1143          this.getRelatedArtifact().add(TypeConvertor.castToRelatedArtifact(value));
1144        } else if (name.equals("freeToShare")) {
1145          this.freeToShare = TypeConvertor.castToBoolean(value); // BooleanType
1146        } else if (name.equals("component")) {
1147          this.getComponent().add((ArtifactAssessmentContentComponent) value);
1148        } else
1149          return super.setProperty(name, value);
1150        return value;
1151      }
1152
1153      @Override
1154      public Base makeProperty(int hash, String name) throws FHIRException {
1155        switch (hash) {
1156        case 1302856326:  return getInformationTypeElement();
1157        case -1857640538:  return getSummaryElement();
1158        case 3575610:  return getType();
1159        case -281470431:  return addClassifier(); 
1160        case -1406328437:  return getAuthor();
1161        case 3433509:  return addPathElement();
1162        case 666807069:  return addRelatedArtifact(); 
1163        case -1268656616:  return getFreeToShareElement();
1164        case -1399907075:  return addComponent(); 
1165        default: return super.makeProperty(hash, name);
1166        }
1167
1168      }
1169
1170      @Override
1171      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1172        switch (hash) {
1173        case 1302856326: /*informationType*/ return new String[] {"code"};
1174        case -1857640538: /*summary*/ return new String[] {"markdown"};
1175        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
1176        case -281470431: /*classifier*/ return new String[] {"CodeableConcept"};
1177        case -1406328437: /*author*/ return new String[] {"Reference"};
1178        case 3433509: /*path*/ return new String[] {"uri"};
1179        case 666807069: /*relatedArtifact*/ return new String[] {"RelatedArtifact"};
1180        case -1268656616: /*freeToShare*/ return new String[] {"boolean"};
1181        case -1399907075: /*component*/ return new String[] {"@ArtifactAssessment.content"};
1182        default: return super.getTypesForProperty(hash, name);
1183        }
1184
1185      }
1186
1187      @Override
1188      public Base addChild(String name) throws FHIRException {
1189        if (name.equals("informationType")) {
1190          throw new FHIRException("Cannot call addChild on a primitive type ArtifactAssessment.content.informationType");
1191        }
1192        else if (name.equals("summary")) {
1193          throw new FHIRException("Cannot call addChild on a primitive type ArtifactAssessment.content.summary");
1194        }
1195        else if (name.equals("type")) {
1196          this.type = new CodeableConcept();
1197          return this.type;
1198        }
1199        else if (name.equals("classifier")) {
1200          return addClassifier();
1201        }
1202        else if (name.equals("author")) {
1203          this.author = new Reference();
1204          return this.author;
1205        }
1206        else if (name.equals("path")) {
1207          throw new FHIRException("Cannot call addChild on a primitive type ArtifactAssessment.content.path");
1208        }
1209        else if (name.equals("relatedArtifact")) {
1210          return addRelatedArtifact();
1211        }
1212        else if (name.equals("freeToShare")) {
1213          throw new FHIRException("Cannot call addChild on a primitive type ArtifactAssessment.content.freeToShare");
1214        }
1215        else if (name.equals("component")) {
1216          return addComponent();
1217        }
1218        else
1219          return super.addChild(name);
1220      }
1221
1222      public ArtifactAssessmentContentComponent copy() {
1223        ArtifactAssessmentContentComponent dst = new ArtifactAssessmentContentComponent();
1224        copyValues(dst);
1225        return dst;
1226      }
1227
1228      public void copyValues(ArtifactAssessmentContentComponent dst) {
1229        super.copyValues(dst);
1230        dst.informationType = informationType == null ? null : informationType.copy();
1231        dst.summary = summary == null ? null : summary.copy();
1232        dst.type = type == null ? null : type.copy();
1233        if (classifier != null) {
1234          dst.classifier = new ArrayList<CodeableConcept>();
1235          for (CodeableConcept i : classifier)
1236            dst.classifier.add(i.copy());
1237        };
1238        dst.author = author == null ? null : author.copy();
1239        if (path != null) {
1240          dst.path = new ArrayList<UriType>();
1241          for (UriType i : path)
1242            dst.path.add(i.copy());
1243        };
1244        if (relatedArtifact != null) {
1245          dst.relatedArtifact = new ArrayList<RelatedArtifact>();
1246          for (RelatedArtifact i : relatedArtifact)
1247            dst.relatedArtifact.add(i.copy());
1248        };
1249        dst.freeToShare = freeToShare == null ? null : freeToShare.copy();
1250        if (component != null) {
1251          dst.component = new ArrayList<ArtifactAssessmentContentComponent>();
1252          for (ArtifactAssessmentContentComponent i : component)
1253            dst.component.add(i.copy());
1254        };
1255      }
1256
1257      @Override
1258      public boolean equalsDeep(Base other_) {
1259        if (!super.equalsDeep(other_))
1260          return false;
1261        if (!(other_ instanceof ArtifactAssessmentContentComponent))
1262          return false;
1263        ArtifactAssessmentContentComponent o = (ArtifactAssessmentContentComponent) other_;
1264        return compareDeep(informationType, o.informationType, true) && compareDeep(summary, o.summary, true)
1265           && compareDeep(type, o.type, true) && compareDeep(classifier, o.classifier, true) && compareDeep(author, o.author, true)
1266           && compareDeep(path, o.path, true) && compareDeep(relatedArtifact, o.relatedArtifact, true) && compareDeep(freeToShare, o.freeToShare, true)
1267           && compareDeep(component, o.component, true);
1268      }
1269
1270      @Override
1271      public boolean equalsShallow(Base other_) {
1272        if (!super.equalsShallow(other_))
1273          return false;
1274        if (!(other_ instanceof ArtifactAssessmentContentComponent))
1275          return false;
1276        ArtifactAssessmentContentComponent o = (ArtifactAssessmentContentComponent) other_;
1277        return compareValues(informationType, o.informationType, true) && compareValues(summary, o.summary, true)
1278           && compareValues(path, o.path, true) && compareValues(freeToShare, o.freeToShare, true);
1279      }
1280
1281      public boolean isEmpty() {
1282        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(informationType, summary, type
1283          , classifier, author, path, relatedArtifact, freeToShare, component);
1284      }
1285
1286  public String fhirType() {
1287    return "ArtifactAssessment.content";
1288
1289  }
1290
1291  }
1292
1293    /**
1294     * 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.
1295     */
1296    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1297    @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." )
1298    protected List<Identifier> identifier;
1299
1300    /**
1301     * Display of or reference to the bibliographic citation of the comment, classifier, or rating.
1302     */
1303    @Child(name = "citeAs", type = {Citation.class, MarkdownType.class}, order=1, min=0, max=1, modifier=false, summary=false)
1304    @Description(shortDefinition="How to cite the comment or rating", formalDefinition="Display of or reference to the bibliographic citation of the comment, classifier, or rating." )
1305    protected DataType citeAs;
1306
1307    /**
1308     * 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.
1309     */
1310    @Child(name = "date", type = {DateTimeType.class}, order=2, min=0, max=1, modifier=false, summary=true)
1311    @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." )
1312    protected DateTimeType date;
1313
1314    /**
1315     * 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.
1316     */
1317    @Child(name = "copyright", type = {MarkdownType.class}, order=3, min=0, max=1, modifier=false, summary=false)
1318    @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." )
1319    protected MarkdownType copyright;
1320
1321    /**
1322     * The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
1323     */
1324    @Child(name = "approvalDate", type = {DateType.class}, order=4, min=0, max=1, modifier=false, summary=false)
1325    @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." )
1326    protected DateType approvalDate;
1327
1328    /**
1329     * The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.
1330     */
1331    @Child(name = "lastReviewDate", type = {DateType.class}, order=5, min=0, max=1, modifier=false, summary=true)
1332    @Description(shortDefinition="When the artifact assessment was last reviewed", formalDefinition="The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date." )
1333    protected DateType lastReviewDate;
1334
1335    /**
1336     * A reference to a resource, canonical resource, or non-FHIR resource which the comment or assessment is about.
1337     */
1338    @Child(name = "artifact", type = {Reference.class, CanonicalType.class, UriType.class}, order=6, min=1, max=1, modifier=false, summary=true)
1339    @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." )
1340    protected DataType artifact;
1341
1342    /**
1343     * A component comment, classifier, or rating of the artifact.
1344     */
1345    @Child(name = "content", type = {}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1346    @Description(shortDefinition="Comment, classifier, or rating content", formalDefinition="A component comment, classifier, or rating of the artifact." )
1347    protected List<ArtifactAssessmentContentComponent> content;
1348
1349    /**
1350     * Indicates the workflow status of the comment or change request.
1351     */
1352    @Child(name = "workflowStatus", type = {CodeType.class}, order=8, min=0, max=1, modifier=false, summary=true)
1353    @Description(shortDefinition="submitted | triaged | waiting-for-input | resolved-no-change | resolved-change-required | deferred | duplicate | applied | published", formalDefinition="Indicates the workflow status of the comment or change request." )
1354    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/artifactassessment-workflow-status")
1355    protected Enumeration<ArtifactAssessmentWorkflowStatus> workflowStatus;
1356
1357    /**
1358     * Indicates the disposition of the responsible party to the comment or change request.
1359     */
1360    @Child(name = "disposition", type = {CodeType.class}, order=9, min=0, max=1, modifier=false, summary=true)
1361    @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." )
1362    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/artifactassessment-disposition")
1363    protected Enumeration<ArtifactAssessmentDisposition> disposition;
1364
1365    private static final long serialVersionUID = -2002325424L;
1366
1367  /**
1368   * Constructor
1369   */
1370    public ArtifactAssessment() {
1371      super();
1372    }
1373
1374  /**
1375   * Constructor
1376   */
1377    public ArtifactAssessment(DataType artifact) {
1378      super();
1379      this.setArtifact(artifact);
1380    }
1381
1382    /**
1383     * @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.)
1384     */
1385    public List<Identifier> getIdentifier() { 
1386      if (this.identifier == null)
1387        this.identifier = new ArrayList<Identifier>();
1388      return this.identifier;
1389    }
1390
1391    /**
1392     * @return Returns a reference to <code>this</code> for easy method chaining
1393     */
1394    public ArtifactAssessment setIdentifier(List<Identifier> theIdentifier) { 
1395      this.identifier = theIdentifier;
1396      return this;
1397    }
1398
1399    public boolean hasIdentifier() { 
1400      if (this.identifier == null)
1401        return false;
1402      for (Identifier item : this.identifier)
1403        if (!item.isEmpty())
1404          return true;
1405      return false;
1406    }
1407
1408    public Identifier addIdentifier() { //3
1409      Identifier t = new Identifier();
1410      if (this.identifier == null)
1411        this.identifier = new ArrayList<Identifier>();
1412      this.identifier.add(t);
1413      return t;
1414    }
1415
1416    public ArtifactAssessment addIdentifier(Identifier t) { //3
1417      if (t == null)
1418        return this;
1419      if (this.identifier == null)
1420        this.identifier = new ArrayList<Identifier>();
1421      this.identifier.add(t);
1422      return this;
1423    }
1424
1425    /**
1426     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
1427     */
1428    public Identifier getIdentifierFirstRep() { 
1429      if (getIdentifier().isEmpty()) {
1430        addIdentifier();
1431      }
1432      return getIdentifier().get(0);
1433    }
1434
1435    /**
1436     * @return {@link #citeAs} (Display of or reference to the bibliographic citation of the comment, classifier, or rating.)
1437     */
1438    public DataType getCiteAs() { 
1439      return this.citeAs;
1440    }
1441
1442    /**
1443     * @return {@link #citeAs} (Display of or reference to the bibliographic citation of the comment, classifier, or rating.)
1444     */
1445    public Reference getCiteAsReference() throws FHIRException { 
1446      if (this.citeAs == null)
1447        this.citeAs = new Reference();
1448      if (!(this.citeAs instanceof Reference))
1449        throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.citeAs.getClass().getName()+" was encountered");
1450      return (Reference) this.citeAs;
1451    }
1452
1453    public boolean hasCiteAsReference() { 
1454      return this != null && this.citeAs instanceof Reference;
1455    }
1456
1457    /**
1458     * @return {@link #citeAs} (Display of or reference to the bibliographic citation of the comment, classifier, or rating.)
1459     */
1460    public MarkdownType getCiteAsMarkdownType() throws FHIRException { 
1461      if (this.citeAs == null)
1462        this.citeAs = new MarkdownType();
1463      if (!(this.citeAs instanceof MarkdownType))
1464        throw new FHIRException("Type mismatch: the type MarkdownType was expected, but "+this.citeAs.getClass().getName()+" was encountered");
1465      return (MarkdownType) this.citeAs;
1466    }
1467
1468    public boolean hasCiteAsMarkdownType() { 
1469      return this != null && this.citeAs instanceof MarkdownType;
1470    }
1471
1472    public boolean hasCiteAs() { 
1473      return this.citeAs != null && !this.citeAs.isEmpty();
1474    }
1475
1476    /**
1477     * @param value {@link #citeAs} (Display of or reference to the bibliographic citation of the comment, classifier, or rating.)
1478     */
1479    public ArtifactAssessment setCiteAs(DataType value) { 
1480      if (value != null && !(value instanceof Reference || value instanceof MarkdownType))
1481        throw new Error("Not the right type for ArtifactAssessment.citeAs[x]: "+value.fhirType());
1482      this.citeAs = value;
1483      return this;
1484    }
1485
1486    /**
1487     * @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
1488     */
1489    public DateTimeType getDateElement() { 
1490      if (this.date == null)
1491        if (Configuration.errorOnAutoCreate())
1492          throw new Error("Attempt to auto-create ArtifactAssessment.date");
1493        else if (Configuration.doAutoCreate())
1494          this.date = new DateTimeType(); // bb
1495      return this.date;
1496    }
1497
1498    public boolean hasDateElement() { 
1499      return this.date != null && !this.date.isEmpty();
1500    }
1501
1502    public boolean hasDate() { 
1503      return this.date != null && !this.date.isEmpty();
1504    }
1505
1506    /**
1507     * @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
1508     */
1509    public ArtifactAssessment setDateElement(DateTimeType value) { 
1510      this.date = value;
1511      return this;
1512    }
1513
1514    /**
1515     * @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.
1516     */
1517    public Date getDate() { 
1518      return this.date == null ? null : this.date.getValue();
1519    }
1520
1521    /**
1522     * @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.
1523     */
1524    public ArtifactAssessment setDate(Date value) { 
1525      if (value == null)
1526        this.date = null;
1527      else {
1528        if (this.date == null)
1529          this.date = new DateTimeType();
1530        this.date.setValue(value);
1531      }
1532      return this;
1533    }
1534
1535    /**
1536     * @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
1537     */
1538    public MarkdownType getCopyrightElement() { 
1539      if (this.copyright == null)
1540        if (Configuration.errorOnAutoCreate())
1541          throw new Error("Attempt to auto-create ArtifactAssessment.copyright");
1542        else if (Configuration.doAutoCreate())
1543          this.copyright = new MarkdownType(); // bb
1544      return this.copyright;
1545    }
1546
1547    public boolean hasCopyrightElement() { 
1548      return this.copyright != null && !this.copyright.isEmpty();
1549    }
1550
1551    public boolean hasCopyright() { 
1552      return this.copyright != null && !this.copyright.isEmpty();
1553    }
1554
1555    /**
1556     * @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
1557     */
1558    public ArtifactAssessment setCopyrightElement(MarkdownType value) { 
1559      this.copyright = value;
1560      return this;
1561    }
1562
1563    /**
1564     * @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.
1565     */
1566    public String getCopyright() { 
1567      return this.copyright == null ? null : this.copyright.getValue();
1568    }
1569
1570    /**
1571     * @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.
1572     */
1573    public ArtifactAssessment setCopyright(String value) { 
1574      if (value == null)
1575        this.copyright = null;
1576      else {
1577        if (this.copyright == null)
1578          this.copyright = new MarkdownType();
1579        this.copyright.setValue(value);
1580      }
1581      return this;
1582    }
1583
1584    /**
1585     * @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
1586     */
1587    public DateType getApprovalDateElement() { 
1588      if (this.approvalDate == null)
1589        if (Configuration.errorOnAutoCreate())
1590          throw new Error("Attempt to auto-create ArtifactAssessment.approvalDate");
1591        else if (Configuration.doAutoCreate())
1592          this.approvalDate = new DateType(); // bb
1593      return this.approvalDate;
1594    }
1595
1596    public boolean hasApprovalDateElement() { 
1597      return this.approvalDate != null && !this.approvalDate.isEmpty();
1598    }
1599
1600    public boolean hasApprovalDate() { 
1601      return this.approvalDate != null && !this.approvalDate.isEmpty();
1602    }
1603
1604    /**
1605     * @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
1606     */
1607    public ArtifactAssessment setApprovalDateElement(DateType value) { 
1608      this.approvalDate = value;
1609      return this;
1610    }
1611
1612    /**
1613     * @return The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
1614     */
1615    public Date getApprovalDate() { 
1616      return this.approvalDate == null ? null : this.approvalDate.getValue();
1617    }
1618
1619    /**
1620     * @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.
1621     */
1622    public ArtifactAssessment setApprovalDate(Date value) { 
1623      if (value == null)
1624        this.approvalDate = null;
1625      else {
1626        if (this.approvalDate == null)
1627          this.approvalDate = new DateType();
1628        this.approvalDate.setValue(value);
1629      }
1630      return this;
1631    }
1632
1633    /**
1634     * @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
1635     */
1636    public DateType getLastReviewDateElement() { 
1637      if (this.lastReviewDate == null)
1638        if (Configuration.errorOnAutoCreate())
1639          throw new Error("Attempt to auto-create ArtifactAssessment.lastReviewDate");
1640        else if (Configuration.doAutoCreate())
1641          this.lastReviewDate = new DateType(); // bb
1642      return this.lastReviewDate;
1643    }
1644
1645    public boolean hasLastReviewDateElement() { 
1646      return this.lastReviewDate != null && !this.lastReviewDate.isEmpty();
1647    }
1648
1649    public boolean hasLastReviewDate() { 
1650      return this.lastReviewDate != null && !this.lastReviewDate.isEmpty();
1651    }
1652
1653    /**
1654     * @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
1655     */
1656    public ArtifactAssessment setLastReviewDateElement(DateType value) { 
1657      this.lastReviewDate = value;
1658      return this;
1659    }
1660
1661    /**
1662     * @return The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.
1663     */
1664    public Date getLastReviewDate() { 
1665      return this.lastReviewDate == null ? null : this.lastReviewDate.getValue();
1666    }
1667
1668    /**
1669     * @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.
1670     */
1671    public ArtifactAssessment setLastReviewDate(Date value) { 
1672      if (value == null)
1673        this.lastReviewDate = null;
1674      else {
1675        if (this.lastReviewDate == null)
1676          this.lastReviewDate = new DateType();
1677        this.lastReviewDate.setValue(value);
1678      }
1679      return this;
1680    }
1681
1682    /**
1683     * @return {@link #artifact} (A reference to a resource, canonical resource, or non-FHIR resource which the comment or assessment is about.)
1684     */
1685    public DataType getArtifact() { 
1686      return this.artifact;
1687    }
1688
1689    /**
1690     * @return {@link #artifact} (A reference to a resource, canonical resource, or non-FHIR resource which the comment or assessment is about.)
1691     */
1692    public Reference getArtifactReference() throws FHIRException { 
1693      if (this.artifact == null)
1694        this.artifact = new Reference();
1695      if (!(this.artifact instanceof Reference))
1696        throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.artifact.getClass().getName()+" was encountered");
1697      return (Reference) this.artifact;
1698    }
1699
1700    public boolean hasArtifactReference() { 
1701      return this != null && this.artifact instanceof Reference;
1702    }
1703
1704    /**
1705     * @return {@link #artifact} (A reference to a resource, canonical resource, or non-FHIR resource which the comment or assessment is about.)
1706     */
1707    public CanonicalType getArtifactCanonicalType() throws FHIRException { 
1708      if (this.artifact == null)
1709        this.artifact = new CanonicalType();
1710      if (!(this.artifact instanceof CanonicalType))
1711        throw new FHIRException("Type mismatch: the type CanonicalType was expected, but "+this.artifact.getClass().getName()+" was encountered");
1712      return (CanonicalType) this.artifact;
1713    }
1714
1715    public boolean hasArtifactCanonicalType() { 
1716      return this != null && this.artifact instanceof CanonicalType;
1717    }
1718
1719    /**
1720     * @return {@link #artifact} (A reference to a resource, canonical resource, or non-FHIR resource which the comment or assessment is about.)
1721     */
1722    public UriType getArtifactUriType() throws FHIRException { 
1723      if (this.artifact == null)
1724        this.artifact = new UriType();
1725      if (!(this.artifact instanceof UriType))
1726        throw new FHIRException("Type mismatch: the type UriType was expected, but "+this.artifact.getClass().getName()+" was encountered");
1727      return (UriType) this.artifact;
1728    }
1729
1730    public boolean hasArtifactUriType() { 
1731      return this != null && this.artifact instanceof UriType;
1732    }
1733
1734    public boolean hasArtifact() { 
1735      return this.artifact != null && !this.artifact.isEmpty();
1736    }
1737
1738    /**
1739     * @param value {@link #artifact} (A reference to a resource, canonical resource, or non-FHIR resource which the comment or assessment is about.)
1740     */
1741    public ArtifactAssessment setArtifact(DataType value) { 
1742      if (value != null && !(value instanceof Reference || value instanceof CanonicalType || value instanceof UriType))
1743        throw new Error("Not the right type for ArtifactAssessment.artifact[x]: "+value.fhirType());
1744      this.artifact = value;
1745      return this;
1746    }
1747
1748    /**
1749     * @return {@link #content} (A component comment, classifier, or rating of the artifact.)
1750     */
1751    public List<ArtifactAssessmentContentComponent> getContent() { 
1752      if (this.content == null)
1753        this.content = new ArrayList<ArtifactAssessmentContentComponent>();
1754      return this.content;
1755    }
1756
1757    /**
1758     * @return Returns a reference to <code>this</code> for easy method chaining
1759     */
1760    public ArtifactAssessment setContent(List<ArtifactAssessmentContentComponent> theContent) { 
1761      this.content = theContent;
1762      return this;
1763    }
1764
1765    public boolean hasContent() { 
1766      if (this.content == null)
1767        return false;
1768      for (ArtifactAssessmentContentComponent item : this.content)
1769        if (!item.isEmpty())
1770          return true;
1771      return false;
1772    }
1773
1774    public ArtifactAssessmentContentComponent addContent() { //3
1775      ArtifactAssessmentContentComponent t = new ArtifactAssessmentContentComponent();
1776      if (this.content == null)
1777        this.content = new ArrayList<ArtifactAssessmentContentComponent>();
1778      this.content.add(t);
1779      return t;
1780    }
1781
1782    public ArtifactAssessment addContent(ArtifactAssessmentContentComponent t) { //3
1783      if (t == null)
1784        return this;
1785      if (this.content == null)
1786        this.content = new ArrayList<ArtifactAssessmentContentComponent>();
1787      this.content.add(t);
1788      return this;
1789    }
1790
1791    /**
1792     * @return The first repetition of repeating field {@link #content}, creating it if it does not already exist {3}
1793     */
1794    public ArtifactAssessmentContentComponent getContentFirstRep() { 
1795      if (getContent().isEmpty()) {
1796        addContent();
1797      }
1798      return getContent().get(0);
1799    }
1800
1801    /**
1802     * @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
1803     */
1804    public Enumeration<ArtifactAssessmentWorkflowStatus> getWorkflowStatusElement() { 
1805      if (this.workflowStatus == null)
1806        if (Configuration.errorOnAutoCreate())
1807          throw new Error("Attempt to auto-create ArtifactAssessment.workflowStatus");
1808        else if (Configuration.doAutoCreate())
1809          this.workflowStatus = new Enumeration<ArtifactAssessmentWorkflowStatus>(new ArtifactAssessmentWorkflowStatusEnumFactory()); // bb
1810      return this.workflowStatus;
1811    }
1812
1813    public boolean hasWorkflowStatusElement() { 
1814      return this.workflowStatus != null && !this.workflowStatus.isEmpty();
1815    }
1816
1817    public boolean hasWorkflowStatus() { 
1818      return this.workflowStatus != null && !this.workflowStatus.isEmpty();
1819    }
1820
1821    /**
1822     * @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
1823     */
1824    public ArtifactAssessment setWorkflowStatusElement(Enumeration<ArtifactAssessmentWorkflowStatus> value) { 
1825      this.workflowStatus = value;
1826      return this;
1827    }
1828
1829    /**
1830     * @return Indicates the workflow status of the comment or change request.
1831     */
1832    public ArtifactAssessmentWorkflowStatus getWorkflowStatus() { 
1833      return this.workflowStatus == null ? null : this.workflowStatus.getValue();
1834    }
1835
1836    /**
1837     * @param value Indicates the workflow status of the comment or change request.
1838     */
1839    public ArtifactAssessment setWorkflowStatus(ArtifactAssessmentWorkflowStatus value) { 
1840      if (value == null)
1841        this.workflowStatus = null;
1842      else {
1843        if (this.workflowStatus == null)
1844          this.workflowStatus = new Enumeration<ArtifactAssessmentWorkflowStatus>(new ArtifactAssessmentWorkflowStatusEnumFactory());
1845        this.workflowStatus.setValue(value);
1846      }
1847      return this;
1848    }
1849
1850    /**
1851     * @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
1852     */
1853    public Enumeration<ArtifactAssessmentDisposition> getDispositionElement() { 
1854      if (this.disposition == null)
1855        if (Configuration.errorOnAutoCreate())
1856          throw new Error("Attempt to auto-create ArtifactAssessment.disposition");
1857        else if (Configuration.doAutoCreate())
1858          this.disposition = new Enumeration<ArtifactAssessmentDisposition>(new ArtifactAssessmentDispositionEnumFactory()); // bb
1859      return this.disposition;
1860    }
1861
1862    public boolean hasDispositionElement() { 
1863      return this.disposition != null && !this.disposition.isEmpty();
1864    }
1865
1866    public boolean hasDisposition() { 
1867      return this.disposition != null && !this.disposition.isEmpty();
1868    }
1869
1870    /**
1871     * @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
1872     */
1873    public ArtifactAssessment setDispositionElement(Enumeration<ArtifactAssessmentDisposition> value) { 
1874      this.disposition = value;
1875      return this;
1876    }
1877
1878    /**
1879     * @return Indicates the disposition of the responsible party to the comment or change request.
1880     */
1881    public ArtifactAssessmentDisposition getDisposition() { 
1882      return this.disposition == null ? null : this.disposition.getValue();
1883    }
1884
1885    /**
1886     * @param value Indicates the disposition of the responsible party to the comment or change request.
1887     */
1888    public ArtifactAssessment setDisposition(ArtifactAssessmentDisposition value) { 
1889      if (value == null)
1890        this.disposition = null;
1891      else {
1892        if (this.disposition == null)
1893          this.disposition = new Enumeration<ArtifactAssessmentDisposition>(new ArtifactAssessmentDispositionEnumFactory());
1894        this.disposition.setValue(value);
1895      }
1896      return this;
1897    }
1898
1899    /**
1900     * not supported on this implementation
1901     */
1902    @Override
1903    public int getUrlMax() { 
1904      return 0;
1905    }
1906    /**
1907     * @return {@link #url} (An absolute URI that is used to identify this artifact assessment when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this artifact assessment is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the artifact assessment is stored on different servers.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
1908     */
1909    public UriType getUrlElement() { 
1910      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"url\"");
1911    }
1912
1913    public boolean hasUrlElement() { 
1914      return false;
1915    }
1916    public boolean hasUrl() {
1917      return false;
1918    }
1919
1920    /**
1921     * @param value {@link #url} (An absolute URI that is used to identify this artifact assessment when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this artifact assessment is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the artifact assessment is stored on different servers.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
1922     */
1923    public ArtifactAssessment setUrlElement(UriType value) { 
1924      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"url\"");
1925    }
1926    public String getUrl() { 
1927      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"url\"");
1928    }
1929    /**
1930     * @param value An absolute URI that is used to identify this artifact assessment when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this artifact assessment is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the artifact assessment is stored on different servers.
1931     */
1932    public ArtifactAssessment setUrl(String value) { 
1933      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"url\"");
1934    }
1935    /**
1936     * not supported on this implementation
1937     */
1938    @Override
1939    public int getVersionMax() { 
1940      return 0;
1941    }
1942    /**
1943     * @return {@link #version} (The identifier that is used to identify this version of the artifact assessment when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the artifact assessment author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
1944     */
1945    public StringType getVersionElement() { 
1946      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"version\"");
1947    }
1948
1949    public boolean hasVersionElement() { 
1950      return false;
1951    }
1952    public boolean hasVersion() {
1953      return false;
1954    }
1955
1956    /**
1957     * @param value {@link #version} (The identifier that is used to identify this version of the artifact assessment when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the artifact assessment author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
1958     */
1959    public ArtifactAssessment setVersionElement(StringType value) { 
1960      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"version\"");
1961    }
1962    public String getVersion() { 
1963      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"version\"");
1964    }
1965    /**
1966     * @param value The identifier that is used to identify this version of the artifact assessment when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the artifact assessment author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.
1967     */
1968    public ArtifactAssessment setVersion(String value) { 
1969      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"version\"");
1970    }
1971    /**
1972     * not supported on this implementation
1973     */
1974    @Override
1975    public int getNameMax() { 
1976      return 0;
1977    }
1978    /**
1979     * @return {@link #name} (A natural language name identifying the artifact assessment. This name should be usable as an identifier for the module by machine processing applications such as code generation.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
1980     */
1981    public StringType getNameElement() { 
1982      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"name\"");
1983    }
1984
1985    public boolean hasNameElement() { 
1986      return false;
1987    }
1988    public boolean hasName() {
1989      return false;
1990    }
1991
1992    /**
1993     * @param value {@link #name} (A natural language name identifying the artifact assessment. This name should be usable as an identifier for the module by machine processing applications such as code generation.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
1994     */
1995    public ArtifactAssessment setNameElement(StringType value) { 
1996      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"name\"");
1997    }
1998    public String getName() { 
1999      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"name\"");
2000    }
2001    /**
2002     * @param value A natural language name identifying the artifact assessment. This name should be usable as an identifier for the module by machine processing applications such as code generation.
2003     */
2004    public ArtifactAssessment setName(String value) { 
2005      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"name\"");
2006    }
2007    /**
2008     * not supported on this implementation
2009     */
2010    @Override
2011    public int getTitleMax() { 
2012      return 0;
2013    }
2014    /**
2015     * @return {@link #title} (A short, descriptive, user-friendly title for the artifact assessment.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
2016     */
2017    public StringType getTitleElement() { 
2018      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"title\"");
2019    }
2020
2021    public boolean hasTitleElement() { 
2022      return false;
2023    }
2024    public boolean hasTitle() {
2025      return false;
2026    }
2027
2028    /**
2029     * @param value {@link #title} (A short, descriptive, user-friendly title for the artifact assessment.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
2030     */
2031    public ArtifactAssessment setTitleElement(StringType value) { 
2032      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"title\"");
2033    }
2034    public String getTitle() { 
2035      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"title\"");
2036    }
2037    /**
2038     * @param value A short, descriptive, user-friendly title for the artifact assessment.
2039     */
2040    public ArtifactAssessment setTitle(String value) { 
2041      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"title\"");
2042    }
2043    /**
2044     * not supported on this implementation
2045     */
2046    @Override
2047    public int getStatusMax() { 
2048      return 0;
2049    }
2050    /**
2051     * @return {@link #status} (The status of this artifact assessment. Enables tracking the life-cycle of the content.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
2052     */
2053    public Enumeration<PublicationStatus> getStatusElement() { 
2054      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"status\"");
2055    }
2056
2057    public boolean hasStatusElement() { 
2058      return false;
2059    }
2060    public boolean hasStatus() {
2061      return false;
2062    }
2063
2064    /**
2065     * @param value {@link #status} (The status of this artifact assessment. Enables tracking the life-cycle of the content.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
2066     */
2067    public ArtifactAssessment setStatusElement(Enumeration<PublicationStatus> value) { 
2068      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"status\"");
2069    }
2070    public PublicationStatus getStatus() { 
2071      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"status\"");
2072    }
2073    /**
2074     * @param value The status of this artifact assessment. Enables tracking the life-cycle of the content.
2075     */
2076    public ArtifactAssessment setStatus(PublicationStatus value) { 
2077      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"status\"");
2078    }
2079    /**
2080     * not supported on this implementation
2081     */
2082    @Override
2083    public int getExperimentalMax() { 
2084      return 0;
2085    }
2086    /**
2087     * @return {@link #experimental} (A Boolean value to indicate that this artifact assessment is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.). This is the underlying object with id, value and extensions. The accessor "getExperimental" gives direct access to the value
2088     */
2089    public BooleanType getExperimentalElement() { 
2090      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"experimental\"");
2091    }
2092
2093    public boolean hasExperimentalElement() { 
2094      return false;
2095    }
2096    public boolean hasExperimental() {
2097      return false;
2098    }
2099
2100    /**
2101     * @param value {@link #experimental} (A Boolean value to indicate that this artifact assessment is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.). This is the underlying object with id, value and extensions. The accessor "getExperimental" gives direct access to the value
2102     */
2103    public ArtifactAssessment setExperimentalElement(BooleanType value) { 
2104      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"experimental\"");
2105    }
2106    public boolean getExperimental() { 
2107      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"experimental\"");
2108    }
2109    /**
2110     * @param value A Boolean value to indicate that this artifact assessment is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.
2111     */
2112    public ArtifactAssessment setExperimental(boolean value) { 
2113      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"experimental\"");
2114    }
2115    /**
2116     * not supported on this implementation
2117     */
2118    @Override
2119    public int getPublisherMax() { 
2120      return 0;
2121    }
2122    /**
2123     * @return {@link #publisher} (The name of the organization or individual that published the artifact assessment.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
2124     */
2125    public StringType getPublisherElement() { 
2126      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"publisher\"");
2127    }
2128
2129    public boolean hasPublisherElement() { 
2130      return false;
2131    }
2132    public boolean hasPublisher() {
2133      return false;
2134    }
2135
2136    /**
2137     * @param value {@link #publisher} (The name of the organization or individual that published the artifact assessment.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
2138     */
2139    public ArtifactAssessment setPublisherElement(StringType value) { 
2140      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"publisher\"");
2141    }
2142    public String getPublisher() { 
2143      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"publisher\"");
2144    }
2145    /**
2146     * @param value The name of the organization or individual that published the artifact assessment.
2147     */
2148    public ArtifactAssessment setPublisher(String value) { 
2149      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"publisher\"");
2150    }
2151    /**
2152     * not supported on this implementation
2153     */
2154    @Override
2155    public int getContactMax() { 
2156      return 0;
2157    }
2158    /**
2159     * @return {@link #contact} (Contact details to assist a user in finding and communicating with the publisher.)
2160     */
2161    public List<ContactDetail> getContact() { 
2162      return new ArrayList<>();
2163    }
2164    /**
2165     * @return Returns a reference to <code>this</code> for easy method chaining
2166     */
2167    public ArtifactAssessment setContact(List<ContactDetail> theContact) { 
2168      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"contact\"");
2169    }
2170    public boolean hasContact() { 
2171      return false;
2172    }
2173
2174    public ContactDetail addContact() { //3
2175      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"contact\"");
2176    }
2177    public ArtifactAssessment addContact(ContactDetail t) { //3
2178      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"contact\"");
2179    }
2180    /**
2181     * @return The first repetition of repeating field {@link #contact}, creating it if it does not already exist {2}
2182     */
2183    public ContactDetail getContactFirstRep() { 
2184      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"contact\"");
2185    }
2186    /**
2187     * not supported on this implementation
2188     */
2189    @Override
2190    public int getDescriptionMax() { 
2191      return 0;
2192    }
2193    /**
2194     * @return {@link #description} (A free text natural language description of the artifact assessment from a consumer's perspective.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
2195     */
2196    public MarkdownType getDescriptionElement() { 
2197      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"description\"");
2198    }
2199
2200    public boolean hasDescriptionElement() { 
2201      return false;
2202    }
2203    public boolean hasDescription() {
2204      return false;
2205    }
2206
2207    /**
2208     * @param value {@link #description} (A free text natural language description of the artifact assessment from a consumer's perspective.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
2209     */
2210    public ArtifactAssessment setDescriptionElement(MarkdownType value) { 
2211      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"description\"");
2212    }
2213    public String getDescription() { 
2214      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"description\"");
2215    }
2216    /**
2217     * @param value A free text natural language description of the artifact assessment from a consumer's perspective.
2218     */
2219    public ArtifactAssessment setDescription(String value) { 
2220      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"description\"");
2221    }
2222    /**
2223     * not supported on this implementation
2224     */
2225    @Override
2226    public int getUseContextMax() { 
2227      return 0;
2228    }
2229    /**
2230     * @return {@link #useContext} (The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate artifact assessment instances.)
2231     */
2232    public List<UsageContext> getUseContext() { 
2233      return new ArrayList<>();
2234    }
2235    /**
2236     * @return Returns a reference to <code>this</code> for easy method chaining
2237     */
2238    public ArtifactAssessment setUseContext(List<UsageContext> theUseContext) { 
2239      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"useContext\"");
2240    }
2241    public boolean hasUseContext() { 
2242      return false;
2243    }
2244
2245    public UsageContext addUseContext() { //3
2246      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"useContext\"");
2247    }
2248    public ArtifactAssessment addUseContext(UsageContext t) { //3
2249      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"useContext\"");
2250    }
2251    /**
2252     * @return The first repetition of repeating field {@link #useContext}, creating it if it does not already exist {2}
2253     */
2254    public UsageContext getUseContextFirstRep() { 
2255      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"useContext\"");
2256    }
2257    /**
2258     * not supported on this implementation
2259     */
2260    @Override
2261    public int getJurisdictionMax() { 
2262      return 0;
2263    }
2264    /**
2265     * @return {@link #jurisdiction} (A legal or geographic region in which the artifact assessment is intended to be used.)
2266     */
2267    public List<CodeableConcept> getJurisdiction() { 
2268      return new ArrayList<>();
2269    }
2270    /**
2271     * @return Returns a reference to <code>this</code> for easy method chaining
2272     */
2273    public ArtifactAssessment setJurisdiction(List<CodeableConcept> theJurisdiction) { 
2274      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"jurisdiction\"");
2275    }
2276    public boolean hasJurisdiction() { 
2277      return false;
2278    }
2279
2280    public CodeableConcept addJurisdiction() { //3
2281      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"jurisdiction\"");
2282    }
2283    public ArtifactAssessment addJurisdiction(CodeableConcept t) { //3
2284      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"jurisdiction\"");
2285    }
2286    /**
2287     * @return The first repetition of repeating field {@link #jurisdiction}, creating it if it does not already exist {2}
2288     */
2289    public CodeableConcept getJurisdictionFirstRep() { 
2290      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"jurisdiction\"");
2291    }
2292    /**
2293     * not supported on this implementation
2294     */
2295    @Override
2296    public int getPurposeMax() { 
2297      return 0;
2298    }
2299    /**
2300     * @return {@link #purpose} (Explanation of why this artifact assessment is needed and why it has been designed as it has.). This is the underlying object with id, value and extensions. The accessor "getPurpose" gives direct access to the value
2301     */
2302    public MarkdownType getPurposeElement() { 
2303      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"purpose\"");
2304    }
2305
2306    public boolean hasPurposeElement() { 
2307      return false;
2308    }
2309    public boolean hasPurpose() {
2310      return false;
2311    }
2312
2313    /**
2314     * @param value {@link #purpose} (Explanation of why this artifact assessment is needed and why it has been designed as it has.). This is the underlying object with id, value and extensions. The accessor "getPurpose" gives direct access to the value
2315     */
2316    public ArtifactAssessment setPurposeElement(MarkdownType value) { 
2317      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"purpose\"");
2318    }
2319    public String getPurpose() { 
2320      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"purpose\"");
2321    }
2322    /**
2323     * @param value Explanation of why this artifact assessment is needed and why it has been designed as it has.
2324     */
2325    public ArtifactAssessment setPurpose(String value) { 
2326      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"purpose\"");
2327    }
2328    /**
2329     * not supported on this implementation
2330     */
2331    @Override
2332    public int getEffectivePeriodMax() { 
2333      return 0;
2334    }
2335    /**
2336     * @return {@link #effectivePeriod} (The period during which the artifact assessment content was or is planned to be in active use.)
2337     */
2338    public Period getEffectivePeriod() { 
2339      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"effectivePeriod\"");
2340    }
2341    public boolean hasEffectivePeriod() { 
2342      return false;
2343    }
2344    /**
2345     * @param value {@link #effectivePeriod} (The period during which the artifact assessment content was or is planned to be in active use.)
2346     */
2347    public ArtifactAssessment setEffectivePeriod(Period value) { 
2348      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"effectivePeriod\"");
2349    }
2350
2351    /**
2352     * not supported on this implementation
2353     */
2354    @Override
2355    public int getTopicMax() { 
2356      return 0;
2357    }
2358    /**
2359     * @return {@link #topic} (Descriptive topics related to the content of the library. Topics provide a high-level categorization of the library that can be useful for filtering and searching.)
2360     */
2361    public List<CodeableConcept> getTopic() { 
2362      return new ArrayList<>();
2363    }
2364    /**
2365     * @return Returns a reference to <code>this</code> for easy method chaining
2366     */
2367    public ArtifactAssessment setTopic(List<CodeableConcept> theTopic) { 
2368      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"topic\"");
2369    }
2370    public boolean hasTopic() { 
2371      return false;
2372    }
2373
2374    public CodeableConcept addTopic() { //3
2375      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"topic\"");
2376    }
2377    public ArtifactAssessment addTopic(CodeableConcept t) { //3
2378      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"topic\"");
2379    }
2380    /**
2381     * @return The first repetition of repeating field {@link #topic}, creating it if it does not already exist {2}
2382     */
2383    public CodeableConcept getTopicFirstRep() { 
2384      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"topic\"");
2385    }
2386    /**
2387     * not supported on this implementation
2388     */
2389    @Override
2390    public int getAuthorMax() { 
2391      return 0;
2392    }
2393    /**
2394     * @return {@link #author} (An individiual or organization primarily involved in the creation and maintenance of the artifact assessment.)
2395     */
2396    public List<ContactDetail> getAuthor() { 
2397      return new ArrayList<>();
2398    }
2399    /**
2400     * @return Returns a reference to <code>this</code> for easy method chaining
2401     */
2402    public ArtifactAssessment setAuthor(List<ContactDetail> theAuthor) { 
2403      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"author\"");
2404    }
2405    public boolean hasAuthor() { 
2406      return false;
2407    }
2408
2409    public ContactDetail addAuthor() { //3
2410      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"author\"");
2411    }
2412    public ArtifactAssessment addAuthor(ContactDetail t) { //3
2413      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"author\"");
2414    }
2415    /**
2416     * @return The first repetition of repeating field {@link #author}, creating it if it does not already exist {2}
2417     */
2418    public ContactDetail getAuthorFirstRep() { 
2419      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"author\"");
2420    }
2421    /**
2422     * not supported on this implementation
2423     */
2424    @Override
2425    public int getEditorMax() { 
2426      return 0;
2427    }
2428    /**
2429     * @return {@link #editor} (An individual or organization primarily responsible for internal coherence of the artifact assessment.)
2430     */
2431    public List<ContactDetail> getEditor() { 
2432      return new ArrayList<>();
2433    }
2434    /**
2435     * @return Returns a reference to <code>this</code> for easy method chaining
2436     */
2437    public ArtifactAssessment setEditor(List<ContactDetail> theEditor) { 
2438      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"editor\"");
2439    }
2440    public boolean hasEditor() { 
2441      return false;
2442    }
2443
2444    public ContactDetail addEditor() { //3
2445      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"editor\"");
2446    }
2447    public ArtifactAssessment addEditor(ContactDetail t) { //3
2448      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"editor\"");
2449    }
2450    /**
2451     * @return The first repetition of repeating field {@link #editor}, creating it if it does not already exist {2}
2452     */
2453    public ContactDetail getEditorFirstRep() { 
2454      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"editor\"");
2455    }
2456    /**
2457     * not supported on this implementation
2458     */
2459    @Override
2460    public int getReviewerMax() { 
2461      return 0;
2462    }
2463    /**
2464     * @return {@link #reviewer} (An individual or organization primarily responsible for review of some aspect of the artifact assessment.)
2465     */
2466    public List<ContactDetail> getReviewer() { 
2467      return new ArrayList<>();
2468    }
2469    /**
2470     * @return Returns a reference to <code>this</code> for easy method chaining
2471     */
2472    public ArtifactAssessment setReviewer(List<ContactDetail> theReviewer) { 
2473      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"reviewer\"");
2474    }
2475    public boolean hasReviewer() { 
2476      return false;
2477    }
2478
2479    public ContactDetail addReviewer() { //3
2480      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"reviewer\"");
2481    }
2482    public ArtifactAssessment addReviewer(ContactDetail t) { //3
2483      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"reviewer\"");
2484    }
2485    /**
2486     * @return The first repetition of repeating field {@link #reviewer}, creating it if it does not already exist {2}
2487     */
2488    public ContactDetail getReviewerFirstRep() { 
2489      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"reviewer\"");
2490    }
2491    /**
2492     * not supported on this implementation
2493     */
2494    @Override
2495    public int getEndorserMax() { 
2496      return 0;
2497    }
2498    /**
2499     * @return {@link #endorser} (An individual or organization responsible for officially endorsing the artifact assessment for use in some setting.)
2500     */
2501    public List<ContactDetail> getEndorser() { 
2502      return new ArrayList<>();
2503    }
2504    /**
2505     * @return Returns a reference to <code>this</code> for easy method chaining
2506     */
2507    public ArtifactAssessment setEndorser(List<ContactDetail> theEndorser) { 
2508      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"endorser\"");
2509    }
2510    public boolean hasEndorser() { 
2511      return false;
2512    }
2513
2514    public ContactDetail addEndorser() { //3
2515      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"endorser\"");
2516    }
2517    public ArtifactAssessment addEndorser(ContactDetail t) { //3
2518      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"endorser\"");
2519    }
2520    /**
2521     * @return The first repetition of repeating field {@link #endorser}, creating it if it does not already exist {2}
2522     */
2523    public ContactDetail getEndorserFirstRep() { 
2524      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"endorser\"");
2525    }
2526    /**
2527     * not supported on this implementation
2528     */
2529    @Override
2530    public int getRelatedArtifactMax() { 
2531      return 0;
2532    }
2533    /**
2534     * @return {@link #relatedArtifact} (Related artifacts such as additional documentation, justification, dependencies, bibliographic references, and predecessor and successor artifacts.)
2535     */
2536    public List<RelatedArtifact> getRelatedArtifact() { 
2537      return new ArrayList<>();
2538    }
2539    /**
2540     * @return Returns a reference to <code>this</code> for easy method chaining
2541     */
2542    public ArtifactAssessment setRelatedArtifact(List<RelatedArtifact> theRelatedArtifact) { 
2543      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"relatedArtifact\"");
2544    }
2545    public boolean hasRelatedArtifact() { 
2546      return false;
2547    }
2548
2549    public RelatedArtifact addRelatedArtifact() { //3
2550      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"relatedArtifact\"");
2551    }
2552    public ArtifactAssessment addRelatedArtifact(RelatedArtifact t) { //3
2553      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"relatedArtifact\"");
2554    }
2555    /**
2556     * @return The first repetition of repeating field {@link #relatedArtifact}, creating it if it does not already exist {2}
2557     */
2558    public RelatedArtifact getRelatedArtifactFirstRep() { 
2559      throw new Error("The resource type \"ArtifactAssessment\" does not implement the property \"relatedArtifact\"");
2560    }
2561      protected void listChildren(List<Property> children) {
2562        super.listChildren(children);
2563        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));
2564        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));
2565        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));
2566        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));
2567        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));
2568        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));
2569        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));
2570        children.add(new Property("content", "", "A component comment, classifier, or rating of the artifact.", 0, java.lang.Integer.MAX_VALUE, content));
2571        children.add(new Property("workflowStatus", "code", "Indicates the workflow status of the comment or change request.", 0, 1, workflowStatus));
2572        children.add(new Property("disposition", "code", "Indicates the disposition of the responsible party to the comment or change request.", 0, 1, disposition));
2573      }
2574
2575      @Override
2576      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2577        switch (_hash) {
2578        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);
2579        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);
2580        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);
2581        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);
2582        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);
2583        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);
2584        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);
2585        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);
2586        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);
2587        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);
2588        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);
2589        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);
2590        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);
2591        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);
2592        case 951530617: /*content*/  return new Property("content", "", "A component comment, classifier, or rating of the artifact.", 0, java.lang.Integer.MAX_VALUE, content);
2593        case 697796753: /*workflowStatus*/  return new Property("workflowStatus", "code", "Indicates the workflow status of the comment or change request.", 0, 1, workflowStatus);
2594        case 583380919: /*disposition*/  return new Property("disposition", "code", "Indicates the disposition of the responsible party to the comment or change request.", 0, 1, disposition);
2595        default: return super.getNamedProperty(_hash, _name, _checkValid);
2596        }
2597
2598      }
2599
2600      @Override
2601      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2602        switch (hash) {
2603        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
2604        case -1360156695: /*citeAs*/ return this.citeAs == null ? new Base[0] : new Base[] {this.citeAs}; // DataType
2605        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
2606        case 1522889671: /*copyright*/ return this.copyright == null ? new Base[0] : new Base[] {this.copyright}; // MarkdownType
2607        case 223539345: /*approvalDate*/ return this.approvalDate == null ? new Base[0] : new Base[] {this.approvalDate}; // DateType
2608        case -1687512484: /*lastReviewDate*/ return this.lastReviewDate == null ? new Base[0] : new Base[] {this.lastReviewDate}; // DateType
2609        case -1228798510: /*artifact*/ return this.artifact == null ? new Base[0] : new Base[] {this.artifact}; // DataType
2610        case 951530617: /*content*/ return this.content == null ? new Base[0] : this.content.toArray(new Base[this.content.size()]); // ArtifactAssessmentContentComponent
2611        case 697796753: /*workflowStatus*/ return this.workflowStatus == null ? new Base[0] : new Base[] {this.workflowStatus}; // Enumeration<ArtifactAssessmentWorkflowStatus>
2612        case 583380919: /*disposition*/ return this.disposition == null ? new Base[0] : new Base[] {this.disposition}; // Enumeration<ArtifactAssessmentDisposition>
2613        default: return super.getProperty(hash, name, checkValid);
2614        }
2615
2616      }
2617
2618      @Override
2619      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2620        switch (hash) {
2621        case -1618432855: // identifier
2622          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
2623          return value;
2624        case -1360156695: // citeAs
2625          this.citeAs = TypeConvertor.castToType(value); // DataType
2626          return value;
2627        case 3076014: // date
2628          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
2629          return value;
2630        case 1522889671: // copyright
2631          this.copyright = TypeConvertor.castToMarkdown(value); // MarkdownType
2632          return value;
2633        case 223539345: // approvalDate
2634          this.approvalDate = TypeConvertor.castToDate(value); // DateType
2635          return value;
2636        case -1687512484: // lastReviewDate
2637          this.lastReviewDate = TypeConvertor.castToDate(value); // DateType
2638          return value;
2639        case -1228798510: // artifact
2640          this.artifact = TypeConvertor.castToType(value); // DataType
2641          return value;
2642        case 951530617: // content
2643          this.getContent().add((ArtifactAssessmentContentComponent) value); // ArtifactAssessmentContentComponent
2644          return value;
2645        case 697796753: // workflowStatus
2646          value = new ArtifactAssessmentWorkflowStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
2647          this.workflowStatus = (Enumeration) value; // Enumeration<ArtifactAssessmentWorkflowStatus>
2648          return value;
2649        case 583380919: // disposition
2650          value = new ArtifactAssessmentDispositionEnumFactory().fromType(TypeConvertor.castToCode(value));
2651          this.disposition = (Enumeration) value; // Enumeration<ArtifactAssessmentDisposition>
2652          return value;
2653        default: return super.setProperty(hash, name, value);
2654        }
2655
2656      }
2657
2658      @Override
2659      public Base setProperty(String name, Base value) throws FHIRException {
2660        if (name.equals("identifier")) {
2661          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
2662        } else if (name.equals("citeAs[x]")) {
2663          this.citeAs = TypeConvertor.castToType(value); // DataType
2664        } else if (name.equals("date")) {
2665          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
2666        } else if (name.equals("copyright")) {
2667          this.copyright = TypeConvertor.castToMarkdown(value); // MarkdownType
2668        } else if (name.equals("approvalDate")) {
2669          this.approvalDate = TypeConvertor.castToDate(value); // DateType
2670        } else if (name.equals("lastReviewDate")) {
2671          this.lastReviewDate = TypeConvertor.castToDate(value); // DateType
2672        } else if (name.equals("artifact[x]")) {
2673          this.artifact = TypeConvertor.castToType(value); // DataType
2674        } else if (name.equals("content")) {
2675          this.getContent().add((ArtifactAssessmentContentComponent) value);
2676        } else if (name.equals("workflowStatus")) {
2677          value = new ArtifactAssessmentWorkflowStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
2678          this.workflowStatus = (Enumeration) value; // Enumeration<ArtifactAssessmentWorkflowStatus>
2679        } else if (name.equals("disposition")) {
2680          value = new ArtifactAssessmentDispositionEnumFactory().fromType(TypeConvertor.castToCode(value));
2681          this.disposition = (Enumeration) value; // Enumeration<ArtifactAssessmentDisposition>
2682        } else
2683          return super.setProperty(name, value);
2684        return value;
2685      }
2686
2687      @Override
2688      public Base makeProperty(int hash, String name) throws FHIRException {
2689        switch (hash) {
2690        case -1618432855:  return addIdentifier(); 
2691        case -1706539017:  return getCiteAs();
2692        case -1360156695:  return getCiteAs();
2693        case 3076014:  return getDateElement();
2694        case 1522889671:  return getCopyrightElement();
2695        case 223539345:  return getApprovalDateElement();
2696        case -1687512484:  return getLastReviewDateElement();
2697        case -1130056338:  return getArtifact();
2698        case -1228798510:  return getArtifact();
2699        case 951530617:  return addContent(); 
2700        case 697796753:  return getWorkflowStatusElement();
2701        case 583380919:  return getDispositionElement();
2702        default: return super.makeProperty(hash, name);
2703        }
2704
2705      }
2706
2707      @Override
2708      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2709        switch (hash) {
2710        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
2711        case -1360156695: /*citeAs*/ return new String[] {"Reference", "markdown"};
2712        case 3076014: /*date*/ return new String[] {"dateTime"};
2713        case 1522889671: /*copyright*/ return new String[] {"markdown"};
2714        case 223539345: /*approvalDate*/ return new String[] {"date"};
2715        case -1687512484: /*lastReviewDate*/ return new String[] {"date"};
2716        case -1228798510: /*artifact*/ return new String[] {"Reference", "canonical", "uri"};
2717        case 951530617: /*content*/ return new String[] {};
2718        case 697796753: /*workflowStatus*/ return new String[] {"code"};
2719        case 583380919: /*disposition*/ return new String[] {"code"};
2720        default: return super.getTypesForProperty(hash, name);
2721        }
2722
2723      }
2724
2725      @Override
2726      public Base addChild(String name) throws FHIRException {
2727        if (name.equals("identifier")) {
2728          return addIdentifier();
2729        }
2730        else if (name.equals("citeAsReference")) {
2731          this.citeAs = new Reference();
2732          return this.citeAs;
2733        }
2734        else if (name.equals("citeAsMarkdown")) {
2735          this.citeAs = new MarkdownType();
2736          return this.citeAs;
2737        }
2738        else if (name.equals("date")) {
2739          throw new FHIRException("Cannot call addChild on a primitive type ArtifactAssessment.date");
2740        }
2741        else if (name.equals("copyright")) {
2742          throw new FHIRException("Cannot call addChild on a primitive type ArtifactAssessment.copyright");
2743        }
2744        else if (name.equals("approvalDate")) {
2745          throw new FHIRException("Cannot call addChild on a primitive type ArtifactAssessment.approvalDate");
2746        }
2747        else if (name.equals("lastReviewDate")) {
2748          throw new FHIRException("Cannot call addChild on a primitive type ArtifactAssessment.lastReviewDate");
2749        }
2750        else if (name.equals("artifactReference")) {
2751          this.artifact = new Reference();
2752          return this.artifact;
2753        }
2754        else if (name.equals("artifactCanonical")) {
2755          this.artifact = new CanonicalType();
2756          return this.artifact;
2757        }
2758        else if (name.equals("artifactUri")) {
2759          this.artifact = new UriType();
2760          return this.artifact;
2761        }
2762        else if (name.equals("content")) {
2763          return addContent();
2764        }
2765        else if (name.equals("workflowStatus")) {
2766          throw new FHIRException("Cannot call addChild on a primitive type ArtifactAssessment.workflowStatus");
2767        }
2768        else if (name.equals("disposition")) {
2769          throw new FHIRException("Cannot call addChild on a primitive type ArtifactAssessment.disposition");
2770        }
2771        else
2772          return super.addChild(name);
2773      }
2774
2775  public String fhirType() {
2776    return "ArtifactAssessment";
2777
2778  }
2779
2780      public ArtifactAssessment copy() {
2781        ArtifactAssessment dst = new ArtifactAssessment();
2782        copyValues(dst);
2783        return dst;
2784      }
2785
2786      public void copyValues(ArtifactAssessment dst) {
2787        super.copyValues(dst);
2788        if (identifier != null) {
2789          dst.identifier = new ArrayList<Identifier>();
2790          for (Identifier i : identifier)
2791            dst.identifier.add(i.copy());
2792        };
2793        dst.citeAs = citeAs == null ? null : citeAs.copy();
2794        dst.date = date == null ? null : date.copy();
2795        dst.copyright = copyright == null ? null : copyright.copy();
2796        dst.approvalDate = approvalDate == null ? null : approvalDate.copy();
2797        dst.lastReviewDate = lastReviewDate == null ? null : lastReviewDate.copy();
2798        dst.artifact = artifact == null ? null : artifact.copy();
2799        if (content != null) {
2800          dst.content = new ArrayList<ArtifactAssessmentContentComponent>();
2801          for (ArtifactAssessmentContentComponent i : content)
2802            dst.content.add(i.copy());
2803        };
2804        dst.workflowStatus = workflowStatus == null ? null : workflowStatus.copy();
2805        dst.disposition = disposition == null ? null : disposition.copy();
2806      }
2807
2808      protected ArtifactAssessment typedCopy() {
2809        return copy();
2810      }
2811
2812      @Override
2813      public boolean equalsDeep(Base other_) {
2814        if (!super.equalsDeep(other_))
2815          return false;
2816        if (!(other_ instanceof ArtifactAssessment))
2817          return false;
2818        ArtifactAssessment o = (ArtifactAssessment) other_;
2819        return compareDeep(identifier, o.identifier, true) && compareDeep(citeAs, o.citeAs, true) && compareDeep(date, o.date, true)
2820           && compareDeep(copyright, o.copyright, true) && compareDeep(approvalDate, o.approvalDate, true)
2821           && compareDeep(lastReviewDate, o.lastReviewDate, true) && compareDeep(artifact, o.artifact, true)
2822           && compareDeep(content, o.content, true) && compareDeep(workflowStatus, o.workflowStatus, true)
2823           && compareDeep(disposition, o.disposition, true);
2824      }
2825
2826      @Override
2827      public boolean equalsShallow(Base other_) {
2828        if (!super.equalsShallow(other_))
2829          return false;
2830        if (!(other_ instanceof ArtifactAssessment))
2831          return false;
2832        ArtifactAssessment o = (ArtifactAssessment) other_;
2833        return compareValues(date, o.date, true) && compareValues(copyright, o.copyright, true) && compareValues(approvalDate, o.approvalDate, true)
2834           && compareValues(lastReviewDate, o.lastReviewDate, true) && compareValues(workflowStatus, o.workflowStatus, true)
2835           && compareValues(disposition, o.disposition, true);
2836      }
2837
2838      public boolean isEmpty() {
2839        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, citeAs, date
2840          , copyright, approvalDate, lastReviewDate, artifact, content, workflowStatus, disposition
2841          );
2842      }
2843
2844  @Override
2845  public ResourceType getResourceType() {
2846    return ResourceType.ArtifactAssessment;
2847   }
2848
2849 /**
2850   * Search parameter: <b>date</b>
2851   * <p>
2852   * Description: <b>The artifact assessment publication date</b><br>
2853   * Type: <b>date</b><br>
2854   * Path: <b>ArtifactAssessment.date</b><br>
2855   * </p>
2856   */
2857  @SearchParamDefinition(name="date", path="ArtifactAssessment.date", description="The artifact assessment publication date", type="date" )
2858  public static final String SP_DATE = "date";
2859 /**
2860   * <b>Fluent Client</b> search parameter constant for <b>date</b>
2861   * <p>
2862   * Description: <b>The artifact assessment publication date</b><br>
2863   * Type: <b>date</b><br>
2864   * Path: <b>ArtifactAssessment.date</b><br>
2865   * </p>
2866   */
2867  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
2868
2869
2870}
2871