001package org.hl7.fhir.r4.model;
002
003/*
004  Copyright (c) 2011+, HL7, Inc.
005  All rights reserved.
006  
007  Redistribution and use in source and binary forms, with or without modification, 
008  are permitted provided that the following conditions are met:
009  
010   * Redistributions of source code must retain the above copyright notice, this 
011     list of conditions and the following disclaimer.
012   * Redistributions in binary form must reproduce the above copyright notice, 
013     this list of conditions and the following disclaimer in the documentation 
014     and/or other materials provided with the distribution.
015   * Neither the name of HL7 nor the names of its contributors may be used to 
016     endorse or promote products derived from this software without specific 
017     prior written permission.
018  
019  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
020  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
021  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
022  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
023  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
024  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
025  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
026  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
027  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
028  POSSIBILITY OF SUCH DAMAGE.
029  
030*/
031
032// Generated on Tue, May 12, 2020 07:26+1000 for FHIR v4.0.1
033import java.util.List;
034
035import org.hl7.fhir.exceptions.FHIRException;
036import org.hl7.fhir.instance.model.api.IAnyResource;
037import org.hl7.fhir.utilities.Utilities;
038
039import ca.uhn.fhir.model.api.annotation.Child;
040import ca.uhn.fhir.model.api.annotation.Description;
041
042/**
043 * This is the base resource type for everything.
044 */
045public abstract class Resource extends BaseResource implements IAnyResource {
046
047  /**
048   * The logical id of the resource, as used in the URL for the resource. Once
049   * assigned, this value never changes.
050   */
051  @Child(name = "id", type = { IdType.class }, order = 0, min = 0, max = 1, modifier = false, summary = true)
052  @Description(shortDefinition = "Logical id of this artifact", formalDefinition = "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.")
053  protected IdType id;
054
055  /**
056   * The metadata about the resource. This is content that is maintained by the
057   * infrastructure. Changes to the content might not always be associated with
058   * version changes to the resource.
059   */
060  @Child(name = "meta", type = { Meta.class }, order = 1, min = 0, max = 1, modifier = false, summary = true)
061  @Description(shortDefinition = "Metadata about the resource", formalDefinition = "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.")
062  protected Meta meta;
063
064  /**
065   * A reference to a set of rules that were followed when the resource was
066   * constructed, and which must be understood when processing the content. Often,
067   * this is a reference to an implementation guide that defines the special rules
068   * along with other profiles etc.
069   */
070  @Child(name = "implicitRules", type = { UriType.class }, order = 2, min = 0, max = 1, modifier = true, summary = true)
071  @Description(shortDefinition = "A set of rules under which this content was created", formalDefinition = "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.")
072  protected UriType implicitRules;
073
074  /**
075   * The base language in which the resource is written.
076   */
077  @Child(name = "language", type = { CodeType.class }, order = 3, min = 0, max = 1, modifier = false, summary = false)
078  @Description(shortDefinition = "Language of the resource content", formalDefinition = "The base language in which the resource is written.")
079  @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/languages")
080  protected CodeType language;
081
082  private static final long serialVersionUID = -559462759L;
083
084  /**
085   * Constructor
086   */
087  public Resource() {
088    super();
089  }
090
091  /**
092   * @return {@link #id} (The logical id of the resource, as used in the URL for
093   *         the resource. Once assigned, this value never changes.). This is the
094   *         underlying object with id, value and extensions. The accessor "getId"
095   *         gives direct access to the value
096   */
097  public IdType getIdElement() {
098    if (this.id == null)
099      if (Configuration.errorOnAutoCreate())
100        throw new Error("Attempt to auto-create Resource.id");
101      else if (Configuration.doAutoCreate())
102        this.id = new IdType(); // bb
103    return this.id;
104  }
105
106  public boolean hasIdElement() {
107    return this.id != null && !this.id.isEmpty();
108  }
109
110  public boolean hasId() {
111    return this.id != null && !this.id.isEmpty();
112  }
113
114  /**
115   * @param value {@link #id} (The logical id of the resource, as used in the URL
116   *              for the resource. Once assigned, this value never changes.).
117   *              This is the underlying object with id, value and extensions. The
118   *              accessor "getId" gives direct access to the value
119   */
120  public Resource setIdElement(IdType value) {
121    this.id = value;
122    return this;
123  }
124
125  /**
126   * @return The most complete id value of the resource, containing all available
127   *         context and history. Once assigned this value never changes. NOTE:
128   *         this value is NOT limited to just the logical id property of a
129   *         resource id.
130   * @see IdType
131   * @see IdType#getValue()
132   */
133  public String getId() {
134    return this.id == null ? null : this.id.getValue();
135  }
136
137  /**
138   * @param value The id value of the resource. Once assigned, this value never
139   *              changes.
140   *
141   * @see IdType
142   * @see IdType#setValue(String)
143   */
144  public Resource setId(String value) {
145    if (Utilities.noString(value))
146      this.id = null;
147    else {
148      if (this.id == null)
149        this.id = new IdType();
150      this.id.setValue(value);
151    }
152    return this;
153  }
154
155  /**
156   * @return the logical ID part of this resource's id
157   * @see IdType#getIdPart()
158   */
159  public String getIdPart() {
160    return getIdElement().getIdPart();
161  }
162
163  /**
164   * @return {@link #meta} (The metadata about the resource. This is content that
165   *         is maintained by the infrastructure. Changes to the content might not
166   *         always be associated with version changes to the resource.)
167   */
168  public Meta getMeta() {
169    if (this.meta == null)
170      if (Configuration.errorOnAutoCreate())
171        throw new Error("Attempt to auto-create Resource.meta");
172      else if (Configuration.doAutoCreate())
173        this.meta = new Meta(); // cc
174    return this.meta;
175  }
176
177  public boolean hasMeta() {
178    return this.meta != null && !this.meta.isEmpty();
179  }
180
181  /**
182   * @param value {@link #meta} (The metadata about the resource. This is content
183   *              that is maintained by the infrastructure. Changes to the content
184   *              might not always be associated with version changes to the
185   *              resource.)
186   */
187  public Resource setMeta(Meta value) {
188    this.meta = value;
189    return this;
190  }
191
192  /**
193   * @return {@link #implicitRules} (A reference to a set of rules that were
194   *         followed when the resource was constructed, and which must be
195   *         understood when processing the content. Often, this is a reference to
196   *         an implementation guide that defines the special rules along with
197   *         other profiles etc.). This is the underlying object with id, value
198   *         and extensions. The accessor "getImplicitRules" gives direct access
199   *         to the value
200   */
201  public UriType getImplicitRulesElement() {
202    if (this.implicitRules == null)
203      if (Configuration.errorOnAutoCreate())
204        throw new Error("Attempt to auto-create Resource.implicitRules");
205      else if (Configuration.doAutoCreate())
206        this.implicitRules = new UriType(); // bb
207    return this.implicitRules;
208  }
209
210  public boolean hasImplicitRulesElement() {
211    return this.implicitRules != null && !this.implicitRules.isEmpty();
212  }
213
214  public boolean hasImplicitRules() {
215    return this.implicitRules != null && !this.implicitRules.isEmpty();
216  }
217
218  /**
219   * @param value {@link #implicitRules} (A reference to a set of rules that were
220   *              followed when the resource was constructed, and which must be
221   *              understood when processing the content. Often, this is a
222   *              reference to an implementation guide that defines the special
223   *              rules along with other profiles etc.). This is the underlying
224   *              object with id, value and extensions. The accessor
225   *              "getImplicitRules" gives direct access to the value
226   */
227  public Resource setImplicitRulesElement(UriType value) {
228    this.implicitRules = value;
229    return this;
230  }
231
232  /**
233   * @return A reference to a set of rules that were followed when the resource
234   *         was constructed, and which must be understood when processing the
235   *         content. Often, this is a reference to an implementation guide that
236   *         defines the special rules along with other profiles etc.
237   */
238  public String getImplicitRules() {
239    return this.implicitRules == null ? null : this.implicitRules.getValue();
240  }
241
242  /**
243   * @param value A reference to a set of rules that were followed when the
244   *              resource was constructed, and which must be understood when
245   *              processing the content. Often, this is a reference to an
246   *              implementation guide that defines the special rules along with
247   *              other profiles etc.
248   */
249  public Resource setImplicitRules(String value) {
250    if (Utilities.noString(value))
251      this.implicitRules = null;
252    else {
253      if (this.implicitRules == null)
254        this.implicitRules = new UriType();
255      this.implicitRules.setValue(value);
256    }
257    return this;
258  }
259
260  /**
261   * @return {@link #language} (The base language in which the resource is
262   *         written.). This is the underlying object with id, value and
263   *         extensions. The accessor "getLanguage" gives direct access to the
264   *         value
265   */
266  public CodeType getLanguageElement() {
267    if (this.language == null)
268      if (Configuration.errorOnAutoCreate())
269        throw new Error("Attempt to auto-create Resource.language");
270      else if (Configuration.doAutoCreate())
271        this.language = new CodeType(); // bb
272    return this.language;
273  }
274
275  public boolean hasLanguageElement() {
276    return this.language != null && !this.language.isEmpty();
277  }
278
279  public boolean hasLanguage() {
280    return this.language != null && !this.language.isEmpty();
281  }
282
283  /**
284   * @param value {@link #language} (The base language in which the resource is
285   *              written.). This is the underlying object with id, value and
286   *              extensions. The accessor "getLanguage" gives direct access to
287   *              the value
288   */
289  public Resource setLanguageElement(CodeType value) {
290    this.language = value;
291    return this;
292  }
293
294  /**
295   * @return The base language in which the resource is written.
296   */
297  public String getLanguage() {
298    return this.language == null ? null : this.language.getValue();
299  }
300
301  /**
302   * @param value The base language in which the resource is written.
303   */
304  public Resource setLanguage(String value) {
305    if (Utilities.noString(value))
306      this.language = null;
307    else {
308      if (this.language == null)
309        this.language = new CodeType();
310      this.language.setValue(value);
311    }
312    return this;
313  }
314
315  protected void listChildren(List<Property> children) {
316    children.add(new Property("id", "id",
317        "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.",
318        0, 1, id));
319    children.add(new Property("meta", "Meta",
320        "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.",
321        0, 1, meta));
322    children.add(new Property("implicitRules", "uri",
323        "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.",
324        0, 1, implicitRules));
325    children
326        .add(new Property("language", "code", "The base language in which the resource is written.", 0, 1, language));
327  }
328
329  @Override
330  public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
331    switch (_hash) {
332    case 3355:
333      /* id */ return new Property("id", "id",
334          "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.",
335          0, 1, id);
336    case 3347973:
337      /* meta */ return new Property("meta", "Meta",
338          "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.",
339          0, 1, meta);
340    case -961826286:
341      /* implicitRules */ return new Property("implicitRules", "uri",
342          "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.",
343          0, 1, implicitRules);
344    case -1613589672:
345      /* language */ return new Property("language", "code", "The base language in which the resource is written.", 0,
346          1, language);
347    default:
348      return super.getNamedProperty(_hash, _name, _checkValid);
349    }
350
351  }
352
353  @Override
354  public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
355    switch (hash) {
356    case 3355:
357      /* id */ return this.id == null ? new Base[0] : new Base[] { this.id }; // IdType
358    case 3347973:
359      /* meta */ return this.meta == null ? new Base[0] : new Base[] { this.meta }; // Meta
360    case -961826286:
361      /* implicitRules */ return this.implicitRules == null ? new Base[0] : new Base[] { this.implicitRules }; // UriType
362    case -1613589672:
363      /* language */ return this.language == null ? new Base[0] : new Base[] { this.language }; // CodeType
364    default:
365      return super.getProperty(hash, name, checkValid);
366    }
367
368  }
369
370  @Override
371  public Base setProperty(int hash, String name, Base value) throws FHIRException {
372    switch (hash) {
373    case 3355: // id
374      this.id = castToId(value); // IdType
375      return value;
376    case 3347973: // meta
377      this.meta = castToMeta(value); // Meta
378      return value;
379    case -961826286: // implicitRules
380      this.implicitRules = castToUri(value); // UriType
381      return value;
382    case -1613589672: // language
383      this.language = castToCode(value); // CodeType
384      return value;
385    default:
386      return super.setProperty(hash, name, value);
387    }
388
389  }
390
391  @Override
392  public Base setProperty(String name, Base value) throws FHIRException {
393    if (name.equals("id")) {
394      this.id = castToId(value); // IdType
395    } else if (name.equals("meta")) {
396      this.meta = castToMeta(value); // Meta
397    } else if (name.equals("implicitRules")) {
398      this.implicitRules = castToUri(value); // UriType
399    } else if (name.equals("language")) {
400      this.language = castToCode(value); // CodeType
401    } else
402      return super.setProperty(name, value);
403    return value;
404  }
405
406  @Override
407  public void removeChild(String name, Base value) throws FHIRException {
408    if (name.equals("id")) {
409      this.id = null;
410    } else if (name.equals("meta")) {
411      this.meta = null;
412    } else if (name.equals("implicitRules")) {
413      this.implicitRules = null;
414    } else if (name.equals("language")) {
415      this.language = null;
416    } else
417      super.removeChild(name, value);
418    
419  }
420
421  @Override
422  public Base makeProperty(int hash, String name) throws FHIRException {
423    switch (hash) {
424    case 3355:
425      return getIdElement();
426    case 3347973:
427      return getMeta();
428    case -961826286:
429      return getImplicitRulesElement();
430    case -1613589672:
431      return getLanguageElement();
432    default:
433      return super.makeProperty(hash, name);
434    }
435
436  }
437
438  @Override
439  public String[] getTypesForProperty(int hash, String name) throws FHIRException {
440    switch (hash) {
441    case 3355:
442      /* id */ return new String[] { "id" };
443    case 3347973:
444      /* meta */ return new String[] { "Meta" };
445    case -961826286:
446      /* implicitRules */ return new String[] { "uri" };
447    case -1613589672:
448      /* language */ return new String[] { "code" };
449    default:
450      return super.getTypesForProperty(hash, name);
451    }
452
453  }
454
455  @Override
456  public Base addChild(String name) throws FHIRException {
457    if (name.equals("id")) {
458      throw new FHIRException("Cannot call addChild on a singleton property Resource.id");
459    } else if (name.equals("meta")) {
460      this.meta = new Meta();
461      return this.meta;
462    } else if (name.equals("implicitRules")) {
463      throw new FHIRException("Cannot call addChild on a singleton property Resource.implicitRules");
464    } else if (name.equals("language")) {
465      throw new FHIRException("Cannot call addChild on a singleton property Resource.language");
466    } else
467      return super.addChild(name);
468  }
469
470  public String fhirType() {
471    return "Resource";
472
473  }
474
475  public abstract Resource copy();
476
477  public void copyValues(Resource dst) {
478    dst.id = id == null ? null : id.copy();
479    dst.meta = meta == null ? null : meta.copy();
480    dst.implicitRules = implicitRules == null ? null : implicitRules.copy();
481    dst.language = language == null ? null : language.copy();
482  }
483
484  @Override
485  public boolean equalsDeep(Base other_) {
486    if (!super.equalsDeep(other_))
487      return false;
488    if (!(other_ instanceof Resource))
489      return false;
490    Resource o = (Resource) other_;
491    return compareDeep(id, o.id, true) && compareDeep(meta, o.meta, true)
492        && compareDeep(implicitRules, o.implicitRules, true) && compareDeep(language, o.language, true);
493  }
494
495  @Override
496  public boolean equalsShallow(Base other_) {
497    if (!super.equalsShallow(other_))
498      return false;
499    if (!(other_ instanceof Resource))
500      return false;
501    Resource o = (Resource) other_;
502    return compareValues(id, o.id, true) && compareValues(implicitRules, o.implicitRules, true)
503        && compareValues(language, o.language, true);
504  }
505
506  public boolean isEmpty() {
507    return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(id, meta, implicitRules, language);
508  }
509
510  @Override
511  public String getIdBase() {
512    return getId();
513  }
514
515  @Override
516  public void setIdBase(String value) {
517    setId(value);
518  }
519
520  public abstract ResourceType getResourceType();
521// added from java-adornments.txt:
522
523  public String getLanguage(String defValue) {
524    return hasLanguage() ? getLanguage() : defValue;
525  }
526
527// end addition
528
529}