001package org.hl7.fhir.r4b.model;
002
003
004/*
005  Copyright (c) 2011+, HL7, Inc.
006  All rights reserved.
007  
008  Redistribution and use in source and binary forms, with or without modification, \
009  are permitted provided that the following conditions are met:
010  
011   * Redistributions of source code must retain the above copyright notice, this \
012     list of conditions and the following disclaimer.
013   * Redistributions in binary form must reproduce the above copyright notice, \
014     this list of conditions and the following disclaimer in the documentation \
015     and/or other materials provided with the distribution.
016   * Neither the name of HL7 nor the names of its contributors may be used to 
017     endorse or promote products derived from this software without specific 
018     prior written permission.
019  
020  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND \
021  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED \
022  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \
023  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, \
024  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT \
025  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR \
026  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, \
027  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \
028  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \
029  POSSIBILITY OF SUCH DAMAGE.
030  */
031
032// Generated on Fri, Dec 31, 2021 05:58+1100 for FHIR v4.3.0-snapshot1
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.utilities.Utilities;
038import org.hl7.fhir.r4b.model.Enumerations.*;
039import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
040import org.hl7.fhir.exceptions.FHIRException;
041import org.hl7.fhir.instance.model.api.ICompositeType;
042import ca.uhn.fhir.model.api.annotation.ResourceDef;
043import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
044import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
045import ca.uhn.fhir.model.api.annotation.Child;
046import ca.uhn.fhir.model.api.annotation.ChildOrder;
047import ca.uhn.fhir.model.api.annotation.Description;
048import ca.uhn.fhir.model.api.annotation.Block;
049
050/**
051 * Describes a stream of resource state changes identified by trigger criteria and annotated with labels useful to filter projections from this topic.
052 */
053@ResourceDef(name="SubscriptionTopic", profile="http://hl7.org/fhir/StructureDefinition/SubscriptionTopic")
054public class SubscriptionTopic extends DomainResource {
055
056    public enum CriteriaNotExistsBehavior {
057        /**
058         * The requested conditional statement will pass if a matching state does not exist (e.g., previous state during create).
059         */
060        TESTPASSES, 
061        /**
062         * The requested conditional statement will fail if a matching state does not exist (e.g., previous state during create).
063         */
064        TESTFAILS, 
065        /**
066         * added to help the parsers with the generic types
067         */
068        NULL;
069        public static CriteriaNotExistsBehavior fromCode(String codeString) throws FHIRException {
070            if (codeString == null || "".equals(codeString))
071                return null;
072        if ("test-passes".equals(codeString))
073          return TESTPASSES;
074        if ("test-fails".equals(codeString))
075          return TESTFAILS;
076        if (Configuration.isAcceptInvalidEnums())
077          return null;
078        else
079          throw new FHIRException("Unknown CriteriaNotExistsBehavior code '"+codeString+"'");
080        }
081        public String toCode() {
082          switch (this) {
083            case TESTPASSES: return "test-passes";
084            case TESTFAILS: return "test-fails";
085            case NULL: return null;
086            default: return "?";
087          }
088        }
089        public String getSystem() {
090          switch (this) {
091            case TESTPASSES: return "http://hl7.org/fhir/subscriptiontopic-cr-behavior";
092            case TESTFAILS: return "http://hl7.org/fhir/subscriptiontopic-cr-behavior";
093            case NULL: return null;
094            default: return "?";
095          }
096        }
097        public String getDefinition() {
098          switch (this) {
099            case TESTPASSES: return "The requested conditional statement will pass if a matching state does not exist (e.g., previous state during create).";
100            case TESTFAILS: return "The requested conditional statement will fail if a matching state does not exist (e.g., previous state during create).";
101            case NULL: return null;
102            default: return "?";
103          }
104        }
105        public String getDisplay() {
106          switch (this) {
107            case TESTPASSES: return "test passes";
108            case TESTFAILS: return "test fails";
109            case NULL: return null;
110            default: return "?";
111          }
112        }
113    }
114
115  public static class CriteriaNotExistsBehaviorEnumFactory implements EnumFactory<CriteriaNotExistsBehavior> {
116    public CriteriaNotExistsBehavior fromCode(String codeString) throws IllegalArgumentException {
117      if (codeString == null || "".equals(codeString))
118            if (codeString == null || "".equals(codeString))
119                return null;
120        if ("test-passes".equals(codeString))
121          return CriteriaNotExistsBehavior.TESTPASSES;
122        if ("test-fails".equals(codeString))
123          return CriteriaNotExistsBehavior.TESTFAILS;
124        throw new IllegalArgumentException("Unknown CriteriaNotExistsBehavior code '"+codeString+"'");
125        }
126        public Enumeration<CriteriaNotExistsBehavior> fromType(Base code) throws FHIRException {
127          if (code == null)
128            return null;
129          if (code.isEmpty())
130            return new Enumeration<CriteriaNotExistsBehavior>(this);
131          String codeString = ((PrimitiveType) code).asStringValue();
132          if (codeString == null || "".equals(codeString))
133            return null;
134        if ("test-passes".equals(codeString))
135          return new Enumeration<CriteriaNotExistsBehavior>(this, CriteriaNotExistsBehavior.TESTPASSES);
136        if ("test-fails".equals(codeString))
137          return new Enumeration<CriteriaNotExistsBehavior>(this, CriteriaNotExistsBehavior.TESTFAILS);
138        throw new FHIRException("Unknown CriteriaNotExistsBehavior code '"+codeString+"'");
139        }
140    public String toCode(CriteriaNotExistsBehavior code) {
141      if (code == CriteriaNotExistsBehavior.TESTPASSES)
142        return "test-passes";
143      if (code == CriteriaNotExistsBehavior.TESTFAILS)
144        return "test-fails";
145      return "?";
146      }
147    public String toSystem(CriteriaNotExistsBehavior code) {
148      return code.getSystem();
149      }
150    }
151
152    public enum InteractionTrigger {
153        /**
154         * Create a new resource with a server assigned id.
155         */
156        CREATE, 
157        /**
158         * Update an existing resource by its id (or create it if it is new).
159         */
160        UPDATE, 
161        /**
162         * Delete a resource.
163         */
164        DELETE, 
165        /**
166         * added to help the parsers with the generic types
167         */
168        NULL;
169        public static InteractionTrigger fromCode(String codeString) throws FHIRException {
170            if (codeString == null || "".equals(codeString))
171                return null;
172        if ("create".equals(codeString))
173          return CREATE;
174        if ("update".equals(codeString))
175          return UPDATE;
176        if ("delete".equals(codeString))
177          return DELETE;
178        if (Configuration.isAcceptInvalidEnums())
179          return null;
180        else
181          throw new FHIRException("Unknown InteractionTrigger code '"+codeString+"'");
182        }
183        public String toCode() {
184          switch (this) {
185            case CREATE: return "create";
186            case UPDATE: return "update";
187            case DELETE: return "delete";
188            case NULL: return null;
189            default: return "?";
190          }
191        }
192        public String getSystem() {
193          switch (this) {
194            case CREATE: return "http://hl7.org/fhir/restful-interaction";
195            case UPDATE: return "http://hl7.org/fhir/restful-interaction";
196            case DELETE: return "http://hl7.org/fhir/restful-interaction";
197            case NULL: return null;
198            default: return "?";
199          }
200        }
201        public String getDefinition() {
202          switch (this) {
203            case CREATE: return "Create a new resource with a server assigned id.";
204            case UPDATE: return "Update an existing resource by its id (or create it if it is new).";
205            case DELETE: return "Delete a resource.";
206            case NULL: return null;
207            default: return "?";
208          }
209        }
210        public String getDisplay() {
211          switch (this) {
212            case CREATE: return "create";
213            case UPDATE: return "update";
214            case DELETE: return "delete";
215            case NULL: return null;
216            default: return "?";
217          }
218        }
219    }
220
221  public static class InteractionTriggerEnumFactory implements EnumFactory<InteractionTrigger> {
222    public InteractionTrigger fromCode(String codeString) throws IllegalArgumentException {
223      if (codeString == null || "".equals(codeString))
224            if (codeString == null || "".equals(codeString))
225                return null;
226        if ("create".equals(codeString))
227          return InteractionTrigger.CREATE;
228        if ("update".equals(codeString))
229          return InteractionTrigger.UPDATE;
230        if ("delete".equals(codeString))
231          return InteractionTrigger.DELETE;
232        throw new IllegalArgumentException("Unknown InteractionTrigger code '"+codeString+"'");
233        }
234        public Enumeration<InteractionTrigger> fromType(Base code) throws FHIRException {
235          if (code == null)
236            return null;
237          if (code.isEmpty())
238            return new Enumeration<InteractionTrigger>(this);
239          String codeString = ((PrimitiveType) code).asStringValue();
240          if (codeString == null || "".equals(codeString))
241            return null;
242        if ("create".equals(codeString))
243          return new Enumeration<InteractionTrigger>(this, InteractionTrigger.CREATE);
244        if ("update".equals(codeString))
245          return new Enumeration<InteractionTrigger>(this, InteractionTrigger.UPDATE);
246        if ("delete".equals(codeString))
247          return new Enumeration<InteractionTrigger>(this, InteractionTrigger.DELETE);
248        throw new FHIRException("Unknown InteractionTrigger code '"+codeString+"'");
249        }
250    public String toCode(InteractionTrigger code) {
251      if (code == InteractionTrigger.CREATE)
252        return "create";
253      if (code == InteractionTrigger.UPDATE)
254        return "update";
255      if (code == InteractionTrigger.DELETE)
256        return "delete";
257      return "?";
258      }
259    public String toSystem(InteractionTrigger code) {
260      return code.getSystem();
261      }
262    }
263
264    public enum SubscriptionSearchModifier {
265        /**
266         * Used to match a value according to FHIR Search rules (e.g., Patient/123, Encounter/2002).
267         */
268        EQUAL, 
269        /**
270         * The value for the parameter in the resource is equal to the provided value.
271         */
272        EQ, 
273        /**
274         * The value for the parameter in the resource is not equal to the provided value.
275         */
276        NE, 
277        /**
278         * The value for the parameter in the resource is greater than the provided value.
279         */
280        GT, 
281        /**
282         * The value for the parameter in the resource is less than the provided value.
283         */
284        LT, 
285        /**
286         * The value for the parameter in the resource is greater or equal to the provided value.
287         */
288        GE, 
289        /**
290         * The value for the parameter in the resource is less or equal to the provided value.
291         */
292        LE, 
293        /**
294         * The value for the parameter in the resource starts after the provided value.
295         */
296        SA, 
297        /**
298         * The value for the parameter in the resource ends before the provided value.
299         */
300        EB, 
301        /**
302         * The value for the parameter in the resource is approximately the same to the provided value. Note that the recommended value for the approximation is 10% of the stated value (or for a date, 10% of the gap between now and the date), but systems may choose other values where appropriate.
303         */
304        AP, 
305        /**
306         * The search parameter is a concept with the form [system]|[code], and the search parameter tests whether the coding in a resource subsumes the specified search code.
307         */
308        ABOVE, 
309        /**
310         * The search parameter is a concept with the form [system]|[code], and the search parameter tests whether the coding in a resource is subsumed by the specified search code.
311         */
312        BELOW, 
313        /**
314         * The search parameter is a member of a Group or List, or the search parameter is a URI (relative or absolute) that identifies a value set, and the search parameter tests whether the value is present in the specified Group, List, or Value Set.
315         */
316        IN, 
317        /**
318         * The search parameter is a member of a Group or List, or the search parameter is a URI (relative or absolute) that identifies a value set, and the search parameter tests whether the value is NOT present in the specified Group, List, or Value Set.
319         */
320        NOTIN, 
321        /**
322         * The search parameter has the format system|code|value, where the system and code refer to a Identifier.type.coding.system and .code, and match if any of the type codes match. All 3 parts must be present.
323         */
324        OFTYPE, 
325        /**
326         * added to help the parsers with the generic types
327         */
328        NULL;
329        public static SubscriptionSearchModifier fromCode(String codeString) throws FHIRException {
330            if (codeString == null || "".equals(codeString))
331                return null;
332        if ("=".equals(codeString))
333          return EQUAL;
334        if ("eq".equals(codeString))
335          return EQ;
336        if ("ne".equals(codeString))
337          return NE;
338        if ("gt".equals(codeString))
339          return GT;
340        if ("lt".equals(codeString))
341          return LT;
342        if ("ge".equals(codeString))
343          return GE;
344        if ("le".equals(codeString))
345          return LE;
346        if ("sa".equals(codeString))
347          return SA;
348        if ("eb".equals(codeString))
349          return EB;
350        if ("ap".equals(codeString))
351          return AP;
352        if ("above".equals(codeString))
353          return ABOVE;
354        if ("below".equals(codeString))
355          return BELOW;
356        if ("in".equals(codeString))
357          return IN;
358        if ("not-in".equals(codeString))
359          return NOTIN;
360        if ("of-type".equals(codeString))
361          return OFTYPE;
362        if (Configuration.isAcceptInvalidEnums())
363          return null;
364        else
365          throw new FHIRException("Unknown SubscriptionSearchModifier code '"+codeString+"'");
366        }
367        public String toCode() {
368          switch (this) {
369            case EQUAL: return "=";
370            case EQ: return "eq";
371            case NE: return "ne";
372            case GT: return "gt";
373            case LT: return "lt";
374            case GE: return "ge";
375            case LE: return "le";
376            case SA: return "sa";
377            case EB: return "eb";
378            case AP: return "ap";
379            case ABOVE: return "above";
380            case BELOW: return "below";
381            case IN: return "in";
382            case NOTIN: return "not-in";
383            case OFTYPE: return "of-type";
384            case NULL: return null;
385            default: return "?";
386          }
387        }
388        public String getSystem() {
389          switch (this) {
390            case EQUAL: return "http://terminology.hl7.org/CodeSystem/subscription-search-modifier";
391            case EQ: return "http://terminology.hl7.org/CodeSystem/subscription-search-modifier";
392            case NE: return "http://terminology.hl7.org/CodeSystem/subscription-search-modifier";
393            case GT: return "http://terminology.hl7.org/CodeSystem/subscription-search-modifier";
394            case LT: return "http://terminology.hl7.org/CodeSystem/subscription-search-modifier";
395            case GE: return "http://terminology.hl7.org/CodeSystem/subscription-search-modifier";
396            case LE: return "http://terminology.hl7.org/CodeSystem/subscription-search-modifier";
397            case SA: return "http://terminology.hl7.org/CodeSystem/subscription-search-modifier";
398            case EB: return "http://terminology.hl7.org/CodeSystem/subscription-search-modifier";
399            case AP: return "http://terminology.hl7.org/CodeSystem/subscription-search-modifier";
400            case ABOVE: return "http://terminology.hl7.org/CodeSystem/subscription-search-modifier";
401            case BELOW: return "http://terminology.hl7.org/CodeSystem/subscription-search-modifier";
402            case IN: return "http://terminology.hl7.org/CodeSystem/subscription-search-modifier";
403            case NOTIN: return "http://terminology.hl7.org/CodeSystem/subscription-search-modifier";
404            case OFTYPE: return "http://terminology.hl7.org/CodeSystem/subscription-search-modifier";
405            case NULL: return null;
406            default: return "?";
407          }
408        }
409        public String getDefinition() {
410          switch (this) {
411            case EQUAL: return "Used to match a value according to FHIR Search rules (e.g., Patient/123, Encounter/2002).";
412            case EQ: return "The value for the parameter in the resource is equal to the provided value.";
413            case NE: return "The value for the parameter in the resource is not equal to the provided value.";
414            case GT: return "The value for the parameter in the resource is greater than the provided value.";
415            case LT: return "The value for the parameter in the resource is less than the provided value.";
416            case GE: return "The value for the parameter in the resource is greater or equal to the provided value.";
417            case LE: return "The value for the parameter in the resource is less or equal to the provided value.";
418            case SA: return "The value for the parameter in the resource starts after the provided value.";
419            case EB: return "The value for the parameter in the resource ends before the provided value.";
420            case AP: return "The value for the parameter in the resource is approximately the same to the provided value. Note that the recommended value for the approximation is 10% of the stated value (or for a date, 10% of the gap between now and the date), but systems may choose other values where appropriate.";
421            case ABOVE: return "The search parameter is a concept with the form [system]|[code], and the search parameter tests whether the coding in a resource subsumes the specified search code.";
422            case BELOW: return "The search parameter is a concept with the form [system]|[code], and the search parameter tests whether the coding in a resource is subsumed by the specified search code.";
423            case IN: return "The search parameter is a member of a Group or List, or the search parameter is a URI (relative or absolute) that identifies a value set, and the search parameter tests whether the value is present in the specified Group, List, or Value Set.";
424            case NOTIN: return "The search parameter is a member of a Group or List, or the search parameter is a URI (relative or absolute) that identifies a value set, and the search parameter tests whether the value is NOT present in the specified Group, List, or Value Set.";
425            case OFTYPE: return "The search parameter has the format system|code|value, where the system and code refer to a Identifier.type.coding.system and .code, and match if any of the type codes match. All 3 parts must be present.";
426            case NULL: return null;
427            default: return "?";
428          }
429        }
430        public String getDisplay() {
431          switch (this) {
432            case EQUAL: return "=";
433            case EQ: return "Equal";
434            case NE: return "Not Equal";
435            case GT: return "Greater Than";
436            case LT: return "Less Than";
437            case GE: return "Greater Than or Equal";
438            case LE: return "Less Than or Equal";
439            case SA: return "Starts After";
440            case EB: return "Ends Before";
441            case AP: return "Approximately";
442            case ABOVE: return "Above";
443            case BELOW: return "Below";
444            case IN: return "In";
445            case NOTIN: return "Not In";
446            case OFTYPE: return "Of Type";
447            case NULL: return null;
448            default: return "?";
449          }
450        }
451    }
452
453  public static class SubscriptionSearchModifierEnumFactory implements EnumFactory<SubscriptionSearchModifier> {
454    public SubscriptionSearchModifier fromCode(String codeString) throws IllegalArgumentException {
455      if (codeString == null || "".equals(codeString))
456            if (codeString == null || "".equals(codeString))
457                return null;
458        if ("=".equals(codeString))
459          return SubscriptionSearchModifier.EQUAL;
460        if ("eq".equals(codeString))
461          return SubscriptionSearchModifier.EQ;
462        if ("ne".equals(codeString))
463          return SubscriptionSearchModifier.NE;
464        if ("gt".equals(codeString))
465          return SubscriptionSearchModifier.GT;
466        if ("lt".equals(codeString))
467          return SubscriptionSearchModifier.LT;
468        if ("ge".equals(codeString))
469          return SubscriptionSearchModifier.GE;
470        if ("le".equals(codeString))
471          return SubscriptionSearchModifier.LE;
472        if ("sa".equals(codeString))
473          return SubscriptionSearchModifier.SA;
474        if ("eb".equals(codeString))
475          return SubscriptionSearchModifier.EB;
476        if ("ap".equals(codeString))
477          return SubscriptionSearchModifier.AP;
478        if ("above".equals(codeString))
479          return SubscriptionSearchModifier.ABOVE;
480        if ("below".equals(codeString))
481          return SubscriptionSearchModifier.BELOW;
482        if ("in".equals(codeString))
483          return SubscriptionSearchModifier.IN;
484        if ("not-in".equals(codeString))
485          return SubscriptionSearchModifier.NOTIN;
486        if ("of-type".equals(codeString))
487          return SubscriptionSearchModifier.OFTYPE;
488        throw new IllegalArgumentException("Unknown SubscriptionSearchModifier code '"+codeString+"'");
489        }
490        public Enumeration<SubscriptionSearchModifier> fromType(Base code) throws FHIRException {
491          if (code == null)
492            return null;
493          if (code.isEmpty())
494            return new Enumeration<SubscriptionSearchModifier>(this);
495          String codeString = ((PrimitiveType) code).asStringValue();
496          if (codeString == null || "".equals(codeString))
497            return null;
498        if ("=".equals(codeString))
499          return new Enumeration<SubscriptionSearchModifier>(this, SubscriptionSearchModifier.EQUAL);
500        if ("eq".equals(codeString))
501          return new Enumeration<SubscriptionSearchModifier>(this, SubscriptionSearchModifier.EQ);
502        if ("ne".equals(codeString))
503          return new Enumeration<SubscriptionSearchModifier>(this, SubscriptionSearchModifier.NE);
504        if ("gt".equals(codeString))
505          return new Enumeration<SubscriptionSearchModifier>(this, SubscriptionSearchModifier.GT);
506        if ("lt".equals(codeString))
507          return new Enumeration<SubscriptionSearchModifier>(this, SubscriptionSearchModifier.LT);
508        if ("ge".equals(codeString))
509          return new Enumeration<SubscriptionSearchModifier>(this, SubscriptionSearchModifier.GE);
510        if ("le".equals(codeString))
511          return new Enumeration<SubscriptionSearchModifier>(this, SubscriptionSearchModifier.LE);
512        if ("sa".equals(codeString))
513          return new Enumeration<SubscriptionSearchModifier>(this, SubscriptionSearchModifier.SA);
514        if ("eb".equals(codeString))
515          return new Enumeration<SubscriptionSearchModifier>(this, SubscriptionSearchModifier.EB);
516        if ("ap".equals(codeString))
517          return new Enumeration<SubscriptionSearchModifier>(this, SubscriptionSearchModifier.AP);
518        if ("above".equals(codeString))
519          return new Enumeration<SubscriptionSearchModifier>(this, SubscriptionSearchModifier.ABOVE);
520        if ("below".equals(codeString))
521          return new Enumeration<SubscriptionSearchModifier>(this, SubscriptionSearchModifier.BELOW);
522        if ("in".equals(codeString))
523          return new Enumeration<SubscriptionSearchModifier>(this, SubscriptionSearchModifier.IN);
524        if ("not-in".equals(codeString))
525          return new Enumeration<SubscriptionSearchModifier>(this, SubscriptionSearchModifier.NOTIN);
526        if ("of-type".equals(codeString))
527          return new Enumeration<SubscriptionSearchModifier>(this, SubscriptionSearchModifier.OFTYPE);
528        throw new FHIRException("Unknown SubscriptionSearchModifier code '"+codeString+"'");
529        }
530    public String toCode(SubscriptionSearchModifier code) {
531      if (code == SubscriptionSearchModifier.EQUAL)
532        return "=";
533      if (code == SubscriptionSearchModifier.EQ)
534        return "eq";
535      if (code == SubscriptionSearchModifier.NE)
536        return "ne";
537      if (code == SubscriptionSearchModifier.GT)
538        return "gt";
539      if (code == SubscriptionSearchModifier.LT)
540        return "lt";
541      if (code == SubscriptionSearchModifier.GE)
542        return "ge";
543      if (code == SubscriptionSearchModifier.LE)
544        return "le";
545      if (code == SubscriptionSearchModifier.SA)
546        return "sa";
547      if (code == SubscriptionSearchModifier.EB)
548        return "eb";
549      if (code == SubscriptionSearchModifier.AP)
550        return "ap";
551      if (code == SubscriptionSearchModifier.ABOVE)
552        return "above";
553      if (code == SubscriptionSearchModifier.BELOW)
554        return "below";
555      if (code == SubscriptionSearchModifier.IN)
556        return "in";
557      if (code == SubscriptionSearchModifier.NOTIN)
558        return "not-in";
559      if (code == SubscriptionSearchModifier.OFTYPE)
560        return "of-type";
561      return "?";
562      }
563    public String toSystem(SubscriptionSearchModifier code) {
564      return code.getSystem();
565      }
566    }
567
568    @Block()
569    public static class SubscriptionTopicResourceTriggerComponent extends BackboneElement implements IBaseBackboneElement {
570        /**
571         * The human readable description of this resource trigger for the SubscriptionTopic -  for example, "An Encounter enters the 'in-progress' state".
572         */
573        @Child(name = "description", type = {MarkdownType.class}, order=1, min=0, max=1, modifier=false, summary=true)
574        @Description(shortDefinition="Text representation of the resource trigger", formalDefinition="The human readable description of this resource trigger for the SubscriptionTopic -  for example, \"An Encounter enters the 'in-progress' state\"." )
575        protected MarkdownType description;
576
577        /**
578         * URL of the Resource that is the type used in this resource trigger.  Relative URLs are relative to the StructureDefinition root of the implemented FHIR version (e.g., http://hl7.org/fhir/StructureDefinition). For example, "Patient" maps to http://hl7.org/fhir/StructureDefinition/Patient.  For more information, see <a href="elementdefinition-definitions.html#ElementDefinition.type.code">ElementDefinition.type.code</a>.
579         */
580        @Child(name = "resource", type = {UriType.class}, order=2, min=1, max=1, modifier=false, summary=true)
581        @Description(shortDefinition="Data Type or Resource (reference to definition) for this trigger definition", formalDefinition="URL of the Resource that is the type used in this resource trigger.  Relative URLs are relative to the StructureDefinition root of the implemented FHIR version (e.g., http://hl7.org/fhir/StructureDefinition). For example, \"Patient\" maps to http://hl7.org/fhir/StructureDefinition/Patient.  For more information, see <a href=\"elementdefinition-definitions.html#ElementDefinition.type.code\">ElementDefinition.type.code</a>." )
582        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/defined-types")
583        protected UriType resource;
584
585        /**
586         * The FHIR RESTful interaction which can be used to trigger a notification for the SubscriptionTopic. Multiple values are considered OR joined (e.g., CREATE or UPDATE).
587         */
588        @Child(name = "supportedInteraction", type = {CodeType.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
589        @Description(shortDefinition="create | update | delete", formalDefinition="The FHIR RESTful interaction which can be used to trigger a notification for the SubscriptionTopic. Multiple values are considered OR joined (e.g., CREATE or UPDATE)." )
590        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/interaction-trigger")
591        protected List<Enumeration<InteractionTrigger>> supportedInteraction;
592
593        /**
594         * The FHIR query based rules that the server should use to determine when to trigger a notification for this subscription topic.
595         */
596        @Child(name = "queryCriteria", type = {}, order=4, min=0, max=1, modifier=false, summary=true)
597        @Description(shortDefinition="Query based trigger rule", formalDefinition="The FHIR query based rules that the server should use to determine when to trigger a notification for this subscription topic." )
598        protected SubscriptionTopicResourceTriggerQueryCriteriaComponent queryCriteria;
599
600        /**
601         * The FHIRPath based rules that the server should use to determine when to trigger a notification for this topic.
602         */
603        @Child(name = "fhirPathCriteria", type = {StringType.class}, order=5, min=0, max=1, modifier=false, summary=true)
604        @Description(shortDefinition="FHIRPath based trigger rule", formalDefinition="The FHIRPath based rules that the server should use to determine when to trigger a notification for this topic." )
605        protected StringType fhirPathCriteria;
606
607        private static final long serialVersionUID = -1086940999L;
608
609    /**
610     * Constructor
611     */
612      public SubscriptionTopicResourceTriggerComponent() {
613        super();
614      }
615
616    /**
617     * Constructor
618     */
619      public SubscriptionTopicResourceTriggerComponent(String resource) {
620        super();
621        this.setResource(resource);
622      }
623
624        /**
625         * @return {@link #description} (The human readable description of this resource trigger for the SubscriptionTopic -  for example, "An Encounter enters the 'in-progress' state".). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
626         */
627        public MarkdownType getDescriptionElement() { 
628          if (this.description == null)
629            if (Configuration.errorOnAutoCreate())
630              throw new Error("Attempt to auto-create SubscriptionTopicResourceTriggerComponent.description");
631            else if (Configuration.doAutoCreate())
632              this.description = new MarkdownType(); // bb
633          return this.description;
634        }
635
636        public boolean hasDescriptionElement() { 
637          return this.description != null && !this.description.isEmpty();
638        }
639
640        public boolean hasDescription() { 
641          return this.description != null && !this.description.isEmpty();
642        }
643
644        /**
645         * @param value {@link #description} (The human readable description of this resource trigger for the SubscriptionTopic -  for example, "An Encounter enters the 'in-progress' state".). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
646         */
647        public SubscriptionTopicResourceTriggerComponent setDescriptionElement(MarkdownType value) { 
648          this.description = value;
649          return this;
650        }
651
652        /**
653         * @return The human readable description of this resource trigger for the SubscriptionTopic -  for example, "An Encounter enters the 'in-progress' state".
654         */
655        public String getDescription() { 
656          return this.description == null ? null : this.description.getValue();
657        }
658
659        /**
660         * @param value The human readable description of this resource trigger for the SubscriptionTopic -  for example, "An Encounter enters the 'in-progress' state".
661         */
662        public SubscriptionTopicResourceTriggerComponent setDescription(String value) { 
663          if (value == null)
664            this.description = null;
665          else {
666            if (this.description == null)
667              this.description = new MarkdownType();
668            this.description.setValue(value);
669          }
670          return this;
671        }
672
673        /**
674         * @return {@link #resource} (URL of the Resource that is the type used in this resource trigger.  Relative URLs are relative to the StructureDefinition root of the implemented FHIR version (e.g., http://hl7.org/fhir/StructureDefinition). For example, "Patient" maps to http://hl7.org/fhir/StructureDefinition/Patient.  For more information, see <a href="elementdefinition-definitions.html#ElementDefinition.type.code">ElementDefinition.type.code</a>.). This is the underlying object with id, value and extensions. The accessor "getResource" gives direct access to the value
675         */
676        public UriType getResourceElement() { 
677          if (this.resource == null)
678            if (Configuration.errorOnAutoCreate())
679              throw new Error("Attempt to auto-create SubscriptionTopicResourceTriggerComponent.resource");
680            else if (Configuration.doAutoCreate())
681              this.resource = new UriType(); // bb
682          return this.resource;
683        }
684
685        public boolean hasResourceElement() { 
686          return this.resource != null && !this.resource.isEmpty();
687        }
688
689        public boolean hasResource() { 
690          return this.resource != null && !this.resource.isEmpty();
691        }
692
693        /**
694         * @param value {@link #resource} (URL of the Resource that is the type used in this resource trigger.  Relative URLs are relative to the StructureDefinition root of the implemented FHIR version (e.g., http://hl7.org/fhir/StructureDefinition). For example, "Patient" maps to http://hl7.org/fhir/StructureDefinition/Patient.  For more information, see <a href="elementdefinition-definitions.html#ElementDefinition.type.code">ElementDefinition.type.code</a>.). This is the underlying object with id, value and extensions. The accessor "getResource" gives direct access to the value
695         */
696        public SubscriptionTopicResourceTriggerComponent setResourceElement(UriType value) { 
697          this.resource = value;
698          return this;
699        }
700
701        /**
702         * @return URL of the Resource that is the type used in this resource trigger.  Relative URLs are relative to the StructureDefinition root of the implemented FHIR version (e.g., http://hl7.org/fhir/StructureDefinition). For example, "Patient" maps to http://hl7.org/fhir/StructureDefinition/Patient.  For more information, see <a href="elementdefinition-definitions.html#ElementDefinition.type.code">ElementDefinition.type.code</a>.
703         */
704        public String getResource() { 
705          return this.resource == null ? null : this.resource.getValue();
706        }
707
708        /**
709         * @param value URL of the Resource that is the type used in this resource trigger.  Relative URLs are relative to the StructureDefinition root of the implemented FHIR version (e.g., http://hl7.org/fhir/StructureDefinition). For example, "Patient" maps to http://hl7.org/fhir/StructureDefinition/Patient.  For more information, see <a href="elementdefinition-definitions.html#ElementDefinition.type.code">ElementDefinition.type.code</a>.
710         */
711        public SubscriptionTopicResourceTriggerComponent setResource(String value) { 
712            if (this.resource == null)
713              this.resource = new UriType();
714            this.resource.setValue(value);
715          return this;
716        }
717
718        /**
719         * @return {@link #supportedInteraction} (The FHIR RESTful interaction which can be used to trigger a notification for the SubscriptionTopic. Multiple values are considered OR joined (e.g., CREATE or UPDATE).)
720         */
721        public List<Enumeration<InteractionTrigger>> getSupportedInteraction() { 
722          if (this.supportedInteraction == null)
723            this.supportedInteraction = new ArrayList<Enumeration<InteractionTrigger>>();
724          return this.supportedInteraction;
725        }
726
727        /**
728         * @return Returns a reference to <code>this</code> for easy method chaining
729         */
730        public SubscriptionTopicResourceTriggerComponent setSupportedInteraction(List<Enumeration<InteractionTrigger>> theSupportedInteraction) { 
731          this.supportedInteraction = theSupportedInteraction;
732          return this;
733        }
734
735        public boolean hasSupportedInteraction() { 
736          if (this.supportedInteraction == null)
737            return false;
738          for (Enumeration<InteractionTrigger> item : this.supportedInteraction)
739            if (!item.isEmpty())
740              return true;
741          return false;
742        }
743
744        /**
745         * @return {@link #supportedInteraction} (The FHIR RESTful interaction which can be used to trigger a notification for the SubscriptionTopic. Multiple values are considered OR joined (e.g., CREATE or UPDATE).)
746         */
747        public Enumeration<InteractionTrigger> addSupportedInteractionElement() {//2 
748          Enumeration<InteractionTrigger> t = new Enumeration<InteractionTrigger>(new InteractionTriggerEnumFactory());
749          if (this.supportedInteraction == null)
750            this.supportedInteraction = new ArrayList<Enumeration<InteractionTrigger>>();
751          this.supportedInteraction.add(t);
752          return t;
753        }
754
755        /**
756         * @param value {@link #supportedInteraction} (The FHIR RESTful interaction which can be used to trigger a notification for the SubscriptionTopic. Multiple values are considered OR joined (e.g., CREATE or UPDATE).)
757         */
758        public SubscriptionTopicResourceTriggerComponent addSupportedInteraction(InteractionTrigger value) { //1
759          Enumeration<InteractionTrigger> t = new Enumeration<InteractionTrigger>(new InteractionTriggerEnumFactory());
760          t.setValue(value);
761          if (this.supportedInteraction == null)
762            this.supportedInteraction = new ArrayList<Enumeration<InteractionTrigger>>();
763          this.supportedInteraction.add(t);
764          return this;
765        }
766
767        /**
768         * @param value {@link #supportedInteraction} (The FHIR RESTful interaction which can be used to trigger a notification for the SubscriptionTopic. Multiple values are considered OR joined (e.g., CREATE or UPDATE).)
769         */
770        public boolean hasSupportedInteraction(InteractionTrigger value) { 
771          if (this.supportedInteraction == null)
772            return false;
773          for (Enumeration<InteractionTrigger> v : this.supportedInteraction)
774            if (v.getValue().equals(value)) // code
775              return true;
776          return false;
777        }
778
779        /**
780         * @return {@link #queryCriteria} (The FHIR query based rules that the server should use to determine when to trigger a notification for this subscription topic.)
781         */
782        public SubscriptionTopicResourceTriggerQueryCriteriaComponent getQueryCriteria() { 
783          if (this.queryCriteria == null)
784            if (Configuration.errorOnAutoCreate())
785              throw new Error("Attempt to auto-create SubscriptionTopicResourceTriggerComponent.queryCriteria");
786            else if (Configuration.doAutoCreate())
787              this.queryCriteria = new SubscriptionTopicResourceTriggerQueryCriteriaComponent(); // cc
788          return this.queryCriteria;
789        }
790
791        public boolean hasQueryCriteria() { 
792          return this.queryCriteria != null && !this.queryCriteria.isEmpty();
793        }
794
795        /**
796         * @param value {@link #queryCriteria} (The FHIR query based rules that the server should use to determine when to trigger a notification for this subscription topic.)
797         */
798        public SubscriptionTopicResourceTriggerComponent setQueryCriteria(SubscriptionTopicResourceTriggerQueryCriteriaComponent value) { 
799          this.queryCriteria = value;
800          return this;
801        }
802
803        /**
804         * @return {@link #fhirPathCriteria} (The FHIRPath based rules that the server should use to determine when to trigger a notification for this topic.). This is the underlying object with id, value and extensions. The accessor "getFhirPathCriteria" gives direct access to the value
805         */
806        public StringType getFhirPathCriteriaElement() { 
807          if (this.fhirPathCriteria == null)
808            if (Configuration.errorOnAutoCreate())
809              throw new Error("Attempt to auto-create SubscriptionTopicResourceTriggerComponent.fhirPathCriteria");
810            else if (Configuration.doAutoCreate())
811              this.fhirPathCriteria = new StringType(); // bb
812          return this.fhirPathCriteria;
813        }
814
815        public boolean hasFhirPathCriteriaElement() { 
816          return this.fhirPathCriteria != null && !this.fhirPathCriteria.isEmpty();
817        }
818
819        public boolean hasFhirPathCriteria() { 
820          return this.fhirPathCriteria != null && !this.fhirPathCriteria.isEmpty();
821        }
822
823        /**
824         * @param value {@link #fhirPathCriteria} (The FHIRPath based rules that the server should use to determine when to trigger a notification for this topic.). This is the underlying object with id, value and extensions. The accessor "getFhirPathCriteria" gives direct access to the value
825         */
826        public SubscriptionTopicResourceTriggerComponent setFhirPathCriteriaElement(StringType value) { 
827          this.fhirPathCriteria = value;
828          return this;
829        }
830
831        /**
832         * @return The FHIRPath based rules that the server should use to determine when to trigger a notification for this topic.
833         */
834        public String getFhirPathCriteria() { 
835          return this.fhirPathCriteria == null ? null : this.fhirPathCriteria.getValue();
836        }
837
838        /**
839         * @param value The FHIRPath based rules that the server should use to determine when to trigger a notification for this topic.
840         */
841        public SubscriptionTopicResourceTriggerComponent setFhirPathCriteria(String value) { 
842          if (Utilities.noString(value))
843            this.fhirPathCriteria = null;
844          else {
845            if (this.fhirPathCriteria == null)
846              this.fhirPathCriteria = new StringType();
847            this.fhirPathCriteria.setValue(value);
848          }
849          return this;
850        }
851
852        protected void listChildren(List<Property> children) {
853          super.listChildren(children);
854          children.add(new Property("description", "markdown", "The human readable description of this resource trigger for the SubscriptionTopic -  for example, \"An Encounter enters the 'in-progress' state\".", 0, 1, description));
855          children.add(new Property("resource", "uri", "URL of the Resource that is the type used in this resource trigger.  Relative URLs are relative to the StructureDefinition root of the implemented FHIR version (e.g., http://hl7.org/fhir/StructureDefinition). For example, \"Patient\" maps to http://hl7.org/fhir/StructureDefinition/Patient.  For more information, see <a href=\"elementdefinition-definitions.html#ElementDefinition.type.code\">ElementDefinition.type.code</a>.", 0, 1, resource));
856          children.add(new Property("supportedInteraction", "code", "The FHIR RESTful interaction which can be used to trigger a notification for the SubscriptionTopic. Multiple values are considered OR joined (e.g., CREATE or UPDATE).", 0, java.lang.Integer.MAX_VALUE, supportedInteraction));
857          children.add(new Property("queryCriteria", "", "The FHIR query based rules that the server should use to determine when to trigger a notification for this subscription topic.", 0, 1, queryCriteria));
858          children.add(new Property("fhirPathCriteria", "string", "The FHIRPath based rules that the server should use to determine when to trigger a notification for this topic.", 0, 1, fhirPathCriteria));
859        }
860
861        @Override
862        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
863          switch (_hash) {
864          case -1724546052: /*description*/  return new Property("description", "markdown", "The human readable description of this resource trigger for the SubscriptionTopic -  for example, \"An Encounter enters the 'in-progress' state\".", 0, 1, description);
865          case -341064690: /*resource*/  return new Property("resource", "uri", "URL of the Resource that is the type used in this resource trigger.  Relative URLs are relative to the StructureDefinition root of the implemented FHIR version (e.g., http://hl7.org/fhir/StructureDefinition). For example, \"Patient\" maps to http://hl7.org/fhir/StructureDefinition/Patient.  For more information, see <a href=\"elementdefinition-definitions.html#ElementDefinition.type.code\">ElementDefinition.type.code</a>.", 0, 1, resource);
866          case 1838450820: /*supportedInteraction*/  return new Property("supportedInteraction", "code", "The FHIR RESTful interaction which can be used to trigger a notification for the SubscriptionTopic. Multiple values are considered OR joined (e.g., CREATE or UPDATE).", 0, java.lang.Integer.MAX_VALUE, supportedInteraction);
867          case -545123257: /*queryCriteria*/  return new Property("queryCriteria", "", "The FHIR query based rules that the server should use to determine when to trigger a notification for this subscription topic.", 0, 1, queryCriteria);
868          case 1929785263: /*fhirPathCriteria*/  return new Property("fhirPathCriteria", "string", "The FHIRPath based rules that the server should use to determine when to trigger a notification for this topic.", 0, 1, fhirPathCriteria);
869          default: return super.getNamedProperty(_hash, _name, _checkValid);
870          }
871
872        }
873
874      @Override
875      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
876        switch (hash) {
877        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
878        case -341064690: /*resource*/ return this.resource == null ? new Base[0] : new Base[] {this.resource}; // UriType
879        case 1838450820: /*supportedInteraction*/ return this.supportedInteraction == null ? new Base[0] : this.supportedInteraction.toArray(new Base[this.supportedInteraction.size()]); // Enumeration<InteractionTrigger>
880        case -545123257: /*queryCriteria*/ return this.queryCriteria == null ? new Base[0] : new Base[] {this.queryCriteria}; // SubscriptionTopicResourceTriggerQueryCriteriaComponent
881        case 1929785263: /*fhirPathCriteria*/ return this.fhirPathCriteria == null ? new Base[0] : new Base[] {this.fhirPathCriteria}; // StringType
882        default: return super.getProperty(hash, name, checkValid);
883        }
884
885      }
886
887      @Override
888      public Base setProperty(int hash, String name, Base value) throws FHIRException {
889        switch (hash) {
890        case -1724546052: // description
891          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
892          return value;
893        case -341064690: // resource
894          this.resource = TypeConvertor.castToUri(value); // UriType
895          return value;
896        case 1838450820: // supportedInteraction
897          value = new InteractionTriggerEnumFactory().fromType(TypeConvertor.castToCode(value));
898          this.getSupportedInteraction().add((Enumeration) value); // Enumeration<InteractionTrigger>
899          return value;
900        case -545123257: // queryCriteria
901          this.queryCriteria = (SubscriptionTopicResourceTriggerQueryCriteriaComponent) value; // SubscriptionTopicResourceTriggerQueryCriteriaComponent
902          return value;
903        case 1929785263: // fhirPathCriteria
904          this.fhirPathCriteria = TypeConvertor.castToString(value); // StringType
905          return value;
906        default: return super.setProperty(hash, name, value);
907        }
908
909      }
910
911      @Override
912      public Base setProperty(String name, Base value) throws FHIRException {
913        if (name.equals("description")) {
914          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
915        } else if (name.equals("resource")) {
916          this.resource = TypeConvertor.castToUri(value); // UriType
917        } else if (name.equals("supportedInteraction")) {
918          value = new InteractionTriggerEnumFactory().fromType(TypeConvertor.castToCode(value));
919          this.getSupportedInteraction().add((Enumeration) value);
920        } else if (name.equals("queryCriteria")) {
921          this.queryCriteria = (SubscriptionTopicResourceTriggerQueryCriteriaComponent) value; // SubscriptionTopicResourceTriggerQueryCriteriaComponent
922        } else if (name.equals("fhirPathCriteria")) {
923          this.fhirPathCriteria = TypeConvertor.castToString(value); // StringType
924        } else
925          return super.setProperty(name, value);
926        return value;
927      }
928
929      @Override
930      public Base makeProperty(int hash, String name) throws FHIRException {
931        switch (hash) {
932        case -1724546052:  return getDescriptionElement();
933        case -341064690:  return getResourceElement();
934        case 1838450820:  return addSupportedInteractionElement();
935        case -545123257:  return getQueryCriteria();
936        case 1929785263:  return getFhirPathCriteriaElement();
937        default: return super.makeProperty(hash, name);
938        }
939
940      }
941
942      @Override
943      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
944        switch (hash) {
945        case -1724546052: /*description*/ return new String[] {"markdown"};
946        case -341064690: /*resource*/ return new String[] {"uri"};
947        case 1838450820: /*supportedInteraction*/ return new String[] {"code"};
948        case -545123257: /*queryCriteria*/ return new String[] {};
949        case 1929785263: /*fhirPathCriteria*/ return new String[] {"string"};
950        default: return super.getTypesForProperty(hash, name);
951        }
952
953      }
954
955      @Override
956      public Base addChild(String name) throws FHIRException {
957        if (name.equals("description")) {
958          throw new FHIRException("Cannot call addChild on a primitive type SubscriptionTopic.resourceTrigger.description");
959        }
960        else if (name.equals("resource")) {
961          throw new FHIRException("Cannot call addChild on a primitive type SubscriptionTopic.resourceTrigger.resource");
962        }
963        else if (name.equals("supportedInteraction")) {
964          throw new FHIRException("Cannot call addChild on a primitive type SubscriptionTopic.resourceTrigger.supportedInteraction");
965        }
966        else if (name.equals("queryCriteria")) {
967          this.queryCriteria = new SubscriptionTopicResourceTriggerQueryCriteriaComponent();
968          return this.queryCriteria;
969        }
970        else if (name.equals("fhirPathCriteria")) {
971          throw new FHIRException("Cannot call addChild on a primitive type SubscriptionTopic.resourceTrigger.fhirPathCriteria");
972        }
973        else
974          return super.addChild(name);
975      }
976
977      public SubscriptionTopicResourceTriggerComponent copy() {
978        SubscriptionTopicResourceTriggerComponent dst = new SubscriptionTopicResourceTriggerComponent();
979        copyValues(dst);
980        return dst;
981      }
982
983      public void copyValues(SubscriptionTopicResourceTriggerComponent dst) {
984        super.copyValues(dst);
985        dst.description = description == null ? null : description.copy();
986        dst.resource = resource == null ? null : resource.copy();
987        if (supportedInteraction != null) {
988          dst.supportedInteraction = new ArrayList<Enumeration<InteractionTrigger>>();
989          for (Enumeration<InteractionTrigger> i : supportedInteraction)
990            dst.supportedInteraction.add(i.copy());
991        };
992        dst.queryCriteria = queryCriteria == null ? null : queryCriteria.copy();
993        dst.fhirPathCriteria = fhirPathCriteria == null ? null : fhirPathCriteria.copy();
994      }
995
996      @Override
997      public boolean equalsDeep(Base other_) {
998        if (!super.equalsDeep(other_))
999          return false;
1000        if (!(other_ instanceof SubscriptionTopicResourceTriggerComponent))
1001          return false;
1002        SubscriptionTopicResourceTriggerComponent o = (SubscriptionTopicResourceTriggerComponent) other_;
1003        return compareDeep(description, o.description, true) && compareDeep(resource, o.resource, true)
1004           && compareDeep(supportedInteraction, o.supportedInteraction, true) && compareDeep(queryCriteria, o.queryCriteria, true)
1005           && compareDeep(fhirPathCriteria, o.fhirPathCriteria, true);
1006      }
1007
1008      @Override
1009      public boolean equalsShallow(Base other_) {
1010        if (!super.equalsShallow(other_))
1011          return false;
1012        if (!(other_ instanceof SubscriptionTopicResourceTriggerComponent))
1013          return false;
1014        SubscriptionTopicResourceTriggerComponent o = (SubscriptionTopicResourceTriggerComponent) other_;
1015        return compareValues(description, o.description, true) && compareValues(resource, o.resource, true)
1016           && compareValues(supportedInteraction, o.supportedInteraction, true) && compareValues(fhirPathCriteria, o.fhirPathCriteria, true)
1017          ;
1018      }
1019
1020      public boolean isEmpty() {
1021        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(description, resource, supportedInteraction
1022          , queryCriteria, fhirPathCriteria);
1023      }
1024
1025  public String fhirType() {
1026    return "SubscriptionTopic.resourceTrigger";
1027
1028  }
1029
1030  }
1031
1032    @Block()
1033    public static class SubscriptionTopicResourceTriggerQueryCriteriaComponent extends BackboneElement implements IBaseBackboneElement {
1034        /**
1035         * The FHIR query based rules are applied to the previous resource state (e.g., state before an update).
1036         */
1037        @Child(name = "previous", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=true)
1038        @Description(shortDefinition="Rule applied to previous resource state", formalDefinition="The FHIR query based rules are applied to the previous resource state (e.g., state before an update)." )
1039        protected StringType previous;
1040
1041        /**
1042         * What behavior a server will exhibit if the previous state of a resource does NOT exist (e.g., prior to a create).
1043         */
1044        @Child(name = "resultForCreate", type = {CodeType.class}, order=2, min=0, max=1, modifier=false, summary=true)
1045        @Description(shortDefinition="test-passes | test-fails", formalDefinition="What behavior a server will exhibit if the previous state of a resource does NOT exist (e.g., prior to a create)." )
1046        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/subscriptiontopic-cr-behavior")
1047        protected Enumeration<CriteriaNotExistsBehavior> resultForCreate;
1048
1049        /**
1050         * The FHIR query based rules are applied to the current resource state (e.g., state after an update).
1051         */
1052        @Child(name = "current", type = {StringType.class}, order=3, min=0, max=1, modifier=false, summary=true)
1053        @Description(shortDefinition="Rule applied to current resource state", formalDefinition="The FHIR query based rules are applied to the current resource state (e.g., state after an update)." )
1054        protected StringType current;
1055
1056        /**
1057         * What behavior a server will exhibit if the current state of a resource does NOT exist (e.g., after a DELETE).
1058         */
1059        @Child(name = "resultForDelete", type = {CodeType.class}, order=4, min=0, max=1, modifier=false, summary=true)
1060        @Description(shortDefinition="test-passes | test-fails", formalDefinition="What behavior a server will exhibit if the current state of a resource does NOT exist (e.g., after a DELETE)." )
1061        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/subscriptiontopic-cr-behavior")
1062        protected Enumeration<CriteriaNotExistsBehavior> resultForDelete;
1063
1064        /**
1065         * If set to true, both current and previous criteria must evaluate true to  trigger a notification for this topic.  Otherwise a notification for this topic will be triggered if either one evaluates to true.
1066         */
1067        @Child(name = "requireBoth", type = {BooleanType.class}, order=5, min=0, max=1, modifier=false, summary=true)
1068        @Description(shortDefinition="Both must be true flag", formalDefinition="If set to true, both current and previous criteria must evaluate true to  trigger a notification for this topic.  Otherwise a notification for this topic will be triggered if either one evaluates to true." )
1069        protected BooleanType requireBoth;
1070
1071        private static final long serialVersionUID = -291746067L;
1072
1073    /**
1074     * Constructor
1075     */
1076      public SubscriptionTopicResourceTriggerQueryCriteriaComponent() {
1077        super();
1078      }
1079
1080        /**
1081         * @return {@link #previous} (The FHIR query based rules are applied to the previous resource state (e.g., state before an update).). This is the underlying object with id, value and extensions. The accessor "getPrevious" gives direct access to the value
1082         */
1083        public StringType getPreviousElement() { 
1084          if (this.previous == null)
1085            if (Configuration.errorOnAutoCreate())
1086              throw new Error("Attempt to auto-create SubscriptionTopicResourceTriggerQueryCriteriaComponent.previous");
1087            else if (Configuration.doAutoCreate())
1088              this.previous = new StringType(); // bb
1089          return this.previous;
1090        }
1091
1092        public boolean hasPreviousElement() { 
1093          return this.previous != null && !this.previous.isEmpty();
1094        }
1095
1096        public boolean hasPrevious() { 
1097          return this.previous != null && !this.previous.isEmpty();
1098        }
1099
1100        /**
1101         * @param value {@link #previous} (The FHIR query based rules are applied to the previous resource state (e.g., state before an update).). This is the underlying object with id, value and extensions. The accessor "getPrevious" gives direct access to the value
1102         */
1103        public SubscriptionTopicResourceTriggerQueryCriteriaComponent setPreviousElement(StringType value) { 
1104          this.previous = value;
1105          return this;
1106        }
1107
1108        /**
1109         * @return The FHIR query based rules are applied to the previous resource state (e.g., state before an update).
1110         */
1111        public String getPrevious() { 
1112          return this.previous == null ? null : this.previous.getValue();
1113        }
1114
1115        /**
1116         * @param value The FHIR query based rules are applied to the previous resource state (e.g., state before an update).
1117         */
1118        public SubscriptionTopicResourceTriggerQueryCriteriaComponent setPrevious(String value) { 
1119          if (Utilities.noString(value))
1120            this.previous = null;
1121          else {
1122            if (this.previous == null)
1123              this.previous = new StringType();
1124            this.previous.setValue(value);
1125          }
1126          return this;
1127        }
1128
1129        /**
1130         * @return {@link #resultForCreate} (What behavior a server will exhibit if the previous state of a resource does NOT exist (e.g., prior to a create).). This is the underlying object with id, value and extensions. The accessor "getResultForCreate" gives direct access to the value
1131         */
1132        public Enumeration<CriteriaNotExistsBehavior> getResultForCreateElement() { 
1133          if (this.resultForCreate == null)
1134            if (Configuration.errorOnAutoCreate())
1135              throw new Error("Attempt to auto-create SubscriptionTopicResourceTriggerQueryCriteriaComponent.resultForCreate");
1136            else if (Configuration.doAutoCreate())
1137              this.resultForCreate = new Enumeration<CriteriaNotExistsBehavior>(new CriteriaNotExistsBehaviorEnumFactory()); // bb
1138          return this.resultForCreate;
1139        }
1140
1141        public boolean hasResultForCreateElement() { 
1142          return this.resultForCreate != null && !this.resultForCreate.isEmpty();
1143        }
1144
1145        public boolean hasResultForCreate() { 
1146          return this.resultForCreate != null && !this.resultForCreate.isEmpty();
1147        }
1148
1149        /**
1150         * @param value {@link #resultForCreate} (What behavior a server will exhibit if the previous state of a resource does NOT exist (e.g., prior to a create).). This is the underlying object with id, value and extensions. The accessor "getResultForCreate" gives direct access to the value
1151         */
1152        public SubscriptionTopicResourceTriggerQueryCriteriaComponent setResultForCreateElement(Enumeration<CriteriaNotExistsBehavior> value) { 
1153          this.resultForCreate = value;
1154          return this;
1155        }
1156
1157        /**
1158         * @return What behavior a server will exhibit if the previous state of a resource does NOT exist (e.g., prior to a create).
1159         */
1160        public CriteriaNotExistsBehavior getResultForCreate() { 
1161          return this.resultForCreate == null ? null : this.resultForCreate.getValue();
1162        }
1163
1164        /**
1165         * @param value What behavior a server will exhibit if the previous state of a resource does NOT exist (e.g., prior to a create).
1166         */
1167        public SubscriptionTopicResourceTriggerQueryCriteriaComponent setResultForCreate(CriteriaNotExistsBehavior value) { 
1168          if (value == null)
1169            this.resultForCreate = null;
1170          else {
1171            if (this.resultForCreate == null)
1172              this.resultForCreate = new Enumeration<CriteriaNotExistsBehavior>(new CriteriaNotExistsBehaviorEnumFactory());
1173            this.resultForCreate.setValue(value);
1174          }
1175          return this;
1176        }
1177
1178        /**
1179         * @return {@link #current} (The FHIR query based rules are applied to the current resource state (e.g., state after an update).). This is the underlying object with id, value and extensions. The accessor "getCurrent" gives direct access to the value
1180         */
1181        public StringType getCurrentElement() { 
1182          if (this.current == null)
1183            if (Configuration.errorOnAutoCreate())
1184              throw new Error("Attempt to auto-create SubscriptionTopicResourceTriggerQueryCriteriaComponent.current");
1185            else if (Configuration.doAutoCreate())
1186              this.current = new StringType(); // bb
1187          return this.current;
1188        }
1189
1190        public boolean hasCurrentElement() { 
1191          return this.current != null && !this.current.isEmpty();
1192        }
1193
1194        public boolean hasCurrent() { 
1195          return this.current != null && !this.current.isEmpty();
1196        }
1197
1198        /**
1199         * @param value {@link #current} (The FHIR query based rules are applied to the current resource state (e.g., state after an update).). This is the underlying object with id, value and extensions. The accessor "getCurrent" gives direct access to the value
1200         */
1201        public SubscriptionTopicResourceTriggerQueryCriteriaComponent setCurrentElement(StringType value) { 
1202          this.current = value;
1203          return this;
1204        }
1205
1206        /**
1207         * @return The FHIR query based rules are applied to the current resource state (e.g., state after an update).
1208         */
1209        public String getCurrent() { 
1210          return this.current == null ? null : this.current.getValue();
1211        }
1212
1213        /**
1214         * @param value The FHIR query based rules are applied to the current resource state (e.g., state after an update).
1215         */
1216        public SubscriptionTopicResourceTriggerQueryCriteriaComponent setCurrent(String value) { 
1217          if (Utilities.noString(value))
1218            this.current = null;
1219          else {
1220            if (this.current == null)
1221              this.current = new StringType();
1222            this.current.setValue(value);
1223          }
1224          return this;
1225        }
1226
1227        /**
1228         * @return {@link #resultForDelete} (What behavior a server will exhibit if the current state of a resource does NOT exist (e.g., after a DELETE).). This is the underlying object with id, value and extensions. The accessor "getResultForDelete" gives direct access to the value
1229         */
1230        public Enumeration<CriteriaNotExistsBehavior> getResultForDeleteElement() { 
1231          if (this.resultForDelete == null)
1232            if (Configuration.errorOnAutoCreate())
1233              throw new Error("Attempt to auto-create SubscriptionTopicResourceTriggerQueryCriteriaComponent.resultForDelete");
1234            else if (Configuration.doAutoCreate())
1235              this.resultForDelete = new Enumeration<CriteriaNotExistsBehavior>(new CriteriaNotExistsBehaviorEnumFactory()); // bb
1236          return this.resultForDelete;
1237        }
1238
1239        public boolean hasResultForDeleteElement() { 
1240          return this.resultForDelete != null && !this.resultForDelete.isEmpty();
1241        }
1242
1243        public boolean hasResultForDelete() { 
1244          return this.resultForDelete != null && !this.resultForDelete.isEmpty();
1245        }
1246
1247        /**
1248         * @param value {@link #resultForDelete} (What behavior a server will exhibit if the current state of a resource does NOT exist (e.g., after a DELETE).). This is the underlying object with id, value and extensions. The accessor "getResultForDelete" gives direct access to the value
1249         */
1250        public SubscriptionTopicResourceTriggerQueryCriteriaComponent setResultForDeleteElement(Enumeration<CriteriaNotExistsBehavior> value) { 
1251          this.resultForDelete = value;
1252          return this;
1253        }
1254
1255        /**
1256         * @return What behavior a server will exhibit if the current state of a resource does NOT exist (e.g., after a DELETE).
1257         */
1258        public CriteriaNotExistsBehavior getResultForDelete() { 
1259          return this.resultForDelete == null ? null : this.resultForDelete.getValue();
1260        }
1261
1262        /**
1263         * @param value What behavior a server will exhibit if the current state of a resource does NOT exist (e.g., after a DELETE).
1264         */
1265        public SubscriptionTopicResourceTriggerQueryCriteriaComponent setResultForDelete(CriteriaNotExistsBehavior value) { 
1266          if (value == null)
1267            this.resultForDelete = null;
1268          else {
1269            if (this.resultForDelete == null)
1270              this.resultForDelete = new Enumeration<CriteriaNotExistsBehavior>(new CriteriaNotExistsBehaviorEnumFactory());
1271            this.resultForDelete.setValue(value);
1272          }
1273          return this;
1274        }
1275
1276        /**
1277         * @return {@link #requireBoth} (If set to true, both current and previous criteria must evaluate true to  trigger a notification for this topic.  Otherwise a notification for this topic will be triggered if either one evaluates to true.). This is the underlying object with id, value and extensions. The accessor "getRequireBoth" gives direct access to the value
1278         */
1279        public BooleanType getRequireBothElement() { 
1280          if (this.requireBoth == null)
1281            if (Configuration.errorOnAutoCreate())
1282              throw new Error("Attempt to auto-create SubscriptionTopicResourceTriggerQueryCriteriaComponent.requireBoth");
1283            else if (Configuration.doAutoCreate())
1284              this.requireBoth = new BooleanType(); // bb
1285          return this.requireBoth;
1286        }
1287
1288        public boolean hasRequireBothElement() { 
1289          return this.requireBoth != null && !this.requireBoth.isEmpty();
1290        }
1291
1292        public boolean hasRequireBoth() { 
1293          return this.requireBoth != null && !this.requireBoth.isEmpty();
1294        }
1295
1296        /**
1297         * @param value {@link #requireBoth} (If set to true, both current and previous criteria must evaluate true to  trigger a notification for this topic.  Otherwise a notification for this topic will be triggered if either one evaluates to true.). This is the underlying object with id, value and extensions. The accessor "getRequireBoth" gives direct access to the value
1298         */
1299        public SubscriptionTopicResourceTriggerQueryCriteriaComponent setRequireBothElement(BooleanType value) { 
1300          this.requireBoth = value;
1301          return this;
1302        }
1303
1304        /**
1305         * @return If set to true, both current and previous criteria must evaluate true to  trigger a notification for this topic.  Otherwise a notification for this topic will be triggered if either one evaluates to true.
1306         */
1307        public boolean getRequireBoth() { 
1308          return this.requireBoth == null || this.requireBoth.isEmpty() ? false : this.requireBoth.getValue();
1309        }
1310
1311        /**
1312         * @param value If set to true, both current and previous criteria must evaluate true to  trigger a notification for this topic.  Otherwise a notification for this topic will be triggered if either one evaluates to true.
1313         */
1314        public SubscriptionTopicResourceTriggerQueryCriteriaComponent setRequireBoth(boolean value) { 
1315            if (this.requireBoth == null)
1316              this.requireBoth = new BooleanType();
1317            this.requireBoth.setValue(value);
1318          return this;
1319        }
1320
1321        protected void listChildren(List<Property> children) {
1322          super.listChildren(children);
1323          children.add(new Property("previous", "string", "The FHIR query based rules are applied to the previous resource state (e.g., state before an update).", 0, 1, previous));
1324          children.add(new Property("resultForCreate", "code", "What behavior a server will exhibit if the previous state of a resource does NOT exist (e.g., prior to a create).", 0, 1, resultForCreate));
1325          children.add(new Property("current", "string", "The FHIR query based rules are applied to the current resource state (e.g., state after an update).", 0, 1, current));
1326          children.add(new Property("resultForDelete", "code", "What behavior a server will exhibit if the current state of a resource does NOT exist (e.g., after a DELETE).", 0, 1, resultForDelete));
1327          children.add(new Property("requireBoth", "boolean", "If set to true, both current and previous criteria must evaluate true to  trigger a notification for this topic.  Otherwise a notification for this topic will be triggered if either one evaluates to true.", 0, 1, requireBoth));
1328        }
1329
1330        @Override
1331        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1332          switch (_hash) {
1333          case -1273775369: /*previous*/  return new Property("previous", "string", "The FHIR query based rules are applied to the previous resource state (e.g., state before an update).", 0, 1, previous);
1334          case -407976056: /*resultForCreate*/  return new Property("resultForCreate", "code", "What behavior a server will exhibit if the previous state of a resource does NOT exist (e.g., prior to a create).", 0, 1, resultForCreate);
1335          case 1126940025: /*current*/  return new Property("current", "string", "The FHIR query based rules are applied to the current resource state (e.g., state after an update).", 0, 1, current);
1336          case -391140297: /*resultForDelete*/  return new Property("resultForDelete", "code", "What behavior a server will exhibit if the current state of a resource does NOT exist (e.g., after a DELETE).", 0, 1, resultForDelete);
1337          case 362116742: /*requireBoth*/  return new Property("requireBoth", "boolean", "If set to true, both current and previous criteria must evaluate true to  trigger a notification for this topic.  Otherwise a notification for this topic will be triggered if either one evaluates to true.", 0, 1, requireBoth);
1338          default: return super.getNamedProperty(_hash, _name, _checkValid);
1339          }
1340
1341        }
1342
1343      @Override
1344      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1345        switch (hash) {
1346        case -1273775369: /*previous*/ return this.previous == null ? new Base[0] : new Base[] {this.previous}; // StringType
1347        case -407976056: /*resultForCreate*/ return this.resultForCreate == null ? new Base[0] : new Base[] {this.resultForCreate}; // Enumeration<CriteriaNotExistsBehavior>
1348        case 1126940025: /*current*/ return this.current == null ? new Base[0] : new Base[] {this.current}; // StringType
1349        case -391140297: /*resultForDelete*/ return this.resultForDelete == null ? new Base[0] : new Base[] {this.resultForDelete}; // Enumeration<CriteriaNotExistsBehavior>
1350        case 362116742: /*requireBoth*/ return this.requireBoth == null ? new Base[0] : new Base[] {this.requireBoth}; // BooleanType
1351        default: return super.getProperty(hash, name, checkValid);
1352        }
1353
1354      }
1355
1356      @Override
1357      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1358        switch (hash) {
1359        case -1273775369: // previous
1360          this.previous = TypeConvertor.castToString(value); // StringType
1361          return value;
1362        case -407976056: // resultForCreate
1363          value = new CriteriaNotExistsBehaviorEnumFactory().fromType(TypeConvertor.castToCode(value));
1364          this.resultForCreate = (Enumeration) value; // Enumeration<CriteriaNotExistsBehavior>
1365          return value;
1366        case 1126940025: // current
1367          this.current = TypeConvertor.castToString(value); // StringType
1368          return value;
1369        case -391140297: // resultForDelete
1370          value = new CriteriaNotExistsBehaviorEnumFactory().fromType(TypeConvertor.castToCode(value));
1371          this.resultForDelete = (Enumeration) value; // Enumeration<CriteriaNotExistsBehavior>
1372          return value;
1373        case 362116742: // requireBoth
1374          this.requireBoth = TypeConvertor.castToBoolean(value); // BooleanType
1375          return value;
1376        default: return super.setProperty(hash, name, value);
1377        }
1378
1379      }
1380
1381      @Override
1382      public Base setProperty(String name, Base value) throws FHIRException {
1383        if (name.equals("previous")) {
1384          this.previous = TypeConvertor.castToString(value); // StringType
1385        } else if (name.equals("resultForCreate")) {
1386          value = new CriteriaNotExistsBehaviorEnumFactory().fromType(TypeConvertor.castToCode(value));
1387          this.resultForCreate = (Enumeration) value; // Enumeration<CriteriaNotExistsBehavior>
1388        } else if (name.equals("current")) {
1389          this.current = TypeConvertor.castToString(value); // StringType
1390        } else if (name.equals("resultForDelete")) {
1391          value = new CriteriaNotExistsBehaviorEnumFactory().fromType(TypeConvertor.castToCode(value));
1392          this.resultForDelete = (Enumeration) value; // Enumeration<CriteriaNotExistsBehavior>
1393        } else if (name.equals("requireBoth")) {
1394          this.requireBoth = TypeConvertor.castToBoolean(value); // BooleanType
1395        } else
1396          return super.setProperty(name, value);
1397        return value;
1398      }
1399
1400      @Override
1401      public Base makeProperty(int hash, String name) throws FHIRException {
1402        switch (hash) {
1403        case -1273775369:  return getPreviousElement();
1404        case -407976056:  return getResultForCreateElement();
1405        case 1126940025:  return getCurrentElement();
1406        case -391140297:  return getResultForDeleteElement();
1407        case 362116742:  return getRequireBothElement();
1408        default: return super.makeProperty(hash, name);
1409        }
1410
1411      }
1412
1413      @Override
1414      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1415        switch (hash) {
1416        case -1273775369: /*previous*/ return new String[] {"string"};
1417        case -407976056: /*resultForCreate*/ return new String[] {"code"};
1418        case 1126940025: /*current*/ return new String[] {"string"};
1419        case -391140297: /*resultForDelete*/ return new String[] {"code"};
1420        case 362116742: /*requireBoth*/ return new String[] {"boolean"};
1421        default: return super.getTypesForProperty(hash, name);
1422        }
1423
1424      }
1425
1426      @Override
1427      public Base addChild(String name) throws FHIRException {
1428        if (name.equals("previous")) {
1429          throw new FHIRException("Cannot call addChild on a primitive type SubscriptionTopic.resourceTrigger.queryCriteria.previous");
1430        }
1431        else if (name.equals("resultForCreate")) {
1432          throw new FHIRException("Cannot call addChild on a primitive type SubscriptionTopic.resourceTrigger.queryCriteria.resultForCreate");
1433        }
1434        else if (name.equals("current")) {
1435          throw new FHIRException("Cannot call addChild on a primitive type SubscriptionTopic.resourceTrigger.queryCriteria.current");
1436        }
1437        else if (name.equals("resultForDelete")) {
1438          throw new FHIRException("Cannot call addChild on a primitive type SubscriptionTopic.resourceTrigger.queryCriteria.resultForDelete");
1439        }
1440        else if (name.equals("requireBoth")) {
1441          throw new FHIRException("Cannot call addChild on a primitive type SubscriptionTopic.resourceTrigger.queryCriteria.requireBoth");
1442        }
1443        else
1444          return super.addChild(name);
1445      }
1446
1447      public SubscriptionTopicResourceTriggerQueryCriteriaComponent copy() {
1448        SubscriptionTopicResourceTriggerQueryCriteriaComponent dst = new SubscriptionTopicResourceTriggerQueryCriteriaComponent();
1449        copyValues(dst);
1450        return dst;
1451      }
1452
1453      public void copyValues(SubscriptionTopicResourceTriggerQueryCriteriaComponent dst) {
1454        super.copyValues(dst);
1455        dst.previous = previous == null ? null : previous.copy();
1456        dst.resultForCreate = resultForCreate == null ? null : resultForCreate.copy();
1457        dst.current = current == null ? null : current.copy();
1458        dst.resultForDelete = resultForDelete == null ? null : resultForDelete.copy();
1459        dst.requireBoth = requireBoth == null ? null : requireBoth.copy();
1460      }
1461
1462      @Override
1463      public boolean equalsDeep(Base other_) {
1464        if (!super.equalsDeep(other_))
1465          return false;
1466        if (!(other_ instanceof SubscriptionTopicResourceTriggerQueryCriteriaComponent))
1467          return false;
1468        SubscriptionTopicResourceTriggerQueryCriteriaComponent o = (SubscriptionTopicResourceTriggerQueryCriteriaComponent) other_;
1469        return compareDeep(previous, o.previous, true) && compareDeep(resultForCreate, o.resultForCreate, true)
1470           && compareDeep(current, o.current, true) && compareDeep(resultForDelete, o.resultForDelete, true)
1471           && compareDeep(requireBoth, o.requireBoth, true);
1472      }
1473
1474      @Override
1475      public boolean equalsShallow(Base other_) {
1476        if (!super.equalsShallow(other_))
1477          return false;
1478        if (!(other_ instanceof SubscriptionTopicResourceTriggerQueryCriteriaComponent))
1479          return false;
1480        SubscriptionTopicResourceTriggerQueryCriteriaComponent o = (SubscriptionTopicResourceTriggerQueryCriteriaComponent) other_;
1481        return compareValues(previous, o.previous, true) && compareValues(resultForCreate, o.resultForCreate, true)
1482           && compareValues(current, o.current, true) && compareValues(resultForDelete, o.resultForDelete, true)
1483           && compareValues(requireBoth, o.requireBoth, true);
1484      }
1485
1486      public boolean isEmpty() {
1487        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(previous, resultForCreate
1488          , current, resultForDelete, requireBoth);
1489      }
1490
1491  public String fhirType() {
1492    return "SubscriptionTopic.resourceTrigger.queryCriteria";
1493
1494  }
1495
1496  }
1497
1498    @Block()
1499    public static class SubscriptionTopicEventTriggerComponent extends BackboneElement implements IBaseBackboneElement {
1500        /**
1501         * The human readable description of an event to trigger a notification for the SubscriptionTopic - for example, "Patient Admission, as defined in HL7v2 via message ADT^A01". Multiple values are considered OR joined (e.g., matching any single event listed).
1502         */
1503        @Child(name = "description", type = {MarkdownType.class}, order=1, min=0, max=1, modifier=false, summary=true)
1504        @Description(shortDefinition="Text representation of the event trigger", formalDefinition="The human readable description of an event to trigger a notification for the SubscriptionTopic - for example, \"Patient Admission, as defined in HL7v2 via message ADT^A01\". Multiple values are considered OR joined (e.g., matching any single event listed)." )
1505        protected MarkdownType description;
1506
1507        /**
1508         * A well-defined event which can be used to trigger notifications from the SubscriptionTopic.
1509         */
1510        @Child(name = "event", type = {CodeableConcept.class}, order=2, min=1, max=1, modifier=false, summary=true)
1511        @Description(shortDefinition="Event which can trigger a notification from the SubscriptionTopic", formalDefinition="A well-defined event which can be used to trigger notifications from the SubscriptionTopic." )
1512        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://terminology.hl7.org/ValueSet/v2-0003")
1513        protected CodeableConcept event;
1514
1515        /**
1516         * URL of the Resource that is the focus type used in this event trigger.  Relative URLs are relative to the StructureDefinition root of the implemented FHIR version (e.g., http://hl7.org/fhir/StructureDefinition). For example, "Patient" maps to http://hl7.org/fhir/StructureDefinition/Patient.  For more information, see <a href="elementdefinition-definitions.html#ElementDefinition.type.code">ElementDefinition.type.code</a>.
1517         */
1518        @Child(name = "resource", type = {UriType.class}, order=3, min=1, max=1, modifier=false, summary=true)
1519        @Description(shortDefinition="Data Type or Resource (reference to definition) for this trigger definition", formalDefinition="URL of the Resource that is the focus type used in this event trigger.  Relative URLs are relative to the StructureDefinition root of the implemented FHIR version (e.g., http://hl7.org/fhir/StructureDefinition). For example, \"Patient\" maps to http://hl7.org/fhir/StructureDefinition/Patient.  For more information, see <a href=\"elementdefinition-definitions.html#ElementDefinition.type.code\">ElementDefinition.type.code</a>." )
1520        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/defined-types")
1521        protected UriType resource;
1522
1523        private static final long serialVersionUID = 1818872110L;
1524
1525    /**
1526     * Constructor
1527     */
1528      public SubscriptionTopicEventTriggerComponent() {
1529        super();
1530      }
1531
1532    /**
1533     * Constructor
1534     */
1535      public SubscriptionTopicEventTriggerComponent(CodeableConcept event, String resource) {
1536        super();
1537        this.setEvent(event);
1538        this.setResource(resource);
1539      }
1540
1541        /**
1542         * @return {@link #description} (The human readable description of an event to trigger a notification for the SubscriptionTopic - for example, "Patient Admission, as defined in HL7v2 via message ADT^A01". Multiple values are considered OR joined (e.g., matching any single event listed).). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
1543         */
1544        public MarkdownType getDescriptionElement() { 
1545          if (this.description == null)
1546            if (Configuration.errorOnAutoCreate())
1547              throw new Error("Attempt to auto-create SubscriptionTopicEventTriggerComponent.description");
1548            else if (Configuration.doAutoCreate())
1549              this.description = new MarkdownType(); // bb
1550          return this.description;
1551        }
1552
1553        public boolean hasDescriptionElement() { 
1554          return this.description != null && !this.description.isEmpty();
1555        }
1556
1557        public boolean hasDescription() { 
1558          return this.description != null && !this.description.isEmpty();
1559        }
1560
1561        /**
1562         * @param value {@link #description} (The human readable description of an event to trigger a notification for the SubscriptionTopic - for example, "Patient Admission, as defined in HL7v2 via message ADT^A01". Multiple values are considered OR joined (e.g., matching any single event listed).). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
1563         */
1564        public SubscriptionTopicEventTriggerComponent setDescriptionElement(MarkdownType value) { 
1565          this.description = value;
1566          return this;
1567        }
1568
1569        /**
1570         * @return The human readable description of an event to trigger a notification for the SubscriptionTopic - for example, "Patient Admission, as defined in HL7v2 via message ADT^A01". Multiple values are considered OR joined (e.g., matching any single event listed).
1571         */
1572        public String getDescription() { 
1573          return this.description == null ? null : this.description.getValue();
1574        }
1575
1576        /**
1577         * @param value The human readable description of an event to trigger a notification for the SubscriptionTopic - for example, "Patient Admission, as defined in HL7v2 via message ADT^A01". Multiple values are considered OR joined (e.g., matching any single event listed).
1578         */
1579        public SubscriptionTopicEventTriggerComponent setDescription(String value) { 
1580          if (value == null)
1581            this.description = null;
1582          else {
1583            if (this.description == null)
1584              this.description = new MarkdownType();
1585            this.description.setValue(value);
1586          }
1587          return this;
1588        }
1589
1590        /**
1591         * @return {@link #event} (A well-defined event which can be used to trigger notifications from the SubscriptionTopic.)
1592         */
1593        public CodeableConcept getEvent() { 
1594          if (this.event == null)
1595            if (Configuration.errorOnAutoCreate())
1596              throw new Error("Attempt to auto-create SubscriptionTopicEventTriggerComponent.event");
1597            else if (Configuration.doAutoCreate())
1598              this.event = new CodeableConcept(); // cc
1599          return this.event;
1600        }
1601
1602        public boolean hasEvent() { 
1603          return this.event != null && !this.event.isEmpty();
1604        }
1605
1606        /**
1607         * @param value {@link #event} (A well-defined event which can be used to trigger notifications from the SubscriptionTopic.)
1608         */
1609        public SubscriptionTopicEventTriggerComponent setEvent(CodeableConcept value) { 
1610          this.event = value;
1611          return this;
1612        }
1613
1614        /**
1615         * @return {@link #resource} (URL of the Resource that is the focus type used in this event trigger.  Relative URLs are relative to the StructureDefinition root of the implemented FHIR version (e.g., http://hl7.org/fhir/StructureDefinition). For example, "Patient" maps to http://hl7.org/fhir/StructureDefinition/Patient.  For more information, see <a href="elementdefinition-definitions.html#ElementDefinition.type.code">ElementDefinition.type.code</a>.). This is the underlying object with id, value and extensions. The accessor "getResource" gives direct access to the value
1616         */
1617        public UriType getResourceElement() { 
1618          if (this.resource == null)
1619            if (Configuration.errorOnAutoCreate())
1620              throw new Error("Attempt to auto-create SubscriptionTopicEventTriggerComponent.resource");
1621            else if (Configuration.doAutoCreate())
1622              this.resource = new UriType(); // bb
1623          return this.resource;
1624        }
1625
1626        public boolean hasResourceElement() { 
1627          return this.resource != null && !this.resource.isEmpty();
1628        }
1629
1630        public boolean hasResource() { 
1631          return this.resource != null && !this.resource.isEmpty();
1632        }
1633
1634        /**
1635         * @param value {@link #resource} (URL of the Resource that is the focus type used in this event trigger.  Relative URLs are relative to the StructureDefinition root of the implemented FHIR version (e.g., http://hl7.org/fhir/StructureDefinition). For example, "Patient" maps to http://hl7.org/fhir/StructureDefinition/Patient.  For more information, see <a href="elementdefinition-definitions.html#ElementDefinition.type.code">ElementDefinition.type.code</a>.). This is the underlying object with id, value and extensions. The accessor "getResource" gives direct access to the value
1636         */
1637        public SubscriptionTopicEventTriggerComponent setResourceElement(UriType value) { 
1638          this.resource = value;
1639          return this;
1640        }
1641
1642        /**
1643         * @return URL of the Resource that is the focus type used in this event trigger.  Relative URLs are relative to the StructureDefinition root of the implemented FHIR version (e.g., http://hl7.org/fhir/StructureDefinition). For example, "Patient" maps to http://hl7.org/fhir/StructureDefinition/Patient.  For more information, see <a href="elementdefinition-definitions.html#ElementDefinition.type.code">ElementDefinition.type.code</a>.
1644         */
1645        public String getResource() { 
1646          return this.resource == null ? null : this.resource.getValue();
1647        }
1648
1649        /**
1650         * @param value URL of the Resource that is the focus type used in this event trigger.  Relative URLs are relative to the StructureDefinition root of the implemented FHIR version (e.g., http://hl7.org/fhir/StructureDefinition). For example, "Patient" maps to http://hl7.org/fhir/StructureDefinition/Patient.  For more information, see <a href="elementdefinition-definitions.html#ElementDefinition.type.code">ElementDefinition.type.code</a>.
1651         */
1652        public SubscriptionTopicEventTriggerComponent setResource(String value) { 
1653            if (this.resource == null)
1654              this.resource = new UriType();
1655            this.resource.setValue(value);
1656          return this;
1657        }
1658
1659        protected void listChildren(List<Property> children) {
1660          super.listChildren(children);
1661          children.add(new Property("description", "markdown", "The human readable description of an event to trigger a notification for the SubscriptionTopic - for example, \"Patient Admission, as defined in HL7v2 via message ADT^A01\". Multiple values are considered OR joined (e.g., matching any single event listed).", 0, 1, description));
1662          children.add(new Property("event", "CodeableConcept", "A well-defined event which can be used to trigger notifications from the SubscriptionTopic.", 0, 1, event));
1663          children.add(new Property("resource", "uri", "URL of the Resource that is the focus type used in this event trigger.  Relative URLs are relative to the StructureDefinition root of the implemented FHIR version (e.g., http://hl7.org/fhir/StructureDefinition). For example, \"Patient\" maps to http://hl7.org/fhir/StructureDefinition/Patient.  For more information, see <a href=\"elementdefinition-definitions.html#ElementDefinition.type.code\">ElementDefinition.type.code</a>.", 0, 1, resource));
1664        }
1665
1666        @Override
1667        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1668          switch (_hash) {
1669          case -1724546052: /*description*/  return new Property("description", "markdown", "The human readable description of an event to trigger a notification for the SubscriptionTopic - for example, \"Patient Admission, as defined in HL7v2 via message ADT^A01\". Multiple values are considered OR joined (e.g., matching any single event listed).", 0, 1, description);
1670          case 96891546: /*event*/  return new Property("event", "CodeableConcept", "A well-defined event which can be used to trigger notifications from the SubscriptionTopic.", 0, 1, event);
1671          case -341064690: /*resource*/  return new Property("resource", "uri", "URL of the Resource that is the focus type used in this event trigger.  Relative URLs are relative to the StructureDefinition root of the implemented FHIR version (e.g., http://hl7.org/fhir/StructureDefinition). For example, \"Patient\" maps to http://hl7.org/fhir/StructureDefinition/Patient.  For more information, see <a href=\"elementdefinition-definitions.html#ElementDefinition.type.code\">ElementDefinition.type.code</a>.", 0, 1, resource);
1672          default: return super.getNamedProperty(_hash, _name, _checkValid);
1673          }
1674
1675        }
1676
1677      @Override
1678      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1679        switch (hash) {
1680        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
1681        case 96891546: /*event*/ return this.event == null ? new Base[0] : new Base[] {this.event}; // CodeableConcept
1682        case -341064690: /*resource*/ return this.resource == null ? new Base[0] : new Base[] {this.resource}; // UriType
1683        default: return super.getProperty(hash, name, checkValid);
1684        }
1685
1686      }
1687
1688      @Override
1689      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1690        switch (hash) {
1691        case -1724546052: // description
1692          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
1693          return value;
1694        case 96891546: // event
1695          this.event = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1696          return value;
1697        case -341064690: // resource
1698          this.resource = TypeConvertor.castToUri(value); // UriType
1699          return value;
1700        default: return super.setProperty(hash, name, value);
1701        }
1702
1703      }
1704
1705      @Override
1706      public Base setProperty(String name, Base value) throws FHIRException {
1707        if (name.equals("description")) {
1708          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
1709        } else if (name.equals("event")) {
1710          this.event = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1711        } else if (name.equals("resource")) {
1712          this.resource = TypeConvertor.castToUri(value); // UriType
1713        } else
1714          return super.setProperty(name, value);
1715        return value;
1716      }
1717
1718      @Override
1719      public Base makeProperty(int hash, String name) throws FHIRException {
1720        switch (hash) {
1721        case -1724546052:  return getDescriptionElement();
1722        case 96891546:  return getEvent();
1723        case -341064690:  return getResourceElement();
1724        default: return super.makeProperty(hash, name);
1725        }
1726
1727      }
1728
1729      @Override
1730      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1731        switch (hash) {
1732        case -1724546052: /*description*/ return new String[] {"markdown"};
1733        case 96891546: /*event*/ return new String[] {"CodeableConcept"};
1734        case -341064690: /*resource*/ return new String[] {"uri"};
1735        default: return super.getTypesForProperty(hash, name);
1736        }
1737
1738      }
1739
1740      @Override
1741      public Base addChild(String name) throws FHIRException {
1742        if (name.equals("description")) {
1743          throw new FHIRException("Cannot call addChild on a primitive type SubscriptionTopic.eventTrigger.description");
1744        }
1745        else if (name.equals("event")) {
1746          this.event = new CodeableConcept();
1747          return this.event;
1748        }
1749        else if (name.equals("resource")) {
1750          throw new FHIRException("Cannot call addChild on a primitive type SubscriptionTopic.eventTrigger.resource");
1751        }
1752        else
1753          return super.addChild(name);
1754      }
1755
1756      public SubscriptionTopicEventTriggerComponent copy() {
1757        SubscriptionTopicEventTriggerComponent dst = new SubscriptionTopicEventTriggerComponent();
1758        copyValues(dst);
1759        return dst;
1760      }
1761
1762      public void copyValues(SubscriptionTopicEventTriggerComponent dst) {
1763        super.copyValues(dst);
1764        dst.description = description == null ? null : description.copy();
1765        dst.event = event == null ? null : event.copy();
1766        dst.resource = resource == null ? null : resource.copy();
1767      }
1768
1769      @Override
1770      public boolean equalsDeep(Base other_) {
1771        if (!super.equalsDeep(other_))
1772          return false;
1773        if (!(other_ instanceof SubscriptionTopicEventTriggerComponent))
1774          return false;
1775        SubscriptionTopicEventTriggerComponent o = (SubscriptionTopicEventTriggerComponent) other_;
1776        return compareDeep(description, o.description, true) && compareDeep(event, o.event, true) && compareDeep(resource, o.resource, true)
1777          ;
1778      }
1779
1780      @Override
1781      public boolean equalsShallow(Base other_) {
1782        if (!super.equalsShallow(other_))
1783          return false;
1784        if (!(other_ instanceof SubscriptionTopicEventTriggerComponent))
1785          return false;
1786        SubscriptionTopicEventTriggerComponent o = (SubscriptionTopicEventTriggerComponent) other_;
1787        return compareValues(description, o.description, true) && compareValues(resource, o.resource, true)
1788          ;
1789      }
1790
1791      public boolean isEmpty() {
1792        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(description, event, resource
1793          );
1794      }
1795
1796  public String fhirType() {
1797    return "SubscriptionTopic.eventTrigger";
1798
1799  }
1800
1801  }
1802
1803    @Block()
1804    public static class SubscriptionTopicCanFilterByComponent extends BackboneElement implements IBaseBackboneElement {
1805        /**
1806         * Description of how this filtering parameter is intended to be used.
1807         */
1808        @Child(name = "description", type = {MarkdownType.class}, order=1, min=0, max=1, modifier=false, summary=true)
1809        @Description(shortDefinition="Description of this filter parameter", formalDefinition="Description of how this filtering parameter is intended to be used." )
1810        protected MarkdownType description;
1811
1812        /**
1813         * URL of the Resource that is the type used in this filter. This is the "focus" of the topic (or one of them if there are more than one). It will be the same, a generality, or a specificity of SubscriptionTopic.resourceTrigger.resource or SubscriptionTopic.eventTrigger.resource when they are present.
1814         */
1815        @Child(name = "resource", type = {UriType.class}, order=2, min=0, max=1, modifier=false, summary=true)
1816        @Description(shortDefinition="URL of the triggering Resource that this filter applies to", formalDefinition="URL of the Resource that is the type used in this filter. This is the \"focus\" of the topic (or one of them if there are more than one). It will be the same, a generality, or a specificity of SubscriptionTopic.resourceTrigger.resource or SubscriptionTopic.eventTrigger.resource when they are present." )
1817        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/defined-types")
1818        protected UriType resource;
1819
1820        /**
1821         * Either the canonical URL to a search parameter (like "http://hl7.org/fhir/SearchParameter/encounter-patient") or topic-defined parameter (like "hub.event") which is a label for the filter.
1822         */
1823        @Child(name = "filterParameter", type = {StringType.class}, order=3, min=0, max=1, modifier=false, summary=true)
1824        @Description(shortDefinition="Resource Search Parameter or filter parameter defined in this topic that serves as filter key", formalDefinition="Either the canonical URL to a search parameter (like \"http://hl7.org/fhir/SearchParameter/encounter-patient\") or topic-defined parameter (like \"hub.event\") which is a label for the filter." )
1825        protected StringType filterParameter;
1826
1827        /**
1828         * Allowable operators to apply when determining matches (Search Modifiers).
1829         */
1830        @Child(name = "modifier", type = {CodeType.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1831        @Description(shortDefinition="= | eq | ne | gt | lt | ge | le | sa | eb | ap | above | below | in | not-in | of-type", formalDefinition="Allowable operators to apply when determining matches (Search Modifiers)." )
1832        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/subscription-search-modifier")
1833        protected List<Enumeration<SubscriptionSearchModifier>> modifier;
1834
1835        private static final long serialVersionUID = -2140856175L;
1836
1837    /**
1838     * Constructor
1839     */
1840      public SubscriptionTopicCanFilterByComponent() {
1841        super();
1842      }
1843
1844        /**
1845         * @return {@link #description} (Description of how this filtering parameter is intended to be used.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
1846         */
1847        public MarkdownType getDescriptionElement() { 
1848          if (this.description == null)
1849            if (Configuration.errorOnAutoCreate())
1850              throw new Error("Attempt to auto-create SubscriptionTopicCanFilterByComponent.description");
1851            else if (Configuration.doAutoCreate())
1852              this.description = new MarkdownType(); // bb
1853          return this.description;
1854        }
1855
1856        public boolean hasDescriptionElement() { 
1857          return this.description != null && !this.description.isEmpty();
1858        }
1859
1860        public boolean hasDescription() { 
1861          return this.description != null && !this.description.isEmpty();
1862        }
1863
1864        /**
1865         * @param value {@link #description} (Description of how this filtering parameter is intended to be used.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
1866         */
1867        public SubscriptionTopicCanFilterByComponent setDescriptionElement(MarkdownType value) { 
1868          this.description = value;
1869          return this;
1870        }
1871
1872        /**
1873         * @return Description of how this filtering parameter is intended to be used.
1874         */
1875        public String getDescription() { 
1876          return this.description == null ? null : this.description.getValue();
1877        }
1878
1879        /**
1880         * @param value Description of how this filtering parameter is intended to be used.
1881         */
1882        public SubscriptionTopicCanFilterByComponent setDescription(String value) { 
1883          if (value == null)
1884            this.description = null;
1885          else {
1886            if (this.description == null)
1887              this.description = new MarkdownType();
1888            this.description.setValue(value);
1889          }
1890          return this;
1891        }
1892
1893        /**
1894         * @return {@link #resource} (URL of the Resource that is the type used in this filter. This is the "focus" of the topic (or one of them if there are more than one). It will be the same, a generality, or a specificity of SubscriptionTopic.resourceTrigger.resource or SubscriptionTopic.eventTrigger.resource when they are present.). This is the underlying object with id, value and extensions. The accessor "getResource" gives direct access to the value
1895         */
1896        public UriType getResourceElement() { 
1897          if (this.resource == null)
1898            if (Configuration.errorOnAutoCreate())
1899              throw new Error("Attempt to auto-create SubscriptionTopicCanFilterByComponent.resource");
1900            else if (Configuration.doAutoCreate())
1901              this.resource = new UriType(); // bb
1902          return this.resource;
1903        }
1904
1905        public boolean hasResourceElement() { 
1906          return this.resource != null && !this.resource.isEmpty();
1907        }
1908
1909        public boolean hasResource() { 
1910          return this.resource != null && !this.resource.isEmpty();
1911        }
1912
1913        /**
1914         * @param value {@link #resource} (URL of the Resource that is the type used in this filter. This is the "focus" of the topic (or one of them if there are more than one). It will be the same, a generality, or a specificity of SubscriptionTopic.resourceTrigger.resource or SubscriptionTopic.eventTrigger.resource when they are present.). This is the underlying object with id, value and extensions. The accessor "getResource" gives direct access to the value
1915         */
1916        public SubscriptionTopicCanFilterByComponent setResourceElement(UriType value) { 
1917          this.resource = value;
1918          return this;
1919        }
1920
1921        /**
1922         * @return URL of the Resource that is the type used in this filter. This is the "focus" of the topic (or one of them if there are more than one). It will be the same, a generality, or a specificity of SubscriptionTopic.resourceTrigger.resource or SubscriptionTopic.eventTrigger.resource when they are present.
1923         */
1924        public String getResource() { 
1925          return this.resource == null ? null : this.resource.getValue();
1926        }
1927
1928        /**
1929         * @param value URL of the Resource that is the type used in this filter. This is the "focus" of the topic (or one of them if there are more than one). It will be the same, a generality, or a specificity of SubscriptionTopic.resourceTrigger.resource or SubscriptionTopic.eventTrigger.resource when they are present.
1930         */
1931        public SubscriptionTopicCanFilterByComponent setResource(String value) { 
1932          if (Utilities.noString(value))
1933            this.resource = null;
1934          else {
1935            if (this.resource == null)
1936              this.resource = new UriType();
1937            this.resource.setValue(value);
1938          }
1939          return this;
1940        }
1941
1942        /**
1943         * @return {@link #filterParameter} (Either the canonical URL to a search parameter (like "http://hl7.org/fhir/SearchParameter/encounter-patient") or topic-defined parameter (like "hub.event") which is a label for the filter.). This is the underlying object with id, value and extensions. The accessor "getFilterParameter" gives direct access to the value
1944         */
1945        public StringType getFilterParameterElement() { 
1946          if (this.filterParameter == null)
1947            if (Configuration.errorOnAutoCreate())
1948              throw new Error("Attempt to auto-create SubscriptionTopicCanFilterByComponent.filterParameter");
1949            else if (Configuration.doAutoCreate())
1950              this.filterParameter = new StringType(); // bb
1951          return this.filterParameter;
1952        }
1953
1954        public boolean hasFilterParameterElement() { 
1955          return this.filterParameter != null && !this.filterParameter.isEmpty();
1956        }
1957
1958        public boolean hasFilterParameter() { 
1959          return this.filterParameter != null && !this.filterParameter.isEmpty();
1960        }
1961
1962        /**
1963         * @param value {@link #filterParameter} (Either the canonical URL to a search parameter (like "http://hl7.org/fhir/SearchParameter/encounter-patient") or topic-defined parameter (like "hub.event") which is a label for the filter.). This is the underlying object with id, value and extensions. The accessor "getFilterParameter" gives direct access to the value
1964         */
1965        public SubscriptionTopicCanFilterByComponent setFilterParameterElement(StringType value) { 
1966          this.filterParameter = value;
1967          return this;
1968        }
1969
1970        /**
1971         * @return Either the canonical URL to a search parameter (like "http://hl7.org/fhir/SearchParameter/encounter-patient") or topic-defined parameter (like "hub.event") which is a label for the filter.
1972         */
1973        public String getFilterParameter() { 
1974          return this.filterParameter == null ? null : this.filterParameter.getValue();
1975        }
1976
1977        /**
1978         * @param value Either the canonical URL to a search parameter (like "http://hl7.org/fhir/SearchParameter/encounter-patient") or topic-defined parameter (like "hub.event") which is a label for the filter.
1979         */
1980        public SubscriptionTopicCanFilterByComponent setFilterParameter(String value) { 
1981          if (Utilities.noString(value))
1982            this.filterParameter = null;
1983          else {
1984            if (this.filterParameter == null)
1985              this.filterParameter = new StringType();
1986            this.filterParameter.setValue(value);
1987          }
1988          return this;
1989        }
1990
1991        /**
1992         * @return {@link #modifier} (Allowable operators to apply when determining matches (Search Modifiers).)
1993         */
1994        public List<Enumeration<SubscriptionSearchModifier>> getModifier() { 
1995          if (this.modifier == null)
1996            this.modifier = new ArrayList<Enumeration<SubscriptionSearchModifier>>();
1997          return this.modifier;
1998        }
1999
2000        /**
2001         * @return Returns a reference to <code>this</code> for easy method chaining
2002         */
2003        public SubscriptionTopicCanFilterByComponent setModifier(List<Enumeration<SubscriptionSearchModifier>> theModifier) { 
2004          this.modifier = theModifier;
2005          return this;
2006        }
2007
2008        public boolean hasModifier() { 
2009          if (this.modifier == null)
2010            return false;
2011          for (Enumeration<SubscriptionSearchModifier> item : this.modifier)
2012            if (!item.isEmpty())
2013              return true;
2014          return false;
2015        }
2016
2017        /**
2018         * @return {@link #modifier} (Allowable operators to apply when determining matches (Search Modifiers).)
2019         */
2020        public Enumeration<SubscriptionSearchModifier> addModifierElement() {//2 
2021          Enumeration<SubscriptionSearchModifier> t = new Enumeration<SubscriptionSearchModifier>(new SubscriptionSearchModifierEnumFactory());
2022          if (this.modifier == null)
2023            this.modifier = new ArrayList<Enumeration<SubscriptionSearchModifier>>();
2024          this.modifier.add(t);
2025          return t;
2026        }
2027
2028        /**
2029         * @param value {@link #modifier} (Allowable operators to apply when determining matches (Search Modifiers).)
2030         */
2031        public SubscriptionTopicCanFilterByComponent addModifier(SubscriptionSearchModifier value) { //1
2032          Enumeration<SubscriptionSearchModifier> t = new Enumeration<SubscriptionSearchModifier>(new SubscriptionSearchModifierEnumFactory());
2033          t.setValue(value);
2034          if (this.modifier == null)
2035            this.modifier = new ArrayList<Enumeration<SubscriptionSearchModifier>>();
2036          this.modifier.add(t);
2037          return this;
2038        }
2039
2040        /**
2041         * @param value {@link #modifier} (Allowable operators to apply when determining matches (Search Modifiers).)
2042         */
2043        public boolean hasModifier(SubscriptionSearchModifier value) { 
2044          if (this.modifier == null)
2045            return false;
2046          for (Enumeration<SubscriptionSearchModifier> v : this.modifier)
2047            if (v.getValue().equals(value)) // code
2048              return true;
2049          return false;
2050        }
2051
2052        protected void listChildren(List<Property> children) {
2053          super.listChildren(children);
2054          children.add(new Property("description", "markdown", "Description of how this filtering parameter is intended to be used.", 0, 1, description));
2055          children.add(new Property("resource", "uri", "URL of the Resource that is the type used in this filter. This is the \"focus\" of the topic (or one of them if there are more than one). It will be the same, a generality, or a specificity of SubscriptionTopic.resourceTrigger.resource or SubscriptionTopic.eventTrigger.resource when they are present.", 0, 1, resource));
2056          children.add(new Property("filterParameter", "string", "Either the canonical URL to a search parameter (like \"http://hl7.org/fhir/SearchParameter/encounter-patient\") or topic-defined parameter (like \"hub.event\") which is a label for the filter.", 0, 1, filterParameter));
2057          children.add(new Property("modifier", "code", "Allowable operators to apply when determining matches (Search Modifiers).", 0, java.lang.Integer.MAX_VALUE, modifier));
2058        }
2059
2060        @Override
2061        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2062          switch (_hash) {
2063          case -1724546052: /*description*/  return new Property("description", "markdown", "Description of how this filtering parameter is intended to be used.", 0, 1, description);
2064          case -341064690: /*resource*/  return new Property("resource", "uri", "URL of the Resource that is the type used in this filter. This is the \"focus\" of the topic (or one of them if there are more than one). It will be the same, a generality, or a specificity of SubscriptionTopic.resourceTrigger.resource or SubscriptionTopic.eventTrigger.resource when they are present.", 0, 1, resource);
2065          case 618257: /*filterParameter*/  return new Property("filterParameter", "string", "Either the canonical URL to a search parameter (like \"http://hl7.org/fhir/SearchParameter/encounter-patient\") or topic-defined parameter (like \"hub.event\") which is a label for the filter.", 0, 1, filterParameter);
2066          case -615513385: /*modifier*/  return new Property("modifier", "code", "Allowable operators to apply when determining matches (Search Modifiers).", 0, java.lang.Integer.MAX_VALUE, modifier);
2067          default: return super.getNamedProperty(_hash, _name, _checkValid);
2068          }
2069
2070        }
2071
2072      @Override
2073      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2074        switch (hash) {
2075        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
2076        case -341064690: /*resource*/ return this.resource == null ? new Base[0] : new Base[] {this.resource}; // UriType
2077        case 618257: /*filterParameter*/ return this.filterParameter == null ? new Base[0] : new Base[] {this.filterParameter}; // StringType
2078        case -615513385: /*modifier*/ return this.modifier == null ? new Base[0] : this.modifier.toArray(new Base[this.modifier.size()]); // Enumeration<SubscriptionSearchModifier>
2079        default: return super.getProperty(hash, name, checkValid);
2080        }
2081
2082      }
2083
2084      @Override
2085      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2086        switch (hash) {
2087        case -1724546052: // description
2088          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
2089          return value;
2090        case -341064690: // resource
2091          this.resource = TypeConvertor.castToUri(value); // UriType
2092          return value;
2093        case 618257: // filterParameter
2094          this.filterParameter = TypeConvertor.castToString(value); // StringType
2095          return value;
2096        case -615513385: // modifier
2097          value = new SubscriptionSearchModifierEnumFactory().fromType(TypeConvertor.castToCode(value));
2098          this.getModifier().add((Enumeration) value); // Enumeration<SubscriptionSearchModifier>
2099          return value;
2100        default: return super.setProperty(hash, name, value);
2101        }
2102
2103      }
2104
2105      @Override
2106      public Base setProperty(String name, Base value) throws FHIRException {
2107        if (name.equals("description")) {
2108          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
2109        } else if (name.equals("resource")) {
2110          this.resource = TypeConvertor.castToUri(value); // UriType
2111        } else if (name.equals("filterParameter")) {
2112          this.filterParameter = TypeConvertor.castToString(value); // StringType
2113        } else if (name.equals("modifier")) {
2114          value = new SubscriptionSearchModifierEnumFactory().fromType(TypeConvertor.castToCode(value));
2115          this.getModifier().add((Enumeration) value);
2116        } else
2117          return super.setProperty(name, value);
2118        return value;
2119      }
2120
2121      @Override
2122      public Base makeProperty(int hash, String name) throws FHIRException {
2123        switch (hash) {
2124        case -1724546052:  return getDescriptionElement();
2125        case -341064690:  return getResourceElement();
2126        case 618257:  return getFilterParameterElement();
2127        case -615513385:  return addModifierElement();
2128        default: return super.makeProperty(hash, name);
2129        }
2130
2131      }
2132
2133      @Override
2134      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2135        switch (hash) {
2136        case -1724546052: /*description*/ return new String[] {"markdown"};
2137        case -341064690: /*resource*/ return new String[] {"uri"};
2138        case 618257: /*filterParameter*/ return new String[] {"string"};
2139        case -615513385: /*modifier*/ return new String[] {"code"};
2140        default: return super.getTypesForProperty(hash, name);
2141        }
2142
2143      }
2144
2145      @Override
2146      public Base addChild(String name) throws FHIRException {
2147        if (name.equals("description")) {
2148          throw new FHIRException("Cannot call addChild on a primitive type SubscriptionTopic.canFilterBy.description");
2149        }
2150        else if (name.equals("resource")) {
2151          throw new FHIRException("Cannot call addChild on a primitive type SubscriptionTopic.canFilterBy.resource");
2152        }
2153        else if (name.equals("filterParameter")) {
2154          throw new FHIRException("Cannot call addChild on a primitive type SubscriptionTopic.canFilterBy.filterParameter");
2155        }
2156        else if (name.equals("modifier")) {
2157          throw new FHIRException("Cannot call addChild on a primitive type SubscriptionTopic.canFilterBy.modifier");
2158        }
2159        else
2160          return super.addChild(name);
2161      }
2162
2163      public SubscriptionTopicCanFilterByComponent copy() {
2164        SubscriptionTopicCanFilterByComponent dst = new SubscriptionTopicCanFilterByComponent();
2165        copyValues(dst);
2166        return dst;
2167      }
2168
2169      public void copyValues(SubscriptionTopicCanFilterByComponent dst) {
2170        super.copyValues(dst);
2171        dst.description = description == null ? null : description.copy();
2172        dst.resource = resource == null ? null : resource.copy();
2173        dst.filterParameter = filterParameter == null ? null : filterParameter.copy();
2174        if (modifier != null) {
2175          dst.modifier = new ArrayList<Enumeration<SubscriptionSearchModifier>>();
2176          for (Enumeration<SubscriptionSearchModifier> i : modifier)
2177            dst.modifier.add(i.copy());
2178        };
2179      }
2180
2181      @Override
2182      public boolean equalsDeep(Base other_) {
2183        if (!super.equalsDeep(other_))
2184          return false;
2185        if (!(other_ instanceof SubscriptionTopicCanFilterByComponent))
2186          return false;
2187        SubscriptionTopicCanFilterByComponent o = (SubscriptionTopicCanFilterByComponent) other_;
2188        return compareDeep(description, o.description, true) && compareDeep(resource, o.resource, true)
2189           && compareDeep(filterParameter, o.filterParameter, true) && compareDeep(modifier, o.modifier, true)
2190          ;
2191      }
2192
2193      @Override
2194      public boolean equalsShallow(Base other_) {
2195        if (!super.equalsShallow(other_))
2196          return false;
2197        if (!(other_ instanceof SubscriptionTopicCanFilterByComponent))
2198          return false;
2199        SubscriptionTopicCanFilterByComponent o = (SubscriptionTopicCanFilterByComponent) other_;
2200        return compareValues(description, o.description, true) && compareValues(resource, o.resource, true)
2201           && compareValues(filterParameter, o.filterParameter, true) && compareValues(modifier, o.modifier, true)
2202          ;
2203      }
2204
2205      public boolean isEmpty() {
2206        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(description, resource, filterParameter
2207          , modifier);
2208      }
2209
2210  public String fhirType() {
2211    return "SubscriptionTopic.canFilterBy";
2212
2213  }
2214
2215  }
2216
2217    @Block()
2218    public static class SubscriptionTopicNotificationShapeComponent extends BackboneElement implements IBaseBackboneElement {
2219        /**
2220         * URL of the Resource that is the type used in this shape. This is the "focus" of the topic (or one of them if there are more than one) and the root resource for this shape definition. It will be the same, a generality, or a specificity of SubscriptionTopic.resourceTrigger.resource or SubscriptionTopic.eventTrigger.resource when they are present.
2221         */
2222        @Child(name = "resource", type = {UriType.class}, order=1, min=1, max=1, modifier=false, summary=true)
2223        @Description(shortDefinition="URL of the Resource that is the focus (main) resource in a notification shape", formalDefinition="URL of the Resource that is the type used in this shape. This is the \"focus\" of the topic (or one of them if there are more than one) and the root resource for this shape definition. It will be the same, a generality, or a specificity of SubscriptionTopic.resourceTrigger.resource or SubscriptionTopic.eventTrigger.resource when they are present." )
2224        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/defined-types")
2225        protected UriType resource;
2226
2227        /**
2228         * Search-style _include directives, rooted in the resource for this shape. Servers SHOULD include resources listed here, if they exist and the user is authorized to receive them.  Clients SHOULD be prepared to receive these additional resources, but SHALL function properly without them.
2229         */
2230        @Child(name = "include", type = {StringType.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2231        @Description(shortDefinition="Include directives, rooted in the resource for this shape", formalDefinition="Search-style _include directives, rooted in the resource for this shape. Servers SHOULD include resources listed here, if they exist and the user is authorized to receive them.  Clients SHOULD be prepared to receive these additional resources, but SHALL function properly without them." )
2232        protected List<StringType> include;
2233
2234        /**
2235         * Search-style _revinclude directives, rooted in the resource for this shape. Servers SHOULD include resources listed here, if they exist and the user is authorized to receive them.  Clients SHOULD be prepared to receive these additional resources, but SHALL function properly without them.
2236         */
2237        @Child(name = "revInclude", type = {StringType.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2238        @Description(shortDefinition="Reverse include directives, rooted in the resource for this shape", formalDefinition="Search-style _revinclude directives, rooted in the resource for this shape. Servers SHOULD include resources listed here, if they exist and the user is authorized to receive them.  Clients SHOULD be prepared to receive these additional resources, but SHALL function properly without them." )
2239        protected List<StringType> revInclude;
2240
2241        private static final long serialVersionUID = -1718592091L;
2242
2243    /**
2244     * Constructor
2245     */
2246      public SubscriptionTopicNotificationShapeComponent() {
2247        super();
2248      }
2249
2250    /**
2251     * Constructor
2252     */
2253      public SubscriptionTopicNotificationShapeComponent(String resource) {
2254        super();
2255        this.setResource(resource);
2256      }
2257
2258        /**
2259         * @return {@link #resource} (URL of the Resource that is the type used in this shape. This is the "focus" of the topic (or one of them if there are more than one) and the root resource for this shape definition. It will be the same, a generality, or a specificity of SubscriptionTopic.resourceTrigger.resource or SubscriptionTopic.eventTrigger.resource when they are present.). This is the underlying object with id, value and extensions. The accessor "getResource" gives direct access to the value
2260         */
2261        public UriType getResourceElement() { 
2262          if (this.resource == null)
2263            if (Configuration.errorOnAutoCreate())
2264              throw new Error("Attempt to auto-create SubscriptionTopicNotificationShapeComponent.resource");
2265            else if (Configuration.doAutoCreate())
2266              this.resource = new UriType(); // bb
2267          return this.resource;
2268        }
2269
2270        public boolean hasResourceElement() { 
2271          return this.resource != null && !this.resource.isEmpty();
2272        }
2273
2274        public boolean hasResource() { 
2275          return this.resource != null && !this.resource.isEmpty();
2276        }
2277
2278        /**
2279         * @param value {@link #resource} (URL of the Resource that is the type used in this shape. This is the "focus" of the topic (or one of them if there are more than one) and the root resource for this shape definition. It will be the same, a generality, or a specificity of SubscriptionTopic.resourceTrigger.resource or SubscriptionTopic.eventTrigger.resource when they are present.). This is the underlying object with id, value and extensions. The accessor "getResource" gives direct access to the value
2280         */
2281        public SubscriptionTopicNotificationShapeComponent setResourceElement(UriType value) { 
2282          this.resource = value;
2283          return this;
2284        }
2285
2286        /**
2287         * @return URL of the Resource that is the type used in this shape. This is the "focus" of the topic (or one of them if there are more than one) and the root resource for this shape definition. It will be the same, a generality, or a specificity of SubscriptionTopic.resourceTrigger.resource or SubscriptionTopic.eventTrigger.resource when they are present.
2288         */
2289        public String getResource() { 
2290          return this.resource == null ? null : this.resource.getValue();
2291        }
2292
2293        /**
2294         * @param value URL of the Resource that is the type used in this shape. This is the "focus" of the topic (or one of them if there are more than one) and the root resource for this shape definition. It will be the same, a generality, or a specificity of SubscriptionTopic.resourceTrigger.resource or SubscriptionTopic.eventTrigger.resource when they are present.
2295         */
2296        public SubscriptionTopicNotificationShapeComponent setResource(String value) { 
2297            if (this.resource == null)
2298              this.resource = new UriType();
2299            this.resource.setValue(value);
2300          return this;
2301        }
2302
2303        /**
2304         * @return {@link #include} (Search-style _include directives, rooted in the resource for this shape. Servers SHOULD include resources listed here, if they exist and the user is authorized to receive them.  Clients SHOULD be prepared to receive these additional resources, but SHALL function properly without them.)
2305         */
2306        public List<StringType> getInclude() { 
2307          if (this.include == null)
2308            this.include = new ArrayList<StringType>();
2309          return this.include;
2310        }
2311
2312        /**
2313         * @return Returns a reference to <code>this</code> for easy method chaining
2314         */
2315        public SubscriptionTopicNotificationShapeComponent setInclude(List<StringType> theInclude) { 
2316          this.include = theInclude;
2317          return this;
2318        }
2319
2320        public boolean hasInclude() { 
2321          if (this.include == null)
2322            return false;
2323          for (StringType item : this.include)
2324            if (!item.isEmpty())
2325              return true;
2326          return false;
2327        }
2328
2329        /**
2330         * @return {@link #include} (Search-style _include directives, rooted in the resource for this shape. Servers SHOULD include resources listed here, if they exist and the user is authorized to receive them.  Clients SHOULD be prepared to receive these additional resources, but SHALL function properly without them.)
2331         */
2332        public StringType addIncludeElement() {//2 
2333          StringType t = new StringType();
2334          if (this.include == null)
2335            this.include = new ArrayList<StringType>();
2336          this.include.add(t);
2337          return t;
2338        }
2339
2340        /**
2341         * @param value {@link #include} (Search-style _include directives, rooted in the resource for this shape. Servers SHOULD include resources listed here, if they exist and the user is authorized to receive them.  Clients SHOULD be prepared to receive these additional resources, but SHALL function properly without them.)
2342         */
2343        public SubscriptionTopicNotificationShapeComponent addInclude(String value) { //1
2344          StringType t = new StringType();
2345          t.setValue(value);
2346          if (this.include == null)
2347            this.include = new ArrayList<StringType>();
2348          this.include.add(t);
2349          return this;
2350        }
2351
2352        /**
2353         * @param value {@link #include} (Search-style _include directives, rooted in the resource for this shape. Servers SHOULD include resources listed here, if they exist and the user is authorized to receive them.  Clients SHOULD be prepared to receive these additional resources, but SHALL function properly without them.)
2354         */
2355        public boolean hasInclude(String value) { 
2356          if (this.include == null)
2357            return false;
2358          for (StringType v : this.include)
2359            if (v.getValue().equals(value)) // string
2360              return true;
2361          return false;
2362        }
2363
2364        /**
2365         * @return {@link #revInclude} (Search-style _revinclude directives, rooted in the resource for this shape. Servers SHOULD include resources listed here, if they exist and the user is authorized to receive them.  Clients SHOULD be prepared to receive these additional resources, but SHALL function properly without them.)
2366         */
2367        public List<StringType> getRevInclude() { 
2368          if (this.revInclude == null)
2369            this.revInclude = new ArrayList<StringType>();
2370          return this.revInclude;
2371        }
2372
2373        /**
2374         * @return Returns a reference to <code>this</code> for easy method chaining
2375         */
2376        public SubscriptionTopicNotificationShapeComponent setRevInclude(List<StringType> theRevInclude) { 
2377          this.revInclude = theRevInclude;
2378          return this;
2379        }
2380
2381        public boolean hasRevInclude() { 
2382          if (this.revInclude == null)
2383            return false;
2384          for (StringType item : this.revInclude)
2385            if (!item.isEmpty())
2386              return true;
2387          return false;
2388        }
2389
2390        /**
2391         * @return {@link #revInclude} (Search-style _revinclude directives, rooted in the resource for this shape. Servers SHOULD include resources listed here, if they exist and the user is authorized to receive them.  Clients SHOULD be prepared to receive these additional resources, but SHALL function properly without them.)
2392         */
2393        public StringType addRevIncludeElement() {//2 
2394          StringType t = new StringType();
2395          if (this.revInclude == null)
2396            this.revInclude = new ArrayList<StringType>();
2397          this.revInclude.add(t);
2398          return t;
2399        }
2400
2401        /**
2402         * @param value {@link #revInclude} (Search-style _revinclude directives, rooted in the resource for this shape. Servers SHOULD include resources listed here, if they exist and the user is authorized to receive them.  Clients SHOULD be prepared to receive these additional resources, but SHALL function properly without them.)
2403         */
2404        public SubscriptionTopicNotificationShapeComponent addRevInclude(String value) { //1
2405          StringType t = new StringType();
2406          t.setValue(value);
2407          if (this.revInclude == null)
2408            this.revInclude = new ArrayList<StringType>();
2409          this.revInclude.add(t);
2410          return this;
2411        }
2412
2413        /**
2414         * @param value {@link #revInclude} (Search-style _revinclude directives, rooted in the resource for this shape. Servers SHOULD include resources listed here, if they exist and the user is authorized to receive them.  Clients SHOULD be prepared to receive these additional resources, but SHALL function properly without them.)
2415         */
2416        public boolean hasRevInclude(String value) { 
2417          if (this.revInclude == null)
2418            return false;
2419          for (StringType v : this.revInclude)
2420            if (v.getValue().equals(value)) // string
2421              return true;
2422          return false;
2423        }
2424
2425        protected void listChildren(List<Property> children) {
2426          super.listChildren(children);
2427          children.add(new Property("resource", "uri", "URL of the Resource that is the type used in this shape. This is the \"focus\" of the topic (or one of them if there are more than one) and the root resource for this shape definition. It will be the same, a generality, or a specificity of SubscriptionTopic.resourceTrigger.resource or SubscriptionTopic.eventTrigger.resource when they are present.", 0, 1, resource));
2428          children.add(new Property("include", "string", "Search-style _include directives, rooted in the resource for this shape. Servers SHOULD include resources listed here, if they exist and the user is authorized to receive them.  Clients SHOULD be prepared to receive these additional resources, but SHALL function properly without them.", 0, java.lang.Integer.MAX_VALUE, include));
2429          children.add(new Property("revInclude", "string", "Search-style _revinclude directives, rooted in the resource for this shape. Servers SHOULD include resources listed here, if they exist and the user is authorized to receive them.  Clients SHOULD be prepared to receive these additional resources, but SHALL function properly without them.", 0, java.lang.Integer.MAX_VALUE, revInclude));
2430        }
2431
2432        @Override
2433        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2434          switch (_hash) {
2435          case -341064690: /*resource*/  return new Property("resource", "uri", "URL of the Resource that is the type used in this shape. This is the \"focus\" of the topic (or one of them if there are more than one) and the root resource for this shape definition. It will be the same, a generality, or a specificity of SubscriptionTopic.resourceTrigger.resource or SubscriptionTopic.eventTrigger.resource when they are present.", 0, 1, resource);
2436          case 1942574248: /*include*/  return new Property("include", "string", "Search-style _include directives, rooted in the resource for this shape. Servers SHOULD include resources listed here, if they exist and the user is authorized to receive them.  Clients SHOULD be prepared to receive these additional resources, but SHALL function properly without them.", 0, java.lang.Integer.MAX_VALUE, include);
2437          case 8439429: /*revInclude*/  return new Property("revInclude", "string", "Search-style _revinclude directives, rooted in the resource for this shape. Servers SHOULD include resources listed here, if they exist and the user is authorized to receive them.  Clients SHOULD be prepared to receive these additional resources, but SHALL function properly without them.", 0, java.lang.Integer.MAX_VALUE, revInclude);
2438          default: return super.getNamedProperty(_hash, _name, _checkValid);
2439          }
2440
2441        }
2442
2443      @Override
2444      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2445        switch (hash) {
2446        case -341064690: /*resource*/ return this.resource == null ? new Base[0] : new Base[] {this.resource}; // UriType
2447        case 1942574248: /*include*/ return this.include == null ? new Base[0] : this.include.toArray(new Base[this.include.size()]); // StringType
2448        case 8439429: /*revInclude*/ return this.revInclude == null ? new Base[0] : this.revInclude.toArray(new Base[this.revInclude.size()]); // StringType
2449        default: return super.getProperty(hash, name, checkValid);
2450        }
2451
2452      }
2453
2454      @Override
2455      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2456        switch (hash) {
2457        case -341064690: // resource
2458          this.resource = TypeConvertor.castToUri(value); // UriType
2459          return value;
2460        case 1942574248: // include
2461          this.getInclude().add(TypeConvertor.castToString(value)); // StringType
2462          return value;
2463        case 8439429: // revInclude
2464          this.getRevInclude().add(TypeConvertor.castToString(value)); // StringType
2465          return value;
2466        default: return super.setProperty(hash, name, value);
2467        }
2468
2469      }
2470
2471      @Override
2472      public Base setProperty(String name, Base value) throws FHIRException {
2473        if (name.equals("resource")) {
2474          this.resource = TypeConvertor.castToUri(value); // UriType
2475        } else if (name.equals("include")) {
2476          this.getInclude().add(TypeConvertor.castToString(value));
2477        } else if (name.equals("revInclude")) {
2478          this.getRevInclude().add(TypeConvertor.castToString(value));
2479        } else
2480          return super.setProperty(name, value);
2481        return value;
2482      }
2483
2484      @Override
2485      public Base makeProperty(int hash, String name) throws FHIRException {
2486        switch (hash) {
2487        case -341064690:  return getResourceElement();
2488        case 1942574248:  return addIncludeElement();
2489        case 8439429:  return addRevIncludeElement();
2490        default: return super.makeProperty(hash, name);
2491        }
2492
2493      }
2494
2495      @Override
2496      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2497        switch (hash) {
2498        case -341064690: /*resource*/ return new String[] {"uri"};
2499        case 1942574248: /*include*/ return new String[] {"string"};
2500        case 8439429: /*revInclude*/ return new String[] {"string"};
2501        default: return super.getTypesForProperty(hash, name);
2502        }
2503
2504      }
2505
2506      @Override
2507      public Base addChild(String name) throws FHIRException {
2508        if (name.equals("resource")) {
2509          throw new FHIRException("Cannot call addChild on a primitive type SubscriptionTopic.notificationShape.resource");
2510        }
2511        else if (name.equals("include")) {
2512          throw new FHIRException("Cannot call addChild on a primitive type SubscriptionTopic.notificationShape.include");
2513        }
2514        else if (name.equals("revInclude")) {
2515          throw new FHIRException("Cannot call addChild on a primitive type SubscriptionTopic.notificationShape.revInclude");
2516        }
2517        else
2518          return super.addChild(name);
2519      }
2520
2521      public SubscriptionTopicNotificationShapeComponent copy() {
2522        SubscriptionTopicNotificationShapeComponent dst = new SubscriptionTopicNotificationShapeComponent();
2523        copyValues(dst);
2524        return dst;
2525      }
2526
2527      public void copyValues(SubscriptionTopicNotificationShapeComponent dst) {
2528        super.copyValues(dst);
2529        dst.resource = resource == null ? null : resource.copy();
2530        if (include != null) {
2531          dst.include = new ArrayList<StringType>();
2532          for (StringType i : include)
2533            dst.include.add(i.copy());
2534        };
2535        if (revInclude != null) {
2536          dst.revInclude = new ArrayList<StringType>();
2537          for (StringType i : revInclude)
2538            dst.revInclude.add(i.copy());
2539        };
2540      }
2541
2542      @Override
2543      public boolean equalsDeep(Base other_) {
2544        if (!super.equalsDeep(other_))
2545          return false;
2546        if (!(other_ instanceof SubscriptionTopicNotificationShapeComponent))
2547          return false;
2548        SubscriptionTopicNotificationShapeComponent o = (SubscriptionTopicNotificationShapeComponent) other_;
2549        return compareDeep(resource, o.resource, true) && compareDeep(include, o.include, true) && compareDeep(revInclude, o.revInclude, true)
2550          ;
2551      }
2552
2553      @Override
2554      public boolean equalsShallow(Base other_) {
2555        if (!super.equalsShallow(other_))
2556          return false;
2557        if (!(other_ instanceof SubscriptionTopicNotificationShapeComponent))
2558          return false;
2559        SubscriptionTopicNotificationShapeComponent o = (SubscriptionTopicNotificationShapeComponent) other_;
2560        return compareValues(resource, o.resource, true) && compareValues(include, o.include, true) && compareValues(revInclude, o.revInclude, true)
2561          ;
2562      }
2563
2564      public boolean isEmpty() {
2565        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(resource, include, revInclude
2566          );
2567      }
2568
2569  public String fhirType() {
2570    return "SubscriptionTopic.notificationShape";
2571
2572  }
2573
2574  }
2575
2576    /**
2577     * An absolute URL that is used to identify this SubscriptionTopic 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 Topic is (or will be) published. The URL SHOULD include the major version of the Topic. For more information see [Technical and Business Versions](resource.html#versions).
2578     */
2579    @Child(name = "url", type = {UriType.class}, order=0, min=1, max=1, modifier=false, summary=true)
2580    @Description(shortDefinition="Logical canonical URL to reference this SubscriptionTopic (globally unique)", formalDefinition="An absolute URL that is used to identify this SubscriptionTopic 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 Topic is (or will be) published. The URL SHOULD include the major version of the Topic. For more information see [Technical and Business Versions](resource.html#versions)." )
2581    protected UriType url;
2582
2583    /**
2584     * Business identifiers assigned to this SubscriptionTopic by the performer and/or other systems.  These identifiers remain constant as the resource is updated and propagates from server to server.
2585     */
2586    @Child(name = "identifier", type = {Identifier.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2587    @Description(shortDefinition="Business Identifier for SubscriptionTopic", formalDefinition="Business identifiers assigned to this SubscriptionTopic by the performer and/or other systems.  These identifiers remain constant as the resource is updated and propagates from server to server." )
2588    protected List<Identifier> identifier;
2589
2590    /**
2591     * The identifier that is used to identify this version of the SubscriptionTopic when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the Topic author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions are orderable.
2592     */
2593    @Child(name = "version", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=true)
2594    @Description(shortDefinition="Business version of the SubscriptionTopic", formalDefinition="The identifier that is used to identify this version of the SubscriptionTopic when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the Topic author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions are orderable." )
2595    protected StringType version;
2596
2597    /**
2598     * A short, descriptive, user-friendly title for the SubscriptionTopic, for example, "admission".
2599     */
2600    @Child(name = "title", type = {StringType.class}, order=3, min=0, max=1, modifier=false, summary=true)
2601    @Description(shortDefinition="Name for this SubscriptionTopic (Human friendly)", formalDefinition="A short, descriptive, user-friendly title for the SubscriptionTopic, for example, \"admission\"." )
2602    protected StringType title;
2603
2604    /**
2605     * The canonical URL pointing to another FHIR-defined SubscriptionTopic that is adhered to in whole or in part by this SubscriptionTopic.
2606     */
2607    @Child(name = "derivedFrom", type = {CanonicalType.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2608    @Description(shortDefinition="Based on FHIR protocol or definition", formalDefinition="The canonical URL pointing to another FHIR-defined SubscriptionTopic that is adhered to in whole or in part by this SubscriptionTopic." )
2609    protected List<CanonicalType> derivedFrom;
2610
2611    /**
2612     * The current state of the SubscriptionTopic.
2613     */
2614    @Child(name = "status", type = {CodeType.class}, order=5, min=1, max=1, modifier=true, summary=true)
2615    @Description(shortDefinition="draft | active | retired | unknown", formalDefinition="The current state of the SubscriptionTopic." )
2616    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/publication-status")
2617    protected Enumeration<PublicationStatus> status;
2618
2619    /**
2620     * A flag to indicate that this TopSubscriptionTopicic is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
2621     */
2622    @Child(name = "experimental", type = {BooleanType.class}, order=6, min=0, max=1, modifier=true, summary=true)
2623    @Description(shortDefinition="If for testing purposes, not real usage", formalDefinition="A flag to indicate that this TopSubscriptionTopicic is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage." )
2624    protected BooleanType experimental;
2625
2626    /**
2627     * For draft definitions, indicates the date of initial creation.  For active definitions, represents the date of activation.  For withdrawn definitions, indicates the date of withdrawal.
2628     */
2629    @Child(name = "date", type = {DateTimeType.class}, order=7, min=0, max=1, modifier=false, summary=true)
2630    @Description(shortDefinition="Date status first applied", formalDefinition="For draft definitions, indicates the date of initial creation.  For active definitions, represents the date of activation.  For withdrawn definitions, indicates the date of withdrawal." )
2631    protected DateTimeType date;
2632
2633    /**
2634     * Helps establish the "authority/credibility" of the SubscriptionTopic.  May also allow for contact.
2635     */
2636    @Child(name = "publisher", type = {StringType.class}, order=8, min=0, max=1, modifier=false, summary=true)
2637    @Description(shortDefinition="The name of the individual or organization that published the SubscriptionTopic", formalDefinition="Helps establish the \"authority/credibility\" of the SubscriptionTopic.  May also allow for contact." )
2638    protected StringType publisher;
2639
2640    /**
2641     * Contact details to assist a user in finding and communicating with the publisher.
2642     */
2643    @Child(name = "contact", type = {ContactDetail.class}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2644    @Description(shortDefinition="Contact details for the publisher", formalDefinition="Contact details to assist a user in finding and communicating with the publisher." )
2645    protected List<ContactDetail> contact;
2646
2647    /**
2648     * A free text natural language description of the Topic from the consumer's perspective.
2649     */
2650    @Child(name = "description", type = {MarkdownType.class}, order=10, min=0, max=1, modifier=false, summary=false)
2651    @Description(shortDefinition="Natural language description of the SubscriptionTopic", formalDefinition="A free text natural language description of the Topic from the consumer's perspective." )
2652    protected MarkdownType description;
2653
2654    /**
2655     * 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 code system definitions.
2656     */
2657    @Child(name = "useContext", type = {UsageContext.class}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2658    @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 code system definitions." )
2659    protected List<UsageContext> useContext;
2660
2661    /**
2662     * A jurisdiction in which the Topic is intended to be used.
2663     */
2664    @Child(name = "jurisdiction", type = {CodeableConcept.class}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2665    @Description(shortDefinition="Intended jurisdiction of the SubscriptionTopic (if applicable)", formalDefinition="A jurisdiction in which the Topic is intended to be used." )
2666    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/jurisdiction")
2667    protected List<CodeableConcept> jurisdiction;
2668
2669    /**
2670     * Explains why this Topic is needed and why it has been designed as it has.
2671     */
2672    @Child(name = "purpose", type = {MarkdownType.class}, order=13, min=0, max=1, modifier=false, summary=false)
2673    @Description(shortDefinition="Why this SubscriptionTopic is defined", formalDefinition="Explains why this Topic is needed and why it has been designed as it has." )
2674    protected MarkdownType purpose;
2675
2676    /**
2677     * A copyright statement relating to the SubscriptionTopic and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the SubscriptionTopic.
2678     */
2679    @Child(name = "copyright", type = {MarkdownType.class}, order=14, min=0, max=1, modifier=false, summary=false)
2680    @Description(shortDefinition="Use and/or publishing restrictions", formalDefinition="A copyright statement relating to the SubscriptionTopic and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the SubscriptionTopic." )
2681    protected MarkdownType copyright;
2682
2683    /**
2684     * The date on which the asset content was approved by the publisher. Approval happens once when the content is officially approved for usage.
2685     */
2686    @Child(name = "approvalDate", type = {DateType.class}, order=15, min=0, max=1, modifier=false, summary=false)
2687    @Description(shortDefinition="When SubscriptionTopic is/was approved by publisher", formalDefinition="The date on which the asset content was approved by the publisher. Approval happens once when the content is officially approved for usage." )
2688    protected DateType approvalDate;
2689
2690    /**
2691     * The date on which the asset content was last reviewed. Review happens periodically after that, but doesn't change the original approval date.
2692     */
2693    @Child(name = "lastReviewDate", type = {DateType.class}, order=16, min=0, max=1, modifier=false, summary=false)
2694    @Description(shortDefinition="Date the Subscription Topic was last reviewed by the publisher", formalDefinition="The date on which the asset content was last reviewed. Review happens periodically after that, but doesn't change the original approval date." )
2695    protected DateType lastReviewDate;
2696
2697    /**
2698     * The period during which the SubscriptionTopic content was or is planned to be effective.
2699     */
2700    @Child(name = "effectivePeriod", type = {Period.class}, order=17, min=0, max=1, modifier=false, summary=true)
2701    @Description(shortDefinition="The effective date range for the SubscriptionTopic", formalDefinition="The period during which the SubscriptionTopic content was or is planned to be effective." )
2702    protected Period effectivePeriod;
2703
2704    /**
2705     * A definition of a resource-based event that triggers a notification based on the SubscriptionTopic. The criteria may be just a human readable description and/or a full FHIR search string or FHIRPath expression. Multiple triggers are considered OR joined (e.g., a resource update matching ANY of the definitions will trigger a notification).
2706     */
2707    @Child(name = "resourceTrigger", type = {}, order=18, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2708    @Description(shortDefinition="Definition of a resource-based trigger for the subscription topic", formalDefinition="A definition of a resource-based event that triggers a notification based on the SubscriptionTopic. The criteria may be just a human readable description and/or a full FHIR search string or FHIRPath expression. Multiple triggers are considered OR joined (e.g., a resource update matching ANY of the definitions will trigger a notification)." )
2709    protected List<SubscriptionTopicResourceTriggerComponent> resourceTrigger;
2710
2711    /**
2712     * Event definition which can be used to trigger the SubscriptionTopic.
2713     */
2714    @Child(name = "eventTrigger", type = {}, order=19, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2715    @Description(shortDefinition="Event definitions the SubscriptionTopic", formalDefinition="Event definition which can be used to trigger the SubscriptionTopic." )
2716    protected List<SubscriptionTopicEventTriggerComponent> eventTrigger;
2717
2718    /**
2719     * List of properties by which Subscriptions on the SubscriptionTopic can be filtered. May be defined Search Parameters (e.g., Encounter.patient) or parameters defined within this SubscriptionTopic context (e.g., hub.event).
2720     */
2721    @Child(name = "canFilterBy", type = {}, order=20, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2722    @Description(shortDefinition="Properties by which a Subscription can filter notifications from the SubscriptionTopic", formalDefinition="List of properties by which Subscriptions on the SubscriptionTopic can be filtered. May be defined Search Parameters (e.g., Encounter.patient) or parameters defined within this SubscriptionTopic context (e.g., hub.event)." )
2723    protected List<SubscriptionTopicCanFilterByComponent> canFilterBy;
2724
2725    /**
2726     * List of properties to describe the shape (e.g., resources) included in notifications from this Subscription Topic.
2727     */
2728    @Child(name = "notificationShape", type = {}, order=21, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2729    @Description(shortDefinition="Properties for describing the shape of notifications generated by this topic", formalDefinition="List of properties to describe the shape (e.g., resources) included in notifications from this Subscription Topic." )
2730    protected List<SubscriptionTopicNotificationShapeComponent> notificationShape;
2731
2732    private static final long serialVersionUID = -1726252832L;
2733
2734  /**
2735   * Constructor
2736   */
2737    public SubscriptionTopic() {
2738      super();
2739    }
2740
2741  /**
2742   * Constructor
2743   */
2744    public SubscriptionTopic(String url, PublicationStatus status) {
2745      super();
2746      this.setUrl(url);
2747      this.setStatus(status);
2748    }
2749
2750    /**
2751     * @return {@link #url} (An absolute URL that is used to identify this SubscriptionTopic 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 Topic is (or will be) published. The URL SHOULD include the major version of the Topic. For more information see [Technical and Business Versions](resource.html#versions).). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
2752     */
2753    public UriType getUrlElement() { 
2754      if (this.url == null)
2755        if (Configuration.errorOnAutoCreate())
2756          throw new Error("Attempt to auto-create SubscriptionTopic.url");
2757        else if (Configuration.doAutoCreate())
2758          this.url = new UriType(); // bb
2759      return this.url;
2760    }
2761
2762    public boolean hasUrlElement() { 
2763      return this.url != null && !this.url.isEmpty();
2764    }
2765
2766    public boolean hasUrl() { 
2767      return this.url != null && !this.url.isEmpty();
2768    }
2769
2770    /**
2771     * @param value {@link #url} (An absolute URL that is used to identify this SubscriptionTopic 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 Topic is (or will be) published. The URL SHOULD include the major version of the Topic. For more information see [Technical and Business Versions](resource.html#versions).). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
2772     */
2773    public SubscriptionTopic setUrlElement(UriType value) { 
2774      this.url = value;
2775      return this;
2776    }
2777
2778    /**
2779     * @return An absolute URL that is used to identify this SubscriptionTopic 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 Topic is (or will be) published. The URL SHOULD include the major version of the Topic. For more information see [Technical and Business Versions](resource.html#versions).
2780     */
2781    public String getUrl() { 
2782      return this.url == null ? null : this.url.getValue();
2783    }
2784
2785    /**
2786     * @param value An absolute URL that is used to identify this SubscriptionTopic 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 Topic is (or will be) published. The URL SHOULD include the major version of the Topic. For more information see [Technical and Business Versions](resource.html#versions).
2787     */
2788    public SubscriptionTopic setUrl(String value) { 
2789        if (this.url == null)
2790          this.url = new UriType();
2791        this.url.setValue(value);
2792      return this;
2793    }
2794
2795    /**
2796     * @return {@link #identifier} (Business identifiers assigned to this SubscriptionTopic by the performer and/or other systems.  These identifiers remain constant as the resource is updated and propagates from server to server.)
2797     */
2798    public List<Identifier> getIdentifier() { 
2799      if (this.identifier == null)
2800        this.identifier = new ArrayList<Identifier>();
2801      return this.identifier;
2802    }
2803
2804    /**
2805     * @return Returns a reference to <code>this</code> for easy method chaining
2806     */
2807    public SubscriptionTopic setIdentifier(List<Identifier> theIdentifier) { 
2808      this.identifier = theIdentifier;
2809      return this;
2810    }
2811
2812    public boolean hasIdentifier() { 
2813      if (this.identifier == null)
2814        return false;
2815      for (Identifier item : this.identifier)
2816        if (!item.isEmpty())
2817          return true;
2818      return false;
2819    }
2820
2821    public Identifier addIdentifier() { //3
2822      Identifier t = new Identifier();
2823      if (this.identifier == null)
2824        this.identifier = new ArrayList<Identifier>();
2825      this.identifier.add(t);
2826      return t;
2827    }
2828
2829    public SubscriptionTopic addIdentifier(Identifier t) { //3
2830      if (t == null)
2831        return this;
2832      if (this.identifier == null)
2833        this.identifier = new ArrayList<Identifier>();
2834      this.identifier.add(t);
2835      return this;
2836    }
2837
2838    /**
2839     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
2840     */
2841    public Identifier getIdentifierFirstRep() { 
2842      if (getIdentifier().isEmpty()) {
2843        addIdentifier();
2844      }
2845      return getIdentifier().get(0);
2846    }
2847
2848    /**
2849     * @return {@link #version} (The identifier that is used to identify this version of the SubscriptionTopic when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the Topic author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions are orderable.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
2850     */
2851    public StringType getVersionElement() { 
2852      if (this.version == null)
2853        if (Configuration.errorOnAutoCreate())
2854          throw new Error("Attempt to auto-create SubscriptionTopic.version");
2855        else if (Configuration.doAutoCreate())
2856          this.version = new StringType(); // bb
2857      return this.version;
2858    }
2859
2860    public boolean hasVersionElement() { 
2861      return this.version != null && !this.version.isEmpty();
2862    }
2863
2864    public boolean hasVersion() { 
2865      return this.version != null && !this.version.isEmpty();
2866    }
2867
2868    /**
2869     * @param value {@link #version} (The identifier that is used to identify this version of the SubscriptionTopic when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the Topic author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions are orderable.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
2870     */
2871    public SubscriptionTopic setVersionElement(StringType value) { 
2872      this.version = value;
2873      return this;
2874    }
2875
2876    /**
2877     * @return The identifier that is used to identify this version of the SubscriptionTopic when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the Topic author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions are orderable.
2878     */
2879    public String getVersion() { 
2880      return this.version == null ? null : this.version.getValue();
2881    }
2882
2883    /**
2884     * @param value The identifier that is used to identify this version of the SubscriptionTopic when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the Topic author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions are orderable.
2885     */
2886    public SubscriptionTopic setVersion(String value) { 
2887      if (Utilities.noString(value))
2888        this.version = null;
2889      else {
2890        if (this.version == null)
2891          this.version = new StringType();
2892        this.version.setValue(value);
2893      }
2894      return this;
2895    }
2896
2897    /**
2898     * @return {@link #title} (A short, descriptive, user-friendly title for the SubscriptionTopic, for example, "admission".). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
2899     */
2900    public StringType getTitleElement() { 
2901      if (this.title == null)
2902        if (Configuration.errorOnAutoCreate())
2903          throw new Error("Attempt to auto-create SubscriptionTopic.title");
2904        else if (Configuration.doAutoCreate())
2905          this.title = new StringType(); // bb
2906      return this.title;
2907    }
2908
2909    public boolean hasTitleElement() { 
2910      return this.title != null && !this.title.isEmpty();
2911    }
2912
2913    public boolean hasTitle() { 
2914      return this.title != null && !this.title.isEmpty();
2915    }
2916
2917    /**
2918     * @param value {@link #title} (A short, descriptive, user-friendly title for the SubscriptionTopic, for example, "admission".). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
2919     */
2920    public SubscriptionTopic setTitleElement(StringType value) { 
2921      this.title = value;
2922      return this;
2923    }
2924
2925    /**
2926     * @return A short, descriptive, user-friendly title for the SubscriptionTopic, for example, "admission".
2927     */
2928    public String getTitle() { 
2929      return this.title == null ? null : this.title.getValue();
2930    }
2931
2932    /**
2933     * @param value A short, descriptive, user-friendly title for the SubscriptionTopic, for example, "admission".
2934     */
2935    public SubscriptionTopic setTitle(String value) { 
2936      if (Utilities.noString(value))
2937        this.title = null;
2938      else {
2939        if (this.title == null)
2940          this.title = new StringType();
2941        this.title.setValue(value);
2942      }
2943      return this;
2944    }
2945
2946    /**
2947     * @return {@link #derivedFrom} (The canonical URL pointing to another FHIR-defined SubscriptionTopic that is adhered to in whole or in part by this SubscriptionTopic.)
2948     */
2949    public List<CanonicalType> getDerivedFrom() { 
2950      if (this.derivedFrom == null)
2951        this.derivedFrom = new ArrayList<CanonicalType>();
2952      return this.derivedFrom;
2953    }
2954
2955    /**
2956     * @return Returns a reference to <code>this</code> for easy method chaining
2957     */
2958    public SubscriptionTopic setDerivedFrom(List<CanonicalType> theDerivedFrom) { 
2959      this.derivedFrom = theDerivedFrom;
2960      return this;
2961    }
2962
2963    public boolean hasDerivedFrom() { 
2964      if (this.derivedFrom == null)
2965        return false;
2966      for (CanonicalType item : this.derivedFrom)
2967        if (!item.isEmpty())
2968          return true;
2969      return false;
2970    }
2971
2972    /**
2973     * @return {@link #derivedFrom} (The canonical URL pointing to another FHIR-defined SubscriptionTopic that is adhered to in whole or in part by this SubscriptionTopic.)
2974     */
2975    public CanonicalType addDerivedFromElement() {//2 
2976      CanonicalType t = new CanonicalType();
2977      if (this.derivedFrom == null)
2978        this.derivedFrom = new ArrayList<CanonicalType>();
2979      this.derivedFrom.add(t);
2980      return t;
2981    }
2982
2983    /**
2984     * @param value {@link #derivedFrom} (The canonical URL pointing to another FHIR-defined SubscriptionTopic that is adhered to in whole or in part by this SubscriptionTopic.)
2985     */
2986    public SubscriptionTopic addDerivedFrom(String value) { //1
2987      CanonicalType t = new CanonicalType();
2988      t.setValue(value);
2989      if (this.derivedFrom == null)
2990        this.derivedFrom = new ArrayList<CanonicalType>();
2991      this.derivedFrom.add(t);
2992      return this;
2993    }
2994
2995    /**
2996     * @param value {@link #derivedFrom} (The canonical URL pointing to another FHIR-defined SubscriptionTopic that is adhered to in whole or in part by this SubscriptionTopic.)
2997     */
2998    public boolean hasDerivedFrom(String value) { 
2999      if (this.derivedFrom == null)
3000        return false;
3001      for (CanonicalType v : this.derivedFrom)
3002        if (v.getValue().equals(value)) // canonical
3003          return true;
3004      return false;
3005    }
3006
3007    /**
3008     * @return {@link #status} (The current state of the SubscriptionTopic.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
3009     */
3010    public Enumeration<PublicationStatus> getStatusElement() { 
3011      if (this.status == null)
3012        if (Configuration.errorOnAutoCreate())
3013          throw new Error("Attempt to auto-create SubscriptionTopic.status");
3014        else if (Configuration.doAutoCreate())
3015          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory()); // bb
3016      return this.status;
3017    }
3018
3019    public boolean hasStatusElement() { 
3020      return this.status != null && !this.status.isEmpty();
3021    }
3022
3023    public boolean hasStatus() { 
3024      return this.status != null && !this.status.isEmpty();
3025    }
3026
3027    /**
3028     * @param value {@link #status} (The current state of the SubscriptionTopic.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
3029     */
3030    public SubscriptionTopic setStatusElement(Enumeration<PublicationStatus> value) { 
3031      this.status = value;
3032      return this;
3033    }
3034
3035    /**
3036     * @return The current state of the SubscriptionTopic.
3037     */
3038    public PublicationStatus getStatus() { 
3039      return this.status == null ? null : this.status.getValue();
3040    }
3041
3042    /**
3043     * @param value The current state of the SubscriptionTopic.
3044     */
3045    public SubscriptionTopic setStatus(PublicationStatus value) { 
3046        if (this.status == null)
3047          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory());
3048        this.status.setValue(value);
3049      return this;
3050    }
3051
3052    /**
3053     * @return {@link #experimental} (A flag to indicate that this TopSubscriptionTopicic 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
3054     */
3055    public BooleanType getExperimentalElement() { 
3056      if (this.experimental == null)
3057        if (Configuration.errorOnAutoCreate())
3058          throw new Error("Attempt to auto-create SubscriptionTopic.experimental");
3059        else if (Configuration.doAutoCreate())
3060          this.experimental = new BooleanType(); // bb
3061      return this.experimental;
3062    }
3063
3064    public boolean hasExperimentalElement() { 
3065      return this.experimental != null && !this.experimental.isEmpty();
3066    }
3067
3068    public boolean hasExperimental() { 
3069      return this.experimental != null && !this.experimental.isEmpty();
3070    }
3071
3072    /**
3073     * @param value {@link #experimental} (A flag to indicate that this TopSubscriptionTopicic 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
3074     */
3075    public SubscriptionTopic setExperimentalElement(BooleanType value) { 
3076      this.experimental = value;
3077      return this;
3078    }
3079
3080    /**
3081     * @return A flag to indicate that this TopSubscriptionTopicic is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
3082     */
3083    public boolean getExperimental() { 
3084      return this.experimental == null || this.experimental.isEmpty() ? false : this.experimental.getValue();
3085    }
3086
3087    /**
3088     * @param value A flag to indicate that this TopSubscriptionTopicic is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
3089     */
3090    public SubscriptionTopic setExperimental(boolean value) { 
3091        if (this.experimental == null)
3092          this.experimental = new BooleanType();
3093        this.experimental.setValue(value);
3094      return this;
3095    }
3096
3097    /**
3098     * @return {@link #date} (For draft definitions, indicates the date of initial creation.  For active definitions, represents the date of activation.  For withdrawn definitions, indicates the date of withdrawal.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
3099     */
3100    public DateTimeType getDateElement() { 
3101      if (this.date == null)
3102        if (Configuration.errorOnAutoCreate())
3103          throw new Error("Attempt to auto-create SubscriptionTopic.date");
3104        else if (Configuration.doAutoCreate())
3105          this.date = new DateTimeType(); // bb
3106      return this.date;
3107    }
3108
3109    public boolean hasDateElement() { 
3110      return this.date != null && !this.date.isEmpty();
3111    }
3112
3113    public boolean hasDate() { 
3114      return this.date != null && !this.date.isEmpty();
3115    }
3116
3117    /**
3118     * @param value {@link #date} (For draft definitions, indicates the date of initial creation.  For active definitions, represents the date of activation.  For withdrawn definitions, indicates the date of withdrawal.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
3119     */
3120    public SubscriptionTopic setDateElement(DateTimeType value) { 
3121      this.date = value;
3122      return this;
3123    }
3124
3125    /**
3126     * @return For draft definitions, indicates the date of initial creation.  For active definitions, represents the date of activation.  For withdrawn definitions, indicates the date of withdrawal.
3127     */
3128    public Date getDate() { 
3129      return this.date == null ? null : this.date.getValue();
3130    }
3131
3132    /**
3133     * @param value For draft definitions, indicates the date of initial creation.  For active definitions, represents the date of activation.  For withdrawn definitions, indicates the date of withdrawal.
3134     */
3135    public SubscriptionTopic setDate(Date value) { 
3136      if (value == null)
3137        this.date = null;
3138      else {
3139        if (this.date == null)
3140          this.date = new DateTimeType();
3141        this.date.setValue(value);
3142      }
3143      return this;
3144    }
3145
3146    /**
3147     * @return {@link #publisher} (Helps establish the "authority/credibility" of the SubscriptionTopic.  May also allow for contact.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
3148     */
3149    public StringType getPublisherElement() { 
3150      if (this.publisher == null)
3151        if (Configuration.errorOnAutoCreate())
3152          throw new Error("Attempt to auto-create SubscriptionTopic.publisher");
3153        else if (Configuration.doAutoCreate())
3154          this.publisher = new StringType(); // bb
3155      return this.publisher;
3156    }
3157
3158    public boolean hasPublisherElement() { 
3159      return this.publisher != null && !this.publisher.isEmpty();
3160    }
3161
3162    public boolean hasPublisher() { 
3163      return this.publisher != null && !this.publisher.isEmpty();
3164    }
3165
3166    /**
3167     * @param value {@link #publisher} (Helps establish the "authority/credibility" of the SubscriptionTopic.  May also allow for contact.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
3168     */
3169    public SubscriptionTopic setPublisherElement(StringType value) { 
3170      this.publisher = value;
3171      return this;
3172    }
3173
3174    /**
3175     * @return Helps establish the "authority/credibility" of the SubscriptionTopic.  May also allow for contact.
3176     */
3177    public String getPublisher() { 
3178      return this.publisher == null ? null : this.publisher.getValue();
3179    }
3180
3181    /**
3182     * @param value Helps establish the "authority/credibility" of the SubscriptionTopic.  May also allow for contact.
3183     */
3184    public SubscriptionTopic setPublisher(String value) { 
3185      if (Utilities.noString(value))
3186        this.publisher = null;
3187      else {
3188        if (this.publisher == null)
3189          this.publisher = new StringType();
3190        this.publisher.setValue(value);
3191      }
3192      return this;
3193    }
3194
3195    /**
3196     * @return {@link #contact} (Contact details to assist a user in finding and communicating with the publisher.)
3197     */
3198    public List<ContactDetail> getContact() { 
3199      if (this.contact == null)
3200        this.contact = new ArrayList<ContactDetail>();
3201      return this.contact;
3202    }
3203
3204    /**
3205     * @return Returns a reference to <code>this</code> for easy method chaining
3206     */
3207    public SubscriptionTopic setContact(List<ContactDetail> theContact) { 
3208      this.contact = theContact;
3209      return this;
3210    }
3211
3212    public boolean hasContact() { 
3213      if (this.contact == null)
3214        return false;
3215      for (ContactDetail item : this.contact)
3216        if (!item.isEmpty())
3217          return true;
3218      return false;
3219    }
3220
3221    public ContactDetail addContact() { //3
3222      ContactDetail t = new ContactDetail();
3223      if (this.contact == null)
3224        this.contact = new ArrayList<ContactDetail>();
3225      this.contact.add(t);
3226      return t;
3227    }
3228
3229    public SubscriptionTopic addContact(ContactDetail t) { //3
3230      if (t == null)
3231        return this;
3232      if (this.contact == null)
3233        this.contact = new ArrayList<ContactDetail>();
3234      this.contact.add(t);
3235      return this;
3236    }
3237
3238    /**
3239     * @return The first repetition of repeating field {@link #contact}, creating it if it does not already exist {3}
3240     */
3241    public ContactDetail getContactFirstRep() { 
3242      if (getContact().isEmpty()) {
3243        addContact();
3244      }
3245      return getContact().get(0);
3246    }
3247
3248    /**
3249     * @return {@link #description} (A free text natural language description of the Topic from the consumer's perspective.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
3250     */
3251    public MarkdownType getDescriptionElement() { 
3252      if (this.description == null)
3253        if (Configuration.errorOnAutoCreate())
3254          throw new Error("Attempt to auto-create SubscriptionTopic.description");
3255        else if (Configuration.doAutoCreate())
3256          this.description = new MarkdownType(); // bb
3257      return this.description;
3258    }
3259
3260    public boolean hasDescriptionElement() { 
3261      return this.description != null && !this.description.isEmpty();
3262    }
3263
3264    public boolean hasDescription() { 
3265      return this.description != null && !this.description.isEmpty();
3266    }
3267
3268    /**
3269     * @param value {@link #description} (A free text natural language description of the Topic from the consumer's perspective.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
3270     */
3271    public SubscriptionTopic setDescriptionElement(MarkdownType value) { 
3272      this.description = value;
3273      return this;
3274    }
3275
3276    /**
3277     * @return A free text natural language description of the Topic from the consumer's perspective.
3278     */
3279    public String getDescription() { 
3280      return this.description == null ? null : this.description.getValue();
3281    }
3282
3283    /**
3284     * @param value A free text natural language description of the Topic from the consumer's perspective.
3285     */
3286    public SubscriptionTopic setDescription(String value) { 
3287      if (value == null)
3288        this.description = null;
3289      else {
3290        if (this.description == null)
3291          this.description = new MarkdownType();
3292        this.description.setValue(value);
3293      }
3294      return this;
3295    }
3296
3297    /**
3298     * @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 code system definitions.)
3299     */
3300    public List<UsageContext> getUseContext() { 
3301      if (this.useContext == null)
3302        this.useContext = new ArrayList<UsageContext>();
3303      return this.useContext;
3304    }
3305
3306    /**
3307     * @return Returns a reference to <code>this</code> for easy method chaining
3308     */
3309    public SubscriptionTopic setUseContext(List<UsageContext> theUseContext) { 
3310      this.useContext = theUseContext;
3311      return this;
3312    }
3313
3314    public boolean hasUseContext() { 
3315      if (this.useContext == null)
3316        return false;
3317      for (UsageContext item : this.useContext)
3318        if (!item.isEmpty())
3319          return true;
3320      return false;
3321    }
3322
3323    public UsageContext addUseContext() { //3
3324      UsageContext t = new UsageContext();
3325      if (this.useContext == null)
3326        this.useContext = new ArrayList<UsageContext>();
3327      this.useContext.add(t);
3328      return t;
3329    }
3330
3331    public SubscriptionTopic addUseContext(UsageContext t) { //3
3332      if (t == null)
3333        return this;
3334      if (this.useContext == null)
3335        this.useContext = new ArrayList<UsageContext>();
3336      this.useContext.add(t);
3337      return this;
3338    }
3339
3340    /**
3341     * @return The first repetition of repeating field {@link #useContext}, creating it if it does not already exist {3}
3342     */
3343    public UsageContext getUseContextFirstRep() { 
3344      if (getUseContext().isEmpty()) {
3345        addUseContext();
3346      }
3347      return getUseContext().get(0);
3348    }
3349
3350    /**
3351     * @return {@link #jurisdiction} (A jurisdiction in which the Topic is intended to be used.)
3352     */
3353    public List<CodeableConcept> getJurisdiction() { 
3354      if (this.jurisdiction == null)
3355        this.jurisdiction = new ArrayList<CodeableConcept>();
3356      return this.jurisdiction;
3357    }
3358
3359    /**
3360     * @return Returns a reference to <code>this</code> for easy method chaining
3361     */
3362    public SubscriptionTopic setJurisdiction(List<CodeableConcept> theJurisdiction) { 
3363      this.jurisdiction = theJurisdiction;
3364      return this;
3365    }
3366
3367    public boolean hasJurisdiction() { 
3368      if (this.jurisdiction == null)
3369        return false;
3370      for (CodeableConcept item : this.jurisdiction)
3371        if (!item.isEmpty())
3372          return true;
3373      return false;
3374    }
3375
3376    public CodeableConcept addJurisdiction() { //3
3377      CodeableConcept t = new CodeableConcept();
3378      if (this.jurisdiction == null)
3379        this.jurisdiction = new ArrayList<CodeableConcept>();
3380      this.jurisdiction.add(t);
3381      return t;
3382    }
3383
3384    public SubscriptionTopic addJurisdiction(CodeableConcept t) { //3
3385      if (t == null)
3386        return this;
3387      if (this.jurisdiction == null)
3388        this.jurisdiction = new ArrayList<CodeableConcept>();
3389      this.jurisdiction.add(t);
3390      return this;
3391    }
3392
3393    /**
3394     * @return The first repetition of repeating field {@link #jurisdiction}, creating it if it does not already exist {3}
3395     */
3396    public CodeableConcept getJurisdictionFirstRep() { 
3397      if (getJurisdiction().isEmpty()) {
3398        addJurisdiction();
3399      }
3400      return getJurisdiction().get(0);
3401    }
3402
3403    /**
3404     * @return {@link #purpose} (Explains why this Topic is needed and why it has been designed as it has.). This is the underlying object with id, value and extensions. The accessor "getPurpose" gives direct access to the value
3405     */
3406    public MarkdownType getPurposeElement() { 
3407      if (this.purpose == null)
3408        if (Configuration.errorOnAutoCreate())
3409          throw new Error("Attempt to auto-create SubscriptionTopic.purpose");
3410        else if (Configuration.doAutoCreate())
3411          this.purpose = new MarkdownType(); // bb
3412      return this.purpose;
3413    }
3414
3415    public boolean hasPurposeElement() { 
3416      return this.purpose != null && !this.purpose.isEmpty();
3417    }
3418
3419    public boolean hasPurpose() { 
3420      return this.purpose != null && !this.purpose.isEmpty();
3421    }
3422
3423    /**
3424     * @param value {@link #purpose} (Explains why this Topic is needed and why it has been designed as it has.). This is the underlying object with id, value and extensions. The accessor "getPurpose" gives direct access to the value
3425     */
3426    public SubscriptionTopic setPurposeElement(MarkdownType value) { 
3427      this.purpose = value;
3428      return this;
3429    }
3430
3431    /**
3432     * @return Explains why this Topic is needed and why it has been designed as it has.
3433     */
3434    public String getPurpose() { 
3435      return this.purpose == null ? null : this.purpose.getValue();
3436    }
3437
3438    /**
3439     * @param value Explains why this Topic is needed and why it has been designed as it has.
3440     */
3441    public SubscriptionTopic setPurpose(String value) { 
3442      if (value == null)
3443        this.purpose = null;
3444      else {
3445        if (this.purpose == null)
3446          this.purpose = new MarkdownType();
3447        this.purpose.setValue(value);
3448      }
3449      return this;
3450    }
3451
3452    /**
3453     * @return {@link #copyright} (A copyright statement relating to the SubscriptionTopic and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the SubscriptionTopic.). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
3454     */
3455    public MarkdownType getCopyrightElement() { 
3456      if (this.copyright == null)
3457        if (Configuration.errorOnAutoCreate())
3458          throw new Error("Attempt to auto-create SubscriptionTopic.copyright");
3459        else if (Configuration.doAutoCreate())
3460          this.copyright = new MarkdownType(); // bb
3461      return this.copyright;
3462    }
3463
3464    public boolean hasCopyrightElement() { 
3465      return this.copyright != null && !this.copyright.isEmpty();
3466    }
3467
3468    public boolean hasCopyright() { 
3469      return this.copyright != null && !this.copyright.isEmpty();
3470    }
3471
3472    /**
3473     * @param value {@link #copyright} (A copyright statement relating to the SubscriptionTopic and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the SubscriptionTopic.). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
3474     */
3475    public SubscriptionTopic setCopyrightElement(MarkdownType value) { 
3476      this.copyright = value;
3477      return this;
3478    }
3479
3480    /**
3481     * @return A copyright statement relating to the SubscriptionTopic and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the SubscriptionTopic.
3482     */
3483    public String getCopyright() { 
3484      return this.copyright == null ? null : this.copyright.getValue();
3485    }
3486
3487    /**
3488     * @param value A copyright statement relating to the SubscriptionTopic and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the SubscriptionTopic.
3489     */
3490    public SubscriptionTopic setCopyright(String value) { 
3491      if (value == null)
3492        this.copyright = null;
3493      else {
3494        if (this.copyright == null)
3495          this.copyright = new MarkdownType();
3496        this.copyright.setValue(value);
3497      }
3498      return this;
3499    }
3500
3501    /**
3502     * @return {@link #approvalDate} (The date on which the asset content was approved by the publisher. Approval happens once when the content is officially approved for usage.). This is the underlying object with id, value and extensions. The accessor "getApprovalDate" gives direct access to the value
3503     */
3504    public DateType getApprovalDateElement() { 
3505      if (this.approvalDate == null)
3506        if (Configuration.errorOnAutoCreate())
3507          throw new Error("Attempt to auto-create SubscriptionTopic.approvalDate");
3508        else if (Configuration.doAutoCreate())
3509          this.approvalDate = new DateType(); // bb
3510      return this.approvalDate;
3511    }
3512
3513    public boolean hasApprovalDateElement() { 
3514      return this.approvalDate != null && !this.approvalDate.isEmpty();
3515    }
3516
3517    public boolean hasApprovalDate() { 
3518      return this.approvalDate != null && !this.approvalDate.isEmpty();
3519    }
3520
3521    /**
3522     * @param value {@link #approvalDate} (The date on which the asset content was approved by the publisher. Approval happens once when the content is officially approved for usage.). This is the underlying object with id, value and extensions. The accessor "getApprovalDate" gives direct access to the value
3523     */
3524    public SubscriptionTopic setApprovalDateElement(DateType value) { 
3525      this.approvalDate = value;
3526      return this;
3527    }
3528
3529    /**
3530     * @return The date on which the asset content was approved by the publisher. Approval happens once when the content is officially approved for usage.
3531     */
3532    public Date getApprovalDate() { 
3533      return this.approvalDate == null ? null : this.approvalDate.getValue();
3534    }
3535
3536    /**
3537     * @param value The date on which the asset content was approved by the publisher. Approval happens once when the content is officially approved for usage.
3538     */
3539    public SubscriptionTopic setApprovalDate(Date value) { 
3540      if (value == null)
3541        this.approvalDate = null;
3542      else {
3543        if (this.approvalDate == null)
3544          this.approvalDate = new DateType();
3545        this.approvalDate.setValue(value);
3546      }
3547      return this;
3548    }
3549
3550    /**
3551     * @return {@link #lastReviewDate} (The date on which the asset content was last reviewed. Review happens periodically after that, but doesn't change the original approval date.). This is the underlying object with id, value and extensions. The accessor "getLastReviewDate" gives direct access to the value
3552     */
3553    public DateType getLastReviewDateElement() { 
3554      if (this.lastReviewDate == null)
3555        if (Configuration.errorOnAutoCreate())
3556          throw new Error("Attempt to auto-create SubscriptionTopic.lastReviewDate");
3557        else if (Configuration.doAutoCreate())
3558          this.lastReviewDate = new DateType(); // bb
3559      return this.lastReviewDate;
3560    }
3561
3562    public boolean hasLastReviewDateElement() { 
3563      return this.lastReviewDate != null && !this.lastReviewDate.isEmpty();
3564    }
3565
3566    public boolean hasLastReviewDate() { 
3567      return this.lastReviewDate != null && !this.lastReviewDate.isEmpty();
3568    }
3569
3570    /**
3571     * @param value {@link #lastReviewDate} (The date on which the asset content was last reviewed. Review happens periodically after that, but doesn't change the original approval date.). This is the underlying object with id, value and extensions. The accessor "getLastReviewDate" gives direct access to the value
3572     */
3573    public SubscriptionTopic setLastReviewDateElement(DateType value) { 
3574      this.lastReviewDate = value;
3575      return this;
3576    }
3577
3578    /**
3579     * @return The date on which the asset content was last reviewed. Review happens periodically after that, but doesn't change the original approval date.
3580     */
3581    public Date getLastReviewDate() { 
3582      return this.lastReviewDate == null ? null : this.lastReviewDate.getValue();
3583    }
3584
3585    /**
3586     * @param value The date on which the asset content was last reviewed. Review happens periodically after that, but doesn't change the original approval date.
3587     */
3588    public SubscriptionTopic setLastReviewDate(Date value) { 
3589      if (value == null)
3590        this.lastReviewDate = null;
3591      else {
3592        if (this.lastReviewDate == null)
3593          this.lastReviewDate = new DateType();
3594        this.lastReviewDate.setValue(value);
3595      }
3596      return this;
3597    }
3598
3599    /**
3600     * @return {@link #effectivePeriod} (The period during which the SubscriptionTopic content was or is planned to be effective.)
3601     */
3602    public Period getEffectivePeriod() { 
3603      if (this.effectivePeriod == null)
3604        if (Configuration.errorOnAutoCreate())
3605          throw new Error("Attempt to auto-create SubscriptionTopic.effectivePeriod");
3606        else if (Configuration.doAutoCreate())
3607          this.effectivePeriod = new Period(); // cc
3608      return this.effectivePeriod;
3609    }
3610
3611    public boolean hasEffectivePeriod() { 
3612      return this.effectivePeriod != null && !this.effectivePeriod.isEmpty();
3613    }
3614
3615    /**
3616     * @param value {@link #effectivePeriod} (The period during which the SubscriptionTopic content was or is planned to be effective.)
3617     */
3618    public SubscriptionTopic setEffectivePeriod(Period value) { 
3619      this.effectivePeriod = value;
3620      return this;
3621    }
3622
3623    /**
3624     * @return {@link #resourceTrigger} (A definition of a resource-based event that triggers a notification based on the SubscriptionTopic. The criteria may be just a human readable description and/or a full FHIR search string or FHIRPath expression. Multiple triggers are considered OR joined (e.g., a resource update matching ANY of the definitions will trigger a notification).)
3625     */
3626    public List<SubscriptionTopicResourceTriggerComponent> getResourceTrigger() { 
3627      if (this.resourceTrigger == null)
3628        this.resourceTrigger = new ArrayList<SubscriptionTopicResourceTriggerComponent>();
3629      return this.resourceTrigger;
3630    }
3631
3632    /**
3633     * @return Returns a reference to <code>this</code> for easy method chaining
3634     */
3635    public SubscriptionTopic setResourceTrigger(List<SubscriptionTopicResourceTriggerComponent> theResourceTrigger) { 
3636      this.resourceTrigger = theResourceTrigger;
3637      return this;
3638    }
3639
3640    public boolean hasResourceTrigger() { 
3641      if (this.resourceTrigger == null)
3642        return false;
3643      for (SubscriptionTopicResourceTriggerComponent item : this.resourceTrigger)
3644        if (!item.isEmpty())
3645          return true;
3646      return false;
3647    }
3648
3649    public SubscriptionTopicResourceTriggerComponent addResourceTrigger() { //3
3650      SubscriptionTopicResourceTriggerComponent t = new SubscriptionTopicResourceTriggerComponent();
3651      if (this.resourceTrigger == null)
3652        this.resourceTrigger = new ArrayList<SubscriptionTopicResourceTriggerComponent>();
3653      this.resourceTrigger.add(t);
3654      return t;
3655    }
3656
3657    public SubscriptionTopic addResourceTrigger(SubscriptionTopicResourceTriggerComponent t) { //3
3658      if (t == null)
3659        return this;
3660      if (this.resourceTrigger == null)
3661        this.resourceTrigger = new ArrayList<SubscriptionTopicResourceTriggerComponent>();
3662      this.resourceTrigger.add(t);
3663      return this;
3664    }
3665
3666    /**
3667     * @return The first repetition of repeating field {@link #resourceTrigger}, creating it if it does not already exist {3}
3668     */
3669    public SubscriptionTopicResourceTriggerComponent getResourceTriggerFirstRep() { 
3670      if (getResourceTrigger().isEmpty()) {
3671        addResourceTrigger();
3672      }
3673      return getResourceTrigger().get(0);
3674    }
3675
3676    /**
3677     * @return {@link #eventTrigger} (Event definition which can be used to trigger the SubscriptionTopic.)
3678     */
3679    public List<SubscriptionTopicEventTriggerComponent> getEventTrigger() { 
3680      if (this.eventTrigger == null)
3681        this.eventTrigger = new ArrayList<SubscriptionTopicEventTriggerComponent>();
3682      return this.eventTrigger;
3683    }
3684
3685    /**
3686     * @return Returns a reference to <code>this</code> for easy method chaining
3687     */
3688    public SubscriptionTopic setEventTrigger(List<SubscriptionTopicEventTriggerComponent> theEventTrigger) { 
3689      this.eventTrigger = theEventTrigger;
3690      return this;
3691    }
3692
3693    public boolean hasEventTrigger() { 
3694      if (this.eventTrigger == null)
3695        return false;
3696      for (SubscriptionTopicEventTriggerComponent item : this.eventTrigger)
3697        if (!item.isEmpty())
3698          return true;
3699      return false;
3700    }
3701
3702    public SubscriptionTopicEventTriggerComponent addEventTrigger() { //3
3703      SubscriptionTopicEventTriggerComponent t = new SubscriptionTopicEventTriggerComponent();
3704      if (this.eventTrigger == null)
3705        this.eventTrigger = new ArrayList<SubscriptionTopicEventTriggerComponent>();
3706      this.eventTrigger.add(t);
3707      return t;
3708    }
3709
3710    public SubscriptionTopic addEventTrigger(SubscriptionTopicEventTriggerComponent t) { //3
3711      if (t == null)
3712        return this;
3713      if (this.eventTrigger == null)
3714        this.eventTrigger = new ArrayList<SubscriptionTopicEventTriggerComponent>();
3715      this.eventTrigger.add(t);
3716      return this;
3717    }
3718
3719    /**
3720     * @return The first repetition of repeating field {@link #eventTrigger}, creating it if it does not already exist {3}
3721     */
3722    public SubscriptionTopicEventTriggerComponent getEventTriggerFirstRep() { 
3723      if (getEventTrigger().isEmpty()) {
3724        addEventTrigger();
3725      }
3726      return getEventTrigger().get(0);
3727    }
3728
3729    /**
3730     * @return {@link #canFilterBy} (List of properties by which Subscriptions on the SubscriptionTopic can be filtered. May be defined Search Parameters (e.g., Encounter.patient) or parameters defined within this SubscriptionTopic context (e.g., hub.event).)
3731     */
3732    public List<SubscriptionTopicCanFilterByComponent> getCanFilterBy() { 
3733      if (this.canFilterBy == null)
3734        this.canFilterBy = new ArrayList<SubscriptionTopicCanFilterByComponent>();
3735      return this.canFilterBy;
3736    }
3737
3738    /**
3739     * @return Returns a reference to <code>this</code> for easy method chaining
3740     */
3741    public SubscriptionTopic setCanFilterBy(List<SubscriptionTopicCanFilterByComponent> theCanFilterBy) { 
3742      this.canFilterBy = theCanFilterBy;
3743      return this;
3744    }
3745
3746    public boolean hasCanFilterBy() { 
3747      if (this.canFilterBy == null)
3748        return false;
3749      for (SubscriptionTopicCanFilterByComponent item : this.canFilterBy)
3750        if (!item.isEmpty())
3751          return true;
3752      return false;
3753    }
3754
3755    public SubscriptionTopicCanFilterByComponent addCanFilterBy() { //3
3756      SubscriptionTopicCanFilterByComponent t = new SubscriptionTopicCanFilterByComponent();
3757      if (this.canFilterBy == null)
3758        this.canFilterBy = new ArrayList<SubscriptionTopicCanFilterByComponent>();
3759      this.canFilterBy.add(t);
3760      return t;
3761    }
3762
3763    public SubscriptionTopic addCanFilterBy(SubscriptionTopicCanFilterByComponent t) { //3
3764      if (t == null)
3765        return this;
3766      if (this.canFilterBy == null)
3767        this.canFilterBy = new ArrayList<SubscriptionTopicCanFilterByComponent>();
3768      this.canFilterBy.add(t);
3769      return this;
3770    }
3771
3772    /**
3773     * @return The first repetition of repeating field {@link #canFilterBy}, creating it if it does not already exist {3}
3774     */
3775    public SubscriptionTopicCanFilterByComponent getCanFilterByFirstRep() { 
3776      if (getCanFilterBy().isEmpty()) {
3777        addCanFilterBy();
3778      }
3779      return getCanFilterBy().get(0);
3780    }
3781
3782    /**
3783     * @return {@link #notificationShape} (List of properties to describe the shape (e.g., resources) included in notifications from this Subscription Topic.)
3784     */
3785    public List<SubscriptionTopicNotificationShapeComponent> getNotificationShape() { 
3786      if (this.notificationShape == null)
3787        this.notificationShape = new ArrayList<SubscriptionTopicNotificationShapeComponent>();
3788      return this.notificationShape;
3789    }
3790
3791    /**
3792     * @return Returns a reference to <code>this</code> for easy method chaining
3793     */
3794    public SubscriptionTopic setNotificationShape(List<SubscriptionTopicNotificationShapeComponent> theNotificationShape) { 
3795      this.notificationShape = theNotificationShape;
3796      return this;
3797    }
3798
3799    public boolean hasNotificationShape() { 
3800      if (this.notificationShape == null)
3801        return false;
3802      for (SubscriptionTopicNotificationShapeComponent item : this.notificationShape)
3803        if (!item.isEmpty())
3804          return true;
3805      return false;
3806    }
3807
3808    public SubscriptionTopicNotificationShapeComponent addNotificationShape() { //3
3809      SubscriptionTopicNotificationShapeComponent t = new SubscriptionTopicNotificationShapeComponent();
3810      if (this.notificationShape == null)
3811        this.notificationShape = new ArrayList<SubscriptionTopicNotificationShapeComponent>();
3812      this.notificationShape.add(t);
3813      return t;
3814    }
3815
3816    public SubscriptionTopic addNotificationShape(SubscriptionTopicNotificationShapeComponent t) { //3
3817      if (t == null)
3818        return this;
3819      if (this.notificationShape == null)
3820        this.notificationShape = new ArrayList<SubscriptionTopicNotificationShapeComponent>();
3821      this.notificationShape.add(t);
3822      return this;
3823    }
3824
3825    /**
3826     * @return The first repetition of repeating field {@link #notificationShape}, creating it if it does not already exist {3}
3827     */
3828    public SubscriptionTopicNotificationShapeComponent getNotificationShapeFirstRep() { 
3829      if (getNotificationShape().isEmpty()) {
3830        addNotificationShape();
3831      }
3832      return getNotificationShape().get(0);
3833    }
3834
3835      protected void listChildren(List<Property> children) {
3836        super.listChildren(children);
3837        children.add(new Property("url", "uri", "An absolute URL that is used to identify this SubscriptionTopic 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 Topic is (or will be) published. The URL SHOULD include the major version of the Topic. For more information see [Technical and Business Versions](resource.html#versions).", 0, 1, url));
3838        children.add(new Property("identifier", "Identifier", "Business identifiers assigned to this SubscriptionTopic by the performer and/or other systems.  These identifiers remain constant as the resource is updated and propagates from server to server.", 0, java.lang.Integer.MAX_VALUE, identifier));
3839        children.add(new Property("version", "string", "The identifier that is used to identify this version of the SubscriptionTopic when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the Topic author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions are orderable.", 0, 1, version));
3840        children.add(new Property("title", "string", "A short, descriptive, user-friendly title for the SubscriptionTopic, for example, \"admission\".", 0, 1, title));
3841        children.add(new Property("derivedFrom", "canonical(SubscriptionTopic)", "The canonical URL pointing to another FHIR-defined SubscriptionTopic that is adhered to in whole or in part by this SubscriptionTopic.", 0, java.lang.Integer.MAX_VALUE, derivedFrom));
3842        children.add(new Property("status", "code", "The current state of the SubscriptionTopic.", 0, 1, status));
3843        children.add(new Property("experimental", "boolean", "A flag to indicate that this TopSubscriptionTopicic is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.", 0, 1, experimental));
3844        children.add(new Property("date", "dateTime", "For draft definitions, indicates the date of initial creation.  For active definitions, represents the date of activation.  For withdrawn definitions, indicates the date of withdrawal.", 0, 1, date));
3845        children.add(new Property("publisher", "string", "Helps establish the \"authority/credibility\" of the SubscriptionTopic.  May also allow for contact.", 0, 1, publisher));
3846        children.add(new Property("contact", "ContactDetail", "Contact details to assist a user in finding and communicating with the publisher.", 0, java.lang.Integer.MAX_VALUE, contact));
3847        children.add(new Property("description", "markdown", "A free text natural language description of the Topic from the consumer's perspective.", 0, 1, description));
3848        children.add(new Property("useContext", "UsageContext", "The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching of code system definitions.", 0, java.lang.Integer.MAX_VALUE, useContext));
3849        children.add(new Property("jurisdiction", "CodeableConcept", "A jurisdiction in which the Topic is intended to be used.", 0, java.lang.Integer.MAX_VALUE, jurisdiction));
3850        children.add(new Property("purpose", "markdown", "Explains why this Topic is needed and why it has been designed as it has.", 0, 1, purpose));
3851        children.add(new Property("copyright", "markdown", "A copyright statement relating to the SubscriptionTopic and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the SubscriptionTopic.", 0, 1, copyright));
3852        children.add(new Property("approvalDate", "date", "The date on which the asset content was approved by the publisher. Approval happens once when the content is officially approved for usage.", 0, 1, approvalDate));
3853        children.add(new Property("lastReviewDate", "date", "The date on which the asset content was last reviewed. Review happens periodically after that, but doesn't change the original approval date.", 0, 1, lastReviewDate));
3854        children.add(new Property("effectivePeriod", "Period", "The period during which the SubscriptionTopic content was or is planned to be effective.", 0, 1, effectivePeriod));
3855        children.add(new Property("resourceTrigger", "", "A definition of a resource-based event that triggers a notification based on the SubscriptionTopic. The criteria may be just a human readable description and/or a full FHIR search string or FHIRPath expression. Multiple triggers are considered OR joined (e.g., a resource update matching ANY of the definitions will trigger a notification).", 0, java.lang.Integer.MAX_VALUE, resourceTrigger));
3856        children.add(new Property("eventTrigger", "", "Event definition which can be used to trigger the SubscriptionTopic.", 0, java.lang.Integer.MAX_VALUE, eventTrigger));
3857        children.add(new Property("canFilterBy", "", "List of properties by which Subscriptions on the SubscriptionTopic can be filtered. May be defined Search Parameters (e.g., Encounter.patient) or parameters defined within this SubscriptionTopic context (e.g., hub.event).", 0, java.lang.Integer.MAX_VALUE, canFilterBy));
3858        children.add(new Property("notificationShape", "", "List of properties to describe the shape (e.g., resources) included in notifications from this Subscription Topic.", 0, java.lang.Integer.MAX_VALUE, notificationShape));
3859      }
3860
3861      @Override
3862      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3863        switch (_hash) {
3864        case 116079: /*url*/  return new Property("url", "uri", "An absolute URL that is used to identify this SubscriptionTopic 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 Topic is (or will be) published. The URL SHOULD include the major version of the Topic. For more information see [Technical and Business Versions](resource.html#versions).", 0, 1, url);
3865        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "Business identifiers assigned to this SubscriptionTopic by the performer and/or other systems.  These identifiers remain constant as the resource is updated and propagates from server to server.", 0, java.lang.Integer.MAX_VALUE, identifier);
3866        case 351608024: /*version*/  return new Property("version", "string", "The identifier that is used to identify this version of the SubscriptionTopic when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the Topic author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions are orderable.", 0, 1, version);
3867        case 110371416: /*title*/  return new Property("title", "string", "A short, descriptive, user-friendly title for the SubscriptionTopic, for example, \"admission\".", 0, 1, title);
3868        case 1077922663: /*derivedFrom*/  return new Property("derivedFrom", "canonical(SubscriptionTopic)", "The canonical URL pointing to another FHIR-defined SubscriptionTopic that is adhered to in whole or in part by this SubscriptionTopic.", 0, java.lang.Integer.MAX_VALUE, derivedFrom);
3869        case -892481550: /*status*/  return new Property("status", "code", "The current state of the SubscriptionTopic.", 0, 1, status);
3870        case -404562712: /*experimental*/  return new Property("experimental", "boolean", "A flag to indicate that this TopSubscriptionTopicic is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.", 0, 1, experimental);
3871        case 3076014: /*date*/  return new Property("date", "dateTime", "For draft definitions, indicates the date of initial creation.  For active definitions, represents the date of activation.  For withdrawn definitions, indicates the date of withdrawal.", 0, 1, date);
3872        case 1447404028: /*publisher*/  return new Property("publisher", "string", "Helps establish the \"authority/credibility\" of the SubscriptionTopic.  May also allow for contact.", 0, 1, publisher);
3873        case 951526432: /*contact*/  return new Property("contact", "ContactDetail", "Contact details to assist a user in finding and communicating with the publisher.", 0, java.lang.Integer.MAX_VALUE, contact);
3874        case -1724546052: /*description*/  return new Property("description", "markdown", "A free text natural language description of the Topic from the consumer's perspective.", 0, 1, description);
3875        case -669707736: /*useContext*/  return new Property("useContext", "UsageContext", "The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching of code system definitions.", 0, java.lang.Integer.MAX_VALUE, useContext);
3876        case -507075711: /*jurisdiction*/  return new Property("jurisdiction", "CodeableConcept", "A jurisdiction in which the Topic is intended to be used.", 0, java.lang.Integer.MAX_VALUE, jurisdiction);
3877        case -220463842: /*purpose*/  return new Property("purpose", "markdown", "Explains why this Topic is needed and why it has been designed as it has.", 0, 1, purpose);
3878        case 1522889671: /*copyright*/  return new Property("copyright", "markdown", "A copyright statement relating to the SubscriptionTopic and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the SubscriptionTopic.", 0, 1, copyright);
3879        case 223539345: /*approvalDate*/  return new Property("approvalDate", "date", "The date on which the asset content was approved by the publisher. Approval happens once when the content is officially approved for usage.", 0, 1, approvalDate);
3880        case -1687512484: /*lastReviewDate*/  return new Property("lastReviewDate", "date", "The date on which the asset content was last reviewed. Review happens periodically after that, but doesn't change the original approval date.", 0, 1, lastReviewDate);
3881        case -403934648: /*effectivePeriod*/  return new Property("effectivePeriod", "Period", "The period during which the SubscriptionTopic content was or is planned to be effective.", 0, 1, effectivePeriod);
3882        case -424927798: /*resourceTrigger*/  return new Property("resourceTrigger", "", "A definition of a resource-based event that triggers a notification based on the SubscriptionTopic. The criteria may be just a human readable description and/or a full FHIR search string or FHIRPath expression. Multiple triggers are considered OR joined (e.g., a resource update matching ANY of the definitions will trigger a notification).", 0, java.lang.Integer.MAX_VALUE, resourceTrigger);
3883        case -151635522: /*eventTrigger*/  return new Property("eventTrigger", "", "Event definition which can be used to trigger the SubscriptionTopic.", 0, java.lang.Integer.MAX_VALUE, eventTrigger);
3884        case -1299519009: /*canFilterBy*/  return new Property("canFilterBy", "", "List of properties by which Subscriptions on the SubscriptionTopic can be filtered. May be defined Search Parameters (e.g., Encounter.patient) or parameters defined within this SubscriptionTopic context (e.g., hub.event).", 0, java.lang.Integer.MAX_VALUE, canFilterBy);
3885        case -1583369866: /*notificationShape*/  return new Property("notificationShape", "", "List of properties to describe the shape (e.g., resources) included in notifications from this Subscription Topic.", 0, java.lang.Integer.MAX_VALUE, notificationShape);
3886        default: return super.getNamedProperty(_hash, _name, _checkValid);
3887        }
3888
3889      }
3890
3891      @Override
3892      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3893        switch (hash) {
3894        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UriType
3895        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
3896        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
3897        case 110371416: /*title*/ return this.title == null ? new Base[0] : new Base[] {this.title}; // StringType
3898        case 1077922663: /*derivedFrom*/ return this.derivedFrom == null ? new Base[0] : this.derivedFrom.toArray(new Base[this.derivedFrom.size()]); // CanonicalType
3899        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<PublicationStatus>
3900        case -404562712: /*experimental*/ return this.experimental == null ? new Base[0] : new Base[] {this.experimental}; // BooleanType
3901        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
3902        case 1447404028: /*publisher*/ return this.publisher == null ? new Base[0] : new Base[] {this.publisher}; // StringType
3903        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ContactDetail
3904        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
3905        case -669707736: /*useContext*/ return this.useContext == null ? new Base[0] : this.useContext.toArray(new Base[this.useContext.size()]); // UsageContext
3906        case -507075711: /*jurisdiction*/ return this.jurisdiction == null ? new Base[0] : this.jurisdiction.toArray(new Base[this.jurisdiction.size()]); // CodeableConcept
3907        case -220463842: /*purpose*/ return this.purpose == null ? new Base[0] : new Base[] {this.purpose}; // MarkdownType
3908        case 1522889671: /*copyright*/ return this.copyright == null ? new Base[0] : new Base[] {this.copyright}; // MarkdownType
3909        case 223539345: /*approvalDate*/ return this.approvalDate == null ? new Base[0] : new Base[] {this.approvalDate}; // DateType
3910        case -1687512484: /*lastReviewDate*/ return this.lastReviewDate == null ? new Base[0] : new Base[] {this.lastReviewDate}; // DateType
3911        case -403934648: /*effectivePeriod*/ return this.effectivePeriod == null ? new Base[0] : new Base[] {this.effectivePeriod}; // Period
3912        case -424927798: /*resourceTrigger*/ return this.resourceTrigger == null ? new Base[0] : this.resourceTrigger.toArray(new Base[this.resourceTrigger.size()]); // SubscriptionTopicResourceTriggerComponent
3913        case -151635522: /*eventTrigger*/ return this.eventTrigger == null ? new Base[0] : this.eventTrigger.toArray(new Base[this.eventTrigger.size()]); // SubscriptionTopicEventTriggerComponent
3914        case -1299519009: /*canFilterBy*/ return this.canFilterBy == null ? new Base[0] : this.canFilterBy.toArray(new Base[this.canFilterBy.size()]); // SubscriptionTopicCanFilterByComponent
3915        case -1583369866: /*notificationShape*/ return this.notificationShape == null ? new Base[0] : this.notificationShape.toArray(new Base[this.notificationShape.size()]); // SubscriptionTopicNotificationShapeComponent
3916        default: return super.getProperty(hash, name, checkValid);
3917        }
3918
3919      }
3920
3921      @Override
3922      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3923        switch (hash) {
3924        case 116079: // url
3925          this.url = TypeConvertor.castToUri(value); // UriType
3926          return value;
3927        case -1618432855: // identifier
3928          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
3929          return value;
3930        case 351608024: // version
3931          this.version = TypeConvertor.castToString(value); // StringType
3932          return value;
3933        case 110371416: // title
3934          this.title = TypeConvertor.castToString(value); // StringType
3935          return value;
3936        case 1077922663: // derivedFrom
3937          this.getDerivedFrom().add(TypeConvertor.castToCanonical(value)); // CanonicalType
3938          return value;
3939        case -892481550: // status
3940          value = new PublicationStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
3941          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
3942          return value;
3943        case -404562712: // experimental
3944          this.experimental = TypeConvertor.castToBoolean(value); // BooleanType
3945          return value;
3946        case 3076014: // date
3947          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
3948          return value;
3949        case 1447404028: // publisher
3950          this.publisher = TypeConvertor.castToString(value); // StringType
3951          return value;
3952        case 951526432: // contact
3953          this.getContact().add(TypeConvertor.castToContactDetail(value)); // ContactDetail
3954          return value;
3955        case -1724546052: // description
3956          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
3957          return value;
3958        case -669707736: // useContext
3959          this.getUseContext().add(TypeConvertor.castToUsageContext(value)); // UsageContext
3960          return value;
3961        case -507075711: // jurisdiction
3962          this.getJurisdiction().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
3963          return value;
3964        case -220463842: // purpose
3965          this.purpose = TypeConvertor.castToMarkdown(value); // MarkdownType
3966          return value;
3967        case 1522889671: // copyright
3968          this.copyright = TypeConvertor.castToMarkdown(value); // MarkdownType
3969          return value;
3970        case 223539345: // approvalDate
3971          this.approvalDate = TypeConvertor.castToDate(value); // DateType
3972          return value;
3973        case -1687512484: // lastReviewDate
3974          this.lastReviewDate = TypeConvertor.castToDate(value); // DateType
3975          return value;
3976        case -403934648: // effectivePeriod
3977          this.effectivePeriod = TypeConvertor.castToPeriod(value); // Period
3978          return value;
3979        case -424927798: // resourceTrigger
3980          this.getResourceTrigger().add((SubscriptionTopicResourceTriggerComponent) value); // SubscriptionTopicResourceTriggerComponent
3981          return value;
3982        case -151635522: // eventTrigger
3983          this.getEventTrigger().add((SubscriptionTopicEventTriggerComponent) value); // SubscriptionTopicEventTriggerComponent
3984          return value;
3985        case -1299519009: // canFilterBy
3986          this.getCanFilterBy().add((SubscriptionTopicCanFilterByComponent) value); // SubscriptionTopicCanFilterByComponent
3987          return value;
3988        case -1583369866: // notificationShape
3989          this.getNotificationShape().add((SubscriptionTopicNotificationShapeComponent) value); // SubscriptionTopicNotificationShapeComponent
3990          return value;
3991        default: return super.setProperty(hash, name, value);
3992        }
3993
3994      }
3995
3996      @Override
3997      public Base setProperty(String name, Base value) throws FHIRException {
3998        if (name.equals("url")) {
3999          this.url = TypeConvertor.castToUri(value); // UriType
4000        } else if (name.equals("identifier")) {
4001          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
4002        } else if (name.equals("version")) {
4003          this.version = TypeConvertor.castToString(value); // StringType
4004        } else if (name.equals("title")) {
4005          this.title = TypeConvertor.castToString(value); // StringType
4006        } else if (name.equals("derivedFrom")) {
4007          this.getDerivedFrom().add(TypeConvertor.castToCanonical(value));
4008        } else if (name.equals("status")) {
4009          value = new PublicationStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
4010          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
4011        } else if (name.equals("experimental")) {
4012          this.experimental = TypeConvertor.castToBoolean(value); // BooleanType
4013        } else if (name.equals("date")) {
4014          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
4015        } else if (name.equals("publisher")) {
4016          this.publisher = TypeConvertor.castToString(value); // StringType
4017        } else if (name.equals("contact")) {
4018          this.getContact().add(TypeConvertor.castToContactDetail(value));
4019        } else if (name.equals("description")) {
4020          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
4021        } else if (name.equals("useContext")) {
4022          this.getUseContext().add(TypeConvertor.castToUsageContext(value));
4023        } else if (name.equals("jurisdiction")) {
4024          this.getJurisdiction().add(TypeConvertor.castToCodeableConcept(value));
4025        } else if (name.equals("purpose")) {
4026          this.purpose = TypeConvertor.castToMarkdown(value); // MarkdownType
4027        } else if (name.equals("copyright")) {
4028          this.copyright = TypeConvertor.castToMarkdown(value); // MarkdownType
4029        } else if (name.equals("approvalDate")) {
4030          this.approvalDate = TypeConvertor.castToDate(value); // DateType
4031        } else if (name.equals("lastReviewDate")) {
4032          this.lastReviewDate = TypeConvertor.castToDate(value); // DateType
4033        } else if (name.equals("effectivePeriod")) {
4034          this.effectivePeriod = TypeConvertor.castToPeriod(value); // Period
4035        } else if (name.equals("resourceTrigger")) {
4036          this.getResourceTrigger().add((SubscriptionTopicResourceTriggerComponent) value);
4037        } else if (name.equals("eventTrigger")) {
4038          this.getEventTrigger().add((SubscriptionTopicEventTriggerComponent) value);
4039        } else if (name.equals("canFilterBy")) {
4040          this.getCanFilterBy().add((SubscriptionTopicCanFilterByComponent) value);
4041        } else if (name.equals("notificationShape")) {
4042          this.getNotificationShape().add((SubscriptionTopicNotificationShapeComponent) value);
4043        } else
4044          return super.setProperty(name, value);
4045        return value;
4046      }
4047
4048      @Override
4049      public Base makeProperty(int hash, String name) throws FHIRException {
4050        switch (hash) {
4051        case 116079:  return getUrlElement();
4052        case -1618432855:  return addIdentifier(); 
4053        case 351608024:  return getVersionElement();
4054        case 110371416:  return getTitleElement();
4055        case 1077922663:  return addDerivedFromElement();
4056        case -892481550:  return getStatusElement();
4057        case -404562712:  return getExperimentalElement();
4058        case 3076014:  return getDateElement();
4059        case 1447404028:  return getPublisherElement();
4060        case 951526432:  return addContact(); 
4061        case -1724546052:  return getDescriptionElement();
4062        case -669707736:  return addUseContext(); 
4063        case -507075711:  return addJurisdiction(); 
4064        case -220463842:  return getPurposeElement();
4065        case 1522889671:  return getCopyrightElement();
4066        case 223539345:  return getApprovalDateElement();
4067        case -1687512484:  return getLastReviewDateElement();
4068        case -403934648:  return getEffectivePeriod();
4069        case -424927798:  return addResourceTrigger(); 
4070        case -151635522:  return addEventTrigger(); 
4071        case -1299519009:  return addCanFilterBy(); 
4072        case -1583369866:  return addNotificationShape(); 
4073        default: return super.makeProperty(hash, name);
4074        }
4075
4076      }
4077
4078      @Override
4079      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
4080        switch (hash) {
4081        case 116079: /*url*/ return new String[] {"uri"};
4082        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
4083        case 351608024: /*version*/ return new String[] {"string"};
4084        case 110371416: /*title*/ return new String[] {"string"};
4085        case 1077922663: /*derivedFrom*/ return new String[] {"canonical"};
4086        case -892481550: /*status*/ return new String[] {"code"};
4087        case -404562712: /*experimental*/ return new String[] {"boolean"};
4088        case 3076014: /*date*/ return new String[] {"dateTime"};
4089        case 1447404028: /*publisher*/ return new String[] {"string"};
4090        case 951526432: /*contact*/ return new String[] {"ContactDetail"};
4091        case -1724546052: /*description*/ return new String[] {"markdown"};
4092        case -669707736: /*useContext*/ return new String[] {"UsageContext"};
4093        case -507075711: /*jurisdiction*/ return new String[] {"CodeableConcept"};
4094        case -220463842: /*purpose*/ return new String[] {"markdown"};
4095        case 1522889671: /*copyright*/ return new String[] {"markdown"};
4096        case 223539345: /*approvalDate*/ return new String[] {"date"};
4097        case -1687512484: /*lastReviewDate*/ return new String[] {"date"};
4098        case -403934648: /*effectivePeriod*/ return new String[] {"Period"};
4099        case -424927798: /*resourceTrigger*/ return new String[] {};
4100        case -151635522: /*eventTrigger*/ return new String[] {};
4101        case -1299519009: /*canFilterBy*/ return new String[] {};
4102        case -1583369866: /*notificationShape*/ return new String[] {};
4103        default: return super.getTypesForProperty(hash, name);
4104        }
4105
4106      }
4107
4108      @Override
4109      public Base addChild(String name) throws FHIRException {
4110        if (name.equals("url")) {
4111          throw new FHIRException("Cannot call addChild on a primitive type SubscriptionTopic.url");
4112        }
4113        else if (name.equals("identifier")) {
4114          return addIdentifier();
4115        }
4116        else if (name.equals("version")) {
4117          throw new FHIRException("Cannot call addChild on a primitive type SubscriptionTopic.version");
4118        }
4119        else if (name.equals("title")) {
4120          throw new FHIRException("Cannot call addChild on a primitive type SubscriptionTopic.title");
4121        }
4122        else if (name.equals("derivedFrom")) {
4123          throw new FHIRException("Cannot call addChild on a primitive type SubscriptionTopic.derivedFrom");
4124        }
4125        else if (name.equals("status")) {
4126          throw new FHIRException("Cannot call addChild on a primitive type SubscriptionTopic.status");
4127        }
4128        else if (name.equals("experimental")) {
4129          throw new FHIRException("Cannot call addChild on a primitive type SubscriptionTopic.experimental");
4130        }
4131        else if (name.equals("date")) {
4132          throw new FHIRException("Cannot call addChild on a primitive type SubscriptionTopic.date");
4133        }
4134        else if (name.equals("publisher")) {
4135          throw new FHIRException("Cannot call addChild on a primitive type SubscriptionTopic.publisher");
4136        }
4137        else if (name.equals("contact")) {
4138          return addContact();
4139        }
4140        else if (name.equals("description")) {
4141          throw new FHIRException("Cannot call addChild on a primitive type SubscriptionTopic.description");
4142        }
4143        else if (name.equals("useContext")) {
4144          return addUseContext();
4145        }
4146        else if (name.equals("jurisdiction")) {
4147          return addJurisdiction();
4148        }
4149        else if (name.equals("purpose")) {
4150          throw new FHIRException("Cannot call addChild on a primitive type SubscriptionTopic.purpose");
4151        }
4152        else if (name.equals("copyright")) {
4153          throw new FHIRException("Cannot call addChild on a primitive type SubscriptionTopic.copyright");
4154        }
4155        else if (name.equals("approvalDate")) {
4156          throw new FHIRException("Cannot call addChild on a primitive type SubscriptionTopic.approvalDate");
4157        }
4158        else if (name.equals("lastReviewDate")) {
4159          throw new FHIRException("Cannot call addChild on a primitive type SubscriptionTopic.lastReviewDate");
4160        }
4161        else if (name.equals("effectivePeriod")) {
4162          this.effectivePeriod = new Period();
4163          return this.effectivePeriod;
4164        }
4165        else if (name.equals("resourceTrigger")) {
4166          return addResourceTrigger();
4167        }
4168        else if (name.equals("eventTrigger")) {
4169          return addEventTrigger();
4170        }
4171        else if (name.equals("canFilterBy")) {
4172          return addCanFilterBy();
4173        }
4174        else if (name.equals("notificationShape")) {
4175          return addNotificationShape();
4176        }
4177        else
4178          return super.addChild(name);
4179      }
4180
4181  public String fhirType() {
4182    return "SubscriptionTopic";
4183
4184  }
4185
4186      public SubscriptionTopic copy() {
4187        SubscriptionTopic dst = new SubscriptionTopic();
4188        copyValues(dst);
4189        return dst;
4190      }
4191
4192      public void copyValues(SubscriptionTopic dst) {
4193        super.copyValues(dst);
4194        dst.url = url == null ? null : url.copy();
4195        if (identifier != null) {
4196          dst.identifier = new ArrayList<Identifier>();
4197          for (Identifier i : identifier)
4198            dst.identifier.add(i.copy());
4199        };
4200        dst.version = version == null ? null : version.copy();
4201        dst.title = title == null ? null : title.copy();
4202        if (derivedFrom != null) {
4203          dst.derivedFrom = new ArrayList<CanonicalType>();
4204          for (CanonicalType i : derivedFrom)
4205            dst.derivedFrom.add(i.copy());
4206        };
4207        dst.status = status == null ? null : status.copy();
4208        dst.experimental = experimental == null ? null : experimental.copy();
4209        dst.date = date == null ? null : date.copy();
4210        dst.publisher = publisher == null ? null : publisher.copy();
4211        if (contact != null) {
4212          dst.contact = new ArrayList<ContactDetail>();
4213          for (ContactDetail i : contact)
4214            dst.contact.add(i.copy());
4215        };
4216        dst.description = description == null ? null : description.copy();
4217        if (useContext != null) {
4218          dst.useContext = new ArrayList<UsageContext>();
4219          for (UsageContext i : useContext)
4220            dst.useContext.add(i.copy());
4221        };
4222        if (jurisdiction != null) {
4223          dst.jurisdiction = new ArrayList<CodeableConcept>();
4224          for (CodeableConcept i : jurisdiction)
4225            dst.jurisdiction.add(i.copy());
4226        };
4227        dst.purpose = purpose == null ? null : purpose.copy();
4228        dst.copyright = copyright == null ? null : copyright.copy();
4229        dst.approvalDate = approvalDate == null ? null : approvalDate.copy();
4230        dst.lastReviewDate = lastReviewDate == null ? null : lastReviewDate.copy();
4231        dst.effectivePeriod = effectivePeriod == null ? null : effectivePeriod.copy();
4232        if (resourceTrigger != null) {
4233          dst.resourceTrigger = new ArrayList<SubscriptionTopicResourceTriggerComponent>();
4234          for (SubscriptionTopicResourceTriggerComponent i : resourceTrigger)
4235            dst.resourceTrigger.add(i.copy());
4236        };
4237        if (eventTrigger != null) {
4238          dst.eventTrigger = new ArrayList<SubscriptionTopicEventTriggerComponent>();
4239          for (SubscriptionTopicEventTriggerComponent i : eventTrigger)
4240            dst.eventTrigger.add(i.copy());
4241        };
4242        if (canFilterBy != null) {
4243          dst.canFilterBy = new ArrayList<SubscriptionTopicCanFilterByComponent>();
4244          for (SubscriptionTopicCanFilterByComponent i : canFilterBy)
4245            dst.canFilterBy.add(i.copy());
4246        };
4247        if (notificationShape != null) {
4248          dst.notificationShape = new ArrayList<SubscriptionTopicNotificationShapeComponent>();
4249          for (SubscriptionTopicNotificationShapeComponent i : notificationShape)
4250            dst.notificationShape.add(i.copy());
4251        };
4252      }
4253
4254      protected SubscriptionTopic typedCopy() {
4255        return copy();
4256      }
4257
4258      @Override
4259      public boolean equalsDeep(Base other_) {
4260        if (!super.equalsDeep(other_))
4261          return false;
4262        if (!(other_ instanceof SubscriptionTopic))
4263          return false;
4264        SubscriptionTopic o = (SubscriptionTopic) other_;
4265        return compareDeep(url, o.url, true) && compareDeep(identifier, o.identifier, true) && compareDeep(version, o.version, true)
4266           && compareDeep(title, o.title, true) && compareDeep(derivedFrom, o.derivedFrom, true) && compareDeep(status, o.status, true)
4267           && compareDeep(experimental, o.experimental, true) && compareDeep(date, o.date, true) && compareDeep(publisher, o.publisher, true)
4268           && compareDeep(contact, o.contact, true) && compareDeep(description, o.description, true) && compareDeep(useContext, o.useContext, true)
4269           && compareDeep(jurisdiction, o.jurisdiction, true) && compareDeep(purpose, o.purpose, true) && compareDeep(copyright, o.copyright, true)
4270           && compareDeep(approvalDate, o.approvalDate, true) && compareDeep(lastReviewDate, o.lastReviewDate, true)
4271           && compareDeep(effectivePeriod, o.effectivePeriod, true) && compareDeep(resourceTrigger, o.resourceTrigger, true)
4272           && compareDeep(eventTrigger, o.eventTrigger, true) && compareDeep(canFilterBy, o.canFilterBy, true)
4273           && compareDeep(notificationShape, o.notificationShape, true);
4274      }
4275
4276      @Override
4277      public boolean equalsShallow(Base other_) {
4278        if (!super.equalsShallow(other_))
4279          return false;
4280        if (!(other_ instanceof SubscriptionTopic))
4281          return false;
4282        SubscriptionTopic o = (SubscriptionTopic) other_;
4283        return compareValues(url, o.url, true) && compareValues(version, o.version, true) && compareValues(title, o.title, true)
4284           && compareValues(derivedFrom, o.derivedFrom, true) && compareValues(status, o.status, true) && compareValues(experimental, o.experimental, true)
4285           && compareValues(date, o.date, true) && compareValues(publisher, o.publisher, true) && compareValues(description, o.description, true)
4286           && compareValues(purpose, o.purpose, true) && compareValues(copyright, o.copyright, true) && compareValues(approvalDate, o.approvalDate, true)
4287           && compareValues(lastReviewDate, o.lastReviewDate, true);
4288      }
4289
4290      public boolean isEmpty() {
4291        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(url, identifier, version
4292          , title, derivedFrom, status, experimental, date, publisher, contact, description
4293          , useContext, jurisdiction, purpose, copyright, approvalDate, lastReviewDate, effectivePeriod
4294          , resourceTrigger, eventTrigger, canFilterBy, notificationShape);
4295      }
4296
4297  @Override
4298  public ResourceType getResourceType() {
4299    return ResourceType.SubscriptionTopic;
4300   }
4301
4302 /**
4303   * Search parameter: <b>date</b>
4304   * <p>
4305   * Description: <b>Date status first applied</b><br>
4306   * Type: <b>date</b><br>
4307   * Path: <b>SubscriptionTopic.date</b><br>
4308   * </p>
4309   */
4310  @SearchParamDefinition(name="date", path="SubscriptionTopic.date", description="Date status first applied", type="date" )
4311  public static final String SP_DATE = "date";
4312 /**
4313   * <b>Fluent Client</b> search parameter constant for <b>date</b>
4314   * <p>
4315   * Description: <b>Date status first applied</b><br>
4316   * Type: <b>date</b><br>
4317   * Path: <b>SubscriptionTopic.date</b><br>
4318   * </p>
4319   */
4320  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
4321
4322 /**
4323   * Search parameter: <b>derived-or-self</b>
4324   * <p>
4325   * Description: <b>A server defined search that matches either the url or derivedFrom</b><br>
4326   * Type: <b>uri</b><br>
4327   * Path: <b>SubscriptionTopic.url | SubscriptionTopic.derivedFrom</b><br>
4328   * </p>
4329   */
4330  @SearchParamDefinition(name="derived-or-self", path="SubscriptionTopic.url | SubscriptionTopic.derivedFrom", description="A server defined search that matches either the url or derivedFrom", type="uri" )
4331  public static final String SP_DERIVED_OR_SELF = "derived-or-self";
4332 /**
4333   * <b>Fluent Client</b> search parameter constant for <b>derived-or-self</b>
4334   * <p>
4335   * Description: <b>A server defined search that matches either the url or derivedFrom</b><br>
4336   * Type: <b>uri</b><br>
4337   * Path: <b>SubscriptionTopic.url | SubscriptionTopic.derivedFrom</b><br>
4338   * </p>
4339   */
4340  public static final ca.uhn.fhir.rest.gclient.UriClientParam DERIVED_OR_SELF = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_DERIVED_OR_SELF);
4341
4342 /**
4343   * Search parameter: <b>identifier</b>
4344   * <p>
4345   * Description: <b>Business Identifier for SubscriptionTopic</b><br>
4346   * Type: <b>token</b><br>
4347   * Path: <b>SubscriptionTopic.identifier</b><br>
4348   * </p>
4349   */
4350  @SearchParamDefinition(name="identifier", path="SubscriptionTopic.identifier", description="Business Identifier for SubscriptionTopic", type="token" )
4351  public static final String SP_IDENTIFIER = "identifier";
4352 /**
4353   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
4354   * <p>
4355   * Description: <b>Business Identifier for SubscriptionTopic</b><br>
4356   * Type: <b>token</b><br>
4357   * Path: <b>SubscriptionTopic.identifier</b><br>
4358   * </p>
4359   */
4360  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
4361
4362 /**
4363   * Search parameter: <b>resource</b>
4364   * <p>
4365   * Description: <b>Allowed Data type or Resource (reference to definition) for this definition, searches resourceTrigger, eventTrigger, and notificationShape for matches.</b><br>
4366   * Type: <b>uri</b><br>
4367   * Path: <b>SubscriptionTopic.resourceTrigger.resource</b><br>
4368   * </p>
4369   */
4370  @SearchParamDefinition(name="resource", path="SubscriptionTopic.resourceTrigger.resource", description="Allowed Data type or Resource (reference to definition) for this definition, searches resourceTrigger, eventTrigger, and notificationShape for matches.", type="uri" )
4371  public static final String SP_RESOURCE = "resource";
4372 /**
4373   * <b>Fluent Client</b> search parameter constant for <b>resource</b>
4374   * <p>
4375   * Description: <b>Allowed Data type or Resource (reference to definition) for this definition, searches resourceTrigger, eventTrigger, and notificationShape for matches.</b><br>
4376   * Type: <b>uri</b><br>
4377   * Path: <b>SubscriptionTopic.resourceTrigger.resource</b><br>
4378   * </p>
4379   */
4380  public static final ca.uhn.fhir.rest.gclient.UriClientParam RESOURCE = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_RESOURCE);
4381
4382 /**
4383   * Search parameter: <b>status</b>
4384   * <p>
4385   * Description: <b>draft | active | retired | unknown</b><br>
4386   * Type: <b>token</b><br>
4387   * Path: <b>SubscriptionTopic.status</b><br>
4388   * </p>
4389   */
4390  @SearchParamDefinition(name="status", path="SubscriptionTopic.status", description="draft | active | retired | unknown", type="token" )
4391  public static final String SP_STATUS = "status";
4392 /**
4393   * <b>Fluent Client</b> search parameter constant for <b>status</b>
4394   * <p>
4395   * Description: <b>draft | active | retired | unknown</b><br>
4396   * Type: <b>token</b><br>
4397   * Path: <b>SubscriptionTopic.status</b><br>
4398   * </p>
4399   */
4400  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
4401
4402 /**
4403   * Search parameter: <b>title</b>
4404   * <p>
4405   * Description: <b>Name for this SubscriptionTopic (Human friendly)</b><br>
4406   * Type: <b>string</b><br>
4407   * Path: <b>SubscriptionTopic.title</b><br>
4408   * </p>
4409   */
4410  @SearchParamDefinition(name="title", path="SubscriptionTopic.title", description="Name for this SubscriptionTopic (Human friendly)", type="string" )
4411  public static final String SP_TITLE = "title";
4412 /**
4413   * <b>Fluent Client</b> search parameter constant for <b>title</b>
4414   * <p>
4415   * Description: <b>Name for this SubscriptionTopic (Human friendly)</b><br>
4416   * Type: <b>string</b><br>
4417   * Path: <b>SubscriptionTopic.title</b><br>
4418   * </p>
4419   */
4420  public static final ca.uhn.fhir.rest.gclient.StringClientParam TITLE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_TITLE);
4421
4422 /**
4423   * Search parameter: <b>trigger-description</b>
4424   * <p>
4425   * Description: <b>Text representation of the trigger</b><br>
4426   * Type: <b>string</b><br>
4427   * Path: <b>SubscriptionTopic.resourceTrigger.description</b><br>
4428   * </p>
4429   */
4430  @SearchParamDefinition(name="trigger-description", path="SubscriptionTopic.resourceTrigger.description", description="Text representation of the trigger", type="string" )
4431  public static final String SP_TRIGGER_DESCRIPTION = "trigger-description";
4432 /**
4433   * <b>Fluent Client</b> search parameter constant for <b>trigger-description</b>
4434   * <p>
4435   * Description: <b>Text representation of the trigger</b><br>
4436   * Type: <b>string</b><br>
4437   * Path: <b>SubscriptionTopic.resourceTrigger.description</b><br>
4438   * </p>
4439   */
4440  public static final ca.uhn.fhir.rest.gclient.StringClientParam TRIGGER_DESCRIPTION = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_TRIGGER_DESCRIPTION);
4441
4442 /**
4443   * Search parameter: <b>url</b>
4444   * <p>
4445   * Description: <b>Logical canonical URL to reference this SubscriptionTopic (globally unique)</b><br>
4446   * Type: <b>uri</b><br>
4447   * Path: <b>SubscriptionTopic.url</b><br>
4448   * </p>
4449   */
4450  @SearchParamDefinition(name="url", path="SubscriptionTopic.url", description="Logical canonical URL to reference this SubscriptionTopic (globally unique)", type="uri" )
4451  public static final String SP_URL = "url";
4452 /**
4453   * <b>Fluent Client</b> search parameter constant for <b>url</b>
4454   * <p>
4455   * Description: <b>Logical canonical URL to reference this SubscriptionTopic (globally unique)</b><br>
4456   * Type: <b>uri</b><br>
4457   * Path: <b>SubscriptionTopic.url</b><br>
4458   * </p>
4459   */
4460  public static final ca.uhn.fhir.rest.gclient.UriClientParam URL = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_URL);
4461
4462 /**
4463   * Search parameter: <b>version</b>
4464   * <p>
4465   * Description: <b>Business version of the SubscriptionTopic</b><br>
4466   * Type: <b>token</b><br>
4467   * Path: <b>SubscriptionTopic.version</b><br>
4468   * </p>
4469   */
4470  @SearchParamDefinition(name="version", path="SubscriptionTopic.version", description="Business version of the SubscriptionTopic", type="token" )
4471  public static final String SP_VERSION = "version";
4472 /**
4473   * <b>Fluent Client</b> search parameter constant for <b>version</b>
4474   * <p>
4475   * Description: <b>Business version of the SubscriptionTopic</b><br>
4476   * Type: <b>token</b><br>
4477   * Path: <b>SubscriptionTopic.version</b><br>
4478   * </p>
4479   */
4480  public static final ca.uhn.fhir.rest.gclient.TokenClientParam VERSION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_VERSION);
4481
4482
4483}
4484