001package org.hl7.fhir.dstu3.model;
002
003
004
005
006/*
007  Copyright (c) 2011+, HL7, Inc.
008  All rights reserved.
009  
010  Redistribution and use in source and binary forms, with or without modification, 
011  are permitted provided that the following conditions are met:
012  
013   * Redistributions of source code must retain the above copyright notice, this 
014     list of conditions and the following disclaimer.
015   * Redistributions in binary form must reproduce the above copyright notice, 
016     this list of conditions and the following disclaimer in the documentation 
017     and/or other materials provided with the distribution.
018   * Neither the name of HL7 nor the names of its contributors may be used to 
019     endorse or promote products derived from this software without specific 
020     prior written permission.
021  
022  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
023  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
024  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
025  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
026  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
027  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
028  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
029  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
030  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
031  POSSIBILITY OF SUCH DAMAGE.
032  
033*/
034
035// Generated on Fri, Mar 16, 2018 15:21+1100 for FHIR v3.0.x
036import java.util.ArrayList;
037import java.util.Date;
038import java.util.List;
039
040import org.hl7.fhir.exceptions.FHIRException;
041import org.hl7.fhir.exceptions.FHIRFormatError;
042import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
043
044import ca.uhn.fhir.model.api.annotation.Block;
045import ca.uhn.fhir.model.api.annotation.Child;
046import ca.uhn.fhir.model.api.annotation.Description;
047import ca.uhn.fhir.model.api.annotation.ResourceDef;
048import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
049/**
050 * Provenance of a resource is a record that describes entities and processes involved in producing and delivering or otherwise influencing that resource. Provenance provides a critical foundation for assessing authenticity, enabling trust, and allowing reproducibility. Provenance assertions are a form of contextual metadata and can themselves become important records with their own provenance. Provenance statement indicates clinical significance in terms of confidence in authenticity, reliability, and trustworthiness, integrity, and stage in lifecycle (e.g. Document Completion - has the artifact been legally authenticated), all of which may impact security, privacy, and trust policies.
051 */
052@ResourceDef(name="Provenance", profile="http://hl7.org/fhir/Profile/Provenance")
053public class Provenance extends DomainResource {
054
055    public enum ProvenanceEntityRole {
056        /**
057         * A transformation of an entity into another, an update of an entity resulting in a new one, or the construction of a new entity based on a preexisting entity.
058         */
059        DERIVATION, 
060        /**
061         * A derivation for which the resulting entity is a revised version of some original.
062         */
063        REVISION, 
064        /**
065         * The repeat of (some or all of) an entity, such as text or image, by someone who may or may not be its original author.
066         */
067        QUOTATION, 
068        /**
069         * A primary source for a topic refers to something produced by some agent with direct experience and knowledge about the topic, at the time of the topic's study, without benefit from hindsight.
070         */
071        SOURCE, 
072        /**
073         * A derivation for which the entity is removed from accessibility usually through the use of the Delete operation.
074         */
075        REMOVAL, 
076        /**
077         * added to help the parsers with the generic types
078         */
079        NULL;
080        public static ProvenanceEntityRole fromCode(String codeString) throws FHIRException {
081            if (codeString == null || "".equals(codeString))
082                return null;
083        if ("derivation".equals(codeString))
084          return DERIVATION;
085        if ("revision".equals(codeString))
086          return REVISION;
087        if ("quotation".equals(codeString))
088          return QUOTATION;
089        if ("source".equals(codeString))
090          return SOURCE;
091        if ("removal".equals(codeString))
092          return REMOVAL;
093        if (Configuration.isAcceptInvalidEnums())
094          return null;
095        else
096          throw new FHIRException("Unknown ProvenanceEntityRole code '"+codeString+"'");
097        }
098        public String toCode() {
099          switch (this) {
100            case DERIVATION: return "derivation";
101            case REVISION: return "revision";
102            case QUOTATION: return "quotation";
103            case SOURCE: return "source";
104            case REMOVAL: return "removal";
105            case NULL: return null;
106            default: return "?";
107          }
108        }
109        public String getSystem() {
110          switch (this) {
111            case DERIVATION: return "http://hl7.org/fhir/provenance-entity-role";
112            case REVISION: return "http://hl7.org/fhir/provenance-entity-role";
113            case QUOTATION: return "http://hl7.org/fhir/provenance-entity-role";
114            case SOURCE: return "http://hl7.org/fhir/provenance-entity-role";
115            case REMOVAL: return "http://hl7.org/fhir/provenance-entity-role";
116            case NULL: return null;
117            default: return "?";
118          }
119        }
120        public String getDefinition() {
121          switch (this) {
122            case DERIVATION: return "A transformation of an entity into another, an update of an entity resulting in a new one, or the construction of a new entity based on a preexisting entity.";
123            case REVISION: return "A derivation for which the resulting entity is a revised version of some original.";
124            case QUOTATION: return "The repeat of (some or all of) an entity, such as text or image, by someone who may or may not be its original author.";
125            case SOURCE: return "A primary source for a topic refers to something produced by some agent with direct experience and knowledge about the topic, at the time of the topic's study, without benefit from hindsight.";
126            case REMOVAL: return "A derivation for which the entity is removed from accessibility usually through the use of the Delete operation.";
127            case NULL: return null;
128            default: return "?";
129          }
130        }
131        public String getDisplay() {
132          switch (this) {
133            case DERIVATION: return "Derivation";
134            case REVISION: return "Revision";
135            case QUOTATION: return "Quotation";
136            case SOURCE: return "Source";
137            case REMOVAL: return "Removal";
138            case NULL: return null;
139            default: return "?";
140          }
141        }
142    }
143
144  public static class ProvenanceEntityRoleEnumFactory implements EnumFactory<ProvenanceEntityRole> {
145    public ProvenanceEntityRole fromCode(String codeString) throws IllegalArgumentException {
146      if (codeString == null || "".equals(codeString))
147            if (codeString == null || "".equals(codeString))
148                return null;
149        if ("derivation".equals(codeString))
150          return ProvenanceEntityRole.DERIVATION;
151        if ("revision".equals(codeString))
152          return ProvenanceEntityRole.REVISION;
153        if ("quotation".equals(codeString))
154          return ProvenanceEntityRole.QUOTATION;
155        if ("source".equals(codeString))
156          return ProvenanceEntityRole.SOURCE;
157        if ("removal".equals(codeString))
158          return ProvenanceEntityRole.REMOVAL;
159        throw new IllegalArgumentException("Unknown ProvenanceEntityRole code '"+codeString+"'");
160        }
161        public Enumeration<ProvenanceEntityRole> fromType(PrimitiveType<?> code) throws FHIRException {
162          if (code == null)
163            return null;
164          if (code.isEmpty())
165            return new Enumeration<ProvenanceEntityRole>(this);
166          String codeString = code.asStringValue();
167          if (codeString == null || "".equals(codeString))
168            return null;
169        if ("derivation".equals(codeString))
170          return new Enumeration<ProvenanceEntityRole>(this, ProvenanceEntityRole.DERIVATION);
171        if ("revision".equals(codeString))
172          return new Enumeration<ProvenanceEntityRole>(this, ProvenanceEntityRole.REVISION);
173        if ("quotation".equals(codeString))
174          return new Enumeration<ProvenanceEntityRole>(this, ProvenanceEntityRole.QUOTATION);
175        if ("source".equals(codeString))
176          return new Enumeration<ProvenanceEntityRole>(this, ProvenanceEntityRole.SOURCE);
177        if ("removal".equals(codeString))
178          return new Enumeration<ProvenanceEntityRole>(this, ProvenanceEntityRole.REMOVAL);
179        throw new FHIRException("Unknown ProvenanceEntityRole code '"+codeString+"'");
180        }
181    public String toCode(ProvenanceEntityRole code) {
182      if (code == ProvenanceEntityRole.DERIVATION)
183        return "derivation";
184      if (code == ProvenanceEntityRole.REVISION)
185        return "revision";
186      if (code == ProvenanceEntityRole.QUOTATION)
187        return "quotation";
188      if (code == ProvenanceEntityRole.SOURCE)
189        return "source";
190      if (code == ProvenanceEntityRole.REMOVAL)
191        return "removal";
192      return "?";
193      }
194    public String toSystem(ProvenanceEntityRole code) {
195      return code.getSystem();
196      }
197    }
198
199    @Block()
200    public static class ProvenanceAgentComponent extends BackboneElement implements IBaseBackboneElement {
201        /**
202         * The function of the agent with respect to the activity. The security role enabling the agent with respect to the activity.
203         */
204        @Child(name = "role", type = {CodeableConcept.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
205        @Description(shortDefinition="What the agents role was", formalDefinition="The function of the agent with respect to the activity. The security role enabling the agent with respect to the activity." )
206        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/security-role-type")
207        protected List<CodeableConcept> role;
208
209        /**
210         * The individual, device or organization that participated in the event.
211         */
212        @Child(name = "who", type = {UriType.class, Practitioner.class, RelatedPerson.class, Patient.class, Device.class, Organization.class}, order=2, min=1, max=1, modifier=false, summary=true)
213        @Description(shortDefinition="Who participated", formalDefinition="The individual, device or organization that participated in the event." )
214        protected Type who;
215
216        /**
217         * The individual, device, or organization for whom the change was made.
218         */
219        @Child(name = "onBehalfOf", type = {UriType.class, Practitioner.class, RelatedPerson.class, Patient.class, Device.class, Organization.class}, order=3, min=0, max=1, modifier=false, summary=false)
220        @Description(shortDefinition="Who the agent is representing", formalDefinition="The individual, device, or organization for whom the change was made." )
221        protected Type onBehalfOf;
222
223        /**
224         * The type of relationship between agents.
225         */
226        @Child(name = "relatedAgentType", type = {CodeableConcept.class}, order=4, min=0, max=1, modifier=false, summary=false)
227        @Description(shortDefinition="Type of relationship between agents", formalDefinition="The type of relationship between agents." )
228        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/v3-RoleLinkType")
229        protected CodeableConcept relatedAgentType;
230
231        private static final long serialVersionUID = -1431948744L;
232
233    /**
234     * Constructor
235     */
236      public ProvenanceAgentComponent() {
237        super();
238      }
239
240    /**
241     * Constructor
242     */
243      public ProvenanceAgentComponent(Type who) {
244        super();
245        this.who = who;
246      }
247
248        /**
249         * @return {@link #role} (The function of the agent with respect to the activity. The security role enabling the agent with respect to the activity.)
250         */
251        public List<CodeableConcept> getRole() { 
252          if (this.role == null)
253            this.role = new ArrayList<CodeableConcept>();
254          return this.role;
255        }
256
257        /**
258         * @return Returns a reference to <code>this</code> for easy method chaining
259         */
260        public ProvenanceAgentComponent setRole(List<CodeableConcept> theRole) { 
261          this.role = theRole;
262          return this;
263        }
264
265        public boolean hasRole() { 
266          if (this.role == null)
267            return false;
268          for (CodeableConcept item : this.role)
269            if (!item.isEmpty())
270              return true;
271          return false;
272        }
273
274        public CodeableConcept addRole() { //3
275          CodeableConcept t = new CodeableConcept();
276          if (this.role == null)
277            this.role = new ArrayList<CodeableConcept>();
278          this.role.add(t);
279          return t;
280        }
281
282        public ProvenanceAgentComponent addRole(CodeableConcept t) { //3
283          if (t == null)
284            return this;
285          if (this.role == null)
286            this.role = new ArrayList<CodeableConcept>();
287          this.role.add(t);
288          return this;
289        }
290
291        /**
292         * @return The first repetition of repeating field {@link #role}, creating it if it does not already exist
293         */
294        public CodeableConcept getRoleFirstRep() { 
295          if (getRole().isEmpty()) {
296            addRole();
297          }
298          return getRole().get(0);
299        }
300
301        /**
302         * @return {@link #who} (The individual, device or organization that participated in the event.)
303         */
304        public Type getWho() { 
305          return this.who;
306        }
307
308        /**
309         * @return {@link #who} (The individual, device or organization that participated in the event.)
310         */
311        public UriType getWhoUriType() throws FHIRException { 
312          if (this.who == null)
313            return null;
314          if (!(this.who instanceof UriType))
315            throw new FHIRException("Type mismatch: the type UriType was expected, but "+this.who.getClass().getName()+" was encountered");
316          return (UriType) this.who;
317        }
318
319        public boolean hasWhoUriType() { 
320          return this != null && this.who instanceof UriType;
321        }
322
323        /**
324         * @return {@link #who} (The individual, device or organization that participated in the event.)
325         */
326        public Reference getWhoReference() throws FHIRException { 
327          if (this.who == null)
328            return null;
329          if (!(this.who instanceof Reference))
330            throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.who.getClass().getName()+" was encountered");
331          return (Reference) this.who;
332        }
333
334        public boolean hasWhoReference() { 
335          return this != null && this.who instanceof Reference;
336        }
337
338        public boolean hasWho() { 
339          return this.who != null && !this.who.isEmpty();
340        }
341
342        /**
343         * @param value {@link #who} (The individual, device or organization that participated in the event.)
344         */
345        public ProvenanceAgentComponent setWho(Type value) throws FHIRFormatError { 
346          if (value != null && !(value instanceof UriType || value instanceof Reference))
347            throw new FHIRFormatError("Not the right type for Provenance.agent.who[x]: "+value.fhirType());
348          this.who = value;
349          return this;
350        }
351
352        /**
353         * @return {@link #onBehalfOf} (The individual, device, or organization for whom the change was made.)
354         */
355        public Type getOnBehalfOf() { 
356          return this.onBehalfOf;
357        }
358
359        /**
360         * @return {@link #onBehalfOf} (The individual, device, or organization for whom the change was made.)
361         */
362        public UriType getOnBehalfOfUriType() throws FHIRException { 
363          if (this.onBehalfOf == null)
364            return null;
365          if (!(this.onBehalfOf instanceof UriType))
366            throw new FHIRException("Type mismatch: the type UriType was expected, but "+this.onBehalfOf.getClass().getName()+" was encountered");
367          return (UriType) this.onBehalfOf;
368        }
369
370        public boolean hasOnBehalfOfUriType() { 
371          return this != null && this.onBehalfOf instanceof UriType;
372        }
373
374        /**
375         * @return {@link #onBehalfOf} (The individual, device, or organization for whom the change was made.)
376         */
377        public Reference getOnBehalfOfReference() throws FHIRException { 
378          if (this.onBehalfOf == null)
379            return null;
380          if (!(this.onBehalfOf instanceof Reference))
381            throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.onBehalfOf.getClass().getName()+" was encountered");
382          return (Reference) this.onBehalfOf;
383        }
384
385        public boolean hasOnBehalfOfReference() { 
386          return this != null && this.onBehalfOf instanceof Reference;
387        }
388
389        public boolean hasOnBehalfOf() { 
390          return this.onBehalfOf != null && !this.onBehalfOf.isEmpty();
391        }
392
393        /**
394         * @param value {@link #onBehalfOf} (The individual, device, or organization for whom the change was made.)
395         */
396        public ProvenanceAgentComponent setOnBehalfOf(Type value) throws FHIRFormatError { 
397          if (value != null && !(value instanceof UriType || value instanceof Reference))
398            throw new FHIRFormatError("Not the right type for Provenance.agent.onBehalfOf[x]: "+value.fhirType());
399          this.onBehalfOf = value;
400          return this;
401        }
402
403        /**
404         * @return {@link #relatedAgentType} (The type of relationship between agents.)
405         */
406        public CodeableConcept getRelatedAgentType() { 
407          if (this.relatedAgentType == null)
408            if (Configuration.errorOnAutoCreate())
409              throw new Error("Attempt to auto-create ProvenanceAgentComponent.relatedAgentType");
410            else if (Configuration.doAutoCreate())
411              this.relatedAgentType = new CodeableConcept(); // cc
412          return this.relatedAgentType;
413        }
414
415        public boolean hasRelatedAgentType() { 
416          return this.relatedAgentType != null && !this.relatedAgentType.isEmpty();
417        }
418
419        /**
420         * @param value {@link #relatedAgentType} (The type of relationship between agents.)
421         */
422        public ProvenanceAgentComponent setRelatedAgentType(CodeableConcept value)  { 
423          this.relatedAgentType = value;
424          return this;
425        }
426
427        protected void listChildren(List<Property> children) {
428          super.listChildren(children);
429          children.add(new Property("role", "CodeableConcept", "The function of the agent with respect to the activity. The security role enabling the agent with respect to the activity.", 0, java.lang.Integer.MAX_VALUE, role));
430          children.add(new Property("who[x]", "uri|Reference(Practitioner|RelatedPerson|Patient|Device|Organization)", "The individual, device or organization that participated in the event.", 0, 1, who));
431          children.add(new Property("onBehalfOf[x]", "uri|Reference(Practitioner|RelatedPerson|Patient|Device|Organization)", "The individual, device, or organization for whom the change was made.", 0, 1, onBehalfOf));
432          children.add(new Property("relatedAgentType", "CodeableConcept", "The type of relationship between agents.", 0, 1, relatedAgentType));
433        }
434
435        @Override
436        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
437          switch (_hash) {
438          case 3506294: /*role*/  return new Property("role", "CodeableConcept", "The function of the agent with respect to the activity. The security role enabling the agent with respect to the activity.", 0, java.lang.Integer.MAX_VALUE, role);
439          case -788654078: /*who[x]*/  return new Property("who[x]", "uri|Reference(Practitioner|RelatedPerson|Patient|Device|Organization)", "The individual, device or organization that participated in the event.", 0, 1, who);
440          case 117694: /*who*/  return new Property("who[x]", "uri|Reference(Practitioner|RelatedPerson|Patient|Device|Organization)", "The individual, device or organization that participated in the event.", 0, 1, who);
441          case -788660018: /*whoUri*/  return new Property("who[x]", "uri|Reference(Practitioner|RelatedPerson|Patient|Device|Organization)", "The individual, device or organization that participated in the event.", 0, 1, who);
442          case 1017243949: /*whoReference*/  return new Property("who[x]", "uri|Reference(Practitioner|RelatedPerson|Patient|Device|Organization)", "The individual, device or organization that participated in the event.", 0, 1, who);
443          case 418120340: /*onBehalfOf[x]*/  return new Property("onBehalfOf[x]", "uri|Reference(Practitioner|RelatedPerson|Patient|Device|Organization)", "The individual, device, or organization for whom the change was made.", 0, 1, onBehalfOf);
444          case -14402964: /*onBehalfOf*/  return new Property("onBehalfOf[x]", "uri|Reference(Practitioner|RelatedPerson|Patient|Device|Organization)", "The individual, device, or organization for whom the change was made.", 0, 1, onBehalfOf);
445          case 418114400: /*onBehalfOfUri*/  return new Property("onBehalfOf[x]", "uri|Reference(Practitioner|RelatedPerson|Patient|Device|Organization)", "The individual, device, or organization for whom the change was made.", 0, 1, onBehalfOf);
446          case -1136255425: /*onBehalfOfReference*/  return new Property("onBehalfOf[x]", "uri|Reference(Practitioner|RelatedPerson|Patient|Device|Organization)", "The individual, device, or organization for whom the change was made.", 0, 1, onBehalfOf);
447          case 1228161012: /*relatedAgentType*/  return new Property("relatedAgentType", "CodeableConcept", "The type of relationship between agents.", 0, 1, relatedAgentType);
448          default: return super.getNamedProperty(_hash, _name, _checkValid);
449          }
450
451        }
452
453      @Override
454      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
455        switch (hash) {
456        case 3506294: /*role*/ return this.role == null ? new Base[0] : this.role.toArray(new Base[this.role.size()]); // CodeableConcept
457        case 117694: /*who*/ return this.who == null ? new Base[0] : new Base[] {this.who}; // Type
458        case -14402964: /*onBehalfOf*/ return this.onBehalfOf == null ? new Base[0] : new Base[] {this.onBehalfOf}; // Type
459        case 1228161012: /*relatedAgentType*/ return this.relatedAgentType == null ? new Base[0] : new Base[] {this.relatedAgentType}; // CodeableConcept
460        default: return super.getProperty(hash, name, checkValid);
461        }
462
463      }
464
465      @Override
466      public Base setProperty(int hash, String name, Base value) throws FHIRException {
467        switch (hash) {
468        case 3506294: // role
469          this.getRole().add(castToCodeableConcept(value)); // CodeableConcept
470          return value;
471        case 117694: // who
472          this.who = castToType(value); // Type
473          return value;
474        case -14402964: // onBehalfOf
475          this.onBehalfOf = castToType(value); // Type
476          return value;
477        case 1228161012: // relatedAgentType
478          this.relatedAgentType = castToCodeableConcept(value); // CodeableConcept
479          return value;
480        default: return super.setProperty(hash, name, value);
481        }
482
483      }
484
485      @Override
486      public Base setProperty(String name, Base value) throws FHIRException {
487        if (name.equals("role")) {
488          this.getRole().add(castToCodeableConcept(value));
489        } else if (name.equals("who[x]")) {
490          this.who = castToType(value); // Type
491        } else if (name.equals("onBehalfOf[x]")) {
492          this.onBehalfOf = castToType(value); // Type
493        } else if (name.equals("relatedAgentType")) {
494          this.relatedAgentType = castToCodeableConcept(value); // CodeableConcept
495        } else
496          return super.setProperty(name, value);
497        return value;
498      }
499
500      @Override
501      public Base makeProperty(int hash, String name) throws FHIRException {
502        switch (hash) {
503        case 3506294:  return addRole(); 
504        case -788654078:  return getWho(); 
505        case 117694:  return getWho(); 
506        case 418120340:  return getOnBehalfOf(); 
507        case -14402964:  return getOnBehalfOf(); 
508        case 1228161012:  return getRelatedAgentType(); 
509        default: return super.makeProperty(hash, name);
510        }
511
512      }
513
514      @Override
515      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
516        switch (hash) {
517        case 3506294: /*role*/ return new String[] {"CodeableConcept"};
518        case 117694: /*who*/ return new String[] {"uri", "Reference"};
519        case -14402964: /*onBehalfOf*/ return new String[] {"uri", "Reference"};
520        case 1228161012: /*relatedAgentType*/ return new String[] {"CodeableConcept"};
521        default: return super.getTypesForProperty(hash, name);
522        }
523
524      }
525
526      @Override
527      public Base addChild(String name) throws FHIRException {
528        if (name.equals("role")) {
529          return addRole();
530        }
531        else if (name.equals("whoUri")) {
532          this.who = new UriType();
533          return this.who;
534        }
535        else if (name.equals("whoReference")) {
536          this.who = new Reference();
537          return this.who;
538        }
539        else if (name.equals("onBehalfOfUri")) {
540          this.onBehalfOf = new UriType();
541          return this.onBehalfOf;
542        }
543        else if (name.equals("onBehalfOfReference")) {
544          this.onBehalfOf = new Reference();
545          return this.onBehalfOf;
546        }
547        else if (name.equals("relatedAgentType")) {
548          this.relatedAgentType = new CodeableConcept();
549          return this.relatedAgentType;
550        }
551        else
552          return super.addChild(name);
553      }
554
555      public ProvenanceAgentComponent copy() {
556        ProvenanceAgentComponent dst = new ProvenanceAgentComponent();
557        copyValues(dst);
558        if (role != null) {
559          dst.role = new ArrayList<CodeableConcept>();
560          for (CodeableConcept i : role)
561            dst.role.add(i.copy());
562        };
563        dst.who = who == null ? null : who.copy();
564        dst.onBehalfOf = onBehalfOf == null ? null : onBehalfOf.copy();
565        dst.relatedAgentType = relatedAgentType == null ? null : relatedAgentType.copy();
566        return dst;
567      }
568
569      @Override
570      public boolean equalsDeep(Base other_) {
571        if (!super.equalsDeep(other_))
572          return false;
573        if (!(other_ instanceof ProvenanceAgentComponent))
574          return false;
575        ProvenanceAgentComponent o = (ProvenanceAgentComponent) other_;
576        return compareDeep(role, o.role, true) && compareDeep(who, o.who, true) && compareDeep(onBehalfOf, o.onBehalfOf, true)
577           && compareDeep(relatedAgentType, o.relatedAgentType, true);
578      }
579
580      @Override
581      public boolean equalsShallow(Base other_) {
582        if (!super.equalsShallow(other_))
583          return false;
584        if (!(other_ instanceof ProvenanceAgentComponent))
585          return false;
586        ProvenanceAgentComponent o = (ProvenanceAgentComponent) other_;
587        return true;
588      }
589
590      public boolean isEmpty() {
591        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(role, who, onBehalfOf, relatedAgentType
592          );
593      }
594
595  public String fhirType() {
596    return "Provenance.agent";
597
598  }
599
600  }
601
602    @Block()
603    public static class ProvenanceEntityComponent extends BackboneElement implements IBaseBackboneElement {
604        /**
605         * How the entity was used during the activity.
606         */
607        @Child(name = "role", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=true)
608        @Description(shortDefinition="derivation | revision | quotation | source | removal", formalDefinition="How the entity was used during the activity." )
609        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/provenance-entity-role")
610        protected Enumeration<ProvenanceEntityRole> role;
611
612        /**
613         * Identity of the  Entity used. May be a logical or physical uri and maybe absolute or relative.
614         */
615        @Child(name = "what", type = {UriType.class, Reference.class, Identifier.class}, order=2, min=1, max=1, modifier=false, summary=true)
616        @Description(shortDefinition="Identity of entity", formalDefinition="Identity of the  Entity used. May be a logical or physical uri and maybe absolute or relative." )
617        protected Type what;
618
619        /**
620         * The entity is attributed to an agent to express the agent's responsibility for that entity, possibly along with other agents. This description can be understood as shorthand for saying that the agent was responsible for the activity which generated the entity.
621         */
622        @Child(name = "agent", type = {ProvenanceAgentComponent.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
623        @Description(shortDefinition="Entity is attributed to this agent", formalDefinition="The entity is attributed to an agent to express the agent's responsibility for that entity, possibly along with other agents. This description can be understood as shorthand for saying that the agent was responsible for the activity which generated the entity." )
624        protected List<ProvenanceAgentComponent> agent;
625
626        private static final long serialVersionUID = 1436676923L;
627
628    /**
629     * Constructor
630     */
631      public ProvenanceEntityComponent() {
632        super();
633      }
634
635    /**
636     * Constructor
637     */
638      public ProvenanceEntityComponent(Enumeration<ProvenanceEntityRole> role, Type what) {
639        super();
640        this.role = role;
641        this.what = what;
642      }
643
644        /**
645         * @return {@link #role} (How the entity was used during the activity.). This is the underlying object with id, value and extensions. The accessor "getRole" gives direct access to the value
646         */
647        public Enumeration<ProvenanceEntityRole> getRoleElement() { 
648          if (this.role == null)
649            if (Configuration.errorOnAutoCreate())
650              throw new Error("Attempt to auto-create ProvenanceEntityComponent.role");
651            else if (Configuration.doAutoCreate())
652              this.role = new Enumeration<ProvenanceEntityRole>(new ProvenanceEntityRoleEnumFactory()); // bb
653          return this.role;
654        }
655
656        public boolean hasRoleElement() { 
657          return this.role != null && !this.role.isEmpty();
658        }
659
660        public boolean hasRole() { 
661          return this.role != null && !this.role.isEmpty();
662        }
663
664        /**
665         * @param value {@link #role} (How the entity was used during the activity.). This is the underlying object with id, value and extensions. The accessor "getRole" gives direct access to the value
666         */
667        public ProvenanceEntityComponent setRoleElement(Enumeration<ProvenanceEntityRole> value) { 
668          this.role = value;
669          return this;
670        }
671
672        /**
673         * @return How the entity was used during the activity.
674         */
675        public ProvenanceEntityRole getRole() { 
676          return this.role == null ? null : this.role.getValue();
677        }
678
679        /**
680         * @param value How the entity was used during the activity.
681         */
682        public ProvenanceEntityComponent setRole(ProvenanceEntityRole value) { 
683            if (this.role == null)
684              this.role = new Enumeration<ProvenanceEntityRole>(new ProvenanceEntityRoleEnumFactory());
685            this.role.setValue(value);
686          return this;
687        }
688
689        /**
690         * @return {@link #what} (Identity of the  Entity used. May be a logical or physical uri and maybe absolute or relative.)
691         */
692        public Type getWhat() { 
693          return this.what;
694        }
695
696        /**
697         * @return {@link #what} (Identity of the  Entity used. May be a logical or physical uri and maybe absolute or relative.)
698         */
699        public UriType getWhatUriType() throws FHIRException { 
700          if (this.what == null)
701            return null;
702          if (!(this.what instanceof UriType))
703            throw new FHIRException("Type mismatch: the type UriType was expected, but "+this.what.getClass().getName()+" was encountered");
704          return (UriType) this.what;
705        }
706
707        public boolean hasWhatUriType() { 
708          return this != null && this.what instanceof UriType;
709        }
710
711        /**
712         * @return {@link #what} (Identity of the  Entity used. May be a logical or physical uri and maybe absolute or relative.)
713         */
714        public Reference getWhatReference() throws FHIRException { 
715          if (this.what == null)
716            return null;
717          if (!(this.what instanceof Reference))
718            throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.what.getClass().getName()+" was encountered");
719          return (Reference) this.what;
720        }
721
722        public boolean hasWhatReference() { 
723          return this != null && this.what instanceof Reference;
724        }
725
726        /**
727         * @return {@link #what} (Identity of the  Entity used. May be a logical or physical uri and maybe absolute or relative.)
728         */
729        public Identifier getWhatIdentifier() throws FHIRException { 
730          if (this.what == null)
731            return null;
732          if (!(this.what instanceof Identifier))
733            throw new FHIRException("Type mismatch: the type Identifier was expected, but "+this.what.getClass().getName()+" was encountered");
734          return (Identifier) this.what;
735        }
736
737        public boolean hasWhatIdentifier() { 
738          return this != null && this.what instanceof Identifier;
739        }
740
741        public boolean hasWhat() { 
742          return this.what != null && !this.what.isEmpty();
743        }
744
745        /**
746         * @param value {@link #what} (Identity of the  Entity used. May be a logical or physical uri and maybe absolute or relative.)
747         */
748        public ProvenanceEntityComponent setWhat(Type value) throws FHIRFormatError { 
749          if (value != null && !(value instanceof UriType || value instanceof Reference || value instanceof Identifier))
750            throw new FHIRFormatError("Not the right type for Provenance.entity.what[x]: "+value.fhirType());
751          this.what = value;
752          return this;
753        }
754
755        /**
756         * @return {@link #agent} (The entity is attributed to an agent to express the agent's responsibility for that entity, possibly along with other agents. This description can be understood as shorthand for saying that the agent was responsible for the activity which generated the entity.)
757         */
758        public List<ProvenanceAgentComponent> getAgent() { 
759          if (this.agent == null)
760            this.agent = new ArrayList<ProvenanceAgentComponent>();
761          return this.agent;
762        }
763
764        /**
765         * @return Returns a reference to <code>this</code> for easy method chaining
766         */
767        public ProvenanceEntityComponent setAgent(List<ProvenanceAgentComponent> theAgent) { 
768          this.agent = theAgent;
769          return this;
770        }
771
772        public boolean hasAgent() { 
773          if (this.agent == null)
774            return false;
775          for (ProvenanceAgentComponent item : this.agent)
776            if (!item.isEmpty())
777              return true;
778          return false;
779        }
780
781        public ProvenanceAgentComponent addAgent() { //3
782          ProvenanceAgentComponent t = new ProvenanceAgentComponent();
783          if (this.agent == null)
784            this.agent = new ArrayList<ProvenanceAgentComponent>();
785          this.agent.add(t);
786          return t;
787        }
788
789        public ProvenanceEntityComponent addAgent(ProvenanceAgentComponent t) { //3
790          if (t == null)
791            return this;
792          if (this.agent == null)
793            this.agent = new ArrayList<ProvenanceAgentComponent>();
794          this.agent.add(t);
795          return this;
796        }
797
798        /**
799         * @return The first repetition of repeating field {@link #agent}, creating it if it does not already exist
800         */
801        public ProvenanceAgentComponent getAgentFirstRep() { 
802          if (getAgent().isEmpty()) {
803            addAgent();
804          }
805          return getAgent().get(0);
806        }
807
808        protected void listChildren(List<Property> children) {
809          super.listChildren(children);
810          children.add(new Property("role", "code", "How the entity was used during the activity.", 0, 1, role));
811          children.add(new Property("what[x]", "uri|Reference(Any)|Identifier", "Identity of the  Entity used. May be a logical or physical uri and maybe absolute or relative.", 0, 1, what));
812          children.add(new Property("agent", "@Provenance.agent", "The entity is attributed to an agent to express the agent's responsibility for that entity, possibly along with other agents. This description can be understood as shorthand for saying that the agent was responsible for the activity which generated the entity.", 0, java.lang.Integer.MAX_VALUE, agent));
813        }
814
815        @Override
816        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
817          switch (_hash) {
818          case 3506294: /*role*/  return new Property("role", "code", "How the entity was used during the activity.", 0, 1, role);
819          case 1309315900: /*what[x]*/  return new Property("what[x]", "uri|Reference(Any)|Identifier", "Identity of the  Entity used. May be a logical or physical uri and maybe absolute or relative.", 0, 1, what);
820          case 3648196: /*what*/  return new Property("what[x]", "uri|Reference(Any)|Identifier", "Identity of the  Entity used. May be a logical or physical uri and maybe absolute or relative.", 0, 1, what);
821          case 1309309960: /*whatUri*/  return new Property("what[x]", "uri|Reference(Any)|Identifier", "Identity of the  Entity used. May be a logical or physical uri and maybe absolute or relative.", 0, 1, what);
822          case 1531941095: /*whatReference*/  return new Property("what[x]", "uri|Reference(Any)|Identifier", "Identity of the  Entity used. May be a logical or physical uri and maybe absolute or relative.", 0, 1, what);
823          case 1537117837: /*whatIdentifier*/  return new Property("what[x]", "uri|Reference(Any)|Identifier", "Identity of the  Entity used. May be a logical or physical uri and maybe absolute or relative.", 0, 1, what);
824          case 92750597: /*agent*/  return new Property("agent", "@Provenance.agent", "The entity is attributed to an agent to express the agent's responsibility for that entity, possibly along with other agents. This description can be understood as shorthand for saying that the agent was responsible for the activity which generated the entity.", 0, java.lang.Integer.MAX_VALUE, agent);
825          default: return super.getNamedProperty(_hash, _name, _checkValid);
826          }
827
828        }
829
830      @Override
831      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
832        switch (hash) {
833        case 3506294: /*role*/ return this.role == null ? new Base[0] : new Base[] {this.role}; // Enumeration<ProvenanceEntityRole>
834        case 3648196: /*what*/ return this.what == null ? new Base[0] : new Base[] {this.what}; // Type
835        case 92750597: /*agent*/ return this.agent == null ? new Base[0] : this.agent.toArray(new Base[this.agent.size()]); // ProvenanceAgentComponent
836        default: return super.getProperty(hash, name, checkValid);
837        }
838
839      }
840
841      @Override
842      public Base setProperty(int hash, String name, Base value) throws FHIRException {
843        switch (hash) {
844        case 3506294: // role
845          value = new ProvenanceEntityRoleEnumFactory().fromType(castToCode(value));
846          this.role = (Enumeration) value; // Enumeration<ProvenanceEntityRole>
847          return value;
848        case 3648196: // what
849          this.what = castToType(value); // Type
850          return value;
851        case 92750597: // agent
852          this.getAgent().add((ProvenanceAgentComponent) value); // ProvenanceAgentComponent
853          return value;
854        default: return super.setProperty(hash, name, value);
855        }
856
857      }
858
859      @Override
860      public Base setProperty(String name, Base value) throws FHIRException {
861        if (name.equals("role")) {
862          value = new ProvenanceEntityRoleEnumFactory().fromType(castToCode(value));
863          this.role = (Enumeration) value; // Enumeration<ProvenanceEntityRole>
864        } else if (name.equals("what[x]")) {
865          this.what = castToType(value); // Type
866        } else if (name.equals("agent")) {
867          this.getAgent().add((ProvenanceAgentComponent) value);
868        } else
869          return super.setProperty(name, value);
870        return value;
871      }
872
873      @Override
874      public Base makeProperty(int hash, String name) throws FHIRException {
875        switch (hash) {
876        case 3506294:  return getRoleElement();
877        case 1309315900:  return getWhat(); 
878        case 3648196:  return getWhat(); 
879        case 92750597:  return addAgent(); 
880        default: return super.makeProperty(hash, name);
881        }
882
883      }
884
885      @Override
886      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
887        switch (hash) {
888        case 3506294: /*role*/ return new String[] {"code"};
889        case 3648196: /*what*/ return new String[] {"uri", "Reference", "Identifier"};
890        case 92750597: /*agent*/ return new String[] {"@Provenance.agent"};
891        default: return super.getTypesForProperty(hash, name);
892        }
893
894      }
895
896      @Override
897      public Base addChild(String name) throws FHIRException {
898        if (name.equals("role")) {
899          throw new FHIRException("Cannot call addChild on a singleton property Provenance.role");
900        }
901        else if (name.equals("whatUri")) {
902          this.what = new UriType();
903          return this.what;
904        }
905        else if (name.equals("whatReference")) {
906          this.what = new Reference();
907          return this.what;
908        }
909        else if (name.equals("whatIdentifier")) {
910          this.what = new Identifier();
911          return this.what;
912        }
913        else if (name.equals("agent")) {
914          return addAgent();
915        }
916        else
917          return super.addChild(name);
918      }
919
920      public ProvenanceEntityComponent copy() {
921        ProvenanceEntityComponent dst = new ProvenanceEntityComponent();
922        copyValues(dst);
923        dst.role = role == null ? null : role.copy();
924        dst.what = what == null ? null : what.copy();
925        if (agent != null) {
926          dst.agent = new ArrayList<ProvenanceAgentComponent>();
927          for (ProvenanceAgentComponent i : agent)
928            dst.agent.add(i.copy());
929        };
930        return dst;
931      }
932
933      @Override
934      public boolean equalsDeep(Base other_) {
935        if (!super.equalsDeep(other_))
936          return false;
937        if (!(other_ instanceof ProvenanceEntityComponent))
938          return false;
939        ProvenanceEntityComponent o = (ProvenanceEntityComponent) other_;
940        return compareDeep(role, o.role, true) && compareDeep(what, o.what, true) && compareDeep(agent, o.agent, true)
941          ;
942      }
943
944      @Override
945      public boolean equalsShallow(Base other_) {
946        if (!super.equalsShallow(other_))
947          return false;
948        if (!(other_ instanceof ProvenanceEntityComponent))
949          return false;
950        ProvenanceEntityComponent o = (ProvenanceEntityComponent) other_;
951        return compareValues(role, o.role, true);
952      }
953
954      public boolean isEmpty() {
955        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(role, what, agent);
956      }
957
958  public String fhirType() {
959    return "Provenance.entity";
960
961  }
962
963  }
964
965    /**
966     * The Reference(s) that were generated or updated by  the activity described in this resource. A provenance can point to more than one target if multiple resources were created/updated by the same activity.
967     */
968    @Child(name = "target", type = {Reference.class}, order=0, min=1, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
969    @Description(shortDefinition="Target Reference(s) (usually version specific)", formalDefinition="The Reference(s) that were generated or updated by  the activity described in this resource. A provenance can point to more than one target if multiple resources were created/updated by the same activity." )
970    protected List<Reference> target;
971    /**
972     * The actual objects that are the target of the reference (The Reference(s) that were generated or updated by  the activity described in this resource. A provenance can point to more than one target if multiple resources were created/updated by the same activity.)
973     */
974    protected List<Resource> targetTarget;
975
976
977    /**
978     * The period during which the activity occurred.
979     */
980    @Child(name = "period", type = {Period.class}, order=1, min=0, max=1, modifier=false, summary=false)
981    @Description(shortDefinition="When the activity occurred", formalDefinition="The period during which the activity occurred." )
982    protected Period period;
983
984    /**
985     * The instant of time at which the activity was recorded.
986     */
987    @Child(name = "recorded", type = {InstantType.class}, order=2, min=1, max=1, modifier=false, summary=true)
988    @Description(shortDefinition="When the activity was recorded / updated", formalDefinition="The instant of time at which the activity was recorded." )
989    protected InstantType recorded;
990
991    /**
992     * Policy or plan the activity was defined by. Typically, a single activity may have multiple applicable policy documents, such as patient consent, guarantor funding, etc.
993     */
994    @Child(name = "policy", type = {UriType.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
995    @Description(shortDefinition="Policy or plan the activity was defined by", formalDefinition="Policy or plan the activity was defined by. Typically, a single activity may have multiple applicable policy documents, such as patient consent, guarantor funding, etc." )
996    protected List<UriType> policy;
997
998    /**
999     * Where the activity occurred, if relevant.
1000     */
1001    @Child(name = "location", type = {Location.class}, order=4, min=0, max=1, modifier=false, summary=false)
1002    @Description(shortDefinition="Where the activity occurred, if relevant", formalDefinition="Where the activity occurred, if relevant." )
1003    protected Reference location;
1004
1005    /**
1006     * The actual object that is the target of the reference (Where the activity occurred, if relevant.)
1007     */
1008    protected Location locationTarget;
1009
1010    /**
1011     * The reason that the activity was taking place.
1012     */
1013    @Child(name = "reason", type = {Coding.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1014    @Description(shortDefinition="Reason the activity is occurring", formalDefinition="The reason that the activity was taking place." )
1015    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/v3-PurposeOfUse")
1016    protected List<Coding> reason;
1017
1018    /**
1019     * An activity is something that occurs over a period of time and acts upon or with entities; it may include consuming, processing, transforming, modifying, relocating, using, or generating entities.
1020     */
1021    @Child(name = "activity", type = {Coding.class}, order=6, min=0, max=1, modifier=false, summary=false)
1022    @Description(shortDefinition="Activity that occurred", formalDefinition="An activity is something that occurs over a period of time and acts upon or with entities; it may include consuming, processing, transforming, modifying, relocating, using, or generating entities." )
1023    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/provenance-activity-type")
1024    protected Coding activity;
1025
1026    /**
1027     * An actor taking a role in an activity  for which it can be assigned some degree of responsibility for the activity taking place.
1028     */
1029    @Child(name = "agent", type = {}, order=7, min=1, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1030    @Description(shortDefinition="Actor involved", formalDefinition="An actor taking a role in an activity  for which it can be assigned some degree of responsibility for the activity taking place." )
1031    protected List<ProvenanceAgentComponent> agent;
1032
1033    /**
1034     * An entity used in this activity.
1035     */
1036    @Child(name = "entity", type = {}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1037    @Description(shortDefinition="An entity used in this activity", formalDefinition="An entity used in this activity." )
1038    protected List<ProvenanceEntityComponent> entity;
1039
1040    /**
1041     * A digital signature on the target Reference(s). The signer should match a Provenance.agent. The purpose of the signature is indicated.
1042     */
1043    @Child(name = "signature", type = {Signature.class}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1044    @Description(shortDefinition="Signature on target", formalDefinition="A digital signature on the target Reference(s). The signer should match a Provenance.agent. The purpose of the signature is indicated." )
1045    protected List<Signature> signature;
1046
1047    private static final long serialVersionUID = -1668640371L;
1048
1049  /**
1050   * Constructor
1051   */
1052    public Provenance() {
1053      super();
1054    }
1055
1056  /**
1057   * Constructor
1058   */
1059    public Provenance(InstantType recorded) {
1060      super();
1061      this.recorded = recorded;
1062    }
1063
1064    /**
1065     * @return {@link #target} (The Reference(s) that were generated or updated by  the activity described in this resource. A provenance can point to more than one target if multiple resources were created/updated by the same activity.)
1066     */
1067    public List<Reference> getTarget() { 
1068      if (this.target == null)
1069        this.target = new ArrayList<Reference>();
1070      return this.target;
1071    }
1072
1073    /**
1074     * @return Returns a reference to <code>this</code> for easy method chaining
1075     */
1076    public Provenance setTarget(List<Reference> theTarget) { 
1077      this.target = theTarget;
1078      return this;
1079    }
1080
1081    public boolean hasTarget() { 
1082      if (this.target == null)
1083        return false;
1084      for (Reference item : this.target)
1085        if (!item.isEmpty())
1086          return true;
1087      return false;
1088    }
1089
1090    public Reference addTarget() { //3
1091      Reference t = new Reference();
1092      if (this.target == null)
1093        this.target = new ArrayList<Reference>();
1094      this.target.add(t);
1095      return t;
1096    }
1097
1098    public Provenance addTarget(Reference t) { //3
1099      if (t == null)
1100        return this;
1101      if (this.target == null)
1102        this.target = new ArrayList<Reference>();
1103      this.target.add(t);
1104      return this;
1105    }
1106
1107    /**
1108     * @return The first repetition of repeating field {@link #target}, creating it if it does not already exist
1109     */
1110    public Reference getTargetFirstRep() { 
1111      if (getTarget().isEmpty()) {
1112        addTarget();
1113      }
1114      return getTarget().get(0);
1115    }
1116
1117    /**
1118     * @deprecated Use Reference#setResource(IBaseResource) instead
1119     */
1120    @Deprecated
1121    public List<Resource> getTargetTarget() { 
1122      if (this.targetTarget == null)
1123        this.targetTarget = new ArrayList<Resource>();
1124      return this.targetTarget;
1125    }
1126
1127    /**
1128     * @return {@link #period} (The period during which the activity occurred.)
1129     */
1130    public Period getPeriod() { 
1131      if (this.period == null)
1132        if (Configuration.errorOnAutoCreate())
1133          throw new Error("Attempt to auto-create Provenance.period");
1134        else if (Configuration.doAutoCreate())
1135          this.period = new Period(); // cc
1136      return this.period;
1137    }
1138
1139    public boolean hasPeriod() { 
1140      return this.period != null && !this.period.isEmpty();
1141    }
1142
1143    /**
1144     * @param value {@link #period} (The period during which the activity occurred.)
1145     */
1146    public Provenance setPeriod(Period value)  { 
1147      this.period = value;
1148      return this;
1149    }
1150
1151    /**
1152     * @return {@link #recorded} (The instant of time at which the activity was recorded.). This is the underlying object with id, value and extensions. The accessor "getRecorded" gives direct access to the value
1153     */
1154    public InstantType getRecordedElement() { 
1155      if (this.recorded == null)
1156        if (Configuration.errorOnAutoCreate())
1157          throw new Error("Attempt to auto-create Provenance.recorded");
1158        else if (Configuration.doAutoCreate())
1159          this.recorded = new InstantType(); // bb
1160      return this.recorded;
1161    }
1162
1163    public boolean hasRecordedElement() { 
1164      return this.recorded != null && !this.recorded.isEmpty();
1165    }
1166
1167    public boolean hasRecorded() { 
1168      return this.recorded != null && !this.recorded.isEmpty();
1169    }
1170
1171    /**
1172     * @param value {@link #recorded} (The instant of time at which the activity was recorded.). This is the underlying object with id, value and extensions. The accessor "getRecorded" gives direct access to the value
1173     */
1174    public Provenance setRecordedElement(InstantType value) { 
1175      this.recorded = value;
1176      return this;
1177    }
1178
1179    /**
1180     * @return The instant of time at which the activity was recorded.
1181     */
1182    public Date getRecorded() { 
1183      return this.recorded == null ? null : this.recorded.getValue();
1184    }
1185
1186    /**
1187     * @param value The instant of time at which the activity was recorded.
1188     */
1189    public Provenance setRecorded(Date value) { 
1190        if (this.recorded == null)
1191          this.recorded = new InstantType();
1192        this.recorded.setValue(value);
1193      return this;
1194    }
1195
1196    /**
1197     * @return {@link #policy} (Policy or plan the activity was defined by. Typically, a single activity may have multiple applicable policy documents, such as patient consent, guarantor funding, etc.)
1198     */
1199    public List<UriType> getPolicy() { 
1200      if (this.policy == null)
1201        this.policy = new ArrayList<UriType>();
1202      return this.policy;
1203    }
1204
1205    /**
1206     * @return Returns a reference to <code>this</code> for easy method chaining
1207     */
1208    public Provenance setPolicy(List<UriType> thePolicy) { 
1209      this.policy = thePolicy;
1210      return this;
1211    }
1212
1213    public boolean hasPolicy() { 
1214      if (this.policy == null)
1215        return false;
1216      for (UriType item : this.policy)
1217        if (!item.isEmpty())
1218          return true;
1219      return false;
1220    }
1221
1222    /**
1223     * @return {@link #policy} (Policy or plan the activity was defined by. Typically, a single activity may have multiple applicable policy documents, such as patient consent, guarantor funding, etc.)
1224     */
1225    public UriType addPolicyElement() {//2 
1226      UriType t = new UriType();
1227      if (this.policy == null)
1228        this.policy = new ArrayList<UriType>();
1229      this.policy.add(t);
1230      return t;
1231    }
1232
1233    /**
1234     * @param value {@link #policy} (Policy or plan the activity was defined by. Typically, a single activity may have multiple applicable policy documents, such as patient consent, guarantor funding, etc.)
1235     */
1236    public Provenance addPolicy(String value) { //1
1237      UriType t = new UriType();
1238      t.setValue(value);
1239      if (this.policy == null)
1240        this.policy = new ArrayList<UriType>();
1241      this.policy.add(t);
1242      return this;
1243    }
1244
1245    /**
1246     * @param value {@link #policy} (Policy or plan the activity was defined by. Typically, a single activity may have multiple applicable policy documents, such as patient consent, guarantor funding, etc.)
1247     */
1248    public boolean hasPolicy(String value) { 
1249      if (this.policy == null)
1250        return false;
1251      for (UriType v : this.policy)
1252        if (v.getValue().equals(value)) // uri
1253          return true;
1254      return false;
1255    }
1256
1257    /**
1258     * @return {@link #location} (Where the activity occurred, if relevant.)
1259     */
1260    public Reference getLocation() { 
1261      if (this.location == null)
1262        if (Configuration.errorOnAutoCreate())
1263          throw new Error("Attempt to auto-create Provenance.location");
1264        else if (Configuration.doAutoCreate())
1265          this.location = new Reference(); // cc
1266      return this.location;
1267    }
1268
1269    public boolean hasLocation() { 
1270      return this.location != null && !this.location.isEmpty();
1271    }
1272
1273    /**
1274     * @param value {@link #location} (Where the activity occurred, if relevant.)
1275     */
1276    public Provenance setLocation(Reference value)  { 
1277      this.location = value;
1278      return this;
1279    }
1280
1281    /**
1282     * @return {@link #location} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (Where the activity occurred, if relevant.)
1283     */
1284    public Location getLocationTarget() { 
1285      if (this.locationTarget == null)
1286        if (Configuration.errorOnAutoCreate())
1287          throw new Error("Attempt to auto-create Provenance.location");
1288        else if (Configuration.doAutoCreate())
1289          this.locationTarget = new Location(); // aa
1290      return this.locationTarget;
1291    }
1292
1293    /**
1294     * @param value {@link #location} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (Where the activity occurred, if relevant.)
1295     */
1296    public Provenance setLocationTarget(Location value) { 
1297      this.locationTarget = value;
1298      return this;
1299    }
1300
1301    /**
1302     * @return {@link #reason} (The reason that the activity was taking place.)
1303     */
1304    public List<Coding> getReason() { 
1305      if (this.reason == null)
1306        this.reason = new ArrayList<Coding>();
1307      return this.reason;
1308    }
1309
1310    /**
1311     * @return Returns a reference to <code>this</code> for easy method chaining
1312     */
1313    public Provenance setReason(List<Coding> theReason) { 
1314      this.reason = theReason;
1315      return this;
1316    }
1317
1318    public boolean hasReason() { 
1319      if (this.reason == null)
1320        return false;
1321      for (Coding item : this.reason)
1322        if (!item.isEmpty())
1323          return true;
1324      return false;
1325    }
1326
1327    public Coding addReason() { //3
1328      Coding t = new Coding();
1329      if (this.reason == null)
1330        this.reason = new ArrayList<Coding>();
1331      this.reason.add(t);
1332      return t;
1333    }
1334
1335    public Provenance addReason(Coding t) { //3
1336      if (t == null)
1337        return this;
1338      if (this.reason == null)
1339        this.reason = new ArrayList<Coding>();
1340      this.reason.add(t);
1341      return this;
1342    }
1343
1344    /**
1345     * @return The first repetition of repeating field {@link #reason}, creating it if it does not already exist
1346     */
1347    public Coding getReasonFirstRep() { 
1348      if (getReason().isEmpty()) {
1349        addReason();
1350      }
1351      return getReason().get(0);
1352    }
1353
1354    /**
1355     * @return {@link #activity} (An activity is something that occurs over a period of time and acts upon or with entities; it may include consuming, processing, transforming, modifying, relocating, using, or generating entities.)
1356     */
1357    public Coding getActivity() { 
1358      if (this.activity == null)
1359        if (Configuration.errorOnAutoCreate())
1360          throw new Error("Attempt to auto-create Provenance.activity");
1361        else if (Configuration.doAutoCreate())
1362          this.activity = new Coding(); // cc
1363      return this.activity;
1364    }
1365
1366    public boolean hasActivity() { 
1367      return this.activity != null && !this.activity.isEmpty();
1368    }
1369
1370    /**
1371     * @param value {@link #activity} (An activity is something that occurs over a period of time and acts upon or with entities; it may include consuming, processing, transforming, modifying, relocating, using, or generating entities.)
1372     */
1373    public Provenance setActivity(Coding value)  { 
1374      this.activity = value;
1375      return this;
1376    }
1377
1378    /**
1379     * @return {@link #agent} (An actor taking a role in an activity  for which it can be assigned some degree of responsibility for the activity taking place.)
1380     */
1381    public List<ProvenanceAgentComponent> getAgent() { 
1382      if (this.agent == null)
1383        this.agent = new ArrayList<ProvenanceAgentComponent>();
1384      return this.agent;
1385    }
1386
1387    /**
1388     * @return Returns a reference to <code>this</code> for easy method chaining
1389     */
1390    public Provenance setAgent(List<ProvenanceAgentComponent> theAgent) { 
1391      this.agent = theAgent;
1392      return this;
1393    }
1394
1395    public boolean hasAgent() { 
1396      if (this.agent == null)
1397        return false;
1398      for (ProvenanceAgentComponent item : this.agent)
1399        if (!item.isEmpty())
1400          return true;
1401      return false;
1402    }
1403
1404    public ProvenanceAgentComponent addAgent() { //3
1405      ProvenanceAgentComponent t = new ProvenanceAgentComponent();
1406      if (this.agent == null)
1407        this.agent = new ArrayList<ProvenanceAgentComponent>();
1408      this.agent.add(t);
1409      return t;
1410    }
1411
1412    public Provenance addAgent(ProvenanceAgentComponent t) { //3
1413      if (t == null)
1414        return this;
1415      if (this.agent == null)
1416        this.agent = new ArrayList<ProvenanceAgentComponent>();
1417      this.agent.add(t);
1418      return this;
1419    }
1420
1421    /**
1422     * @return The first repetition of repeating field {@link #agent}, creating it if it does not already exist
1423     */
1424    public ProvenanceAgentComponent getAgentFirstRep() { 
1425      if (getAgent().isEmpty()) {
1426        addAgent();
1427      }
1428      return getAgent().get(0);
1429    }
1430
1431    /**
1432     * @return {@link #entity} (An entity used in this activity.)
1433     */
1434    public List<ProvenanceEntityComponent> getEntity() { 
1435      if (this.entity == null)
1436        this.entity = new ArrayList<ProvenanceEntityComponent>();
1437      return this.entity;
1438    }
1439
1440    /**
1441     * @return Returns a reference to <code>this</code> for easy method chaining
1442     */
1443    public Provenance setEntity(List<ProvenanceEntityComponent> theEntity) { 
1444      this.entity = theEntity;
1445      return this;
1446    }
1447
1448    public boolean hasEntity() { 
1449      if (this.entity == null)
1450        return false;
1451      for (ProvenanceEntityComponent item : this.entity)
1452        if (!item.isEmpty())
1453          return true;
1454      return false;
1455    }
1456
1457    public ProvenanceEntityComponent addEntity() { //3
1458      ProvenanceEntityComponent t = new ProvenanceEntityComponent();
1459      if (this.entity == null)
1460        this.entity = new ArrayList<ProvenanceEntityComponent>();
1461      this.entity.add(t);
1462      return t;
1463    }
1464
1465    public Provenance addEntity(ProvenanceEntityComponent t) { //3
1466      if (t == null)
1467        return this;
1468      if (this.entity == null)
1469        this.entity = new ArrayList<ProvenanceEntityComponent>();
1470      this.entity.add(t);
1471      return this;
1472    }
1473
1474    /**
1475     * @return The first repetition of repeating field {@link #entity}, creating it if it does not already exist
1476     */
1477    public ProvenanceEntityComponent getEntityFirstRep() { 
1478      if (getEntity().isEmpty()) {
1479        addEntity();
1480      }
1481      return getEntity().get(0);
1482    }
1483
1484    /**
1485     * @return {@link #signature} (A digital signature on the target Reference(s). The signer should match a Provenance.agent. The purpose of the signature is indicated.)
1486     */
1487    public List<Signature> getSignature() { 
1488      if (this.signature == null)
1489        this.signature = new ArrayList<Signature>();
1490      return this.signature;
1491    }
1492
1493    /**
1494     * @return Returns a reference to <code>this</code> for easy method chaining
1495     */
1496    public Provenance setSignature(List<Signature> theSignature) { 
1497      this.signature = theSignature;
1498      return this;
1499    }
1500
1501    public boolean hasSignature() { 
1502      if (this.signature == null)
1503        return false;
1504      for (Signature item : this.signature)
1505        if (!item.isEmpty())
1506          return true;
1507      return false;
1508    }
1509
1510    public Signature addSignature() { //3
1511      Signature t = new Signature();
1512      if (this.signature == null)
1513        this.signature = new ArrayList<Signature>();
1514      this.signature.add(t);
1515      return t;
1516    }
1517
1518    public Provenance addSignature(Signature t) { //3
1519      if (t == null)
1520        return this;
1521      if (this.signature == null)
1522        this.signature = new ArrayList<Signature>();
1523      this.signature.add(t);
1524      return this;
1525    }
1526
1527    /**
1528     * @return The first repetition of repeating field {@link #signature}, creating it if it does not already exist
1529     */
1530    public Signature getSignatureFirstRep() { 
1531      if (getSignature().isEmpty()) {
1532        addSignature();
1533      }
1534      return getSignature().get(0);
1535    }
1536
1537      protected void listChildren(List<Property> children) {
1538        super.listChildren(children);
1539        children.add(new Property("target", "Reference(Any)", "The Reference(s) that were generated or updated by  the activity described in this resource. A provenance can point to more than one target if multiple resources were created/updated by the same activity.", 0, java.lang.Integer.MAX_VALUE, target));
1540        children.add(new Property("period", "Period", "The period during which the activity occurred.", 0, 1, period));
1541        children.add(new Property("recorded", "instant", "The instant of time at which the activity was recorded.", 0, 1, recorded));
1542        children.add(new Property("policy", "uri", "Policy or plan the activity was defined by. Typically, a single activity may have multiple applicable policy documents, such as patient consent, guarantor funding, etc.", 0, java.lang.Integer.MAX_VALUE, policy));
1543        children.add(new Property("location", "Reference(Location)", "Where the activity occurred, if relevant.", 0, 1, location));
1544        children.add(new Property("reason", "Coding", "The reason that the activity was taking place.", 0, java.lang.Integer.MAX_VALUE, reason));
1545        children.add(new Property("activity", "Coding", "An activity is something that occurs over a period of time and acts upon or with entities; it may include consuming, processing, transforming, modifying, relocating, using, or generating entities.", 0, 1, activity));
1546        children.add(new Property("agent", "", "An actor taking a role in an activity  for which it can be assigned some degree of responsibility for the activity taking place.", 0, java.lang.Integer.MAX_VALUE, agent));
1547        children.add(new Property("entity", "", "An entity used in this activity.", 0, java.lang.Integer.MAX_VALUE, entity));
1548        children.add(new Property("signature", "Signature", "A digital signature on the target Reference(s). The signer should match a Provenance.agent. The purpose of the signature is indicated.", 0, java.lang.Integer.MAX_VALUE, signature));
1549      }
1550
1551      @Override
1552      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1553        switch (_hash) {
1554        case -880905839: /*target*/  return new Property("target", "Reference(Any)", "The Reference(s) that were generated or updated by  the activity described in this resource. A provenance can point to more than one target if multiple resources were created/updated by the same activity.", 0, java.lang.Integer.MAX_VALUE, target);
1555        case -991726143: /*period*/  return new Property("period", "Period", "The period during which the activity occurred.", 0, 1, period);
1556        case -799233872: /*recorded*/  return new Property("recorded", "instant", "The instant of time at which the activity was recorded.", 0, 1, recorded);
1557        case -982670030: /*policy*/  return new Property("policy", "uri", "Policy or plan the activity was defined by. Typically, a single activity may have multiple applicable policy documents, such as patient consent, guarantor funding, etc.", 0, java.lang.Integer.MAX_VALUE, policy);
1558        case 1901043637: /*location*/  return new Property("location", "Reference(Location)", "Where the activity occurred, if relevant.", 0, 1, location);
1559        case -934964668: /*reason*/  return new Property("reason", "Coding", "The reason that the activity was taking place.", 0, java.lang.Integer.MAX_VALUE, reason);
1560        case -1655966961: /*activity*/  return new Property("activity", "Coding", "An activity is something that occurs over a period of time and acts upon or with entities; it may include consuming, processing, transforming, modifying, relocating, using, or generating entities.", 0, 1, activity);
1561        case 92750597: /*agent*/  return new Property("agent", "", "An actor taking a role in an activity  for which it can be assigned some degree of responsibility for the activity taking place.", 0, java.lang.Integer.MAX_VALUE, agent);
1562        case -1298275357: /*entity*/  return new Property("entity", "", "An entity used in this activity.", 0, java.lang.Integer.MAX_VALUE, entity);
1563        case 1073584312: /*signature*/  return new Property("signature", "Signature", "A digital signature on the target Reference(s). The signer should match a Provenance.agent. The purpose of the signature is indicated.", 0, java.lang.Integer.MAX_VALUE, signature);
1564        default: return super.getNamedProperty(_hash, _name, _checkValid);
1565        }
1566
1567      }
1568
1569      @Override
1570      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1571        switch (hash) {
1572        case -880905839: /*target*/ return this.target == null ? new Base[0] : this.target.toArray(new Base[this.target.size()]); // Reference
1573        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
1574        case -799233872: /*recorded*/ return this.recorded == null ? new Base[0] : new Base[] {this.recorded}; // InstantType
1575        case -982670030: /*policy*/ return this.policy == null ? new Base[0] : this.policy.toArray(new Base[this.policy.size()]); // UriType
1576        case 1901043637: /*location*/ return this.location == null ? new Base[0] : new Base[] {this.location}; // Reference
1577        case -934964668: /*reason*/ return this.reason == null ? new Base[0] : this.reason.toArray(new Base[this.reason.size()]); // Coding
1578        case -1655966961: /*activity*/ return this.activity == null ? new Base[0] : new Base[] {this.activity}; // Coding
1579        case 92750597: /*agent*/ return this.agent == null ? new Base[0] : this.agent.toArray(new Base[this.agent.size()]); // ProvenanceAgentComponent
1580        case -1298275357: /*entity*/ return this.entity == null ? new Base[0] : this.entity.toArray(new Base[this.entity.size()]); // ProvenanceEntityComponent
1581        case 1073584312: /*signature*/ return this.signature == null ? new Base[0] : this.signature.toArray(new Base[this.signature.size()]); // Signature
1582        default: return super.getProperty(hash, name, checkValid);
1583        }
1584
1585      }
1586
1587      @Override
1588      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1589        switch (hash) {
1590        case -880905839: // target
1591          this.getTarget().add(castToReference(value)); // Reference
1592          return value;
1593        case -991726143: // period
1594          this.period = castToPeriod(value); // Period
1595          return value;
1596        case -799233872: // recorded
1597          this.recorded = castToInstant(value); // InstantType
1598          return value;
1599        case -982670030: // policy
1600          this.getPolicy().add(castToUri(value)); // UriType
1601          return value;
1602        case 1901043637: // location
1603          this.location = castToReference(value); // Reference
1604          return value;
1605        case -934964668: // reason
1606          this.getReason().add(castToCoding(value)); // Coding
1607          return value;
1608        case -1655966961: // activity
1609          this.activity = castToCoding(value); // Coding
1610          return value;
1611        case 92750597: // agent
1612          this.getAgent().add((ProvenanceAgentComponent) value); // ProvenanceAgentComponent
1613          return value;
1614        case -1298275357: // entity
1615          this.getEntity().add((ProvenanceEntityComponent) value); // ProvenanceEntityComponent
1616          return value;
1617        case 1073584312: // signature
1618          this.getSignature().add(castToSignature(value)); // Signature
1619          return value;
1620        default: return super.setProperty(hash, name, value);
1621        }
1622
1623      }
1624
1625      @Override
1626      public Base setProperty(String name, Base value) throws FHIRException {
1627        if (name.equals("target")) {
1628          this.getTarget().add(castToReference(value));
1629        } else if (name.equals("period")) {
1630          this.period = castToPeriod(value); // Period
1631        } else if (name.equals("recorded")) {
1632          this.recorded = castToInstant(value); // InstantType
1633        } else if (name.equals("policy")) {
1634          this.getPolicy().add(castToUri(value));
1635        } else if (name.equals("location")) {
1636          this.location = castToReference(value); // Reference
1637        } else if (name.equals("reason")) {
1638          this.getReason().add(castToCoding(value));
1639        } else if (name.equals("activity")) {
1640          this.activity = castToCoding(value); // Coding
1641        } else if (name.equals("agent")) {
1642          this.getAgent().add((ProvenanceAgentComponent) value);
1643        } else if (name.equals("entity")) {
1644          this.getEntity().add((ProvenanceEntityComponent) value);
1645        } else if (name.equals("signature")) {
1646          this.getSignature().add(castToSignature(value));
1647        } else
1648          return super.setProperty(name, value);
1649        return value;
1650      }
1651
1652      @Override
1653      public Base makeProperty(int hash, String name) throws FHIRException {
1654        switch (hash) {
1655        case -880905839:  return addTarget(); 
1656        case -991726143:  return getPeriod(); 
1657        case -799233872:  return getRecordedElement();
1658        case -982670030:  return addPolicyElement();
1659        case 1901043637:  return getLocation(); 
1660        case -934964668:  return addReason(); 
1661        case -1655966961:  return getActivity(); 
1662        case 92750597:  return addAgent(); 
1663        case -1298275357:  return addEntity(); 
1664        case 1073584312:  return addSignature(); 
1665        default: return super.makeProperty(hash, name);
1666        }
1667
1668      }
1669
1670      @Override
1671      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1672        switch (hash) {
1673        case -880905839: /*target*/ return new String[] {"Reference"};
1674        case -991726143: /*period*/ return new String[] {"Period"};
1675        case -799233872: /*recorded*/ return new String[] {"instant"};
1676        case -982670030: /*policy*/ return new String[] {"uri"};
1677        case 1901043637: /*location*/ return new String[] {"Reference"};
1678        case -934964668: /*reason*/ return new String[] {"Coding"};
1679        case -1655966961: /*activity*/ return new String[] {"Coding"};
1680        case 92750597: /*agent*/ return new String[] {};
1681        case -1298275357: /*entity*/ return new String[] {};
1682        case 1073584312: /*signature*/ return new String[] {"Signature"};
1683        default: return super.getTypesForProperty(hash, name);
1684        }
1685
1686      }
1687
1688      @Override
1689      public Base addChild(String name) throws FHIRException {
1690        if (name.equals("target")) {
1691          return addTarget();
1692        }
1693        else if (name.equals("period")) {
1694          this.period = new Period();
1695          return this.period;
1696        }
1697        else if (name.equals("recorded")) {
1698          throw new FHIRException("Cannot call addChild on a singleton property Provenance.recorded");
1699        }
1700        else if (name.equals("policy")) {
1701          throw new FHIRException("Cannot call addChild on a singleton property Provenance.policy");
1702        }
1703        else if (name.equals("location")) {
1704          this.location = new Reference();
1705          return this.location;
1706        }
1707        else if (name.equals("reason")) {
1708          return addReason();
1709        }
1710        else if (name.equals("activity")) {
1711          this.activity = new Coding();
1712          return this.activity;
1713        }
1714        else if (name.equals("agent")) {
1715          return addAgent();
1716        }
1717        else if (name.equals("entity")) {
1718          return addEntity();
1719        }
1720        else if (name.equals("signature")) {
1721          return addSignature();
1722        }
1723        else
1724          return super.addChild(name);
1725      }
1726
1727  public String fhirType() {
1728    return "Provenance";
1729
1730  }
1731
1732      public Provenance copy() {
1733        Provenance dst = new Provenance();
1734        copyValues(dst);
1735        if (target != null) {
1736          dst.target = new ArrayList<Reference>();
1737          for (Reference i : target)
1738            dst.target.add(i.copy());
1739        };
1740        dst.period = period == null ? null : period.copy();
1741        dst.recorded = recorded == null ? null : recorded.copy();
1742        if (policy != null) {
1743          dst.policy = new ArrayList<UriType>();
1744          for (UriType i : policy)
1745            dst.policy.add(i.copy());
1746        };
1747        dst.location = location == null ? null : location.copy();
1748        if (reason != null) {
1749          dst.reason = new ArrayList<Coding>();
1750          for (Coding i : reason)
1751            dst.reason.add(i.copy());
1752        };
1753        dst.activity = activity == null ? null : activity.copy();
1754        if (agent != null) {
1755          dst.agent = new ArrayList<ProvenanceAgentComponent>();
1756          for (ProvenanceAgentComponent i : agent)
1757            dst.agent.add(i.copy());
1758        };
1759        if (entity != null) {
1760          dst.entity = new ArrayList<ProvenanceEntityComponent>();
1761          for (ProvenanceEntityComponent i : entity)
1762            dst.entity.add(i.copy());
1763        };
1764        if (signature != null) {
1765          dst.signature = new ArrayList<Signature>();
1766          for (Signature i : signature)
1767            dst.signature.add(i.copy());
1768        };
1769        return dst;
1770      }
1771
1772      protected Provenance typedCopy() {
1773        return copy();
1774      }
1775
1776      @Override
1777      public boolean equalsDeep(Base other_) {
1778        if (!super.equalsDeep(other_))
1779          return false;
1780        if (!(other_ instanceof Provenance))
1781          return false;
1782        Provenance o = (Provenance) other_;
1783        return compareDeep(target, o.target, true) && compareDeep(period, o.period, true) && compareDeep(recorded, o.recorded, true)
1784           && compareDeep(policy, o.policy, true) && compareDeep(location, o.location, true) && compareDeep(reason, o.reason, true)
1785           && compareDeep(activity, o.activity, true) && compareDeep(agent, o.agent, true) && compareDeep(entity, o.entity, true)
1786           && compareDeep(signature, o.signature, true);
1787      }
1788
1789      @Override
1790      public boolean equalsShallow(Base other_) {
1791        if (!super.equalsShallow(other_))
1792          return false;
1793        if (!(other_ instanceof Provenance))
1794          return false;
1795        Provenance o = (Provenance) other_;
1796        return compareValues(recorded, o.recorded, true) && compareValues(policy, o.policy, true);
1797      }
1798
1799      public boolean isEmpty() {
1800        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(target, period, recorded
1801          , policy, location, reason, activity, agent, entity, signature);
1802      }
1803
1804  @Override
1805  public ResourceType getResourceType() {
1806    return ResourceType.Provenance;
1807   }
1808
1809 /**
1810   * Search parameter: <b>entity-ref</b>
1811   * <p>
1812   * Description: <b>Identity of entity</b><br>
1813   * Type: <b>reference</b><br>
1814   * Path: <b>Provenance.entity.whatReference</b><br>
1815   * </p>
1816   */
1817  @SearchParamDefinition(name="entity-ref", path="Provenance.entity.what.as(Reference)", description="Identity of entity", type="reference" )
1818  public static final String SP_ENTITY_REF = "entity-ref";
1819 /**
1820   * <b>Fluent Client</b> search parameter constant for <b>entity-ref</b>
1821   * <p>
1822   * Description: <b>Identity of entity</b><br>
1823   * Type: <b>reference</b><br>
1824   * Path: <b>Provenance.entity.whatReference</b><br>
1825   * </p>
1826   */
1827  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ENTITY_REF = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ENTITY_REF);
1828
1829/**
1830   * Constant for fluent queries to be used to add include statements. Specifies
1831   * the path value of "<b>Provenance:entity-ref</b>".
1832   */
1833  public static final ca.uhn.fhir.model.api.Include INCLUDE_ENTITY_REF = new ca.uhn.fhir.model.api.Include("Provenance:entity-ref").toLocked();
1834
1835 /**
1836   * Search parameter: <b>agent</b>
1837   * <p>
1838   * Description: <b>Who participated</b><br>
1839   * Type: <b>reference</b><br>
1840   * Path: <b>Provenance.agent.who[x]</b><br>
1841   * </p>
1842   */
1843  @SearchParamDefinition(name="agent", path="Provenance.agent.who", description="Who participated", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Device"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Practitioner"), @ca.uhn.fhir.model.api.annotation.Compartment(name="RelatedPerson") }, target={Device.class, Organization.class, Patient.class, Practitioner.class, RelatedPerson.class } )
1844  public static final String SP_AGENT = "agent";
1845 /**
1846   * <b>Fluent Client</b> search parameter constant for <b>agent</b>
1847   * <p>
1848   * Description: <b>Who participated</b><br>
1849   * Type: <b>reference</b><br>
1850   * Path: <b>Provenance.agent.who[x]</b><br>
1851   * </p>
1852   */
1853  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam AGENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_AGENT);
1854
1855/**
1856   * Constant for fluent queries to be used to add include statements. Specifies
1857   * the path value of "<b>Provenance:agent</b>".
1858   */
1859  public static final ca.uhn.fhir.model.api.Include INCLUDE_AGENT = new ca.uhn.fhir.model.api.Include("Provenance:agent").toLocked();
1860
1861 /**
1862   * Search parameter: <b>signature-type</b>
1863   * <p>
1864   * Description: <b>Indication of the reason the entity signed the object(s)</b><br>
1865   * Type: <b>token</b><br>
1866   * Path: <b>Provenance.signature.type</b><br>
1867   * </p>
1868   */
1869  @SearchParamDefinition(name="signature-type", path="Provenance.signature.type", description="Indication of the reason the entity signed the object(s)", type="token" )
1870  public static final String SP_SIGNATURE_TYPE = "signature-type";
1871 /**
1872   * <b>Fluent Client</b> search parameter constant for <b>signature-type</b>
1873   * <p>
1874   * Description: <b>Indication of the reason the entity signed the object(s)</b><br>
1875   * Type: <b>token</b><br>
1876   * Path: <b>Provenance.signature.type</b><br>
1877   * </p>
1878   */
1879  public static final ca.uhn.fhir.rest.gclient.TokenClientParam SIGNATURE_TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_SIGNATURE_TYPE);
1880
1881 /**
1882   * Search parameter: <b>patient</b>
1883   * <p>
1884   * Description: <b>Target Reference(s) (usually version specific)</b><br>
1885   * Type: <b>reference</b><br>
1886   * Path: <b>Provenance.target</b><br>
1887   * </p>
1888   */
1889  @SearchParamDefinition(name="patient", path="Provenance.target", description="Target Reference(s) (usually version specific)", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Patient") }, target={Patient.class } )
1890  public static final String SP_PATIENT = "patient";
1891 /**
1892   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
1893   * <p>
1894   * Description: <b>Target Reference(s) (usually version specific)</b><br>
1895   * Type: <b>reference</b><br>
1896   * Path: <b>Provenance.target</b><br>
1897   * </p>
1898   */
1899  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
1900
1901/**
1902   * Constant for fluent queries to be used to add include statements. Specifies
1903   * the path value of "<b>Provenance:patient</b>".
1904   */
1905  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("Provenance:patient").toLocked();
1906
1907 /**
1908   * Search parameter: <b>start</b>
1909   * <p>
1910   * Description: <b>Starting time with inclusive boundary</b><br>
1911   * Type: <b>date</b><br>
1912   * Path: <b>Provenance.period.start</b><br>
1913   * </p>
1914   */
1915  @SearchParamDefinition(name="start", path="Provenance.period.start", description="Starting time with inclusive boundary", type="date" )
1916  public static final String SP_START = "start";
1917 /**
1918   * <b>Fluent Client</b> search parameter constant for <b>start</b>
1919   * <p>
1920   * Description: <b>Starting time with inclusive boundary</b><br>
1921   * Type: <b>date</b><br>
1922   * Path: <b>Provenance.period.start</b><br>
1923   * </p>
1924   */
1925  public static final ca.uhn.fhir.rest.gclient.DateClientParam START = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_START);
1926
1927 /**
1928   * Search parameter: <b>end</b>
1929   * <p>
1930   * Description: <b>End time with inclusive boundary, if not ongoing</b><br>
1931   * Type: <b>date</b><br>
1932   * Path: <b>Provenance.period.end</b><br>
1933   * </p>
1934   */
1935  @SearchParamDefinition(name="end", path="Provenance.period.end", description="End time with inclusive boundary, if not ongoing", type="date" )
1936  public static final String SP_END = "end";
1937 /**
1938   * <b>Fluent Client</b> search parameter constant for <b>end</b>
1939   * <p>
1940   * Description: <b>End time with inclusive boundary, if not ongoing</b><br>
1941   * Type: <b>date</b><br>
1942   * Path: <b>Provenance.period.end</b><br>
1943   * </p>
1944   */
1945  public static final ca.uhn.fhir.rest.gclient.DateClientParam END = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_END);
1946
1947 /**
1948   * Search parameter: <b>location</b>
1949   * <p>
1950   * Description: <b>Where the activity occurred, if relevant</b><br>
1951   * Type: <b>reference</b><br>
1952   * Path: <b>Provenance.location</b><br>
1953   * </p>
1954   */
1955  @SearchParamDefinition(name="location", path="Provenance.location", description="Where the activity occurred, if relevant", type="reference", target={Location.class } )
1956  public static final String SP_LOCATION = "location";
1957 /**
1958   * <b>Fluent Client</b> search parameter constant for <b>location</b>
1959   * <p>
1960   * Description: <b>Where the activity occurred, if relevant</b><br>
1961   * Type: <b>reference</b><br>
1962   * Path: <b>Provenance.location</b><br>
1963   * </p>
1964   */
1965  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam LOCATION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_LOCATION);
1966
1967/**
1968   * Constant for fluent queries to be used to add include statements. Specifies
1969   * the path value of "<b>Provenance:location</b>".
1970   */
1971  public static final ca.uhn.fhir.model.api.Include INCLUDE_LOCATION = new ca.uhn.fhir.model.api.Include("Provenance:location").toLocked();
1972
1973 /**
1974   * Search parameter: <b>recorded</b>
1975   * <p>
1976   * Description: <b>When the activity was recorded / updated</b><br>
1977   * Type: <b>date</b><br>
1978   * Path: <b>Provenance.recorded</b><br>
1979   * </p>
1980   */
1981  @SearchParamDefinition(name="recorded", path="Provenance.recorded", description="When the activity was recorded / updated", type="date" )
1982  public static final String SP_RECORDED = "recorded";
1983 /**
1984   * <b>Fluent Client</b> search parameter constant for <b>recorded</b>
1985   * <p>
1986   * Description: <b>When the activity was recorded / updated</b><br>
1987   * Type: <b>date</b><br>
1988   * Path: <b>Provenance.recorded</b><br>
1989   * </p>
1990   */
1991  public static final ca.uhn.fhir.rest.gclient.DateClientParam RECORDED = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_RECORDED);
1992
1993 /**
1994   * Search parameter: <b>agent-role</b>
1995   * <p>
1996   * Description: <b>What the agents role was</b><br>
1997   * Type: <b>token</b><br>
1998   * Path: <b>Provenance.agent.role</b><br>
1999   * </p>
2000   */
2001  @SearchParamDefinition(name="agent-role", path="Provenance.agent.role", description="What the agents role was", type="token" )
2002  public static final String SP_AGENT_ROLE = "agent-role";
2003 /**
2004   * <b>Fluent Client</b> search parameter constant for <b>agent-role</b>
2005   * <p>
2006   * Description: <b>What the agents role was</b><br>
2007   * Type: <b>token</b><br>
2008   * Path: <b>Provenance.agent.role</b><br>
2009   * </p>
2010   */
2011  public static final ca.uhn.fhir.rest.gclient.TokenClientParam AGENT_ROLE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_AGENT_ROLE);
2012
2013 /**
2014   * Search parameter: <b>entity-id</b>
2015   * <p>
2016   * Description: <b>Identity of entity</b><br>
2017   * Type: <b>token</b><br>
2018   * Path: <b>Provenance.entity.whatIdentifier</b><br>
2019   * </p>
2020   */
2021  @SearchParamDefinition(name="entity-id", path="Provenance.entity.what.as(Identifier)", description="Identity of entity", type="token" )
2022  public static final String SP_ENTITY_ID = "entity-id";
2023 /**
2024   * <b>Fluent Client</b> search parameter constant for <b>entity-id</b>
2025   * <p>
2026   * Description: <b>Identity of entity</b><br>
2027   * Type: <b>token</b><br>
2028   * Path: <b>Provenance.entity.whatIdentifier</b><br>
2029   * </p>
2030   */
2031  public static final ca.uhn.fhir.rest.gclient.TokenClientParam ENTITY_ID = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_ENTITY_ID);
2032
2033 /**
2034   * Search parameter: <b>target</b>
2035   * <p>
2036   * Description: <b>Target Reference(s) (usually version specific)</b><br>
2037   * Type: <b>reference</b><br>
2038   * Path: <b>Provenance.target</b><br>
2039   * </p>
2040   */
2041  @SearchParamDefinition(name="target", path="Provenance.target", description="Target Reference(s) (usually version specific)", type="reference" )
2042  public static final String SP_TARGET = "target";
2043 /**
2044   * <b>Fluent Client</b> search parameter constant for <b>target</b>
2045   * <p>
2046   * Description: <b>Target Reference(s) (usually version specific)</b><br>
2047   * Type: <b>reference</b><br>
2048   * Path: <b>Provenance.target</b><br>
2049   * </p>
2050   */
2051  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam TARGET = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_TARGET);
2052
2053/**
2054   * Constant for fluent queries to be used to add include statements. Specifies
2055   * the path value of "<b>Provenance:target</b>".
2056   */
2057  public static final ca.uhn.fhir.model.api.Include INCLUDE_TARGET = new ca.uhn.fhir.model.api.Include("Provenance:target").toLocked();
2058
2059
2060}