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