001package org.hl7.fhir.dstu3.model;
002
003/*
004  Copyright (c) 2011+, HL7, Inc.
005  All rights reserved.
006  
007  Redistribution and use in source and binary forms, with or without modification, 
008  are permitted provided that the following conditions are met:
009  
010   * Redistributions of source code must retain the above copyright notice, this 
011     list of conditions and the following disclaimer.
012   * Redistributions in binary form must reproduce the above copyright notice, 
013     this list of conditions and the following disclaimer in the documentation 
014     and/or other materials provided with the distribution.
015   * Neither the name of HL7 nor the names of its contributors may be used to 
016     endorse or promote products derived from this software without specific 
017     prior written permission.
018  
019  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
020  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
021  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
022  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
023  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
024  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
025  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
026  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
027  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
028  POSSIBILITY OF SUCH DAMAGE.
029  
030*/
031
032// Generated on Mon, Apr 17, 2017 17:38-0400 for FHIR v3.0.1
033
034import java.util.*;
035
036import org.hl7.fhir.utilities.Utilities;
037import org.hl7.fhir.dstu3.model.Enumerations.*;
038import ca.uhn.fhir.model.api.annotation.ResourceDef;
039import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
040import ca.uhn.fhir.model.api.annotation.Child;
041import ca.uhn.fhir.model.api.annotation.ChildOrder;
042import ca.uhn.fhir.model.api.annotation.Description;
043import ca.uhn.fhir.model.api.annotation.Block;
044import org.hl7.fhir.instance.model.api.*;
045import org.hl7.fhir.exceptions.FHIRException;
046/**
047 * A search parameter that defines a named search item that can be used to search/filter on a resource.
048 */
049@ResourceDef(name="SearchParameter", profile="http://hl7.org/fhir/Profile/SearchParameter")
050@ChildOrder(names={"url", "version", "name", "status", "experimental", "date", "publisher", "contact", "useContext", "jurisdiction", "purpose", "code", "base", "type", "derivedFrom", "description", "expression", "xpath", "xpathUsage", "target", "comparator", "modifier", "chain", "component"})
051public class SearchParameter extends MetadataResource {
052
053    public enum XPathUsageType {
054        /**
055         * The search parameter is derived directly from the selected nodes based on the type definitions.
056         */
057        NORMAL, 
058        /**
059         * The search parameter is derived by a phonetic transform from the selected nodes.
060         */
061        PHONETIC, 
062        /**
063         * The search parameter is based on a spatial transform of the selected nodes.
064         */
065        NEARBY, 
066        /**
067         * The search parameter is based on a spatial transform of the selected nodes, using physical distance from the middle.
068         */
069        DISTANCE, 
070        /**
071         * The interpretation of the xpath statement is unknown (and can't be automated).
072         */
073        OTHER, 
074        /**
075         * added to help the parsers with the generic types
076         */
077        NULL;
078        public static XPathUsageType fromCode(String codeString) throws FHIRException {
079            if (codeString == null || "".equals(codeString))
080                return null;
081        if ("normal".equals(codeString))
082          return NORMAL;
083        if ("phonetic".equals(codeString))
084          return PHONETIC;
085        if ("nearby".equals(codeString))
086          return NEARBY;
087        if ("distance".equals(codeString))
088          return DISTANCE;
089        if ("other".equals(codeString))
090          return OTHER;
091        if (Configuration.isAcceptInvalidEnums())
092          return null;
093        else
094          throw new FHIRException("Unknown XPathUsageType code '"+codeString+"'");
095        }
096        public String toCode() {
097          switch (this) {
098            case NORMAL: return "normal";
099            case PHONETIC: return "phonetic";
100            case NEARBY: return "nearby";
101            case DISTANCE: return "distance";
102            case OTHER: return "other";
103            default: return "?";
104          }
105        }
106        public String getSystem() {
107          switch (this) {
108            case NORMAL: return "http://hl7.org/fhir/search-xpath-usage";
109            case PHONETIC: return "http://hl7.org/fhir/search-xpath-usage";
110            case NEARBY: return "http://hl7.org/fhir/search-xpath-usage";
111            case DISTANCE: return "http://hl7.org/fhir/search-xpath-usage";
112            case OTHER: return "http://hl7.org/fhir/search-xpath-usage";
113            default: return "?";
114          }
115        }
116        public String getDefinition() {
117          switch (this) {
118            case NORMAL: return "The search parameter is derived directly from the selected nodes based on the type definitions.";
119            case PHONETIC: return "The search parameter is derived by a phonetic transform from the selected nodes.";
120            case NEARBY: return "The search parameter is based on a spatial transform of the selected nodes.";
121            case DISTANCE: return "The search parameter is based on a spatial transform of the selected nodes, using physical distance from the middle.";
122            case OTHER: return "The interpretation of the xpath statement is unknown (and can't be automated).";
123            default: return "?";
124          }
125        }
126        public String getDisplay() {
127          switch (this) {
128            case NORMAL: return "Normal";
129            case PHONETIC: return "Phonetic";
130            case NEARBY: return "Nearby";
131            case DISTANCE: return "Distance";
132            case OTHER: return "Other";
133            default: return "?";
134          }
135        }
136    }
137
138  public static class XPathUsageTypeEnumFactory implements EnumFactory<XPathUsageType> {
139    public XPathUsageType fromCode(String codeString) throws IllegalArgumentException {
140      if (codeString == null || "".equals(codeString))
141            if (codeString == null || "".equals(codeString))
142                return null;
143        if ("normal".equals(codeString))
144          return XPathUsageType.NORMAL;
145        if ("phonetic".equals(codeString))
146          return XPathUsageType.PHONETIC;
147        if ("nearby".equals(codeString))
148          return XPathUsageType.NEARBY;
149        if ("distance".equals(codeString))
150          return XPathUsageType.DISTANCE;
151        if ("other".equals(codeString))
152          return XPathUsageType.OTHER;
153        throw new IllegalArgumentException("Unknown XPathUsageType code '"+codeString+"'");
154        }
155        public Enumeration<XPathUsageType> fromType(Base code) throws FHIRException {
156          if (code == null)
157            return null;
158          if (code.isEmpty())
159            return new Enumeration<XPathUsageType>(this);
160          String codeString = ((PrimitiveType) code).asStringValue();
161          if (codeString == null || "".equals(codeString))
162            return null;
163        if ("normal".equals(codeString))
164          return new Enumeration<XPathUsageType>(this, XPathUsageType.NORMAL);
165        if ("phonetic".equals(codeString))
166          return new Enumeration<XPathUsageType>(this, XPathUsageType.PHONETIC);
167        if ("nearby".equals(codeString))
168          return new Enumeration<XPathUsageType>(this, XPathUsageType.NEARBY);
169        if ("distance".equals(codeString))
170          return new Enumeration<XPathUsageType>(this, XPathUsageType.DISTANCE);
171        if ("other".equals(codeString))
172          return new Enumeration<XPathUsageType>(this, XPathUsageType.OTHER);
173        throw new FHIRException("Unknown XPathUsageType code '"+codeString+"'");
174        }
175    public String toCode(XPathUsageType code) {
176      if (code == XPathUsageType.NORMAL)
177        return "normal";
178      if (code == XPathUsageType.PHONETIC)
179        return "phonetic";
180      if (code == XPathUsageType.NEARBY)
181        return "nearby";
182      if (code == XPathUsageType.DISTANCE)
183        return "distance";
184      if (code == XPathUsageType.OTHER)
185        return "other";
186      return "?";
187      }
188    public String toSystem(XPathUsageType code) {
189      return code.getSystem();
190      }
191    }
192
193    public enum SearchComparator {
194        /**
195         * the value for the parameter in the resource is equal to the provided value
196         */
197        EQ, 
198        /**
199         * the value for the parameter in the resource is not equal to the provided value
200         */
201        NE, 
202        /**
203         * the value for the parameter in the resource is greater than the provided value
204         */
205        GT, 
206        /**
207         * the value for the parameter in the resource is less than the provided value
208         */
209        LT, 
210        /**
211         * the value for the parameter in the resource is greater or equal to the provided value
212         */
213        GE, 
214        /**
215         * the value for the parameter in the resource is less or equal to the provided value
216         */
217        LE, 
218        /**
219         * the value for the parameter in the resource starts after the provided value
220         */
221        SA, 
222        /**
223         * the value for the parameter in the resource ends before the provided value
224         */
225        EB, 
226        /**
227         * the value for the parameter in the resource is approximately the same to the provided value.
228         */
229        AP, 
230        /**
231         * added to help the parsers with the generic types
232         */
233        NULL;
234        public static SearchComparator fromCode(String codeString) throws FHIRException {
235            if (codeString == null || "".equals(codeString))
236                return null;
237        if ("eq".equals(codeString))
238          return EQ;
239        if ("ne".equals(codeString))
240          return NE;
241        if ("gt".equals(codeString))
242          return GT;
243        if ("lt".equals(codeString))
244          return LT;
245        if ("ge".equals(codeString))
246          return GE;
247        if ("le".equals(codeString))
248          return LE;
249        if ("sa".equals(codeString))
250          return SA;
251        if ("eb".equals(codeString))
252          return EB;
253        if ("ap".equals(codeString))
254          return AP;
255        if (Configuration.isAcceptInvalidEnums())
256          return null;
257        else
258          throw new FHIRException("Unknown SearchComparator code '"+codeString+"'");
259        }
260        public String toCode() {
261          switch (this) {
262            case EQ: return "eq";
263            case NE: return "ne";
264            case GT: return "gt";
265            case LT: return "lt";
266            case GE: return "ge";
267            case LE: return "le";
268            case SA: return "sa";
269            case EB: return "eb";
270            case AP: return "ap";
271            default: return "?";
272          }
273        }
274        public String getSystem() {
275          switch (this) {
276            case EQ: return "http://hl7.org/fhir/search-comparator";
277            case NE: return "http://hl7.org/fhir/search-comparator";
278            case GT: return "http://hl7.org/fhir/search-comparator";
279            case LT: return "http://hl7.org/fhir/search-comparator";
280            case GE: return "http://hl7.org/fhir/search-comparator";
281            case LE: return "http://hl7.org/fhir/search-comparator";
282            case SA: return "http://hl7.org/fhir/search-comparator";
283            case EB: return "http://hl7.org/fhir/search-comparator";
284            case AP: return "http://hl7.org/fhir/search-comparator";
285            default: return "?";
286          }
287        }
288        public String getDefinition() {
289          switch (this) {
290            case EQ: return "the value for the parameter in the resource is equal to the provided value";
291            case NE: return "the value for the parameter in the resource is not equal to the provided value";
292            case GT: return "the value for the parameter in the resource is greater than the provided value";
293            case LT: return "the value for the parameter in the resource is less than the provided value";
294            case GE: return "the value for the parameter in the resource is greater or equal to the provided value";
295            case LE: return "the value for the parameter in the resource is less or equal to the provided value";
296            case SA: return "the value for the parameter in the resource starts after the provided value";
297            case EB: return "the value for the parameter in the resource ends before the provided value";
298            case AP: return "the value for the parameter in the resource is approximately the same to the provided value.";
299            default: return "?";
300          }
301        }
302        public String getDisplay() {
303          switch (this) {
304            case EQ: return "Equals";
305            case NE: return "Not Equals";
306            case GT: return "Greater Than";
307            case LT: return "Less Then";
308            case GE: return "Greater or Equals";
309            case LE: return "Less of Equal";
310            case SA: return "Starts After";
311            case EB: return "Ends Before";
312            case AP: return "Approximately";
313            default: return "?";
314          }
315        }
316    }
317
318  public static class SearchComparatorEnumFactory implements EnumFactory<SearchComparator> {
319    public SearchComparator fromCode(String codeString) throws IllegalArgumentException {
320      if (codeString == null || "".equals(codeString))
321            if (codeString == null || "".equals(codeString))
322                return null;
323        if ("eq".equals(codeString))
324          return SearchComparator.EQ;
325        if ("ne".equals(codeString))
326          return SearchComparator.NE;
327        if ("gt".equals(codeString))
328          return SearchComparator.GT;
329        if ("lt".equals(codeString))
330          return SearchComparator.LT;
331        if ("ge".equals(codeString))
332          return SearchComparator.GE;
333        if ("le".equals(codeString))
334          return SearchComparator.LE;
335        if ("sa".equals(codeString))
336          return SearchComparator.SA;
337        if ("eb".equals(codeString))
338          return SearchComparator.EB;
339        if ("ap".equals(codeString))
340          return SearchComparator.AP;
341        throw new IllegalArgumentException("Unknown SearchComparator code '"+codeString+"'");
342        }
343        public Enumeration<SearchComparator> fromType(Base code) throws FHIRException {
344          if (code == null)
345            return null;
346          if (code.isEmpty())
347            return new Enumeration<SearchComparator>(this);
348          String codeString = ((PrimitiveType) code).asStringValue();
349          if (codeString == null || "".equals(codeString))
350            return null;
351        if ("eq".equals(codeString))
352          return new Enumeration<SearchComparator>(this, SearchComparator.EQ);
353        if ("ne".equals(codeString))
354          return new Enumeration<SearchComparator>(this, SearchComparator.NE);
355        if ("gt".equals(codeString))
356          return new Enumeration<SearchComparator>(this, SearchComparator.GT);
357        if ("lt".equals(codeString))
358          return new Enumeration<SearchComparator>(this, SearchComparator.LT);
359        if ("ge".equals(codeString))
360          return new Enumeration<SearchComparator>(this, SearchComparator.GE);
361        if ("le".equals(codeString))
362          return new Enumeration<SearchComparator>(this, SearchComparator.LE);
363        if ("sa".equals(codeString))
364          return new Enumeration<SearchComparator>(this, SearchComparator.SA);
365        if ("eb".equals(codeString))
366          return new Enumeration<SearchComparator>(this, SearchComparator.EB);
367        if ("ap".equals(codeString))
368          return new Enumeration<SearchComparator>(this, SearchComparator.AP);
369        throw new FHIRException("Unknown SearchComparator code '"+codeString+"'");
370        }
371    public String toCode(SearchComparator code) {
372      if (code == SearchComparator.EQ)
373        return "eq";
374      if (code == SearchComparator.NE)
375        return "ne";
376      if (code == SearchComparator.GT)
377        return "gt";
378      if (code == SearchComparator.LT)
379        return "lt";
380      if (code == SearchComparator.GE)
381        return "ge";
382      if (code == SearchComparator.LE)
383        return "le";
384      if (code == SearchComparator.SA)
385        return "sa";
386      if (code == SearchComparator.EB)
387        return "eb";
388      if (code == SearchComparator.AP)
389        return "ap";
390      return "?";
391      }
392    public String toSystem(SearchComparator code) {
393      return code.getSystem();
394      }
395    }
396
397    public enum SearchModifierCode {
398        /**
399         * The search parameter returns resources that have a value or not.
400         */
401        MISSING, 
402        /**
403         * The search parameter returns resources that have a value that exactly matches the supplied parameter (the whole string, including casing and accents).
404         */
405        EXACT, 
406        /**
407         * The search parameter returns resources that include the supplied parameter value anywhere within the field being searched.
408         */
409        CONTAINS, 
410        /**
411         * The search parameter returns resources that do not contain a match.
412         */
413        NOT, 
414        /**
415         * The search parameter is processed as a string that searches text associated with the code/value - either CodeableConcept.text, Coding.display, or Identifier.type.text.
416         */
417        TEXT, 
418        /**
419         * The search parameter is a URI (relative or absolute) that identifies a value set, and the search parameter tests whether the coding is in the specified value set.
420         */
421        IN, 
422        /**
423         * The search parameter is a URI (relative or absolute) that identifies a value set, and the search parameter tests whether the coding is not in the specified value set.
424         */
425        NOTIN, 
426        /**
427         * The search parameter tests whether the value in a resource is subsumed by the specified value (is-a, or hierarchical relationships).
428         */
429        BELOW, 
430        /**
431         * The search parameter tests whether the value in a resource subsumes the specified value (is-a, or hierarchical relationships).
432         */
433        ABOVE, 
434        /**
435         * The search parameter only applies to the Resource Type specified as a modifier (e.g. the modifier is not actually :type, but :Patient etc.).
436         */
437        TYPE, 
438        /**
439         * added to help the parsers with the generic types
440         */
441        NULL;
442        public static SearchModifierCode fromCode(String codeString) throws FHIRException {
443            if (codeString == null || "".equals(codeString))
444                return null;
445        if ("missing".equals(codeString))
446          return MISSING;
447        if ("exact".equals(codeString))
448          return EXACT;
449        if ("contains".equals(codeString))
450          return CONTAINS;
451        if ("not".equals(codeString))
452          return NOT;
453        if ("text".equals(codeString))
454          return TEXT;
455        if ("in".equals(codeString))
456          return IN;
457        if ("not-in".equals(codeString))
458          return NOTIN;
459        if ("below".equals(codeString))
460          return BELOW;
461        if ("above".equals(codeString))
462          return ABOVE;
463        if ("type".equals(codeString))
464          return TYPE;
465        if (Configuration.isAcceptInvalidEnums())
466          return null;
467        else
468          throw new FHIRException("Unknown SearchModifierCode code '"+codeString+"'");
469        }
470        public String toCode() {
471          switch (this) {
472            case MISSING: return "missing";
473            case EXACT: return "exact";
474            case CONTAINS: return "contains";
475            case NOT: return "not";
476            case TEXT: return "text";
477            case IN: return "in";
478            case NOTIN: return "not-in";
479            case BELOW: return "below";
480            case ABOVE: return "above";
481            case TYPE: return "type";
482            default: return "?";
483          }
484        }
485        public String getSystem() {
486          switch (this) {
487            case MISSING: return "http://hl7.org/fhir/search-modifier-code";
488            case EXACT: return "http://hl7.org/fhir/search-modifier-code";
489            case CONTAINS: return "http://hl7.org/fhir/search-modifier-code";
490            case NOT: return "http://hl7.org/fhir/search-modifier-code";
491            case TEXT: return "http://hl7.org/fhir/search-modifier-code";
492            case IN: return "http://hl7.org/fhir/search-modifier-code";
493            case NOTIN: return "http://hl7.org/fhir/search-modifier-code";
494            case BELOW: return "http://hl7.org/fhir/search-modifier-code";
495            case ABOVE: return "http://hl7.org/fhir/search-modifier-code";
496            case TYPE: return "http://hl7.org/fhir/search-modifier-code";
497            default: return "?";
498          }
499        }
500        public String getDefinition() {
501          switch (this) {
502            case MISSING: return "The search parameter returns resources that have a value or not.";
503            case EXACT: return "The search parameter returns resources that have a value that exactly matches the supplied parameter (the whole string, including casing and accents).";
504            case CONTAINS: return "The search parameter returns resources that include the supplied parameter value anywhere within the field being searched.";
505            case NOT: return "The search parameter returns resources that do not contain a match.";
506            case TEXT: return "The search parameter is processed as a string that searches text associated with the code/value - either CodeableConcept.text, Coding.display, or Identifier.type.text.";
507            case IN: return "The search parameter is a URI (relative or absolute) that identifies a value set, and the search parameter tests whether the coding is in the specified value set.";
508            case NOTIN: return "The search parameter is a URI (relative or absolute) that identifies a value set, and the search parameter tests whether the coding is not in the specified value set.";
509            case BELOW: return "The search parameter tests whether the value in a resource is subsumed by the specified value (is-a, or hierarchical relationships).";
510            case ABOVE: return "The search parameter tests whether the value in a resource subsumes the specified value (is-a, or hierarchical relationships).";
511            case TYPE: return "The search parameter only applies to the Resource Type specified as a modifier (e.g. the modifier is not actually :type, but :Patient etc.).";
512            default: return "?";
513          }
514        }
515        public String getDisplay() {
516          switch (this) {
517            case MISSING: return "Missing";
518            case EXACT: return "Exact";
519            case CONTAINS: return "Contains";
520            case NOT: return "Not";
521            case TEXT: return "Text";
522            case IN: return "In";
523            case NOTIN: return "Not In";
524            case BELOW: return "Below";
525            case ABOVE: return "Above";
526            case TYPE: return "Type";
527            default: return "?";
528          }
529        }
530    }
531
532  public static class SearchModifierCodeEnumFactory implements EnumFactory<SearchModifierCode> {
533    public SearchModifierCode fromCode(String codeString) throws IllegalArgumentException {
534      if (codeString == null || "".equals(codeString))
535            if (codeString == null || "".equals(codeString))
536                return null;
537        if ("missing".equals(codeString))
538          return SearchModifierCode.MISSING;
539        if ("exact".equals(codeString))
540          return SearchModifierCode.EXACT;
541        if ("contains".equals(codeString))
542          return SearchModifierCode.CONTAINS;
543        if ("not".equals(codeString))
544          return SearchModifierCode.NOT;
545        if ("text".equals(codeString))
546          return SearchModifierCode.TEXT;
547        if ("in".equals(codeString))
548          return SearchModifierCode.IN;
549        if ("not-in".equals(codeString))
550          return SearchModifierCode.NOTIN;
551        if ("below".equals(codeString))
552          return SearchModifierCode.BELOW;
553        if ("above".equals(codeString))
554          return SearchModifierCode.ABOVE;
555        if ("type".equals(codeString))
556          return SearchModifierCode.TYPE;
557        throw new IllegalArgumentException("Unknown SearchModifierCode code '"+codeString+"'");
558        }
559        public Enumeration<SearchModifierCode> fromType(Base code) throws FHIRException {
560          if (code == null)
561            return null;
562          if (code.isEmpty())
563            return new Enumeration<SearchModifierCode>(this);
564          String codeString = ((PrimitiveType) code).asStringValue();
565          if (codeString == null || "".equals(codeString))
566            return null;
567        if ("missing".equals(codeString))
568          return new Enumeration<SearchModifierCode>(this, SearchModifierCode.MISSING);
569        if ("exact".equals(codeString))
570          return new Enumeration<SearchModifierCode>(this, SearchModifierCode.EXACT);
571        if ("contains".equals(codeString))
572          return new Enumeration<SearchModifierCode>(this, SearchModifierCode.CONTAINS);
573        if ("not".equals(codeString))
574          return new Enumeration<SearchModifierCode>(this, SearchModifierCode.NOT);
575        if ("text".equals(codeString))
576          return new Enumeration<SearchModifierCode>(this, SearchModifierCode.TEXT);
577        if ("in".equals(codeString))
578          return new Enumeration<SearchModifierCode>(this, SearchModifierCode.IN);
579        if ("not-in".equals(codeString))
580          return new Enumeration<SearchModifierCode>(this, SearchModifierCode.NOTIN);
581        if ("below".equals(codeString))
582          return new Enumeration<SearchModifierCode>(this, SearchModifierCode.BELOW);
583        if ("above".equals(codeString))
584          return new Enumeration<SearchModifierCode>(this, SearchModifierCode.ABOVE);
585        if ("type".equals(codeString))
586          return new Enumeration<SearchModifierCode>(this, SearchModifierCode.TYPE);
587        throw new FHIRException("Unknown SearchModifierCode code '"+codeString+"'");
588        }
589    public String toCode(SearchModifierCode code) {
590      if (code == SearchModifierCode.MISSING)
591        return "missing";
592      if (code == SearchModifierCode.EXACT)
593        return "exact";
594      if (code == SearchModifierCode.CONTAINS)
595        return "contains";
596      if (code == SearchModifierCode.NOT)
597        return "not";
598      if (code == SearchModifierCode.TEXT)
599        return "text";
600      if (code == SearchModifierCode.IN)
601        return "in";
602      if (code == SearchModifierCode.NOTIN)
603        return "not-in";
604      if (code == SearchModifierCode.BELOW)
605        return "below";
606      if (code == SearchModifierCode.ABOVE)
607        return "above";
608      if (code == SearchModifierCode.TYPE)
609        return "type";
610      return "?";
611      }
612    public String toSystem(SearchModifierCode code) {
613      return code.getSystem();
614      }
615    }
616
617    @Block()
618    public static class SearchParameterComponentComponent extends BackboneElement implements IBaseBackboneElement {
619        /**
620         * The definition of the search parameter that describes this part.
621         */
622        @Child(name = "definition", type = {SearchParameter.class}, order=1, min=1, max=1, modifier=false, summary=false)
623        @Description(shortDefinition="Defines how the part works", formalDefinition="The definition of the search parameter that describes this part." )
624        protected Reference definition;
625
626        /**
627         * The actual object that is the target of the reference (The definition of the search parameter that describes this part.)
628         */
629        protected SearchParameter definitionTarget;
630
631        /**
632         * A sub-expression that defines how to extract values for this component from the output of the main SearchParameter.expression.
633         */
634        @Child(name = "expression", type = {StringType.class}, order=2, min=1, max=1, modifier=false, summary=false)
635        @Description(shortDefinition="Subexpression relative to main expression", formalDefinition="A sub-expression that defines how to extract values for this component from the output of the main SearchParameter.expression." )
636        protected StringType expression;
637
638        private static final long serialVersionUID = -1105563614L;
639
640    /**
641     * Constructor
642     */
643      public SearchParameterComponentComponent() {
644        super();
645      }
646
647    /**
648     * Constructor
649     */
650      public SearchParameterComponentComponent(Reference definition, StringType expression) {
651        super();
652        this.definition = definition;
653        this.expression = expression;
654      }
655
656        /**
657         * @return {@link #definition} (The definition of the search parameter that describes this part.)
658         */
659        public Reference getDefinition() { 
660          if (this.definition == null)
661            if (Configuration.errorOnAutoCreate())
662              throw new Error("Attempt to auto-create SearchParameterComponentComponent.definition");
663            else if (Configuration.doAutoCreate())
664              this.definition = new Reference(); // cc
665          return this.definition;
666        }
667
668        public boolean hasDefinition() { 
669          return this.definition != null && !this.definition.isEmpty();
670        }
671
672        /**
673         * @param value {@link #definition} (The definition of the search parameter that describes this part.)
674         */
675        public SearchParameterComponentComponent setDefinition(Reference value) { 
676          this.definition = value;
677          return this;
678        }
679
680        /**
681         * @return {@link #definition} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The definition of the search parameter that describes this part.)
682         */
683        public SearchParameter getDefinitionTarget() { 
684          if (this.definitionTarget == null)
685            if (Configuration.errorOnAutoCreate())
686              throw new Error("Attempt to auto-create SearchParameterComponentComponent.definition");
687            else if (Configuration.doAutoCreate())
688              this.definitionTarget = new SearchParameter(); // aa
689          return this.definitionTarget;
690        }
691
692        /**
693         * @param value {@link #definition} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The definition of the search parameter that describes this part.)
694         */
695        public SearchParameterComponentComponent setDefinitionTarget(SearchParameter value) { 
696          this.definitionTarget = value;
697          return this;
698        }
699
700        /**
701         * @return {@link #expression} (A sub-expression that defines how to extract values for this component from the output of the main SearchParameter.expression.). This is the underlying object with id, value and extensions. The accessor "getExpression" gives direct access to the value
702         */
703        public StringType getExpressionElement() { 
704          if (this.expression == null)
705            if (Configuration.errorOnAutoCreate())
706              throw new Error("Attempt to auto-create SearchParameterComponentComponent.expression");
707            else if (Configuration.doAutoCreate())
708              this.expression = new StringType(); // bb
709          return this.expression;
710        }
711
712        public boolean hasExpressionElement() { 
713          return this.expression != null && !this.expression.isEmpty();
714        }
715
716        public boolean hasExpression() { 
717          return this.expression != null && !this.expression.isEmpty();
718        }
719
720        /**
721         * @param value {@link #expression} (A sub-expression that defines how to extract values for this component from the output of the main SearchParameter.expression.). This is the underlying object with id, value and extensions. The accessor "getExpression" gives direct access to the value
722         */
723        public SearchParameterComponentComponent setExpressionElement(StringType value) { 
724          this.expression = value;
725          return this;
726        }
727
728        /**
729         * @return A sub-expression that defines how to extract values for this component from the output of the main SearchParameter.expression.
730         */
731        public String getExpression() { 
732          return this.expression == null ? null : this.expression.getValue();
733        }
734
735        /**
736         * @param value A sub-expression that defines how to extract values for this component from the output of the main SearchParameter.expression.
737         */
738        public SearchParameterComponentComponent setExpression(String value) { 
739            if (this.expression == null)
740              this.expression = new StringType();
741            this.expression.setValue(value);
742          return this;
743        }
744
745        protected void listChildren(List<Property> childrenList) {
746          super.listChildren(childrenList);
747          childrenList.add(new Property("definition", "Reference(SearchParameter)", "The definition of the search parameter that describes this part.", 0, java.lang.Integer.MAX_VALUE, definition));
748          childrenList.add(new Property("expression", "string", "A sub-expression that defines how to extract values for this component from the output of the main SearchParameter.expression.", 0, java.lang.Integer.MAX_VALUE, expression));
749        }
750
751      @Override
752      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
753        switch (hash) {
754        case -1014418093: /*definition*/ return this.definition == null ? new Base[0] : new Base[] {this.definition}; // Reference
755        case -1795452264: /*expression*/ return this.expression == null ? new Base[0] : new Base[] {this.expression}; // StringType
756        default: return super.getProperty(hash, name, checkValid);
757        }
758
759      }
760
761      @Override
762      public Base setProperty(int hash, String name, Base value) throws FHIRException {
763        switch (hash) {
764        case -1014418093: // definition
765          this.definition = castToReference(value); // Reference
766          return value;
767        case -1795452264: // expression
768          this.expression = castToString(value); // StringType
769          return value;
770        default: return super.setProperty(hash, name, value);
771        }
772
773      }
774
775      @Override
776      public Base setProperty(String name, Base value) throws FHIRException {
777        if (name.equals("definition")) {
778          this.definition = castToReference(value); // Reference
779        } else if (name.equals("expression")) {
780          this.expression = castToString(value); // StringType
781        } else
782          return super.setProperty(name, value);
783        return value;
784      }
785
786      @Override
787      public Base makeProperty(int hash, String name) throws FHIRException {
788        switch (hash) {
789        case -1014418093:  return getDefinition(); 
790        case -1795452264:  return getExpressionElement();
791        default: return super.makeProperty(hash, name);
792        }
793
794      }
795
796      @Override
797      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
798        switch (hash) {
799        case -1014418093: /*definition*/ return new String[] {"Reference"};
800        case -1795452264: /*expression*/ return new String[] {"string"};
801        default: return super.getTypesForProperty(hash, name);
802        }
803
804      }
805
806      @Override
807      public Base addChild(String name) throws FHIRException {
808        if (name.equals("definition")) {
809          this.definition = new Reference();
810          return this.definition;
811        }
812        else if (name.equals("expression")) {
813          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.expression");
814        }
815        else
816          return super.addChild(name);
817      }
818
819      public SearchParameterComponentComponent copy() {
820        SearchParameterComponentComponent dst = new SearchParameterComponentComponent();
821        copyValues(dst);
822        dst.definition = definition == null ? null : definition.copy();
823        dst.expression = expression == null ? null : expression.copy();
824        return dst;
825      }
826
827      @Override
828      public boolean equalsDeep(Base other) {
829        if (!super.equalsDeep(other))
830          return false;
831        if (!(other instanceof SearchParameterComponentComponent))
832          return false;
833        SearchParameterComponentComponent o = (SearchParameterComponentComponent) other;
834        return compareDeep(definition, o.definition, true) && compareDeep(expression, o.expression, true)
835          ;
836      }
837
838      @Override
839      public boolean equalsShallow(Base other) {
840        if (!super.equalsShallow(other))
841          return false;
842        if (!(other instanceof SearchParameterComponentComponent))
843          return false;
844        SearchParameterComponentComponent o = (SearchParameterComponentComponent) other;
845        return compareValues(expression, o.expression, true);
846      }
847
848      public boolean isEmpty() {
849        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(definition, expression);
850      }
851
852  public String fhirType() {
853    return "SearchParameter.component";
854
855  }
856
857  }
858
859    /**
860     * Explaination of why this search parameter is needed and why it has been designed as it has.
861     */
862    @Child(name = "purpose", type = {MarkdownType.class}, order=0, min=0, max=1, modifier=false, summary=false)
863    @Description(shortDefinition="Why this search parameter is defined", formalDefinition="Explaination of why this search parameter is needed and why it has been designed as it has." )
864    protected MarkdownType purpose;
865
866    /**
867     * The code used in the URL or the parameter name in a parameters resource for this search parameter.
868     */
869    @Child(name = "code", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=true)
870    @Description(shortDefinition="Code used in URL", formalDefinition="The code used in the URL or the parameter name in a parameters resource for this search parameter." )
871    protected CodeType code;
872
873    /**
874     * The base resource type(s) that this search parameter can be used against.
875     */
876    @Child(name = "base", type = {CodeType.class}, order=2, min=1, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
877    @Description(shortDefinition="The resource type(s) this search parameter applies to", formalDefinition="The base resource type(s) that this search parameter can be used against." )
878    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/resource-types")
879    protected List<CodeType> base;
880
881    /**
882     * The type of value a search parameter refers to, and how the content is interpreted.
883     */
884    @Child(name = "type", type = {CodeType.class}, order=3, min=1, max=1, modifier=false, summary=true)
885    @Description(shortDefinition="number | date | string | token | reference | composite | quantity | uri", formalDefinition="The type of value a search parameter refers to, and how the content is interpreted." )
886    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/search-param-type")
887    protected Enumeration<SearchParamType> type;
888
889    /**
890     * Where this search parameter is originally defined. If a derivedFrom is provided, then the details in the search parameter must be consistent with the definition from which it is defined. I.e. the parameter should have the same meaning, and (usually) the functionality should be a proper subset of the underlying search parameter.
891     */
892    @Child(name = "derivedFrom", type = {UriType.class}, order=4, min=0, max=1, modifier=false, summary=false)
893    @Description(shortDefinition="Original Definition for the search parameter", formalDefinition="Where this search parameter is originally defined. If a derivedFrom is provided, then the details in the search parameter must be consistent with the definition from which it is defined. I.e. the parameter should have the same meaning, and (usually) the functionality should be a proper subset of the underlying search parameter." )
894    protected UriType derivedFrom;
895
896    /**
897     * A FHIRPath expression that returns a set of elements for the search parameter.
898     */
899    @Child(name = "expression", type = {StringType.class}, order=5, min=0, max=1, modifier=false, summary=false)
900    @Description(shortDefinition="FHIRPath expression that extracts the values", formalDefinition="A FHIRPath expression that returns a set of elements for the search parameter." )
901    protected StringType expression;
902
903    /**
904     * An XPath expression that returns a set of elements for the search parameter.
905     */
906    @Child(name = "xpath", type = {StringType.class}, order=6, min=0, max=1, modifier=false, summary=false)
907    @Description(shortDefinition="XPath that extracts the values", formalDefinition="An XPath expression that returns a set of elements for the search parameter." )
908    protected StringType xpath;
909
910    /**
911     * How the search parameter relates to the set of elements returned by evaluating the xpath query.
912     */
913    @Child(name = "xpathUsage", type = {CodeType.class}, order=7, min=0, max=1, modifier=false, summary=false)
914    @Description(shortDefinition="normal | phonetic | nearby | distance | other", formalDefinition="How the search parameter relates to the set of elements returned by evaluating the xpath query." )
915    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/search-xpath-usage")
916    protected Enumeration<XPathUsageType> xpathUsage;
917
918    /**
919     * Types of resource (if a resource is referenced).
920     */
921    @Child(name = "target", type = {CodeType.class}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
922    @Description(shortDefinition="Types of resource (if a resource reference)", formalDefinition="Types of resource (if a resource is referenced)." )
923    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/resource-types")
924    protected List<CodeType> target;
925
926    /**
927     * Comparators supported for the search parameter.
928     */
929    @Child(name = "comparator", type = {CodeType.class}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
930    @Description(shortDefinition="eq | ne | gt | lt | ge | le | sa | eb | ap", formalDefinition="Comparators supported for the search parameter." )
931    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/search-comparator")
932    protected List<Enumeration<SearchComparator>> comparator;
933
934    /**
935     * A modifier supported for the search parameter.
936     */
937    @Child(name = "modifier", type = {CodeType.class}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
938    @Description(shortDefinition="missing | exact | contains | not | text | in | not-in | below | above | type", formalDefinition="A modifier supported for the search parameter." )
939    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/search-modifier-code")
940    protected List<Enumeration<SearchModifierCode>> modifier;
941
942    /**
943     * Contains the names of any search parameters which may be chained to the containing search parameter. Chained parameters may be added to search parameters of type reference, and specify that resources will only be returned if they contain a reference to a resource which matches the chained parameter value. Values for this field should be drawn from SearchParameter.code for a parameter on the target resource type.
944     */
945    @Child(name = "chain", type = {StringType.class}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
946    @Description(shortDefinition="Chained names supported", formalDefinition="Contains the names of any search parameters which may be chained to the containing search parameter. Chained parameters may be added to search parameters of type reference, and specify that resources will only be returned if they contain a reference to a resource which matches the chained parameter value. Values for this field should be drawn from SearchParameter.code for a parameter on the target resource type." )
947    protected List<StringType> chain;
948
949    /**
950     * Used to define the parts of a composite search parameter.
951     */
952    @Child(name = "component", type = {}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
953    @Description(shortDefinition="For Composite resources to define the parts", formalDefinition="Used to define the parts of a composite search parameter." )
954    protected List<SearchParameterComponentComponent> component;
955
956    private static final long serialVersionUID = -769368159L;
957
958  /**
959   * Constructor
960   */
961    public SearchParameter() {
962      super();
963    }
964
965  /**
966   * Constructor
967   */
968    public SearchParameter(UriType url, StringType name, Enumeration<PublicationStatus> status, CodeType code, Enumeration<SearchParamType> type, MarkdownType description) {
969      super();
970      this.url = url;
971      this.name = name;
972      this.status = status;
973      this.code = code;
974      this.type = type;
975      this.description = description;
976    }
977
978    /**
979     * @return {@link #url} (An absolute URI that is used to identify this search parameter 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 search parameter is (or will be) published. The URL SHOULD include the major version of the search parameter. 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
980     */
981    public UriType getUrlElement() { 
982      if (this.url == null)
983        if (Configuration.errorOnAutoCreate())
984          throw new Error("Attempt to auto-create SearchParameter.url");
985        else if (Configuration.doAutoCreate())
986          this.url = new UriType(); // bb
987      return this.url;
988    }
989
990    public boolean hasUrlElement() { 
991      return this.url != null && !this.url.isEmpty();
992    }
993
994    public boolean hasUrl() { 
995      return this.url != null && !this.url.isEmpty();
996    }
997
998    /**
999     * @param value {@link #url} (An absolute URI that is used to identify this search parameter 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 search parameter is (or will be) published. The URL SHOULD include the major version of the search parameter. 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
1000     */
1001    public SearchParameter setUrlElement(UriType value) { 
1002      this.url = value;
1003      return this;
1004    }
1005
1006    /**
1007     * @return An absolute URI that is used to identify this search parameter 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 search parameter is (or will be) published. The URL SHOULD include the major version of the search parameter. For more information see [Technical and Business Versions](resource.html#versions).
1008     */
1009    public String getUrl() { 
1010      return this.url == null ? null : this.url.getValue();
1011    }
1012
1013    /**
1014     * @param value An absolute URI that is used to identify this search parameter 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 search parameter is (or will be) published. The URL SHOULD include the major version of the search parameter. For more information see [Technical and Business Versions](resource.html#versions).
1015     */
1016    public SearchParameter setUrl(String value) { 
1017        if (this.url == null)
1018          this.url = new UriType();
1019        this.url.setValue(value);
1020      return this;
1021    }
1022
1023    /**
1024     * @return {@link #version} (The identifier that is used to identify this version of the search parameter when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the search parameter 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
1025     */
1026    public StringType getVersionElement() { 
1027      if (this.version == null)
1028        if (Configuration.errorOnAutoCreate())
1029          throw new Error("Attempt to auto-create SearchParameter.version");
1030        else if (Configuration.doAutoCreate())
1031          this.version = new StringType(); // bb
1032      return this.version;
1033    }
1034
1035    public boolean hasVersionElement() { 
1036      return this.version != null && !this.version.isEmpty();
1037    }
1038
1039    public boolean hasVersion() { 
1040      return this.version != null && !this.version.isEmpty();
1041    }
1042
1043    /**
1044     * @param value {@link #version} (The identifier that is used to identify this version of the search parameter when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the search parameter 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
1045     */
1046    public SearchParameter setVersionElement(StringType value) { 
1047      this.version = value;
1048      return this;
1049    }
1050
1051    /**
1052     * @return The identifier that is used to identify this version of the search parameter when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the search parameter 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.
1053     */
1054    public String getVersion() { 
1055      return this.version == null ? null : this.version.getValue();
1056    }
1057
1058    /**
1059     * @param value The identifier that is used to identify this version of the search parameter when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the search parameter 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.
1060     */
1061    public SearchParameter setVersion(String value) { 
1062      if (Utilities.noString(value))
1063        this.version = null;
1064      else {
1065        if (this.version == null)
1066          this.version = new StringType();
1067        this.version.setValue(value);
1068      }
1069      return this;
1070    }
1071
1072    /**
1073     * @return {@link #name} (A natural language name identifying the search parameter. 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
1074     */
1075    public StringType getNameElement() { 
1076      if (this.name == null)
1077        if (Configuration.errorOnAutoCreate())
1078          throw new Error("Attempt to auto-create SearchParameter.name");
1079        else if (Configuration.doAutoCreate())
1080          this.name = new StringType(); // bb
1081      return this.name;
1082    }
1083
1084    public boolean hasNameElement() { 
1085      return this.name != null && !this.name.isEmpty();
1086    }
1087
1088    public boolean hasName() { 
1089      return this.name != null && !this.name.isEmpty();
1090    }
1091
1092    /**
1093     * @param value {@link #name} (A natural language name identifying the search parameter. 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
1094     */
1095    public SearchParameter setNameElement(StringType value) { 
1096      this.name = value;
1097      return this;
1098    }
1099
1100    /**
1101     * @return A natural language name identifying the search parameter. This name should be usable as an identifier for the module by machine processing applications such as code generation.
1102     */
1103    public String getName() { 
1104      return this.name == null ? null : this.name.getValue();
1105    }
1106
1107    /**
1108     * @param value A natural language name identifying the search parameter. This name should be usable as an identifier for the module by machine processing applications such as code generation.
1109     */
1110    public SearchParameter setName(String value) { 
1111        if (this.name == null)
1112          this.name = new StringType();
1113        this.name.setValue(value);
1114      return this;
1115    }
1116
1117    /**
1118     * @return {@link #status} (The status of this search parameter. 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
1119     */
1120    public Enumeration<PublicationStatus> getStatusElement() { 
1121      if (this.status == null)
1122        if (Configuration.errorOnAutoCreate())
1123          throw new Error("Attempt to auto-create SearchParameter.status");
1124        else if (Configuration.doAutoCreate())
1125          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory()); // bb
1126      return this.status;
1127    }
1128
1129    public boolean hasStatusElement() { 
1130      return this.status != null && !this.status.isEmpty();
1131    }
1132
1133    public boolean hasStatus() { 
1134      return this.status != null && !this.status.isEmpty();
1135    }
1136
1137    /**
1138     * @param value {@link #status} (The status of this search parameter. 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
1139     */
1140    public SearchParameter setStatusElement(Enumeration<PublicationStatus> value) { 
1141      this.status = value;
1142      return this;
1143    }
1144
1145    /**
1146     * @return The status of this search parameter. Enables tracking the life-cycle of the content.
1147     */
1148    public PublicationStatus getStatus() { 
1149      return this.status == null ? null : this.status.getValue();
1150    }
1151
1152    /**
1153     * @param value The status of this search parameter. Enables tracking the life-cycle of the content.
1154     */
1155    public SearchParameter setStatus(PublicationStatus value) { 
1156        if (this.status == null)
1157          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory());
1158        this.status.setValue(value);
1159      return this;
1160    }
1161
1162    /**
1163     * @return {@link #experimental} (A boolean value to indicate that this search parameter 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
1164     */
1165    public BooleanType getExperimentalElement() { 
1166      if (this.experimental == null)
1167        if (Configuration.errorOnAutoCreate())
1168          throw new Error("Attempt to auto-create SearchParameter.experimental");
1169        else if (Configuration.doAutoCreate())
1170          this.experimental = new BooleanType(); // bb
1171      return this.experimental;
1172    }
1173
1174    public boolean hasExperimentalElement() { 
1175      return this.experimental != null && !this.experimental.isEmpty();
1176    }
1177
1178    public boolean hasExperimental() { 
1179      return this.experimental != null && !this.experimental.isEmpty();
1180    }
1181
1182    /**
1183     * @param value {@link #experimental} (A boolean value to indicate that this search parameter 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
1184     */
1185    public SearchParameter setExperimentalElement(BooleanType value) { 
1186      this.experimental = value;
1187      return this;
1188    }
1189
1190    /**
1191     * @return A boolean value to indicate that this search parameter is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
1192     */
1193    public boolean getExperimental() { 
1194      return this.experimental == null || this.experimental.isEmpty() ? false : this.experimental.getValue();
1195    }
1196
1197    /**
1198     * @param value A boolean value to indicate that this search parameter is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
1199     */
1200    public SearchParameter setExperimental(boolean value) { 
1201        if (this.experimental == null)
1202          this.experimental = new BooleanType();
1203        this.experimental.setValue(value);
1204      return this;
1205    }
1206
1207    /**
1208     * @return {@link #date} (The date  (and optionally time) when the search parameter 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 search parameter changes.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
1209     */
1210    public DateTimeType getDateElement() { 
1211      if (this.date == null)
1212        if (Configuration.errorOnAutoCreate())
1213          throw new Error("Attempt to auto-create SearchParameter.date");
1214        else if (Configuration.doAutoCreate())
1215          this.date = new DateTimeType(); // bb
1216      return this.date;
1217    }
1218
1219    public boolean hasDateElement() { 
1220      return this.date != null && !this.date.isEmpty();
1221    }
1222
1223    public boolean hasDate() { 
1224      return this.date != null && !this.date.isEmpty();
1225    }
1226
1227    /**
1228     * @param value {@link #date} (The date  (and optionally time) when the search parameter 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 search parameter changes.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
1229     */
1230    public SearchParameter setDateElement(DateTimeType value) { 
1231      this.date = value;
1232      return this;
1233    }
1234
1235    /**
1236     * @return The date  (and optionally time) when the search parameter 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 search parameter changes.
1237     */
1238    public Date getDate() { 
1239      return this.date == null ? null : this.date.getValue();
1240    }
1241
1242    /**
1243     * @param value The date  (and optionally time) when the search parameter 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 search parameter changes.
1244     */
1245    public SearchParameter setDate(Date value) { 
1246      if (value == null)
1247        this.date = null;
1248      else {
1249        if (this.date == null)
1250          this.date = new DateTimeType();
1251        this.date.setValue(value);
1252      }
1253      return this;
1254    }
1255
1256    /**
1257     * @return {@link #publisher} (The name of the individual or organization that published the search parameter.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
1258     */
1259    public StringType getPublisherElement() { 
1260      if (this.publisher == null)
1261        if (Configuration.errorOnAutoCreate())
1262          throw new Error("Attempt to auto-create SearchParameter.publisher");
1263        else if (Configuration.doAutoCreate())
1264          this.publisher = new StringType(); // bb
1265      return this.publisher;
1266    }
1267
1268    public boolean hasPublisherElement() { 
1269      return this.publisher != null && !this.publisher.isEmpty();
1270    }
1271
1272    public boolean hasPublisher() { 
1273      return this.publisher != null && !this.publisher.isEmpty();
1274    }
1275
1276    /**
1277     * @param value {@link #publisher} (The name of the individual or organization that published the search parameter.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
1278     */
1279    public SearchParameter setPublisherElement(StringType value) { 
1280      this.publisher = value;
1281      return this;
1282    }
1283
1284    /**
1285     * @return The name of the individual or organization that published the search parameter.
1286     */
1287    public String getPublisher() { 
1288      return this.publisher == null ? null : this.publisher.getValue();
1289    }
1290
1291    /**
1292     * @param value The name of the individual or organization that published the search parameter.
1293     */
1294    public SearchParameter setPublisher(String value) { 
1295      if (Utilities.noString(value))
1296        this.publisher = null;
1297      else {
1298        if (this.publisher == null)
1299          this.publisher = new StringType();
1300        this.publisher.setValue(value);
1301      }
1302      return this;
1303    }
1304
1305    /**
1306     * @return {@link #contact} (Contact details to assist a user in finding and communicating with the publisher.)
1307     */
1308    public List<ContactDetail> getContact() { 
1309      if (this.contact == null)
1310        this.contact = new ArrayList<ContactDetail>();
1311      return this.contact;
1312    }
1313
1314    /**
1315     * @return Returns a reference to <code>this</code> for easy method chaining
1316     */
1317    public SearchParameter setContact(List<ContactDetail> theContact) { 
1318      this.contact = theContact;
1319      return this;
1320    }
1321
1322    public boolean hasContact() { 
1323      if (this.contact == null)
1324        return false;
1325      for (ContactDetail item : this.contact)
1326        if (!item.isEmpty())
1327          return true;
1328      return false;
1329    }
1330
1331    public ContactDetail addContact() { //3
1332      ContactDetail t = new ContactDetail();
1333      if (this.contact == null)
1334        this.contact = new ArrayList<ContactDetail>();
1335      this.contact.add(t);
1336      return t;
1337    }
1338
1339    public SearchParameter addContact(ContactDetail t) { //3
1340      if (t == null)
1341        return this;
1342      if (this.contact == null)
1343        this.contact = new ArrayList<ContactDetail>();
1344      this.contact.add(t);
1345      return this;
1346    }
1347
1348    /**
1349     * @return The first repetition of repeating field {@link #contact}, creating it if it does not already exist
1350     */
1351    public ContactDetail getContactFirstRep() { 
1352      if (getContact().isEmpty()) {
1353        addContact();
1354      }
1355      return getContact().get(0);
1356    }
1357
1358    /**
1359     * @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 search parameter instances.)
1360     */
1361    public List<UsageContext> getUseContext() { 
1362      if (this.useContext == null)
1363        this.useContext = new ArrayList<UsageContext>();
1364      return this.useContext;
1365    }
1366
1367    /**
1368     * @return Returns a reference to <code>this</code> for easy method chaining
1369     */
1370    public SearchParameter setUseContext(List<UsageContext> theUseContext) { 
1371      this.useContext = theUseContext;
1372      return this;
1373    }
1374
1375    public boolean hasUseContext() { 
1376      if (this.useContext == null)
1377        return false;
1378      for (UsageContext item : this.useContext)
1379        if (!item.isEmpty())
1380          return true;
1381      return false;
1382    }
1383
1384    public UsageContext addUseContext() { //3
1385      UsageContext t = new UsageContext();
1386      if (this.useContext == null)
1387        this.useContext = new ArrayList<UsageContext>();
1388      this.useContext.add(t);
1389      return t;
1390    }
1391
1392    public SearchParameter addUseContext(UsageContext t) { //3
1393      if (t == null)
1394        return this;
1395      if (this.useContext == null)
1396        this.useContext = new ArrayList<UsageContext>();
1397      this.useContext.add(t);
1398      return this;
1399    }
1400
1401    /**
1402     * @return The first repetition of repeating field {@link #useContext}, creating it if it does not already exist
1403     */
1404    public UsageContext getUseContextFirstRep() { 
1405      if (getUseContext().isEmpty()) {
1406        addUseContext();
1407      }
1408      return getUseContext().get(0);
1409    }
1410
1411    /**
1412     * @return {@link #jurisdiction} (A legal or geographic region in which the search parameter is intended to be used.)
1413     */
1414    public List<CodeableConcept> getJurisdiction() { 
1415      if (this.jurisdiction == null)
1416        this.jurisdiction = new ArrayList<CodeableConcept>();
1417      return this.jurisdiction;
1418    }
1419
1420    /**
1421     * @return Returns a reference to <code>this</code> for easy method chaining
1422     */
1423    public SearchParameter setJurisdiction(List<CodeableConcept> theJurisdiction) { 
1424      this.jurisdiction = theJurisdiction;
1425      return this;
1426    }
1427
1428    public boolean hasJurisdiction() { 
1429      if (this.jurisdiction == null)
1430        return false;
1431      for (CodeableConcept item : this.jurisdiction)
1432        if (!item.isEmpty())
1433          return true;
1434      return false;
1435    }
1436
1437    public CodeableConcept addJurisdiction() { //3
1438      CodeableConcept t = new CodeableConcept();
1439      if (this.jurisdiction == null)
1440        this.jurisdiction = new ArrayList<CodeableConcept>();
1441      this.jurisdiction.add(t);
1442      return t;
1443    }
1444
1445    public SearchParameter addJurisdiction(CodeableConcept t) { //3
1446      if (t == null)
1447        return this;
1448      if (this.jurisdiction == null)
1449        this.jurisdiction = new ArrayList<CodeableConcept>();
1450      this.jurisdiction.add(t);
1451      return this;
1452    }
1453
1454    /**
1455     * @return The first repetition of repeating field {@link #jurisdiction}, creating it if it does not already exist
1456     */
1457    public CodeableConcept getJurisdictionFirstRep() { 
1458      if (getJurisdiction().isEmpty()) {
1459        addJurisdiction();
1460      }
1461      return getJurisdiction().get(0);
1462    }
1463
1464    /**
1465     * @return {@link #purpose} (Explaination of why this search parameter 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
1466     */
1467    public MarkdownType getPurposeElement() { 
1468      if (this.purpose == null)
1469        if (Configuration.errorOnAutoCreate())
1470          throw new Error("Attempt to auto-create SearchParameter.purpose");
1471        else if (Configuration.doAutoCreate())
1472          this.purpose = new MarkdownType(); // bb
1473      return this.purpose;
1474    }
1475
1476    public boolean hasPurposeElement() { 
1477      return this.purpose != null && !this.purpose.isEmpty();
1478    }
1479
1480    public boolean hasPurpose() { 
1481      return this.purpose != null && !this.purpose.isEmpty();
1482    }
1483
1484    /**
1485     * @param value {@link #purpose} (Explaination of why this search parameter 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
1486     */
1487    public SearchParameter setPurposeElement(MarkdownType value) { 
1488      this.purpose = value;
1489      return this;
1490    }
1491
1492    /**
1493     * @return Explaination of why this search parameter is needed and why it has been designed as it has.
1494     */
1495    public String getPurpose() { 
1496      return this.purpose == null ? null : this.purpose.getValue();
1497    }
1498
1499    /**
1500     * @param value Explaination of why this search parameter is needed and why it has been designed as it has.
1501     */
1502    public SearchParameter setPurpose(String value) { 
1503      if (value == null)
1504        this.purpose = null;
1505      else {
1506        if (this.purpose == null)
1507          this.purpose = new MarkdownType();
1508        this.purpose.setValue(value);
1509      }
1510      return this;
1511    }
1512
1513    /**
1514     * @return {@link #code} (The code used in the URL or the parameter name in a parameters resource for this search parameter.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
1515     */
1516    public CodeType getCodeElement() { 
1517      if (this.code == null)
1518        if (Configuration.errorOnAutoCreate())
1519          throw new Error("Attempt to auto-create SearchParameter.code");
1520        else if (Configuration.doAutoCreate())
1521          this.code = new CodeType(); // bb
1522      return this.code;
1523    }
1524
1525    public boolean hasCodeElement() { 
1526      return this.code != null && !this.code.isEmpty();
1527    }
1528
1529    public boolean hasCode() { 
1530      return this.code != null && !this.code.isEmpty();
1531    }
1532
1533    /**
1534     * @param value {@link #code} (The code used in the URL or the parameter name in a parameters resource for this search parameter.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
1535     */
1536    public SearchParameter setCodeElement(CodeType value) { 
1537      this.code = value;
1538      return this;
1539    }
1540
1541    /**
1542     * @return The code used in the URL or the parameter name in a parameters resource for this search parameter.
1543     */
1544    public String getCode() { 
1545      return this.code == null ? null : this.code.getValue();
1546    }
1547
1548    /**
1549     * @param value The code used in the URL or the parameter name in a parameters resource for this search parameter.
1550     */
1551    public SearchParameter setCode(String value) { 
1552        if (this.code == null)
1553          this.code = new CodeType();
1554        this.code.setValue(value);
1555      return this;
1556    }
1557
1558    /**
1559     * @return {@link #base} (The base resource type(s) that this search parameter can be used against.)
1560     */
1561    public List<CodeType> getBase() { 
1562      if (this.base == null)
1563        this.base = new ArrayList<CodeType>();
1564      return this.base;
1565    }
1566
1567    /**
1568     * @return Returns a reference to <code>this</code> for easy method chaining
1569     */
1570    public SearchParameter setBase(List<CodeType> theBase) { 
1571      this.base = theBase;
1572      return this;
1573    }
1574
1575    public boolean hasBase() { 
1576      if (this.base == null)
1577        return false;
1578      for (CodeType item : this.base)
1579        if (!item.isEmpty())
1580          return true;
1581      return false;
1582    }
1583
1584    /**
1585     * @return {@link #base} (The base resource type(s) that this search parameter can be used against.)
1586     */
1587    public CodeType addBaseElement() {//2 
1588      CodeType t = new CodeType();
1589      if (this.base == null)
1590        this.base = new ArrayList<CodeType>();
1591      this.base.add(t);
1592      return t;
1593    }
1594
1595    /**
1596     * @param value {@link #base} (The base resource type(s) that this search parameter can be used against.)
1597     */
1598    public SearchParameter addBase(String value) { //1
1599      CodeType t = new CodeType();
1600      t.setValue(value);
1601      if (this.base == null)
1602        this.base = new ArrayList<CodeType>();
1603      this.base.add(t);
1604      return this;
1605    }
1606
1607    /**
1608     * @param value {@link #base} (The base resource type(s) that this search parameter can be used against.)
1609     */
1610    public boolean hasBase(String value) { 
1611      if (this.base == null)
1612        return false;
1613      for (CodeType v : this.base)
1614        if (v.equals(value)) // code
1615          return true;
1616      return false;
1617    }
1618
1619    /**
1620     * @return {@link #type} (The type of value a search parameter refers to, and how the content is interpreted.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
1621     */
1622    public Enumeration<SearchParamType> getTypeElement() { 
1623      if (this.type == null)
1624        if (Configuration.errorOnAutoCreate())
1625          throw new Error("Attempt to auto-create SearchParameter.type");
1626        else if (Configuration.doAutoCreate())
1627          this.type = new Enumeration<SearchParamType>(new SearchParamTypeEnumFactory()); // bb
1628      return this.type;
1629    }
1630
1631    public boolean hasTypeElement() { 
1632      return this.type != null && !this.type.isEmpty();
1633    }
1634
1635    public boolean hasType() { 
1636      return this.type != null && !this.type.isEmpty();
1637    }
1638
1639    /**
1640     * @param value {@link #type} (The type of value a search parameter refers to, and how the content is interpreted.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
1641     */
1642    public SearchParameter setTypeElement(Enumeration<SearchParamType> value) { 
1643      this.type = value;
1644      return this;
1645    }
1646
1647    /**
1648     * @return The type of value a search parameter refers to, and how the content is interpreted.
1649     */
1650    public SearchParamType getType() { 
1651      return this.type == null ? null : this.type.getValue();
1652    }
1653
1654    /**
1655     * @param value The type of value a search parameter refers to, and how the content is interpreted.
1656     */
1657    public SearchParameter setType(SearchParamType value) { 
1658        if (this.type == null)
1659          this.type = new Enumeration<SearchParamType>(new SearchParamTypeEnumFactory());
1660        this.type.setValue(value);
1661      return this;
1662    }
1663
1664    /**
1665     * @return {@link #derivedFrom} (Where this search parameter is originally defined. If a derivedFrom is provided, then the details in the search parameter must be consistent with the definition from which it is defined. I.e. the parameter should have the same meaning, and (usually) the functionality should be a proper subset of the underlying search parameter.). This is the underlying object with id, value and extensions. The accessor "getDerivedFrom" gives direct access to the value
1666     */
1667    public UriType getDerivedFromElement() { 
1668      if (this.derivedFrom == null)
1669        if (Configuration.errorOnAutoCreate())
1670          throw new Error("Attempt to auto-create SearchParameter.derivedFrom");
1671        else if (Configuration.doAutoCreate())
1672          this.derivedFrom = new UriType(); // bb
1673      return this.derivedFrom;
1674    }
1675
1676    public boolean hasDerivedFromElement() { 
1677      return this.derivedFrom != null && !this.derivedFrom.isEmpty();
1678    }
1679
1680    public boolean hasDerivedFrom() { 
1681      return this.derivedFrom != null && !this.derivedFrom.isEmpty();
1682    }
1683
1684    /**
1685     * @param value {@link #derivedFrom} (Where this search parameter is originally defined. If a derivedFrom is provided, then the details in the search parameter must be consistent with the definition from which it is defined. I.e. the parameter should have the same meaning, and (usually) the functionality should be a proper subset of the underlying search parameter.). This is the underlying object with id, value and extensions. The accessor "getDerivedFrom" gives direct access to the value
1686     */
1687    public SearchParameter setDerivedFromElement(UriType value) { 
1688      this.derivedFrom = value;
1689      return this;
1690    }
1691
1692    /**
1693     * @return Where this search parameter is originally defined. If a derivedFrom is provided, then the details in the search parameter must be consistent with the definition from which it is defined. I.e. the parameter should have the same meaning, and (usually) the functionality should be a proper subset of the underlying search parameter.
1694     */
1695    public String getDerivedFrom() { 
1696      return this.derivedFrom == null ? null : this.derivedFrom.getValue();
1697    }
1698
1699    /**
1700     * @param value Where this search parameter is originally defined. If a derivedFrom is provided, then the details in the search parameter must be consistent with the definition from which it is defined. I.e. the parameter should have the same meaning, and (usually) the functionality should be a proper subset of the underlying search parameter.
1701     */
1702    public SearchParameter setDerivedFrom(String value) { 
1703      if (Utilities.noString(value))
1704        this.derivedFrom = null;
1705      else {
1706        if (this.derivedFrom == null)
1707          this.derivedFrom = new UriType();
1708        this.derivedFrom.setValue(value);
1709      }
1710      return this;
1711    }
1712
1713    /**
1714     * @return {@link #description} (A free text natural language description of the search parameter from a consumer's perspective. and how it used.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
1715     */
1716    public MarkdownType getDescriptionElement() { 
1717      if (this.description == null)
1718        if (Configuration.errorOnAutoCreate())
1719          throw new Error("Attempt to auto-create SearchParameter.description");
1720        else if (Configuration.doAutoCreate())
1721          this.description = new MarkdownType(); // bb
1722      return this.description;
1723    }
1724
1725    public boolean hasDescriptionElement() { 
1726      return this.description != null && !this.description.isEmpty();
1727    }
1728
1729    public boolean hasDescription() { 
1730      return this.description != null && !this.description.isEmpty();
1731    }
1732
1733    /**
1734     * @param value {@link #description} (A free text natural language description of the search parameter from a consumer's perspective. and how it used.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
1735     */
1736    public SearchParameter setDescriptionElement(MarkdownType value) { 
1737      this.description = value;
1738      return this;
1739    }
1740
1741    /**
1742     * @return A free text natural language description of the search parameter from a consumer's perspective. and how it used.
1743     */
1744    public String getDescription() { 
1745      return this.description == null ? null : this.description.getValue();
1746    }
1747
1748    /**
1749     * @param value A free text natural language description of the search parameter from a consumer's perspective. and how it used.
1750     */
1751    public SearchParameter setDescription(String value) { 
1752        if (this.description == null)
1753          this.description = new MarkdownType();
1754        this.description.setValue(value);
1755      return this;
1756    }
1757
1758    /**
1759     * @return {@link #expression} (A FHIRPath expression that returns a set of elements for the search parameter.). This is the underlying object with id, value and extensions. The accessor "getExpression" gives direct access to the value
1760     */
1761    public StringType getExpressionElement() { 
1762      if (this.expression == null)
1763        if (Configuration.errorOnAutoCreate())
1764          throw new Error("Attempt to auto-create SearchParameter.expression");
1765        else if (Configuration.doAutoCreate())
1766          this.expression = new StringType(); // bb
1767      return this.expression;
1768    }
1769
1770    public boolean hasExpressionElement() { 
1771      return this.expression != null && !this.expression.isEmpty();
1772    }
1773
1774    public boolean hasExpression() { 
1775      return this.expression != null && !this.expression.isEmpty();
1776    }
1777
1778    /**
1779     * @param value {@link #expression} (A FHIRPath expression that returns a set of elements for the search parameter.). This is the underlying object with id, value and extensions. The accessor "getExpression" gives direct access to the value
1780     */
1781    public SearchParameter setExpressionElement(StringType value) { 
1782      this.expression = value;
1783      return this;
1784    }
1785
1786    /**
1787     * @return A FHIRPath expression that returns a set of elements for the search parameter.
1788     */
1789    public String getExpression() { 
1790      return this.expression == null ? null : this.expression.getValue();
1791    }
1792
1793    /**
1794     * @param value A FHIRPath expression that returns a set of elements for the search parameter.
1795     */
1796    public SearchParameter setExpression(String value) { 
1797      if (Utilities.noString(value))
1798        this.expression = null;
1799      else {
1800        if (this.expression == null)
1801          this.expression = new StringType();
1802        this.expression.setValue(value);
1803      }
1804      return this;
1805    }
1806
1807    /**
1808     * @return {@link #xpath} (An XPath expression that returns a set of elements for the search parameter.). This is the underlying object with id, value and extensions. The accessor "getXpath" gives direct access to the value
1809     */
1810    public StringType getXpathElement() { 
1811      if (this.xpath == null)
1812        if (Configuration.errorOnAutoCreate())
1813          throw new Error("Attempt to auto-create SearchParameter.xpath");
1814        else if (Configuration.doAutoCreate())
1815          this.xpath = new StringType(); // bb
1816      return this.xpath;
1817    }
1818
1819    public boolean hasXpathElement() { 
1820      return this.xpath != null && !this.xpath.isEmpty();
1821    }
1822
1823    public boolean hasXpath() { 
1824      return this.xpath != null && !this.xpath.isEmpty();
1825    }
1826
1827    /**
1828     * @param value {@link #xpath} (An XPath expression that returns a set of elements for the search parameter.). This is the underlying object with id, value and extensions. The accessor "getXpath" gives direct access to the value
1829     */
1830    public SearchParameter setXpathElement(StringType value) { 
1831      this.xpath = value;
1832      return this;
1833    }
1834
1835    /**
1836     * @return An XPath expression that returns a set of elements for the search parameter.
1837     */
1838    public String getXpath() { 
1839      return this.xpath == null ? null : this.xpath.getValue();
1840    }
1841
1842    /**
1843     * @param value An XPath expression that returns a set of elements for the search parameter.
1844     */
1845    public SearchParameter setXpath(String value) { 
1846      if (Utilities.noString(value))
1847        this.xpath = null;
1848      else {
1849        if (this.xpath == null)
1850          this.xpath = new StringType();
1851        this.xpath.setValue(value);
1852      }
1853      return this;
1854    }
1855
1856    /**
1857     * @return {@link #xpathUsage} (How the search parameter relates to the set of elements returned by evaluating the xpath query.). This is the underlying object with id, value and extensions. The accessor "getXpathUsage" gives direct access to the value
1858     */
1859    public Enumeration<XPathUsageType> getXpathUsageElement() { 
1860      if (this.xpathUsage == null)
1861        if (Configuration.errorOnAutoCreate())
1862          throw new Error("Attempt to auto-create SearchParameter.xpathUsage");
1863        else if (Configuration.doAutoCreate())
1864          this.xpathUsage = new Enumeration<XPathUsageType>(new XPathUsageTypeEnumFactory()); // bb
1865      return this.xpathUsage;
1866    }
1867
1868    public boolean hasXpathUsageElement() { 
1869      return this.xpathUsage != null && !this.xpathUsage.isEmpty();
1870    }
1871
1872    public boolean hasXpathUsage() { 
1873      return this.xpathUsage != null && !this.xpathUsage.isEmpty();
1874    }
1875
1876    /**
1877     * @param value {@link #xpathUsage} (How the search parameter relates to the set of elements returned by evaluating the xpath query.). This is the underlying object with id, value and extensions. The accessor "getXpathUsage" gives direct access to the value
1878     */
1879    public SearchParameter setXpathUsageElement(Enumeration<XPathUsageType> value) { 
1880      this.xpathUsage = value;
1881      return this;
1882    }
1883
1884    /**
1885     * @return How the search parameter relates to the set of elements returned by evaluating the xpath query.
1886     */
1887    public XPathUsageType getXpathUsage() { 
1888      return this.xpathUsage == null ? null : this.xpathUsage.getValue();
1889    }
1890
1891    /**
1892     * @param value How the search parameter relates to the set of elements returned by evaluating the xpath query.
1893     */
1894    public SearchParameter setXpathUsage(XPathUsageType value) { 
1895      if (value == null)
1896        this.xpathUsage = null;
1897      else {
1898        if (this.xpathUsage == null)
1899          this.xpathUsage = new Enumeration<XPathUsageType>(new XPathUsageTypeEnumFactory());
1900        this.xpathUsage.setValue(value);
1901      }
1902      return this;
1903    }
1904
1905    /**
1906     * @return {@link #target} (Types of resource (if a resource is referenced).)
1907     */
1908    public List<CodeType> getTarget() { 
1909      if (this.target == null)
1910        this.target = new ArrayList<CodeType>();
1911      return this.target;
1912    }
1913
1914    /**
1915     * @return Returns a reference to <code>this</code> for easy method chaining
1916     */
1917    public SearchParameter setTarget(List<CodeType> theTarget) { 
1918      this.target = theTarget;
1919      return this;
1920    }
1921
1922    public boolean hasTarget() { 
1923      if (this.target == null)
1924        return false;
1925      for (CodeType item : this.target)
1926        if (!item.isEmpty())
1927          return true;
1928      return false;
1929    }
1930
1931    /**
1932     * @return {@link #target} (Types of resource (if a resource is referenced).)
1933     */
1934    public CodeType addTargetElement() {//2 
1935      CodeType t = new CodeType();
1936      if (this.target == null)
1937        this.target = new ArrayList<CodeType>();
1938      this.target.add(t);
1939      return t;
1940    }
1941
1942    /**
1943     * @param value {@link #target} (Types of resource (if a resource is referenced).)
1944     */
1945    public SearchParameter addTarget(String value) { //1
1946      CodeType t = new CodeType();
1947      t.setValue(value);
1948      if (this.target == null)
1949        this.target = new ArrayList<CodeType>();
1950      this.target.add(t);
1951      return this;
1952    }
1953
1954    /**
1955     * @param value {@link #target} (Types of resource (if a resource is referenced).)
1956     */
1957    public boolean hasTarget(String value) { 
1958      if (this.target == null)
1959        return false;
1960      for (CodeType v : this.target)
1961        if (v.equals(value)) // code
1962          return true;
1963      return false;
1964    }
1965
1966    /**
1967     * @return {@link #comparator} (Comparators supported for the search parameter.)
1968     */
1969    public List<Enumeration<SearchComparator>> getComparator() { 
1970      if (this.comparator == null)
1971        this.comparator = new ArrayList<Enumeration<SearchComparator>>();
1972      return this.comparator;
1973    }
1974
1975    /**
1976     * @return Returns a reference to <code>this</code> for easy method chaining
1977     */
1978    public SearchParameter setComparator(List<Enumeration<SearchComparator>> theComparator) { 
1979      this.comparator = theComparator;
1980      return this;
1981    }
1982
1983    public boolean hasComparator() { 
1984      if (this.comparator == null)
1985        return false;
1986      for (Enumeration<SearchComparator> item : this.comparator)
1987        if (!item.isEmpty())
1988          return true;
1989      return false;
1990    }
1991
1992    /**
1993     * @return {@link #comparator} (Comparators supported for the search parameter.)
1994     */
1995    public Enumeration<SearchComparator> addComparatorElement() {//2 
1996      Enumeration<SearchComparator> t = new Enumeration<SearchComparator>(new SearchComparatorEnumFactory());
1997      if (this.comparator == null)
1998        this.comparator = new ArrayList<Enumeration<SearchComparator>>();
1999      this.comparator.add(t);
2000      return t;
2001    }
2002
2003    /**
2004     * @param value {@link #comparator} (Comparators supported for the search parameter.)
2005     */
2006    public SearchParameter addComparator(SearchComparator value) { //1
2007      Enumeration<SearchComparator> t = new Enumeration<SearchComparator>(new SearchComparatorEnumFactory());
2008      t.setValue(value);
2009      if (this.comparator == null)
2010        this.comparator = new ArrayList<Enumeration<SearchComparator>>();
2011      this.comparator.add(t);
2012      return this;
2013    }
2014
2015    /**
2016     * @param value {@link #comparator} (Comparators supported for the search parameter.)
2017     */
2018    public boolean hasComparator(SearchComparator value) { 
2019      if (this.comparator == null)
2020        return false;
2021      for (Enumeration<SearchComparator> v : this.comparator)
2022        if (v.getValue().equals(value)) // code
2023          return true;
2024      return false;
2025    }
2026
2027    /**
2028     * @return {@link #modifier} (A modifier supported for the search parameter.)
2029     */
2030    public List<Enumeration<SearchModifierCode>> getModifier() { 
2031      if (this.modifier == null)
2032        this.modifier = new ArrayList<Enumeration<SearchModifierCode>>();
2033      return this.modifier;
2034    }
2035
2036    /**
2037     * @return Returns a reference to <code>this</code> for easy method chaining
2038     */
2039    public SearchParameter setModifier(List<Enumeration<SearchModifierCode>> theModifier) { 
2040      this.modifier = theModifier;
2041      return this;
2042    }
2043
2044    public boolean hasModifier() { 
2045      if (this.modifier == null)
2046        return false;
2047      for (Enumeration<SearchModifierCode> item : this.modifier)
2048        if (!item.isEmpty())
2049          return true;
2050      return false;
2051    }
2052
2053    /**
2054     * @return {@link #modifier} (A modifier supported for the search parameter.)
2055     */
2056    public Enumeration<SearchModifierCode> addModifierElement() {//2 
2057      Enumeration<SearchModifierCode> t = new Enumeration<SearchModifierCode>(new SearchModifierCodeEnumFactory());
2058      if (this.modifier == null)
2059        this.modifier = new ArrayList<Enumeration<SearchModifierCode>>();
2060      this.modifier.add(t);
2061      return t;
2062    }
2063
2064    /**
2065     * @param value {@link #modifier} (A modifier supported for the search parameter.)
2066     */
2067    public SearchParameter addModifier(SearchModifierCode value) { //1
2068      Enumeration<SearchModifierCode> t = new Enumeration<SearchModifierCode>(new SearchModifierCodeEnumFactory());
2069      t.setValue(value);
2070      if (this.modifier == null)
2071        this.modifier = new ArrayList<Enumeration<SearchModifierCode>>();
2072      this.modifier.add(t);
2073      return this;
2074    }
2075
2076    /**
2077     * @param value {@link #modifier} (A modifier supported for the search parameter.)
2078     */
2079    public boolean hasModifier(SearchModifierCode value) { 
2080      if (this.modifier == null)
2081        return false;
2082      for (Enumeration<SearchModifierCode> v : this.modifier)
2083        if (v.getValue().equals(value)) // code
2084          return true;
2085      return false;
2086    }
2087
2088    /**
2089     * @return {@link #chain} (Contains the names of any search parameters which may be chained to the containing search parameter. Chained parameters may be added to search parameters of type reference, and specify that resources will only be returned if they contain a reference to a resource which matches the chained parameter value. Values for this field should be drawn from SearchParameter.code for a parameter on the target resource type.)
2090     */
2091    public List<StringType> getChain() { 
2092      if (this.chain == null)
2093        this.chain = new ArrayList<StringType>();
2094      return this.chain;
2095    }
2096
2097    /**
2098     * @return Returns a reference to <code>this</code> for easy method chaining
2099     */
2100    public SearchParameter setChain(List<StringType> theChain) { 
2101      this.chain = theChain;
2102      return this;
2103    }
2104
2105    public boolean hasChain() { 
2106      if (this.chain == null)
2107        return false;
2108      for (StringType item : this.chain)
2109        if (!item.isEmpty())
2110          return true;
2111      return false;
2112    }
2113
2114    /**
2115     * @return {@link #chain} (Contains the names of any search parameters which may be chained to the containing search parameter. Chained parameters may be added to search parameters of type reference, and specify that resources will only be returned if they contain a reference to a resource which matches the chained parameter value. Values for this field should be drawn from SearchParameter.code for a parameter on the target resource type.)
2116     */
2117    public StringType addChainElement() {//2 
2118      StringType t = new StringType();
2119      if (this.chain == null)
2120        this.chain = new ArrayList<StringType>();
2121      this.chain.add(t);
2122      return t;
2123    }
2124
2125    /**
2126     * @param value {@link #chain} (Contains the names of any search parameters which may be chained to the containing search parameter. Chained parameters may be added to search parameters of type reference, and specify that resources will only be returned if they contain a reference to a resource which matches the chained parameter value. Values for this field should be drawn from SearchParameter.code for a parameter on the target resource type.)
2127     */
2128    public SearchParameter addChain(String value) { //1
2129      StringType t = new StringType();
2130      t.setValue(value);
2131      if (this.chain == null)
2132        this.chain = new ArrayList<StringType>();
2133      this.chain.add(t);
2134      return this;
2135    }
2136
2137    /**
2138     * @param value {@link #chain} (Contains the names of any search parameters which may be chained to the containing search parameter. Chained parameters may be added to search parameters of type reference, and specify that resources will only be returned if they contain a reference to a resource which matches the chained parameter value. Values for this field should be drawn from SearchParameter.code for a parameter on the target resource type.)
2139     */
2140    public boolean hasChain(String value) { 
2141      if (this.chain == null)
2142        return false;
2143      for (StringType v : this.chain)
2144        if (v.equals(value)) // string
2145          return true;
2146      return false;
2147    }
2148
2149    /**
2150     * @return {@link #component} (Used to define the parts of a composite search parameter.)
2151     */
2152    public List<SearchParameterComponentComponent> getComponent() { 
2153      if (this.component == null)
2154        this.component = new ArrayList<SearchParameterComponentComponent>();
2155      return this.component;
2156    }
2157
2158    /**
2159     * @return Returns a reference to <code>this</code> for easy method chaining
2160     */
2161    public SearchParameter setComponent(List<SearchParameterComponentComponent> theComponent) { 
2162      this.component = theComponent;
2163      return this;
2164    }
2165
2166    public boolean hasComponent() { 
2167      if (this.component == null)
2168        return false;
2169      for (SearchParameterComponentComponent item : this.component)
2170        if (!item.isEmpty())
2171          return true;
2172      return false;
2173    }
2174
2175    public SearchParameterComponentComponent addComponent() { //3
2176      SearchParameterComponentComponent t = new SearchParameterComponentComponent();
2177      if (this.component == null)
2178        this.component = new ArrayList<SearchParameterComponentComponent>();
2179      this.component.add(t);
2180      return t;
2181    }
2182
2183    public SearchParameter addComponent(SearchParameterComponentComponent t) { //3
2184      if (t == null)
2185        return this;
2186      if (this.component == null)
2187        this.component = new ArrayList<SearchParameterComponentComponent>();
2188      this.component.add(t);
2189      return this;
2190    }
2191
2192    /**
2193     * @return The first repetition of repeating field {@link #component}, creating it if it does not already exist
2194     */
2195    public SearchParameterComponentComponent getComponentFirstRep() { 
2196      if (getComponent().isEmpty()) {
2197        addComponent();
2198      }
2199      return getComponent().get(0);
2200    }
2201
2202      protected void listChildren(List<Property> childrenList) {
2203        super.listChildren(childrenList);
2204        childrenList.add(new Property("url", "uri", "An absolute URI that is used to identify this search parameter 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 search parameter is (or will be) published. The URL SHOULD include the major version of the search parameter. For more information see [Technical and Business Versions](resource.html#versions).", 0, java.lang.Integer.MAX_VALUE, url));
2205        childrenList.add(new Property("version", "string", "The identifier that is used to identify this version of the search parameter when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the search parameter 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, java.lang.Integer.MAX_VALUE, version));
2206        childrenList.add(new Property("name", "string", "A natural language name identifying the search parameter. This name should be usable as an identifier for the module by machine processing applications such as code generation.", 0, java.lang.Integer.MAX_VALUE, name));
2207        childrenList.add(new Property("status", "code", "The status of this search parameter. Enables tracking the life-cycle of the content.", 0, java.lang.Integer.MAX_VALUE, status));
2208        childrenList.add(new Property("experimental", "boolean", "A boolean value to indicate that this search parameter is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.", 0, java.lang.Integer.MAX_VALUE, experimental));
2209        childrenList.add(new Property("date", "dateTime", "The date  (and optionally time) when the search parameter 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 search parameter changes.", 0, java.lang.Integer.MAX_VALUE, date));
2210        childrenList.add(new Property("publisher", "string", "The name of the individual or organization that published the search parameter.", 0, java.lang.Integer.MAX_VALUE, publisher));
2211        childrenList.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));
2212        childrenList.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 search parameter instances.", 0, java.lang.Integer.MAX_VALUE, useContext));
2213        childrenList.add(new Property("jurisdiction", "CodeableConcept", "A legal or geographic region in which the search parameter is intended to be used.", 0, java.lang.Integer.MAX_VALUE, jurisdiction));
2214        childrenList.add(new Property("purpose", "markdown", "Explaination of why this search parameter is needed and why it has been designed as it has.", 0, java.lang.Integer.MAX_VALUE, purpose));
2215        childrenList.add(new Property("code", "code", "The code used in the URL or the parameter name in a parameters resource for this search parameter.", 0, java.lang.Integer.MAX_VALUE, code));
2216        childrenList.add(new Property("base", "code", "The base resource type(s) that this search parameter can be used against.", 0, java.lang.Integer.MAX_VALUE, base));
2217        childrenList.add(new Property("type", "code", "The type of value a search parameter refers to, and how the content is interpreted.", 0, java.lang.Integer.MAX_VALUE, type));
2218        childrenList.add(new Property("derivedFrom", "uri", "Where this search parameter is originally defined. If a derivedFrom is provided, then the details in the search parameter must be consistent with the definition from which it is defined. I.e. the parameter should have the same meaning, and (usually) the functionality should be a proper subset of the underlying search parameter.", 0, java.lang.Integer.MAX_VALUE, derivedFrom));
2219        childrenList.add(new Property("description", "markdown", "A free text natural language description of the search parameter from a consumer's perspective. and how it used.", 0, java.lang.Integer.MAX_VALUE, description));
2220        childrenList.add(new Property("expression", "string", "A FHIRPath expression that returns a set of elements for the search parameter.", 0, java.lang.Integer.MAX_VALUE, expression));
2221        childrenList.add(new Property("xpath", "string", "An XPath expression that returns a set of elements for the search parameter.", 0, java.lang.Integer.MAX_VALUE, xpath));
2222        childrenList.add(new Property("xpathUsage", "code", "How the search parameter relates to the set of elements returned by evaluating the xpath query.", 0, java.lang.Integer.MAX_VALUE, xpathUsage));
2223        childrenList.add(new Property("target", "code", "Types of resource (if a resource is referenced).", 0, java.lang.Integer.MAX_VALUE, target));
2224        childrenList.add(new Property("comparator", "code", "Comparators supported for the search parameter.", 0, java.lang.Integer.MAX_VALUE, comparator));
2225        childrenList.add(new Property("modifier", "code", "A modifier supported for the search parameter.", 0, java.lang.Integer.MAX_VALUE, modifier));
2226        childrenList.add(new Property("chain", "string", "Contains the names of any search parameters which may be chained to the containing search parameter. Chained parameters may be added to search parameters of type reference, and specify that resources will only be returned if they contain a reference to a resource which matches the chained parameter value. Values for this field should be drawn from SearchParameter.code for a parameter on the target resource type.", 0, java.lang.Integer.MAX_VALUE, chain));
2227        childrenList.add(new Property("component", "", "Used to define the parts of a composite search parameter.", 0, java.lang.Integer.MAX_VALUE, component));
2228      }
2229
2230      @Override
2231      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2232        switch (hash) {
2233        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UriType
2234        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
2235        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
2236        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<PublicationStatus>
2237        case -404562712: /*experimental*/ return this.experimental == null ? new Base[0] : new Base[] {this.experimental}; // BooleanType
2238        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
2239        case 1447404028: /*publisher*/ return this.publisher == null ? new Base[0] : new Base[] {this.publisher}; // StringType
2240        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ContactDetail
2241        case -669707736: /*useContext*/ return this.useContext == null ? new Base[0] : this.useContext.toArray(new Base[this.useContext.size()]); // UsageContext
2242        case -507075711: /*jurisdiction*/ return this.jurisdiction == null ? new Base[0] : this.jurisdiction.toArray(new Base[this.jurisdiction.size()]); // CodeableConcept
2243        case -220463842: /*purpose*/ return this.purpose == null ? new Base[0] : new Base[] {this.purpose}; // MarkdownType
2244        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeType
2245        case 3016401: /*base*/ return this.base == null ? new Base[0] : this.base.toArray(new Base[this.base.size()]); // CodeType
2246        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // Enumeration<SearchParamType>
2247        case 1077922663: /*derivedFrom*/ return this.derivedFrom == null ? new Base[0] : new Base[] {this.derivedFrom}; // UriType
2248        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
2249        case -1795452264: /*expression*/ return this.expression == null ? new Base[0] : new Base[] {this.expression}; // StringType
2250        case 114256029: /*xpath*/ return this.xpath == null ? new Base[0] : new Base[] {this.xpath}; // StringType
2251        case 1801322244: /*xpathUsage*/ return this.xpathUsage == null ? new Base[0] : new Base[] {this.xpathUsage}; // Enumeration<XPathUsageType>
2252        case -880905839: /*target*/ return this.target == null ? new Base[0] : this.target.toArray(new Base[this.target.size()]); // CodeType
2253        case -844673834: /*comparator*/ return this.comparator == null ? new Base[0] : this.comparator.toArray(new Base[this.comparator.size()]); // Enumeration<SearchComparator>
2254        case -615513385: /*modifier*/ return this.modifier == null ? new Base[0] : this.modifier.toArray(new Base[this.modifier.size()]); // Enumeration<SearchModifierCode>
2255        case 94623425: /*chain*/ return this.chain == null ? new Base[0] : this.chain.toArray(new Base[this.chain.size()]); // StringType
2256        case -1399907075: /*component*/ return this.component == null ? new Base[0] : this.component.toArray(new Base[this.component.size()]); // SearchParameterComponentComponent
2257        default: return super.getProperty(hash, name, checkValid);
2258        }
2259
2260      }
2261
2262      @Override
2263      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2264        switch (hash) {
2265        case 116079: // url
2266          this.url = castToUri(value); // UriType
2267          return value;
2268        case 351608024: // version
2269          this.version = castToString(value); // StringType
2270          return value;
2271        case 3373707: // name
2272          this.name = castToString(value); // StringType
2273          return value;
2274        case -892481550: // status
2275          value = new PublicationStatusEnumFactory().fromType(castToCode(value));
2276          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
2277          return value;
2278        case -404562712: // experimental
2279          this.experimental = castToBoolean(value); // BooleanType
2280          return value;
2281        case 3076014: // date
2282          this.date = castToDateTime(value); // DateTimeType
2283          return value;
2284        case 1447404028: // publisher
2285          this.publisher = castToString(value); // StringType
2286          return value;
2287        case 951526432: // contact
2288          this.getContact().add(castToContactDetail(value)); // ContactDetail
2289          return value;
2290        case -669707736: // useContext
2291          this.getUseContext().add(castToUsageContext(value)); // UsageContext
2292          return value;
2293        case -507075711: // jurisdiction
2294          this.getJurisdiction().add(castToCodeableConcept(value)); // CodeableConcept
2295          return value;
2296        case -220463842: // purpose
2297          this.purpose = castToMarkdown(value); // MarkdownType
2298          return value;
2299        case 3059181: // code
2300          this.code = castToCode(value); // CodeType
2301          return value;
2302        case 3016401: // base
2303          this.getBase().add(castToCode(value)); // CodeType
2304          return value;
2305        case 3575610: // type
2306          value = new SearchParamTypeEnumFactory().fromType(castToCode(value));
2307          this.type = (Enumeration) value; // Enumeration<SearchParamType>
2308          return value;
2309        case 1077922663: // derivedFrom
2310          this.derivedFrom = castToUri(value); // UriType
2311          return value;
2312        case -1724546052: // description
2313          this.description = castToMarkdown(value); // MarkdownType
2314          return value;
2315        case -1795452264: // expression
2316          this.expression = castToString(value); // StringType
2317          return value;
2318        case 114256029: // xpath
2319          this.xpath = castToString(value); // StringType
2320          return value;
2321        case 1801322244: // xpathUsage
2322          value = new XPathUsageTypeEnumFactory().fromType(castToCode(value));
2323          this.xpathUsage = (Enumeration) value; // Enumeration<XPathUsageType>
2324          return value;
2325        case -880905839: // target
2326          this.getTarget().add(castToCode(value)); // CodeType
2327          return value;
2328        case -844673834: // comparator
2329          value = new SearchComparatorEnumFactory().fromType(castToCode(value));
2330          this.getComparator().add((Enumeration) value); // Enumeration<SearchComparator>
2331          return value;
2332        case -615513385: // modifier
2333          value = new SearchModifierCodeEnumFactory().fromType(castToCode(value));
2334          this.getModifier().add((Enumeration) value); // Enumeration<SearchModifierCode>
2335          return value;
2336        case 94623425: // chain
2337          this.getChain().add(castToString(value)); // StringType
2338          return value;
2339        case -1399907075: // component
2340          this.getComponent().add((SearchParameterComponentComponent) value); // SearchParameterComponentComponent
2341          return value;
2342        default: return super.setProperty(hash, name, value);
2343        }
2344
2345      }
2346
2347      @Override
2348      public Base setProperty(String name, Base value) throws FHIRException {
2349        if (name.equals("url")) {
2350          this.url = castToUri(value); // UriType
2351        } else if (name.equals("version")) {
2352          this.version = castToString(value); // StringType
2353        } else if (name.equals("name")) {
2354          this.name = castToString(value); // StringType
2355        } else if (name.equals("status")) {
2356          value = new PublicationStatusEnumFactory().fromType(castToCode(value));
2357          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
2358        } else if (name.equals("experimental")) {
2359          this.experimental = castToBoolean(value); // BooleanType
2360        } else if (name.equals("date")) {
2361          this.date = castToDateTime(value); // DateTimeType
2362        } else if (name.equals("publisher")) {
2363          this.publisher = castToString(value); // StringType
2364        } else if (name.equals("contact")) {
2365          this.getContact().add(castToContactDetail(value));
2366        } else if (name.equals("useContext")) {
2367          this.getUseContext().add(castToUsageContext(value));
2368        } else if (name.equals("jurisdiction")) {
2369          this.getJurisdiction().add(castToCodeableConcept(value));
2370        } else if (name.equals("purpose")) {
2371          this.purpose = castToMarkdown(value); // MarkdownType
2372        } else if (name.equals("code")) {
2373          this.code = castToCode(value); // CodeType
2374        } else if (name.equals("base")) {
2375          this.getBase().add(castToCode(value));
2376        } else if (name.equals("type")) {
2377          value = new SearchParamTypeEnumFactory().fromType(castToCode(value));
2378          this.type = (Enumeration) value; // Enumeration<SearchParamType>
2379        } else if (name.equals("derivedFrom")) {
2380          this.derivedFrom = castToUri(value); // UriType
2381        } else if (name.equals("description")) {
2382          this.description = castToMarkdown(value); // MarkdownType
2383        } else if (name.equals("expression")) {
2384          this.expression = castToString(value); // StringType
2385        } else if (name.equals("xpath")) {
2386          this.xpath = castToString(value); // StringType
2387        } else if (name.equals("xpathUsage")) {
2388          value = new XPathUsageTypeEnumFactory().fromType(castToCode(value));
2389          this.xpathUsage = (Enumeration) value; // Enumeration<XPathUsageType>
2390        } else if (name.equals("target")) {
2391          this.getTarget().add(castToCode(value));
2392        } else if (name.equals("comparator")) {
2393          value = new SearchComparatorEnumFactory().fromType(castToCode(value));
2394          this.getComparator().add((Enumeration) value);
2395        } else if (name.equals("modifier")) {
2396          value = new SearchModifierCodeEnumFactory().fromType(castToCode(value));
2397          this.getModifier().add((Enumeration) value);
2398        } else if (name.equals("chain")) {
2399          this.getChain().add(castToString(value));
2400        } else if (name.equals("component")) {
2401          this.getComponent().add((SearchParameterComponentComponent) value);
2402        } else
2403          return super.setProperty(name, value);
2404        return value;
2405      }
2406
2407      @Override
2408      public Base makeProperty(int hash, String name) throws FHIRException {
2409        switch (hash) {
2410        case 116079:  return getUrlElement();
2411        case 351608024:  return getVersionElement();
2412        case 3373707:  return getNameElement();
2413        case -892481550:  return getStatusElement();
2414        case -404562712:  return getExperimentalElement();
2415        case 3076014:  return getDateElement();
2416        case 1447404028:  return getPublisherElement();
2417        case 951526432:  return addContact(); 
2418        case -669707736:  return addUseContext(); 
2419        case -507075711:  return addJurisdiction(); 
2420        case -220463842:  return getPurposeElement();
2421        case 3059181:  return getCodeElement();
2422        case 3016401:  return addBaseElement();
2423        case 3575610:  return getTypeElement();
2424        case 1077922663:  return getDerivedFromElement();
2425        case -1724546052:  return getDescriptionElement();
2426        case -1795452264:  return getExpressionElement();
2427        case 114256029:  return getXpathElement();
2428        case 1801322244:  return getXpathUsageElement();
2429        case -880905839:  return addTargetElement();
2430        case -844673834:  return addComparatorElement();
2431        case -615513385:  return addModifierElement();
2432        case 94623425:  return addChainElement();
2433        case -1399907075:  return addComponent(); 
2434        default: return super.makeProperty(hash, name);
2435        }
2436
2437      }
2438
2439      @Override
2440      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2441        switch (hash) {
2442        case 116079: /*url*/ return new String[] {"uri"};
2443        case 351608024: /*version*/ return new String[] {"string"};
2444        case 3373707: /*name*/ return new String[] {"string"};
2445        case -892481550: /*status*/ return new String[] {"code"};
2446        case -404562712: /*experimental*/ return new String[] {"boolean"};
2447        case 3076014: /*date*/ return new String[] {"dateTime"};
2448        case 1447404028: /*publisher*/ return new String[] {"string"};
2449        case 951526432: /*contact*/ return new String[] {"ContactDetail"};
2450        case -669707736: /*useContext*/ return new String[] {"UsageContext"};
2451        case -507075711: /*jurisdiction*/ return new String[] {"CodeableConcept"};
2452        case -220463842: /*purpose*/ return new String[] {"markdown"};
2453        case 3059181: /*code*/ return new String[] {"code"};
2454        case 3016401: /*base*/ return new String[] {"code"};
2455        case 3575610: /*type*/ return new String[] {"code"};
2456        case 1077922663: /*derivedFrom*/ return new String[] {"uri"};
2457        case -1724546052: /*description*/ return new String[] {"markdown"};
2458        case -1795452264: /*expression*/ return new String[] {"string"};
2459        case 114256029: /*xpath*/ return new String[] {"string"};
2460        case 1801322244: /*xpathUsage*/ return new String[] {"code"};
2461        case -880905839: /*target*/ return new String[] {"code"};
2462        case -844673834: /*comparator*/ return new String[] {"code"};
2463        case -615513385: /*modifier*/ return new String[] {"code"};
2464        case 94623425: /*chain*/ return new String[] {"string"};
2465        case -1399907075: /*component*/ return new String[] {};
2466        default: return super.getTypesForProperty(hash, name);
2467        }
2468
2469      }
2470
2471      @Override
2472      public Base addChild(String name) throws FHIRException {
2473        if (name.equals("url")) {
2474          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.url");
2475        }
2476        else if (name.equals("version")) {
2477          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.version");
2478        }
2479        else if (name.equals("name")) {
2480          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.name");
2481        }
2482        else if (name.equals("status")) {
2483          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.status");
2484        }
2485        else if (name.equals("experimental")) {
2486          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.experimental");
2487        }
2488        else if (name.equals("date")) {
2489          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.date");
2490        }
2491        else if (name.equals("publisher")) {
2492          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.publisher");
2493        }
2494        else if (name.equals("contact")) {
2495          return addContact();
2496        }
2497        else if (name.equals("useContext")) {
2498          return addUseContext();
2499        }
2500        else if (name.equals("jurisdiction")) {
2501          return addJurisdiction();
2502        }
2503        else if (name.equals("purpose")) {
2504          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.purpose");
2505        }
2506        else if (name.equals("code")) {
2507          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.code");
2508        }
2509        else if (name.equals("base")) {
2510          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.base");
2511        }
2512        else if (name.equals("type")) {
2513          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.type");
2514        }
2515        else if (name.equals("derivedFrom")) {
2516          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.derivedFrom");
2517        }
2518        else if (name.equals("description")) {
2519          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.description");
2520        }
2521        else if (name.equals("expression")) {
2522          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.expression");
2523        }
2524        else if (name.equals("xpath")) {
2525          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.xpath");
2526        }
2527        else if (name.equals("xpathUsage")) {
2528          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.xpathUsage");
2529        }
2530        else if (name.equals("target")) {
2531          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.target");
2532        }
2533        else if (name.equals("comparator")) {
2534          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.comparator");
2535        }
2536        else if (name.equals("modifier")) {
2537          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.modifier");
2538        }
2539        else if (name.equals("chain")) {
2540          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.chain");
2541        }
2542        else if (name.equals("component")) {
2543          return addComponent();
2544        }
2545        else
2546          return super.addChild(name);
2547      }
2548
2549  public String fhirType() {
2550    return "SearchParameter";
2551
2552  }
2553
2554      public SearchParameter copy() {
2555        SearchParameter dst = new SearchParameter();
2556        copyValues(dst);
2557        dst.url = url == null ? null : url.copy();
2558        dst.version = version == null ? null : version.copy();
2559        dst.name = name == null ? null : name.copy();
2560        dst.status = status == null ? null : status.copy();
2561        dst.experimental = experimental == null ? null : experimental.copy();
2562        dst.date = date == null ? null : date.copy();
2563        dst.publisher = publisher == null ? null : publisher.copy();
2564        if (contact != null) {
2565          dst.contact = new ArrayList<ContactDetail>();
2566          for (ContactDetail i : contact)
2567            dst.contact.add(i.copy());
2568        };
2569        if (useContext != null) {
2570          dst.useContext = new ArrayList<UsageContext>();
2571          for (UsageContext i : useContext)
2572            dst.useContext.add(i.copy());
2573        };
2574        if (jurisdiction != null) {
2575          dst.jurisdiction = new ArrayList<CodeableConcept>();
2576          for (CodeableConcept i : jurisdiction)
2577            dst.jurisdiction.add(i.copy());
2578        };
2579        dst.purpose = purpose == null ? null : purpose.copy();
2580        dst.code = code == null ? null : code.copy();
2581        if (base != null) {
2582          dst.base = new ArrayList<CodeType>();
2583          for (CodeType i : base)
2584            dst.base.add(i.copy());
2585        };
2586        dst.type = type == null ? null : type.copy();
2587        dst.derivedFrom = derivedFrom == null ? null : derivedFrom.copy();
2588        dst.description = description == null ? null : description.copy();
2589        dst.expression = expression == null ? null : expression.copy();
2590        dst.xpath = xpath == null ? null : xpath.copy();
2591        dst.xpathUsage = xpathUsage == null ? null : xpathUsage.copy();
2592        if (target != null) {
2593          dst.target = new ArrayList<CodeType>();
2594          for (CodeType i : target)
2595            dst.target.add(i.copy());
2596        };
2597        if (comparator != null) {
2598          dst.comparator = new ArrayList<Enumeration<SearchComparator>>();
2599          for (Enumeration<SearchComparator> i : comparator)
2600            dst.comparator.add(i.copy());
2601        };
2602        if (modifier != null) {
2603          dst.modifier = new ArrayList<Enumeration<SearchModifierCode>>();
2604          for (Enumeration<SearchModifierCode> i : modifier)
2605            dst.modifier.add(i.copy());
2606        };
2607        if (chain != null) {
2608          dst.chain = new ArrayList<StringType>();
2609          for (StringType i : chain)
2610            dst.chain.add(i.copy());
2611        };
2612        if (component != null) {
2613          dst.component = new ArrayList<SearchParameterComponentComponent>();
2614          for (SearchParameterComponentComponent i : component)
2615            dst.component.add(i.copy());
2616        };
2617        return dst;
2618      }
2619
2620      protected SearchParameter typedCopy() {
2621        return copy();
2622      }
2623
2624      @Override
2625      public boolean equalsDeep(Base other) {
2626        if (!super.equalsDeep(other))
2627          return false;
2628        if (!(other instanceof SearchParameter))
2629          return false;
2630        SearchParameter o = (SearchParameter) other;
2631        return compareDeep(purpose, o.purpose, true) && compareDeep(code, o.code, true) && compareDeep(base, o.base, true)
2632           && compareDeep(type, o.type, true) && compareDeep(derivedFrom, o.derivedFrom, true) && compareDeep(expression, o.expression, true)
2633           && compareDeep(xpath, o.xpath, true) && compareDeep(xpathUsage, o.xpathUsage, true) && compareDeep(target, o.target, true)
2634           && compareDeep(comparator, o.comparator, true) && compareDeep(modifier, o.modifier, true) && compareDeep(chain, o.chain, true)
2635           && compareDeep(component, o.component, true);
2636      }
2637
2638      @Override
2639      public boolean equalsShallow(Base other) {
2640        if (!super.equalsShallow(other))
2641          return false;
2642        if (!(other instanceof SearchParameter))
2643          return false;
2644        SearchParameter o = (SearchParameter) other;
2645        return compareValues(purpose, o.purpose, true) && compareValues(code, o.code, true) && compareValues(base, o.base, true)
2646           && compareValues(type, o.type, true) && compareValues(derivedFrom, o.derivedFrom, true) && compareValues(expression, o.expression, true)
2647           && compareValues(xpath, o.xpath, true) && compareValues(xpathUsage, o.xpathUsage, true) && compareValues(target, o.target, true)
2648           && compareValues(comparator, o.comparator, true) && compareValues(modifier, o.modifier, true) && compareValues(chain, o.chain, true)
2649          ;
2650      }
2651
2652      public boolean isEmpty() {
2653        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(purpose, code, base, type
2654          , derivedFrom, expression, xpath, xpathUsage, target, comparator, modifier, chain
2655          , component);
2656      }
2657
2658  @Override
2659  public ResourceType getResourceType() {
2660    return ResourceType.SearchParameter;
2661   }
2662
2663 /**
2664   * Search parameter: <b>date</b>
2665   * <p>
2666   * Description: <b>The search parameter publication date</b><br>
2667   * Type: <b>date</b><br>
2668   * Path: <b>SearchParameter.date</b><br>
2669   * </p>
2670   */
2671  @SearchParamDefinition(name="date", path="SearchParameter.date", description="The search parameter publication date", type="date" )
2672  public static final String SP_DATE = "date";
2673 /**
2674   * <b>Fluent Client</b> search parameter constant for <b>date</b>
2675   * <p>
2676   * Description: <b>The search parameter publication date</b><br>
2677   * Type: <b>date</b><br>
2678   * Path: <b>SearchParameter.date</b><br>
2679   * </p>
2680   */
2681  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
2682
2683 /**
2684   * Search parameter: <b>code</b>
2685   * <p>
2686   * Description: <b>Code used in URL</b><br>
2687   * Type: <b>token</b><br>
2688   * Path: <b>SearchParameter.code</b><br>
2689   * </p>
2690   */
2691  @SearchParamDefinition(name="code", path="SearchParameter.code", description="Code used in URL", type="token" )
2692  public static final String SP_CODE = "code";
2693 /**
2694   * <b>Fluent Client</b> search parameter constant for <b>code</b>
2695   * <p>
2696   * Description: <b>Code used in URL</b><br>
2697   * Type: <b>token</b><br>
2698   * Path: <b>SearchParameter.code</b><br>
2699   * </p>
2700   */
2701  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CODE);
2702
2703 /**
2704   * Search parameter: <b>jurisdiction</b>
2705   * <p>
2706   * Description: <b>Intended jurisdiction for the search parameter</b><br>
2707   * Type: <b>token</b><br>
2708   * Path: <b>SearchParameter.jurisdiction</b><br>
2709   * </p>
2710   */
2711  @SearchParamDefinition(name="jurisdiction", path="SearchParameter.jurisdiction", description="Intended jurisdiction for the search parameter", type="token" )
2712  public static final String SP_JURISDICTION = "jurisdiction";
2713 /**
2714   * <b>Fluent Client</b> search parameter constant for <b>jurisdiction</b>
2715   * <p>
2716   * Description: <b>Intended jurisdiction for the search parameter</b><br>
2717   * Type: <b>token</b><br>
2718   * Path: <b>SearchParameter.jurisdiction</b><br>
2719   * </p>
2720   */
2721  public static final ca.uhn.fhir.rest.gclient.TokenClientParam JURISDICTION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_JURISDICTION);
2722
2723 /**
2724   * Search parameter: <b>description</b>
2725   * <p>
2726   * Description: <b>The description of the search parameter</b><br>
2727   * Type: <b>string</b><br>
2728   * Path: <b>SearchParameter.description</b><br>
2729   * </p>
2730   */
2731  @SearchParamDefinition(name="description", path="SearchParameter.description", description="The description of the search parameter", type="string" )
2732  public static final String SP_DESCRIPTION = "description";
2733 /**
2734   * <b>Fluent Client</b> search parameter constant for <b>description</b>
2735   * <p>
2736   * Description: <b>The description of the search parameter</b><br>
2737   * Type: <b>string</b><br>
2738   * Path: <b>SearchParameter.description</b><br>
2739   * </p>
2740   */
2741  public static final ca.uhn.fhir.rest.gclient.StringClientParam DESCRIPTION = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_DESCRIPTION);
2742
2743 /**
2744   * Search parameter: <b>derived-from</b>
2745   * <p>
2746   * Description: <b>Original Definition for the search parameter</b><br>
2747   * Type: <b>uri</b><br>
2748   * Path: <b>SearchParameter.derivedFrom</b><br>
2749   * </p>
2750   */
2751  @SearchParamDefinition(name="derived-from", path="SearchParameter.derivedFrom", description="Original Definition for the search parameter", type="uri" )
2752  public static final String SP_DERIVED_FROM = "derived-from";
2753 /**
2754   * <b>Fluent Client</b> search parameter constant for <b>derived-from</b>
2755   * <p>
2756   * Description: <b>Original Definition for the search parameter</b><br>
2757   * Type: <b>uri</b><br>
2758   * Path: <b>SearchParameter.derivedFrom</b><br>
2759   * </p>
2760   */
2761  public static final ca.uhn.fhir.rest.gclient.UriClientParam DERIVED_FROM = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_DERIVED_FROM);
2762
2763 /**
2764   * Search parameter: <b>type</b>
2765   * <p>
2766   * Description: <b>number | date | string | token | reference | composite | quantity | uri</b><br>
2767   * Type: <b>token</b><br>
2768   * Path: <b>SearchParameter.type</b><br>
2769   * </p>
2770   */
2771  @SearchParamDefinition(name="type", path="SearchParameter.type", description="number | date | string | token | reference | composite | quantity | uri", type="token" )
2772  public static final String SP_TYPE = "type";
2773 /**
2774   * <b>Fluent Client</b> search parameter constant for <b>type</b>
2775   * <p>
2776   * Description: <b>number | date | string | token | reference | composite | quantity | uri</b><br>
2777   * Type: <b>token</b><br>
2778   * Path: <b>SearchParameter.type</b><br>
2779   * </p>
2780   */
2781  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_TYPE);
2782
2783 /**
2784   * Search parameter: <b>version</b>
2785   * <p>
2786   * Description: <b>The business version of the search parameter</b><br>
2787   * Type: <b>token</b><br>
2788   * Path: <b>SearchParameter.version</b><br>
2789   * </p>
2790   */
2791  @SearchParamDefinition(name="version", path="SearchParameter.version", description="The business version of the search parameter", type="token" )
2792  public static final String SP_VERSION = "version";
2793 /**
2794   * <b>Fluent Client</b> search parameter constant for <b>version</b>
2795   * <p>
2796   * Description: <b>The business version of the search parameter</b><br>
2797   * Type: <b>token</b><br>
2798   * Path: <b>SearchParameter.version</b><br>
2799   * </p>
2800   */
2801  public static final ca.uhn.fhir.rest.gclient.TokenClientParam VERSION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_VERSION);
2802
2803 /**
2804   * Search parameter: <b>url</b>
2805   * <p>
2806   * Description: <b>The uri that identifies the search parameter</b><br>
2807   * Type: <b>uri</b><br>
2808   * Path: <b>SearchParameter.url</b><br>
2809   * </p>
2810   */
2811  @SearchParamDefinition(name="url", path="SearchParameter.url", description="The uri that identifies the search parameter", type="uri" )
2812  public static final String SP_URL = "url";
2813 /**
2814   * <b>Fluent Client</b> search parameter constant for <b>url</b>
2815   * <p>
2816   * Description: <b>The uri that identifies the search parameter</b><br>
2817   * Type: <b>uri</b><br>
2818   * Path: <b>SearchParameter.url</b><br>
2819   * </p>
2820   */
2821  public static final ca.uhn.fhir.rest.gclient.UriClientParam URL = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_URL);
2822
2823 /**
2824   * Search parameter: <b>target</b>
2825   * <p>
2826   * Description: <b>Types of resource (if a resource reference)</b><br>
2827   * Type: <b>token</b><br>
2828   * Path: <b>SearchParameter.target</b><br>
2829   * </p>
2830   */
2831  @SearchParamDefinition(name="target", path="SearchParameter.target", description="Types of resource (if a resource reference)", type="token" )
2832  public static final String SP_TARGET = "target";
2833 /**
2834   * <b>Fluent Client</b> search parameter constant for <b>target</b>
2835   * <p>
2836   * Description: <b>Types of resource (if a resource reference)</b><br>
2837   * Type: <b>token</b><br>
2838   * Path: <b>SearchParameter.target</b><br>
2839   * </p>
2840   */
2841  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TARGET = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_TARGET);
2842
2843 /**
2844   * Search parameter: <b>component</b>
2845   * <p>
2846   * Description: <b>Defines how the part works</b><br>
2847   * Type: <b>reference</b><br>
2848   * Path: <b>SearchParameter.component.definition</b><br>
2849   * </p>
2850   */
2851  @SearchParamDefinition(name="component", path="SearchParameter.component.definition", description="Defines how the part works", type="reference", target={SearchParameter.class } )
2852  public static final String SP_COMPONENT = "component";
2853 /**
2854   * <b>Fluent Client</b> search parameter constant for <b>component</b>
2855   * <p>
2856   * Description: <b>Defines how the part works</b><br>
2857   * Type: <b>reference</b><br>
2858   * Path: <b>SearchParameter.component.definition</b><br>
2859   * </p>
2860   */
2861  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam COMPONENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_COMPONENT);
2862
2863/**
2864   * Constant for fluent queries to be used to add include statements. Specifies
2865   * the path value of "<b>SearchParameter:component</b>".
2866   */
2867  public static final ca.uhn.fhir.model.api.Include INCLUDE_COMPONENT = new ca.uhn.fhir.model.api.Include("SearchParameter:component").toLocked();
2868
2869 /**
2870   * Search parameter: <b>name</b>
2871   * <p>
2872   * Description: <b>Computationally friendly name of the search parameter</b><br>
2873   * Type: <b>string</b><br>
2874   * Path: <b>SearchParameter.name</b><br>
2875   * </p>
2876   */
2877  @SearchParamDefinition(name="name", path="SearchParameter.name", description="Computationally friendly name of the search parameter", type="string" )
2878  public static final String SP_NAME = "name";
2879 /**
2880   * <b>Fluent Client</b> search parameter constant for <b>name</b>
2881   * <p>
2882   * Description: <b>Computationally friendly name of the search parameter</b><br>
2883   * Type: <b>string</b><br>
2884   * Path: <b>SearchParameter.name</b><br>
2885   * </p>
2886   */
2887  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_NAME);
2888
2889 /**
2890   * Search parameter: <b>publisher</b>
2891   * <p>
2892   * Description: <b>Name of the publisher of the search parameter</b><br>
2893   * Type: <b>string</b><br>
2894   * Path: <b>SearchParameter.publisher</b><br>
2895   * </p>
2896   */
2897  @SearchParamDefinition(name="publisher", path="SearchParameter.publisher", description="Name of the publisher of the search parameter", type="string" )
2898  public static final String SP_PUBLISHER = "publisher";
2899 /**
2900   * <b>Fluent Client</b> search parameter constant for <b>publisher</b>
2901   * <p>
2902   * Description: <b>Name of the publisher of the search parameter</b><br>
2903   * Type: <b>string</b><br>
2904   * Path: <b>SearchParameter.publisher</b><br>
2905   * </p>
2906   */
2907  public static final ca.uhn.fhir.rest.gclient.StringClientParam PUBLISHER = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_PUBLISHER);
2908
2909 /**
2910   * Search parameter: <b>status</b>
2911   * <p>
2912   * Description: <b>The current status of the search parameter</b><br>
2913   * Type: <b>token</b><br>
2914   * Path: <b>SearchParameter.status</b><br>
2915   * </p>
2916   */
2917  @SearchParamDefinition(name="status", path="SearchParameter.status", description="The current status of the search parameter", type="token" )
2918  public static final String SP_STATUS = "status";
2919 /**
2920   * <b>Fluent Client</b> search parameter constant for <b>status</b>
2921   * <p>
2922   * Description: <b>The current status of the search parameter</b><br>
2923   * Type: <b>token</b><br>
2924   * Path: <b>SearchParameter.status</b><br>
2925   * </p>
2926   */
2927  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
2928
2929 /**
2930   * Search parameter: <b>base</b>
2931   * <p>
2932   * Description: <b>The resource type(s) this search parameter applies to</b><br>
2933   * Type: <b>token</b><br>
2934   * Path: <b>SearchParameter.base</b><br>
2935   * </p>
2936   */
2937  @SearchParamDefinition(name="base", path="SearchParameter.base", description="The resource type(s) this search parameter applies to", type="token" )
2938  public static final String SP_BASE = "base";
2939 /**
2940   * <b>Fluent Client</b> search parameter constant for <b>base</b>
2941   * <p>
2942   * Description: <b>The resource type(s) this search parameter applies to</b><br>
2943   * Type: <b>token</b><br>
2944   * Path: <b>SearchParameter.base</b><br>
2945   * </p>
2946   */
2947  public static final ca.uhn.fhir.rest.gclient.TokenClientParam BASE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_BASE);
2948
2949
2950}
2951