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