001package org.hl7.fhir.r5.model;
002
003
004/*
005  Copyright (c) 2011+, HL7, Inc.
006  All rights reserved.
007  
008  Redistribution and use in source and binary forms, with or without modification, \
009  are permitted provided that the following conditions are met:
010  
011   * Redistributions of source code must retain the above copyright notice, this \
012     list of conditions and the following disclaimer.
013   * Redistributions in binary form must reproduce the above copyright notice, \
014     this list of conditions and the following disclaimer in the documentation \
015     and/or other materials provided with the distribution.
016   * Neither the name of HL7 nor the names of its contributors may be used to 
017     endorse or promote products derived from this software without specific 
018     prior written permission.
019  
020  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND \
021  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED \
022  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \
023  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, \
024  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT \
025  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR \
026  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, \
027  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \
028  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \
029  POSSIBILITY OF SUCH DAMAGE.
030  */
031
032// Generated on Tue, Dec 28, 2021 07:16+1100 for FHIR v5.0.0-snapshot1
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.utilities.Utilities;
038import org.hl7.fhir.r5.model.Enumerations.*;
039import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
040import org.hl7.fhir.exceptions.FHIRException;
041import org.hl7.fhir.instance.model.api.ICompositeType;
042import ca.uhn.fhir.model.api.annotation.ResourceDef;
043import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
044import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
045import ca.uhn.fhir.model.api.annotation.Child;
046import ca.uhn.fhir.model.api.annotation.ChildOrder;
047import ca.uhn.fhir.model.api.annotation.Description;
048import ca.uhn.fhir.model.api.annotation.Block;
049
050/**
051 * Detailed definition of a medicinal product, typically for uses other than direct patient care (e.g. regulatory use, drug catalogs).
052 */
053@ResourceDef(name="MedicinalProductDefinition", profile="http://hl7.org/fhir/StructureDefinition/MedicinalProductDefinition")
054public class MedicinalProductDefinition extends DomainResource {
055
056    @Block()
057    public static class MedicinalProductDefinitionContactComponent extends BackboneElement implements IBaseBackboneElement {
058        /**
059         * Allows the contact to be classified, for example QPPV, Pharmacovigilance Enquiry Information.
060         */
061        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=true)
062        @Description(shortDefinition="Allows the contact to be classified, for example QPPV, Pharmacovigilance Enquiry Information", formalDefinition="Allows the contact to be classified, for example QPPV, Pharmacovigilance Enquiry Information." )
063        protected CodeableConcept type;
064
065        /**
066         * A product specific contact, person (in a role), or an organization.
067         */
068        @Child(name = "contact", type = {Organization.class, PractitionerRole.class}, order=2, min=1, max=1, modifier=false, summary=true)
069        @Description(shortDefinition="A product specific contact, person (in a role), or an organization", formalDefinition="A product specific contact, person (in a role), or an organization." )
070        protected Reference contact;
071
072        private static final long serialVersionUID = -587616244L;
073
074    /**
075     * Constructor
076     */
077      public MedicinalProductDefinitionContactComponent() {
078        super();
079      }
080
081    /**
082     * Constructor
083     */
084      public MedicinalProductDefinitionContactComponent(Reference contact) {
085        super();
086        this.setContact(contact);
087      }
088
089        /**
090         * @return {@link #type} (Allows the contact to be classified, for example QPPV, Pharmacovigilance Enquiry Information.)
091         */
092        public CodeableConcept getType() { 
093          if (this.type == null)
094            if (Configuration.errorOnAutoCreate())
095              throw new Error("Attempt to auto-create MedicinalProductDefinitionContactComponent.type");
096            else if (Configuration.doAutoCreate())
097              this.type = new CodeableConcept(); // cc
098          return this.type;
099        }
100
101        public boolean hasType() { 
102          return this.type != null && !this.type.isEmpty();
103        }
104
105        /**
106         * @param value {@link #type} (Allows the contact to be classified, for example QPPV, Pharmacovigilance Enquiry Information.)
107         */
108        public MedicinalProductDefinitionContactComponent setType(CodeableConcept value) { 
109          this.type = value;
110          return this;
111        }
112
113        /**
114         * @return {@link #contact} (A product specific contact, person (in a role), or an organization.)
115         */
116        public Reference getContact() { 
117          if (this.contact == null)
118            if (Configuration.errorOnAutoCreate())
119              throw new Error("Attempt to auto-create MedicinalProductDefinitionContactComponent.contact");
120            else if (Configuration.doAutoCreate())
121              this.contact = new Reference(); // cc
122          return this.contact;
123        }
124
125        public boolean hasContact() { 
126          return this.contact != null && !this.contact.isEmpty();
127        }
128
129        /**
130         * @param value {@link #contact} (A product specific contact, person (in a role), or an organization.)
131         */
132        public MedicinalProductDefinitionContactComponent setContact(Reference value) { 
133          this.contact = value;
134          return this;
135        }
136
137        protected void listChildren(List<Property> children) {
138          super.listChildren(children);
139          children.add(new Property("type", "CodeableConcept", "Allows the contact to be classified, for example QPPV, Pharmacovigilance Enquiry Information.", 0, 1, type));
140          children.add(new Property("contact", "Reference(Organization|PractitionerRole)", "A product specific contact, person (in a role), or an organization.", 0, 1, contact));
141        }
142
143        @Override
144        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
145          switch (_hash) {
146          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Allows the contact to be classified, for example QPPV, Pharmacovigilance Enquiry Information.", 0, 1, type);
147          case 951526432: /*contact*/  return new Property("contact", "Reference(Organization|PractitionerRole)", "A product specific contact, person (in a role), or an organization.", 0, 1, contact);
148          default: return super.getNamedProperty(_hash, _name, _checkValid);
149          }
150
151        }
152
153      @Override
154      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
155        switch (hash) {
156        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
157        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : new Base[] {this.contact}; // Reference
158        default: return super.getProperty(hash, name, checkValid);
159        }
160
161      }
162
163      @Override
164      public Base setProperty(int hash, String name, Base value) throws FHIRException {
165        switch (hash) {
166        case 3575610: // type
167          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
168          return value;
169        case 951526432: // contact
170          this.contact = TypeConvertor.castToReference(value); // Reference
171          return value;
172        default: return super.setProperty(hash, name, value);
173        }
174
175      }
176
177      @Override
178      public Base setProperty(String name, Base value) throws FHIRException {
179        if (name.equals("type")) {
180          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
181        } else if (name.equals("contact")) {
182          this.contact = TypeConvertor.castToReference(value); // Reference
183        } else
184          return super.setProperty(name, value);
185        return value;
186      }
187
188      @Override
189      public Base makeProperty(int hash, String name) throws FHIRException {
190        switch (hash) {
191        case 3575610:  return getType();
192        case 951526432:  return getContact();
193        default: return super.makeProperty(hash, name);
194        }
195
196      }
197
198      @Override
199      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
200        switch (hash) {
201        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
202        case 951526432: /*contact*/ return new String[] {"Reference"};
203        default: return super.getTypesForProperty(hash, name);
204        }
205
206      }
207
208      @Override
209      public Base addChild(String name) throws FHIRException {
210        if (name.equals("type")) {
211          this.type = new CodeableConcept();
212          return this.type;
213        }
214        else if (name.equals("contact")) {
215          this.contact = new Reference();
216          return this.contact;
217        }
218        else
219          return super.addChild(name);
220      }
221
222      public MedicinalProductDefinitionContactComponent copy() {
223        MedicinalProductDefinitionContactComponent dst = new MedicinalProductDefinitionContactComponent();
224        copyValues(dst);
225        return dst;
226      }
227
228      public void copyValues(MedicinalProductDefinitionContactComponent dst) {
229        super.copyValues(dst);
230        dst.type = type == null ? null : type.copy();
231        dst.contact = contact == null ? null : contact.copy();
232      }
233
234      @Override
235      public boolean equalsDeep(Base other_) {
236        if (!super.equalsDeep(other_))
237          return false;
238        if (!(other_ instanceof MedicinalProductDefinitionContactComponent))
239          return false;
240        MedicinalProductDefinitionContactComponent o = (MedicinalProductDefinitionContactComponent) other_;
241        return compareDeep(type, o.type, true) && compareDeep(contact, o.contact, true);
242      }
243
244      @Override
245      public boolean equalsShallow(Base other_) {
246        if (!super.equalsShallow(other_))
247          return false;
248        if (!(other_ instanceof MedicinalProductDefinitionContactComponent))
249          return false;
250        MedicinalProductDefinitionContactComponent o = (MedicinalProductDefinitionContactComponent) other_;
251        return true;
252      }
253
254      public boolean isEmpty() {
255        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, contact);
256      }
257
258  public String fhirType() {
259    return "MedicinalProductDefinition.contact";
260
261  }
262
263  }
264
265    @Block()
266    public static class MedicinalProductDefinitionNameComponent extends BackboneElement implements IBaseBackboneElement {
267        /**
268         * The full product name.
269         */
270        @Child(name = "productName", type = {StringType.class}, order=1, min=1, max=1, modifier=false, summary=true)
271        @Description(shortDefinition="The full product name", formalDefinition="The full product name." )
272        protected StringType productName;
273
274        /**
275         * Type of product name, such as rINN, BAN, Proprietary, Non-Proprietary.
276         */
277        @Child(name = "type", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=true)
278        @Description(shortDefinition="Type of product name, such as rINN, BAN, Proprietary, Non-Proprietary", formalDefinition="Type of product name, such as rINN, BAN, Proprietary, Non-Proprietary." )
279        protected CodeableConcept type;
280
281        /**
282         * Coding words or phrases of the name.
283         */
284        @Child(name = "namePart", type = {}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
285        @Description(shortDefinition="Coding words or phrases of the name", formalDefinition="Coding words or phrases of the name." )
286        protected List<MedicinalProductDefinitionNameNamePartComponent> namePart;
287
288        /**
289         * Country where the name applies.
290         */
291        @Child(name = "countryLanguage", type = {}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
292        @Description(shortDefinition="Country where the name applies", formalDefinition="Country where the name applies." )
293        protected List<MedicinalProductDefinitionNameCountryLanguageComponent> countryLanguage;
294
295        private static final long serialVersionUID = 829861294L;
296
297    /**
298     * Constructor
299     */
300      public MedicinalProductDefinitionNameComponent() {
301        super();
302      }
303
304    /**
305     * Constructor
306     */
307      public MedicinalProductDefinitionNameComponent(String productName) {
308        super();
309        this.setProductName(productName);
310      }
311
312        /**
313         * @return {@link #productName} (The full product name.). This is the underlying object with id, value and extensions. The accessor "getProductName" gives direct access to the value
314         */
315        public StringType getProductNameElement() { 
316          if (this.productName == null)
317            if (Configuration.errorOnAutoCreate())
318              throw new Error("Attempt to auto-create MedicinalProductDefinitionNameComponent.productName");
319            else if (Configuration.doAutoCreate())
320              this.productName = new StringType(); // bb
321          return this.productName;
322        }
323
324        public boolean hasProductNameElement() { 
325          return this.productName != null && !this.productName.isEmpty();
326        }
327
328        public boolean hasProductName() { 
329          return this.productName != null && !this.productName.isEmpty();
330        }
331
332        /**
333         * @param value {@link #productName} (The full product name.). This is the underlying object with id, value and extensions. The accessor "getProductName" gives direct access to the value
334         */
335        public MedicinalProductDefinitionNameComponent setProductNameElement(StringType value) { 
336          this.productName = value;
337          return this;
338        }
339
340        /**
341         * @return The full product name.
342         */
343        public String getProductName() { 
344          return this.productName == null ? null : this.productName.getValue();
345        }
346
347        /**
348         * @param value The full product name.
349         */
350        public MedicinalProductDefinitionNameComponent setProductName(String value) { 
351            if (this.productName == null)
352              this.productName = new StringType();
353            this.productName.setValue(value);
354          return this;
355        }
356
357        /**
358         * @return {@link #type} (Type of product name, such as rINN, BAN, Proprietary, Non-Proprietary.)
359         */
360        public CodeableConcept getType() { 
361          if (this.type == null)
362            if (Configuration.errorOnAutoCreate())
363              throw new Error("Attempt to auto-create MedicinalProductDefinitionNameComponent.type");
364            else if (Configuration.doAutoCreate())
365              this.type = new CodeableConcept(); // cc
366          return this.type;
367        }
368
369        public boolean hasType() { 
370          return this.type != null && !this.type.isEmpty();
371        }
372
373        /**
374         * @param value {@link #type} (Type of product name, such as rINN, BAN, Proprietary, Non-Proprietary.)
375         */
376        public MedicinalProductDefinitionNameComponent setType(CodeableConcept value) { 
377          this.type = value;
378          return this;
379        }
380
381        /**
382         * @return {@link #namePart} (Coding words or phrases of the name.)
383         */
384        public List<MedicinalProductDefinitionNameNamePartComponent> getNamePart() { 
385          if (this.namePart == null)
386            this.namePart = new ArrayList<MedicinalProductDefinitionNameNamePartComponent>();
387          return this.namePart;
388        }
389
390        /**
391         * @return Returns a reference to <code>this</code> for easy method chaining
392         */
393        public MedicinalProductDefinitionNameComponent setNamePart(List<MedicinalProductDefinitionNameNamePartComponent> theNamePart) { 
394          this.namePart = theNamePart;
395          return this;
396        }
397
398        public boolean hasNamePart() { 
399          if (this.namePart == null)
400            return false;
401          for (MedicinalProductDefinitionNameNamePartComponent item : this.namePart)
402            if (!item.isEmpty())
403              return true;
404          return false;
405        }
406
407        public MedicinalProductDefinitionNameNamePartComponent addNamePart() { //3
408          MedicinalProductDefinitionNameNamePartComponent t = new MedicinalProductDefinitionNameNamePartComponent();
409          if (this.namePart == null)
410            this.namePart = new ArrayList<MedicinalProductDefinitionNameNamePartComponent>();
411          this.namePart.add(t);
412          return t;
413        }
414
415        public MedicinalProductDefinitionNameComponent addNamePart(MedicinalProductDefinitionNameNamePartComponent t) { //3
416          if (t == null)
417            return this;
418          if (this.namePart == null)
419            this.namePart = new ArrayList<MedicinalProductDefinitionNameNamePartComponent>();
420          this.namePart.add(t);
421          return this;
422        }
423
424        /**
425         * @return The first repetition of repeating field {@link #namePart}, creating it if it does not already exist {3}
426         */
427        public MedicinalProductDefinitionNameNamePartComponent getNamePartFirstRep() { 
428          if (getNamePart().isEmpty()) {
429            addNamePart();
430          }
431          return getNamePart().get(0);
432        }
433
434        /**
435         * @return {@link #countryLanguage} (Country where the name applies.)
436         */
437        public List<MedicinalProductDefinitionNameCountryLanguageComponent> getCountryLanguage() { 
438          if (this.countryLanguage == null)
439            this.countryLanguage = new ArrayList<MedicinalProductDefinitionNameCountryLanguageComponent>();
440          return this.countryLanguage;
441        }
442
443        /**
444         * @return Returns a reference to <code>this</code> for easy method chaining
445         */
446        public MedicinalProductDefinitionNameComponent setCountryLanguage(List<MedicinalProductDefinitionNameCountryLanguageComponent> theCountryLanguage) { 
447          this.countryLanguage = theCountryLanguage;
448          return this;
449        }
450
451        public boolean hasCountryLanguage() { 
452          if (this.countryLanguage == null)
453            return false;
454          for (MedicinalProductDefinitionNameCountryLanguageComponent item : this.countryLanguage)
455            if (!item.isEmpty())
456              return true;
457          return false;
458        }
459
460        public MedicinalProductDefinitionNameCountryLanguageComponent addCountryLanguage() { //3
461          MedicinalProductDefinitionNameCountryLanguageComponent t = new MedicinalProductDefinitionNameCountryLanguageComponent();
462          if (this.countryLanguage == null)
463            this.countryLanguage = new ArrayList<MedicinalProductDefinitionNameCountryLanguageComponent>();
464          this.countryLanguage.add(t);
465          return t;
466        }
467
468        public MedicinalProductDefinitionNameComponent addCountryLanguage(MedicinalProductDefinitionNameCountryLanguageComponent t) { //3
469          if (t == null)
470            return this;
471          if (this.countryLanguage == null)
472            this.countryLanguage = new ArrayList<MedicinalProductDefinitionNameCountryLanguageComponent>();
473          this.countryLanguage.add(t);
474          return this;
475        }
476
477        /**
478         * @return The first repetition of repeating field {@link #countryLanguage}, creating it if it does not already exist {3}
479         */
480        public MedicinalProductDefinitionNameCountryLanguageComponent getCountryLanguageFirstRep() { 
481          if (getCountryLanguage().isEmpty()) {
482            addCountryLanguage();
483          }
484          return getCountryLanguage().get(0);
485        }
486
487        protected void listChildren(List<Property> children) {
488          super.listChildren(children);
489          children.add(new Property("productName", "string", "The full product name.", 0, 1, productName));
490          children.add(new Property("type", "CodeableConcept", "Type of product name, such as rINN, BAN, Proprietary, Non-Proprietary.", 0, 1, type));
491          children.add(new Property("namePart", "", "Coding words or phrases of the name.", 0, java.lang.Integer.MAX_VALUE, namePart));
492          children.add(new Property("countryLanguage", "", "Country where the name applies.", 0, java.lang.Integer.MAX_VALUE, countryLanguage));
493        }
494
495        @Override
496        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
497          switch (_hash) {
498          case -1491817446: /*productName*/  return new Property("productName", "string", "The full product name.", 0, 1, productName);
499          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Type of product name, such as rINN, BAN, Proprietary, Non-Proprietary.", 0, 1, type);
500          case 1840452894: /*namePart*/  return new Property("namePart", "", "Coding words or phrases of the name.", 0, java.lang.Integer.MAX_VALUE, namePart);
501          case -141141746: /*countryLanguage*/  return new Property("countryLanguage", "", "Country where the name applies.", 0, java.lang.Integer.MAX_VALUE, countryLanguage);
502          default: return super.getNamedProperty(_hash, _name, _checkValid);
503          }
504
505        }
506
507      @Override
508      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
509        switch (hash) {
510        case -1491817446: /*productName*/ return this.productName == null ? new Base[0] : new Base[] {this.productName}; // StringType
511        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
512        case 1840452894: /*namePart*/ return this.namePart == null ? new Base[0] : this.namePart.toArray(new Base[this.namePart.size()]); // MedicinalProductDefinitionNameNamePartComponent
513        case -141141746: /*countryLanguage*/ return this.countryLanguage == null ? new Base[0] : this.countryLanguage.toArray(new Base[this.countryLanguage.size()]); // MedicinalProductDefinitionNameCountryLanguageComponent
514        default: return super.getProperty(hash, name, checkValid);
515        }
516
517      }
518
519      @Override
520      public Base setProperty(int hash, String name, Base value) throws FHIRException {
521        switch (hash) {
522        case -1491817446: // productName
523          this.productName = TypeConvertor.castToString(value); // StringType
524          return value;
525        case 3575610: // type
526          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
527          return value;
528        case 1840452894: // namePart
529          this.getNamePart().add((MedicinalProductDefinitionNameNamePartComponent) value); // MedicinalProductDefinitionNameNamePartComponent
530          return value;
531        case -141141746: // countryLanguage
532          this.getCountryLanguage().add((MedicinalProductDefinitionNameCountryLanguageComponent) value); // MedicinalProductDefinitionNameCountryLanguageComponent
533          return value;
534        default: return super.setProperty(hash, name, value);
535        }
536
537      }
538
539      @Override
540      public Base setProperty(String name, Base value) throws FHIRException {
541        if (name.equals("productName")) {
542          this.productName = TypeConvertor.castToString(value); // StringType
543        } else if (name.equals("type")) {
544          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
545        } else if (name.equals("namePart")) {
546          this.getNamePart().add((MedicinalProductDefinitionNameNamePartComponent) value);
547        } else if (name.equals("countryLanguage")) {
548          this.getCountryLanguage().add((MedicinalProductDefinitionNameCountryLanguageComponent) value);
549        } else
550          return super.setProperty(name, value);
551        return value;
552      }
553
554      @Override
555      public Base makeProperty(int hash, String name) throws FHIRException {
556        switch (hash) {
557        case -1491817446:  return getProductNameElement();
558        case 3575610:  return getType();
559        case 1840452894:  return addNamePart(); 
560        case -141141746:  return addCountryLanguage(); 
561        default: return super.makeProperty(hash, name);
562        }
563
564      }
565
566      @Override
567      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
568        switch (hash) {
569        case -1491817446: /*productName*/ return new String[] {"string"};
570        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
571        case 1840452894: /*namePart*/ return new String[] {};
572        case -141141746: /*countryLanguage*/ return new String[] {};
573        default: return super.getTypesForProperty(hash, name);
574        }
575
576      }
577
578      @Override
579      public Base addChild(String name) throws FHIRException {
580        if (name.equals("productName")) {
581          throw new FHIRException("Cannot call addChild on a primitive type MedicinalProductDefinition.name.productName");
582        }
583        else if (name.equals("type")) {
584          this.type = new CodeableConcept();
585          return this.type;
586        }
587        else if (name.equals("namePart")) {
588          return addNamePart();
589        }
590        else if (name.equals("countryLanguage")) {
591          return addCountryLanguage();
592        }
593        else
594          return super.addChild(name);
595      }
596
597      public MedicinalProductDefinitionNameComponent copy() {
598        MedicinalProductDefinitionNameComponent dst = new MedicinalProductDefinitionNameComponent();
599        copyValues(dst);
600        return dst;
601      }
602
603      public void copyValues(MedicinalProductDefinitionNameComponent dst) {
604        super.copyValues(dst);
605        dst.productName = productName == null ? null : productName.copy();
606        dst.type = type == null ? null : type.copy();
607        if (namePart != null) {
608          dst.namePart = new ArrayList<MedicinalProductDefinitionNameNamePartComponent>();
609          for (MedicinalProductDefinitionNameNamePartComponent i : namePart)
610            dst.namePart.add(i.copy());
611        };
612        if (countryLanguage != null) {
613          dst.countryLanguage = new ArrayList<MedicinalProductDefinitionNameCountryLanguageComponent>();
614          for (MedicinalProductDefinitionNameCountryLanguageComponent i : countryLanguage)
615            dst.countryLanguage.add(i.copy());
616        };
617      }
618
619      @Override
620      public boolean equalsDeep(Base other_) {
621        if (!super.equalsDeep(other_))
622          return false;
623        if (!(other_ instanceof MedicinalProductDefinitionNameComponent))
624          return false;
625        MedicinalProductDefinitionNameComponent o = (MedicinalProductDefinitionNameComponent) other_;
626        return compareDeep(productName, o.productName, true) && compareDeep(type, o.type, true) && compareDeep(namePart, o.namePart, true)
627           && compareDeep(countryLanguage, o.countryLanguage, true);
628      }
629
630      @Override
631      public boolean equalsShallow(Base other_) {
632        if (!super.equalsShallow(other_))
633          return false;
634        if (!(other_ instanceof MedicinalProductDefinitionNameComponent))
635          return false;
636        MedicinalProductDefinitionNameComponent o = (MedicinalProductDefinitionNameComponent) other_;
637        return compareValues(productName, o.productName, true);
638      }
639
640      public boolean isEmpty() {
641        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(productName, type, namePart
642          , countryLanguage);
643      }
644
645  public String fhirType() {
646    return "MedicinalProductDefinition.name";
647
648  }
649
650  }
651
652    @Block()
653    public static class MedicinalProductDefinitionNameNamePartComponent extends BackboneElement implements IBaseBackboneElement {
654        /**
655         * A fragment of a product name.
656         */
657        @Child(name = "part", type = {StringType.class}, order=1, min=1, max=1, modifier=false, summary=true)
658        @Description(shortDefinition="A fragment of a product name", formalDefinition="A fragment of a product name." )
659        protected StringType part;
660
661        /**
662         * Identifying type for this part of the name (e.g. strength part).
663         */
664        @Child(name = "type", type = {CodeableConcept.class}, order=2, min=1, max=1, modifier=false, summary=true)
665        @Description(shortDefinition="Identifying type for this part of the name (e.g. strength part)", formalDefinition="Identifying type for this part of the name (e.g. strength part)." )
666        protected CodeableConcept type;
667
668        private static final long serialVersionUID = -1359126549L;
669
670    /**
671     * Constructor
672     */
673      public MedicinalProductDefinitionNameNamePartComponent() {
674        super();
675      }
676
677    /**
678     * Constructor
679     */
680      public MedicinalProductDefinitionNameNamePartComponent(String part, CodeableConcept type) {
681        super();
682        this.setPart(part);
683        this.setType(type);
684      }
685
686        /**
687         * @return {@link #part} (A fragment of a product name.). This is the underlying object with id, value and extensions. The accessor "getPart" gives direct access to the value
688         */
689        public StringType getPartElement() { 
690          if (this.part == null)
691            if (Configuration.errorOnAutoCreate())
692              throw new Error("Attempt to auto-create MedicinalProductDefinitionNameNamePartComponent.part");
693            else if (Configuration.doAutoCreate())
694              this.part = new StringType(); // bb
695          return this.part;
696        }
697
698        public boolean hasPartElement() { 
699          return this.part != null && !this.part.isEmpty();
700        }
701
702        public boolean hasPart() { 
703          return this.part != null && !this.part.isEmpty();
704        }
705
706        /**
707         * @param value {@link #part} (A fragment of a product name.). This is the underlying object with id, value and extensions. The accessor "getPart" gives direct access to the value
708         */
709        public MedicinalProductDefinitionNameNamePartComponent setPartElement(StringType value) { 
710          this.part = value;
711          return this;
712        }
713
714        /**
715         * @return A fragment of a product name.
716         */
717        public String getPart() { 
718          return this.part == null ? null : this.part.getValue();
719        }
720
721        /**
722         * @param value A fragment of a product name.
723         */
724        public MedicinalProductDefinitionNameNamePartComponent setPart(String value) { 
725            if (this.part == null)
726              this.part = new StringType();
727            this.part.setValue(value);
728          return this;
729        }
730
731        /**
732         * @return {@link #type} (Identifying type for this part of the name (e.g. strength part).)
733         */
734        public CodeableConcept getType() { 
735          if (this.type == null)
736            if (Configuration.errorOnAutoCreate())
737              throw new Error("Attempt to auto-create MedicinalProductDefinitionNameNamePartComponent.type");
738            else if (Configuration.doAutoCreate())
739              this.type = new CodeableConcept(); // cc
740          return this.type;
741        }
742
743        public boolean hasType() { 
744          return this.type != null && !this.type.isEmpty();
745        }
746
747        /**
748         * @param value {@link #type} (Identifying type for this part of the name (e.g. strength part).)
749         */
750        public MedicinalProductDefinitionNameNamePartComponent setType(CodeableConcept value) { 
751          this.type = value;
752          return this;
753        }
754
755        protected void listChildren(List<Property> children) {
756          super.listChildren(children);
757          children.add(new Property("part", "string", "A fragment of a product name.", 0, 1, part));
758          children.add(new Property("type", "CodeableConcept", "Identifying type for this part of the name (e.g. strength part).", 0, 1, type));
759        }
760
761        @Override
762        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
763          switch (_hash) {
764          case 3433459: /*part*/  return new Property("part", "string", "A fragment of a product name.", 0, 1, part);
765          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Identifying type for this part of the name (e.g. strength part).", 0, 1, type);
766          default: return super.getNamedProperty(_hash, _name, _checkValid);
767          }
768
769        }
770
771      @Override
772      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
773        switch (hash) {
774        case 3433459: /*part*/ return this.part == null ? new Base[0] : new Base[] {this.part}; // StringType
775        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
776        default: return super.getProperty(hash, name, checkValid);
777        }
778
779      }
780
781      @Override
782      public Base setProperty(int hash, String name, Base value) throws FHIRException {
783        switch (hash) {
784        case 3433459: // part
785          this.part = TypeConvertor.castToString(value); // StringType
786          return value;
787        case 3575610: // type
788          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
789          return value;
790        default: return super.setProperty(hash, name, value);
791        }
792
793      }
794
795      @Override
796      public Base setProperty(String name, Base value) throws FHIRException {
797        if (name.equals("part")) {
798          this.part = TypeConvertor.castToString(value); // StringType
799        } else if (name.equals("type")) {
800          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
801        } else
802          return super.setProperty(name, value);
803        return value;
804      }
805
806      @Override
807      public Base makeProperty(int hash, String name) throws FHIRException {
808        switch (hash) {
809        case 3433459:  return getPartElement();
810        case 3575610:  return getType();
811        default: return super.makeProperty(hash, name);
812        }
813
814      }
815
816      @Override
817      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
818        switch (hash) {
819        case 3433459: /*part*/ return new String[] {"string"};
820        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
821        default: return super.getTypesForProperty(hash, name);
822        }
823
824      }
825
826      @Override
827      public Base addChild(String name) throws FHIRException {
828        if (name.equals("part")) {
829          throw new FHIRException("Cannot call addChild on a primitive type MedicinalProductDefinition.name.namePart.part");
830        }
831        else if (name.equals("type")) {
832          this.type = new CodeableConcept();
833          return this.type;
834        }
835        else
836          return super.addChild(name);
837      }
838
839      public MedicinalProductDefinitionNameNamePartComponent copy() {
840        MedicinalProductDefinitionNameNamePartComponent dst = new MedicinalProductDefinitionNameNamePartComponent();
841        copyValues(dst);
842        return dst;
843      }
844
845      public void copyValues(MedicinalProductDefinitionNameNamePartComponent dst) {
846        super.copyValues(dst);
847        dst.part = part == null ? null : part.copy();
848        dst.type = type == null ? null : type.copy();
849      }
850
851      @Override
852      public boolean equalsDeep(Base other_) {
853        if (!super.equalsDeep(other_))
854          return false;
855        if (!(other_ instanceof MedicinalProductDefinitionNameNamePartComponent))
856          return false;
857        MedicinalProductDefinitionNameNamePartComponent o = (MedicinalProductDefinitionNameNamePartComponent) other_;
858        return compareDeep(part, o.part, true) && compareDeep(type, o.type, true);
859      }
860
861      @Override
862      public boolean equalsShallow(Base other_) {
863        if (!super.equalsShallow(other_))
864          return false;
865        if (!(other_ instanceof MedicinalProductDefinitionNameNamePartComponent))
866          return false;
867        MedicinalProductDefinitionNameNamePartComponent o = (MedicinalProductDefinitionNameNamePartComponent) other_;
868        return compareValues(part, o.part, true);
869      }
870
871      public boolean isEmpty() {
872        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(part, type);
873      }
874
875  public String fhirType() {
876    return "MedicinalProductDefinition.name.namePart";
877
878  }
879
880  }
881
882    @Block()
883    public static class MedicinalProductDefinitionNameCountryLanguageComponent extends BackboneElement implements IBaseBackboneElement {
884        /**
885         * Country code for where this name applies.
886         */
887        @Child(name = "country", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=true)
888        @Description(shortDefinition="Country code for where this name applies", formalDefinition="Country code for where this name applies." )
889        protected CodeableConcept country;
890
891        /**
892         * Jurisdiction code for where this name applies.
893         */
894        @Child(name = "jurisdiction", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=true)
895        @Description(shortDefinition="Jurisdiction code for where this name applies", formalDefinition="Jurisdiction code for where this name applies." )
896        protected CodeableConcept jurisdiction;
897
898        /**
899         * Language code for this name.
900         */
901        @Child(name = "language", type = {CodeableConcept.class}, order=3, min=1, max=1, modifier=false, summary=true)
902        @Description(shortDefinition="Language code for this name", formalDefinition="Language code for this name." )
903        protected CodeableConcept language;
904
905        private static final long serialVersionUID = 1627157564L;
906
907    /**
908     * Constructor
909     */
910      public MedicinalProductDefinitionNameCountryLanguageComponent() {
911        super();
912      }
913
914    /**
915     * Constructor
916     */
917      public MedicinalProductDefinitionNameCountryLanguageComponent(CodeableConcept country, CodeableConcept language) {
918        super();
919        this.setCountry(country);
920        this.setLanguage(language);
921      }
922
923        /**
924         * @return {@link #country} (Country code for where this name applies.)
925         */
926        public CodeableConcept getCountry() { 
927          if (this.country == null)
928            if (Configuration.errorOnAutoCreate())
929              throw new Error("Attempt to auto-create MedicinalProductDefinitionNameCountryLanguageComponent.country");
930            else if (Configuration.doAutoCreate())
931              this.country = new CodeableConcept(); // cc
932          return this.country;
933        }
934
935        public boolean hasCountry() { 
936          return this.country != null && !this.country.isEmpty();
937        }
938
939        /**
940         * @param value {@link #country} (Country code for where this name applies.)
941         */
942        public MedicinalProductDefinitionNameCountryLanguageComponent setCountry(CodeableConcept value) { 
943          this.country = value;
944          return this;
945        }
946
947        /**
948         * @return {@link #jurisdiction} (Jurisdiction code for where this name applies.)
949         */
950        public CodeableConcept getJurisdiction() { 
951          if (this.jurisdiction == null)
952            if (Configuration.errorOnAutoCreate())
953              throw new Error("Attempt to auto-create MedicinalProductDefinitionNameCountryLanguageComponent.jurisdiction");
954            else if (Configuration.doAutoCreate())
955              this.jurisdiction = new CodeableConcept(); // cc
956          return this.jurisdiction;
957        }
958
959        public boolean hasJurisdiction() { 
960          return this.jurisdiction != null && !this.jurisdiction.isEmpty();
961        }
962
963        /**
964         * @param value {@link #jurisdiction} (Jurisdiction code for where this name applies.)
965         */
966        public MedicinalProductDefinitionNameCountryLanguageComponent setJurisdiction(CodeableConcept value) { 
967          this.jurisdiction = value;
968          return this;
969        }
970
971        /**
972         * @return {@link #language} (Language code for this name.)
973         */
974        public CodeableConcept getLanguage() { 
975          if (this.language == null)
976            if (Configuration.errorOnAutoCreate())
977              throw new Error("Attempt to auto-create MedicinalProductDefinitionNameCountryLanguageComponent.language");
978            else if (Configuration.doAutoCreate())
979              this.language = new CodeableConcept(); // cc
980          return this.language;
981        }
982
983        public boolean hasLanguage() { 
984          return this.language != null && !this.language.isEmpty();
985        }
986
987        /**
988         * @param value {@link #language} (Language code for this name.)
989         */
990        public MedicinalProductDefinitionNameCountryLanguageComponent setLanguage(CodeableConcept value) { 
991          this.language = value;
992          return this;
993        }
994
995        protected void listChildren(List<Property> children) {
996          super.listChildren(children);
997          children.add(new Property("country", "CodeableConcept", "Country code for where this name applies.", 0, 1, country));
998          children.add(new Property("jurisdiction", "CodeableConcept", "Jurisdiction code for where this name applies.", 0, 1, jurisdiction));
999          children.add(new Property("language", "CodeableConcept", "Language code for this name.", 0, 1, language));
1000        }
1001
1002        @Override
1003        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1004          switch (_hash) {
1005          case 957831062: /*country*/  return new Property("country", "CodeableConcept", "Country code for where this name applies.", 0, 1, country);
1006          case -507075711: /*jurisdiction*/  return new Property("jurisdiction", "CodeableConcept", "Jurisdiction code for where this name applies.", 0, 1, jurisdiction);
1007          case -1613589672: /*language*/  return new Property("language", "CodeableConcept", "Language code for this name.", 0, 1, language);
1008          default: return super.getNamedProperty(_hash, _name, _checkValid);
1009          }
1010
1011        }
1012
1013      @Override
1014      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1015        switch (hash) {
1016        case 957831062: /*country*/ return this.country == null ? new Base[0] : new Base[] {this.country}; // CodeableConcept
1017        case -507075711: /*jurisdiction*/ return this.jurisdiction == null ? new Base[0] : new Base[] {this.jurisdiction}; // CodeableConcept
1018        case -1613589672: /*language*/ return this.language == null ? new Base[0] : new Base[] {this.language}; // CodeableConcept
1019        default: return super.getProperty(hash, name, checkValid);
1020        }
1021
1022      }
1023
1024      @Override
1025      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1026        switch (hash) {
1027        case 957831062: // country
1028          this.country = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1029          return value;
1030        case -507075711: // jurisdiction
1031          this.jurisdiction = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1032          return value;
1033        case -1613589672: // language
1034          this.language = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1035          return value;
1036        default: return super.setProperty(hash, name, value);
1037        }
1038
1039      }
1040
1041      @Override
1042      public Base setProperty(String name, Base value) throws FHIRException {
1043        if (name.equals("country")) {
1044          this.country = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1045        } else if (name.equals("jurisdiction")) {
1046          this.jurisdiction = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1047        } else if (name.equals("language")) {
1048          this.language = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1049        } else
1050          return super.setProperty(name, value);
1051        return value;
1052      }
1053
1054      @Override
1055      public Base makeProperty(int hash, String name) throws FHIRException {
1056        switch (hash) {
1057        case 957831062:  return getCountry();
1058        case -507075711:  return getJurisdiction();
1059        case -1613589672:  return getLanguage();
1060        default: return super.makeProperty(hash, name);
1061        }
1062
1063      }
1064
1065      @Override
1066      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1067        switch (hash) {
1068        case 957831062: /*country*/ return new String[] {"CodeableConcept"};
1069        case -507075711: /*jurisdiction*/ return new String[] {"CodeableConcept"};
1070        case -1613589672: /*language*/ return new String[] {"CodeableConcept"};
1071        default: return super.getTypesForProperty(hash, name);
1072        }
1073
1074      }
1075
1076      @Override
1077      public Base addChild(String name) throws FHIRException {
1078        if (name.equals("country")) {
1079          this.country = new CodeableConcept();
1080          return this.country;
1081        }
1082        else if (name.equals("jurisdiction")) {
1083          this.jurisdiction = new CodeableConcept();
1084          return this.jurisdiction;
1085        }
1086        else if (name.equals("language")) {
1087          this.language = new CodeableConcept();
1088          return this.language;
1089        }
1090        else
1091          return super.addChild(name);
1092      }
1093
1094      public MedicinalProductDefinitionNameCountryLanguageComponent copy() {
1095        MedicinalProductDefinitionNameCountryLanguageComponent dst = new MedicinalProductDefinitionNameCountryLanguageComponent();
1096        copyValues(dst);
1097        return dst;
1098      }
1099
1100      public void copyValues(MedicinalProductDefinitionNameCountryLanguageComponent dst) {
1101        super.copyValues(dst);
1102        dst.country = country == null ? null : country.copy();
1103        dst.jurisdiction = jurisdiction == null ? null : jurisdiction.copy();
1104        dst.language = language == null ? null : language.copy();
1105      }
1106
1107      @Override
1108      public boolean equalsDeep(Base other_) {
1109        if (!super.equalsDeep(other_))
1110          return false;
1111        if (!(other_ instanceof MedicinalProductDefinitionNameCountryLanguageComponent))
1112          return false;
1113        MedicinalProductDefinitionNameCountryLanguageComponent o = (MedicinalProductDefinitionNameCountryLanguageComponent) other_;
1114        return compareDeep(country, o.country, true) && compareDeep(jurisdiction, o.jurisdiction, true)
1115           && compareDeep(language, o.language, true);
1116      }
1117
1118      @Override
1119      public boolean equalsShallow(Base other_) {
1120        if (!super.equalsShallow(other_))
1121          return false;
1122        if (!(other_ instanceof MedicinalProductDefinitionNameCountryLanguageComponent))
1123          return false;
1124        MedicinalProductDefinitionNameCountryLanguageComponent o = (MedicinalProductDefinitionNameCountryLanguageComponent) other_;
1125        return true;
1126      }
1127
1128      public boolean isEmpty() {
1129        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(country, jurisdiction, language
1130          );
1131      }
1132
1133  public String fhirType() {
1134    return "MedicinalProductDefinition.name.countryLanguage";
1135
1136  }
1137
1138  }
1139
1140    @Block()
1141    public static class MedicinalProductDefinitionCrossReferenceComponent extends BackboneElement implements IBaseBackboneElement {
1142        /**
1143         * Reference to another product, e.g. for linking authorised to investigational product.
1144         */
1145        @Child(name = "product", type = {CodeableReference.class}, order=1, min=1, max=1, modifier=false, summary=true)
1146        @Description(shortDefinition="Reference to another product, e.g. for linking authorised to investigational product", formalDefinition="Reference to another product, e.g. for linking authorised to investigational product." )
1147        protected CodeableReference product;
1148
1149        /**
1150         * The type of relationship, for instance branded to generic, product to development product (investigational), parallel import version.
1151         */
1152        @Child(name = "type", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=true)
1153        @Description(shortDefinition="The type of relationship, for instance branded to generic, product to development product (investigational), parallel import version", formalDefinition="The type of relationship, for instance branded to generic, product to development product (investigational), parallel import version." )
1154        protected CodeableConcept type;
1155
1156        private static final long serialVersionUID = -1746125578L;
1157
1158    /**
1159     * Constructor
1160     */
1161      public MedicinalProductDefinitionCrossReferenceComponent() {
1162        super();
1163      }
1164
1165    /**
1166     * Constructor
1167     */
1168      public MedicinalProductDefinitionCrossReferenceComponent(CodeableReference product) {
1169        super();
1170        this.setProduct(product);
1171      }
1172
1173        /**
1174         * @return {@link #product} (Reference to another product, e.g. for linking authorised to investigational product.)
1175         */
1176        public CodeableReference getProduct() { 
1177          if (this.product == null)
1178            if (Configuration.errorOnAutoCreate())
1179              throw new Error("Attempt to auto-create MedicinalProductDefinitionCrossReferenceComponent.product");
1180            else if (Configuration.doAutoCreate())
1181              this.product = new CodeableReference(); // cc
1182          return this.product;
1183        }
1184
1185        public boolean hasProduct() { 
1186          return this.product != null && !this.product.isEmpty();
1187        }
1188
1189        /**
1190         * @param value {@link #product} (Reference to another product, e.g. for linking authorised to investigational product.)
1191         */
1192        public MedicinalProductDefinitionCrossReferenceComponent setProduct(CodeableReference value) { 
1193          this.product = value;
1194          return this;
1195        }
1196
1197        /**
1198         * @return {@link #type} (The type of relationship, for instance branded to generic, product to development product (investigational), parallel import version.)
1199         */
1200        public CodeableConcept getType() { 
1201          if (this.type == null)
1202            if (Configuration.errorOnAutoCreate())
1203              throw new Error("Attempt to auto-create MedicinalProductDefinitionCrossReferenceComponent.type");
1204            else if (Configuration.doAutoCreate())
1205              this.type = new CodeableConcept(); // cc
1206          return this.type;
1207        }
1208
1209        public boolean hasType() { 
1210          return this.type != null && !this.type.isEmpty();
1211        }
1212
1213        /**
1214         * @param value {@link #type} (The type of relationship, for instance branded to generic, product to development product (investigational), parallel import version.)
1215         */
1216        public MedicinalProductDefinitionCrossReferenceComponent setType(CodeableConcept value) { 
1217          this.type = value;
1218          return this;
1219        }
1220
1221        protected void listChildren(List<Property> children) {
1222          super.listChildren(children);
1223          children.add(new Property("product", "CodeableReference(MedicinalProductDefinition)", "Reference to another product, e.g. for linking authorised to investigational product.", 0, 1, product));
1224          children.add(new Property("type", "CodeableConcept", "The type of relationship, for instance branded to generic, product to development product (investigational), parallel import version.", 0, 1, type));
1225        }
1226
1227        @Override
1228        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1229          switch (_hash) {
1230          case -309474065: /*product*/  return new Property("product", "CodeableReference(MedicinalProductDefinition)", "Reference to another product, e.g. for linking authorised to investigational product.", 0, 1, product);
1231          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "The type of relationship, for instance branded to generic, product to development product (investigational), parallel import version.", 0, 1, type);
1232          default: return super.getNamedProperty(_hash, _name, _checkValid);
1233          }
1234
1235        }
1236
1237      @Override
1238      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1239        switch (hash) {
1240        case -309474065: /*product*/ return this.product == null ? new Base[0] : new Base[] {this.product}; // CodeableReference
1241        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
1242        default: return super.getProperty(hash, name, checkValid);
1243        }
1244
1245      }
1246
1247      @Override
1248      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1249        switch (hash) {
1250        case -309474065: // product
1251          this.product = TypeConvertor.castToCodeableReference(value); // CodeableReference
1252          return value;
1253        case 3575610: // type
1254          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1255          return value;
1256        default: return super.setProperty(hash, name, value);
1257        }
1258
1259      }
1260
1261      @Override
1262      public Base setProperty(String name, Base value) throws FHIRException {
1263        if (name.equals("product")) {
1264          this.product = TypeConvertor.castToCodeableReference(value); // CodeableReference
1265        } else if (name.equals("type")) {
1266          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1267        } else
1268          return super.setProperty(name, value);
1269        return value;
1270      }
1271
1272      @Override
1273      public Base makeProperty(int hash, String name) throws FHIRException {
1274        switch (hash) {
1275        case -309474065:  return getProduct();
1276        case 3575610:  return getType();
1277        default: return super.makeProperty(hash, name);
1278        }
1279
1280      }
1281
1282      @Override
1283      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1284        switch (hash) {
1285        case -309474065: /*product*/ return new String[] {"CodeableReference"};
1286        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
1287        default: return super.getTypesForProperty(hash, name);
1288        }
1289
1290      }
1291
1292      @Override
1293      public Base addChild(String name) throws FHIRException {
1294        if (name.equals("product")) {
1295          this.product = new CodeableReference();
1296          return this.product;
1297        }
1298        else if (name.equals("type")) {
1299          this.type = new CodeableConcept();
1300          return this.type;
1301        }
1302        else
1303          return super.addChild(name);
1304      }
1305
1306      public MedicinalProductDefinitionCrossReferenceComponent copy() {
1307        MedicinalProductDefinitionCrossReferenceComponent dst = new MedicinalProductDefinitionCrossReferenceComponent();
1308        copyValues(dst);
1309        return dst;
1310      }
1311
1312      public void copyValues(MedicinalProductDefinitionCrossReferenceComponent dst) {
1313        super.copyValues(dst);
1314        dst.product = product == null ? null : product.copy();
1315        dst.type = type == null ? null : type.copy();
1316      }
1317
1318      @Override
1319      public boolean equalsDeep(Base other_) {
1320        if (!super.equalsDeep(other_))
1321          return false;
1322        if (!(other_ instanceof MedicinalProductDefinitionCrossReferenceComponent))
1323          return false;
1324        MedicinalProductDefinitionCrossReferenceComponent o = (MedicinalProductDefinitionCrossReferenceComponent) other_;
1325        return compareDeep(product, o.product, true) && compareDeep(type, o.type, true);
1326      }
1327
1328      @Override
1329      public boolean equalsShallow(Base other_) {
1330        if (!super.equalsShallow(other_))
1331          return false;
1332        if (!(other_ instanceof MedicinalProductDefinitionCrossReferenceComponent))
1333          return false;
1334        MedicinalProductDefinitionCrossReferenceComponent o = (MedicinalProductDefinitionCrossReferenceComponent) other_;
1335        return true;
1336      }
1337
1338      public boolean isEmpty() {
1339        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(product, type);
1340      }
1341
1342  public String fhirType() {
1343    return "MedicinalProductDefinition.crossReference";
1344
1345  }
1346
1347  }
1348
1349    @Block()
1350    public static class MedicinalProductDefinitionOperationComponent extends BackboneElement implements IBaseBackboneElement {
1351        /**
1352         * The type of manufacturing operation e.g. manufacturing itself, re-packaging. For the authorization of this, a RegulatedAuthorization would point to the same plan or activity referenced here.
1353         */
1354        @Child(name = "type", type = {CodeableReference.class}, order=1, min=0, max=1, modifier=false, summary=true)
1355        @Description(shortDefinition="The type of manufacturing operation e.g. manufacturing itself, re-packaging. For the authorization of this, a RegulatedAuthorization would point to the same plan or activity referenced here", formalDefinition="The type of manufacturing operation e.g. manufacturing itself, re-packaging. For the authorization of this, a RegulatedAuthorization would point to the same plan or activity referenced here." )
1356        protected CodeableReference type;
1357
1358        /**
1359         * Date range of applicability.
1360         */
1361        @Child(name = "effectiveDate", type = {Period.class}, order=2, min=0, max=1, modifier=false, summary=true)
1362        @Description(shortDefinition="Date range of applicability", formalDefinition="Date range of applicability." )
1363        protected Period effectiveDate;
1364
1365        /**
1366         * The organization or establishment responsible for (or associated with) the particular process or step, examples include the manufacturer, importer, agent.
1367         */
1368        @Child(name = "organization", type = {Organization.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1369        @Description(shortDefinition="The organization or establishment responsible for (or associated with) the particular process or step, examples include the manufacturer, importer, agent", formalDefinition="The organization or establishment responsible for (or associated with) the particular process or step, examples include the manufacturer, importer, agent." )
1370        protected List<Reference> organization;
1371
1372        /**
1373         * Specifies whether this particular business or manufacturing process is considered proprietary or confidential.
1374         */
1375        @Child(name = "confidentialityIndicator", type = {CodeableConcept.class}, order=4, min=0, max=1, modifier=false, summary=true)
1376        @Description(shortDefinition="Specifies whether this particular business or manufacturing process is considered proprietary or confidential", formalDefinition="Specifies whether this particular business or manufacturing process is considered proprietary or confidential." )
1377        protected CodeableConcept confidentialityIndicator;
1378
1379        private static final long serialVersionUID = 1036054906L;
1380
1381    /**
1382     * Constructor
1383     */
1384      public MedicinalProductDefinitionOperationComponent() {
1385        super();
1386      }
1387
1388        /**
1389         * @return {@link #type} (The type of manufacturing operation e.g. manufacturing itself, re-packaging. For the authorization of this, a RegulatedAuthorization would point to the same plan or activity referenced here.)
1390         */
1391        public CodeableReference getType() { 
1392          if (this.type == null)
1393            if (Configuration.errorOnAutoCreate())
1394              throw new Error("Attempt to auto-create MedicinalProductDefinitionOperationComponent.type");
1395            else if (Configuration.doAutoCreate())
1396              this.type = new CodeableReference(); // cc
1397          return this.type;
1398        }
1399
1400        public boolean hasType() { 
1401          return this.type != null && !this.type.isEmpty();
1402        }
1403
1404        /**
1405         * @param value {@link #type} (The type of manufacturing operation e.g. manufacturing itself, re-packaging. For the authorization of this, a RegulatedAuthorization would point to the same plan or activity referenced here.)
1406         */
1407        public MedicinalProductDefinitionOperationComponent setType(CodeableReference value) { 
1408          this.type = value;
1409          return this;
1410        }
1411
1412        /**
1413         * @return {@link #effectiveDate} (Date range of applicability.)
1414         */
1415        public Period getEffectiveDate() { 
1416          if (this.effectiveDate == null)
1417            if (Configuration.errorOnAutoCreate())
1418              throw new Error("Attempt to auto-create MedicinalProductDefinitionOperationComponent.effectiveDate");
1419            else if (Configuration.doAutoCreate())
1420              this.effectiveDate = new Period(); // cc
1421          return this.effectiveDate;
1422        }
1423
1424        public boolean hasEffectiveDate() { 
1425          return this.effectiveDate != null && !this.effectiveDate.isEmpty();
1426        }
1427
1428        /**
1429         * @param value {@link #effectiveDate} (Date range of applicability.)
1430         */
1431        public MedicinalProductDefinitionOperationComponent setEffectiveDate(Period value) { 
1432          this.effectiveDate = value;
1433          return this;
1434        }
1435
1436        /**
1437         * @return {@link #organization} (The organization or establishment responsible for (or associated with) the particular process or step, examples include the manufacturer, importer, agent.)
1438         */
1439        public List<Reference> getOrganization() { 
1440          if (this.organization == null)
1441            this.organization = new ArrayList<Reference>();
1442          return this.organization;
1443        }
1444
1445        /**
1446         * @return Returns a reference to <code>this</code> for easy method chaining
1447         */
1448        public MedicinalProductDefinitionOperationComponent setOrganization(List<Reference> theOrganization) { 
1449          this.organization = theOrganization;
1450          return this;
1451        }
1452
1453        public boolean hasOrganization() { 
1454          if (this.organization == null)
1455            return false;
1456          for (Reference item : this.organization)
1457            if (!item.isEmpty())
1458              return true;
1459          return false;
1460        }
1461
1462        public Reference addOrganization() { //3
1463          Reference t = new Reference();
1464          if (this.organization == null)
1465            this.organization = new ArrayList<Reference>();
1466          this.organization.add(t);
1467          return t;
1468        }
1469
1470        public MedicinalProductDefinitionOperationComponent addOrganization(Reference t) { //3
1471          if (t == null)
1472            return this;
1473          if (this.organization == null)
1474            this.organization = new ArrayList<Reference>();
1475          this.organization.add(t);
1476          return this;
1477        }
1478
1479        /**
1480         * @return The first repetition of repeating field {@link #organization}, creating it if it does not already exist {3}
1481         */
1482        public Reference getOrganizationFirstRep() { 
1483          if (getOrganization().isEmpty()) {
1484            addOrganization();
1485          }
1486          return getOrganization().get(0);
1487        }
1488
1489        /**
1490         * @return {@link #confidentialityIndicator} (Specifies whether this particular business or manufacturing process is considered proprietary or confidential.)
1491         */
1492        public CodeableConcept getConfidentialityIndicator() { 
1493          if (this.confidentialityIndicator == null)
1494            if (Configuration.errorOnAutoCreate())
1495              throw new Error("Attempt to auto-create MedicinalProductDefinitionOperationComponent.confidentialityIndicator");
1496            else if (Configuration.doAutoCreate())
1497              this.confidentialityIndicator = new CodeableConcept(); // cc
1498          return this.confidentialityIndicator;
1499        }
1500
1501        public boolean hasConfidentialityIndicator() { 
1502          return this.confidentialityIndicator != null && !this.confidentialityIndicator.isEmpty();
1503        }
1504
1505        /**
1506         * @param value {@link #confidentialityIndicator} (Specifies whether this particular business or manufacturing process is considered proprietary or confidential.)
1507         */
1508        public MedicinalProductDefinitionOperationComponent setConfidentialityIndicator(CodeableConcept value) { 
1509          this.confidentialityIndicator = value;
1510          return this;
1511        }
1512
1513        protected void listChildren(List<Property> children) {
1514          super.listChildren(children);
1515          children.add(new Property("type", "CodeableReference(ActivityDefinition|PlanDefinition)", "The type of manufacturing operation e.g. manufacturing itself, re-packaging. For the authorization of this, a RegulatedAuthorization would point to the same plan or activity referenced here.", 0, 1, type));
1516          children.add(new Property("effectiveDate", "Period", "Date range of applicability.", 0, 1, effectiveDate));
1517          children.add(new Property("organization", "Reference(Organization)", "The organization or establishment responsible for (or associated with) the particular process or step, examples include the manufacturer, importer, agent.", 0, java.lang.Integer.MAX_VALUE, organization));
1518          children.add(new Property("confidentialityIndicator", "CodeableConcept", "Specifies whether this particular business or manufacturing process is considered proprietary or confidential.", 0, 1, confidentialityIndicator));
1519        }
1520
1521        @Override
1522        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1523          switch (_hash) {
1524          case 3575610: /*type*/  return new Property("type", "CodeableReference(ActivityDefinition|PlanDefinition)", "The type of manufacturing operation e.g. manufacturing itself, re-packaging. For the authorization of this, a RegulatedAuthorization would point to the same plan or activity referenced here.", 0, 1, type);
1525          case -930389515: /*effectiveDate*/  return new Property("effectiveDate", "Period", "Date range of applicability.", 0, 1, effectiveDate);
1526          case 1178922291: /*organization*/  return new Property("organization", "Reference(Organization)", "The organization or establishment responsible for (or associated with) the particular process or step, examples include the manufacturer, importer, agent.", 0, java.lang.Integer.MAX_VALUE, organization);
1527          case -1449404791: /*confidentialityIndicator*/  return new Property("confidentialityIndicator", "CodeableConcept", "Specifies whether this particular business or manufacturing process is considered proprietary or confidential.", 0, 1, confidentialityIndicator);
1528          default: return super.getNamedProperty(_hash, _name, _checkValid);
1529          }
1530
1531        }
1532
1533      @Override
1534      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1535        switch (hash) {
1536        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableReference
1537        case -930389515: /*effectiveDate*/ return this.effectiveDate == null ? new Base[0] : new Base[] {this.effectiveDate}; // Period
1538        case 1178922291: /*organization*/ return this.organization == null ? new Base[0] : this.organization.toArray(new Base[this.organization.size()]); // Reference
1539        case -1449404791: /*confidentialityIndicator*/ return this.confidentialityIndicator == null ? new Base[0] : new Base[] {this.confidentialityIndicator}; // CodeableConcept
1540        default: return super.getProperty(hash, name, checkValid);
1541        }
1542
1543      }
1544
1545      @Override
1546      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1547        switch (hash) {
1548        case 3575610: // type
1549          this.type = TypeConvertor.castToCodeableReference(value); // CodeableReference
1550          return value;
1551        case -930389515: // effectiveDate
1552          this.effectiveDate = TypeConvertor.castToPeriod(value); // Period
1553          return value;
1554        case 1178922291: // organization
1555          this.getOrganization().add(TypeConvertor.castToReference(value)); // Reference
1556          return value;
1557        case -1449404791: // confidentialityIndicator
1558          this.confidentialityIndicator = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1559          return value;
1560        default: return super.setProperty(hash, name, value);
1561        }
1562
1563      }
1564
1565      @Override
1566      public Base setProperty(String name, Base value) throws FHIRException {
1567        if (name.equals("type")) {
1568          this.type = TypeConvertor.castToCodeableReference(value); // CodeableReference
1569        } else if (name.equals("effectiveDate")) {
1570          this.effectiveDate = TypeConvertor.castToPeriod(value); // Period
1571        } else if (name.equals("organization")) {
1572          this.getOrganization().add(TypeConvertor.castToReference(value));
1573        } else if (name.equals("confidentialityIndicator")) {
1574          this.confidentialityIndicator = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1575        } else
1576          return super.setProperty(name, value);
1577        return value;
1578      }
1579
1580      @Override
1581      public Base makeProperty(int hash, String name) throws FHIRException {
1582        switch (hash) {
1583        case 3575610:  return getType();
1584        case -930389515:  return getEffectiveDate();
1585        case 1178922291:  return addOrganization(); 
1586        case -1449404791:  return getConfidentialityIndicator();
1587        default: return super.makeProperty(hash, name);
1588        }
1589
1590      }
1591
1592      @Override
1593      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1594        switch (hash) {
1595        case 3575610: /*type*/ return new String[] {"CodeableReference"};
1596        case -930389515: /*effectiveDate*/ return new String[] {"Period"};
1597        case 1178922291: /*organization*/ return new String[] {"Reference"};
1598        case -1449404791: /*confidentialityIndicator*/ return new String[] {"CodeableConcept"};
1599        default: return super.getTypesForProperty(hash, name);
1600        }
1601
1602      }
1603
1604      @Override
1605      public Base addChild(String name) throws FHIRException {
1606        if (name.equals("type")) {
1607          this.type = new CodeableReference();
1608          return this.type;
1609        }
1610        else if (name.equals("effectiveDate")) {
1611          this.effectiveDate = new Period();
1612          return this.effectiveDate;
1613        }
1614        else if (name.equals("organization")) {
1615          return addOrganization();
1616        }
1617        else if (name.equals("confidentialityIndicator")) {
1618          this.confidentialityIndicator = new CodeableConcept();
1619          return this.confidentialityIndicator;
1620        }
1621        else
1622          return super.addChild(name);
1623      }
1624
1625      public MedicinalProductDefinitionOperationComponent copy() {
1626        MedicinalProductDefinitionOperationComponent dst = new MedicinalProductDefinitionOperationComponent();
1627        copyValues(dst);
1628        return dst;
1629      }
1630
1631      public void copyValues(MedicinalProductDefinitionOperationComponent dst) {
1632        super.copyValues(dst);
1633        dst.type = type == null ? null : type.copy();
1634        dst.effectiveDate = effectiveDate == null ? null : effectiveDate.copy();
1635        if (organization != null) {
1636          dst.organization = new ArrayList<Reference>();
1637          for (Reference i : organization)
1638            dst.organization.add(i.copy());
1639        };
1640        dst.confidentialityIndicator = confidentialityIndicator == null ? null : confidentialityIndicator.copy();
1641      }
1642
1643      @Override
1644      public boolean equalsDeep(Base other_) {
1645        if (!super.equalsDeep(other_))
1646          return false;
1647        if (!(other_ instanceof MedicinalProductDefinitionOperationComponent))
1648          return false;
1649        MedicinalProductDefinitionOperationComponent o = (MedicinalProductDefinitionOperationComponent) other_;
1650        return compareDeep(type, o.type, true) && compareDeep(effectiveDate, o.effectiveDate, true) && compareDeep(organization, o.organization, true)
1651           && compareDeep(confidentialityIndicator, o.confidentialityIndicator, true);
1652      }
1653
1654      @Override
1655      public boolean equalsShallow(Base other_) {
1656        if (!super.equalsShallow(other_))
1657          return false;
1658        if (!(other_ instanceof MedicinalProductDefinitionOperationComponent))
1659          return false;
1660        MedicinalProductDefinitionOperationComponent o = (MedicinalProductDefinitionOperationComponent) other_;
1661        return true;
1662      }
1663
1664      public boolean isEmpty() {
1665        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, effectiveDate, organization
1666          , confidentialityIndicator);
1667      }
1668
1669  public String fhirType() {
1670    return "MedicinalProductDefinition.operation";
1671
1672  }
1673
1674  }
1675
1676    @Block()
1677    public static class MedicinalProductDefinitionCharacteristicComponent extends BackboneElement implements IBaseBackboneElement {
1678        /**
1679         * A code expressing the type of characteristic.
1680         */
1681        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=true)
1682        @Description(shortDefinition="A code expressing the type of characteristic", formalDefinition="A code expressing the type of characteristic." )
1683        protected CodeableConcept type;
1684
1685        /**
1686         * A value for the characteristic.
1687         */
1688        @Child(name = "value", type = {CodeableConcept.class, Quantity.class, DateType.class, BooleanType.class, Attachment.class}, order=2, min=0, max=1, modifier=false, summary=true)
1689        @Description(shortDefinition="A value for the characteristic", formalDefinition="A value for the characteristic." )
1690        protected DataType value;
1691
1692        private static final long serialVersionUID = -1659186716L;
1693
1694    /**
1695     * Constructor
1696     */
1697      public MedicinalProductDefinitionCharacteristicComponent() {
1698        super();
1699      }
1700
1701    /**
1702     * Constructor
1703     */
1704      public MedicinalProductDefinitionCharacteristicComponent(CodeableConcept type) {
1705        super();
1706        this.setType(type);
1707      }
1708
1709        /**
1710         * @return {@link #type} (A code expressing the type of characteristic.)
1711         */
1712        public CodeableConcept getType() { 
1713          if (this.type == null)
1714            if (Configuration.errorOnAutoCreate())
1715              throw new Error("Attempt to auto-create MedicinalProductDefinitionCharacteristicComponent.type");
1716            else if (Configuration.doAutoCreate())
1717              this.type = new CodeableConcept(); // cc
1718          return this.type;
1719        }
1720
1721        public boolean hasType() { 
1722          return this.type != null && !this.type.isEmpty();
1723        }
1724
1725        /**
1726         * @param value {@link #type} (A code expressing the type of characteristic.)
1727         */
1728        public MedicinalProductDefinitionCharacteristicComponent setType(CodeableConcept value) { 
1729          this.type = value;
1730          return this;
1731        }
1732
1733        /**
1734         * @return {@link #value} (A value for the characteristic.)
1735         */
1736        public DataType getValue() { 
1737          return this.value;
1738        }
1739
1740        /**
1741         * @return {@link #value} (A value for the characteristic.)
1742         */
1743        public CodeableConcept getValueCodeableConcept() throws FHIRException { 
1744          if (this.value == null)
1745            this.value = new CodeableConcept();
1746          if (!(this.value instanceof CodeableConcept))
1747            throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.value.getClass().getName()+" was encountered");
1748          return (CodeableConcept) this.value;
1749        }
1750
1751        public boolean hasValueCodeableConcept() { 
1752          return this != null && this.value instanceof CodeableConcept;
1753        }
1754
1755        /**
1756         * @return {@link #value} (A value for the characteristic.)
1757         */
1758        public Quantity getValueQuantity() throws FHIRException { 
1759          if (this.value == null)
1760            this.value = new Quantity();
1761          if (!(this.value instanceof Quantity))
1762            throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.value.getClass().getName()+" was encountered");
1763          return (Quantity) this.value;
1764        }
1765
1766        public boolean hasValueQuantity() { 
1767          return this != null && this.value instanceof Quantity;
1768        }
1769
1770        /**
1771         * @return {@link #value} (A value for the characteristic.)
1772         */
1773        public DateType getValueDateType() throws FHIRException { 
1774          if (this.value == null)
1775            this.value = new DateType();
1776          if (!(this.value instanceof DateType))
1777            throw new FHIRException("Type mismatch: the type DateType was expected, but "+this.value.getClass().getName()+" was encountered");
1778          return (DateType) this.value;
1779        }
1780
1781        public boolean hasValueDateType() { 
1782          return this != null && this.value instanceof DateType;
1783        }
1784
1785        /**
1786         * @return {@link #value} (A value for the characteristic.)
1787         */
1788        public BooleanType getValueBooleanType() throws FHIRException { 
1789          if (this.value == null)
1790            this.value = new BooleanType();
1791          if (!(this.value instanceof BooleanType))
1792            throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.value.getClass().getName()+" was encountered");
1793          return (BooleanType) this.value;
1794        }
1795
1796        public boolean hasValueBooleanType() { 
1797          return this != null && this.value instanceof BooleanType;
1798        }
1799
1800        /**
1801         * @return {@link #value} (A value for the characteristic.)
1802         */
1803        public Attachment getValueAttachment() throws FHIRException { 
1804          if (this.value == null)
1805            this.value = new Attachment();
1806          if (!(this.value instanceof Attachment))
1807            throw new FHIRException("Type mismatch: the type Attachment was expected, but "+this.value.getClass().getName()+" was encountered");
1808          return (Attachment) this.value;
1809        }
1810
1811        public boolean hasValueAttachment() { 
1812          return this != null && this.value instanceof Attachment;
1813        }
1814
1815        public boolean hasValue() { 
1816          return this.value != null && !this.value.isEmpty();
1817        }
1818
1819        /**
1820         * @param value {@link #value} (A value for the characteristic.)
1821         */
1822        public MedicinalProductDefinitionCharacteristicComponent setValue(DataType value) { 
1823          if (value != null && !(value instanceof CodeableConcept || value instanceof Quantity || value instanceof DateType || value instanceof BooleanType || value instanceof Attachment))
1824            throw new Error("Not the right type for MedicinalProductDefinition.characteristic.value[x]: "+value.fhirType());
1825          this.value = value;
1826          return this;
1827        }
1828
1829        protected void listChildren(List<Property> children) {
1830          super.listChildren(children);
1831          children.add(new Property("type", "CodeableConcept", "A code expressing the type of characteristic.", 0, 1, type));
1832          children.add(new Property("value[x]", "CodeableConcept|Quantity|date|boolean|Attachment", "A value for the characteristic.", 0, 1, value));
1833        }
1834
1835        @Override
1836        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1837          switch (_hash) {
1838          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "A code expressing the type of characteristic.", 0, 1, type);
1839          case -1410166417: /*value[x]*/  return new Property("value[x]", "CodeableConcept|Quantity|date|boolean|Attachment", "A value for the characteristic.", 0, 1, value);
1840          case 111972721: /*value*/  return new Property("value[x]", "CodeableConcept|Quantity|date|boolean|Attachment", "A value for the characteristic.", 0, 1, value);
1841          case 924902896: /*valueCodeableConcept*/  return new Property("value[x]", "CodeableConcept", "A value for the characteristic.", 0, 1, value);
1842          case -2029823716: /*valueQuantity*/  return new Property("value[x]", "Quantity", "A value for the characteristic.", 0, 1, value);
1843          case -766192449: /*valueDate*/  return new Property("value[x]", "date", "A value for the characteristic.", 0, 1, value);
1844          case 733421943: /*valueBoolean*/  return new Property("value[x]", "boolean", "A value for the characteristic.", 0, 1, value);
1845          case -475566732: /*valueAttachment*/  return new Property("value[x]", "Attachment", "A value for the characteristic.", 0, 1, value);
1846          default: return super.getNamedProperty(_hash, _name, _checkValid);
1847          }
1848
1849        }
1850
1851      @Override
1852      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1853        switch (hash) {
1854        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
1855        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // DataType
1856        default: return super.getProperty(hash, name, checkValid);
1857        }
1858
1859      }
1860
1861      @Override
1862      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1863        switch (hash) {
1864        case 3575610: // type
1865          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1866          return value;
1867        case 111972721: // value
1868          this.value = TypeConvertor.castToType(value); // DataType
1869          return value;
1870        default: return super.setProperty(hash, name, value);
1871        }
1872
1873      }
1874
1875      @Override
1876      public Base setProperty(String name, Base value) throws FHIRException {
1877        if (name.equals("type")) {
1878          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1879        } else if (name.equals("value[x]")) {
1880          this.value = TypeConvertor.castToType(value); // DataType
1881        } else
1882          return super.setProperty(name, value);
1883        return value;
1884      }
1885
1886      @Override
1887      public Base makeProperty(int hash, String name) throws FHIRException {
1888        switch (hash) {
1889        case 3575610:  return getType();
1890        case -1410166417:  return getValue();
1891        case 111972721:  return getValue();
1892        default: return super.makeProperty(hash, name);
1893        }
1894
1895      }
1896
1897      @Override
1898      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1899        switch (hash) {
1900        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
1901        case 111972721: /*value*/ return new String[] {"CodeableConcept", "Quantity", "date", "boolean", "Attachment"};
1902        default: return super.getTypesForProperty(hash, name);
1903        }
1904
1905      }
1906
1907      @Override
1908      public Base addChild(String name) throws FHIRException {
1909        if (name.equals("type")) {
1910          this.type = new CodeableConcept();
1911          return this.type;
1912        }
1913        else if (name.equals("valueCodeableConcept")) {
1914          this.value = new CodeableConcept();
1915          return this.value;
1916        }
1917        else if (name.equals("valueQuantity")) {
1918          this.value = new Quantity();
1919          return this.value;
1920        }
1921        else if (name.equals("valueDate")) {
1922          this.value = new DateType();
1923          return this.value;
1924        }
1925        else if (name.equals("valueBoolean")) {
1926          this.value = new BooleanType();
1927          return this.value;
1928        }
1929        else if (name.equals("valueAttachment")) {
1930          this.value = new Attachment();
1931          return this.value;
1932        }
1933        else
1934          return super.addChild(name);
1935      }
1936
1937      public MedicinalProductDefinitionCharacteristicComponent copy() {
1938        MedicinalProductDefinitionCharacteristicComponent dst = new MedicinalProductDefinitionCharacteristicComponent();
1939        copyValues(dst);
1940        return dst;
1941      }
1942
1943      public void copyValues(MedicinalProductDefinitionCharacteristicComponent dst) {
1944        super.copyValues(dst);
1945        dst.type = type == null ? null : type.copy();
1946        dst.value = value == null ? null : value.copy();
1947      }
1948
1949      @Override
1950      public boolean equalsDeep(Base other_) {
1951        if (!super.equalsDeep(other_))
1952          return false;
1953        if (!(other_ instanceof MedicinalProductDefinitionCharacteristicComponent))
1954          return false;
1955        MedicinalProductDefinitionCharacteristicComponent o = (MedicinalProductDefinitionCharacteristicComponent) other_;
1956        return compareDeep(type, o.type, true) && compareDeep(value, o.value, true);
1957      }
1958
1959      @Override
1960      public boolean equalsShallow(Base other_) {
1961        if (!super.equalsShallow(other_))
1962          return false;
1963        if (!(other_ instanceof MedicinalProductDefinitionCharacteristicComponent))
1964          return false;
1965        MedicinalProductDefinitionCharacteristicComponent o = (MedicinalProductDefinitionCharacteristicComponent) other_;
1966        return true;
1967      }
1968
1969      public boolean isEmpty() {
1970        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, value);
1971      }
1972
1973  public String fhirType() {
1974    return "MedicinalProductDefinition.characteristic";
1975
1976  }
1977
1978  }
1979
1980    /**
1981     * Business identifier for this product. Could be an MPID.
1982     */
1983    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1984    @Description(shortDefinition="Business identifier for this product. Could be an MPID", formalDefinition="Business identifier for this product. Could be an MPID." )
1985    protected List<Identifier> identifier;
1986
1987    /**
1988     * Regulatory type, e.g. Investigational or Authorized.
1989     */
1990    @Child(name = "type", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=true)
1991    @Description(shortDefinition="Regulatory type, e.g. Investigational or Authorized", formalDefinition="Regulatory type, e.g. Investigational or Authorized." )
1992    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/medicinal-product-type")
1993    protected CodeableConcept type;
1994
1995    /**
1996     * If this medicine applies to human or veterinary uses.
1997     */
1998    @Child(name = "domain", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=true)
1999    @Description(shortDefinition="If this medicine applies to human or veterinary uses", formalDefinition="If this medicine applies to human or veterinary uses." )
2000    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/medicinal-product-domain")
2001    protected CodeableConcept domain;
2002
2003    /**
2004     * A business identifier relating to a specific version of the product, this is commonly used to support revisions to an existing product.
2005     */
2006    @Child(name = "version", type = {StringType.class}, order=3, min=0, max=1, modifier=false, summary=true)
2007    @Description(shortDefinition="A business identifier relating to a specific version of the product, this is commonly used to support revisions to an existing product", formalDefinition="A business identifier relating to a specific version of the product, this is commonly used to support revisions to an existing product." )
2008    protected StringType version;
2009
2010    /**
2011     * The status within the lifecycle of this product record. A high-level status, this is not intended to duplicate details carried elsewhere such as legal status, or authorization status.
2012     */
2013    @Child(name = "status", type = {CodeableConcept.class}, order=4, min=0, max=1, modifier=true, summary=true)
2014    @Description(shortDefinition="The status within the lifecycle of this product record. A high-level status, this is not intended to duplicate details carried elsewhere such as legal status, or authorization status", formalDefinition="The status within the lifecycle of this product record. A high-level status, this is not intended to duplicate details carried elsewhere such as legal status, or authorization status." )
2015    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/publication-status")
2016    protected CodeableConcept status;
2017
2018    /**
2019     * The date at which the given status became applicable.
2020     */
2021    @Child(name = "statusDate", type = {DateTimeType.class}, order=5, min=0, max=1, modifier=false, summary=true)
2022    @Description(shortDefinition="The date at which the given status became applicable", formalDefinition="The date at which the given status became applicable." )
2023    protected DateTimeType statusDate;
2024
2025    /**
2026     * General description of this product.
2027     */
2028    @Child(name = "description", type = {MarkdownType.class}, order=6, min=0, max=1, modifier=false, summary=true)
2029    @Description(shortDefinition="General description of this product", formalDefinition="General description of this product." )
2030    protected MarkdownType description;
2031
2032    /**
2033     * The dose form for a single part product, or combined form of a multiple part product.
2034     */
2035    @Child(name = "combinedPharmaceuticalDoseForm", type = {CodeableConcept.class}, order=7, min=0, max=1, modifier=false, summary=true)
2036    @Description(shortDefinition="The dose form for a single part product, or combined form of a multiple part product", formalDefinition="The dose form for a single part product, or combined form of a multiple part product." )
2037    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/combined-dose-form")
2038    protected CodeableConcept combinedPharmaceuticalDoseForm;
2039
2040    /**
2041     * The path by which the product is taken into or makes contact with the body. In some regions this is referred to as the licenced or approved route. See also AdministrableProductDefinition resource.
2042     */
2043    @Child(name = "route", type = {CodeableConcept.class}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2044    @Description(shortDefinition="The path by which the product is taken into or makes contact with the body. In some regions this is referred to as the licenced or approved route. See also AdministrableProductDefinition resource", formalDefinition="The path by which the product is taken into or makes contact with the body. In some regions this is referred to as the licenced or approved route. See also AdministrableProductDefinition resource." )
2045    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/route-codes")
2046    protected List<CodeableConcept> route;
2047
2048    /**
2049     * Description of indication(s) for this product, used when structured indications are not required. In cases where structured indications are required, they are captured using the ClinicalUseDefinition resource. An indication is a medical situation for which using the product is appropriate.
2050     */
2051    @Child(name = "indication", type = {MarkdownType.class}, order=9, min=0, max=1, modifier=false, summary=true)
2052    @Description(shortDefinition="Description of indication(s) for this product, used when structured indications are not required. In cases where structured indications are required, they are captured using the ClinicalUseDefinition resource. An indication is a medical situation for which using the product is appropriate", formalDefinition="Description of indication(s) for this product, used when structured indications are not required. In cases where structured indications are required, they are captured using the ClinicalUseDefinition resource. An indication is a medical situation for which using the product is appropriate." )
2053    protected MarkdownType indication;
2054
2055    /**
2056     * The legal status of supply of the medicinal product as classified by the regulator.
2057     */
2058    @Child(name = "legalStatusOfSupply", type = {CodeableConcept.class}, order=10, min=0, max=1, modifier=false, summary=true)
2059    @Description(shortDefinition="The legal status of supply of the medicinal product as classified by the regulator", formalDefinition="The legal status of supply of the medicinal product as classified by the regulator." )
2060    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/legal-status-of-supply")
2061    protected CodeableConcept legalStatusOfSupply;
2062
2063    /**
2064     * Whether the Medicinal Product is subject to additional monitoring for regulatory reasons.
2065     */
2066    @Child(name = "additionalMonitoringIndicator", type = {CodeableConcept.class}, order=11, min=0, max=1, modifier=false, summary=true)
2067    @Description(shortDefinition="Whether the Medicinal Product is subject to additional monitoring for regulatory reasons", formalDefinition="Whether the Medicinal Product is subject to additional monitoring for regulatory reasons." )
2068    protected CodeableConcept additionalMonitoringIndicator;
2069
2070    /**
2071     * Whether the Medicinal Product is subject to special measures for regulatory reasons.
2072     */
2073    @Child(name = "specialMeasures", type = {CodeableConcept.class}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2074    @Description(shortDefinition="Whether the Medicinal Product is subject to special measures for regulatory reasons", formalDefinition="Whether the Medicinal Product is subject to special measures for regulatory reasons." )
2075    protected List<CodeableConcept> specialMeasures;
2076
2077    /**
2078     * If authorised for use in children.
2079     */
2080    @Child(name = "pediatricUseIndicator", type = {CodeableConcept.class}, order=13, min=0, max=1, modifier=false, summary=true)
2081    @Description(shortDefinition="If authorised for use in children", formalDefinition="If authorised for use in children." )
2082    protected CodeableConcept pediatricUseIndicator;
2083
2084    /**
2085     * Allows the product to be classified by various systems.
2086     */
2087    @Child(name = "classification", type = {CodeableConcept.class}, order=14, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2088    @Description(shortDefinition="Allows the product to be classified by various systems", formalDefinition="Allows the product to be classified by various systems." )
2089    protected List<CodeableConcept> classification;
2090
2091    /**
2092     * Marketing status of the medicinal product, in contrast to marketing authorization.
2093     */
2094    @Child(name = "marketingStatus", type = {MarketingStatus.class}, order=15, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2095    @Description(shortDefinition="Marketing status of the medicinal product, in contrast to marketing authorization", formalDefinition="Marketing status of the medicinal product, in contrast to marketing authorization." )
2096    protected List<MarketingStatus> marketingStatus;
2097
2098    /**
2099     * Package representation for the product. See also the PackagedProductDefinition resource.
2100     */
2101    @Child(name = "packagedMedicinalProduct", type = {CodeableConcept.class}, order=16, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2102    @Description(shortDefinition="Package representation for the product", formalDefinition="Package representation for the product. See also the PackagedProductDefinition resource." )
2103    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/medicinal-product-package-type")
2104    protected List<CodeableConcept> packagedMedicinalProduct;
2105
2106    /**
2107     * The ingredients of this medicinal product - when not detailed in other resources. This is only needed if the ingredients are not specified by incoming references from the Ingredient resource, or indirectly via incoming AdministrableProductDefinition, PackagedProductDefinition or ManufacturedItemDefinition references. In cases where those levels of detail are not used, the ingredients may be specified directly here as codes.
2108     */
2109    @Child(name = "ingredient", type = {CodeableConcept.class}, order=17, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2110    @Description(shortDefinition="The ingredients of this medicinal product - when not detailed in other resources. This is only needed if the ingredients are not specified by incoming references from the Ingredient resource, or indirectly via incoming AdministrableProductDefinition, PackagedProductDefinition or ManufacturedItemDefinition references. In cases where those levels of detail are not used, the ingredients may be specified directly here as codes", formalDefinition="The ingredients of this medicinal product - when not detailed in other resources. This is only needed if the ingredients are not specified by incoming references from the Ingredient resource, or indirectly via incoming AdministrableProductDefinition, PackagedProductDefinition or ManufacturedItemDefinition references. In cases where those levels of detail are not used, the ingredients may be specified directly here as codes." )
2111    protected List<CodeableConcept> ingredient;
2112
2113    /**
2114     * Any component of the drug product which is not the chemical entity defined as the drug substance or an excipient in the drug product. This includes process-related impurities and contaminants, product-related impurities including degradation products.
2115     */
2116    @Child(name = "impurity", type = {CodeableReference.class}, order=18, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2117    @Description(shortDefinition="Any component of the drug product which is not the chemical entity defined as the drug substance or an excipient in the drug product. This includes process-related impurities and contaminants, product-related impurities including degradation products", formalDefinition="Any component of the drug product which is not the chemical entity defined as the drug substance or an excipient in the drug product. This includes process-related impurities and contaminants, product-related impurities including degradation products." )
2118    protected List<CodeableReference> impurity;
2119
2120    /**
2121     * Additional information or supporting documentation about the medicinal product.
2122     */
2123    @Child(name = "attachedDocument", type = {DocumentReference.class}, order=19, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2124    @Description(shortDefinition="Additional information or supporting documentation about the medicinal product", formalDefinition="Additional information or supporting documentation about the medicinal product." )
2125    protected List<Reference> attachedDocument;
2126
2127    /**
2128     * A master file for the medicinal product (e.g. Pharmacovigilance System Master File). Drug master files (DMFs) are documents submitted to regulatory agencies to provide confidential detailed information about facilities, processes or articles used in the manufacturing, processing, packaging and storing of drug products.
2129     */
2130    @Child(name = "masterFile", type = {DocumentReference.class}, order=20, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2131    @Description(shortDefinition="A master file for the medicinal product (e.g. Pharmacovigilance System Master File)", formalDefinition="A master file for the medicinal product (e.g. Pharmacovigilance System Master File). Drug master files (DMFs) are documents submitted to regulatory agencies to provide confidential detailed information about facilities, processes or articles used in the manufacturing, processing, packaging and storing of drug products." )
2132    protected List<Reference> masterFile;
2133
2134    /**
2135     * A product specific contact, person (in a role), or an organization.
2136     */
2137    @Child(name = "contact", type = {}, order=21, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2138    @Description(shortDefinition="A product specific contact, person (in a role), or an organization", formalDefinition="A product specific contact, person (in a role), or an organization." )
2139    protected List<MedicinalProductDefinitionContactComponent> contact;
2140
2141    /**
2142     * Clinical trials or studies that this product is involved in.
2143     */
2144    @Child(name = "clinicalTrial", type = {ResearchStudy.class}, order=22, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2145    @Description(shortDefinition="Clinical trials or studies that this product is involved in", formalDefinition="Clinical trials or studies that this product is involved in." )
2146    protected List<Reference> clinicalTrial;
2147
2148    /**
2149     * A code that this product is known by, usually within some formal terminology. Products (types of medications) tend to be known by identifiers during development and within regulatory process. However when they are prescribed they tend to be identified by codes. The same product may be have multiple codes, applied to it by multiple organizations.
2150     */
2151    @Child(name = "code", type = {Coding.class}, order=23, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2152    @Description(shortDefinition="A code that this product is known by, within some formal terminology", formalDefinition="A code that this product is known by, usually within some formal terminology. Products (types of medications) tend to be known by identifiers during development and within regulatory process. However when they are prescribed they tend to be identified by codes. The same product may be have multiple codes, applied to it by multiple organizations." )
2153    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/medication-codes")
2154    protected List<Coding> code;
2155
2156    /**
2157     * The product's name, including full name and possibly coded parts.
2158     */
2159    @Child(name = "name", type = {}, order=24, min=1, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2160    @Description(shortDefinition="The product's name, including full name and possibly coded parts", formalDefinition="The product's name, including full name and possibly coded parts." )
2161    protected List<MedicinalProductDefinitionNameComponent> name;
2162
2163    /**
2164     * Reference to another product, e.g. for linking authorised to investigational product.
2165     */
2166    @Child(name = "crossReference", type = {}, order=25, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2167    @Description(shortDefinition="Reference to another product, e.g. for linking authorised to investigational product", formalDefinition="Reference to another product, e.g. for linking authorised to investigational product." )
2168    protected List<MedicinalProductDefinitionCrossReferenceComponent> crossReference;
2169
2170    /**
2171     * A manufacturing or administrative process or step associated with (or performed on) the medicinal product.
2172     */
2173    @Child(name = "operation", type = {}, order=26, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2174    @Description(shortDefinition="A manufacturing or administrative process or step associated with (or performed on) the medicinal product", formalDefinition="A manufacturing or administrative process or step associated with (or performed on) the medicinal product." )
2175    protected List<MedicinalProductDefinitionOperationComponent> operation;
2176
2177    /**
2178     * Allows the key product features to be recorded, such as "sugar free", "modified release", "parallel import".
2179     */
2180    @Child(name = "characteristic", type = {}, order=27, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2181    @Description(shortDefinition="Allows the key product features to be recorded, such as \"sugar free\", \"modified release\", \"parallel import\"", formalDefinition="Allows the key product features to be recorded, such as \"sugar free\", \"modified release\", \"parallel import\"." )
2182    protected List<MedicinalProductDefinitionCharacteristicComponent> characteristic;
2183
2184    private static final long serialVersionUID = -2099569280L;
2185
2186  /**
2187   * Constructor
2188   */
2189    public MedicinalProductDefinition() {
2190      super();
2191    }
2192
2193  /**
2194   * Constructor
2195   */
2196    public MedicinalProductDefinition(MedicinalProductDefinitionNameComponent name) {
2197      super();
2198      this.addName(name);
2199    }
2200
2201    /**
2202     * @return {@link #identifier} (Business identifier for this product. Could be an MPID.)
2203     */
2204    public List<Identifier> getIdentifier() { 
2205      if (this.identifier == null)
2206        this.identifier = new ArrayList<Identifier>();
2207      return this.identifier;
2208    }
2209
2210    /**
2211     * @return Returns a reference to <code>this</code> for easy method chaining
2212     */
2213    public MedicinalProductDefinition setIdentifier(List<Identifier> theIdentifier) { 
2214      this.identifier = theIdentifier;
2215      return this;
2216    }
2217
2218    public boolean hasIdentifier() { 
2219      if (this.identifier == null)
2220        return false;
2221      for (Identifier item : this.identifier)
2222        if (!item.isEmpty())
2223          return true;
2224      return false;
2225    }
2226
2227    public Identifier addIdentifier() { //3
2228      Identifier t = new Identifier();
2229      if (this.identifier == null)
2230        this.identifier = new ArrayList<Identifier>();
2231      this.identifier.add(t);
2232      return t;
2233    }
2234
2235    public MedicinalProductDefinition addIdentifier(Identifier t) { //3
2236      if (t == null)
2237        return this;
2238      if (this.identifier == null)
2239        this.identifier = new ArrayList<Identifier>();
2240      this.identifier.add(t);
2241      return this;
2242    }
2243
2244    /**
2245     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
2246     */
2247    public Identifier getIdentifierFirstRep() { 
2248      if (getIdentifier().isEmpty()) {
2249        addIdentifier();
2250      }
2251      return getIdentifier().get(0);
2252    }
2253
2254    /**
2255     * @return {@link #type} (Regulatory type, e.g. Investigational or Authorized.)
2256     */
2257    public CodeableConcept getType() { 
2258      if (this.type == null)
2259        if (Configuration.errorOnAutoCreate())
2260          throw new Error("Attempt to auto-create MedicinalProductDefinition.type");
2261        else if (Configuration.doAutoCreate())
2262          this.type = new CodeableConcept(); // cc
2263      return this.type;
2264    }
2265
2266    public boolean hasType() { 
2267      return this.type != null && !this.type.isEmpty();
2268    }
2269
2270    /**
2271     * @param value {@link #type} (Regulatory type, e.g. Investigational or Authorized.)
2272     */
2273    public MedicinalProductDefinition setType(CodeableConcept value) { 
2274      this.type = value;
2275      return this;
2276    }
2277
2278    /**
2279     * @return {@link #domain} (If this medicine applies to human or veterinary uses.)
2280     */
2281    public CodeableConcept getDomain() { 
2282      if (this.domain == null)
2283        if (Configuration.errorOnAutoCreate())
2284          throw new Error("Attempt to auto-create MedicinalProductDefinition.domain");
2285        else if (Configuration.doAutoCreate())
2286          this.domain = new CodeableConcept(); // cc
2287      return this.domain;
2288    }
2289
2290    public boolean hasDomain() { 
2291      return this.domain != null && !this.domain.isEmpty();
2292    }
2293
2294    /**
2295     * @param value {@link #domain} (If this medicine applies to human or veterinary uses.)
2296     */
2297    public MedicinalProductDefinition setDomain(CodeableConcept value) { 
2298      this.domain = value;
2299      return this;
2300    }
2301
2302    /**
2303     * @return {@link #version} (A business identifier relating to a specific version of the product, this is commonly used to support revisions to an existing product.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
2304     */
2305    public StringType getVersionElement() { 
2306      if (this.version == null)
2307        if (Configuration.errorOnAutoCreate())
2308          throw new Error("Attempt to auto-create MedicinalProductDefinition.version");
2309        else if (Configuration.doAutoCreate())
2310          this.version = new StringType(); // bb
2311      return this.version;
2312    }
2313
2314    public boolean hasVersionElement() { 
2315      return this.version != null && !this.version.isEmpty();
2316    }
2317
2318    public boolean hasVersion() { 
2319      return this.version != null && !this.version.isEmpty();
2320    }
2321
2322    /**
2323     * @param value {@link #version} (A business identifier relating to a specific version of the product, this is commonly used to support revisions to an existing product.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
2324     */
2325    public MedicinalProductDefinition setVersionElement(StringType value) { 
2326      this.version = value;
2327      return this;
2328    }
2329
2330    /**
2331     * @return A business identifier relating to a specific version of the product, this is commonly used to support revisions to an existing product.
2332     */
2333    public String getVersion() { 
2334      return this.version == null ? null : this.version.getValue();
2335    }
2336
2337    /**
2338     * @param value A business identifier relating to a specific version of the product, this is commonly used to support revisions to an existing product.
2339     */
2340    public MedicinalProductDefinition setVersion(String value) { 
2341      if (Utilities.noString(value))
2342        this.version = null;
2343      else {
2344        if (this.version == null)
2345          this.version = new StringType();
2346        this.version.setValue(value);
2347      }
2348      return this;
2349    }
2350
2351    /**
2352     * @return {@link #status} (The status within the lifecycle of this product record. A high-level status, this is not intended to duplicate details carried elsewhere such as legal status, or authorization status.)
2353     */
2354    public CodeableConcept getStatus() { 
2355      if (this.status == null)
2356        if (Configuration.errorOnAutoCreate())
2357          throw new Error("Attempt to auto-create MedicinalProductDefinition.status");
2358        else if (Configuration.doAutoCreate())
2359          this.status = new CodeableConcept(); // cc
2360      return this.status;
2361    }
2362
2363    public boolean hasStatus() { 
2364      return this.status != null && !this.status.isEmpty();
2365    }
2366
2367    /**
2368     * @param value {@link #status} (The status within the lifecycle of this product record. A high-level status, this is not intended to duplicate details carried elsewhere such as legal status, or authorization status.)
2369     */
2370    public MedicinalProductDefinition setStatus(CodeableConcept value) { 
2371      this.status = value;
2372      return this;
2373    }
2374
2375    /**
2376     * @return {@link #statusDate} (The date at which the given status became applicable.). This is the underlying object with id, value and extensions. The accessor "getStatusDate" gives direct access to the value
2377     */
2378    public DateTimeType getStatusDateElement() { 
2379      if (this.statusDate == null)
2380        if (Configuration.errorOnAutoCreate())
2381          throw new Error("Attempt to auto-create MedicinalProductDefinition.statusDate");
2382        else if (Configuration.doAutoCreate())
2383          this.statusDate = new DateTimeType(); // bb
2384      return this.statusDate;
2385    }
2386
2387    public boolean hasStatusDateElement() { 
2388      return this.statusDate != null && !this.statusDate.isEmpty();
2389    }
2390
2391    public boolean hasStatusDate() { 
2392      return this.statusDate != null && !this.statusDate.isEmpty();
2393    }
2394
2395    /**
2396     * @param value {@link #statusDate} (The date at which the given status became applicable.). This is the underlying object with id, value and extensions. The accessor "getStatusDate" gives direct access to the value
2397     */
2398    public MedicinalProductDefinition setStatusDateElement(DateTimeType value) { 
2399      this.statusDate = value;
2400      return this;
2401    }
2402
2403    /**
2404     * @return The date at which the given status became applicable.
2405     */
2406    public Date getStatusDate() { 
2407      return this.statusDate == null ? null : this.statusDate.getValue();
2408    }
2409
2410    /**
2411     * @param value The date at which the given status became applicable.
2412     */
2413    public MedicinalProductDefinition setStatusDate(Date value) { 
2414      if (value == null)
2415        this.statusDate = null;
2416      else {
2417        if (this.statusDate == null)
2418          this.statusDate = new DateTimeType();
2419        this.statusDate.setValue(value);
2420      }
2421      return this;
2422    }
2423
2424    /**
2425     * @return {@link #description} (General description of this product.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
2426     */
2427    public MarkdownType getDescriptionElement() { 
2428      if (this.description == null)
2429        if (Configuration.errorOnAutoCreate())
2430          throw new Error("Attempt to auto-create MedicinalProductDefinition.description");
2431        else if (Configuration.doAutoCreate())
2432          this.description = new MarkdownType(); // bb
2433      return this.description;
2434    }
2435
2436    public boolean hasDescriptionElement() { 
2437      return this.description != null && !this.description.isEmpty();
2438    }
2439
2440    public boolean hasDescription() { 
2441      return this.description != null && !this.description.isEmpty();
2442    }
2443
2444    /**
2445     * @param value {@link #description} (General description of this product.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
2446     */
2447    public MedicinalProductDefinition setDescriptionElement(MarkdownType value) { 
2448      this.description = value;
2449      return this;
2450    }
2451
2452    /**
2453     * @return General description of this product.
2454     */
2455    public String getDescription() { 
2456      return this.description == null ? null : this.description.getValue();
2457    }
2458
2459    /**
2460     * @param value General description of this product.
2461     */
2462    public MedicinalProductDefinition setDescription(String value) { 
2463      if (value == null)
2464        this.description = null;
2465      else {
2466        if (this.description == null)
2467          this.description = new MarkdownType();
2468        this.description.setValue(value);
2469      }
2470      return this;
2471    }
2472
2473    /**
2474     * @return {@link #combinedPharmaceuticalDoseForm} (The dose form for a single part product, or combined form of a multiple part product.)
2475     */
2476    public CodeableConcept getCombinedPharmaceuticalDoseForm() { 
2477      if (this.combinedPharmaceuticalDoseForm == null)
2478        if (Configuration.errorOnAutoCreate())
2479          throw new Error("Attempt to auto-create MedicinalProductDefinition.combinedPharmaceuticalDoseForm");
2480        else if (Configuration.doAutoCreate())
2481          this.combinedPharmaceuticalDoseForm = new CodeableConcept(); // cc
2482      return this.combinedPharmaceuticalDoseForm;
2483    }
2484
2485    public boolean hasCombinedPharmaceuticalDoseForm() { 
2486      return this.combinedPharmaceuticalDoseForm != null && !this.combinedPharmaceuticalDoseForm.isEmpty();
2487    }
2488
2489    /**
2490     * @param value {@link #combinedPharmaceuticalDoseForm} (The dose form for a single part product, or combined form of a multiple part product.)
2491     */
2492    public MedicinalProductDefinition setCombinedPharmaceuticalDoseForm(CodeableConcept value) { 
2493      this.combinedPharmaceuticalDoseForm = value;
2494      return this;
2495    }
2496
2497    /**
2498     * @return {@link #route} (The path by which the product is taken into or makes contact with the body. In some regions this is referred to as the licenced or approved route. See also AdministrableProductDefinition resource.)
2499     */
2500    public List<CodeableConcept> getRoute() { 
2501      if (this.route == null)
2502        this.route = new ArrayList<CodeableConcept>();
2503      return this.route;
2504    }
2505
2506    /**
2507     * @return Returns a reference to <code>this</code> for easy method chaining
2508     */
2509    public MedicinalProductDefinition setRoute(List<CodeableConcept> theRoute) { 
2510      this.route = theRoute;
2511      return this;
2512    }
2513
2514    public boolean hasRoute() { 
2515      if (this.route == null)
2516        return false;
2517      for (CodeableConcept item : this.route)
2518        if (!item.isEmpty())
2519          return true;
2520      return false;
2521    }
2522
2523    public CodeableConcept addRoute() { //3
2524      CodeableConcept t = new CodeableConcept();
2525      if (this.route == null)
2526        this.route = new ArrayList<CodeableConcept>();
2527      this.route.add(t);
2528      return t;
2529    }
2530
2531    public MedicinalProductDefinition addRoute(CodeableConcept t) { //3
2532      if (t == null)
2533        return this;
2534      if (this.route == null)
2535        this.route = new ArrayList<CodeableConcept>();
2536      this.route.add(t);
2537      return this;
2538    }
2539
2540    /**
2541     * @return The first repetition of repeating field {@link #route}, creating it if it does not already exist {3}
2542     */
2543    public CodeableConcept getRouteFirstRep() { 
2544      if (getRoute().isEmpty()) {
2545        addRoute();
2546      }
2547      return getRoute().get(0);
2548    }
2549
2550    /**
2551     * @return {@link #indication} (Description of indication(s) for this product, used when structured indications are not required. In cases where structured indications are required, they are captured using the ClinicalUseDefinition resource. An indication is a medical situation for which using the product is appropriate.). This is the underlying object with id, value and extensions. The accessor "getIndication" gives direct access to the value
2552     */
2553    public MarkdownType getIndicationElement() { 
2554      if (this.indication == null)
2555        if (Configuration.errorOnAutoCreate())
2556          throw new Error("Attempt to auto-create MedicinalProductDefinition.indication");
2557        else if (Configuration.doAutoCreate())
2558          this.indication = new MarkdownType(); // bb
2559      return this.indication;
2560    }
2561
2562    public boolean hasIndicationElement() { 
2563      return this.indication != null && !this.indication.isEmpty();
2564    }
2565
2566    public boolean hasIndication() { 
2567      return this.indication != null && !this.indication.isEmpty();
2568    }
2569
2570    /**
2571     * @param value {@link #indication} (Description of indication(s) for this product, used when structured indications are not required. In cases where structured indications are required, they are captured using the ClinicalUseDefinition resource. An indication is a medical situation for which using the product is appropriate.). This is the underlying object with id, value and extensions. The accessor "getIndication" gives direct access to the value
2572     */
2573    public MedicinalProductDefinition setIndicationElement(MarkdownType value) { 
2574      this.indication = value;
2575      return this;
2576    }
2577
2578    /**
2579     * @return Description of indication(s) for this product, used when structured indications are not required. In cases where structured indications are required, they are captured using the ClinicalUseDefinition resource. An indication is a medical situation for which using the product is appropriate.
2580     */
2581    public String getIndication() { 
2582      return this.indication == null ? null : this.indication.getValue();
2583    }
2584
2585    /**
2586     * @param value Description of indication(s) for this product, used when structured indications are not required. In cases where structured indications are required, they are captured using the ClinicalUseDefinition resource. An indication is a medical situation for which using the product is appropriate.
2587     */
2588    public MedicinalProductDefinition setIndication(String value) { 
2589      if (value == null)
2590        this.indication = null;
2591      else {
2592        if (this.indication == null)
2593          this.indication = new MarkdownType();
2594        this.indication.setValue(value);
2595      }
2596      return this;
2597    }
2598
2599    /**
2600     * @return {@link #legalStatusOfSupply} (The legal status of supply of the medicinal product as classified by the regulator.)
2601     */
2602    public CodeableConcept getLegalStatusOfSupply() { 
2603      if (this.legalStatusOfSupply == null)
2604        if (Configuration.errorOnAutoCreate())
2605          throw new Error("Attempt to auto-create MedicinalProductDefinition.legalStatusOfSupply");
2606        else if (Configuration.doAutoCreate())
2607          this.legalStatusOfSupply = new CodeableConcept(); // cc
2608      return this.legalStatusOfSupply;
2609    }
2610
2611    public boolean hasLegalStatusOfSupply() { 
2612      return this.legalStatusOfSupply != null && !this.legalStatusOfSupply.isEmpty();
2613    }
2614
2615    /**
2616     * @param value {@link #legalStatusOfSupply} (The legal status of supply of the medicinal product as classified by the regulator.)
2617     */
2618    public MedicinalProductDefinition setLegalStatusOfSupply(CodeableConcept value) { 
2619      this.legalStatusOfSupply = value;
2620      return this;
2621    }
2622
2623    /**
2624     * @return {@link #additionalMonitoringIndicator} (Whether the Medicinal Product is subject to additional monitoring for regulatory reasons.)
2625     */
2626    public CodeableConcept getAdditionalMonitoringIndicator() { 
2627      if (this.additionalMonitoringIndicator == null)
2628        if (Configuration.errorOnAutoCreate())
2629          throw new Error("Attempt to auto-create MedicinalProductDefinition.additionalMonitoringIndicator");
2630        else if (Configuration.doAutoCreate())
2631          this.additionalMonitoringIndicator = new CodeableConcept(); // cc
2632      return this.additionalMonitoringIndicator;
2633    }
2634
2635    public boolean hasAdditionalMonitoringIndicator() { 
2636      return this.additionalMonitoringIndicator != null && !this.additionalMonitoringIndicator.isEmpty();
2637    }
2638
2639    /**
2640     * @param value {@link #additionalMonitoringIndicator} (Whether the Medicinal Product is subject to additional monitoring for regulatory reasons.)
2641     */
2642    public MedicinalProductDefinition setAdditionalMonitoringIndicator(CodeableConcept value) { 
2643      this.additionalMonitoringIndicator = value;
2644      return this;
2645    }
2646
2647    /**
2648     * @return {@link #specialMeasures} (Whether the Medicinal Product is subject to special measures for regulatory reasons.)
2649     */
2650    public List<CodeableConcept> getSpecialMeasures() { 
2651      if (this.specialMeasures == null)
2652        this.specialMeasures = new ArrayList<CodeableConcept>();
2653      return this.specialMeasures;
2654    }
2655
2656    /**
2657     * @return Returns a reference to <code>this</code> for easy method chaining
2658     */
2659    public MedicinalProductDefinition setSpecialMeasures(List<CodeableConcept> theSpecialMeasures) { 
2660      this.specialMeasures = theSpecialMeasures;
2661      return this;
2662    }
2663
2664    public boolean hasSpecialMeasures() { 
2665      if (this.specialMeasures == null)
2666        return false;
2667      for (CodeableConcept item : this.specialMeasures)
2668        if (!item.isEmpty())
2669          return true;
2670      return false;
2671    }
2672
2673    public CodeableConcept addSpecialMeasures() { //3
2674      CodeableConcept t = new CodeableConcept();
2675      if (this.specialMeasures == null)
2676        this.specialMeasures = new ArrayList<CodeableConcept>();
2677      this.specialMeasures.add(t);
2678      return t;
2679    }
2680
2681    public MedicinalProductDefinition addSpecialMeasures(CodeableConcept t) { //3
2682      if (t == null)
2683        return this;
2684      if (this.specialMeasures == null)
2685        this.specialMeasures = new ArrayList<CodeableConcept>();
2686      this.specialMeasures.add(t);
2687      return this;
2688    }
2689
2690    /**
2691     * @return The first repetition of repeating field {@link #specialMeasures}, creating it if it does not already exist {3}
2692     */
2693    public CodeableConcept getSpecialMeasuresFirstRep() { 
2694      if (getSpecialMeasures().isEmpty()) {
2695        addSpecialMeasures();
2696      }
2697      return getSpecialMeasures().get(0);
2698    }
2699
2700    /**
2701     * @return {@link #pediatricUseIndicator} (If authorised for use in children.)
2702     */
2703    public CodeableConcept getPediatricUseIndicator() { 
2704      if (this.pediatricUseIndicator == null)
2705        if (Configuration.errorOnAutoCreate())
2706          throw new Error("Attempt to auto-create MedicinalProductDefinition.pediatricUseIndicator");
2707        else if (Configuration.doAutoCreate())
2708          this.pediatricUseIndicator = new CodeableConcept(); // cc
2709      return this.pediatricUseIndicator;
2710    }
2711
2712    public boolean hasPediatricUseIndicator() { 
2713      return this.pediatricUseIndicator != null && !this.pediatricUseIndicator.isEmpty();
2714    }
2715
2716    /**
2717     * @param value {@link #pediatricUseIndicator} (If authorised for use in children.)
2718     */
2719    public MedicinalProductDefinition setPediatricUseIndicator(CodeableConcept value) { 
2720      this.pediatricUseIndicator = value;
2721      return this;
2722    }
2723
2724    /**
2725     * @return {@link #classification} (Allows the product to be classified by various systems.)
2726     */
2727    public List<CodeableConcept> getClassification() { 
2728      if (this.classification == null)
2729        this.classification = new ArrayList<CodeableConcept>();
2730      return this.classification;
2731    }
2732
2733    /**
2734     * @return Returns a reference to <code>this</code> for easy method chaining
2735     */
2736    public MedicinalProductDefinition setClassification(List<CodeableConcept> theClassification) { 
2737      this.classification = theClassification;
2738      return this;
2739    }
2740
2741    public boolean hasClassification() { 
2742      if (this.classification == null)
2743        return false;
2744      for (CodeableConcept item : this.classification)
2745        if (!item.isEmpty())
2746          return true;
2747      return false;
2748    }
2749
2750    public CodeableConcept addClassification() { //3
2751      CodeableConcept t = new CodeableConcept();
2752      if (this.classification == null)
2753        this.classification = new ArrayList<CodeableConcept>();
2754      this.classification.add(t);
2755      return t;
2756    }
2757
2758    public MedicinalProductDefinition addClassification(CodeableConcept t) { //3
2759      if (t == null)
2760        return this;
2761      if (this.classification == null)
2762        this.classification = new ArrayList<CodeableConcept>();
2763      this.classification.add(t);
2764      return this;
2765    }
2766
2767    /**
2768     * @return The first repetition of repeating field {@link #classification}, creating it if it does not already exist {3}
2769     */
2770    public CodeableConcept getClassificationFirstRep() { 
2771      if (getClassification().isEmpty()) {
2772        addClassification();
2773      }
2774      return getClassification().get(0);
2775    }
2776
2777    /**
2778     * @return {@link #marketingStatus} (Marketing status of the medicinal product, in contrast to marketing authorization.)
2779     */
2780    public List<MarketingStatus> getMarketingStatus() { 
2781      if (this.marketingStatus == null)
2782        this.marketingStatus = new ArrayList<MarketingStatus>();
2783      return this.marketingStatus;
2784    }
2785
2786    /**
2787     * @return Returns a reference to <code>this</code> for easy method chaining
2788     */
2789    public MedicinalProductDefinition setMarketingStatus(List<MarketingStatus> theMarketingStatus) { 
2790      this.marketingStatus = theMarketingStatus;
2791      return this;
2792    }
2793
2794    public boolean hasMarketingStatus() { 
2795      if (this.marketingStatus == null)
2796        return false;
2797      for (MarketingStatus item : this.marketingStatus)
2798        if (!item.isEmpty())
2799          return true;
2800      return false;
2801    }
2802
2803    public MarketingStatus addMarketingStatus() { //3
2804      MarketingStatus t = new MarketingStatus();
2805      if (this.marketingStatus == null)
2806        this.marketingStatus = new ArrayList<MarketingStatus>();
2807      this.marketingStatus.add(t);
2808      return t;
2809    }
2810
2811    public MedicinalProductDefinition addMarketingStatus(MarketingStatus t) { //3
2812      if (t == null)
2813        return this;
2814      if (this.marketingStatus == null)
2815        this.marketingStatus = new ArrayList<MarketingStatus>();
2816      this.marketingStatus.add(t);
2817      return this;
2818    }
2819
2820    /**
2821     * @return The first repetition of repeating field {@link #marketingStatus}, creating it if it does not already exist {3}
2822     */
2823    public MarketingStatus getMarketingStatusFirstRep() { 
2824      if (getMarketingStatus().isEmpty()) {
2825        addMarketingStatus();
2826      }
2827      return getMarketingStatus().get(0);
2828    }
2829
2830    /**
2831     * @return {@link #packagedMedicinalProduct} (Package representation for the product. See also the PackagedProductDefinition resource.)
2832     */
2833    public List<CodeableConcept> getPackagedMedicinalProduct() { 
2834      if (this.packagedMedicinalProduct == null)
2835        this.packagedMedicinalProduct = new ArrayList<CodeableConcept>();
2836      return this.packagedMedicinalProduct;
2837    }
2838
2839    /**
2840     * @return Returns a reference to <code>this</code> for easy method chaining
2841     */
2842    public MedicinalProductDefinition setPackagedMedicinalProduct(List<CodeableConcept> thePackagedMedicinalProduct) { 
2843      this.packagedMedicinalProduct = thePackagedMedicinalProduct;
2844      return this;
2845    }
2846
2847    public boolean hasPackagedMedicinalProduct() { 
2848      if (this.packagedMedicinalProduct == null)
2849        return false;
2850      for (CodeableConcept item : this.packagedMedicinalProduct)
2851        if (!item.isEmpty())
2852          return true;
2853      return false;
2854    }
2855
2856    public CodeableConcept addPackagedMedicinalProduct() { //3
2857      CodeableConcept t = new CodeableConcept();
2858      if (this.packagedMedicinalProduct == null)
2859        this.packagedMedicinalProduct = new ArrayList<CodeableConcept>();
2860      this.packagedMedicinalProduct.add(t);
2861      return t;
2862    }
2863
2864    public MedicinalProductDefinition addPackagedMedicinalProduct(CodeableConcept t) { //3
2865      if (t == null)
2866        return this;
2867      if (this.packagedMedicinalProduct == null)
2868        this.packagedMedicinalProduct = new ArrayList<CodeableConcept>();
2869      this.packagedMedicinalProduct.add(t);
2870      return this;
2871    }
2872
2873    /**
2874     * @return The first repetition of repeating field {@link #packagedMedicinalProduct}, creating it if it does not already exist {3}
2875     */
2876    public CodeableConcept getPackagedMedicinalProductFirstRep() { 
2877      if (getPackagedMedicinalProduct().isEmpty()) {
2878        addPackagedMedicinalProduct();
2879      }
2880      return getPackagedMedicinalProduct().get(0);
2881    }
2882
2883    /**
2884     * @return {@link #ingredient} (The ingredients of this medicinal product - when not detailed in other resources. This is only needed if the ingredients are not specified by incoming references from the Ingredient resource, or indirectly via incoming AdministrableProductDefinition, PackagedProductDefinition or ManufacturedItemDefinition references. In cases where those levels of detail are not used, the ingredients may be specified directly here as codes.)
2885     */
2886    public List<CodeableConcept> getIngredient() { 
2887      if (this.ingredient == null)
2888        this.ingredient = new ArrayList<CodeableConcept>();
2889      return this.ingredient;
2890    }
2891
2892    /**
2893     * @return Returns a reference to <code>this</code> for easy method chaining
2894     */
2895    public MedicinalProductDefinition setIngredient(List<CodeableConcept> theIngredient) { 
2896      this.ingredient = theIngredient;
2897      return this;
2898    }
2899
2900    public boolean hasIngredient() { 
2901      if (this.ingredient == null)
2902        return false;
2903      for (CodeableConcept item : this.ingredient)
2904        if (!item.isEmpty())
2905          return true;
2906      return false;
2907    }
2908
2909    public CodeableConcept addIngredient() { //3
2910      CodeableConcept t = new CodeableConcept();
2911      if (this.ingredient == null)
2912        this.ingredient = new ArrayList<CodeableConcept>();
2913      this.ingredient.add(t);
2914      return t;
2915    }
2916
2917    public MedicinalProductDefinition addIngredient(CodeableConcept t) { //3
2918      if (t == null)
2919        return this;
2920      if (this.ingredient == null)
2921        this.ingredient = new ArrayList<CodeableConcept>();
2922      this.ingredient.add(t);
2923      return this;
2924    }
2925
2926    /**
2927     * @return The first repetition of repeating field {@link #ingredient}, creating it if it does not already exist {3}
2928     */
2929    public CodeableConcept getIngredientFirstRep() { 
2930      if (getIngredient().isEmpty()) {
2931        addIngredient();
2932      }
2933      return getIngredient().get(0);
2934    }
2935
2936    /**
2937     * @return {@link #impurity} (Any component of the drug product which is not the chemical entity defined as the drug substance or an excipient in the drug product. This includes process-related impurities and contaminants, product-related impurities including degradation products.)
2938     */
2939    public List<CodeableReference> getImpurity() { 
2940      if (this.impurity == null)
2941        this.impurity = new ArrayList<CodeableReference>();
2942      return this.impurity;
2943    }
2944
2945    /**
2946     * @return Returns a reference to <code>this</code> for easy method chaining
2947     */
2948    public MedicinalProductDefinition setImpurity(List<CodeableReference> theImpurity) { 
2949      this.impurity = theImpurity;
2950      return this;
2951    }
2952
2953    public boolean hasImpurity() { 
2954      if (this.impurity == null)
2955        return false;
2956      for (CodeableReference item : this.impurity)
2957        if (!item.isEmpty())
2958          return true;
2959      return false;
2960    }
2961
2962    public CodeableReference addImpurity() { //3
2963      CodeableReference t = new CodeableReference();
2964      if (this.impurity == null)
2965        this.impurity = new ArrayList<CodeableReference>();
2966      this.impurity.add(t);
2967      return t;
2968    }
2969
2970    public MedicinalProductDefinition addImpurity(CodeableReference t) { //3
2971      if (t == null)
2972        return this;
2973      if (this.impurity == null)
2974        this.impurity = new ArrayList<CodeableReference>();
2975      this.impurity.add(t);
2976      return this;
2977    }
2978
2979    /**
2980     * @return The first repetition of repeating field {@link #impurity}, creating it if it does not already exist {3}
2981     */
2982    public CodeableReference getImpurityFirstRep() { 
2983      if (getImpurity().isEmpty()) {
2984        addImpurity();
2985      }
2986      return getImpurity().get(0);
2987    }
2988
2989    /**
2990     * @return {@link #attachedDocument} (Additional information or supporting documentation about the medicinal product.)
2991     */
2992    public List<Reference> getAttachedDocument() { 
2993      if (this.attachedDocument == null)
2994        this.attachedDocument = new ArrayList<Reference>();
2995      return this.attachedDocument;
2996    }
2997
2998    /**
2999     * @return Returns a reference to <code>this</code> for easy method chaining
3000     */
3001    public MedicinalProductDefinition setAttachedDocument(List<Reference> theAttachedDocument) { 
3002      this.attachedDocument = theAttachedDocument;
3003      return this;
3004    }
3005
3006    public boolean hasAttachedDocument() { 
3007      if (this.attachedDocument == null)
3008        return false;
3009      for (Reference item : this.attachedDocument)
3010        if (!item.isEmpty())
3011          return true;
3012      return false;
3013    }
3014
3015    public Reference addAttachedDocument() { //3
3016      Reference t = new Reference();
3017      if (this.attachedDocument == null)
3018        this.attachedDocument = new ArrayList<Reference>();
3019      this.attachedDocument.add(t);
3020      return t;
3021    }
3022
3023    public MedicinalProductDefinition addAttachedDocument(Reference t) { //3
3024      if (t == null)
3025        return this;
3026      if (this.attachedDocument == null)
3027        this.attachedDocument = new ArrayList<Reference>();
3028      this.attachedDocument.add(t);
3029      return this;
3030    }
3031
3032    /**
3033     * @return The first repetition of repeating field {@link #attachedDocument}, creating it if it does not already exist {3}
3034     */
3035    public Reference getAttachedDocumentFirstRep() { 
3036      if (getAttachedDocument().isEmpty()) {
3037        addAttachedDocument();
3038      }
3039      return getAttachedDocument().get(0);
3040    }
3041
3042    /**
3043     * @return {@link #masterFile} (A master file for the medicinal product (e.g. Pharmacovigilance System Master File). Drug master files (DMFs) are documents submitted to regulatory agencies to provide confidential detailed information about facilities, processes or articles used in the manufacturing, processing, packaging and storing of drug products.)
3044     */
3045    public List<Reference> getMasterFile() { 
3046      if (this.masterFile == null)
3047        this.masterFile = new ArrayList<Reference>();
3048      return this.masterFile;
3049    }
3050
3051    /**
3052     * @return Returns a reference to <code>this</code> for easy method chaining
3053     */
3054    public MedicinalProductDefinition setMasterFile(List<Reference> theMasterFile) { 
3055      this.masterFile = theMasterFile;
3056      return this;
3057    }
3058
3059    public boolean hasMasterFile() { 
3060      if (this.masterFile == null)
3061        return false;
3062      for (Reference item : this.masterFile)
3063        if (!item.isEmpty())
3064          return true;
3065      return false;
3066    }
3067
3068    public Reference addMasterFile() { //3
3069      Reference t = new Reference();
3070      if (this.masterFile == null)
3071        this.masterFile = new ArrayList<Reference>();
3072      this.masterFile.add(t);
3073      return t;
3074    }
3075
3076    public MedicinalProductDefinition addMasterFile(Reference t) { //3
3077      if (t == null)
3078        return this;
3079      if (this.masterFile == null)
3080        this.masterFile = new ArrayList<Reference>();
3081      this.masterFile.add(t);
3082      return this;
3083    }
3084
3085    /**
3086     * @return The first repetition of repeating field {@link #masterFile}, creating it if it does not already exist {3}
3087     */
3088    public Reference getMasterFileFirstRep() { 
3089      if (getMasterFile().isEmpty()) {
3090        addMasterFile();
3091      }
3092      return getMasterFile().get(0);
3093    }
3094
3095    /**
3096     * @return {@link #contact} (A product specific contact, person (in a role), or an organization.)
3097     */
3098    public List<MedicinalProductDefinitionContactComponent> getContact() { 
3099      if (this.contact == null)
3100        this.contact = new ArrayList<MedicinalProductDefinitionContactComponent>();
3101      return this.contact;
3102    }
3103
3104    /**
3105     * @return Returns a reference to <code>this</code> for easy method chaining
3106     */
3107    public MedicinalProductDefinition setContact(List<MedicinalProductDefinitionContactComponent> theContact) { 
3108      this.contact = theContact;
3109      return this;
3110    }
3111
3112    public boolean hasContact() { 
3113      if (this.contact == null)
3114        return false;
3115      for (MedicinalProductDefinitionContactComponent item : this.contact)
3116        if (!item.isEmpty())
3117          return true;
3118      return false;
3119    }
3120
3121    public MedicinalProductDefinitionContactComponent addContact() { //3
3122      MedicinalProductDefinitionContactComponent t = new MedicinalProductDefinitionContactComponent();
3123      if (this.contact == null)
3124        this.contact = new ArrayList<MedicinalProductDefinitionContactComponent>();
3125      this.contact.add(t);
3126      return t;
3127    }
3128
3129    public MedicinalProductDefinition addContact(MedicinalProductDefinitionContactComponent t) { //3
3130      if (t == null)
3131        return this;
3132      if (this.contact == null)
3133        this.contact = new ArrayList<MedicinalProductDefinitionContactComponent>();
3134      this.contact.add(t);
3135      return this;
3136    }
3137
3138    /**
3139     * @return The first repetition of repeating field {@link #contact}, creating it if it does not already exist {3}
3140     */
3141    public MedicinalProductDefinitionContactComponent getContactFirstRep() { 
3142      if (getContact().isEmpty()) {
3143        addContact();
3144      }
3145      return getContact().get(0);
3146    }
3147
3148    /**
3149     * @return {@link #clinicalTrial} (Clinical trials or studies that this product is involved in.)
3150     */
3151    public List<Reference> getClinicalTrial() { 
3152      if (this.clinicalTrial == null)
3153        this.clinicalTrial = new ArrayList<Reference>();
3154      return this.clinicalTrial;
3155    }
3156
3157    /**
3158     * @return Returns a reference to <code>this</code> for easy method chaining
3159     */
3160    public MedicinalProductDefinition setClinicalTrial(List<Reference> theClinicalTrial) { 
3161      this.clinicalTrial = theClinicalTrial;
3162      return this;
3163    }
3164
3165    public boolean hasClinicalTrial() { 
3166      if (this.clinicalTrial == null)
3167        return false;
3168      for (Reference item : this.clinicalTrial)
3169        if (!item.isEmpty())
3170          return true;
3171      return false;
3172    }
3173
3174    public Reference addClinicalTrial() { //3
3175      Reference t = new Reference();
3176      if (this.clinicalTrial == null)
3177        this.clinicalTrial = new ArrayList<Reference>();
3178      this.clinicalTrial.add(t);
3179      return t;
3180    }
3181
3182    public MedicinalProductDefinition addClinicalTrial(Reference t) { //3
3183      if (t == null)
3184        return this;
3185      if (this.clinicalTrial == null)
3186        this.clinicalTrial = new ArrayList<Reference>();
3187      this.clinicalTrial.add(t);
3188      return this;
3189    }
3190
3191    /**
3192     * @return The first repetition of repeating field {@link #clinicalTrial}, creating it if it does not already exist {3}
3193     */
3194    public Reference getClinicalTrialFirstRep() { 
3195      if (getClinicalTrial().isEmpty()) {
3196        addClinicalTrial();
3197      }
3198      return getClinicalTrial().get(0);
3199    }
3200
3201    /**
3202     * @return {@link #code} (A code that this product is known by, usually within some formal terminology. Products (types of medications) tend to be known by identifiers during development and within regulatory process. However when they are prescribed they tend to be identified by codes. The same product may be have multiple codes, applied to it by multiple organizations.)
3203     */
3204    public List<Coding> getCode() { 
3205      if (this.code == null)
3206        this.code = new ArrayList<Coding>();
3207      return this.code;
3208    }
3209
3210    /**
3211     * @return Returns a reference to <code>this</code> for easy method chaining
3212     */
3213    public MedicinalProductDefinition setCode(List<Coding> theCode) { 
3214      this.code = theCode;
3215      return this;
3216    }
3217
3218    public boolean hasCode() { 
3219      if (this.code == null)
3220        return false;
3221      for (Coding item : this.code)
3222        if (!item.isEmpty())
3223          return true;
3224      return false;
3225    }
3226
3227    public Coding addCode() { //3
3228      Coding t = new Coding();
3229      if (this.code == null)
3230        this.code = new ArrayList<Coding>();
3231      this.code.add(t);
3232      return t;
3233    }
3234
3235    public MedicinalProductDefinition addCode(Coding t) { //3
3236      if (t == null)
3237        return this;
3238      if (this.code == null)
3239        this.code = new ArrayList<Coding>();
3240      this.code.add(t);
3241      return this;
3242    }
3243
3244    /**
3245     * @return The first repetition of repeating field {@link #code}, creating it if it does not already exist {3}
3246     */
3247    public Coding getCodeFirstRep() { 
3248      if (getCode().isEmpty()) {
3249        addCode();
3250      }
3251      return getCode().get(0);
3252    }
3253
3254    /**
3255     * @return {@link #name} (The product's name, including full name and possibly coded parts.)
3256     */
3257    public List<MedicinalProductDefinitionNameComponent> getName() { 
3258      if (this.name == null)
3259        this.name = new ArrayList<MedicinalProductDefinitionNameComponent>();
3260      return this.name;
3261    }
3262
3263    /**
3264     * @return Returns a reference to <code>this</code> for easy method chaining
3265     */
3266    public MedicinalProductDefinition setName(List<MedicinalProductDefinitionNameComponent> theName) { 
3267      this.name = theName;
3268      return this;
3269    }
3270
3271    public boolean hasName() { 
3272      if (this.name == null)
3273        return false;
3274      for (MedicinalProductDefinitionNameComponent item : this.name)
3275        if (!item.isEmpty())
3276          return true;
3277      return false;
3278    }
3279
3280    public MedicinalProductDefinitionNameComponent addName() { //3
3281      MedicinalProductDefinitionNameComponent t = new MedicinalProductDefinitionNameComponent();
3282      if (this.name == null)
3283        this.name = new ArrayList<MedicinalProductDefinitionNameComponent>();
3284      this.name.add(t);
3285      return t;
3286    }
3287
3288    public MedicinalProductDefinition addName(MedicinalProductDefinitionNameComponent t) { //3
3289      if (t == null)
3290        return this;
3291      if (this.name == null)
3292        this.name = new ArrayList<MedicinalProductDefinitionNameComponent>();
3293      this.name.add(t);
3294      return this;
3295    }
3296
3297    /**
3298     * @return The first repetition of repeating field {@link #name}, creating it if it does not already exist {3}
3299     */
3300    public MedicinalProductDefinitionNameComponent getNameFirstRep() { 
3301      if (getName().isEmpty()) {
3302        addName();
3303      }
3304      return getName().get(0);
3305    }
3306
3307    /**
3308     * @return {@link #crossReference} (Reference to another product, e.g. for linking authorised to investigational product.)
3309     */
3310    public List<MedicinalProductDefinitionCrossReferenceComponent> getCrossReference() { 
3311      if (this.crossReference == null)
3312        this.crossReference = new ArrayList<MedicinalProductDefinitionCrossReferenceComponent>();
3313      return this.crossReference;
3314    }
3315
3316    /**
3317     * @return Returns a reference to <code>this</code> for easy method chaining
3318     */
3319    public MedicinalProductDefinition setCrossReference(List<MedicinalProductDefinitionCrossReferenceComponent> theCrossReference) { 
3320      this.crossReference = theCrossReference;
3321      return this;
3322    }
3323
3324    public boolean hasCrossReference() { 
3325      if (this.crossReference == null)
3326        return false;
3327      for (MedicinalProductDefinitionCrossReferenceComponent item : this.crossReference)
3328        if (!item.isEmpty())
3329          return true;
3330      return false;
3331    }
3332
3333    public MedicinalProductDefinitionCrossReferenceComponent addCrossReference() { //3
3334      MedicinalProductDefinitionCrossReferenceComponent t = new MedicinalProductDefinitionCrossReferenceComponent();
3335      if (this.crossReference == null)
3336        this.crossReference = new ArrayList<MedicinalProductDefinitionCrossReferenceComponent>();
3337      this.crossReference.add(t);
3338      return t;
3339    }
3340
3341    public MedicinalProductDefinition addCrossReference(MedicinalProductDefinitionCrossReferenceComponent t) { //3
3342      if (t == null)
3343        return this;
3344      if (this.crossReference == null)
3345        this.crossReference = new ArrayList<MedicinalProductDefinitionCrossReferenceComponent>();
3346      this.crossReference.add(t);
3347      return this;
3348    }
3349
3350    /**
3351     * @return The first repetition of repeating field {@link #crossReference}, creating it if it does not already exist {3}
3352     */
3353    public MedicinalProductDefinitionCrossReferenceComponent getCrossReferenceFirstRep() { 
3354      if (getCrossReference().isEmpty()) {
3355        addCrossReference();
3356      }
3357      return getCrossReference().get(0);
3358    }
3359
3360    /**
3361     * @return {@link #operation} (A manufacturing or administrative process or step associated with (or performed on) the medicinal product.)
3362     */
3363    public List<MedicinalProductDefinitionOperationComponent> getOperation() { 
3364      if (this.operation == null)
3365        this.operation = new ArrayList<MedicinalProductDefinitionOperationComponent>();
3366      return this.operation;
3367    }
3368
3369    /**
3370     * @return Returns a reference to <code>this</code> for easy method chaining
3371     */
3372    public MedicinalProductDefinition setOperation(List<MedicinalProductDefinitionOperationComponent> theOperation) { 
3373      this.operation = theOperation;
3374      return this;
3375    }
3376
3377    public boolean hasOperation() { 
3378      if (this.operation == null)
3379        return false;
3380      for (MedicinalProductDefinitionOperationComponent item : this.operation)
3381        if (!item.isEmpty())
3382          return true;
3383      return false;
3384    }
3385
3386    public MedicinalProductDefinitionOperationComponent addOperation() { //3
3387      MedicinalProductDefinitionOperationComponent t = new MedicinalProductDefinitionOperationComponent();
3388      if (this.operation == null)
3389        this.operation = new ArrayList<MedicinalProductDefinitionOperationComponent>();
3390      this.operation.add(t);
3391      return t;
3392    }
3393
3394    public MedicinalProductDefinition addOperation(MedicinalProductDefinitionOperationComponent t) { //3
3395      if (t == null)
3396        return this;
3397      if (this.operation == null)
3398        this.operation = new ArrayList<MedicinalProductDefinitionOperationComponent>();
3399      this.operation.add(t);
3400      return this;
3401    }
3402
3403    /**
3404     * @return The first repetition of repeating field {@link #operation}, creating it if it does not already exist {3}
3405     */
3406    public MedicinalProductDefinitionOperationComponent getOperationFirstRep() { 
3407      if (getOperation().isEmpty()) {
3408        addOperation();
3409      }
3410      return getOperation().get(0);
3411    }
3412
3413    /**
3414     * @return {@link #characteristic} (Allows the key product features to be recorded, such as "sugar free", "modified release", "parallel import".)
3415     */
3416    public List<MedicinalProductDefinitionCharacteristicComponent> getCharacteristic() { 
3417      if (this.characteristic == null)
3418        this.characteristic = new ArrayList<MedicinalProductDefinitionCharacteristicComponent>();
3419      return this.characteristic;
3420    }
3421
3422    /**
3423     * @return Returns a reference to <code>this</code> for easy method chaining
3424     */
3425    public MedicinalProductDefinition setCharacteristic(List<MedicinalProductDefinitionCharacteristicComponent> theCharacteristic) { 
3426      this.characteristic = theCharacteristic;
3427      return this;
3428    }
3429
3430    public boolean hasCharacteristic() { 
3431      if (this.characteristic == null)
3432        return false;
3433      for (MedicinalProductDefinitionCharacteristicComponent item : this.characteristic)
3434        if (!item.isEmpty())
3435          return true;
3436      return false;
3437    }
3438
3439    public MedicinalProductDefinitionCharacteristicComponent addCharacteristic() { //3
3440      MedicinalProductDefinitionCharacteristicComponent t = new MedicinalProductDefinitionCharacteristicComponent();
3441      if (this.characteristic == null)
3442        this.characteristic = new ArrayList<MedicinalProductDefinitionCharacteristicComponent>();
3443      this.characteristic.add(t);
3444      return t;
3445    }
3446
3447    public MedicinalProductDefinition addCharacteristic(MedicinalProductDefinitionCharacteristicComponent t) { //3
3448      if (t == null)
3449        return this;
3450      if (this.characteristic == null)
3451        this.characteristic = new ArrayList<MedicinalProductDefinitionCharacteristicComponent>();
3452      this.characteristic.add(t);
3453      return this;
3454    }
3455
3456    /**
3457     * @return The first repetition of repeating field {@link #characteristic}, creating it if it does not already exist {3}
3458     */
3459    public MedicinalProductDefinitionCharacteristicComponent getCharacteristicFirstRep() { 
3460      if (getCharacteristic().isEmpty()) {
3461        addCharacteristic();
3462      }
3463      return getCharacteristic().get(0);
3464    }
3465
3466      protected void listChildren(List<Property> children) {
3467        super.listChildren(children);
3468        children.add(new Property("identifier", "Identifier", "Business identifier for this product. Could be an MPID.", 0, java.lang.Integer.MAX_VALUE, identifier));
3469        children.add(new Property("type", "CodeableConcept", "Regulatory type, e.g. Investigational or Authorized.", 0, 1, type));
3470        children.add(new Property("domain", "CodeableConcept", "If this medicine applies to human or veterinary uses.", 0, 1, domain));
3471        children.add(new Property("version", "string", "A business identifier relating to a specific version of the product, this is commonly used to support revisions to an existing product.", 0, 1, version));
3472        children.add(new Property("status", "CodeableConcept", "The status within the lifecycle of this product record. A high-level status, this is not intended to duplicate details carried elsewhere such as legal status, or authorization status.", 0, 1, status));
3473        children.add(new Property("statusDate", "dateTime", "The date at which the given status became applicable.", 0, 1, statusDate));
3474        children.add(new Property("description", "markdown", "General description of this product.", 0, 1, description));
3475        children.add(new Property("combinedPharmaceuticalDoseForm", "CodeableConcept", "The dose form for a single part product, or combined form of a multiple part product.", 0, 1, combinedPharmaceuticalDoseForm));
3476        children.add(new Property("route", "CodeableConcept", "The path by which the product is taken into or makes contact with the body. In some regions this is referred to as the licenced or approved route. See also AdministrableProductDefinition resource.", 0, java.lang.Integer.MAX_VALUE, route));
3477        children.add(new Property("indication", "markdown", "Description of indication(s) for this product, used when structured indications are not required. In cases where structured indications are required, they are captured using the ClinicalUseDefinition resource. An indication is a medical situation for which using the product is appropriate.", 0, 1, indication));
3478        children.add(new Property("legalStatusOfSupply", "CodeableConcept", "The legal status of supply of the medicinal product as classified by the regulator.", 0, 1, legalStatusOfSupply));
3479        children.add(new Property("additionalMonitoringIndicator", "CodeableConcept", "Whether the Medicinal Product is subject to additional monitoring for regulatory reasons.", 0, 1, additionalMonitoringIndicator));
3480        children.add(new Property("specialMeasures", "CodeableConcept", "Whether the Medicinal Product is subject to special measures for regulatory reasons.", 0, java.lang.Integer.MAX_VALUE, specialMeasures));
3481        children.add(new Property("pediatricUseIndicator", "CodeableConcept", "If authorised for use in children.", 0, 1, pediatricUseIndicator));
3482        children.add(new Property("classification", "CodeableConcept", "Allows the product to be classified by various systems.", 0, java.lang.Integer.MAX_VALUE, classification));
3483        children.add(new Property("marketingStatus", "MarketingStatus", "Marketing status of the medicinal product, in contrast to marketing authorization.", 0, java.lang.Integer.MAX_VALUE, marketingStatus));
3484        children.add(new Property("packagedMedicinalProduct", "CodeableConcept", "Package representation for the product. See also the PackagedProductDefinition resource.", 0, java.lang.Integer.MAX_VALUE, packagedMedicinalProduct));
3485        children.add(new Property("ingredient", "CodeableConcept", "The ingredients of this medicinal product - when not detailed in other resources. This is only needed if the ingredients are not specified by incoming references from the Ingredient resource, or indirectly via incoming AdministrableProductDefinition, PackagedProductDefinition or ManufacturedItemDefinition references. In cases where those levels of detail are not used, the ingredients may be specified directly here as codes.", 0, java.lang.Integer.MAX_VALUE, ingredient));
3486        children.add(new Property("impurity", "CodeableReference(SubstanceDefinition)", "Any component of the drug product which is not the chemical entity defined as the drug substance or an excipient in the drug product. This includes process-related impurities and contaminants, product-related impurities including degradation products.", 0, java.lang.Integer.MAX_VALUE, impurity));
3487        children.add(new Property("attachedDocument", "Reference(DocumentReference)", "Additional information or supporting documentation about the medicinal product.", 0, java.lang.Integer.MAX_VALUE, attachedDocument));
3488        children.add(new Property("masterFile", "Reference(DocumentReference)", "A master file for the medicinal product (e.g. Pharmacovigilance System Master File). Drug master files (DMFs) are documents submitted to regulatory agencies to provide confidential detailed information about facilities, processes or articles used in the manufacturing, processing, packaging and storing of drug products.", 0, java.lang.Integer.MAX_VALUE, masterFile));
3489        children.add(new Property("contact", "", "A product specific contact, person (in a role), or an organization.", 0, java.lang.Integer.MAX_VALUE, contact));
3490        children.add(new Property("clinicalTrial", "Reference(ResearchStudy)", "Clinical trials or studies that this product is involved in.", 0, java.lang.Integer.MAX_VALUE, clinicalTrial));
3491        children.add(new Property("code", "Coding", "A code that this product is known by, usually within some formal terminology. Products (types of medications) tend to be known by identifiers during development and within regulatory process. However when they are prescribed they tend to be identified by codes. The same product may be have multiple codes, applied to it by multiple organizations.", 0, java.lang.Integer.MAX_VALUE, code));
3492        children.add(new Property("name", "", "The product's name, including full name and possibly coded parts.", 0, java.lang.Integer.MAX_VALUE, name));
3493        children.add(new Property("crossReference", "", "Reference to another product, e.g. for linking authorised to investigational product.", 0, java.lang.Integer.MAX_VALUE, crossReference));
3494        children.add(new Property("operation", "", "A manufacturing or administrative process or step associated with (or performed on) the medicinal product.", 0, java.lang.Integer.MAX_VALUE, operation));
3495        children.add(new Property("characteristic", "", "Allows the key product features to be recorded, such as \"sugar free\", \"modified release\", \"parallel import\".", 0, java.lang.Integer.MAX_VALUE, characteristic));
3496      }
3497
3498      @Override
3499      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3500        switch (_hash) {
3501        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "Business identifier for this product. Could be an MPID.", 0, java.lang.Integer.MAX_VALUE, identifier);
3502        case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Regulatory type, e.g. Investigational or Authorized.", 0, 1, type);
3503        case -1326197564: /*domain*/  return new Property("domain", "CodeableConcept", "If this medicine applies to human or veterinary uses.", 0, 1, domain);
3504        case 351608024: /*version*/  return new Property("version", "string", "A business identifier relating to a specific version of the product, this is commonly used to support revisions to an existing product.", 0, 1, version);
3505        case -892481550: /*status*/  return new Property("status", "CodeableConcept", "The status within the lifecycle of this product record. A high-level status, this is not intended to duplicate details carried elsewhere such as legal status, or authorization status.", 0, 1, status);
3506        case 247524032: /*statusDate*/  return new Property("statusDate", "dateTime", "The date at which the given status became applicable.", 0, 1, statusDate);
3507        case -1724546052: /*description*/  return new Property("description", "markdown", "General description of this product.", 0, 1, description);
3508        case -1992898487: /*combinedPharmaceuticalDoseForm*/  return new Property("combinedPharmaceuticalDoseForm", "CodeableConcept", "The dose form for a single part product, or combined form of a multiple part product.", 0, 1, combinedPharmaceuticalDoseForm);
3509        case 108704329: /*route*/  return new Property("route", "CodeableConcept", "The path by which the product is taken into or makes contact with the body. In some regions this is referred to as the licenced or approved route. See also AdministrableProductDefinition resource.", 0, java.lang.Integer.MAX_VALUE, route);
3510        case -597168804: /*indication*/  return new Property("indication", "markdown", "Description of indication(s) for this product, used when structured indications are not required. In cases where structured indications are required, they are captured using the ClinicalUseDefinition resource. An indication is a medical situation for which using the product is appropriate.", 0, 1, indication);
3511        case -844874031: /*legalStatusOfSupply*/  return new Property("legalStatusOfSupply", "CodeableConcept", "The legal status of supply of the medicinal product as classified by the regulator.", 0, 1, legalStatusOfSupply);
3512        case 1935999744: /*additionalMonitoringIndicator*/  return new Property("additionalMonitoringIndicator", "CodeableConcept", "Whether the Medicinal Product is subject to additional monitoring for regulatory reasons.", 0, 1, additionalMonitoringIndicator);
3513        case 975102638: /*specialMeasures*/  return new Property("specialMeasures", "CodeableConcept", "Whether the Medicinal Product is subject to special measures for regulatory reasons.", 0, java.lang.Integer.MAX_VALUE, specialMeasures);
3514        case -1515533081: /*pediatricUseIndicator*/  return new Property("pediatricUseIndicator", "CodeableConcept", "If authorised for use in children.", 0, 1, pediatricUseIndicator);
3515        case 382350310: /*classification*/  return new Property("classification", "CodeableConcept", "Allows the product to be classified by various systems.", 0, java.lang.Integer.MAX_VALUE, classification);
3516        case 70767032: /*marketingStatus*/  return new Property("marketingStatus", "MarketingStatus", "Marketing status of the medicinal product, in contrast to marketing authorization.", 0, java.lang.Integer.MAX_VALUE, marketingStatus);
3517        case -361025513: /*packagedMedicinalProduct*/  return new Property("packagedMedicinalProduct", "CodeableConcept", "Package representation for the product. See also the PackagedProductDefinition resource.", 0, java.lang.Integer.MAX_VALUE, packagedMedicinalProduct);
3518        case -206409263: /*ingredient*/  return new Property("ingredient", "CodeableConcept", "The ingredients of this medicinal product - when not detailed in other resources. This is only needed if the ingredients are not specified by incoming references from the Ingredient resource, or indirectly via incoming AdministrableProductDefinition, PackagedProductDefinition or ManufacturedItemDefinition references. In cases where those levels of detail are not used, the ingredients may be specified directly here as codes.", 0, java.lang.Integer.MAX_VALUE, ingredient);
3519        case -416837467: /*impurity*/  return new Property("impurity", "CodeableReference(SubstanceDefinition)", "Any component of the drug product which is not the chemical entity defined as the drug substance or an excipient in the drug product. This includes process-related impurities and contaminants, product-related impurities including degradation products.", 0, java.lang.Integer.MAX_VALUE, impurity);
3520        case -513945889: /*attachedDocument*/  return new Property("attachedDocument", "Reference(DocumentReference)", "Additional information or supporting documentation about the medicinal product.", 0, java.lang.Integer.MAX_VALUE, attachedDocument);
3521        case -2039573762: /*masterFile*/  return new Property("masterFile", "Reference(DocumentReference)", "A master file for the medicinal product (e.g. Pharmacovigilance System Master File). Drug master files (DMFs) are documents submitted to regulatory agencies to provide confidential detailed information about facilities, processes or articles used in the manufacturing, processing, packaging and storing of drug products.", 0, java.lang.Integer.MAX_VALUE, masterFile);
3522        case 951526432: /*contact*/  return new Property("contact", "", "A product specific contact, person (in a role), or an organization.", 0, java.lang.Integer.MAX_VALUE, contact);
3523        case 1232866243: /*clinicalTrial*/  return new Property("clinicalTrial", "Reference(ResearchStudy)", "Clinical trials or studies that this product is involved in.", 0, java.lang.Integer.MAX_VALUE, clinicalTrial);
3524        case 3059181: /*code*/  return new Property("code", "Coding", "A code that this product is known by, usually within some formal terminology. Products (types of medications) tend to be known by identifiers during development and within regulatory process. However when they are prescribed they tend to be identified by codes. The same product may be have multiple codes, applied to it by multiple organizations.", 0, java.lang.Integer.MAX_VALUE, code);
3525        case 3373707: /*name*/  return new Property("name", "", "The product's name, including full name and possibly coded parts.", 0, java.lang.Integer.MAX_VALUE, name);
3526        case -986968341: /*crossReference*/  return new Property("crossReference", "", "Reference to another product, e.g. for linking authorised to investigational product.", 0, java.lang.Integer.MAX_VALUE, crossReference);
3527        case 1662702951: /*operation*/  return new Property("operation", "", "A manufacturing or administrative process or step associated with (or performed on) the medicinal product.", 0, java.lang.Integer.MAX_VALUE, operation);
3528        case 366313883: /*characteristic*/  return new Property("characteristic", "", "Allows the key product features to be recorded, such as \"sugar free\", \"modified release\", \"parallel import\".", 0, java.lang.Integer.MAX_VALUE, characteristic);
3529        default: return super.getNamedProperty(_hash, _name, _checkValid);
3530        }
3531
3532      }
3533
3534      @Override
3535      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3536        switch (hash) {
3537        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
3538        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
3539        case -1326197564: /*domain*/ return this.domain == null ? new Base[0] : new Base[] {this.domain}; // CodeableConcept
3540        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
3541        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // CodeableConcept
3542        case 247524032: /*statusDate*/ return this.statusDate == null ? new Base[0] : new Base[] {this.statusDate}; // DateTimeType
3543        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
3544        case -1992898487: /*combinedPharmaceuticalDoseForm*/ return this.combinedPharmaceuticalDoseForm == null ? new Base[0] : new Base[] {this.combinedPharmaceuticalDoseForm}; // CodeableConcept
3545        case 108704329: /*route*/ return this.route == null ? new Base[0] : this.route.toArray(new Base[this.route.size()]); // CodeableConcept
3546        case -597168804: /*indication*/ return this.indication == null ? new Base[0] : new Base[] {this.indication}; // MarkdownType
3547        case -844874031: /*legalStatusOfSupply*/ return this.legalStatusOfSupply == null ? new Base[0] : new Base[] {this.legalStatusOfSupply}; // CodeableConcept
3548        case 1935999744: /*additionalMonitoringIndicator*/ return this.additionalMonitoringIndicator == null ? new Base[0] : new Base[] {this.additionalMonitoringIndicator}; // CodeableConcept
3549        case 975102638: /*specialMeasures*/ return this.specialMeasures == null ? new Base[0] : this.specialMeasures.toArray(new Base[this.specialMeasures.size()]); // CodeableConcept
3550        case -1515533081: /*pediatricUseIndicator*/ return this.pediatricUseIndicator == null ? new Base[0] : new Base[] {this.pediatricUseIndicator}; // CodeableConcept
3551        case 382350310: /*classification*/ return this.classification == null ? new Base[0] : this.classification.toArray(new Base[this.classification.size()]); // CodeableConcept
3552        case 70767032: /*marketingStatus*/ return this.marketingStatus == null ? new Base[0] : this.marketingStatus.toArray(new Base[this.marketingStatus.size()]); // MarketingStatus
3553        case -361025513: /*packagedMedicinalProduct*/ return this.packagedMedicinalProduct == null ? new Base[0] : this.packagedMedicinalProduct.toArray(new Base[this.packagedMedicinalProduct.size()]); // CodeableConcept
3554        case -206409263: /*ingredient*/ return this.ingredient == null ? new Base[0] : this.ingredient.toArray(new Base[this.ingredient.size()]); // CodeableConcept
3555        case -416837467: /*impurity*/ return this.impurity == null ? new Base[0] : this.impurity.toArray(new Base[this.impurity.size()]); // CodeableReference
3556        case -513945889: /*attachedDocument*/ return this.attachedDocument == null ? new Base[0] : this.attachedDocument.toArray(new Base[this.attachedDocument.size()]); // Reference
3557        case -2039573762: /*masterFile*/ return this.masterFile == null ? new Base[0] : this.masterFile.toArray(new Base[this.masterFile.size()]); // Reference
3558        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // MedicinalProductDefinitionContactComponent
3559        case 1232866243: /*clinicalTrial*/ return this.clinicalTrial == null ? new Base[0] : this.clinicalTrial.toArray(new Base[this.clinicalTrial.size()]); // Reference
3560        case 3059181: /*code*/ return this.code == null ? new Base[0] : this.code.toArray(new Base[this.code.size()]); // Coding
3561        case 3373707: /*name*/ return this.name == null ? new Base[0] : this.name.toArray(new Base[this.name.size()]); // MedicinalProductDefinitionNameComponent
3562        case -986968341: /*crossReference*/ return this.crossReference == null ? new Base[0] : this.crossReference.toArray(new Base[this.crossReference.size()]); // MedicinalProductDefinitionCrossReferenceComponent
3563        case 1662702951: /*operation*/ return this.operation == null ? new Base[0] : this.operation.toArray(new Base[this.operation.size()]); // MedicinalProductDefinitionOperationComponent
3564        case 366313883: /*characteristic*/ return this.characteristic == null ? new Base[0] : this.characteristic.toArray(new Base[this.characteristic.size()]); // MedicinalProductDefinitionCharacteristicComponent
3565        default: return super.getProperty(hash, name, checkValid);
3566        }
3567
3568      }
3569
3570      @Override
3571      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3572        switch (hash) {
3573        case -1618432855: // identifier
3574          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
3575          return value;
3576        case 3575610: // type
3577          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3578          return value;
3579        case -1326197564: // domain
3580          this.domain = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3581          return value;
3582        case 351608024: // version
3583          this.version = TypeConvertor.castToString(value); // StringType
3584          return value;
3585        case -892481550: // status
3586          this.status = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3587          return value;
3588        case 247524032: // statusDate
3589          this.statusDate = TypeConvertor.castToDateTime(value); // DateTimeType
3590          return value;
3591        case -1724546052: // description
3592          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
3593          return value;
3594        case -1992898487: // combinedPharmaceuticalDoseForm
3595          this.combinedPharmaceuticalDoseForm = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3596          return value;
3597        case 108704329: // route
3598          this.getRoute().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
3599          return value;
3600        case -597168804: // indication
3601          this.indication = TypeConvertor.castToMarkdown(value); // MarkdownType
3602          return value;
3603        case -844874031: // legalStatusOfSupply
3604          this.legalStatusOfSupply = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3605          return value;
3606        case 1935999744: // additionalMonitoringIndicator
3607          this.additionalMonitoringIndicator = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3608          return value;
3609        case 975102638: // specialMeasures
3610          this.getSpecialMeasures().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
3611          return value;
3612        case -1515533081: // pediatricUseIndicator
3613          this.pediatricUseIndicator = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3614          return value;
3615        case 382350310: // classification
3616          this.getClassification().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
3617          return value;
3618        case 70767032: // marketingStatus
3619          this.getMarketingStatus().add(TypeConvertor.castToMarketingStatus(value)); // MarketingStatus
3620          return value;
3621        case -361025513: // packagedMedicinalProduct
3622          this.getPackagedMedicinalProduct().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
3623          return value;
3624        case -206409263: // ingredient
3625          this.getIngredient().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
3626          return value;
3627        case -416837467: // impurity
3628          this.getImpurity().add(TypeConvertor.castToCodeableReference(value)); // CodeableReference
3629          return value;
3630        case -513945889: // attachedDocument
3631          this.getAttachedDocument().add(TypeConvertor.castToReference(value)); // Reference
3632          return value;
3633        case -2039573762: // masterFile
3634          this.getMasterFile().add(TypeConvertor.castToReference(value)); // Reference
3635          return value;
3636        case 951526432: // contact
3637          this.getContact().add((MedicinalProductDefinitionContactComponent) value); // MedicinalProductDefinitionContactComponent
3638          return value;
3639        case 1232866243: // clinicalTrial
3640          this.getClinicalTrial().add(TypeConvertor.castToReference(value)); // Reference
3641          return value;
3642        case 3059181: // code
3643          this.getCode().add(TypeConvertor.castToCoding(value)); // Coding
3644          return value;
3645        case 3373707: // name
3646          this.getName().add((MedicinalProductDefinitionNameComponent) value); // MedicinalProductDefinitionNameComponent
3647          return value;
3648        case -986968341: // crossReference
3649          this.getCrossReference().add((MedicinalProductDefinitionCrossReferenceComponent) value); // MedicinalProductDefinitionCrossReferenceComponent
3650          return value;
3651        case 1662702951: // operation
3652          this.getOperation().add((MedicinalProductDefinitionOperationComponent) value); // MedicinalProductDefinitionOperationComponent
3653          return value;
3654        case 366313883: // characteristic
3655          this.getCharacteristic().add((MedicinalProductDefinitionCharacteristicComponent) value); // MedicinalProductDefinitionCharacteristicComponent
3656          return value;
3657        default: return super.setProperty(hash, name, value);
3658        }
3659
3660      }
3661
3662      @Override
3663      public Base setProperty(String name, Base value) throws FHIRException {
3664        if (name.equals("identifier")) {
3665          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
3666        } else if (name.equals("type")) {
3667          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3668        } else if (name.equals("domain")) {
3669          this.domain = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3670        } else if (name.equals("version")) {
3671          this.version = TypeConvertor.castToString(value); // StringType
3672        } else if (name.equals("status")) {
3673          this.status = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3674        } else if (name.equals("statusDate")) {
3675          this.statusDate = TypeConvertor.castToDateTime(value); // DateTimeType
3676        } else if (name.equals("description")) {
3677          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
3678        } else if (name.equals("combinedPharmaceuticalDoseForm")) {
3679          this.combinedPharmaceuticalDoseForm = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3680        } else if (name.equals("route")) {
3681          this.getRoute().add(TypeConvertor.castToCodeableConcept(value));
3682        } else if (name.equals("indication")) {
3683          this.indication = TypeConvertor.castToMarkdown(value); // MarkdownType
3684        } else if (name.equals("legalStatusOfSupply")) {
3685          this.legalStatusOfSupply = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3686        } else if (name.equals("additionalMonitoringIndicator")) {
3687          this.additionalMonitoringIndicator = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3688        } else if (name.equals("specialMeasures")) {
3689          this.getSpecialMeasures().add(TypeConvertor.castToCodeableConcept(value));
3690        } else if (name.equals("pediatricUseIndicator")) {
3691          this.pediatricUseIndicator = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3692        } else if (name.equals("classification")) {
3693          this.getClassification().add(TypeConvertor.castToCodeableConcept(value));
3694        } else if (name.equals("marketingStatus")) {
3695          this.getMarketingStatus().add(TypeConvertor.castToMarketingStatus(value));
3696        } else if (name.equals("packagedMedicinalProduct")) {
3697          this.getPackagedMedicinalProduct().add(TypeConvertor.castToCodeableConcept(value));
3698        } else if (name.equals("ingredient")) {
3699          this.getIngredient().add(TypeConvertor.castToCodeableConcept(value));
3700        } else if (name.equals("impurity")) {
3701          this.getImpurity().add(TypeConvertor.castToCodeableReference(value));
3702        } else if (name.equals("attachedDocument")) {
3703          this.getAttachedDocument().add(TypeConvertor.castToReference(value));
3704        } else if (name.equals("masterFile")) {
3705          this.getMasterFile().add(TypeConvertor.castToReference(value));
3706        } else if (name.equals("contact")) {
3707          this.getContact().add((MedicinalProductDefinitionContactComponent) value);
3708        } else if (name.equals("clinicalTrial")) {
3709          this.getClinicalTrial().add(TypeConvertor.castToReference(value));
3710        } else if (name.equals("code")) {
3711          this.getCode().add(TypeConvertor.castToCoding(value));
3712        } else if (name.equals("name")) {
3713          this.getName().add((MedicinalProductDefinitionNameComponent) value);
3714        } else if (name.equals("crossReference")) {
3715          this.getCrossReference().add((MedicinalProductDefinitionCrossReferenceComponent) value);
3716        } else if (name.equals("operation")) {
3717          this.getOperation().add((MedicinalProductDefinitionOperationComponent) value);
3718        } else if (name.equals("characteristic")) {
3719          this.getCharacteristic().add((MedicinalProductDefinitionCharacteristicComponent) value);
3720        } else
3721          return super.setProperty(name, value);
3722        return value;
3723      }
3724
3725      @Override
3726      public Base makeProperty(int hash, String name) throws FHIRException {
3727        switch (hash) {
3728        case -1618432855:  return addIdentifier(); 
3729        case 3575610:  return getType();
3730        case -1326197564:  return getDomain();
3731        case 351608024:  return getVersionElement();
3732        case -892481550:  return getStatus();
3733        case 247524032:  return getStatusDateElement();
3734        case -1724546052:  return getDescriptionElement();
3735        case -1992898487:  return getCombinedPharmaceuticalDoseForm();
3736        case 108704329:  return addRoute(); 
3737        case -597168804:  return getIndicationElement();
3738        case -844874031:  return getLegalStatusOfSupply();
3739        case 1935999744:  return getAdditionalMonitoringIndicator();
3740        case 975102638:  return addSpecialMeasures(); 
3741        case -1515533081:  return getPediatricUseIndicator();
3742        case 382350310:  return addClassification(); 
3743        case 70767032:  return addMarketingStatus(); 
3744        case -361025513:  return addPackagedMedicinalProduct(); 
3745        case -206409263:  return addIngredient(); 
3746        case -416837467:  return addImpurity(); 
3747        case -513945889:  return addAttachedDocument(); 
3748        case -2039573762:  return addMasterFile(); 
3749        case 951526432:  return addContact(); 
3750        case 1232866243:  return addClinicalTrial(); 
3751        case 3059181:  return addCode(); 
3752        case 3373707:  return addName(); 
3753        case -986968341:  return addCrossReference(); 
3754        case 1662702951:  return addOperation(); 
3755        case 366313883:  return addCharacteristic(); 
3756        default: return super.makeProperty(hash, name);
3757        }
3758
3759      }
3760
3761      @Override
3762      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3763        switch (hash) {
3764        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
3765        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
3766        case -1326197564: /*domain*/ return new String[] {"CodeableConcept"};
3767        case 351608024: /*version*/ return new String[] {"string"};
3768        case -892481550: /*status*/ return new String[] {"CodeableConcept"};
3769        case 247524032: /*statusDate*/ return new String[] {"dateTime"};
3770        case -1724546052: /*description*/ return new String[] {"markdown"};
3771        case -1992898487: /*combinedPharmaceuticalDoseForm*/ return new String[] {"CodeableConcept"};
3772        case 108704329: /*route*/ return new String[] {"CodeableConcept"};
3773        case -597168804: /*indication*/ return new String[] {"markdown"};
3774        case -844874031: /*legalStatusOfSupply*/ return new String[] {"CodeableConcept"};
3775        case 1935999744: /*additionalMonitoringIndicator*/ return new String[] {"CodeableConcept"};
3776        case 975102638: /*specialMeasures*/ return new String[] {"CodeableConcept"};
3777        case -1515533081: /*pediatricUseIndicator*/ return new String[] {"CodeableConcept"};
3778        case 382350310: /*classification*/ return new String[] {"CodeableConcept"};
3779        case 70767032: /*marketingStatus*/ return new String[] {"MarketingStatus"};
3780        case -361025513: /*packagedMedicinalProduct*/ return new String[] {"CodeableConcept"};
3781        case -206409263: /*ingredient*/ return new String[] {"CodeableConcept"};
3782        case -416837467: /*impurity*/ return new String[] {"CodeableReference"};
3783        case -513945889: /*attachedDocument*/ return new String[] {"Reference"};
3784        case -2039573762: /*masterFile*/ return new String[] {"Reference"};
3785        case 951526432: /*contact*/ return new String[] {};
3786        case 1232866243: /*clinicalTrial*/ return new String[] {"Reference"};
3787        case 3059181: /*code*/ return new String[] {"Coding"};
3788        case 3373707: /*name*/ return new String[] {};
3789        case -986968341: /*crossReference*/ return new String[] {};
3790        case 1662702951: /*operation*/ return new String[] {};
3791        case 366313883: /*characteristic*/ return new String[] {};
3792        default: return super.getTypesForProperty(hash, name);
3793        }
3794
3795      }
3796
3797      @Override
3798      public Base addChild(String name) throws FHIRException {
3799        if (name.equals("identifier")) {
3800          return addIdentifier();
3801        }
3802        else if (name.equals("type")) {
3803          this.type = new CodeableConcept();
3804          return this.type;
3805        }
3806        else if (name.equals("domain")) {
3807          this.domain = new CodeableConcept();
3808          return this.domain;
3809        }
3810        else if (name.equals("version")) {
3811          throw new FHIRException("Cannot call addChild on a primitive type MedicinalProductDefinition.version");
3812        }
3813        else if (name.equals("status")) {
3814          this.status = new CodeableConcept();
3815          return this.status;
3816        }
3817        else if (name.equals("statusDate")) {
3818          throw new FHIRException("Cannot call addChild on a primitive type MedicinalProductDefinition.statusDate");
3819        }
3820        else if (name.equals("description")) {
3821          throw new FHIRException("Cannot call addChild on a primitive type MedicinalProductDefinition.description");
3822        }
3823        else if (name.equals("combinedPharmaceuticalDoseForm")) {
3824          this.combinedPharmaceuticalDoseForm = new CodeableConcept();
3825          return this.combinedPharmaceuticalDoseForm;
3826        }
3827        else if (name.equals("route")) {
3828          return addRoute();
3829        }
3830        else if (name.equals("indication")) {
3831          throw new FHIRException("Cannot call addChild on a primitive type MedicinalProductDefinition.indication");
3832        }
3833        else if (name.equals("legalStatusOfSupply")) {
3834          this.legalStatusOfSupply = new CodeableConcept();
3835          return this.legalStatusOfSupply;
3836        }
3837        else if (name.equals("additionalMonitoringIndicator")) {
3838          this.additionalMonitoringIndicator = new CodeableConcept();
3839          return this.additionalMonitoringIndicator;
3840        }
3841        else if (name.equals("specialMeasures")) {
3842          return addSpecialMeasures();
3843        }
3844        else if (name.equals("pediatricUseIndicator")) {
3845          this.pediatricUseIndicator = new CodeableConcept();
3846          return this.pediatricUseIndicator;
3847        }
3848        else if (name.equals("classification")) {
3849          return addClassification();
3850        }
3851        else if (name.equals("marketingStatus")) {
3852          return addMarketingStatus();
3853        }
3854        else if (name.equals("packagedMedicinalProduct")) {
3855          return addPackagedMedicinalProduct();
3856        }
3857        else if (name.equals("ingredient")) {
3858          return addIngredient();
3859        }
3860        else if (name.equals("impurity")) {
3861          return addImpurity();
3862        }
3863        else if (name.equals("attachedDocument")) {
3864          return addAttachedDocument();
3865        }
3866        else if (name.equals("masterFile")) {
3867          return addMasterFile();
3868        }
3869        else if (name.equals("contact")) {
3870          return addContact();
3871        }
3872        else if (name.equals("clinicalTrial")) {
3873          return addClinicalTrial();
3874        }
3875        else if (name.equals("code")) {
3876          return addCode();
3877        }
3878        else if (name.equals("name")) {
3879          return addName();
3880        }
3881        else if (name.equals("crossReference")) {
3882          return addCrossReference();
3883        }
3884        else if (name.equals("operation")) {
3885          return addOperation();
3886        }
3887        else if (name.equals("characteristic")) {
3888          return addCharacteristic();
3889        }
3890        else
3891          return super.addChild(name);
3892      }
3893
3894  public String fhirType() {
3895    return "MedicinalProductDefinition";
3896
3897  }
3898
3899      public MedicinalProductDefinition copy() {
3900        MedicinalProductDefinition dst = new MedicinalProductDefinition();
3901        copyValues(dst);
3902        return dst;
3903      }
3904
3905      public void copyValues(MedicinalProductDefinition dst) {
3906        super.copyValues(dst);
3907        if (identifier != null) {
3908          dst.identifier = new ArrayList<Identifier>();
3909          for (Identifier i : identifier)
3910            dst.identifier.add(i.copy());
3911        };
3912        dst.type = type == null ? null : type.copy();
3913        dst.domain = domain == null ? null : domain.copy();
3914        dst.version = version == null ? null : version.copy();
3915        dst.status = status == null ? null : status.copy();
3916        dst.statusDate = statusDate == null ? null : statusDate.copy();
3917        dst.description = description == null ? null : description.copy();
3918        dst.combinedPharmaceuticalDoseForm = combinedPharmaceuticalDoseForm == null ? null : combinedPharmaceuticalDoseForm.copy();
3919        if (route != null) {
3920          dst.route = new ArrayList<CodeableConcept>();
3921          for (CodeableConcept i : route)
3922            dst.route.add(i.copy());
3923        };
3924        dst.indication = indication == null ? null : indication.copy();
3925        dst.legalStatusOfSupply = legalStatusOfSupply == null ? null : legalStatusOfSupply.copy();
3926        dst.additionalMonitoringIndicator = additionalMonitoringIndicator == null ? null : additionalMonitoringIndicator.copy();
3927        if (specialMeasures != null) {
3928          dst.specialMeasures = new ArrayList<CodeableConcept>();
3929          for (CodeableConcept i : specialMeasures)
3930            dst.specialMeasures.add(i.copy());
3931        };
3932        dst.pediatricUseIndicator = pediatricUseIndicator == null ? null : pediatricUseIndicator.copy();
3933        if (classification != null) {
3934          dst.classification = new ArrayList<CodeableConcept>();
3935          for (CodeableConcept i : classification)
3936            dst.classification.add(i.copy());
3937        };
3938        if (marketingStatus != null) {
3939          dst.marketingStatus = new ArrayList<MarketingStatus>();
3940          for (MarketingStatus i : marketingStatus)
3941            dst.marketingStatus.add(i.copy());
3942        };
3943        if (packagedMedicinalProduct != null) {
3944          dst.packagedMedicinalProduct = new ArrayList<CodeableConcept>();
3945          for (CodeableConcept i : packagedMedicinalProduct)
3946            dst.packagedMedicinalProduct.add(i.copy());
3947        };
3948        if (ingredient != null) {
3949          dst.ingredient = new ArrayList<CodeableConcept>();
3950          for (CodeableConcept i : ingredient)
3951            dst.ingredient.add(i.copy());
3952        };
3953        if (impurity != null) {
3954          dst.impurity = new ArrayList<CodeableReference>();
3955          for (CodeableReference i : impurity)
3956            dst.impurity.add(i.copy());
3957        };
3958        if (attachedDocument != null) {
3959          dst.attachedDocument = new ArrayList<Reference>();
3960          for (Reference i : attachedDocument)
3961            dst.attachedDocument.add(i.copy());
3962        };
3963        if (masterFile != null) {
3964          dst.masterFile = new ArrayList<Reference>();
3965          for (Reference i : masterFile)
3966            dst.masterFile.add(i.copy());
3967        };
3968        if (contact != null) {
3969          dst.contact = new ArrayList<MedicinalProductDefinitionContactComponent>();
3970          for (MedicinalProductDefinitionContactComponent i : contact)
3971            dst.contact.add(i.copy());
3972        };
3973        if (clinicalTrial != null) {
3974          dst.clinicalTrial = new ArrayList<Reference>();
3975          for (Reference i : clinicalTrial)
3976            dst.clinicalTrial.add(i.copy());
3977        };
3978        if (code != null) {
3979          dst.code = new ArrayList<Coding>();
3980          for (Coding i : code)
3981            dst.code.add(i.copy());
3982        };
3983        if (name != null) {
3984          dst.name = new ArrayList<MedicinalProductDefinitionNameComponent>();
3985          for (MedicinalProductDefinitionNameComponent i : name)
3986            dst.name.add(i.copy());
3987        };
3988        if (crossReference != null) {
3989          dst.crossReference = new ArrayList<MedicinalProductDefinitionCrossReferenceComponent>();
3990          for (MedicinalProductDefinitionCrossReferenceComponent i : crossReference)
3991            dst.crossReference.add(i.copy());
3992        };
3993        if (operation != null) {
3994          dst.operation = new ArrayList<MedicinalProductDefinitionOperationComponent>();
3995          for (MedicinalProductDefinitionOperationComponent i : operation)
3996            dst.operation.add(i.copy());
3997        };
3998        if (characteristic != null) {
3999          dst.characteristic = new ArrayList<MedicinalProductDefinitionCharacteristicComponent>();
4000          for (MedicinalProductDefinitionCharacteristicComponent i : characteristic)
4001            dst.characteristic.add(i.copy());
4002        };
4003      }
4004
4005      protected MedicinalProductDefinition typedCopy() {
4006        return copy();
4007      }
4008
4009      @Override
4010      public boolean equalsDeep(Base other_) {
4011        if (!super.equalsDeep(other_))
4012          return false;
4013        if (!(other_ instanceof MedicinalProductDefinition))
4014          return false;
4015        MedicinalProductDefinition o = (MedicinalProductDefinition) other_;
4016        return compareDeep(identifier, o.identifier, true) && compareDeep(type, o.type, true) && compareDeep(domain, o.domain, true)
4017           && compareDeep(version, o.version, true) && compareDeep(status, o.status, true) && compareDeep(statusDate, o.statusDate, true)
4018           && compareDeep(description, o.description, true) && compareDeep(combinedPharmaceuticalDoseForm, o.combinedPharmaceuticalDoseForm, true)
4019           && compareDeep(route, o.route, true) && compareDeep(indication, o.indication, true) && compareDeep(legalStatusOfSupply, o.legalStatusOfSupply, true)
4020           && compareDeep(additionalMonitoringIndicator, o.additionalMonitoringIndicator, true) && compareDeep(specialMeasures, o.specialMeasures, true)
4021           && compareDeep(pediatricUseIndicator, o.pediatricUseIndicator, true) && compareDeep(classification, o.classification, true)
4022           && compareDeep(marketingStatus, o.marketingStatus, true) && compareDeep(packagedMedicinalProduct, o.packagedMedicinalProduct, true)
4023           && compareDeep(ingredient, o.ingredient, true) && compareDeep(impurity, o.impurity, true) && compareDeep(attachedDocument, o.attachedDocument, true)
4024           && compareDeep(masterFile, o.masterFile, true) && compareDeep(contact, o.contact, true) && compareDeep(clinicalTrial, o.clinicalTrial, true)
4025           && compareDeep(code, o.code, true) && compareDeep(name, o.name, true) && compareDeep(crossReference, o.crossReference, true)
4026           && compareDeep(operation, o.operation, true) && compareDeep(characteristic, o.characteristic, true)
4027          ;
4028      }
4029
4030      @Override
4031      public boolean equalsShallow(Base other_) {
4032        if (!super.equalsShallow(other_))
4033          return false;
4034        if (!(other_ instanceof MedicinalProductDefinition))
4035          return false;
4036        MedicinalProductDefinition o = (MedicinalProductDefinition) other_;
4037        return compareValues(version, o.version, true) && compareValues(statusDate, o.statusDate, true) && compareValues(description, o.description, true)
4038           && compareValues(indication, o.indication, true);
4039      }
4040
4041      public boolean isEmpty() {
4042        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, type, domain
4043          , version, status, statusDate, description, combinedPharmaceuticalDoseForm, route
4044          , indication, legalStatusOfSupply, additionalMonitoringIndicator, specialMeasures, pediatricUseIndicator
4045          , classification, marketingStatus, packagedMedicinalProduct, ingredient, impurity
4046          , attachedDocument, masterFile, contact, clinicalTrial, code, name, crossReference
4047          , operation, characteristic);
4048      }
4049
4050  @Override
4051  public ResourceType getResourceType() {
4052    return ResourceType.MedicinalProductDefinition;
4053   }
4054
4055 /**
4056   * Search parameter: <b>characteristic-type</b>
4057   * <p>
4058   * Description: <b>A category for the characteristic</b><br>
4059   * Type: <b>token</b><br>
4060   * Path: <b>MedicinalProductDefinition.characteristic.type</b><br>
4061   * </p>
4062   */
4063  @SearchParamDefinition(name="characteristic-type", path="MedicinalProductDefinition.characteristic.type", description="A category for the characteristic", type="token" )
4064  public static final String SP_CHARACTERISTIC_TYPE = "characteristic-type";
4065 /**
4066   * <b>Fluent Client</b> search parameter constant for <b>characteristic-type</b>
4067   * <p>
4068   * Description: <b>A category for the characteristic</b><br>
4069   * Type: <b>token</b><br>
4070   * Path: <b>MedicinalProductDefinition.characteristic.type</b><br>
4071   * </p>
4072   */
4073  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CHARACTERISTIC_TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CHARACTERISTIC_TYPE);
4074
4075 /**
4076   * Search parameter: <b>characteristic</b>
4077   * <p>
4078   * Description: <b>Allows the key product features to be recorded, such as "sugar free", "modified release", "parallel import"</b><br>
4079   * Type: <b>token</b><br>
4080   * Path: <b>MedicinalProductDefinition.characteristic.value</b><br>
4081   * </p>
4082   */
4083  @SearchParamDefinition(name="characteristic", path="MedicinalProductDefinition.characteristic.value", description="Allows the key product features to be recorded, such as \"sugar free\", \"modified release\", \"parallel import\"", type="token" )
4084  public static final String SP_CHARACTERISTIC = "characteristic";
4085 /**
4086   * <b>Fluent Client</b> search parameter constant for <b>characteristic</b>
4087   * <p>
4088   * Description: <b>Allows the key product features to be recorded, such as "sugar free", "modified release", "parallel import"</b><br>
4089   * Type: <b>token</b><br>
4090   * Path: <b>MedicinalProductDefinition.characteristic.value</b><br>
4091   * </p>
4092   */
4093  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CHARACTERISTIC = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CHARACTERISTIC);
4094
4095 /**
4096   * Search parameter: <b>contact</b>
4097   * <p>
4098   * Description: <b>A product specific contact, person (in a role), or an organization</b><br>
4099   * Type: <b>reference</b><br>
4100   * Path: <b>MedicinalProductDefinition.contact.contact</b><br>
4101   * </p>
4102   */
4103  @SearchParamDefinition(name="contact", path="MedicinalProductDefinition.contact.contact", description="A product specific contact, person (in a role), or an organization", type="reference", target={Organization.class, PractitionerRole.class } )
4104  public static final String SP_CONTACT = "contact";
4105 /**
4106   * <b>Fluent Client</b> search parameter constant for <b>contact</b>
4107   * <p>
4108   * Description: <b>A product specific contact, person (in a role), or an organization</b><br>
4109   * Type: <b>reference</b><br>
4110   * Path: <b>MedicinalProductDefinition.contact.contact</b><br>
4111   * </p>
4112   */
4113  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam CONTACT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_CONTACT);
4114
4115/**
4116   * Constant for fluent queries to be used to add include statements. Specifies
4117   * the path value of "<b>MedicinalProductDefinition:contact</b>".
4118   */
4119  public static final ca.uhn.fhir.model.api.Include INCLUDE_CONTACT = new ca.uhn.fhir.model.api.Include("MedicinalProductDefinition:contact").toLocked();
4120
4121 /**
4122   * Search parameter: <b>domain</b>
4123   * <p>
4124   * Description: <b>If this medicine applies to human or veterinary uses</b><br>
4125   * Type: <b>token</b><br>
4126   * Path: <b>MedicinalProductDefinition.domain</b><br>
4127   * </p>
4128   */
4129  @SearchParamDefinition(name="domain", path="MedicinalProductDefinition.domain", description="If this medicine applies to human or veterinary uses", type="token" )
4130  public static final String SP_DOMAIN = "domain";
4131 /**
4132   * <b>Fluent Client</b> search parameter constant for <b>domain</b>
4133   * <p>
4134   * Description: <b>If this medicine applies to human or veterinary uses</b><br>
4135   * Type: <b>token</b><br>
4136   * Path: <b>MedicinalProductDefinition.domain</b><br>
4137   * </p>
4138   */
4139  public static final ca.uhn.fhir.rest.gclient.TokenClientParam DOMAIN = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_DOMAIN);
4140
4141 /**
4142   * Search parameter: <b>identifier</b>
4143   * <p>
4144   * Description: <b>Business identifier for this product. Could be an MPID</b><br>
4145   * Type: <b>token</b><br>
4146   * Path: <b>MedicinalProductDefinition.identifier</b><br>
4147   * </p>
4148   */
4149  @SearchParamDefinition(name="identifier", path="MedicinalProductDefinition.identifier", description="Business identifier for this product. Could be an MPID", type="token" )
4150  public static final String SP_IDENTIFIER = "identifier";
4151 /**
4152   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
4153   * <p>
4154   * Description: <b>Business identifier for this product. Could be an MPID</b><br>
4155   * Type: <b>token</b><br>
4156   * Path: <b>MedicinalProductDefinition.identifier</b><br>
4157   * </p>
4158   */
4159  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
4160
4161 /**
4162   * Search parameter: <b>ingredient</b>
4163   * <p>
4164   * Description: <b>An ingredient of this product</b><br>
4165   * Type: <b>token</b><br>
4166   * Path: <b>MedicinalProductDefinition.ingredient</b><br>
4167   * </p>
4168   */
4169  @SearchParamDefinition(name="ingredient", path="MedicinalProductDefinition.ingredient", description="An ingredient of this product", type="token" )
4170  public static final String SP_INGREDIENT = "ingredient";
4171 /**
4172   * <b>Fluent Client</b> search parameter constant for <b>ingredient</b>
4173   * <p>
4174   * Description: <b>An ingredient of this product</b><br>
4175   * Type: <b>token</b><br>
4176   * Path: <b>MedicinalProductDefinition.ingredient</b><br>
4177   * </p>
4178   */
4179  public static final ca.uhn.fhir.rest.gclient.TokenClientParam INGREDIENT = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_INGREDIENT);
4180
4181 /**
4182   * Search parameter: <b>master-file</b>
4183   * <p>
4184   * Description: <b>A master file for to the medicinal product (e.g. Pharmacovigilance System Master File)</b><br>
4185   * Type: <b>reference</b><br>
4186   * Path: <b>MedicinalProductDefinition.masterFile</b><br>
4187   * </p>
4188   */
4189  @SearchParamDefinition(name="master-file", path="MedicinalProductDefinition.masterFile", description="A master file for to the medicinal product (e.g. Pharmacovigilance System Master File)", type="reference", target={DocumentReference.class } )
4190  public static final String SP_MASTER_FILE = "master-file";
4191 /**
4192   * <b>Fluent Client</b> search parameter constant for <b>master-file</b>
4193   * <p>
4194   * Description: <b>A master file for to the medicinal product (e.g. Pharmacovigilance System Master File)</b><br>
4195   * Type: <b>reference</b><br>
4196   * Path: <b>MedicinalProductDefinition.masterFile</b><br>
4197   * </p>
4198   */
4199  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam MASTER_FILE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_MASTER_FILE);
4200
4201/**
4202   * Constant for fluent queries to be used to add include statements. Specifies
4203   * the path value of "<b>MedicinalProductDefinition:master-file</b>".
4204   */
4205  public static final ca.uhn.fhir.model.api.Include INCLUDE_MASTER_FILE = new ca.uhn.fhir.model.api.Include("MedicinalProductDefinition:master-file").toLocked();
4206
4207 /**
4208   * Search parameter: <b>name-language</b>
4209   * <p>
4210   * Description: <b>Language code for this name</b><br>
4211   * Type: <b>token</b><br>
4212   * Path: <b>MedicinalProductDefinition.name.countryLanguage.language</b><br>
4213   * </p>
4214   */
4215  @SearchParamDefinition(name="name-language", path="MedicinalProductDefinition.name.countryLanguage.language", description="Language code for this name", type="token" )
4216  public static final String SP_NAME_LANGUAGE = "name-language";
4217 /**
4218   * <b>Fluent Client</b> search parameter constant for <b>name-language</b>
4219   * <p>
4220   * Description: <b>Language code for this name</b><br>
4221   * Type: <b>token</b><br>
4222   * Path: <b>MedicinalProductDefinition.name.countryLanguage.language</b><br>
4223   * </p>
4224   */
4225  public static final ca.uhn.fhir.rest.gclient.TokenClientParam NAME_LANGUAGE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_NAME_LANGUAGE);
4226
4227 /**
4228   * Search parameter: <b>name</b>
4229   * <p>
4230   * Description: <b>The full product name</b><br>
4231   * Type: <b>string</b><br>
4232   * Path: <b>MedicinalProductDefinition.name.productName</b><br>
4233   * </p>
4234   */
4235  @SearchParamDefinition(name="name", path="MedicinalProductDefinition.name.productName", description="The full product name", type="string" )
4236  public static final String SP_NAME = "name";
4237 /**
4238   * <b>Fluent Client</b> search parameter constant for <b>name</b>
4239   * <p>
4240   * Description: <b>The full product name</b><br>
4241   * Type: <b>string</b><br>
4242   * Path: <b>MedicinalProductDefinition.name.productName</b><br>
4243   * </p>
4244   */
4245  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_NAME);
4246
4247 /**
4248   * Search parameter: <b>product-classification</b>
4249   * <p>
4250   * Description: <b>Allows the product to be classified by various systems</b><br>
4251   * Type: <b>token</b><br>
4252   * Path: <b>MedicinalProductDefinition.classification</b><br>
4253   * </p>
4254   */
4255  @SearchParamDefinition(name="product-classification", path="MedicinalProductDefinition.classification", description="Allows the product to be classified by various systems", type="token" )
4256  public static final String SP_PRODUCT_CLASSIFICATION = "product-classification";
4257 /**
4258   * <b>Fluent Client</b> search parameter constant for <b>product-classification</b>
4259   * <p>
4260   * Description: <b>Allows the product to be classified by various systems</b><br>
4261   * Type: <b>token</b><br>
4262   * Path: <b>MedicinalProductDefinition.classification</b><br>
4263   * </p>
4264   */
4265  public static final ca.uhn.fhir.rest.gclient.TokenClientParam PRODUCT_CLASSIFICATION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_PRODUCT_CLASSIFICATION);
4266
4267 /**
4268   * Search parameter: <b>status</b>
4269   * <p>
4270   * Description: <b>The status within the lifecycle of this product record. A high-level status, this is not intended to duplicate details carried elsewhere such as legal status, or authorization status</b><br>
4271   * Type: <b>token</b><br>
4272   * Path: <b>MedicinalProductDefinition.status</b><br>
4273   * </p>
4274   */
4275  @SearchParamDefinition(name="status", path="MedicinalProductDefinition.status", description="The status within the lifecycle of this product record. A high-level status, this is not intended to duplicate details carried elsewhere such as legal status, or authorization status", type="token" )
4276  public static final String SP_STATUS = "status";
4277 /**
4278   * <b>Fluent Client</b> search parameter constant for <b>status</b>
4279   * <p>
4280   * Description: <b>The status within the lifecycle of this product record. A high-level status, this is not intended to duplicate details carried elsewhere such as legal status, or authorization status</b><br>
4281   * Type: <b>token</b><br>
4282   * Path: <b>MedicinalProductDefinition.status</b><br>
4283   * </p>
4284   */
4285  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
4286
4287 /**
4288   * Search parameter: <b>type</b>
4289   * <p>
4290   * Description: <b>Regulatory type, e.g. Investigational or Authorized</b><br>
4291   * Type: <b>token</b><br>
4292   * Path: <b>MedicinalProductDefinition.type</b><br>
4293   * </p>
4294   */
4295  @SearchParamDefinition(name="type", path="MedicinalProductDefinition.type", description="Regulatory type, e.g. Investigational or Authorized", type="token" )
4296  public static final String SP_TYPE = "type";
4297 /**
4298   * <b>Fluent Client</b> search parameter constant for <b>type</b>
4299   * <p>
4300   * Description: <b>Regulatory type, e.g. Investigational or Authorized</b><br>
4301   * Type: <b>token</b><br>
4302   * Path: <b>MedicinalProductDefinition.type</b><br>
4303   * </p>
4304   */
4305  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_TYPE);
4306
4307
4308}
4309