001package org.hl7.fhir.r5.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 Thu, Mar 23, 2023 19:59+1100 for FHIR v5.0.0
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.utilities.Utilities;
038import org.hl7.fhir.r5.model.Enumerations.*;
039import org.hl7.fhir.instance.model.api.IBaseDatatypeElement;
040import org.hl7.fhir.exceptions.FHIRException;
041import org.hl7.fhir.instance.model.api.ICompositeType;
042import ca.uhn.fhir.model.api.annotation.Child;
043import ca.uhn.fhir.model.api.annotation.ChildOrder;
044import ca.uhn.fhir.model.api.annotation.DatatypeDef;
045import ca.uhn.fhir.model.api.annotation.Description;
046import ca.uhn.fhir.model.api.annotation.Block;
047
048/**
049 * VirtualServiceDetail Type: Virtual Service Contact Details.
050 */
051@DatatypeDef(name="VirtualServiceDetail")
052public class VirtualServiceDetail extends DataType implements ICompositeType {
053
054    /**
055     * The type of virtual service to connect to (i.e. Teams, Zoom, Specific VMR technology, WhatsApp).
056     */
057    @Child(name = "channelType", type = {Coding.class}, order=0, min=0, max=1, modifier=false, summary=true)
058    @Description(shortDefinition="Channel Type", formalDefinition="The type of virtual service to connect to (i.e. Teams, Zoom, Specific VMR technology, WhatsApp)." )
059    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/virtual-service-type")
060    protected Coding channelType;
061
062    /**
063     * What address or number needs to be used for a user to connect to the virtual service to join. The channelType informs as to which datatype is appropriate to use (requires knowledge of the specific type).
064     */
065    @Child(name = "address", type = {UrlType.class, StringType.class, ContactPoint.class, ExtendedContactDetail.class}, order=1, min=0, max=1, modifier=false, summary=true)
066    @Description(shortDefinition="Contact address/number", formalDefinition="What address or number needs to be used for a user to connect to the virtual service to join. The channelType informs as to which datatype is appropriate to use (requires knowledge of the specific type)." )
067    protected DataType address;
068
069    /**
070     * Address to see alternative connection details.
071     */
072    @Child(name = "additionalInfo", type = {UrlType.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
073    @Description(shortDefinition="Address to see alternative connection details", formalDefinition="Address to see alternative connection details." )
074    protected List<UrlType> additionalInfo;
075
076    /**
077     * Maximum number of participants supported by the virtual service.
078     */
079    @Child(name = "maxParticipants", type = {PositiveIntType.class}, order=3, min=0, max=1, modifier=false, summary=true)
080    @Description(shortDefinition="Maximum number of participants supported by the virtual service", formalDefinition="Maximum number of participants supported by the virtual service." )
081    protected PositiveIntType maxParticipants;
082
083    /**
084     * Session Key required by the virtual service.
085     */
086    @Child(name = "sessionKey", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=true)
087    @Description(shortDefinition="Session Key required by the virtual service", formalDefinition="Session Key required by the virtual service." )
088    protected StringType sessionKey;
089
090    private static final long serialVersionUID = -514931977L;
091
092  /**
093   * Constructor
094   */
095    public VirtualServiceDetail() {
096      super();
097    }
098
099    /**
100     * @return {@link #channelType} (The type of virtual service to connect to (i.e. Teams, Zoom, Specific VMR technology, WhatsApp).)
101     */
102    public Coding getChannelType() { 
103      if (this.channelType == null)
104        if (Configuration.errorOnAutoCreate())
105          throw new Error("Attempt to auto-create VirtualServiceDetail.channelType");
106        else if (Configuration.doAutoCreate())
107          this.channelType = new Coding(); // cc
108      return this.channelType;
109    }
110
111    public boolean hasChannelType() { 
112      return this.channelType != null && !this.channelType.isEmpty();
113    }
114
115    /**
116     * @param value {@link #channelType} (The type of virtual service to connect to (i.e. Teams, Zoom, Specific VMR technology, WhatsApp).)
117     */
118    public VirtualServiceDetail setChannelType(Coding value) { 
119      this.channelType = value;
120      return this;
121    }
122
123    /**
124     * @return {@link #address} (What address or number needs to be used for a user to connect to the virtual service to join. The channelType informs as to which datatype is appropriate to use (requires knowledge of the specific type).)
125     */
126    public DataType getAddress() { 
127      return this.address;
128    }
129
130    /**
131     * @return {@link #address} (What address or number needs to be used for a user to connect to the virtual service to join. The channelType informs as to which datatype is appropriate to use (requires knowledge of the specific type).)
132     */
133    public UrlType getAddressUrlType() throws FHIRException { 
134      if (this.address == null)
135        this.address = new UrlType();
136      if (!(this.address instanceof UrlType))
137        throw new FHIRException("Type mismatch: the type UrlType was expected, but "+this.address.getClass().getName()+" was encountered");
138      return (UrlType) this.address;
139    }
140
141    public boolean hasAddressUrlType() { 
142      return this != null && this.address instanceof UrlType;
143    }
144
145    /**
146     * @return {@link #address} (What address or number needs to be used for a user to connect to the virtual service to join. The channelType informs as to which datatype is appropriate to use (requires knowledge of the specific type).)
147     */
148    public StringType getAddressStringType() throws FHIRException { 
149      if (this.address == null)
150        this.address = new StringType();
151      if (!(this.address instanceof StringType))
152        throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.address.getClass().getName()+" was encountered");
153      return (StringType) this.address;
154    }
155
156    public boolean hasAddressStringType() { 
157      return this != null && this.address instanceof StringType;
158    }
159
160    /**
161     * @return {@link #address} (What address or number needs to be used for a user to connect to the virtual service to join. The channelType informs as to which datatype is appropriate to use (requires knowledge of the specific type).)
162     */
163    public ContactPoint getAddressContactPoint() throws FHIRException { 
164      if (this.address == null)
165        this.address = new ContactPoint();
166      if (!(this.address instanceof ContactPoint))
167        throw new FHIRException("Type mismatch: the type ContactPoint was expected, but "+this.address.getClass().getName()+" was encountered");
168      return (ContactPoint) this.address;
169    }
170
171    public boolean hasAddressContactPoint() { 
172      return this != null && this.address instanceof ContactPoint;
173    }
174
175    /**
176     * @return {@link #address} (What address or number needs to be used for a user to connect to the virtual service to join. The channelType informs as to which datatype is appropriate to use (requires knowledge of the specific type).)
177     */
178    public ExtendedContactDetail getAddressExtendedContactDetail() throws FHIRException { 
179      if (this.address == null)
180        this.address = new ExtendedContactDetail();
181      if (!(this.address instanceof ExtendedContactDetail))
182        throw new FHIRException("Type mismatch: the type ExtendedContactDetail was expected, but "+this.address.getClass().getName()+" was encountered");
183      return (ExtendedContactDetail) this.address;
184    }
185
186    public boolean hasAddressExtendedContactDetail() { 
187      return this != null && this.address instanceof ExtendedContactDetail;
188    }
189
190    public boolean hasAddress() { 
191      return this.address != null && !this.address.isEmpty();
192    }
193
194    /**
195     * @param value {@link #address} (What address or number needs to be used for a user to connect to the virtual service to join. The channelType informs as to which datatype is appropriate to use (requires knowledge of the specific type).)
196     */
197    public VirtualServiceDetail setAddress(DataType value) { 
198      if (value != null && !(value instanceof UrlType || value instanceof StringType || value instanceof ContactPoint || value instanceof ExtendedContactDetail))
199        throw new FHIRException("Not the right type for VirtualServiceDetail.address[x]: "+value.fhirType());
200      this.address = value;
201      return this;
202    }
203
204    /**
205     * @return {@link #additionalInfo} (Address to see alternative connection details.)
206     */
207    public List<UrlType> getAdditionalInfo() { 
208      if (this.additionalInfo == null)
209        this.additionalInfo = new ArrayList<UrlType>();
210      return this.additionalInfo;
211    }
212
213    /**
214     * @return Returns a reference to <code>this</code> for easy method chaining
215     */
216    public VirtualServiceDetail setAdditionalInfo(List<UrlType> theAdditionalInfo) { 
217      this.additionalInfo = theAdditionalInfo;
218      return this;
219    }
220
221    public boolean hasAdditionalInfo() { 
222      if (this.additionalInfo == null)
223        return false;
224      for (UrlType item : this.additionalInfo)
225        if (!item.isEmpty())
226          return true;
227      return false;
228    }
229
230    /**
231     * @return {@link #additionalInfo} (Address to see alternative connection details.)
232     */
233    public UrlType addAdditionalInfoElement() {//2 
234      UrlType t = new UrlType();
235      if (this.additionalInfo == null)
236        this.additionalInfo = new ArrayList<UrlType>();
237      this.additionalInfo.add(t);
238      return t;
239    }
240
241    /**
242     * @param value {@link #additionalInfo} (Address to see alternative connection details.)
243     */
244    public VirtualServiceDetail addAdditionalInfo(String value) { //1
245      UrlType t = new UrlType();
246      t.setValue(value);
247      if (this.additionalInfo == null)
248        this.additionalInfo = new ArrayList<UrlType>();
249      this.additionalInfo.add(t);
250      return this;
251    }
252
253    /**
254     * @param value {@link #additionalInfo} (Address to see alternative connection details.)
255     */
256    public boolean hasAdditionalInfo(String value) { 
257      if (this.additionalInfo == null)
258        return false;
259      for (UrlType v : this.additionalInfo)
260        if (v.getValue().equals(value)) // url
261          return true;
262      return false;
263    }
264
265    /**
266     * @return {@link #maxParticipants} (Maximum number of participants supported by the virtual service.). This is the underlying object with id, value and extensions. The accessor "getMaxParticipants" gives direct access to the value
267     */
268    public PositiveIntType getMaxParticipantsElement() { 
269      if (this.maxParticipants == null)
270        if (Configuration.errorOnAutoCreate())
271          throw new Error("Attempt to auto-create VirtualServiceDetail.maxParticipants");
272        else if (Configuration.doAutoCreate())
273          this.maxParticipants = new PositiveIntType(); // bb
274      return this.maxParticipants;
275    }
276
277    public boolean hasMaxParticipantsElement() { 
278      return this.maxParticipants != null && !this.maxParticipants.isEmpty();
279    }
280
281    public boolean hasMaxParticipants() { 
282      return this.maxParticipants != null && !this.maxParticipants.isEmpty();
283    }
284
285    /**
286     * @param value {@link #maxParticipants} (Maximum number of participants supported by the virtual service.). This is the underlying object with id, value and extensions. The accessor "getMaxParticipants" gives direct access to the value
287     */
288    public VirtualServiceDetail setMaxParticipantsElement(PositiveIntType value) { 
289      this.maxParticipants = value;
290      return this;
291    }
292
293    /**
294     * @return Maximum number of participants supported by the virtual service.
295     */
296    public int getMaxParticipants() { 
297      return this.maxParticipants == null || this.maxParticipants.isEmpty() ? 0 : this.maxParticipants.getValue();
298    }
299
300    /**
301     * @param value Maximum number of participants supported by the virtual service.
302     */
303    public VirtualServiceDetail setMaxParticipants(int value) { 
304        if (this.maxParticipants == null)
305          this.maxParticipants = new PositiveIntType();
306        this.maxParticipants.setValue(value);
307      return this;
308    }
309
310    /**
311     * @return {@link #sessionKey} (Session Key required by the virtual service.). This is the underlying object with id, value and extensions. The accessor "getSessionKey" gives direct access to the value
312     */
313    public StringType getSessionKeyElement() { 
314      if (this.sessionKey == null)
315        if (Configuration.errorOnAutoCreate())
316          throw new Error("Attempt to auto-create VirtualServiceDetail.sessionKey");
317        else if (Configuration.doAutoCreate())
318          this.sessionKey = new StringType(); // bb
319      return this.sessionKey;
320    }
321
322    public boolean hasSessionKeyElement() { 
323      return this.sessionKey != null && !this.sessionKey.isEmpty();
324    }
325
326    public boolean hasSessionKey() { 
327      return this.sessionKey != null && !this.sessionKey.isEmpty();
328    }
329
330    /**
331     * @param value {@link #sessionKey} (Session Key required by the virtual service.). This is the underlying object with id, value and extensions. The accessor "getSessionKey" gives direct access to the value
332     */
333    public VirtualServiceDetail setSessionKeyElement(StringType value) { 
334      this.sessionKey = value;
335      return this;
336    }
337
338    /**
339     * @return Session Key required by the virtual service.
340     */
341    public String getSessionKey() { 
342      return this.sessionKey == null ? null : this.sessionKey.getValue();
343    }
344
345    /**
346     * @param value Session Key required by the virtual service.
347     */
348    public VirtualServiceDetail setSessionKey(String value) { 
349      if (Utilities.noString(value))
350        this.sessionKey = null;
351      else {
352        if (this.sessionKey == null)
353          this.sessionKey = new StringType();
354        this.sessionKey.setValue(value);
355      }
356      return this;
357    }
358
359      protected void listChildren(List<Property> children) {
360        super.listChildren(children);
361        children.add(new Property("channelType", "Coding", "The type of virtual service to connect to (i.e. Teams, Zoom, Specific VMR technology, WhatsApp).", 0, 1, channelType));
362        children.add(new Property("address[x]", "url|string|ContactPoint|ExtendedContactDetail", "What address or number needs to be used for a user to connect to the virtual service to join. The channelType informs as to which datatype is appropriate to use (requires knowledge of the specific type).", 0, 1, address));
363        children.add(new Property("additionalInfo", "url", "Address to see alternative connection details.", 0, java.lang.Integer.MAX_VALUE, additionalInfo));
364        children.add(new Property("maxParticipants", "positiveInt", "Maximum number of participants supported by the virtual service.", 0, 1, maxParticipants));
365        children.add(new Property("sessionKey", "string", "Session Key required by the virtual service.", 0, 1, sessionKey));
366      }
367
368      @Override
369      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
370        switch (_hash) {
371        case 274155229: /*channelType*/  return new Property("channelType", "Coding", "The type of virtual service to connect to (i.e. Teams, Zoom, Specific VMR technology, WhatsApp).", 0, 1, channelType);
372        case 1341051916: /*address[x]*/  return new Property("address[x]", "url|string|ContactPoint|ExtendedContactDetail", "What address or number needs to be used for a user to connect to the virtual service to join. The channelType informs as to which datatype is appropriate to use (requires knowledge of the specific type).", 0, 1, address);
373        case -1147692044: /*address*/  return new Property("address[x]", "url|string|ContactPoint|ExtendedContactDetail", "What address or number needs to be used for a user to connect to the virtual service to join. The channelType informs as to which datatype is appropriate to use (requires knowledge of the specific type).", 0, 1, address);
374        case 1341045979: /*addressUrl*/  return new Property("address[x]", "url", "What address or number needs to be used for a user to connect to the virtual service to join. The channelType informs as to which datatype is appropriate to use (requires knowledge of the specific type).", 0, 1, address);
375        case -740155099: /*addressString*/  return new Property("address[x]", "string", "What address or number needs to be used for a user to connect to the virtual service to join. The channelType informs as to which datatype is appropriate to use (requires knowledge of the specific type).", 0, 1, address);
376        case 269121380: /*addressContactPoint*/  return new Property("address[x]", "ContactPoint", "What address or number needs to be used for a user to connect to the virtual service to join. The channelType informs as to which datatype is appropriate to use (requires knowledge of the specific type).", 0, 1, address);
377        case -834417596: /*addressExtendedContactDetail*/  return new Property("address[x]", "ExtendedContactDetail", "What address or number needs to be used for a user to connect to the virtual service to join. The channelType informs as to which datatype is appropriate to use (requires knowledge of the specific type).", 0, 1, address);
378        case -974297739: /*additionalInfo*/  return new Property("additionalInfo", "url", "Address to see alternative connection details.", 0, java.lang.Integer.MAX_VALUE, additionalInfo);
379        case 950795044: /*maxParticipants*/  return new Property("maxParticipants", "positiveInt", "Maximum number of participants supported by the virtual service.", 0, 1, maxParticipants);
380        case 1661834217: /*sessionKey*/  return new Property("sessionKey", "string", "Session Key required by the virtual service.", 0, 1, sessionKey);
381        default: return super.getNamedProperty(_hash, _name, _checkValid);
382        }
383
384      }
385
386      @Override
387      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
388        switch (hash) {
389        case 274155229: /*channelType*/ return this.channelType == null ? new Base[0] : new Base[] {this.channelType}; // Coding
390        case -1147692044: /*address*/ return this.address == null ? new Base[0] : new Base[] {this.address}; // DataType
391        case -974297739: /*additionalInfo*/ return this.additionalInfo == null ? new Base[0] : this.additionalInfo.toArray(new Base[this.additionalInfo.size()]); // UrlType
392        case 950795044: /*maxParticipants*/ return this.maxParticipants == null ? new Base[0] : new Base[] {this.maxParticipants}; // PositiveIntType
393        case 1661834217: /*sessionKey*/ return this.sessionKey == null ? new Base[0] : new Base[] {this.sessionKey}; // StringType
394        default: return super.getProperty(hash, name, checkValid);
395        }
396
397      }
398
399      @Override
400      public Base setProperty(int hash, String name, Base value) throws FHIRException {
401        switch (hash) {
402        case 274155229: // channelType
403          this.channelType = TypeConvertor.castToCoding(value); // Coding
404          return value;
405        case -1147692044: // address
406          this.address = TypeConvertor.castToType(value); // DataType
407          return value;
408        case -974297739: // additionalInfo
409          this.getAdditionalInfo().add(TypeConvertor.castToUrl(value)); // UrlType
410          return value;
411        case 950795044: // maxParticipants
412          this.maxParticipants = TypeConvertor.castToPositiveInt(value); // PositiveIntType
413          return value;
414        case 1661834217: // sessionKey
415          this.sessionKey = TypeConvertor.castToString(value); // StringType
416          return value;
417        default: return super.setProperty(hash, name, value);
418        }
419
420      }
421
422      @Override
423      public Base setProperty(String name, Base value) throws FHIRException {
424        if (name.equals("channelType")) {
425          this.channelType = TypeConvertor.castToCoding(value); // Coding
426        } else if (name.equals("address[x]")) {
427          this.address = TypeConvertor.castToType(value); // DataType
428        } else if (name.equals("additionalInfo")) {
429          this.getAdditionalInfo().add(TypeConvertor.castToUrl(value));
430        } else if (name.equals("maxParticipants")) {
431          this.maxParticipants = TypeConvertor.castToPositiveInt(value); // PositiveIntType
432        } else if (name.equals("sessionKey")) {
433          this.sessionKey = TypeConvertor.castToString(value); // StringType
434        } else
435          return super.setProperty(name, value);
436        return value;
437      }
438
439      @Override
440      public Base makeProperty(int hash, String name) throws FHIRException {
441        switch (hash) {
442        case 274155229:  return getChannelType();
443        case 1341051916:  return getAddress();
444        case -1147692044:  return getAddress();
445        case -974297739:  return addAdditionalInfoElement();
446        case 950795044:  return getMaxParticipantsElement();
447        case 1661834217:  return getSessionKeyElement();
448        default: return super.makeProperty(hash, name);
449        }
450
451      }
452
453      @Override
454      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
455        switch (hash) {
456        case 274155229: /*channelType*/ return new String[] {"Coding"};
457        case -1147692044: /*address*/ return new String[] {"url", "string", "ContactPoint", "ExtendedContactDetail"};
458        case -974297739: /*additionalInfo*/ return new String[] {"url"};
459        case 950795044: /*maxParticipants*/ return new String[] {"positiveInt"};
460        case 1661834217: /*sessionKey*/ return new String[] {"string"};
461        default: return super.getTypesForProperty(hash, name);
462        }
463
464      }
465
466      @Override
467      public Base addChild(String name) throws FHIRException {
468        if (name.equals("channelType")) {
469          this.channelType = new Coding();
470          return this.channelType;
471        }
472        else if (name.equals("addressUrl")) {
473          this.address = new UrlType();
474          return this.address;
475        }
476        else if (name.equals("addressString")) {
477          this.address = new StringType();
478          return this.address;
479        }
480        else if (name.equals("addressContactPoint")) {
481          this.address = new ContactPoint();
482          return this.address;
483        }
484        else if (name.equals("addressExtendedContactDetail")) {
485          this.address = new ExtendedContactDetail();
486          return this.address;
487        }
488        else if (name.equals("additionalInfo")) {
489          throw new FHIRException("Cannot call addChild on a singleton property VirtualServiceDetail.additionalInfo");
490        }
491        else if (name.equals("maxParticipants")) {
492          throw new FHIRException("Cannot call addChild on a singleton property VirtualServiceDetail.maxParticipants");
493        }
494        else if (name.equals("sessionKey")) {
495          throw new FHIRException("Cannot call addChild on a singleton property VirtualServiceDetail.sessionKey");
496        }
497        else
498          return super.addChild(name);
499      }
500
501  public String fhirType() {
502    return "VirtualServiceDetail";
503
504  }
505
506      public VirtualServiceDetail copy() {
507        VirtualServiceDetail dst = new VirtualServiceDetail();
508        copyValues(dst);
509        return dst;
510      }
511
512      public void copyValues(VirtualServiceDetail dst) {
513        super.copyValues(dst);
514        dst.channelType = channelType == null ? null : channelType.copy();
515        dst.address = address == null ? null : address.copy();
516        if (additionalInfo != null) {
517          dst.additionalInfo = new ArrayList<UrlType>();
518          for (UrlType i : additionalInfo)
519            dst.additionalInfo.add(i.copy());
520        };
521        dst.maxParticipants = maxParticipants == null ? null : maxParticipants.copy();
522        dst.sessionKey = sessionKey == null ? null : sessionKey.copy();
523      }
524
525      protected VirtualServiceDetail typedCopy() {
526        return copy();
527      }
528
529      @Override
530      public boolean equalsDeep(Base other_) {
531        if (!super.equalsDeep(other_))
532          return false;
533        if (!(other_ instanceof VirtualServiceDetail))
534          return false;
535        VirtualServiceDetail o = (VirtualServiceDetail) other_;
536        return compareDeep(channelType, o.channelType, true) && compareDeep(address, o.address, true) && compareDeep(additionalInfo, o.additionalInfo, true)
537           && compareDeep(maxParticipants, o.maxParticipants, true) && compareDeep(sessionKey, o.sessionKey, true)
538          ;
539      }
540
541      @Override
542      public boolean equalsShallow(Base other_) {
543        if (!super.equalsShallow(other_))
544          return false;
545        if (!(other_ instanceof VirtualServiceDetail))
546          return false;
547        VirtualServiceDetail o = (VirtualServiceDetail) other_;
548        return compareValues(additionalInfo, o.additionalInfo, true) && compareValues(maxParticipants, o.maxParticipants, true)
549           && compareValues(sessionKey, o.sessionKey, true);
550      }
551
552      public boolean isEmpty() {
553        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(channelType, address, additionalInfo
554          , maxParticipants, sessionKey);
555      }
556
557
558}
559