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