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