001package org.hl7.fhir.dstu3.model;
002
003
004
005/*
006  Copyright (c) 2011+, HL7, Inc.
007  All rights reserved.
008  
009  Redistribution and use in source and binary forms, with or without modification, 
010  are permitted provided that the following conditions are met:
011  
012   * Redistributions of source code must retain the above copyright notice, this 
013     list of conditions and the following disclaimer.
014   * Redistributions in binary form must reproduce the above copyright notice, 
015     this list of conditions and the following disclaimer in the documentation 
016     and/or other materials provided with the distribution.
017   * Neither the name of HL7 nor the names of its contributors may be used to 
018     endorse or promote products derived from this software without specific 
019     prior written permission.
020  
021  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
022  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
023  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
024  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
025  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
026  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
027  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
028  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
029  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
030  POSSIBILITY OF SUCH DAMAGE.
031  
032*/
033
034// Generated on Fri, Mar 16, 2018 15:21+1100 for FHIR v3.0.x
035import java.util.ArrayList;
036import java.util.Date;
037import java.util.List;
038
039import org.hl7.fhir.exceptions.FHIRException;
040import org.hl7.fhir.exceptions.FHIRFormatError;
041import org.hl7.fhir.instance.model.api.ICompositeType;
042import org.hl7.fhir.utilities.Utilities;
043
044import ca.uhn.fhir.model.api.annotation.Child;
045import ca.uhn.fhir.model.api.annotation.DatatypeDef;
046import ca.uhn.fhir.model.api.annotation.Description;
047/**
048 * A digital signature along with supporting context. The signature may be electronic/cryptographic in nature, or a graphical image representing a hand-written signature, or a signature process. Different signature approaches have different utilities.
049 */
050@DatatypeDef(name="Signature")
051public class Signature extends Type implements ICompositeType {
052
053    /**
054     * An indication of the reason that the entity signed this document. This may be explicitly included as part of the signature information and can be used when determining accountability for various actions concerning the document.
055     */
056    @Child(name = "type", type = {Coding.class}, order=0, min=1, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
057    @Description(shortDefinition="Indication of the reason the entity signed the object(s)", formalDefinition="An indication of the reason that the entity signed this document. This may be explicitly included as part of the signature information and can be used when determining accountability for various actions concerning the document." )
058    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/signature-type")
059    protected List<Coding> type;
060
061    /**
062     * When the digital signature was signed.
063     */
064    @Child(name = "when", type = {InstantType.class}, order=1, min=1, max=1, modifier=false, summary=true)
065    @Description(shortDefinition="When the signature was created", formalDefinition="When the digital signature was signed." )
066    protected InstantType when;
067
068    /**
069     * A reference to an application-usable description of the identity that signed  (e.g. the signature used their private key).
070     */
071    @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)
072    @Description(shortDefinition="Who signed", formalDefinition="A reference to an application-usable description of the identity that signed  (e.g. the signature used their private key)." )
073    protected Type who;
074
075    /**
076     * A reference to an application-usable description of the identity that is represented by the signature.
077     */
078    @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=true)
079    @Description(shortDefinition="The party represented", formalDefinition="A reference to an application-usable description of the identity that is represented by the signature." )
080    protected Type onBehalfOf;
081
082    /**
083     * A mime type that indicates the technical format of the signature. Important mime types are application/signature+xml for X ML DigSig, application/jwt for JWT, and image/* for a graphical image of a signature, etc.
084     */
085    @Child(name = "contentType", type = {CodeType.class}, order=4, min=0, max=1, modifier=false, summary=true)
086    @Description(shortDefinition="The technical format of the signature", formalDefinition="A mime type that indicates the technical format of the signature. Important mime types are application/signature+xml for X ML DigSig, application/jwt for JWT, and image/* for a graphical image of a signature, etc." )
087    protected CodeType contentType;
088
089    /**
090     * The base64 encoding of the Signature content. When signature is not recorded electronically this element would be empty.
091     */
092    @Child(name = "blob", type = {Base64BinaryType.class}, order=5, min=0, max=1, modifier=false, summary=false)
093    @Description(shortDefinition="The actual signature content (XML DigSig. JWT, picture, etc.)", formalDefinition="The base64 encoding of the Signature content. When signature is not recorded electronically this element would be empty." )
094    protected Base64BinaryType blob;
095
096    private static final long serialVersionUID = 1133697310L;
097
098  /**
099   * Constructor
100   */
101    public Signature() {
102      super();
103    }
104
105  /**
106   * Constructor
107   */
108    public Signature(InstantType when, Type who) {
109      super();
110      this.when = when;
111      this.who = who;
112    }
113
114    /**
115     * @return {@link #type} (An indication of the reason that the entity signed this document. This may be explicitly included as part of the signature information and can be used when determining accountability for various actions concerning the document.)
116     */
117    public List<Coding> getType() { 
118      if (this.type == null)
119        this.type = new ArrayList<Coding>();
120      return this.type;
121    }
122
123    /**
124     * @return Returns a reference to <code>this</code> for easy method chaining
125     */
126    public Signature setType(List<Coding> theType) { 
127      this.type = theType;
128      return this;
129    }
130
131    public boolean hasType() { 
132      if (this.type == null)
133        return false;
134      for (Coding item : this.type)
135        if (!item.isEmpty())
136          return true;
137      return false;
138    }
139
140    public Coding addType() { //3
141      Coding t = new Coding();
142      if (this.type == null)
143        this.type = new ArrayList<Coding>();
144      this.type.add(t);
145      return t;
146    }
147
148    public Signature addType(Coding t) { //3
149      if (t == null)
150        return this;
151      if (this.type == null)
152        this.type = new ArrayList<Coding>();
153      this.type.add(t);
154      return this;
155    }
156
157    /**
158     * @return The first repetition of repeating field {@link #type}, creating it if it does not already exist
159     */
160    public Coding getTypeFirstRep() { 
161      if (getType().isEmpty()) {
162        addType();
163      }
164      return getType().get(0);
165    }
166
167    /**
168     * @return {@link #when} (When the digital signature was signed.). This is the underlying object with id, value and extensions. The accessor "getWhen" gives direct access to the value
169     */
170    public InstantType getWhenElement() { 
171      if (this.when == null)
172        if (Configuration.errorOnAutoCreate())
173          throw new Error("Attempt to auto-create Signature.when");
174        else if (Configuration.doAutoCreate())
175          this.when = new InstantType(); // bb
176      return this.when;
177    }
178
179    public boolean hasWhenElement() { 
180      return this.when != null && !this.when.isEmpty();
181    }
182
183    public boolean hasWhen() { 
184      return this.when != null && !this.when.isEmpty();
185    }
186
187    /**
188     * @param value {@link #when} (When the digital signature was signed.). This is the underlying object with id, value and extensions. The accessor "getWhen" gives direct access to the value
189     */
190    public Signature setWhenElement(InstantType value) { 
191      this.when = value;
192      return this;
193    }
194
195    /**
196     * @return When the digital signature was signed.
197     */
198    public Date getWhen() { 
199      return this.when == null ? null : this.when.getValue();
200    }
201
202    /**
203     * @param value When the digital signature was signed.
204     */
205    public Signature setWhen(Date value) { 
206        if (this.when == null)
207          this.when = new InstantType();
208        this.when.setValue(value);
209      return this;
210    }
211
212    /**
213     * @return {@link #who} (A reference to an application-usable description of the identity that signed  (e.g. the signature used their private key).)
214     */
215    public Type getWho() { 
216      return this.who;
217    }
218
219    /**
220     * @return {@link #who} (A reference to an application-usable description of the identity that signed  (e.g. the signature used their private key).)
221     */
222    public UriType getWhoUriType() throws FHIRException { 
223      if (this.who == null)
224        return null;
225      if (!(this.who instanceof UriType))
226        throw new FHIRException("Type mismatch: the type UriType was expected, but "+this.who.getClass().getName()+" was encountered");
227      return (UriType) this.who;
228    }
229
230    public boolean hasWhoUriType() { 
231      return this != null && this.who instanceof UriType;
232    }
233
234    /**
235     * @return {@link #who} (A reference to an application-usable description of the identity that signed  (e.g. the signature used their private key).)
236     */
237    public Reference getWhoReference() throws FHIRException { 
238      if (this.who == null)
239        return null;
240      if (!(this.who instanceof Reference))
241        throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.who.getClass().getName()+" was encountered");
242      return (Reference) this.who;
243    }
244
245    public boolean hasWhoReference() { 
246      return this != null && this.who instanceof Reference;
247    }
248
249    public boolean hasWho() { 
250      return this.who != null && !this.who.isEmpty();
251    }
252
253    /**
254     * @param value {@link #who} (A reference to an application-usable description of the identity that signed  (e.g. the signature used their private key).)
255     */
256    public Signature setWho(Type value) throws FHIRFormatError { 
257      if (value != null && !(value instanceof UriType || value instanceof Reference))
258        throw new FHIRFormatError("Not the right type for Signature.who[x]: "+value.fhirType());
259      this.who = value;
260      return this;
261    }
262
263    /**
264     * @return {@link #onBehalfOf} (A reference to an application-usable description of the identity that is represented by the signature.)
265     */
266    public Type getOnBehalfOf() { 
267      return this.onBehalfOf;
268    }
269
270    /**
271     * @return {@link #onBehalfOf} (A reference to an application-usable description of the identity that is represented by the signature.)
272     */
273    public UriType getOnBehalfOfUriType() throws FHIRException { 
274      if (this.onBehalfOf == null)
275        return null;
276      if (!(this.onBehalfOf instanceof UriType))
277        throw new FHIRException("Type mismatch: the type UriType was expected, but "+this.onBehalfOf.getClass().getName()+" was encountered");
278      return (UriType) this.onBehalfOf;
279    }
280
281    public boolean hasOnBehalfOfUriType() { 
282      return this != null && this.onBehalfOf instanceof UriType;
283    }
284
285    /**
286     * @return {@link #onBehalfOf} (A reference to an application-usable description of the identity that is represented by the signature.)
287     */
288    public Reference getOnBehalfOfReference() throws FHIRException { 
289      if (this.onBehalfOf == null)
290        return null;
291      if (!(this.onBehalfOf instanceof Reference))
292        throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.onBehalfOf.getClass().getName()+" was encountered");
293      return (Reference) this.onBehalfOf;
294    }
295
296    public boolean hasOnBehalfOfReference() { 
297      return this != null && this.onBehalfOf instanceof Reference;
298    }
299
300    public boolean hasOnBehalfOf() { 
301      return this.onBehalfOf != null && !this.onBehalfOf.isEmpty();
302    }
303
304    /**
305     * @param value {@link #onBehalfOf} (A reference to an application-usable description of the identity that is represented by the signature.)
306     */
307    public Signature setOnBehalfOf(Type value) throws FHIRFormatError { 
308      if (value != null && !(value instanceof UriType || value instanceof Reference))
309        throw new FHIRFormatError("Not the right type for Signature.onBehalfOf[x]: "+value.fhirType());
310      this.onBehalfOf = value;
311      return this;
312    }
313
314    /**
315     * @return {@link #contentType} (A mime type that indicates the technical format of the signature. Important mime types are application/signature+xml for X ML DigSig, application/jwt for JWT, and image/* for a graphical image of a signature, etc.). This is the underlying object with id, value and extensions. The accessor "getContentType" gives direct access to the value
316     */
317    public CodeType getContentTypeElement() { 
318      if (this.contentType == null)
319        if (Configuration.errorOnAutoCreate())
320          throw new Error("Attempt to auto-create Signature.contentType");
321        else if (Configuration.doAutoCreate())
322          this.contentType = new CodeType(); // bb
323      return this.contentType;
324    }
325
326    public boolean hasContentTypeElement() { 
327      return this.contentType != null && !this.contentType.isEmpty();
328    }
329
330    public boolean hasContentType() { 
331      return this.contentType != null && !this.contentType.isEmpty();
332    }
333
334    /**
335     * @param value {@link #contentType} (A mime type that indicates the technical format of the signature. Important mime types are application/signature+xml for X ML DigSig, application/jwt for JWT, and image/* for a graphical image of a signature, etc.). This is the underlying object with id, value and extensions. The accessor "getContentType" gives direct access to the value
336     */
337    public Signature setContentTypeElement(CodeType value) { 
338      this.contentType = value;
339      return this;
340    }
341
342    /**
343     * @return A mime type that indicates the technical format of the signature. Important mime types are application/signature+xml for X ML DigSig, application/jwt for JWT, and image/* for a graphical image of a signature, etc.
344     */
345    public String getContentType() { 
346      return this.contentType == null ? null : this.contentType.getValue();
347    }
348
349    /**
350     * @param value A mime type that indicates the technical format of the signature. Important mime types are application/signature+xml for X ML DigSig, application/jwt for JWT, and image/* for a graphical image of a signature, etc.
351     */
352    public Signature setContentType(String value) { 
353      if (Utilities.noString(value))
354        this.contentType = null;
355      else {
356        if (this.contentType == null)
357          this.contentType = new CodeType();
358        this.contentType.setValue(value);
359      }
360      return this;
361    }
362
363    /**
364     * @return {@link #blob} (The base64 encoding of the Signature content. When signature is not recorded electronically this element would be empty.). This is the underlying object with id, value and extensions. The accessor "getBlob" gives direct access to the value
365     */
366    public Base64BinaryType getBlobElement() { 
367      if (this.blob == null)
368        if (Configuration.errorOnAutoCreate())
369          throw new Error("Attempt to auto-create Signature.blob");
370        else if (Configuration.doAutoCreate())
371          this.blob = new Base64BinaryType(); // bb
372      return this.blob;
373    }
374
375    public boolean hasBlobElement() { 
376      return this.blob != null && !this.blob.isEmpty();
377    }
378
379    public boolean hasBlob() { 
380      return this.blob != null && !this.blob.isEmpty();
381    }
382
383    /**
384     * @param value {@link #blob} (The base64 encoding of the Signature content. When signature is not recorded electronically this element would be empty.). This is the underlying object with id, value and extensions. The accessor "getBlob" gives direct access to the value
385     */
386    public Signature setBlobElement(Base64BinaryType value) { 
387      this.blob = value;
388      return this;
389    }
390
391    /**
392     * @return The base64 encoding of the Signature content. When signature is not recorded electronically this element would be empty.
393     */
394    public byte[] getBlob() { 
395      return this.blob == null ? null : this.blob.getValue();
396    }
397
398    /**
399     * @param value The base64 encoding of the Signature content. When signature is not recorded electronically this element would be empty.
400     */
401    public Signature setBlob(byte[] value) { 
402      if (value == null)
403        this.blob = null;
404      else {
405        if (this.blob == null)
406          this.blob = new Base64BinaryType();
407        this.blob.setValue(value);
408      }
409      return this;
410    }
411
412      protected void listChildren(List<Property> children) {
413        super.listChildren(children);
414        children.add(new Property("type", "Coding", "An indication of the reason that the entity signed this document. This may be explicitly included as part of the signature information and can be used when determining accountability for various actions concerning the document.", 0, java.lang.Integer.MAX_VALUE, type));
415        children.add(new Property("when", "instant", "When the digital signature was signed.", 0, 1, when));
416        children.add(new Property("who[x]", "uri|Reference(Practitioner|RelatedPerson|Patient|Device|Organization)", "A reference to an application-usable description of the identity that signed  (e.g. the signature used their private key).", 0, 1, who));
417        children.add(new Property("onBehalfOf[x]", "uri|Reference(Practitioner|RelatedPerson|Patient|Device|Organization)", "A reference to an application-usable description of the identity that is represented by the signature.", 0, 1, onBehalfOf));
418        children.add(new Property("contentType", "code", "A mime type that indicates the technical format of the signature. Important mime types are application/signature+xml for X ML DigSig, application/jwt for JWT, and image/* for a graphical image of a signature, etc.", 0, 1, contentType));
419        children.add(new Property("blob", "base64Binary", "The base64 encoding of the Signature content. When signature is not recorded electronically this element would be empty.", 0, 1, blob));
420      }
421
422      @Override
423      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
424        switch (_hash) {
425        case 3575610: /*type*/  return new Property("type", "Coding", "An indication of the reason that the entity signed this document. This may be explicitly included as part of the signature information and can be used when determining accountability for various actions concerning the document.", 0, java.lang.Integer.MAX_VALUE, type);
426        case 3648314: /*when*/  return new Property("when", "instant", "When the digital signature was signed.", 0, 1, when);
427        case -788654078: /*who[x]*/  return new Property("who[x]", "uri|Reference(Practitioner|RelatedPerson|Patient|Device|Organization)", "A reference to an application-usable description of the identity that signed  (e.g. the signature used their private key).", 0, 1, who);
428        case 117694: /*who*/  return new Property("who[x]", "uri|Reference(Practitioner|RelatedPerson|Patient|Device|Organization)", "A reference to an application-usable description of the identity that signed  (e.g. the signature used their private key).", 0, 1, who);
429        case -788660018: /*whoUri*/  return new Property("who[x]", "uri|Reference(Practitioner|RelatedPerson|Patient|Device|Organization)", "A reference to an application-usable description of the identity that signed  (e.g. the signature used their private key).", 0, 1, who);
430        case 1017243949: /*whoReference*/  return new Property("who[x]", "uri|Reference(Practitioner|RelatedPerson|Patient|Device|Organization)", "A reference to an application-usable description of the identity that signed  (e.g. the signature used their private key).", 0, 1, who);
431        case 418120340: /*onBehalfOf[x]*/  return new Property("onBehalfOf[x]", "uri|Reference(Practitioner|RelatedPerson|Patient|Device|Organization)", "A reference to an application-usable description of the identity that is represented by the signature.", 0, 1, onBehalfOf);
432        case -14402964: /*onBehalfOf*/  return new Property("onBehalfOf[x]", "uri|Reference(Practitioner|RelatedPerson|Patient|Device|Organization)", "A reference to an application-usable description of the identity that is represented by the signature.", 0, 1, onBehalfOf);
433        case 418114400: /*onBehalfOfUri*/  return new Property("onBehalfOf[x]", "uri|Reference(Practitioner|RelatedPerson|Patient|Device|Organization)", "A reference to an application-usable description of the identity that is represented by the signature.", 0, 1, onBehalfOf);
434        case -1136255425: /*onBehalfOfReference*/  return new Property("onBehalfOf[x]", "uri|Reference(Practitioner|RelatedPerson|Patient|Device|Organization)", "A reference to an application-usable description of the identity that is represented by the signature.", 0, 1, onBehalfOf);
435        case -389131437: /*contentType*/  return new Property("contentType", "code", "A mime type that indicates the technical format of the signature. Important mime types are application/signature+xml for X ML DigSig, application/jwt for JWT, and image/* for a graphical image of a signature, etc.", 0, 1, contentType);
436        case 3026845: /*blob*/  return new Property("blob", "base64Binary", "The base64 encoding of the Signature content. When signature is not recorded electronically this element would be empty.", 0, 1, blob);
437        default: return super.getNamedProperty(_hash, _name, _checkValid);
438        }
439
440      }
441
442      @Override
443      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
444        switch (hash) {
445        case 3575610: /*type*/ return this.type == null ? new Base[0] : this.type.toArray(new Base[this.type.size()]); // Coding
446        case 3648314: /*when*/ return this.when == null ? new Base[0] : new Base[] {this.when}; // InstantType
447        case 117694: /*who*/ return this.who == null ? new Base[0] : new Base[] {this.who}; // Type
448        case -14402964: /*onBehalfOf*/ return this.onBehalfOf == null ? new Base[0] : new Base[] {this.onBehalfOf}; // Type
449        case -389131437: /*contentType*/ return this.contentType == null ? new Base[0] : new Base[] {this.contentType}; // CodeType
450        case 3026845: /*blob*/ return this.blob == null ? new Base[0] : new Base[] {this.blob}; // Base64BinaryType
451        default: return super.getProperty(hash, name, checkValid);
452        }
453
454      }
455
456      @Override
457      public Base setProperty(int hash, String name, Base value) throws FHIRException {
458        switch (hash) {
459        case 3575610: // type
460          this.getType().add(castToCoding(value)); // Coding
461          return value;
462        case 3648314: // when
463          this.when = castToInstant(value); // InstantType
464          return value;
465        case 117694: // who
466          this.who = castToType(value); // Type
467          return value;
468        case -14402964: // onBehalfOf
469          this.onBehalfOf = castToType(value); // Type
470          return value;
471        case -389131437: // contentType
472          this.contentType = castToCode(value); // CodeType
473          return value;
474        case 3026845: // blob
475          this.blob = castToBase64Binary(value); // Base64BinaryType
476          return value;
477        default: return super.setProperty(hash, name, value);
478        }
479
480      }
481
482      @Override
483      public Base setProperty(String name, Base value) throws FHIRException {
484        if (name.equals("type")) {
485          this.getType().add(castToCoding(value));
486        } else if (name.equals("when")) {
487          this.when = castToInstant(value); // InstantType
488        } else if (name.equals("who[x]")) {
489          this.who = castToType(value); // Type
490        } else if (name.equals("onBehalfOf[x]")) {
491          this.onBehalfOf = castToType(value); // Type
492        } else if (name.equals("contentType")) {
493          this.contentType = castToCode(value); // CodeType
494        } else if (name.equals("blob")) {
495          this.blob = castToBase64Binary(value); // Base64BinaryType
496        } else
497          return super.setProperty(name, value);
498        return value;
499      }
500
501      @Override
502      public Base makeProperty(int hash, String name) throws FHIRException {
503        switch (hash) {
504        case 3575610:  return addType(); 
505        case 3648314:  return getWhenElement();
506        case -788654078:  return getWho(); 
507        case 117694:  return getWho(); 
508        case 418120340:  return getOnBehalfOf(); 
509        case -14402964:  return getOnBehalfOf(); 
510        case -389131437:  return getContentTypeElement();
511        case 3026845:  return getBlobElement();
512        default: return super.makeProperty(hash, name);
513        }
514
515      }
516
517      @Override
518      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
519        switch (hash) {
520        case 3575610: /*type*/ return new String[] {"Coding"};
521        case 3648314: /*when*/ return new String[] {"instant"};
522        case 117694: /*who*/ return new String[] {"uri", "Reference"};
523        case -14402964: /*onBehalfOf*/ return new String[] {"uri", "Reference"};
524        case -389131437: /*contentType*/ return new String[] {"code"};
525        case 3026845: /*blob*/ return new String[] {"base64Binary"};
526        default: return super.getTypesForProperty(hash, name);
527        }
528
529      }
530
531      @Override
532      public Base addChild(String name) throws FHIRException {
533        if (name.equals("type")) {
534          return addType();
535        }
536        else if (name.equals("when")) {
537          throw new FHIRException("Cannot call addChild on a primitive type Signature.when");
538        }
539        else if (name.equals("whoUri")) {
540          this.who = new UriType();
541          return this.who;
542        }
543        else if (name.equals("whoReference")) {
544          this.who = new Reference();
545          return this.who;
546        }
547        else if (name.equals("onBehalfOfUri")) {
548          this.onBehalfOf = new UriType();
549          return this.onBehalfOf;
550        }
551        else if (name.equals("onBehalfOfReference")) {
552          this.onBehalfOf = new Reference();
553          return this.onBehalfOf;
554        }
555        else if (name.equals("contentType")) {
556          throw new FHIRException("Cannot call addChild on a primitive type Signature.contentType");
557        }
558        else if (name.equals("blob")) {
559          throw new FHIRException("Cannot call addChild on a primitive type Signature.blob");
560        }
561        else
562          return super.addChild(name);
563      }
564
565  public String fhirType() {
566    return "Signature";
567
568  }
569
570      public Signature copy() {
571        Signature dst = new Signature();
572        copyValues(dst);
573        if (type != null) {
574          dst.type = new ArrayList<Coding>();
575          for (Coding i : type)
576            dst.type.add(i.copy());
577        };
578        dst.when = when == null ? null : when.copy();
579        dst.who = who == null ? null : who.copy();
580        dst.onBehalfOf = onBehalfOf == null ? null : onBehalfOf.copy();
581        dst.contentType = contentType == null ? null : contentType.copy();
582        dst.blob = blob == null ? null : blob.copy();
583        return dst;
584      }
585
586      protected Signature typedCopy() {
587        return copy();
588      }
589
590      @Override
591      public boolean equalsDeep(Base other_) {
592        if (!super.equalsDeep(other_))
593          return false;
594        if (!(other_ instanceof Signature))
595          return false;
596        Signature o = (Signature) other_;
597        return compareDeep(type, o.type, true) && compareDeep(when, o.when, true) && compareDeep(who, o.who, true)
598           && compareDeep(onBehalfOf, o.onBehalfOf, true) && compareDeep(contentType, o.contentType, true)
599           && compareDeep(blob, o.blob, true);
600      }
601
602      @Override
603      public boolean equalsShallow(Base other_) {
604        if (!super.equalsShallow(other_))
605          return false;
606        if (!(other_ instanceof Signature))
607          return false;
608        Signature o = (Signature) other_;
609        return compareValues(when, o.when, true) && compareValues(contentType, o.contentType, true) && compareValues(blob, o.blob, true)
610          ;
611      }
612
613      public boolean isEmpty() {
614        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, when, who, onBehalfOf
615          , contentType, blob);
616      }
617
618
619}