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