001package org.hl7.fhir.dstu2016may.model;
002
003
004
005
006/*
007  Copyright (c) 2011+, HL7, Inc.
008  All rights reserved.
009  
010  Redistribution and use in source and binary forms, with or without modification, 
011  are permitted provided that the following conditions are met:
012  
013   * Redistributions of source code must retain the above copyright notice, this 
014     list of conditions and the following disclaimer.
015   * Redistributions in binary form must reproduce the above copyright notice, 
016     this list of conditions and the following disclaimer in the documentation 
017     and/or other materials provided with the distribution.
018   * Neither the name of HL7 nor the names of its contributors may be used to 
019     endorse or promote products derived from this software without specific 
020     prior written permission.
021  
022  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
023  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
024  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
025  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
026  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
027  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
028  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
029  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
030  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
031  POSSIBILITY OF SUCH DAMAGE.
032  
033*/
034
035// Generated on Sun, May 8, 2016 03:05+1000 for FHIR v1.4.0
036import java.util.ArrayList;
037import java.util.Date;
038import java.util.List;
039
040import org.hl7.fhir.dstu2016may.model.Enumerations.ConformanceResourceStatus;
041import org.hl7.fhir.dstu2016may.model.Enumerations.ConformanceResourceStatusEnumFactory;
042import org.hl7.fhir.dstu2016may.model.Enumerations.SearchParamType;
043import org.hl7.fhir.dstu2016may.model.Enumerations.SearchParamTypeEnumFactory;
044import org.hl7.fhir.exceptions.FHIRException;
045import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
046import org.hl7.fhir.utilities.Utilities;
047
048import ca.uhn.fhir.model.api.annotation.Block;
049import ca.uhn.fhir.model.api.annotation.Child;
050import ca.uhn.fhir.model.api.annotation.Description;
051import ca.uhn.fhir.model.api.annotation.ResourceDef;
052import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
053/**
054 * A search parameter that defines a named search item that can be used to search/filter on a resource.
055 */
056@ResourceDef(name="SearchParameter", profile="http://hl7.org/fhir/Profile/SearchParameter")
057public class SearchParameter extends DomainResource {
058
059    public enum XPathUsageType {
060        /**
061         * The search parameter is derived directly from the selected nodes based on the type definitions.
062         */
063        NORMAL, 
064        /**
065         * The search parameter is derived by a phonetic transform from the selected nodes.
066         */
067        PHONETIC, 
068        /**
069         * The search parameter is based on a spatial transform of the selected nodes.
070         */
071        NEARBY, 
072        /**
073         * The search parameter is based on a spatial transform of the selected nodes, using physical distance from the middle.
074         */
075        DISTANCE, 
076        /**
077         * The interpretation of the xpath statement is unknown (and can't be automated).
078         */
079        OTHER, 
080        /**
081         * added to help the parsers
082         */
083        NULL;
084        public static XPathUsageType fromCode(String codeString) throws FHIRException {
085            if (codeString == null || "".equals(codeString))
086                return null;
087        if ("normal".equals(codeString))
088          return NORMAL;
089        if ("phonetic".equals(codeString))
090          return PHONETIC;
091        if ("nearby".equals(codeString))
092          return NEARBY;
093        if ("distance".equals(codeString))
094          return DISTANCE;
095        if ("other".equals(codeString))
096          return OTHER;
097        throw new FHIRException("Unknown XPathUsageType code '"+codeString+"'");
098        }
099        public String toCode() {
100          switch (this) {
101            case NORMAL: return "normal";
102            case PHONETIC: return "phonetic";
103            case NEARBY: return "nearby";
104            case DISTANCE: return "distance";
105            case OTHER: return "other";
106            case NULL: return null;
107            default: return "?";
108          }
109        }
110        public String getSystem() {
111          switch (this) {
112            case NORMAL: return "http://hl7.org/fhir/search-xpath-usage";
113            case PHONETIC: return "http://hl7.org/fhir/search-xpath-usage";
114            case NEARBY: return "http://hl7.org/fhir/search-xpath-usage";
115            case DISTANCE: return "http://hl7.org/fhir/search-xpath-usage";
116            case OTHER: return "http://hl7.org/fhir/search-xpath-usage";
117            case NULL: return null;
118            default: return "?";
119          }
120        }
121        public String getDefinition() {
122          switch (this) {
123            case NORMAL: return "The search parameter is derived directly from the selected nodes based on the type definitions.";
124            case PHONETIC: return "The search parameter is derived by a phonetic transform from the selected nodes.";
125            case NEARBY: return "The search parameter is based on a spatial transform of the selected nodes.";
126            case DISTANCE: return "The search parameter is based on a spatial transform of the selected nodes, using physical distance from the middle.";
127            case OTHER: return "The interpretation of the xpath statement is unknown (and can't be automated).";
128            case NULL: return null;
129            default: return "?";
130          }
131        }
132        public String getDisplay() {
133          switch (this) {
134            case NORMAL: return "Normal";
135            case PHONETIC: return "Phonetic";
136            case NEARBY: return "Nearby";
137            case DISTANCE: return "Distance";
138            case OTHER: return "Other";
139            case NULL: return null;
140            default: return "?";
141          }
142        }
143    }
144
145  public static class XPathUsageTypeEnumFactory implements EnumFactory<XPathUsageType> {
146    public XPathUsageType fromCode(String codeString) throws IllegalArgumentException {
147      if (codeString == null || "".equals(codeString))
148            if (codeString == null || "".equals(codeString))
149                return null;
150        if ("normal".equals(codeString))
151          return XPathUsageType.NORMAL;
152        if ("phonetic".equals(codeString))
153          return XPathUsageType.PHONETIC;
154        if ("nearby".equals(codeString))
155          return XPathUsageType.NEARBY;
156        if ("distance".equals(codeString))
157          return XPathUsageType.DISTANCE;
158        if ("other".equals(codeString))
159          return XPathUsageType.OTHER;
160        throw new IllegalArgumentException("Unknown XPathUsageType code '"+codeString+"'");
161        }
162        public Enumeration<XPathUsageType> fromType(Base code) throws FHIRException {
163          if (code == null || code.isEmpty())
164            return null;
165          String codeString = ((PrimitiveType) code).asStringValue();
166          if (codeString == null || "".equals(codeString))
167            return null;
168        if ("normal".equals(codeString))
169          return new Enumeration<XPathUsageType>(this, XPathUsageType.NORMAL);
170        if ("phonetic".equals(codeString))
171          return new Enumeration<XPathUsageType>(this, XPathUsageType.PHONETIC);
172        if ("nearby".equals(codeString))
173          return new Enumeration<XPathUsageType>(this, XPathUsageType.NEARBY);
174        if ("distance".equals(codeString))
175          return new Enumeration<XPathUsageType>(this, XPathUsageType.DISTANCE);
176        if ("other".equals(codeString))
177          return new Enumeration<XPathUsageType>(this, XPathUsageType.OTHER);
178        throw new FHIRException("Unknown XPathUsageType code '"+codeString+"'");
179        }
180    public String toCode(XPathUsageType code) {
181      if (code == XPathUsageType.NORMAL)
182        return "normal";
183      if (code == XPathUsageType.PHONETIC)
184        return "phonetic";
185      if (code == XPathUsageType.NEARBY)
186        return "nearby";
187      if (code == XPathUsageType.DISTANCE)
188        return "distance";
189      if (code == XPathUsageType.OTHER)
190        return "other";
191      return "?";
192      }
193    public String toSystem(XPathUsageType code) {
194      return code.getSystem();
195      }
196    }
197
198    @Block()
199    public static class SearchParameterContactComponent extends BackboneElement implements IBaseBackboneElement {
200        /**
201         * The name of an individual to contact regarding the search parameter.
202         */
203        @Child(name = "name", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=true)
204        @Description(shortDefinition="Name of an individual to contact", formalDefinition="The name of an individual to contact regarding the search parameter." )
205        protected StringType name;
206
207        /**
208         * Contact details for individual (if a name was provided) or the publisher.
209         */
210        @Child(name = "telecom", type = {ContactPoint.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
211        @Description(shortDefinition="Contact details for individual or publisher", formalDefinition="Contact details for individual (if a name was provided) or the publisher." )
212        protected List<ContactPoint> telecom;
213
214        private static final long serialVersionUID = -1179697803L;
215
216    /**
217     * Constructor
218     */
219      public SearchParameterContactComponent() {
220        super();
221      }
222
223        /**
224         * @return {@link #name} (The name of an individual to contact regarding the search parameter.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
225         */
226        public StringType getNameElement() { 
227          if (this.name == null)
228            if (Configuration.errorOnAutoCreate())
229              throw new Error("Attempt to auto-create SearchParameterContactComponent.name");
230            else if (Configuration.doAutoCreate())
231              this.name = new StringType(); // bb
232          return this.name;
233        }
234
235        public boolean hasNameElement() { 
236          return this.name != null && !this.name.isEmpty();
237        }
238
239        public boolean hasName() { 
240          return this.name != null && !this.name.isEmpty();
241        }
242
243        /**
244         * @param value {@link #name} (The name of an individual to contact regarding the search parameter.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
245         */
246        public SearchParameterContactComponent setNameElement(StringType value) { 
247          this.name = value;
248          return this;
249        }
250
251        /**
252         * @return The name of an individual to contact regarding the search parameter.
253         */
254        public String getName() { 
255          return this.name == null ? null : this.name.getValue();
256        }
257
258        /**
259         * @param value The name of an individual to contact regarding the search parameter.
260         */
261        public SearchParameterContactComponent setName(String value) { 
262          if (Utilities.noString(value))
263            this.name = null;
264          else {
265            if (this.name == null)
266              this.name = new StringType();
267            this.name.setValue(value);
268          }
269          return this;
270        }
271
272        /**
273         * @return {@link #telecom} (Contact details for individual (if a name was provided) or the publisher.)
274         */
275        public List<ContactPoint> getTelecom() { 
276          if (this.telecom == null)
277            this.telecom = new ArrayList<ContactPoint>();
278          return this.telecom;
279        }
280
281        public boolean hasTelecom() { 
282          if (this.telecom == null)
283            return false;
284          for (ContactPoint item : this.telecom)
285            if (!item.isEmpty())
286              return true;
287          return false;
288        }
289
290        /**
291         * @return {@link #telecom} (Contact details for individual (if a name was provided) or the publisher.)
292         */
293    // syntactic sugar
294        public ContactPoint addTelecom() { //3
295          ContactPoint t = new ContactPoint();
296          if (this.telecom == null)
297            this.telecom = new ArrayList<ContactPoint>();
298          this.telecom.add(t);
299          return t;
300        }
301
302    // syntactic sugar
303        public SearchParameterContactComponent addTelecom(ContactPoint t) { //3
304          if (t == null)
305            return this;
306          if (this.telecom == null)
307            this.telecom = new ArrayList<ContactPoint>();
308          this.telecom.add(t);
309          return this;
310        }
311
312        protected void listChildren(List<Property> childrenList) {
313          super.listChildren(childrenList);
314          childrenList.add(new Property("name", "string", "The name of an individual to contact regarding the search parameter.", 0, java.lang.Integer.MAX_VALUE, name));
315          childrenList.add(new Property("telecom", "ContactPoint", "Contact details for individual (if a name was provided) or the publisher.", 0, java.lang.Integer.MAX_VALUE, telecom));
316        }
317
318      @Override
319      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
320        switch (hash) {
321        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
322        case -1429363305: /*telecom*/ return this.telecom == null ? new Base[0] : this.telecom.toArray(new Base[this.telecom.size()]); // ContactPoint
323        default: return super.getProperty(hash, name, checkValid);
324        }
325
326      }
327
328      @Override
329      public void setProperty(int hash, String name, Base value) throws FHIRException {
330        switch (hash) {
331        case 3373707: // name
332          this.name = castToString(value); // StringType
333          break;
334        case -1429363305: // telecom
335          this.getTelecom().add(castToContactPoint(value)); // ContactPoint
336          break;
337        default: super.setProperty(hash, name, value);
338        }
339
340      }
341
342      @Override
343      public void setProperty(String name, Base value) throws FHIRException {
344        if (name.equals("name"))
345          this.name = castToString(value); // StringType
346        else if (name.equals("telecom"))
347          this.getTelecom().add(castToContactPoint(value));
348        else
349          super.setProperty(name, value);
350      }
351
352      @Override
353      public Base makeProperty(int hash, String name) throws FHIRException {
354        switch (hash) {
355        case 3373707: throw new FHIRException("Cannot make property name as it is not a complex type"); // StringType
356        case -1429363305:  return addTelecom(); // ContactPoint
357        default: return super.makeProperty(hash, name);
358        }
359
360      }
361
362      @Override
363      public Base addChild(String name) throws FHIRException {
364        if (name.equals("name")) {
365          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.name");
366        }
367        else if (name.equals("telecom")) {
368          return addTelecom();
369        }
370        else
371          return super.addChild(name);
372      }
373
374      public SearchParameterContactComponent copy() {
375        SearchParameterContactComponent dst = new SearchParameterContactComponent();
376        copyValues(dst);
377        dst.name = name == null ? null : name.copy();
378        if (telecom != null) {
379          dst.telecom = new ArrayList<ContactPoint>();
380          for (ContactPoint i : telecom)
381            dst.telecom.add(i.copy());
382        };
383        return dst;
384      }
385
386      @Override
387      public boolean equalsDeep(Base other) {
388        if (!super.equalsDeep(other))
389          return false;
390        if (!(other instanceof SearchParameterContactComponent))
391          return false;
392        SearchParameterContactComponent o = (SearchParameterContactComponent) other;
393        return compareDeep(name, o.name, true) && compareDeep(telecom, o.telecom, true);
394      }
395
396      @Override
397      public boolean equalsShallow(Base other) {
398        if (!super.equalsShallow(other))
399          return false;
400        if (!(other instanceof SearchParameterContactComponent))
401          return false;
402        SearchParameterContactComponent o = (SearchParameterContactComponent) other;
403        return compareValues(name, o.name, true);
404      }
405
406      public boolean isEmpty() {
407        return super.isEmpty() && (name == null || name.isEmpty()) && (telecom == null || telecom.isEmpty())
408          ;
409      }
410
411  public String fhirType() {
412    return "SearchParameter.contact";
413
414  }
415
416  }
417
418    /**
419     * An absolute URL that is used to identify this search parameter when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this search parameter is (or will be) published.
420     */
421    @Child(name = "url", type = {UriType.class}, order=0, min=1, max=1, modifier=false, summary=true)
422    @Description(shortDefinition="Absolute URL used to reference this search parameter", formalDefinition="An absolute URL that is used to identify this search parameter when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this search parameter is (or will be) published." )
423    protected UriType url;
424
425    /**
426     * A free text natural language name identifying the search parameter.
427     */
428    @Child(name = "name", type = {StringType.class}, order=1, min=1, max=1, modifier=false, summary=true)
429    @Description(shortDefinition="Informal name for this search parameter", formalDefinition="A free text natural language name identifying the search parameter." )
430    protected StringType name;
431
432    /**
433     * The status of this search parameter definition.
434     */
435    @Child(name = "status", type = {CodeType.class}, order=2, min=0, max=1, modifier=true, summary=true)
436    @Description(shortDefinition="draft | active | retired", formalDefinition="The status of this search parameter definition." )
437    protected Enumeration<ConformanceResourceStatus> status;
438
439    /**
440     * A flag to indicate that this search parameter definition is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
441     */
442    @Child(name = "experimental", type = {BooleanType.class}, order=3, min=0, max=1, modifier=false, summary=true)
443    @Description(shortDefinition="If for testing purposes, not real usage", formalDefinition="A flag to indicate that this search parameter definition is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage." )
444    protected BooleanType experimental;
445
446    /**
447     * The date  (and optionally time) when the search parameter definition was published. The date must change when the business version changes, if it does, and it must change if the status code changes. In addition, it should change when the substantive content of the search parameter changes.
448     */
449    @Child(name = "date", type = {DateTimeType.class}, order=4, min=0, max=1, modifier=false, summary=true)
450    @Description(shortDefinition="Publication Date(/time)", formalDefinition="The date  (and optionally time) when the search parameter definition was published. The date must change when the business version changes, if it does, and it must change if the status code changes. In addition, it should change when the substantive content of the search parameter changes." )
451    protected DateTimeType date;
452
453    /**
454     * The name of the individual or organization that published the search parameter.
455     */
456    @Child(name = "publisher", type = {StringType.class}, order=5, min=0, max=1, modifier=false, summary=true)
457    @Description(shortDefinition="Name of the publisher (Organization or individual)", formalDefinition="The name of the individual or organization that published the search parameter." )
458    protected StringType publisher;
459
460    /**
461     * Contacts to assist a user in finding and communicating with the publisher.
462     */
463    @Child(name = "contact", type = {}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
464    @Description(shortDefinition="Contact details of the publisher", formalDefinition="Contacts to assist a user in finding and communicating with the publisher." )
465    protected List<SearchParameterContactComponent> contact;
466
467    /**
468     * 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 of search parameters.
469     */
470    @Child(name = "useContext", type = {CodeableConcept.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
471    @Description(shortDefinition="Content intends to support these contexts", formalDefinition="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 of search parameters." )
472    protected List<CodeableConcept> useContext;
473
474    /**
475     * The Scope and Usage that this search parameter was created to meet.
476     */
477    @Child(name = "requirements", type = {StringType.class}, order=8, min=0, max=1, modifier=false, summary=false)
478    @Description(shortDefinition="Why this search parameter is defined", formalDefinition="The Scope and Usage that this search parameter was created to meet." )
479    protected StringType requirements;
480
481    /**
482     * The code used in the URL or the parameter name in a parameters resource for this search parameter.
483     */
484    @Child(name = "code", type = {CodeType.class}, order=9, min=1, max=1, modifier=false, summary=true)
485    @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." )
486    protected CodeType code;
487
488    /**
489     * The base resource type that this search parameter refers to.
490     */
491    @Child(name = "base", type = {CodeType.class}, order=10, min=1, max=1, modifier=false, summary=true)
492    @Description(shortDefinition="The resource type this search parameter applies to", formalDefinition="The base resource type that this search parameter refers to." )
493    protected CodeType base;
494
495    /**
496     * The type of value a search parameter refers to, and how the content is interpreted.
497     */
498    @Child(name = "type", type = {CodeType.class}, order=11, min=1, max=1, modifier=false, summary=true)
499    @Description(shortDefinition="number | date | string | token | reference | composite | quantity | uri", formalDefinition="The type of value a search parameter refers to, and how the content is interpreted." )
500    protected Enumeration<SearchParamType> type;
501
502    /**
503     * A description of the search parameters and how it used.
504     */
505    @Child(name = "description", type = {StringType.class}, order=12, min=1, max=1, modifier=false, summary=true)
506    @Description(shortDefinition="Documentation for  search parameter", formalDefinition="A description of the search parameters and how it used." )
507    protected StringType description;
508
509    /**
510     * A FluentPath expression that returns a set of elements for the search parameter.
511     */
512    @Child(name = "expression", type = {StringType.class}, order=13, min=0, max=1, modifier=false, summary=false)
513    @Description(shortDefinition="FluentPath expression that extracts the values", formalDefinition="A FluentPath expression that returns a set of elements for the search parameter." )
514    protected StringType expression;
515
516    /**
517     * An XPath expression that returns a set of elements for the search parameter.
518     */
519    @Child(name = "xpath", type = {StringType.class}, order=14, min=0, max=1, modifier=false, summary=false)
520    @Description(shortDefinition="XPath that extracts the values", formalDefinition="An XPath expression that returns a set of elements for the search parameter." )
521    protected StringType xpath;
522
523    /**
524     * How the search parameter relates to the set of elements returned by evaluating the xpath query.
525     */
526    @Child(name = "xpathUsage", type = {CodeType.class}, order=15, min=0, max=1, modifier=false, summary=false)
527    @Description(shortDefinition="normal | phonetic | nearby | distance | other", formalDefinition="How the search parameter relates to the set of elements returned by evaluating the xpath query." )
528    protected Enumeration<XPathUsageType> xpathUsage;
529
530    /**
531     * Types of resource (if a resource is referenced).
532     */
533    @Child(name = "target", type = {CodeType.class}, order=16, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
534    @Description(shortDefinition="Types of resource (if a resource reference)", formalDefinition="Types of resource (if a resource is referenced)." )
535    protected List<CodeType> target;
536
537    private static final long serialVersionUID = -310845178L;
538
539  /**
540   * Constructor
541   */
542    public SearchParameter() {
543      super();
544    }
545
546  /**
547   * Constructor
548   */
549    public SearchParameter(UriType url, StringType name, CodeType code, CodeType base, Enumeration<SearchParamType> type, StringType description) {
550      super();
551      this.url = url;
552      this.name = name;
553      this.code = code;
554      this.base = base;
555      this.type = type;
556      this.description = description;
557    }
558
559    /**
560     * @return {@link #url} (An absolute URL that is used to identify this search parameter when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this search parameter is (or will be) published.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
561     */
562    public UriType getUrlElement() { 
563      if (this.url == null)
564        if (Configuration.errorOnAutoCreate())
565          throw new Error("Attempt to auto-create SearchParameter.url");
566        else if (Configuration.doAutoCreate())
567          this.url = new UriType(); // bb
568      return this.url;
569    }
570
571    public boolean hasUrlElement() { 
572      return this.url != null && !this.url.isEmpty();
573    }
574
575    public boolean hasUrl() { 
576      return this.url != null && !this.url.isEmpty();
577    }
578
579    /**
580     * @param value {@link #url} (An absolute URL that is used to identify this search parameter when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this search parameter is (or will be) published.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
581     */
582    public SearchParameter setUrlElement(UriType value) { 
583      this.url = value;
584      return this;
585    }
586
587    /**
588     * @return An absolute URL that is used to identify this search parameter when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this search parameter is (or will be) published.
589     */
590    public String getUrl() { 
591      return this.url == null ? null : this.url.getValue();
592    }
593
594    /**
595     * @param value An absolute URL that is used to identify this search parameter when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this search parameter is (or will be) published.
596     */
597    public SearchParameter setUrl(String value) { 
598        if (this.url == null)
599          this.url = new UriType();
600        this.url.setValue(value);
601      return this;
602    }
603
604    /**
605     * @return {@link #name} (A free text natural language name identifying the search parameter.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
606     */
607    public StringType getNameElement() { 
608      if (this.name == null)
609        if (Configuration.errorOnAutoCreate())
610          throw new Error("Attempt to auto-create SearchParameter.name");
611        else if (Configuration.doAutoCreate())
612          this.name = new StringType(); // bb
613      return this.name;
614    }
615
616    public boolean hasNameElement() { 
617      return this.name != null && !this.name.isEmpty();
618    }
619
620    public boolean hasName() { 
621      return this.name != null && !this.name.isEmpty();
622    }
623
624    /**
625     * @param value {@link #name} (A free text natural language name identifying the search parameter.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
626     */
627    public SearchParameter setNameElement(StringType value) { 
628      this.name = value;
629      return this;
630    }
631
632    /**
633     * @return A free text natural language name identifying the search parameter.
634     */
635    public String getName() { 
636      return this.name == null ? null : this.name.getValue();
637    }
638
639    /**
640     * @param value A free text natural language name identifying the search parameter.
641     */
642    public SearchParameter setName(String value) { 
643        if (this.name == null)
644          this.name = new StringType();
645        this.name.setValue(value);
646      return this;
647    }
648
649    /**
650     * @return {@link #status} (The status of this search parameter definition.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
651     */
652    public Enumeration<ConformanceResourceStatus> getStatusElement() { 
653      if (this.status == null)
654        if (Configuration.errorOnAutoCreate())
655          throw new Error("Attempt to auto-create SearchParameter.status");
656        else if (Configuration.doAutoCreate())
657          this.status = new Enumeration<ConformanceResourceStatus>(new ConformanceResourceStatusEnumFactory()); // bb
658      return this.status;
659    }
660
661    public boolean hasStatusElement() { 
662      return this.status != null && !this.status.isEmpty();
663    }
664
665    public boolean hasStatus() { 
666      return this.status != null && !this.status.isEmpty();
667    }
668
669    /**
670     * @param value {@link #status} (The status of this search parameter definition.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
671     */
672    public SearchParameter setStatusElement(Enumeration<ConformanceResourceStatus> value) { 
673      this.status = value;
674      return this;
675    }
676
677    /**
678     * @return The status of this search parameter definition.
679     */
680    public ConformanceResourceStatus getStatus() { 
681      return this.status == null ? null : this.status.getValue();
682    }
683
684    /**
685     * @param value The status of this search parameter definition.
686     */
687    public SearchParameter setStatus(ConformanceResourceStatus value) { 
688      if (value == null)
689        this.status = null;
690      else {
691        if (this.status == null)
692          this.status = new Enumeration<ConformanceResourceStatus>(new ConformanceResourceStatusEnumFactory());
693        this.status.setValue(value);
694      }
695      return this;
696    }
697
698    /**
699     * @return {@link #experimental} (A flag to indicate that this search parameter definition 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
700     */
701    public BooleanType getExperimentalElement() { 
702      if (this.experimental == null)
703        if (Configuration.errorOnAutoCreate())
704          throw new Error("Attempt to auto-create SearchParameter.experimental");
705        else if (Configuration.doAutoCreate())
706          this.experimental = new BooleanType(); // bb
707      return this.experimental;
708    }
709
710    public boolean hasExperimentalElement() { 
711      return this.experimental != null && !this.experimental.isEmpty();
712    }
713
714    public boolean hasExperimental() { 
715      return this.experimental != null && !this.experimental.isEmpty();
716    }
717
718    /**
719     * @param value {@link #experimental} (A flag to indicate that this search parameter definition 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
720     */
721    public SearchParameter setExperimentalElement(BooleanType value) { 
722      this.experimental = value;
723      return this;
724    }
725
726    /**
727     * @return A flag to indicate that this search parameter definition is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
728     */
729    public boolean getExperimental() { 
730      return this.experimental == null || this.experimental.isEmpty() ? false : this.experimental.getValue();
731    }
732
733    /**
734     * @param value A flag to indicate that this search parameter definition is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
735     */
736    public SearchParameter setExperimental(boolean value) { 
737        if (this.experimental == null)
738          this.experimental = new BooleanType();
739        this.experimental.setValue(value);
740      return this;
741    }
742
743    /**
744     * @return {@link #date} (The date  (and optionally time) when the search parameter definition was published. The date must change when the business version changes, if it does, 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
745     */
746    public DateTimeType getDateElement() { 
747      if (this.date == null)
748        if (Configuration.errorOnAutoCreate())
749          throw new Error("Attempt to auto-create SearchParameter.date");
750        else if (Configuration.doAutoCreate())
751          this.date = new DateTimeType(); // bb
752      return this.date;
753    }
754
755    public boolean hasDateElement() { 
756      return this.date != null && !this.date.isEmpty();
757    }
758
759    public boolean hasDate() { 
760      return this.date != null && !this.date.isEmpty();
761    }
762
763    /**
764     * @param value {@link #date} (The date  (and optionally time) when the search parameter definition was published. The date must change when the business version changes, if it does, 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
765     */
766    public SearchParameter setDateElement(DateTimeType value) { 
767      this.date = value;
768      return this;
769    }
770
771    /**
772     * @return The date  (and optionally time) when the search parameter definition was published. The date must change when the business version changes, if it does, and it must change if the status code changes. In addition, it should change when the substantive content of the search parameter changes.
773     */
774    public Date getDate() { 
775      return this.date == null ? null : this.date.getValue();
776    }
777
778    /**
779     * @param value The date  (and optionally time) when the search parameter definition was published. The date must change when the business version changes, if it does, and it must change if the status code changes. In addition, it should change when the substantive content of the search parameter changes.
780     */
781    public SearchParameter setDate(Date value) { 
782      if (value == null)
783        this.date = null;
784      else {
785        if (this.date == null)
786          this.date = new DateTimeType();
787        this.date.setValue(value);
788      }
789      return this;
790    }
791
792    /**
793     * @return {@link #publisher} (The name of the individual or organization that published the search parameter.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
794     */
795    public StringType getPublisherElement() { 
796      if (this.publisher == null)
797        if (Configuration.errorOnAutoCreate())
798          throw new Error("Attempt to auto-create SearchParameter.publisher");
799        else if (Configuration.doAutoCreate())
800          this.publisher = new StringType(); // bb
801      return this.publisher;
802    }
803
804    public boolean hasPublisherElement() { 
805      return this.publisher != null && !this.publisher.isEmpty();
806    }
807
808    public boolean hasPublisher() { 
809      return this.publisher != null && !this.publisher.isEmpty();
810    }
811
812    /**
813     * @param value {@link #publisher} (The name of the individual or organization that published the search parameter.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
814     */
815    public SearchParameter setPublisherElement(StringType value) { 
816      this.publisher = value;
817      return this;
818    }
819
820    /**
821     * @return The name of the individual or organization that published the search parameter.
822     */
823    public String getPublisher() { 
824      return this.publisher == null ? null : this.publisher.getValue();
825    }
826
827    /**
828     * @param value The name of the individual or organization that published the search parameter.
829     */
830    public SearchParameter setPublisher(String value) { 
831      if (Utilities.noString(value))
832        this.publisher = null;
833      else {
834        if (this.publisher == null)
835          this.publisher = new StringType();
836        this.publisher.setValue(value);
837      }
838      return this;
839    }
840
841    /**
842     * @return {@link #contact} (Contacts to assist a user in finding and communicating with the publisher.)
843     */
844    public List<SearchParameterContactComponent> getContact() { 
845      if (this.contact == null)
846        this.contact = new ArrayList<SearchParameterContactComponent>();
847      return this.contact;
848    }
849
850    public boolean hasContact() { 
851      if (this.contact == null)
852        return false;
853      for (SearchParameterContactComponent item : this.contact)
854        if (!item.isEmpty())
855          return true;
856      return false;
857    }
858
859    /**
860     * @return {@link #contact} (Contacts to assist a user in finding and communicating with the publisher.)
861     */
862    // syntactic sugar
863    public SearchParameterContactComponent addContact() { //3
864      SearchParameterContactComponent t = new SearchParameterContactComponent();
865      if (this.contact == null)
866        this.contact = new ArrayList<SearchParameterContactComponent>();
867      this.contact.add(t);
868      return t;
869    }
870
871    // syntactic sugar
872    public SearchParameter addContact(SearchParameterContactComponent t) { //3
873      if (t == null)
874        return this;
875      if (this.contact == null)
876        this.contact = new ArrayList<SearchParameterContactComponent>();
877      this.contact.add(t);
878      return this;
879    }
880
881    /**
882     * @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 of search parameters.)
883     */
884    public List<CodeableConcept> getUseContext() { 
885      if (this.useContext == null)
886        this.useContext = new ArrayList<CodeableConcept>();
887      return this.useContext;
888    }
889
890    public boolean hasUseContext() { 
891      if (this.useContext == null)
892        return false;
893      for (CodeableConcept item : this.useContext)
894        if (!item.isEmpty())
895          return true;
896      return false;
897    }
898
899    /**
900     * @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 of search parameters.)
901     */
902    // syntactic sugar
903    public CodeableConcept addUseContext() { //3
904      CodeableConcept t = new CodeableConcept();
905      if (this.useContext == null)
906        this.useContext = new ArrayList<CodeableConcept>();
907      this.useContext.add(t);
908      return t;
909    }
910
911    // syntactic sugar
912    public SearchParameter addUseContext(CodeableConcept t) { //3
913      if (t == null)
914        return this;
915      if (this.useContext == null)
916        this.useContext = new ArrayList<CodeableConcept>();
917      this.useContext.add(t);
918      return this;
919    }
920
921    /**
922     * @return {@link #requirements} (The Scope and Usage that this search parameter was created to meet.). This is the underlying object with id, value and extensions. The accessor "getRequirements" gives direct access to the value
923     */
924    public StringType getRequirementsElement() { 
925      if (this.requirements == null)
926        if (Configuration.errorOnAutoCreate())
927          throw new Error("Attempt to auto-create SearchParameter.requirements");
928        else if (Configuration.doAutoCreate())
929          this.requirements = new StringType(); // bb
930      return this.requirements;
931    }
932
933    public boolean hasRequirementsElement() { 
934      return this.requirements != null && !this.requirements.isEmpty();
935    }
936
937    public boolean hasRequirements() { 
938      return this.requirements != null && !this.requirements.isEmpty();
939    }
940
941    /**
942     * @param value {@link #requirements} (The Scope and Usage that this search parameter was created to meet.). This is the underlying object with id, value and extensions. The accessor "getRequirements" gives direct access to the value
943     */
944    public SearchParameter setRequirementsElement(StringType value) { 
945      this.requirements = value;
946      return this;
947    }
948
949    /**
950     * @return The Scope and Usage that this search parameter was created to meet.
951     */
952    public String getRequirements() { 
953      return this.requirements == null ? null : this.requirements.getValue();
954    }
955
956    /**
957     * @param value The Scope and Usage that this search parameter was created to meet.
958     */
959    public SearchParameter setRequirements(String value) { 
960      if (Utilities.noString(value))
961        this.requirements = null;
962      else {
963        if (this.requirements == null)
964          this.requirements = new StringType();
965        this.requirements.setValue(value);
966      }
967      return this;
968    }
969
970    /**
971     * @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
972     */
973    public CodeType getCodeElement() { 
974      if (this.code == null)
975        if (Configuration.errorOnAutoCreate())
976          throw new Error("Attempt to auto-create SearchParameter.code");
977        else if (Configuration.doAutoCreate())
978          this.code = new CodeType(); // bb
979      return this.code;
980    }
981
982    public boolean hasCodeElement() { 
983      return this.code != null && !this.code.isEmpty();
984    }
985
986    public boolean hasCode() { 
987      return this.code != null && !this.code.isEmpty();
988    }
989
990    /**
991     * @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
992     */
993    public SearchParameter setCodeElement(CodeType value) { 
994      this.code = value;
995      return this;
996    }
997
998    /**
999     * @return The code used in the URL or the parameter name in a parameters resource for this search parameter.
1000     */
1001    public String getCode() { 
1002      return this.code == null ? null : this.code.getValue();
1003    }
1004
1005    /**
1006     * @param value The code used in the URL or the parameter name in a parameters resource for this search parameter.
1007     */
1008    public SearchParameter setCode(String value) { 
1009        if (this.code == null)
1010          this.code = new CodeType();
1011        this.code.setValue(value);
1012      return this;
1013    }
1014
1015    /**
1016     * @return {@link #base} (The base resource type that this search parameter refers to.). This is the underlying object with id, value and extensions. The accessor "getBase" gives direct access to the value
1017     */
1018    public CodeType getBaseElement() { 
1019      if (this.base == null)
1020        if (Configuration.errorOnAutoCreate())
1021          throw new Error("Attempt to auto-create SearchParameter.base");
1022        else if (Configuration.doAutoCreate())
1023          this.base = new CodeType(); // bb
1024      return this.base;
1025    }
1026
1027    public boolean hasBaseElement() { 
1028      return this.base != null && !this.base.isEmpty();
1029    }
1030
1031    public boolean hasBase() { 
1032      return this.base != null && !this.base.isEmpty();
1033    }
1034
1035    /**
1036     * @param value {@link #base} (The base resource type that this search parameter refers to.). This is the underlying object with id, value and extensions. The accessor "getBase" gives direct access to the value
1037     */
1038    public SearchParameter setBaseElement(CodeType value) { 
1039      this.base = value;
1040      return this;
1041    }
1042
1043    /**
1044     * @return The base resource type that this search parameter refers to.
1045     */
1046    public String getBase() { 
1047      return this.base == null ? null : this.base.getValue();
1048    }
1049
1050    /**
1051     * @param value The base resource type that this search parameter refers to.
1052     */
1053    public SearchParameter setBase(String value) { 
1054        if (this.base == null)
1055          this.base = new CodeType();
1056        this.base.setValue(value);
1057      return this;
1058    }
1059
1060    /**
1061     * @return {@link #type} (The type of value a search parameter refers to, and how the content is interpreted.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
1062     */
1063    public Enumeration<SearchParamType> getTypeElement() { 
1064      if (this.type == null)
1065        if (Configuration.errorOnAutoCreate())
1066          throw new Error("Attempt to auto-create SearchParameter.type");
1067        else if (Configuration.doAutoCreate())
1068          this.type = new Enumeration<SearchParamType>(new SearchParamTypeEnumFactory()); // bb
1069      return this.type;
1070    }
1071
1072    public boolean hasTypeElement() { 
1073      return this.type != null && !this.type.isEmpty();
1074    }
1075
1076    public boolean hasType() { 
1077      return this.type != null && !this.type.isEmpty();
1078    }
1079
1080    /**
1081     * @param value {@link #type} (The type of value a search parameter refers to, and how the content is interpreted.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
1082     */
1083    public SearchParameter setTypeElement(Enumeration<SearchParamType> value) { 
1084      this.type = value;
1085      return this;
1086    }
1087
1088    /**
1089     * @return The type of value a search parameter refers to, and how the content is interpreted.
1090     */
1091    public SearchParamType getType() { 
1092      return this.type == null ? null : this.type.getValue();
1093    }
1094
1095    /**
1096     * @param value The type of value a search parameter refers to, and how the content is interpreted.
1097     */
1098    public SearchParameter setType(SearchParamType value) { 
1099        if (this.type == null)
1100          this.type = new Enumeration<SearchParamType>(new SearchParamTypeEnumFactory());
1101        this.type.setValue(value);
1102      return this;
1103    }
1104
1105    /**
1106     * @return {@link #description} (A description of the search parameters and how it used.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
1107     */
1108    public StringType getDescriptionElement() { 
1109      if (this.description == null)
1110        if (Configuration.errorOnAutoCreate())
1111          throw new Error("Attempt to auto-create SearchParameter.description");
1112        else if (Configuration.doAutoCreate())
1113          this.description = new StringType(); // bb
1114      return this.description;
1115    }
1116
1117    public boolean hasDescriptionElement() { 
1118      return this.description != null && !this.description.isEmpty();
1119    }
1120
1121    public boolean hasDescription() { 
1122      return this.description != null && !this.description.isEmpty();
1123    }
1124
1125    /**
1126     * @param value {@link #description} (A description of the search parameters and how it used.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
1127     */
1128    public SearchParameter setDescriptionElement(StringType value) { 
1129      this.description = value;
1130      return this;
1131    }
1132
1133    /**
1134     * @return A description of the search parameters and how it used.
1135     */
1136    public String getDescription() { 
1137      return this.description == null ? null : this.description.getValue();
1138    }
1139
1140    /**
1141     * @param value A description of the search parameters and how it used.
1142     */
1143    public SearchParameter setDescription(String value) { 
1144        if (this.description == null)
1145          this.description = new StringType();
1146        this.description.setValue(value);
1147      return this;
1148    }
1149
1150    /**
1151     * @return {@link #expression} (A FluentPath 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
1152     */
1153    public StringType getExpressionElement() { 
1154      if (this.expression == null)
1155        if (Configuration.errorOnAutoCreate())
1156          throw new Error("Attempt to auto-create SearchParameter.expression");
1157        else if (Configuration.doAutoCreate())
1158          this.expression = new StringType(); // bb
1159      return this.expression;
1160    }
1161
1162    public boolean hasExpressionElement() { 
1163      return this.expression != null && !this.expression.isEmpty();
1164    }
1165
1166    public boolean hasExpression() { 
1167      return this.expression != null && !this.expression.isEmpty();
1168    }
1169
1170    /**
1171     * @param value {@link #expression} (A FluentPath 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
1172     */
1173    public SearchParameter setExpressionElement(StringType value) { 
1174      this.expression = value;
1175      return this;
1176    }
1177
1178    /**
1179     * @return A FluentPath expression that returns a set of elements for the search parameter.
1180     */
1181    public String getExpression() { 
1182      return this.expression == null ? null : this.expression.getValue();
1183    }
1184
1185    /**
1186     * @param value A FluentPath expression that returns a set of elements for the search parameter.
1187     */
1188    public SearchParameter setExpression(String value) { 
1189      if (Utilities.noString(value))
1190        this.expression = null;
1191      else {
1192        if (this.expression == null)
1193          this.expression = new StringType();
1194        this.expression.setValue(value);
1195      }
1196      return this;
1197    }
1198
1199    /**
1200     * @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
1201     */
1202    public StringType getXpathElement() { 
1203      if (this.xpath == null)
1204        if (Configuration.errorOnAutoCreate())
1205          throw new Error("Attempt to auto-create SearchParameter.xpath");
1206        else if (Configuration.doAutoCreate())
1207          this.xpath = new StringType(); // bb
1208      return this.xpath;
1209    }
1210
1211    public boolean hasXpathElement() { 
1212      return this.xpath != null && !this.xpath.isEmpty();
1213    }
1214
1215    public boolean hasXpath() { 
1216      return this.xpath != null && !this.xpath.isEmpty();
1217    }
1218
1219    /**
1220     * @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
1221     */
1222    public SearchParameter setXpathElement(StringType value) { 
1223      this.xpath = value;
1224      return this;
1225    }
1226
1227    /**
1228     * @return An XPath expression that returns a set of elements for the search parameter.
1229     */
1230    public String getXpath() { 
1231      return this.xpath == null ? null : this.xpath.getValue();
1232    }
1233
1234    /**
1235     * @param value An XPath expression that returns a set of elements for the search parameter.
1236     */
1237    public SearchParameter setXpath(String value) { 
1238      if (Utilities.noString(value))
1239        this.xpath = null;
1240      else {
1241        if (this.xpath == null)
1242          this.xpath = new StringType();
1243        this.xpath.setValue(value);
1244      }
1245      return this;
1246    }
1247
1248    /**
1249     * @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
1250     */
1251    public Enumeration<XPathUsageType> getXpathUsageElement() { 
1252      if (this.xpathUsage == null)
1253        if (Configuration.errorOnAutoCreate())
1254          throw new Error("Attempt to auto-create SearchParameter.xpathUsage");
1255        else if (Configuration.doAutoCreate())
1256          this.xpathUsage = new Enumeration<XPathUsageType>(new XPathUsageTypeEnumFactory()); // bb
1257      return this.xpathUsage;
1258    }
1259
1260    public boolean hasXpathUsageElement() { 
1261      return this.xpathUsage != null && !this.xpathUsage.isEmpty();
1262    }
1263
1264    public boolean hasXpathUsage() { 
1265      return this.xpathUsage != null && !this.xpathUsage.isEmpty();
1266    }
1267
1268    /**
1269     * @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
1270     */
1271    public SearchParameter setXpathUsageElement(Enumeration<XPathUsageType> value) { 
1272      this.xpathUsage = value;
1273      return this;
1274    }
1275
1276    /**
1277     * @return How the search parameter relates to the set of elements returned by evaluating the xpath query.
1278     */
1279    public XPathUsageType getXpathUsage() { 
1280      return this.xpathUsage == null ? null : this.xpathUsage.getValue();
1281    }
1282
1283    /**
1284     * @param value How the search parameter relates to the set of elements returned by evaluating the xpath query.
1285     */
1286    public SearchParameter setXpathUsage(XPathUsageType value) { 
1287      if (value == null)
1288        this.xpathUsage = null;
1289      else {
1290        if (this.xpathUsage == null)
1291          this.xpathUsage = new Enumeration<XPathUsageType>(new XPathUsageTypeEnumFactory());
1292        this.xpathUsage.setValue(value);
1293      }
1294      return this;
1295    }
1296
1297    /**
1298     * @return {@link #target} (Types of resource (if a resource is referenced).)
1299     */
1300    public List<CodeType> getTarget() { 
1301      if (this.target == null)
1302        this.target = new ArrayList<CodeType>();
1303      return this.target;
1304    }
1305
1306    public boolean hasTarget() { 
1307      if (this.target == null)
1308        return false;
1309      for (CodeType item : this.target)
1310        if (!item.isEmpty())
1311          return true;
1312      return false;
1313    }
1314
1315    /**
1316     * @return {@link #target} (Types of resource (if a resource is referenced).)
1317     */
1318    // syntactic sugar
1319    public CodeType addTargetElement() {//2 
1320      CodeType t = new CodeType();
1321      if (this.target == null)
1322        this.target = new ArrayList<CodeType>();
1323      this.target.add(t);
1324      return t;
1325    }
1326
1327    /**
1328     * @param value {@link #target} (Types of resource (if a resource is referenced).)
1329     */
1330    public SearchParameter addTarget(String value) { //1
1331      CodeType t = new CodeType();
1332      t.setValue(value);
1333      if (this.target == null)
1334        this.target = new ArrayList<CodeType>();
1335      this.target.add(t);
1336      return this;
1337    }
1338
1339    /**
1340     * @param value {@link #target} (Types of resource (if a resource is referenced).)
1341     */
1342    public boolean hasTarget(String value) { 
1343      if (this.target == null)
1344        return false;
1345      for (CodeType v : this.target)
1346        if (v.equals(value)) // code
1347          return true;
1348      return false;
1349    }
1350
1351      protected void listChildren(List<Property> childrenList) {
1352        super.listChildren(childrenList);
1353        childrenList.add(new Property("url", "uri", "An absolute URL that is used to identify this search parameter when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this search parameter is (or will be) published.", 0, java.lang.Integer.MAX_VALUE, url));
1354        childrenList.add(new Property("name", "string", "A free text natural language name identifying the search parameter.", 0, java.lang.Integer.MAX_VALUE, name));
1355        childrenList.add(new Property("status", "code", "The status of this search parameter definition.", 0, java.lang.Integer.MAX_VALUE, status));
1356        childrenList.add(new Property("experimental", "boolean", "A flag to indicate that this search parameter definition is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.", 0, java.lang.Integer.MAX_VALUE, experimental));
1357        childrenList.add(new Property("date", "dateTime", "The date  (and optionally time) when the search parameter definition was published. The date must change when the business version changes, if it does, and it must change if the status code changes. In addition, it should change when the substantive content of the search parameter changes.", 0, java.lang.Integer.MAX_VALUE, date));
1358        childrenList.add(new Property("publisher", "string", "The name of the individual or organization that published the search parameter.", 0, java.lang.Integer.MAX_VALUE, publisher));
1359        childrenList.add(new Property("contact", "", "Contacts to assist a user in finding and communicating with the publisher.", 0, java.lang.Integer.MAX_VALUE, contact));
1360        childrenList.add(new Property("useContext", "CodeableConcept", "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 of search parameters.", 0, java.lang.Integer.MAX_VALUE, useContext));
1361        childrenList.add(new Property("requirements", "string", "The Scope and Usage that this search parameter was created to meet.", 0, java.lang.Integer.MAX_VALUE, requirements));
1362        childrenList.add(new Property("code", "code", "The code used in the URL or the parameter name in a parameters resource for this search parameter.", 0, java.lang.Integer.MAX_VALUE, code));
1363        childrenList.add(new Property("base", "code", "The base resource type that this search parameter refers to.", 0, java.lang.Integer.MAX_VALUE, base));
1364        childrenList.add(new Property("type", "code", "The type of value a search parameter refers to, and how the content is interpreted.", 0, java.lang.Integer.MAX_VALUE, type));
1365        childrenList.add(new Property("description", "string", "A description of the search parameters and how it used.", 0, java.lang.Integer.MAX_VALUE, description));
1366        childrenList.add(new Property("expression", "string", "A FluentPath expression that returns a set of elements for the search parameter.", 0, java.lang.Integer.MAX_VALUE, expression));
1367        childrenList.add(new Property("xpath", "string", "An XPath expression that returns a set of elements for the search parameter.", 0, java.lang.Integer.MAX_VALUE, xpath));
1368        childrenList.add(new Property("xpathUsage", "code", "How the search parameter relates to the set of elements returned by evaluating the xpath query.", 0, java.lang.Integer.MAX_VALUE, xpathUsage));
1369        childrenList.add(new Property("target", "code", "Types of resource (if a resource is referenced).", 0, java.lang.Integer.MAX_VALUE, target));
1370      }
1371
1372      @Override
1373      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1374        switch (hash) {
1375        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UriType
1376        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
1377        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<ConformanceResourceStatus>
1378        case -404562712: /*experimental*/ return this.experimental == null ? new Base[0] : new Base[] {this.experimental}; // BooleanType
1379        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
1380        case 1447404028: /*publisher*/ return this.publisher == null ? new Base[0] : new Base[] {this.publisher}; // StringType
1381        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // SearchParameterContactComponent
1382        case -669707736: /*useContext*/ return this.useContext == null ? new Base[0] : this.useContext.toArray(new Base[this.useContext.size()]); // CodeableConcept
1383        case -1619874672: /*requirements*/ return this.requirements == null ? new Base[0] : new Base[] {this.requirements}; // StringType
1384        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeType
1385        case 3016401: /*base*/ return this.base == null ? new Base[0] : new Base[] {this.base}; // CodeType
1386        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // Enumeration<SearchParamType>
1387        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // StringType
1388        case -1795452264: /*expression*/ return this.expression == null ? new Base[0] : new Base[] {this.expression}; // StringType
1389        case 114256029: /*xpath*/ return this.xpath == null ? new Base[0] : new Base[] {this.xpath}; // StringType
1390        case 1801322244: /*xpathUsage*/ return this.xpathUsage == null ? new Base[0] : new Base[] {this.xpathUsage}; // Enumeration<XPathUsageType>
1391        case -880905839: /*target*/ return this.target == null ? new Base[0] : this.target.toArray(new Base[this.target.size()]); // CodeType
1392        default: return super.getProperty(hash, name, checkValid);
1393        }
1394
1395      }
1396
1397      @Override
1398      public void setProperty(int hash, String name, Base value) throws FHIRException {
1399        switch (hash) {
1400        case 116079: // url
1401          this.url = castToUri(value); // UriType
1402          break;
1403        case 3373707: // name
1404          this.name = castToString(value); // StringType
1405          break;
1406        case -892481550: // status
1407          this.status = new ConformanceResourceStatusEnumFactory().fromType(value); // Enumeration<ConformanceResourceStatus>
1408          break;
1409        case -404562712: // experimental
1410          this.experimental = castToBoolean(value); // BooleanType
1411          break;
1412        case 3076014: // date
1413          this.date = castToDateTime(value); // DateTimeType
1414          break;
1415        case 1447404028: // publisher
1416          this.publisher = castToString(value); // StringType
1417          break;
1418        case 951526432: // contact
1419          this.getContact().add((SearchParameterContactComponent) value); // SearchParameterContactComponent
1420          break;
1421        case -669707736: // useContext
1422          this.getUseContext().add(castToCodeableConcept(value)); // CodeableConcept
1423          break;
1424        case -1619874672: // requirements
1425          this.requirements = castToString(value); // StringType
1426          break;
1427        case 3059181: // code
1428          this.code = castToCode(value); // CodeType
1429          break;
1430        case 3016401: // base
1431          this.base = castToCode(value); // CodeType
1432          break;
1433        case 3575610: // type
1434          this.type = new SearchParamTypeEnumFactory().fromType(value); // Enumeration<SearchParamType>
1435          break;
1436        case -1724546052: // description
1437          this.description = castToString(value); // StringType
1438          break;
1439        case -1795452264: // expression
1440          this.expression = castToString(value); // StringType
1441          break;
1442        case 114256029: // xpath
1443          this.xpath = castToString(value); // StringType
1444          break;
1445        case 1801322244: // xpathUsage
1446          this.xpathUsage = new XPathUsageTypeEnumFactory().fromType(value); // Enumeration<XPathUsageType>
1447          break;
1448        case -880905839: // target
1449          this.getTarget().add(castToCode(value)); // CodeType
1450          break;
1451        default: super.setProperty(hash, name, value);
1452        }
1453
1454      }
1455
1456      @Override
1457      public void setProperty(String name, Base value) throws FHIRException {
1458        if (name.equals("url"))
1459          this.url = castToUri(value); // UriType
1460        else if (name.equals("name"))
1461          this.name = castToString(value); // StringType
1462        else if (name.equals("status"))
1463          this.status = new ConformanceResourceStatusEnumFactory().fromType(value); // Enumeration<ConformanceResourceStatus>
1464        else if (name.equals("experimental"))
1465          this.experimental = castToBoolean(value); // BooleanType
1466        else if (name.equals("date"))
1467          this.date = castToDateTime(value); // DateTimeType
1468        else if (name.equals("publisher"))
1469          this.publisher = castToString(value); // StringType
1470        else if (name.equals("contact"))
1471          this.getContact().add((SearchParameterContactComponent) value);
1472        else if (name.equals("useContext"))
1473          this.getUseContext().add(castToCodeableConcept(value));
1474        else if (name.equals("requirements"))
1475          this.requirements = castToString(value); // StringType
1476        else if (name.equals("code"))
1477          this.code = castToCode(value); // CodeType
1478        else if (name.equals("base"))
1479          this.base = castToCode(value); // CodeType
1480        else if (name.equals("type"))
1481          this.type = new SearchParamTypeEnumFactory().fromType(value); // Enumeration<SearchParamType>
1482        else if (name.equals("description"))
1483          this.description = castToString(value); // StringType
1484        else if (name.equals("expression"))
1485          this.expression = castToString(value); // StringType
1486        else if (name.equals("xpath"))
1487          this.xpath = castToString(value); // StringType
1488        else if (name.equals("xpathUsage"))
1489          this.xpathUsage = new XPathUsageTypeEnumFactory().fromType(value); // Enumeration<XPathUsageType>
1490        else if (name.equals("target"))
1491          this.getTarget().add(castToCode(value));
1492        else
1493          super.setProperty(name, value);
1494      }
1495
1496      @Override
1497      public Base makeProperty(int hash, String name) throws FHIRException {
1498        switch (hash) {
1499        case 116079: throw new FHIRException("Cannot make property url as it is not a complex type"); // UriType
1500        case 3373707: throw new FHIRException("Cannot make property name as it is not a complex type"); // StringType
1501        case -892481550: throw new FHIRException("Cannot make property status as it is not a complex type"); // Enumeration<ConformanceResourceStatus>
1502        case -404562712: throw new FHIRException("Cannot make property experimental as it is not a complex type"); // BooleanType
1503        case 3076014: throw new FHIRException("Cannot make property date as it is not a complex type"); // DateTimeType
1504        case 1447404028: throw new FHIRException("Cannot make property publisher as it is not a complex type"); // StringType
1505        case 951526432:  return addContact(); // SearchParameterContactComponent
1506        case -669707736:  return addUseContext(); // CodeableConcept
1507        case -1619874672: throw new FHIRException("Cannot make property requirements as it is not a complex type"); // StringType
1508        case 3059181: throw new FHIRException("Cannot make property code as it is not a complex type"); // CodeType
1509        case 3016401: throw new FHIRException("Cannot make property base as it is not a complex type"); // CodeType
1510        case 3575610: throw new FHIRException("Cannot make property type as it is not a complex type"); // Enumeration<SearchParamType>
1511        case -1724546052: throw new FHIRException("Cannot make property description as it is not a complex type"); // StringType
1512        case -1795452264: throw new FHIRException("Cannot make property expression as it is not a complex type"); // StringType
1513        case 114256029: throw new FHIRException("Cannot make property xpath as it is not a complex type"); // StringType
1514        case 1801322244: throw new FHIRException("Cannot make property xpathUsage as it is not a complex type"); // Enumeration<XPathUsageType>
1515        case -880905839: throw new FHIRException("Cannot make property target as it is not a complex type"); // CodeType
1516        default: return super.makeProperty(hash, name);
1517        }
1518
1519      }
1520
1521      @Override
1522      public Base addChild(String name) throws FHIRException {
1523        if (name.equals("url")) {
1524          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.url");
1525        }
1526        else if (name.equals("name")) {
1527          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.name");
1528        }
1529        else if (name.equals("status")) {
1530          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.status");
1531        }
1532        else if (name.equals("experimental")) {
1533          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.experimental");
1534        }
1535        else if (name.equals("date")) {
1536          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.date");
1537        }
1538        else if (name.equals("publisher")) {
1539          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.publisher");
1540        }
1541        else if (name.equals("contact")) {
1542          return addContact();
1543        }
1544        else if (name.equals("useContext")) {
1545          return addUseContext();
1546        }
1547        else if (name.equals("requirements")) {
1548          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.requirements");
1549        }
1550        else if (name.equals("code")) {
1551          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.code");
1552        }
1553        else if (name.equals("base")) {
1554          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.base");
1555        }
1556        else if (name.equals("type")) {
1557          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.type");
1558        }
1559        else if (name.equals("description")) {
1560          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.description");
1561        }
1562        else if (name.equals("expression")) {
1563          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.expression");
1564        }
1565        else if (name.equals("xpath")) {
1566          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.xpath");
1567        }
1568        else if (name.equals("xpathUsage")) {
1569          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.xpathUsage");
1570        }
1571        else if (name.equals("target")) {
1572          throw new FHIRException("Cannot call addChild on a primitive type SearchParameter.target");
1573        }
1574        else
1575          return super.addChild(name);
1576      }
1577
1578  public String fhirType() {
1579    return "SearchParameter";
1580
1581  }
1582
1583      public SearchParameter copy() {
1584        SearchParameter dst = new SearchParameter();
1585        copyValues(dst);
1586        dst.url = url == null ? null : url.copy();
1587        dst.name = name == null ? null : name.copy();
1588        dst.status = status == null ? null : status.copy();
1589        dst.experimental = experimental == null ? null : experimental.copy();
1590        dst.date = date == null ? null : date.copy();
1591        dst.publisher = publisher == null ? null : publisher.copy();
1592        if (contact != null) {
1593          dst.contact = new ArrayList<SearchParameterContactComponent>();
1594          for (SearchParameterContactComponent i : contact)
1595            dst.contact.add(i.copy());
1596        };
1597        if (useContext != null) {
1598          dst.useContext = new ArrayList<CodeableConcept>();
1599          for (CodeableConcept i : useContext)
1600            dst.useContext.add(i.copy());
1601        };
1602        dst.requirements = requirements == null ? null : requirements.copy();
1603        dst.code = code == null ? null : code.copy();
1604        dst.base = base == null ? null : base.copy();
1605        dst.type = type == null ? null : type.copy();
1606        dst.description = description == null ? null : description.copy();
1607        dst.expression = expression == null ? null : expression.copy();
1608        dst.xpath = xpath == null ? null : xpath.copy();
1609        dst.xpathUsage = xpathUsage == null ? null : xpathUsage.copy();
1610        if (target != null) {
1611          dst.target = new ArrayList<CodeType>();
1612          for (CodeType i : target)
1613            dst.target.add(i.copy());
1614        };
1615        return dst;
1616      }
1617
1618      protected SearchParameter typedCopy() {
1619        return copy();
1620      }
1621
1622      @Override
1623      public boolean equalsDeep(Base other) {
1624        if (!super.equalsDeep(other))
1625          return false;
1626        if (!(other instanceof SearchParameter))
1627          return false;
1628        SearchParameter o = (SearchParameter) other;
1629        return compareDeep(url, o.url, true) && compareDeep(name, o.name, true) && compareDeep(status, o.status, true)
1630           && compareDeep(experimental, o.experimental, true) && compareDeep(date, o.date, true) && compareDeep(publisher, o.publisher, true)
1631           && compareDeep(contact, o.contact, true) && compareDeep(useContext, o.useContext, true) && compareDeep(requirements, o.requirements, true)
1632           && compareDeep(code, o.code, true) && compareDeep(base, o.base, true) && compareDeep(type, o.type, true)
1633           && compareDeep(description, o.description, true) && compareDeep(expression, o.expression, true)
1634           && compareDeep(xpath, o.xpath, true) && compareDeep(xpathUsage, o.xpathUsage, true) && compareDeep(target, o.target, true)
1635          ;
1636      }
1637
1638      @Override
1639      public boolean equalsShallow(Base other) {
1640        if (!super.equalsShallow(other))
1641          return false;
1642        if (!(other instanceof SearchParameter))
1643          return false;
1644        SearchParameter o = (SearchParameter) other;
1645        return compareValues(url, o.url, true) && compareValues(name, o.name, true) && compareValues(status, o.status, true)
1646           && compareValues(experimental, o.experimental, true) && compareValues(date, o.date, true) && compareValues(publisher, o.publisher, true)
1647           && compareValues(requirements, o.requirements, true) && compareValues(code, o.code, true) && compareValues(base, o.base, true)
1648           && compareValues(type, o.type, true) && compareValues(description, o.description, true) && compareValues(expression, o.expression, true)
1649           && compareValues(xpath, o.xpath, true) && compareValues(xpathUsage, o.xpathUsage, true) && compareValues(target, o.target, true)
1650          ;
1651      }
1652
1653      public boolean isEmpty() {
1654        return super.isEmpty() && (url == null || url.isEmpty()) && (name == null || name.isEmpty())
1655           && (status == null || status.isEmpty()) && (experimental == null || experimental.isEmpty())
1656           && (date == null || date.isEmpty()) && (publisher == null || publisher.isEmpty()) && (contact == null || contact.isEmpty())
1657           && (useContext == null || useContext.isEmpty()) && (requirements == null || requirements.isEmpty())
1658           && (code == null || code.isEmpty()) && (base == null || base.isEmpty()) && (type == null || type.isEmpty())
1659           && (description == null || description.isEmpty()) && (expression == null || expression.isEmpty())
1660           && (xpath == null || xpath.isEmpty()) && (xpathUsage == null || xpathUsage.isEmpty()) && (target == null || target.isEmpty())
1661          ;
1662      }
1663
1664  @Override
1665  public ResourceType getResourceType() {
1666    return ResourceType.SearchParameter;
1667   }
1668
1669 /**
1670   * Search parameter: <b>description</b>
1671   * <p>
1672   * Description: <b>Documentation for  search parameter</b><br>
1673   * Type: <b>string</b><br>
1674   * Path: <b>SearchParameter.description</b><br>
1675   * </p>
1676   */
1677  @SearchParamDefinition(name="description", path="SearchParameter.description", description="Documentation for  search parameter", type="string" )
1678  public static final String SP_DESCRIPTION = "description";
1679 /**
1680   * <b>Fluent Client</b> search parameter constant for <b>description</b>
1681   * <p>
1682   * Description: <b>Documentation for  search parameter</b><br>
1683   * Type: <b>string</b><br>
1684   * Path: <b>SearchParameter.description</b><br>
1685   * </p>
1686   */
1687  public static final ca.uhn.fhir.rest.gclient.StringClientParam DESCRIPTION = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_DESCRIPTION);
1688
1689 /**
1690   * Search parameter: <b>name</b>
1691   * <p>
1692   * Description: <b>Informal name for this search parameter</b><br>
1693   * Type: <b>string</b><br>
1694   * Path: <b>SearchParameter.name</b><br>
1695   * </p>
1696   */
1697  @SearchParamDefinition(name="name", path="SearchParameter.name", description="Informal name for this search parameter", type="string" )
1698  public static final String SP_NAME = "name";
1699 /**
1700   * <b>Fluent Client</b> search parameter constant for <b>name</b>
1701   * <p>
1702   * Description: <b>Informal name for this search parameter</b><br>
1703   * Type: <b>string</b><br>
1704   * Path: <b>SearchParameter.name</b><br>
1705   * </p>
1706   */
1707  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_NAME);
1708
1709 /**
1710   * Search parameter: <b>context</b>
1711   * <p>
1712   * Description: <b>A use context assigned to the search parameter</b><br>
1713   * Type: <b>token</b><br>
1714   * Path: <b>SearchParameter.useContext</b><br>
1715   * </p>
1716   */
1717  @SearchParamDefinition(name="context", path="SearchParameter.useContext", description="A use context assigned to the search parameter", type="token" )
1718  public static final String SP_CONTEXT = "context";
1719 /**
1720   * <b>Fluent Client</b> search parameter constant for <b>context</b>
1721   * <p>
1722   * Description: <b>A use context assigned to the search parameter</b><br>
1723   * Type: <b>token</b><br>
1724   * Path: <b>SearchParameter.useContext</b><br>
1725   * </p>
1726   */
1727  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CONTEXT);
1728
1729 /**
1730   * Search parameter: <b>target</b>
1731   * <p>
1732   * Description: <b>Types of resource (if a resource reference)</b><br>
1733   * Type: <b>token</b><br>
1734   * Path: <b>SearchParameter.target</b><br>
1735   * </p>
1736   */
1737  @SearchParamDefinition(name="target", path="SearchParameter.target", description="Types of resource (if a resource reference)", type="token" )
1738  public static final String SP_TARGET = "target";
1739 /**
1740   * <b>Fluent Client</b> search parameter constant for <b>target</b>
1741   * <p>
1742   * Description: <b>Types of resource (if a resource reference)</b><br>
1743   * Type: <b>token</b><br>
1744   * Path: <b>SearchParameter.target</b><br>
1745   * </p>
1746   */
1747  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TARGET = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_TARGET);
1748
1749 /**
1750   * Search parameter: <b>base</b>
1751   * <p>
1752   * Description: <b>The resource type this search parameter applies to</b><br>
1753   * Type: <b>token</b><br>
1754   * Path: <b>SearchParameter.base</b><br>
1755   * </p>
1756   */
1757  @SearchParamDefinition(name="base", path="SearchParameter.base", description="The resource type this search parameter applies to", type="token" )
1758  public static final String SP_BASE = "base";
1759 /**
1760   * <b>Fluent Client</b> search parameter constant for <b>base</b>
1761   * <p>
1762   * Description: <b>The resource type this search parameter applies to</b><br>
1763   * Type: <b>token</b><br>
1764   * Path: <b>SearchParameter.base</b><br>
1765   * </p>
1766   */
1767  public static final ca.uhn.fhir.rest.gclient.TokenClientParam BASE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_BASE);
1768
1769 /**
1770   * Search parameter: <b>code</b>
1771   * <p>
1772   * Description: <b>Code used in URL</b><br>
1773   * Type: <b>token</b><br>
1774   * Path: <b>SearchParameter.code</b><br>
1775   * </p>
1776   */
1777  @SearchParamDefinition(name="code", path="SearchParameter.code", description="Code used in URL", type="token" )
1778  public static final String SP_CODE = "code";
1779 /**
1780   * <b>Fluent Client</b> search parameter constant for <b>code</b>
1781   * <p>
1782   * Description: <b>Code used in URL</b><br>
1783   * Type: <b>token</b><br>
1784   * Path: <b>SearchParameter.code</b><br>
1785   * </p>
1786   */
1787  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CODE);
1788
1789 /**
1790   * Search parameter: <b>type</b>
1791   * <p>
1792   * Description: <b>number | date | string | token | reference | composite | quantity | uri</b><br>
1793   * Type: <b>token</b><br>
1794   * Path: <b>SearchParameter.type</b><br>
1795   * </p>
1796   */
1797  @SearchParamDefinition(name="type", path="SearchParameter.type", description="number | date | string | token | reference | composite | quantity | uri", type="token" )
1798  public static final String SP_TYPE = "type";
1799 /**
1800   * <b>Fluent Client</b> search parameter constant for <b>type</b>
1801   * <p>
1802   * Description: <b>number | date | string | token | reference | composite | quantity | uri</b><br>
1803   * Type: <b>token</b><br>
1804   * Path: <b>SearchParameter.type</b><br>
1805   * </p>
1806   */
1807  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_TYPE);
1808
1809 /**
1810   * Search parameter: <b>url</b>
1811   * <p>
1812   * Description: <b>Absolute URL used to reference this search parameter</b><br>
1813   * Type: <b>uri</b><br>
1814   * Path: <b>SearchParameter.url</b><br>
1815   * </p>
1816   */
1817  @SearchParamDefinition(name="url", path="SearchParameter.url", description="Absolute URL used to reference this search parameter", type="uri" )
1818  public static final String SP_URL = "url";
1819 /**
1820   * <b>Fluent Client</b> search parameter constant for <b>url</b>
1821   * <p>
1822   * Description: <b>Absolute URL used to reference this search parameter</b><br>
1823   * Type: <b>uri</b><br>
1824   * Path: <b>SearchParameter.url</b><br>
1825   * </p>
1826   */
1827  public static final ca.uhn.fhir.rest.gclient.UriClientParam URL = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_URL);
1828
1829
1830}