001package org.hl7.fhir.r5.formats;
002
003
004// generated
005
006/*
007  Copyright (c) 2011+, HL7, Inc.
008  All rights reserved.
009  
010  Redistribution and use in source and binary forms, with or without modification, \
011  are permitted provided that the following conditions are met:
012  
013   * Redistributions of source code must retain the above copyright notice, this \
014     list of conditions and the following disclaimer.
015   * Redistributions in binary form must reproduce the above copyright notice, \
016     this list of conditions and the following disclaimer in the documentation \
017     and/or other materials provided with the distribution.
018   * Neither the name of HL7 nor the names of its contributors may be used to 
019     endorse or promote products derived from this software without specific 
020     prior written permission.
021  
022  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND \
023  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED \
024  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \
025  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, \
026  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT \
027  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR \
028  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, \
029  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \
030  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \
031  POSSIBILITY OF SUCH DAMAGE.
032  */
033
034// Generated on Tue, Dec 13, 2022 17:53+1100 for FHIR vcurrent
035
036
037
038import org.hl7.fhir.r5.model.*;
039import org.hl7.fhir.r5.model.StringType;
040import org.hl7.fhir.utilities.Utilities;
041import org.hl7.fhir.exceptions.FHIRFormatError;
042import org.hl7.fhir.exceptions.FHIRException;
043import org.hl7.fhir.utilities.turtle.Turtle.*;
044import java.io.IOException;
045
046public class RdfParser extends RdfParserBase {
047
048  public RdfParser() {
049    super();
050  }
051
052  public RdfParser(boolean allowUnknownContent) {
053    super();
054    setAllowUnknownContent(allowUnknownContent);
055  }
056
057  private void composeEnum(Complex parent, String parentType, String name, Enumeration<? extends Enum> value, int index) {
058    if (value == null)
059      return;
060    Complex t = parent.predicate("fhir:"+parentType+"."+name);
061    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
062    composeElement(t, parentType, name, value, index);
063    decorateCode(t, value);
064  }
065
066
067  protected void composeDate(Complex parent, String parentType, String name, DateType value, int index) {
068    if (value == null)
069      return;
070    Complex t = parent.predicate("fhir:"+parentType+"."+name);
071    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
072    composeElement(t, parentType, name, value, index);
073  }
074
075  protected void composeDateTime(Complex parent, String parentType, String name, DateTimeType value, int index) {
076    if (value == null)
077      return;
078    Complex t = parent.predicate("fhir:"+parentType+"."+name);
079    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
080    composeElement(t, parentType, name, value, index);
081  }
082
083  protected void composeCode(Complex parent, String parentType, String name, CodeType value, int index) {
084    if (value == null)
085      return;
086    Complex t = parent.predicate("fhir:"+parentType+"."+name);
087    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
088    composeElement(t, parentType, name, value, index);
089    decorateCode(t, value);
090  }
091
092  protected void composeString(Complex parent, String parentType, String name, StringType value, int index) {
093    if (value == null)
094      return;
095    Complex t = parent.predicate("fhir:"+parentType+"."+name);
096    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
097    composeElement(t, parentType, name, value, index);
098  }
099
100  protected void composeInteger(Complex parent, String parentType, String name, IntegerType value, int index) {
101    if (value == null)
102      return;
103    Complex t = parent.predicate("fhir:"+parentType+"."+name);
104    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
105    composeElement(t, parentType, name, value, index);
106  }
107
108  protected void composeInteger64(Complex parent, String parentType, String name, Integer64Type value, int index) {
109    if (value == null)
110      return;
111    Complex t = parent.predicate("fhir:"+parentType+"."+name);
112    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
113    composeElement(t, parentType, name, value, index);
114  }
115
116  protected void composeOid(Complex parent, String parentType, String name, OidType value, int index) {
117    if (value == null)
118      return;
119    Complex t = parent.predicate("fhir:"+parentType+"."+name);
120    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
121    composeElement(t, parentType, name, value, index);
122  }
123
124  protected void composeCanonical(Complex parent, String parentType, String name, CanonicalType value, int index) {
125    if (value == null)
126      return;
127    Complex t = parent.predicate("fhir:"+parentType+"."+name);
128    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
129    composeElement(t, parentType, name, value, index);
130  }
131
132  protected void composeUri(Complex parent, String parentType, String name, UriType value, int index) {
133    if (value == null)
134      return;
135    Complex t = parent.predicate("fhir:"+parentType+"."+name);
136    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
137    composeElement(t, parentType, name, value, index);
138  }
139
140  protected void composeUuid(Complex parent, String parentType, String name, UuidType value, int index) {
141    if (value == null)
142      return;
143    Complex t = parent.predicate("fhir:"+parentType+"."+name);
144    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
145    composeElement(t, parentType, name, value, index);
146  }
147
148  protected void composeUrl(Complex parent, String parentType, String name, UrlType value, int index) {
149    if (value == null)
150      return;
151    Complex t = parent.predicate("fhir:"+parentType+"."+name);
152    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
153    composeElement(t, parentType, name, value, index);
154  }
155
156  protected void composeInstant(Complex parent, String parentType, String name, InstantType value, int index) {
157    if (value == null)
158      return;
159    Complex t = parent.predicate("fhir:"+parentType+"."+name);
160    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
161    composeElement(t, parentType, name, value, index);
162  }
163
164  protected void composeBoolean(Complex parent, String parentType, String name, BooleanType value, int index) {
165    if (value == null)
166      return;
167    Complex t = parent.predicate("fhir:"+parentType+"."+name);
168    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
169    composeElement(t, parentType, name, value, index);
170  }
171
172  protected void composeBase64Binary(Complex parent, String parentType, String name, Base64BinaryType value, int index) {
173    if (value == null)
174      return;
175    Complex t = parent.predicate("fhir:"+parentType+"."+name);
176    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
177    composeElement(t, parentType, name, value, index);
178  }
179
180  protected void composeUnsignedInt(Complex parent, String parentType, String name, UnsignedIntType value, int index) {
181    if (value == null)
182      return;
183    Complex t = parent.predicate("fhir:"+parentType+"."+name);
184    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
185    composeElement(t, parentType, name, value, index);
186  }
187
188  protected void composeMarkdown(Complex parent, String parentType, String name, MarkdownType value, int index) {
189    if (value == null)
190      return;
191    Complex t = parent.predicate("fhir:"+parentType+"."+name);
192    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
193    composeElement(t, parentType, name, value, index);
194  }
195
196  protected void composeTime(Complex parent, String parentType, String name, TimeType value, int index) {
197    if (value == null)
198      return;
199    Complex t = parent.predicate("fhir:"+parentType+"."+name);
200    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
201    composeElement(t, parentType, name, value, index);
202  }
203
204  protected void composeId(Complex parent, String parentType, String name, IdType value, int index) {
205    if (value == null)
206      return;
207    Complex t = parent.predicate("fhir:"+parentType+"."+name);
208    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
209    composeElement(t, parentType, name, value, index);
210  }
211
212  protected void composePositiveInt(Complex parent, String parentType, String name, PositiveIntType value, int index) {
213    if (value == null)
214      return;
215    Complex t = parent.predicate("fhir:"+parentType+"."+name);
216    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
217    composeElement(t, parentType, name, value, index);
218  }
219
220  protected void composeDecimal(Complex parent, String parentType, String name, DecimalType value, int index) {
221    if (value == null)
222      return;
223    Complex t = parent.predicate("fhir:"+parentType+"."+name);
224    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
225    composeElement(t, parentType, name, value, index);
226  }
227
228  protected void composeBackboneElement(Complex t, String parentType, String name, BackboneElement element, int index) {
229    composeElement(t, parentType, name, element, index);
230    for (int i = 0; i < element.getModifierExtension().size(); i++) {
231      composeExtension(t, "BackboneElement", "modifierExtension", element.getModifierExtension().get(i), i);
232    }
233  }
234
235  protected void composeBackboneType(Complex t, String parentType, String name, BackboneType element, int index) {
236    composeDataType(t, parentType, name, element, index);
237    for (int i = 0; i < element.getModifierExtension().size(); i++) {
238      composeExtension(t, "BackboneType", "modifierExtension", element.getModifierExtension().get(i), i);
239    }
240  }
241
242  protected void composeDataType(Complex t, String parentType, String name, DataType element, int index) {
243    composeElement(t, parentType, name, element, index);
244  }
245
246  protected void composeElement(Complex t, String parentType, String name, Element element, int index) {
247    composeBase(t, parentType, name, element, index);
248    if (element.hasIdElement()) {
249      composeString(t, "Element", "id", element.getIdElement(), -1);
250    }
251    for (int i = 0; i < element.getExtension().size(); i++) {
252      composeExtension(t, "Element", "extension", element.getExtension().get(i), i);
253    }
254  }
255
256  protected void composeAddress(Complex parent, String parentType, String name, Address element, int index) {
257    if (element == null) 
258      return;
259    Complex t;
260    if (Utilities.noString(parentType))
261      t = parent;
262    else {
263      t = parent.predicate("fhir:"+parentType+'.'+name);
264    }
265    composeDataType(t, "Address", name, element, index);
266    if (element.hasUseElement()) {
267      composeEnum(t, "Address", "use", element.getUseElement(), -1);
268    }
269    if (element.hasTypeElement()) {
270      composeEnum(t, "Address", "type", element.getTypeElement(), -1);
271    }
272    if (element.hasTextElement()) {
273      composeString(t, "Address", "text", element.getTextElement(), -1);
274    }
275    for (int i = 0; i < element.getLine().size(); i++) {
276      composeString(t, "Address", "line", element.getLine().get(i), i);
277    }
278    if (element.hasCityElement()) {
279      composeString(t, "Address", "city", element.getCityElement(), -1);
280    }
281    if (element.hasDistrictElement()) {
282      composeString(t, "Address", "district", element.getDistrictElement(), -1);
283    }
284    if (element.hasStateElement()) {
285      composeString(t, "Address", "state", element.getStateElement(), -1);
286    }
287    if (element.hasPostalCodeElement()) {
288      composeString(t, "Address", "postalCode", element.getPostalCodeElement(), -1);
289    }
290    if (element.hasCountryElement()) {
291      composeString(t, "Address", "country", element.getCountryElement(), -1);
292    }
293    if (element.hasPeriod()) {
294      composePeriod(t, "Address", "period", element.getPeriod(), -1);
295    }
296  }
297
298  protected void composeAge(Complex parent, String parentType, String name, Age element, int index) {
299    if (element == null) 
300      return;
301    Complex t;
302    if (Utilities.noString(parentType))
303      t = parent;
304    else {
305      t = parent.predicate("fhir:"+parentType+'.'+name);
306    }
307    composeQuantity(t, "Age", name, element, index);
308  }
309
310  protected void composeAnnotation(Complex parent, String parentType, String name, Annotation element, int index) {
311    if (element == null) 
312      return;
313    Complex t;
314    if (Utilities.noString(parentType))
315      t = parent;
316    else {
317      t = parent.predicate("fhir:"+parentType+'.'+name);
318    }
319    composeDataType(t, "Annotation", name, element, index);
320    if (element.hasAuthor()) {
321      composeType(t, "Annotation", "author", element.getAuthor(), -1);
322    }
323    if (element.hasTimeElement()) {
324      composeDateTime(t, "Annotation", "time", element.getTimeElement(), -1);
325    }
326    if (element.hasTextElement()) {
327      composeMarkdown(t, "Annotation", "text", element.getTextElement(), -1);
328    }
329  }
330
331  protected void composeAttachment(Complex parent, String parentType, String name, Attachment element, int index) {
332    if (element == null) 
333      return;
334    Complex t;
335    if (Utilities.noString(parentType))
336      t = parent;
337    else {
338      t = parent.predicate("fhir:"+parentType+'.'+name);
339    }
340    composeDataType(t, "Attachment", name, element, index);
341    if (element.hasContentTypeElement()) {
342      composeCode(t, "Attachment", "contentType", element.getContentTypeElement(), -1);
343    }
344    if (element.hasLanguageElement()) {
345      composeCode(t, "Attachment", "language", element.getLanguageElement(), -1);
346    }
347    if (element.hasDataElement()) {
348      composeBase64Binary(t, "Attachment", "data", element.getDataElement(), -1);
349    }
350    if (element.hasUrlElement()) {
351      composeUrl(t, "Attachment", "url", element.getUrlElement(), -1);
352    }
353    if (element.hasSizeElement()) {
354      composeInteger64(t, "Attachment", "size", element.getSizeElement(), -1);
355    }
356    if (element.hasHashElement()) {
357      composeBase64Binary(t, "Attachment", "hash", element.getHashElement(), -1);
358    }
359    if (element.hasTitleElement()) {
360      composeString(t, "Attachment", "title", element.getTitleElement(), -1);
361    }
362    if (element.hasCreationElement()) {
363      composeDateTime(t, "Attachment", "creation", element.getCreationElement(), -1);
364    }
365    if (element.hasHeightElement()) {
366      composePositiveInt(t, "Attachment", "height", element.getHeightElement(), -1);
367    }
368    if (element.hasWidthElement()) {
369      composePositiveInt(t, "Attachment", "width", element.getWidthElement(), -1);
370    }
371    if (element.hasFramesElement()) {
372      composePositiveInt(t, "Attachment", "frames", element.getFramesElement(), -1);
373    }
374    if (element.hasDurationElement()) {
375      composeDecimal(t, "Attachment", "duration", element.getDurationElement(), -1);
376    }
377    if (element.hasPagesElement()) {
378      composePositiveInt(t, "Attachment", "pages", element.getPagesElement(), -1);
379    }
380  }
381
382  protected void composeAvailability(Complex parent, String parentType, String name, Availability element, int index) {
383    if (element == null) 
384      return;
385    Complex t;
386    if (Utilities.noString(parentType))
387      t = parent;
388    else {
389      t = parent.predicate("fhir:"+parentType+'.'+name);
390    }
391    composeDataType(t, "Availability", name, element, index);
392    for (int i = 0; i < element.getAvailableTime().size(); i++) {
393      composeAvailabilityAvailableTimeComponent(t, "Availability", "availableTime", element.getAvailableTime().get(i), i);
394    }
395    for (int i = 0; i < element.getNotAvailableTime().size(); i++) {
396      composeAvailabilityNotAvailableTimeComponent(t, "Availability", "notAvailableTime", element.getNotAvailableTime().get(i), i);
397    }
398  }
399
400  protected void composeAvailabilityAvailableTimeComponent(Complex parent, String parentType, String name, Availability.AvailabilityAvailableTimeComponent element, int index) {
401    if (element == null) 
402      return;
403    Complex t;
404    if (Utilities.noString(parentType))
405      t = parent;
406    else {
407      t = parent.predicate("fhir:"+parentType+'.'+name);
408    }
409    composeElement(t, "availableTime", name, element, index);
410    for (int i = 0; i < element.getDaysOfWeek().size(); i++) {
411      composeEnum(t, "AvailabilityAvailableTimeComponent", "daysOfWeek", element.getDaysOfWeek().get(i), i);
412    }
413    if (element.hasAllDayElement()) {
414      composeBoolean(t, "AvailabilityAvailableTimeComponent", "allDay", element.getAllDayElement(), -1);
415    }
416    if (element.hasAvailableStartTimeElement()) {
417      composeTime(t, "AvailabilityAvailableTimeComponent", "availableStartTime", element.getAvailableStartTimeElement(), -1);
418    }
419    if (element.hasAvailableEndTimeElement()) {
420      composeTime(t, "AvailabilityAvailableTimeComponent", "availableEndTime", element.getAvailableEndTimeElement(), -1);
421    }
422  }
423
424  protected void composeAvailabilityNotAvailableTimeComponent(Complex parent, String parentType, String name, Availability.AvailabilityNotAvailableTimeComponent element, int index) {
425    if (element == null) 
426      return;
427    Complex t;
428    if (Utilities.noString(parentType))
429      t = parent;
430    else {
431      t = parent.predicate("fhir:"+parentType+'.'+name);
432    }
433    composeElement(t, "notAvailableTime", name, element, index);
434    if (element.hasDescriptionElement()) {
435      composeString(t, "AvailabilityNotAvailableTimeComponent", "description", element.getDescriptionElement(), -1);
436    }
437    if (element.hasDuring()) {
438      composePeriod(t, "AvailabilityNotAvailableTimeComponent", "during", element.getDuring(), -1);
439    }
440  }
441
442  protected void composeCodeableConcept(Complex parent, String parentType, String name, CodeableConcept element, int index) {
443    if (element == null) 
444      return;
445    Complex t;
446    if (Utilities.noString(parentType))
447      t = parent;
448    else {
449      t = parent.predicate("fhir:"+parentType+'.'+name);
450    }
451    composeDataType(t, "CodeableConcept", name, element, index);
452    decorateCodeableConcept(t, element);
453    for (int i = 0; i < element.getCoding().size(); i++) {
454      composeCoding(t, "CodeableConcept", "coding", element.getCoding().get(i), i);
455    }
456    if (element.hasTextElement()) {
457      composeString(t, "CodeableConcept", "text", element.getTextElement(), -1);
458    }
459  }
460
461  protected void composeCodeableReference(Complex parent, String parentType, String name, CodeableReference element, int index) {
462    if (element == null) 
463      return;
464    Complex t;
465    if (Utilities.noString(parentType))
466      t = parent;
467    else {
468      t = parent.predicate("fhir:"+parentType+'.'+name);
469    }
470    composeDataType(t, "CodeableReference", name, element, index);
471    if (element.hasConcept()) {
472      composeCodeableConcept(t, "CodeableReference", "concept", element.getConcept(), -1);
473    }
474    if (element.hasReference()) {
475      composeReference(t, "CodeableReference", "reference", element.getReference(), -1);
476    }
477  }
478
479  protected void composeCoding(Complex parent, String parentType, String name, Coding element, int index) {
480    if (element == null) 
481      return;
482    Complex t;
483    if (Utilities.noString(parentType))
484      t = parent;
485    else {
486      t = parent.predicate("fhir:"+parentType+'.'+name);
487    }
488    composeDataType(t, "Coding", name, element, index);
489    decorateCoding(t, element);
490    if (element.hasSystemElement()) {
491      composeUri(t, "Coding", "system", element.getSystemElement(), -1);
492    }
493    if (element.hasVersionElement()) {
494      composeString(t, "Coding", "version", element.getVersionElement(), -1);
495    }
496    if (element.hasCodeElement()) {
497      composeCode(t, "Coding", "code", element.getCodeElement(), -1);
498    }
499    if (element.hasDisplayElement()) {
500      composeString(t, "Coding", "display", element.getDisplayElement(), -1);
501    }
502    if (element.hasUserSelectedElement()) {
503      composeBoolean(t, "Coding", "userSelected", element.getUserSelectedElement(), -1);
504    }
505  }
506
507  protected void composeContactDetail(Complex parent, String parentType, String name, ContactDetail element, int index) {
508    if (element == null) 
509      return;
510    Complex t;
511    if (Utilities.noString(parentType))
512      t = parent;
513    else {
514      t = parent.predicate("fhir:"+parentType+'.'+name);
515    }
516    composeDataType(t, "ContactDetail", name, element, index);
517    if (element.hasNameElement()) {
518      composeString(t, "ContactDetail", "name", element.getNameElement(), -1);
519    }
520    for (int i = 0; i < element.getTelecom().size(); i++) {
521      composeContactPoint(t, "ContactDetail", "telecom", element.getTelecom().get(i), i);
522    }
523  }
524
525  protected void composeContactPoint(Complex parent, String parentType, String name, ContactPoint element, int index) {
526    if (element == null) 
527      return;
528    Complex t;
529    if (Utilities.noString(parentType))
530      t = parent;
531    else {
532      t = parent.predicate("fhir:"+parentType+'.'+name);
533    }
534    composeDataType(t, "ContactPoint", name, element, index);
535    if (element.hasSystemElement()) {
536      composeEnum(t, "ContactPoint", "system", element.getSystemElement(), -1);
537    }
538    if (element.hasValueElement()) {
539      composeString(t, "ContactPoint", "value", element.getValueElement(), -1);
540    }
541    if (element.hasUseElement()) {
542      composeEnum(t, "ContactPoint", "use", element.getUseElement(), -1);
543    }
544    if (element.hasRankElement()) {
545      composePositiveInt(t, "ContactPoint", "rank", element.getRankElement(), -1);
546    }
547    if (element.hasPeriod()) {
548      composePeriod(t, "ContactPoint", "period", element.getPeriod(), -1);
549    }
550  }
551
552  protected void composeContributor(Complex parent, String parentType, String name, Contributor element, int index) {
553    if (element == null) 
554      return;
555    Complex t;
556    if (Utilities.noString(parentType))
557      t = parent;
558    else {
559      t = parent.predicate("fhir:"+parentType+'.'+name);
560    }
561    composeDataType(t, "Contributor", name, element, index);
562    if (element.hasTypeElement()) {
563      composeEnum(t, "Contributor", "type", element.getTypeElement(), -1);
564    }
565    if (element.hasNameElement()) {
566      composeString(t, "Contributor", "name", element.getNameElement(), -1);
567    }
568    for (int i = 0; i < element.getContact().size(); i++) {
569      composeContactDetail(t, "Contributor", "contact", element.getContact().get(i), i);
570    }
571  }
572
573  protected void composeCount(Complex parent, String parentType, String name, Count element, int index) {
574    if (element == null) 
575      return;
576    Complex t;
577    if (Utilities.noString(parentType))
578      t = parent;
579    else {
580      t = parent.predicate("fhir:"+parentType+'.'+name);
581    }
582    composeQuantity(t, "Count", name, element, index);
583  }
584
585  protected void composeDataRequirement(Complex parent, String parentType, String name, DataRequirement element, int index) {
586    if (element == null) 
587      return;
588    Complex t;
589    if (Utilities.noString(parentType))
590      t = parent;
591    else {
592      t = parent.predicate("fhir:"+parentType+'.'+name);
593    }
594    composeDataType(t, "DataRequirement", name, element, index);
595    if (element.hasTypeElement()) {
596      composeEnum(t, "DataRequirement", "type", element.getTypeElement(), -1);
597    }
598    for (int i = 0; i < element.getProfile().size(); i++) {
599      composeCanonical(t, "DataRequirement", "profile", element.getProfile().get(i), i);
600    }
601    if (element.hasSubject()) {
602      composeType(t, "DataRequirement", "subject", element.getSubject(), -1);
603    }
604    for (int i = 0; i < element.getMustSupport().size(); i++) {
605      composeString(t, "DataRequirement", "mustSupport", element.getMustSupport().get(i), i);
606    }
607    for (int i = 0; i < element.getCodeFilter().size(); i++) {
608      composeDataRequirementCodeFilterComponent(t, "DataRequirement", "codeFilter", element.getCodeFilter().get(i), i);
609    }
610    for (int i = 0; i < element.getDateFilter().size(); i++) {
611      composeDataRequirementDateFilterComponent(t, "DataRequirement", "dateFilter", element.getDateFilter().get(i), i);
612    }
613    for (int i = 0; i < element.getValueFilter().size(); i++) {
614      composeDataRequirementValueFilterComponent(t, "DataRequirement", "valueFilter", element.getValueFilter().get(i), i);
615    }
616    if (element.hasLimitElement()) {
617      composePositiveInt(t, "DataRequirement", "limit", element.getLimitElement(), -1);
618    }
619    for (int i = 0; i < element.getSort().size(); i++) {
620      composeDataRequirementSortComponent(t, "DataRequirement", "sort", element.getSort().get(i), i);
621    }
622  }
623
624  protected void composeDataRequirementCodeFilterComponent(Complex parent, String parentType, String name, DataRequirement.DataRequirementCodeFilterComponent element, int index) {
625    if (element == null) 
626      return;
627    Complex t;
628    if (Utilities.noString(parentType))
629      t = parent;
630    else {
631      t = parent.predicate("fhir:"+parentType+'.'+name);
632    }
633    composeElement(t, "codeFilter", name, element, index);
634    if (element.hasPathElement()) {
635      composeString(t, "DataRequirementCodeFilterComponent", "path", element.getPathElement(), -1);
636    }
637    if (element.hasSearchParamElement()) {
638      composeString(t, "DataRequirementCodeFilterComponent", "searchParam", element.getSearchParamElement(), -1);
639    }
640    if (element.hasValueSetElement()) {
641      composeCanonical(t, "DataRequirementCodeFilterComponent", "valueSet", element.getValueSetElement(), -1);
642    }
643    for (int i = 0; i < element.getCode().size(); i++) {
644      composeCoding(t, "DataRequirementCodeFilterComponent", "code", element.getCode().get(i), i);
645    }
646  }
647
648  protected void composeDataRequirementDateFilterComponent(Complex parent, String parentType, String name, DataRequirement.DataRequirementDateFilterComponent element, int index) {
649    if (element == null) 
650      return;
651    Complex t;
652    if (Utilities.noString(parentType))
653      t = parent;
654    else {
655      t = parent.predicate("fhir:"+parentType+'.'+name);
656    }
657    composeElement(t, "dateFilter", name, element, index);
658    if (element.hasPathElement()) {
659      composeString(t, "DataRequirementDateFilterComponent", "path", element.getPathElement(), -1);
660    }
661    if (element.hasSearchParamElement()) {
662      composeString(t, "DataRequirementDateFilterComponent", "searchParam", element.getSearchParamElement(), -1);
663    }
664    if (element.hasValue()) {
665      composeType(t, "DataRequirementDateFilterComponent", "value", element.getValue(), -1);
666    }
667  }
668
669  protected void composeDataRequirementValueFilterComponent(Complex parent, String parentType, String name, DataRequirement.DataRequirementValueFilterComponent element, int index) {
670    if (element == null) 
671      return;
672    Complex t;
673    if (Utilities.noString(parentType))
674      t = parent;
675    else {
676      t = parent.predicate("fhir:"+parentType+'.'+name);
677    }
678    composeElement(t, "valueFilter", name, element, index);
679    if (element.hasPathElement()) {
680      composeString(t, "DataRequirementValueFilterComponent", "path", element.getPathElement(), -1);
681    }
682    if (element.hasSearchParamElement()) {
683      composeString(t, "DataRequirementValueFilterComponent", "searchParam", element.getSearchParamElement(), -1);
684    }
685    if (element.hasComparatorElement()) {
686      composeEnum(t, "DataRequirementValueFilterComponent", "comparator", element.getComparatorElement(), -1);
687    }
688    if (element.hasValue()) {
689      composeType(t, "DataRequirementValueFilterComponent", "value", element.getValue(), -1);
690    }
691  }
692
693  protected void composeDataRequirementSortComponent(Complex parent, String parentType, String name, DataRequirement.DataRequirementSortComponent element, int index) {
694    if (element == null) 
695      return;
696    Complex t;
697    if (Utilities.noString(parentType))
698      t = parent;
699    else {
700      t = parent.predicate("fhir:"+parentType+'.'+name);
701    }
702    composeElement(t, "sort", name, element, index);
703    if (element.hasPathElement()) {
704      composeString(t, "DataRequirementSortComponent", "path", element.getPathElement(), -1);
705    }
706    if (element.hasDirectionElement()) {
707      composeEnum(t, "DataRequirementSortComponent", "direction", element.getDirectionElement(), -1);
708    }
709  }
710
711  protected void composeDistance(Complex parent, String parentType, String name, Distance element, int index) {
712    if (element == null) 
713      return;
714    Complex t;
715    if (Utilities.noString(parentType))
716      t = parent;
717    else {
718      t = parent.predicate("fhir:"+parentType+'.'+name);
719    }
720    composeQuantity(t, "Distance", name, element, index);
721  }
722
723  protected void composeDosage(Complex parent, String parentType, String name, Dosage element, int index) {
724    if (element == null) 
725      return;
726    Complex t;
727    if (Utilities.noString(parentType))
728      t = parent;
729    else {
730      t = parent.predicate("fhir:"+parentType+'.'+name);
731    }
732    composeBackboneType(t, "Dosage", name, element, index);
733    if (element.hasSequenceElement()) {
734      composeInteger(t, "Dosage", "sequence", element.getSequenceElement(), -1);
735    }
736    if (element.hasTextElement()) {
737      composeString(t, "Dosage", "text", element.getTextElement(), -1);
738    }
739    for (int i = 0; i < element.getAdditionalInstruction().size(); i++) {
740      composeCodeableConcept(t, "Dosage", "additionalInstruction", element.getAdditionalInstruction().get(i), i);
741    }
742    if (element.hasPatientInstructionElement()) {
743      composeString(t, "Dosage", "patientInstruction", element.getPatientInstructionElement(), -1);
744    }
745    if (element.hasTiming()) {
746      composeTiming(t, "Dosage", "timing", element.getTiming(), -1);
747    }
748    if (element.hasAsNeededElement()) {
749      composeBoolean(t, "Dosage", "asNeeded", element.getAsNeededElement(), -1);
750    }
751    for (int i = 0; i < element.getAsNeededFor().size(); i++) {
752      composeCodeableConcept(t, "Dosage", "asNeededFor", element.getAsNeededFor().get(i), i);
753    }
754    if (element.hasSite()) {
755      composeCodeableConcept(t, "Dosage", "site", element.getSite(), -1);
756    }
757    if (element.hasRoute()) {
758      composeCodeableConcept(t, "Dosage", "route", element.getRoute(), -1);
759    }
760    if (element.hasMethod()) {
761      composeCodeableConcept(t, "Dosage", "method", element.getMethod(), -1);
762    }
763    for (int i = 0; i < element.getDoseAndRate().size(); i++) {
764      composeDosageDoseAndRateComponent(t, "Dosage", "doseAndRate", element.getDoseAndRate().get(i), i);
765    }
766    for (int i = 0; i < element.getMaxDosePerPeriod().size(); i++) {
767      composeRatio(t, "Dosage", "maxDosePerPeriod", element.getMaxDosePerPeriod().get(i), i);
768    }
769    if (element.hasMaxDosePerAdministration()) {
770      composeQuantity(t, "Dosage", "maxDosePerAdministration", element.getMaxDosePerAdministration(), -1);
771    }
772    if (element.hasMaxDosePerLifetime()) {
773      composeQuantity(t, "Dosage", "maxDosePerLifetime", element.getMaxDosePerLifetime(), -1);
774    }
775  }
776
777  protected void composeDosageDoseAndRateComponent(Complex parent, String parentType, String name, Dosage.DosageDoseAndRateComponent element, int index) {
778    if (element == null) 
779      return;
780    Complex t;
781    if (Utilities.noString(parentType))
782      t = parent;
783    else {
784      t = parent.predicate("fhir:"+parentType+'.'+name);
785    }
786    composeElement(t, "doseAndRate", name, element, index);
787    if (element.hasType()) {
788      composeCodeableConcept(t, "DosageDoseAndRateComponent", "type", element.getType(), -1);
789    }
790    if (element.hasDose()) {
791      composeType(t, "DosageDoseAndRateComponent", "dose", element.getDose(), -1);
792    }
793    if (element.hasRate()) {
794      composeType(t, "DosageDoseAndRateComponent", "rate", element.getRate(), -1);
795    }
796  }
797
798  protected void composeDuration(Complex parent, String parentType, String name, Duration element, int index) {
799    if (element == null) 
800      return;
801    Complex t;
802    if (Utilities.noString(parentType))
803      t = parent;
804    else {
805      t = parent.predicate("fhir:"+parentType+'.'+name);
806    }
807    composeQuantity(t, "Duration", name, element, index);
808  }
809
810  protected void composeElementDefinition(Complex parent, String parentType, String name, ElementDefinition element, int index) {
811    if (element == null) 
812      return;
813    Complex t;
814    if (Utilities.noString(parentType))
815      t = parent;
816    else {
817      t = parent.predicate("fhir:"+parentType+'.'+name);
818    }
819    composeBackboneType(t, "ElementDefinition", name, element, index);
820    if (element.hasPathElement()) {
821      composeString(t, "ElementDefinition", "path", element.getPathElement(), -1);
822    }
823    for (int i = 0; i < element.getRepresentation().size(); i++) {
824      composeEnum(t, "ElementDefinition", "representation", element.getRepresentation().get(i), i);
825    }
826    if (element.hasSliceNameElement()) {
827      composeString(t, "ElementDefinition", "sliceName", element.getSliceNameElement(), -1);
828    }
829    if (element.hasSliceIsConstrainingElement()) {
830      composeBoolean(t, "ElementDefinition", "sliceIsConstraining", element.getSliceIsConstrainingElement(), -1);
831    }
832    if (element.hasLabelElement()) {
833      composeString(t, "ElementDefinition", "label", element.getLabelElement(), -1);
834    }
835    for (int i = 0; i < element.getCode().size(); i++) {
836      composeCoding(t, "ElementDefinition", "code", element.getCode().get(i), i);
837    }
838    if (element.hasSlicing()) {
839      composeElementDefinitionSlicingComponent(t, "ElementDefinition", "slicing", element.getSlicing(), -1);
840    }
841    if (element.hasShortElement()) {
842      composeString(t, "ElementDefinition", "short", element.getShortElement(), -1);
843    }
844    if (element.hasDefinitionElement()) {
845      composeMarkdown(t, "ElementDefinition", "definition", element.getDefinitionElement(), -1);
846    }
847    if (element.hasCommentElement()) {
848      composeMarkdown(t, "ElementDefinition", "comment", element.getCommentElement(), -1);
849    }
850    if (element.hasRequirementsElement()) {
851      composeMarkdown(t, "ElementDefinition", "requirements", element.getRequirementsElement(), -1);
852    }
853    for (int i = 0; i < element.getAlias().size(); i++) {
854      composeString(t, "ElementDefinition", "alias", element.getAlias().get(i), i);
855    }
856    if (element.hasMinElement()) {
857      composeUnsignedInt(t, "ElementDefinition", "min", element.getMinElement(), -1);
858    }
859    if (element.hasMaxElement()) {
860      composeString(t, "ElementDefinition", "max", element.getMaxElement(), -1);
861    }
862    if (element.hasBase()) {
863      composeElementDefinitionBaseComponent(t, "ElementDefinition", "base", element.getBase(), -1);
864    }
865    if (element.hasContentReferenceElement()) {
866      composeUri(t, "ElementDefinition", "contentReference", element.getContentReferenceElement(), -1);
867    }
868    for (int i = 0; i < element.getType().size(); i++) {
869      composeElementDefinitionTypeRefComponent(t, "ElementDefinition", "type", element.getType().get(i), i);
870    }
871    if (element.hasDefaultValue()) {
872      composeType(t, "ElementDefinition", "defaultValue", element.getDefaultValue(), -1);
873    }
874    if (element.hasMeaningWhenMissingElement()) {
875      composeMarkdown(t, "ElementDefinition", "meaningWhenMissing", element.getMeaningWhenMissingElement(), -1);
876    }
877    if (element.hasOrderMeaningElement()) {
878      composeString(t, "ElementDefinition", "orderMeaning", element.getOrderMeaningElement(), -1);
879    }
880    if (element.hasFixed()) {
881      composeType(t, "ElementDefinition", "fixed", element.getFixed(), -1);
882    }
883    if (element.hasPattern()) {
884      composeType(t, "ElementDefinition", "pattern", element.getPattern(), -1);
885    }
886    for (int i = 0; i < element.getExample().size(); i++) {
887      composeElementDefinitionExampleComponent(t, "ElementDefinition", "example", element.getExample().get(i), i);
888    }
889    if (element.hasMinValue()) {
890      composeType(t, "ElementDefinition", "minValue", element.getMinValue(), -1);
891    }
892    if (element.hasMaxValue()) {
893      composeType(t, "ElementDefinition", "maxValue", element.getMaxValue(), -1);
894    }
895    if (element.hasMaxLengthElement()) {
896      composeInteger(t, "ElementDefinition", "maxLength", element.getMaxLengthElement(), -1);
897    }
898    for (int i = 0; i < element.getCondition().size(); i++) {
899      composeId(t, "ElementDefinition", "condition", element.getCondition().get(i), i);
900    }
901    for (int i = 0; i < element.getConstraint().size(); i++) {
902      composeElementDefinitionConstraintComponent(t, "ElementDefinition", "constraint", element.getConstraint().get(i), i);
903    }
904    if (element.hasMustHaveValueElement()) {
905      composeBoolean(t, "ElementDefinition", "mustHaveValue", element.getMustHaveValueElement(), -1);
906    }
907    for (int i = 0; i < element.getValueAlternatives().size(); i++) {
908      composeCanonical(t, "ElementDefinition", "valueAlternatives", element.getValueAlternatives().get(i), i);
909    }
910    if (element.hasMustSupportElement()) {
911      composeBoolean(t, "ElementDefinition", "mustSupport", element.getMustSupportElement(), -1);
912    }
913    for (int i = 0; i < element.getObligation().size(); i++) {
914      composeElementDefinitionObligationComponent(t, "ElementDefinition", "obligation", element.getObligation().get(i), i);
915    }
916    if (element.hasIsModifierElement()) {
917      composeBoolean(t, "ElementDefinition", "isModifier", element.getIsModifierElement(), -1);
918    }
919    if (element.hasIsModifierReasonElement()) {
920      composeString(t, "ElementDefinition", "isModifierReason", element.getIsModifierReasonElement(), -1);
921    }
922    if (element.hasIsSummaryElement()) {
923      composeBoolean(t, "ElementDefinition", "isSummary", element.getIsSummaryElement(), -1);
924    }
925    if (element.hasBinding()) {
926      composeElementDefinitionBindingComponent(t, "ElementDefinition", "binding", element.getBinding(), -1);
927    }
928    for (int i = 0; i < element.getMapping().size(); i++) {
929      composeElementDefinitionMappingComponent(t, "ElementDefinition", "mapping", element.getMapping().get(i), i);
930    }
931  }
932
933  protected void composeElementDefinitionSlicingComponent(Complex parent, String parentType, String name, ElementDefinition.ElementDefinitionSlicingComponent element, int index) {
934    if (element == null) 
935      return;
936    Complex t;
937    if (Utilities.noString(parentType))
938      t = parent;
939    else {
940      t = parent.predicate("fhir:"+parentType+'.'+name);
941    }
942    composeElement(t, "slicing", name, element, index);
943    for (int i = 0; i < element.getDiscriminator().size(); i++) {
944      composeElementDefinitionSlicingDiscriminatorComponent(t, "ElementDefinitionSlicingComponent", "discriminator", element.getDiscriminator().get(i), i);
945    }
946    if (element.hasDescriptionElement()) {
947      composeString(t, "ElementDefinitionSlicingComponent", "description", element.getDescriptionElement(), -1);
948    }
949    if (element.hasOrderedElement()) {
950      composeBoolean(t, "ElementDefinitionSlicingComponent", "ordered", element.getOrderedElement(), -1);
951    }
952    if (element.hasRulesElement()) {
953      composeEnum(t, "ElementDefinitionSlicingComponent", "rules", element.getRulesElement(), -1);
954    }
955  }
956
957  protected void composeElementDefinitionSlicingDiscriminatorComponent(Complex parent, String parentType, String name, ElementDefinition.ElementDefinitionSlicingDiscriminatorComponent element, int index) {
958    if (element == null) 
959      return;
960    Complex t;
961    if (Utilities.noString(parentType))
962      t = parent;
963    else {
964      t = parent.predicate("fhir:"+parentType+'.'+name);
965    }
966    composeElement(t, "discriminator", name, element, index);
967    if (element.hasTypeElement()) {
968      composeEnum(t, "ElementDefinitionSlicingDiscriminatorComponent", "type", element.getTypeElement(), -1);
969    }
970    if (element.hasPathElement()) {
971      composeString(t, "ElementDefinitionSlicingDiscriminatorComponent", "path", element.getPathElement(), -1);
972    }
973  }
974
975  protected void composeElementDefinitionBaseComponent(Complex parent, String parentType, String name, ElementDefinition.ElementDefinitionBaseComponent element, int index) {
976    if (element == null) 
977      return;
978    Complex t;
979    if (Utilities.noString(parentType))
980      t = parent;
981    else {
982      t = parent.predicate("fhir:"+parentType+'.'+name);
983    }
984    composeElement(t, "base", name, element, index);
985    if (element.hasPathElement()) {
986      composeString(t, "ElementDefinitionBaseComponent", "path", element.getPathElement(), -1);
987    }
988    if (element.hasMinElement()) {
989      composeUnsignedInt(t, "ElementDefinitionBaseComponent", "min", element.getMinElement(), -1);
990    }
991    if (element.hasMaxElement()) {
992      composeString(t, "ElementDefinitionBaseComponent", "max", element.getMaxElement(), -1);
993    }
994  }
995
996  protected void composeElementDefinitionTypeRefComponent(Complex parent, String parentType, String name, ElementDefinition.TypeRefComponent element, int index) {
997    if (element == null) 
998      return;
999    Complex t;
1000    if (Utilities.noString(parentType))
1001      t = parent;
1002    else {
1003      t = parent.predicate("fhir:"+parentType+'.'+name);
1004    }
1005    composeElement(t, "type", name, element, index);
1006    if (element.hasCodeElement()) {
1007      composeUri(t, "TypeRefComponent", "code", element.getCodeElement(), -1);
1008    }
1009    for (int i = 0; i < element.getProfile().size(); i++) {
1010      composeCanonical(t, "TypeRefComponent", "profile", element.getProfile().get(i), i);
1011    }
1012    for (int i = 0; i < element.getTargetProfile().size(); i++) {
1013      composeCanonical(t, "TypeRefComponent", "targetProfile", element.getTargetProfile().get(i), i);
1014    }
1015    for (int i = 0; i < element.getAggregation().size(); i++) {
1016      composeEnum(t, "TypeRefComponent", "aggregation", element.getAggregation().get(i), i);
1017    }
1018    if (element.hasVersioningElement()) {
1019      composeEnum(t, "TypeRefComponent", "versioning", element.getVersioningElement(), -1);
1020    }
1021  }
1022
1023  protected void composeElementDefinitionExampleComponent(Complex parent, String parentType, String name, ElementDefinition.ElementDefinitionExampleComponent element, int index) {
1024    if (element == null) 
1025      return;
1026    Complex t;
1027    if (Utilities.noString(parentType))
1028      t = parent;
1029    else {
1030      t = parent.predicate("fhir:"+parentType+'.'+name);
1031    }
1032    composeElement(t, "example", name, element, index);
1033    if (element.hasLabelElement()) {
1034      composeString(t, "ElementDefinitionExampleComponent", "label", element.getLabelElement(), -1);
1035    }
1036    if (element.hasValue()) {
1037      composeType(t, "ElementDefinitionExampleComponent", "value", element.getValue(), -1);
1038    }
1039  }
1040
1041  protected void composeElementDefinitionConstraintComponent(Complex parent, String parentType, String name, ElementDefinition.ElementDefinitionConstraintComponent element, int index) {
1042    if (element == null) 
1043      return;
1044    Complex t;
1045    if (Utilities.noString(parentType))
1046      t = parent;
1047    else {
1048      t = parent.predicate("fhir:"+parentType+'.'+name);
1049    }
1050    composeElement(t, "constraint", name, element, index);
1051    if (element.hasKeyElement()) {
1052      composeId(t, "ElementDefinitionConstraintComponent", "key", element.getKeyElement(), -1);
1053    }
1054    if (element.hasRequirementsElement()) {
1055      composeMarkdown(t, "ElementDefinitionConstraintComponent", "requirements", element.getRequirementsElement(), -1);
1056    }
1057    if (element.hasSeverityElement()) {
1058      composeEnum(t, "ElementDefinitionConstraintComponent", "severity", element.getSeverityElement(), -1);
1059    }
1060    if (element.hasSuppressElement()) {
1061      composeBoolean(t, "ElementDefinitionConstraintComponent", "suppress", element.getSuppressElement(), -1);
1062    }
1063    if (element.hasHumanElement()) {
1064      composeString(t, "ElementDefinitionConstraintComponent", "human", element.getHumanElement(), -1);
1065    }
1066    if (element.hasExpressionElement()) {
1067      composeString(t, "ElementDefinitionConstraintComponent", "expression", element.getExpressionElement(), -1);
1068    }
1069    if (element.hasSourceElement()) {
1070      composeCanonical(t, "ElementDefinitionConstraintComponent", "source", element.getSourceElement(), -1);
1071    }
1072  }
1073
1074  protected void composeElementDefinitionObligationComponent(Complex parent, String parentType, String name, ElementDefinition.ElementDefinitionObligationComponent element, int index) {
1075    if (element == null) 
1076      return;
1077    Complex t;
1078    if (Utilities.noString(parentType))
1079      t = parent;
1080    else {
1081      t = parent.predicate("fhir:"+parentType+'.'+name);
1082    }
1083    composeElement(t, "obligation", name, element, index);
1084    if (element.hasCode()) {
1085      composeCoding(t, "ElementDefinitionObligationComponent", "code", element.getCode(), -1);
1086    }
1087    for (int i = 0; i < element.getActor().size(); i++) {
1088      composeCanonical(t, "ElementDefinitionObligationComponent", "actor", element.getActor().get(i), i);
1089    }
1090    if (element.hasDocumentationElement()) {
1091      composeMarkdown(t, "ElementDefinitionObligationComponent", "documentation", element.getDocumentationElement(), -1);
1092    }
1093    for (int i = 0; i < element.getUsage().size(); i++) {
1094      composeUsageContext(t, "ElementDefinitionObligationComponent", "usage", element.getUsage().get(i), i);
1095    }
1096    if (element.hasFilterElement()) {
1097      composeString(t, "ElementDefinitionObligationComponent", "filter", element.getFilterElement(), -1);
1098    }
1099    if (element.hasFilterDocumentationElement()) {
1100      composeString(t, "ElementDefinitionObligationComponent", "filterDocumentation", element.getFilterDocumentationElement(), -1);
1101    }
1102    for (int i = 0; i < element.getProcess().size(); i++) {
1103      composeUri(t, "ElementDefinitionObligationComponent", "process", element.getProcess().get(i), i);
1104    }
1105  }
1106
1107  protected void composeElementDefinitionBindingComponent(Complex parent, String parentType, String name, ElementDefinition.ElementDefinitionBindingComponent element, int index) {
1108    if (element == null) 
1109      return;
1110    Complex t;
1111    if (Utilities.noString(parentType))
1112      t = parent;
1113    else {
1114      t = parent.predicate("fhir:"+parentType+'.'+name);
1115    }
1116    composeElement(t, "binding", name, element, index);
1117    if (element.hasStrengthElement()) {
1118      composeEnum(t, "ElementDefinitionBindingComponent", "strength", element.getStrengthElement(), -1);
1119    }
1120    if (element.hasDescriptionElement()) {
1121      composeMarkdown(t, "ElementDefinitionBindingComponent", "description", element.getDescriptionElement(), -1);
1122    }
1123    if (element.hasValueSetElement()) {
1124      composeCanonical(t, "ElementDefinitionBindingComponent", "valueSet", element.getValueSetElement(), -1);
1125    }
1126    for (int i = 0; i < element.getAdditional().size(); i++) {
1127      composeElementDefinitionBindingAdditionalComponent(t, "ElementDefinitionBindingComponent", "additional", element.getAdditional().get(i), i);
1128    }
1129  }
1130
1131  protected void composeElementDefinitionBindingAdditionalComponent(Complex parent, String parentType, String name, ElementDefinition.ElementDefinitionBindingAdditionalComponent element, int index) {
1132    if (element == null) 
1133      return;
1134    Complex t;
1135    if (Utilities.noString(parentType))
1136      t = parent;
1137    else {
1138      t = parent.predicate("fhir:"+parentType+'.'+name);
1139    }
1140    composeElement(t, "additional", name, element, index);
1141    if (element.hasPurposeElement()) {
1142      composeEnum(t, "ElementDefinitionBindingAdditionalComponent", "purpose", element.getPurposeElement(), -1);
1143    }
1144    if (element.hasValueSetElement()) {
1145      composeCanonical(t, "ElementDefinitionBindingAdditionalComponent", "valueSet", element.getValueSetElement(), -1);
1146    }
1147    if (element.hasDocumentationElement()) {
1148      composeMarkdown(t, "ElementDefinitionBindingAdditionalComponent", "documentation", element.getDocumentationElement(), -1);
1149    }
1150    if (element.hasShortDocoElement()) {
1151      composeString(t, "ElementDefinitionBindingAdditionalComponent", "shortDoco", element.getShortDocoElement(), -1);
1152    }
1153    for (int i = 0; i < element.getUsage().size(); i++) {
1154      composeUsageContext(t, "ElementDefinitionBindingAdditionalComponent", "usage", element.getUsage().get(i), i);
1155    }
1156    if (element.hasAnyElement()) {
1157      composeBoolean(t, "ElementDefinitionBindingAdditionalComponent", "any", element.getAnyElement(), -1);
1158    }
1159  }
1160
1161  protected void composeElementDefinitionMappingComponent(Complex parent, String parentType, String name, ElementDefinition.ElementDefinitionMappingComponent element, int index) {
1162    if (element == null) 
1163      return;
1164    Complex t;
1165    if (Utilities.noString(parentType))
1166      t = parent;
1167    else {
1168      t = parent.predicate("fhir:"+parentType+'.'+name);
1169    }
1170    composeElement(t, "mapping", name, element, index);
1171    if (element.hasIdentityElement()) {
1172      composeId(t, "ElementDefinitionMappingComponent", "identity", element.getIdentityElement(), -1);
1173    }
1174    if (element.hasLanguageElement()) {
1175      composeCode(t, "ElementDefinitionMappingComponent", "language", element.getLanguageElement(), -1);
1176    }
1177    if (element.hasMapElement()) {
1178      composeString(t, "ElementDefinitionMappingComponent", "map", element.getMapElement(), -1);
1179    }
1180    if (element.hasCommentElement()) {
1181      composeMarkdown(t, "ElementDefinitionMappingComponent", "comment", element.getCommentElement(), -1);
1182    }
1183  }
1184
1185  protected void composeExpression(Complex parent, String parentType, String name, Expression element, int index) {
1186    if (element == null) 
1187      return;
1188    Complex t;
1189    if (Utilities.noString(parentType))
1190      t = parent;
1191    else {
1192      t = parent.predicate("fhir:"+parentType+'.'+name);
1193    }
1194    composeDataType(t, "Expression", name, element, index);
1195    if (element.hasDescriptionElement()) {
1196      composeString(t, "Expression", "description", element.getDescriptionElement(), -1);
1197    }
1198    if (element.hasNameElement()) {
1199      composeId(t, "Expression", "name", element.getNameElement(), -1);
1200    }
1201    if (element.hasLanguageElement()) {
1202      composeCode(t, "Expression", "language", element.getLanguageElement(), -1);
1203    }
1204    if (element.hasExpressionElement()) {
1205      composeString(t, "Expression", "expression", element.getExpressionElement(), -1);
1206    }
1207    if (element.hasReferenceElement()) {
1208      composeUri(t, "Expression", "reference", element.getReferenceElement(), -1);
1209    }
1210  }
1211
1212  protected void composeExtendedContactDetail(Complex parent, String parentType, String name, ExtendedContactDetail element, int index) {
1213    if (element == null) 
1214      return;
1215    Complex t;
1216    if (Utilities.noString(parentType))
1217      t = parent;
1218    else {
1219      t = parent.predicate("fhir:"+parentType+'.'+name);
1220    }
1221    composeDataType(t, "ExtendedContactDetail", name, element, index);
1222    if (element.hasPurpose()) {
1223      composeCodeableConcept(t, "ExtendedContactDetail", "purpose", element.getPurpose(), -1);
1224    }
1225    for (int i = 0; i < element.getName().size(); i++) {
1226      composeHumanName(t, "ExtendedContactDetail", "name", element.getName().get(i), i);
1227    }
1228    for (int i = 0; i < element.getTelecom().size(); i++) {
1229      composeContactPoint(t, "ExtendedContactDetail", "telecom", element.getTelecom().get(i), i);
1230    }
1231    if (element.hasAddress()) {
1232      composeAddress(t, "ExtendedContactDetail", "address", element.getAddress(), -1);
1233    }
1234    if (element.hasOrganization()) {
1235      composeReference(t, "ExtendedContactDetail", "organization", element.getOrganization(), -1);
1236    }
1237    if (element.hasPeriod()) {
1238      composePeriod(t, "ExtendedContactDetail", "period", element.getPeriod(), -1);
1239    }
1240  }
1241
1242  protected void composeExtension(Complex parent, String parentType, String name, Extension element, int index) {
1243    if (element == null) 
1244      return;
1245    Complex t;
1246    if (Utilities.noString(parentType))
1247      t = parent;
1248    else {
1249      t = parent.predicate("fhir:"+parentType+'.'+name);
1250    }
1251    composeDataType(t, "Extension", name, element, index);
1252    if (element.hasUrlElement()) {
1253      composeUri(t, "Extension", "url", element.getUrlElement(), -1);
1254    }
1255    if (element.hasValue()) {
1256      composeType(t, "Extension", "value", element.getValue(), -1);
1257    }
1258  }
1259
1260  protected void composeHumanName(Complex parent, String parentType, String name, HumanName element, int index) {
1261    if (element == null) 
1262      return;
1263    Complex t;
1264    if (Utilities.noString(parentType))
1265      t = parent;
1266    else {
1267      t = parent.predicate("fhir:"+parentType+'.'+name);
1268    }
1269    composeDataType(t, "HumanName", name, element, index);
1270    if (element.hasUseElement()) {
1271      composeEnum(t, "HumanName", "use", element.getUseElement(), -1);
1272    }
1273    if (element.hasTextElement()) {
1274      composeString(t, "HumanName", "text", element.getTextElement(), -1);
1275    }
1276    if (element.hasFamilyElement()) {
1277      composeString(t, "HumanName", "family", element.getFamilyElement(), -1);
1278    }
1279    for (int i = 0; i < element.getGiven().size(); i++) {
1280      composeString(t, "HumanName", "given", element.getGiven().get(i), i);
1281    }
1282    for (int i = 0; i < element.getPrefix().size(); i++) {
1283      composeString(t, "HumanName", "prefix", element.getPrefix().get(i), i);
1284    }
1285    for (int i = 0; i < element.getSuffix().size(); i++) {
1286      composeString(t, "HumanName", "suffix", element.getSuffix().get(i), i);
1287    }
1288    if (element.hasPeriod()) {
1289      composePeriod(t, "HumanName", "period", element.getPeriod(), -1);
1290    }
1291  }
1292
1293  protected void composeIdentifier(Complex parent, String parentType, String name, Identifier element, int index) {
1294    if (element == null) 
1295      return;
1296    Complex t;
1297    if (Utilities.noString(parentType))
1298      t = parent;
1299    else {
1300      t = parent.predicate("fhir:"+parentType+'.'+name);
1301    }
1302    composeDataType(t, "Identifier", name, element, index);
1303    if (element.hasUseElement()) {
1304      composeEnum(t, "Identifier", "use", element.getUseElement(), -1);
1305    }
1306    if (element.hasType()) {
1307      composeCodeableConcept(t, "Identifier", "type", element.getType(), -1);
1308    }
1309    if (element.hasSystemElement()) {
1310      composeUri(t, "Identifier", "system", element.getSystemElement(), -1);
1311    }
1312    if (element.hasValueElement()) {
1313      composeString(t, "Identifier", "value", element.getValueElement(), -1);
1314    }
1315    if (element.hasPeriod()) {
1316      composePeriod(t, "Identifier", "period", element.getPeriod(), -1);
1317    }
1318    if (element.hasAssigner()) {
1319      composeReference(t, "Identifier", "assigner", element.getAssigner(), -1);
1320    }
1321  }
1322
1323  protected void composeMarketingStatus(Complex parent, String parentType, String name, MarketingStatus element, int index) {
1324    if (element == null) 
1325      return;
1326    Complex t;
1327    if (Utilities.noString(parentType))
1328      t = parent;
1329    else {
1330      t = parent.predicate("fhir:"+parentType+'.'+name);
1331    }
1332    composeBackboneType(t, "MarketingStatus", name, element, index);
1333    if (element.hasCountry()) {
1334      composeCodeableConcept(t, "MarketingStatus", "country", element.getCountry(), -1);
1335    }
1336    if (element.hasJurisdiction()) {
1337      composeCodeableConcept(t, "MarketingStatus", "jurisdiction", element.getJurisdiction(), -1);
1338    }
1339    if (element.hasStatus()) {
1340      composeCodeableConcept(t, "MarketingStatus", "status", element.getStatus(), -1);
1341    }
1342    if (element.hasDateRange()) {
1343      composePeriod(t, "MarketingStatus", "dateRange", element.getDateRange(), -1);
1344    }
1345    if (element.hasRestoreDateElement()) {
1346      composeDateTime(t, "MarketingStatus", "restoreDate", element.getRestoreDateElement(), -1);
1347    }
1348  }
1349
1350  protected void composeMeta(Complex parent, String parentType, String name, Meta element, int index) {
1351    if (element == null) 
1352      return;
1353    Complex t;
1354    if (Utilities.noString(parentType))
1355      t = parent;
1356    else {
1357      t = parent.predicate("fhir:"+parentType+'.'+name);
1358    }
1359    composeDataType(t, "Meta", name, element, index);
1360    if (element.hasVersionIdElement()) {
1361      composeId(t, "Meta", "versionId", element.getVersionIdElement(), -1);
1362    }
1363    if (element.hasLastUpdatedElement()) {
1364      composeInstant(t, "Meta", "lastUpdated", element.getLastUpdatedElement(), -1);
1365    }
1366    if (element.hasSourceElement()) {
1367      composeUri(t, "Meta", "source", element.getSourceElement(), -1);
1368    }
1369    for (int i = 0; i < element.getProfile().size(); i++) {
1370      composeCanonical(t, "Meta", "profile", element.getProfile().get(i), i);
1371    }
1372    for (int i = 0; i < element.getSecurity().size(); i++) {
1373      composeCoding(t, "Meta", "security", element.getSecurity().get(i), i);
1374    }
1375    for (int i = 0; i < element.getTag().size(); i++) {
1376      composeCoding(t, "Meta", "tag", element.getTag().get(i), i);
1377    }
1378  }
1379
1380  protected void composeMonetaryComponent(Complex parent, String parentType, String name, MonetaryComponent element, int index) {
1381    if (element == null) 
1382      return;
1383    Complex t;
1384    if (Utilities.noString(parentType))
1385      t = parent;
1386    else {
1387      t = parent.predicate("fhir:"+parentType+'.'+name);
1388    }
1389    composeDataType(t, "MonetaryComponent", name, element, index);
1390    if (element.hasTypeElement()) {
1391      composeEnum(t, "MonetaryComponent", "type", element.getTypeElement(), -1);
1392    }
1393    if (element.hasCode()) {
1394      composeCodeableConcept(t, "MonetaryComponent", "code", element.getCode(), -1);
1395    }
1396    if (element.hasFactorElement()) {
1397      composeDecimal(t, "MonetaryComponent", "factor", element.getFactorElement(), -1);
1398    }
1399    if (element.hasAmount()) {
1400      composeMoney(t, "MonetaryComponent", "amount", element.getAmount(), -1);
1401    }
1402  }
1403
1404  protected void composeMoney(Complex parent, String parentType, String name, Money element, int index) {
1405    if (element == null) 
1406      return;
1407    Complex t;
1408    if (Utilities.noString(parentType))
1409      t = parent;
1410    else {
1411      t = parent.predicate("fhir:"+parentType+'.'+name);
1412    }
1413    composeDataType(t, "Money", name, element, index);
1414    if (element.hasValueElement()) {
1415      composeDecimal(t, "Money", "value", element.getValueElement(), -1);
1416    }
1417    if (element.hasCurrencyElement()) {
1418      composeCode(t, "Money", "currency", element.getCurrencyElement(), -1);
1419    }
1420  }
1421
1422  protected void composeNarrative(Complex parent, String parentType, String name, Narrative element, int index) {
1423    if (element == null) 
1424      return;
1425    Complex t;
1426    if (Utilities.noString(parentType))
1427      t = parent;
1428    else {
1429      t = parent.predicate("fhir:"+parentType+'.'+name);
1430    }
1431    composeDataType(t, "Narrative", name, element, index);
1432    if (element.hasStatusElement()) {
1433      composeEnum(t, "Narrative", "status", element.getStatusElement(), -1);
1434    }
1435    if (element.hasDiv()) {
1436      composeXhtmlNode(t, "Narrative", "div", element.getDiv(), -1);
1437    }
1438  }
1439
1440  protected void composeParameterDefinition(Complex parent, String parentType, String name, ParameterDefinition element, int index) {
1441    if (element == null) 
1442      return;
1443    Complex t;
1444    if (Utilities.noString(parentType))
1445      t = parent;
1446    else {
1447      t = parent.predicate("fhir:"+parentType+'.'+name);
1448    }
1449    composeDataType(t, "ParameterDefinition", name, element, index);
1450    if (element.hasNameElement()) {
1451      composeCode(t, "ParameterDefinition", "name", element.getNameElement(), -1);
1452    }
1453    if (element.hasUseElement()) {
1454      composeEnum(t, "ParameterDefinition", "use", element.getUseElement(), -1);
1455    }
1456    if (element.hasMinElement()) {
1457      composeInteger(t, "ParameterDefinition", "min", element.getMinElement(), -1);
1458    }
1459    if (element.hasMaxElement()) {
1460      composeString(t, "ParameterDefinition", "max", element.getMaxElement(), -1);
1461    }
1462    if (element.hasDocumentationElement()) {
1463      composeString(t, "ParameterDefinition", "documentation", element.getDocumentationElement(), -1);
1464    }
1465    if (element.hasTypeElement()) {
1466      composeEnum(t, "ParameterDefinition", "type", element.getTypeElement(), -1);
1467    }
1468    if (element.hasProfileElement()) {
1469      composeCanonical(t, "ParameterDefinition", "profile", element.getProfileElement(), -1);
1470    }
1471  }
1472
1473  protected void composePeriod(Complex parent, String parentType, String name, Period element, int index) {
1474    if (element == null) 
1475      return;
1476    Complex t;
1477    if (Utilities.noString(parentType))
1478      t = parent;
1479    else {
1480      t = parent.predicate("fhir:"+parentType+'.'+name);
1481    }
1482    composeDataType(t, "Period", name, element, index);
1483    if (element.hasStartElement()) {
1484      composeDateTime(t, "Period", "start", element.getStartElement(), -1);
1485    }
1486    if (element.hasEndElement()) {
1487      composeDateTime(t, "Period", "end", element.getEndElement(), -1);
1488    }
1489  }
1490
1491  protected void composePopulation(Complex parent, String parentType, String name, Population element, int index) {
1492    if (element == null) 
1493      return;
1494    Complex t;
1495    if (Utilities.noString(parentType))
1496      t = parent;
1497    else {
1498      t = parent.predicate("fhir:"+parentType+'.'+name);
1499    }
1500    composeBackboneType(t, "Population", name, element, index);
1501    if (element.hasAge()) {
1502      composeType(t, "Population", "age", element.getAge(), -1);
1503    }
1504    if (element.hasGender()) {
1505      composeCodeableConcept(t, "Population", "gender", element.getGender(), -1);
1506    }
1507    if (element.hasRace()) {
1508      composeCodeableConcept(t, "Population", "race", element.getRace(), -1);
1509    }
1510    if (element.hasPhysiologicalCondition()) {
1511      composeCodeableConcept(t, "Population", "physiologicalCondition", element.getPhysiologicalCondition(), -1);
1512    }
1513  }
1514
1515  protected void composeProductShelfLife(Complex parent, String parentType, String name, ProductShelfLife element, int index) {
1516    if (element == null) 
1517      return;
1518    Complex t;
1519    if (Utilities.noString(parentType))
1520      t = parent;
1521    else {
1522      t = parent.predicate("fhir:"+parentType+'.'+name);
1523    }
1524    composeBackboneType(t, "ProductShelfLife", name, element, index);
1525    if (element.hasType()) {
1526      composeCodeableConcept(t, "ProductShelfLife", "type", element.getType(), -1);
1527    }
1528    if (element.hasPeriod()) {
1529      composeType(t, "ProductShelfLife", "period", element.getPeriod(), -1);
1530    }
1531    for (int i = 0; i < element.getSpecialPrecautionsForStorage().size(); i++) {
1532      composeCodeableConcept(t, "ProductShelfLife", "specialPrecautionsForStorage", element.getSpecialPrecautionsForStorage().get(i), i);
1533    }
1534  }
1535
1536  protected void composeQuantity(Complex parent, String parentType, String name, Quantity element, int index) {
1537    if (element == null) 
1538      return;
1539    Complex t;
1540    if (Utilities.noString(parentType))
1541      t = parent;
1542    else {
1543      t = parent.predicate("fhir:"+parentType+'.'+name);
1544    }
1545    composeDataType(t, "Quantity", name, element, index);
1546    if (element.hasValueElement()) {
1547      composeDecimal(t, "Quantity", "value", element.getValueElement(), -1);
1548    }
1549    if (element.hasComparatorElement()) {
1550      composeEnum(t, "Quantity", "comparator", element.getComparatorElement(), -1);
1551    }
1552    if (element.hasUnitElement()) {
1553      composeString(t, "Quantity", "unit", element.getUnitElement(), -1);
1554    }
1555    if (element.hasSystemElement()) {
1556      composeUri(t, "Quantity", "system", element.getSystemElement(), -1);
1557    }
1558    if (element.hasCodeElement()) {
1559      composeCode(t, "Quantity", "code", element.getCodeElement(), -1);
1560    }
1561  }
1562
1563  protected void composeRange(Complex parent, String parentType, String name, Range element, int index) {
1564    if (element == null) 
1565      return;
1566    Complex t;
1567    if (Utilities.noString(parentType))
1568      t = parent;
1569    else {
1570      t = parent.predicate("fhir:"+parentType+'.'+name);
1571    }
1572    composeDataType(t, "Range", name, element, index);
1573    if (element.hasLow()) {
1574      composeQuantity(t, "Range", "low", element.getLow(), -1);
1575    }
1576    if (element.hasHigh()) {
1577      composeQuantity(t, "Range", "high", element.getHigh(), -1);
1578    }
1579  }
1580
1581  protected void composeRatio(Complex parent, String parentType, String name, Ratio element, int index) {
1582    if (element == null) 
1583      return;
1584    Complex t;
1585    if (Utilities.noString(parentType))
1586      t = parent;
1587    else {
1588      t = parent.predicate("fhir:"+parentType+'.'+name);
1589    }
1590    composeDataType(t, "Ratio", name, element, index);
1591    if (element.hasNumerator()) {
1592      composeQuantity(t, "Ratio", "numerator", element.getNumerator(), -1);
1593    }
1594    if (element.hasDenominator()) {
1595      composeQuantity(t, "Ratio", "denominator", element.getDenominator(), -1);
1596    }
1597  }
1598
1599  protected void composeRatioRange(Complex parent, String parentType, String name, RatioRange element, int index) {
1600    if (element == null) 
1601      return;
1602    Complex t;
1603    if (Utilities.noString(parentType))
1604      t = parent;
1605    else {
1606      t = parent.predicate("fhir:"+parentType+'.'+name);
1607    }
1608    composeDataType(t, "RatioRange", name, element, index);
1609    if (element.hasLowNumerator()) {
1610      composeQuantity(t, "RatioRange", "lowNumerator", element.getLowNumerator(), -1);
1611    }
1612    if (element.hasHighNumerator()) {
1613      composeQuantity(t, "RatioRange", "highNumerator", element.getHighNumerator(), -1);
1614    }
1615    if (element.hasDenominator()) {
1616      composeQuantity(t, "RatioRange", "denominator", element.getDenominator(), -1);
1617    }
1618  }
1619
1620  protected void composeReference(Complex parent, String parentType, String name, Reference element, int index) {
1621    if (element == null) 
1622      return;
1623    Complex t;
1624    if (Utilities.noString(parentType))
1625      t = parent;
1626    else {
1627      t = parent.predicate("fhir:"+parentType+'.'+name);
1628    }
1629    composeDataType(t, "Reference", name, element, index);
1630    if (element.hasReferenceElement()) {
1631      composeString(t, "Reference", "reference", element.getReferenceElement_(), -1);
1632    }
1633    if (element.hasTypeElement()) {
1634      composeUri(t, "Reference", "type", element.getTypeElement(), -1);
1635    }
1636    if (element.hasIdentifier()) {
1637      composeIdentifier(t, "Reference", "identifier", element.getIdentifier(), -1);
1638    }
1639    if (element.hasDisplayElement()) {
1640      composeString(t, "Reference", "display", element.getDisplayElement(), -1);
1641    }
1642  }
1643
1644  protected void composeRelatedArtifact(Complex parent, String parentType, String name, RelatedArtifact element, int index) {
1645    if (element == null) 
1646      return;
1647    Complex t;
1648    if (Utilities.noString(parentType))
1649      t = parent;
1650    else {
1651      t = parent.predicate("fhir:"+parentType+'.'+name);
1652    }
1653    composeDataType(t, "RelatedArtifact", name, element, index);
1654    if (element.hasTypeElement()) {
1655      composeEnum(t, "RelatedArtifact", "type", element.getTypeElement(), -1);
1656    }
1657    for (int i = 0; i < element.getClassifier().size(); i++) {
1658      composeCodeableConcept(t, "RelatedArtifact", "classifier", element.getClassifier().get(i), i);
1659    }
1660    if (element.hasLabelElement()) {
1661      composeString(t, "RelatedArtifact", "label", element.getLabelElement(), -1);
1662    }
1663    if (element.hasDisplayElement()) {
1664      composeString(t, "RelatedArtifact", "display", element.getDisplayElement(), -1);
1665    }
1666    if (element.hasCitationElement()) {
1667      composeMarkdown(t, "RelatedArtifact", "citation", element.getCitationElement(), -1);
1668    }
1669    if (element.hasDocument()) {
1670      composeAttachment(t, "RelatedArtifact", "document", element.getDocument(), -1);
1671    }
1672    if (element.hasResourceElement()) {
1673      composeCanonical(t, "RelatedArtifact", "resource", element.getResourceElement(), -1);
1674    }
1675    if (element.hasResourceReference()) {
1676      composeReference(t, "RelatedArtifact", "resourceReference", element.getResourceReference(), -1);
1677    }
1678    if (element.hasPublicationStatusElement()) {
1679      composeEnum(t, "RelatedArtifact", "publicationStatus", element.getPublicationStatusElement(), -1);
1680    }
1681    if (element.hasPublicationDateElement()) {
1682      composeDate(t, "RelatedArtifact", "publicationDate", element.getPublicationDateElement(), -1);
1683    }
1684  }
1685
1686  protected void composeSampledData(Complex parent, String parentType, String name, SampledData element, int index) {
1687    if (element == null) 
1688      return;
1689    Complex t;
1690    if (Utilities.noString(parentType))
1691      t = parent;
1692    else {
1693      t = parent.predicate("fhir:"+parentType+'.'+name);
1694    }
1695    composeDataType(t, "SampledData", name, element, index);
1696    if (element.hasOrigin()) {
1697      composeQuantity(t, "SampledData", "origin", element.getOrigin(), -1);
1698    }
1699    if (element.hasIntervalElement()) {
1700      composeDecimal(t, "SampledData", "interval", element.getIntervalElement(), -1);
1701    }
1702    if (element.hasIntervalUnitElement()) {
1703      composeCode(t, "SampledData", "intervalUnit", element.getIntervalUnitElement(), -1);
1704    }
1705    if (element.hasFactorElement()) {
1706      composeDecimal(t, "SampledData", "factor", element.getFactorElement(), -1);
1707    }
1708    if (element.hasLowerLimitElement()) {
1709      composeDecimal(t, "SampledData", "lowerLimit", element.getLowerLimitElement(), -1);
1710    }
1711    if (element.hasUpperLimitElement()) {
1712      composeDecimal(t, "SampledData", "upperLimit", element.getUpperLimitElement(), -1);
1713    }
1714    if (element.hasDimensionsElement()) {
1715      composePositiveInt(t, "SampledData", "dimensions", element.getDimensionsElement(), -1);
1716    }
1717    if (element.hasDataElement()) {
1718      composeString(t, "SampledData", "data", element.getDataElement(), -1);
1719    }
1720  }
1721
1722  protected void composeSignature(Complex parent, String parentType, String name, Signature element, int index) {
1723    if (element == null) 
1724      return;
1725    Complex t;
1726    if (Utilities.noString(parentType))
1727      t = parent;
1728    else {
1729      t = parent.predicate("fhir:"+parentType+'.'+name);
1730    }
1731    composeDataType(t, "Signature", name, element, index);
1732    for (int i = 0; i < element.getType().size(); i++) {
1733      composeCoding(t, "Signature", "type", element.getType().get(i), i);
1734    }
1735    if (element.hasWhenElement()) {
1736      composeInstant(t, "Signature", "when", element.getWhenElement(), -1);
1737    }
1738    if (element.hasWho()) {
1739      composeReference(t, "Signature", "who", element.getWho(), -1);
1740    }
1741    if (element.hasOnBehalfOf()) {
1742      composeReference(t, "Signature", "onBehalfOf", element.getOnBehalfOf(), -1);
1743    }
1744    if (element.hasTargetFormatElement()) {
1745      composeCode(t, "Signature", "targetFormat", element.getTargetFormatElement(), -1);
1746    }
1747    if (element.hasSigFormatElement()) {
1748      composeCode(t, "Signature", "sigFormat", element.getSigFormatElement(), -1);
1749    }
1750    if (element.hasDataElement()) {
1751      composeBase64Binary(t, "Signature", "data", element.getDataElement(), -1);
1752    }
1753  }
1754
1755  protected void composeTiming(Complex parent, String parentType, String name, Timing element, int index) {
1756    if (element == null) 
1757      return;
1758    Complex t;
1759    if (Utilities.noString(parentType))
1760      t = parent;
1761    else {
1762      t = parent.predicate("fhir:"+parentType+'.'+name);
1763    }
1764    composeBackboneType(t, "Timing", name, element, index);
1765    for (int i = 0; i < element.getEvent().size(); i++) {
1766      composeDateTime(t, "Timing", "event", element.getEvent().get(i), i);
1767    }
1768    if (element.hasRepeat()) {
1769      composeTimingRepeatComponent(t, "Timing", "repeat", element.getRepeat(), -1);
1770    }
1771    if (element.hasCode()) {
1772      composeCodeableConcept(t, "Timing", "code", element.getCode(), -1);
1773    }
1774  }
1775
1776  protected void composeTimingRepeatComponent(Complex parent, String parentType, String name, Timing.TimingRepeatComponent element, int index) {
1777    if (element == null) 
1778      return;
1779    Complex t;
1780    if (Utilities.noString(parentType))
1781      t = parent;
1782    else {
1783      t = parent.predicate("fhir:"+parentType+'.'+name);
1784    }
1785    composeElement(t, "repeat", name, element, index);
1786    if (element.hasBounds()) {
1787      composeType(t, "TimingRepeatComponent", "bounds", element.getBounds(), -1);
1788    }
1789    if (element.hasCountElement()) {
1790      composePositiveInt(t, "TimingRepeatComponent", "count", element.getCountElement(), -1);
1791    }
1792    if (element.hasCountMaxElement()) {
1793      composePositiveInt(t, "TimingRepeatComponent", "countMax", element.getCountMaxElement(), -1);
1794    }
1795    if (element.hasDurationElement()) {
1796      composeDecimal(t, "TimingRepeatComponent", "duration", element.getDurationElement(), -1);
1797    }
1798    if (element.hasDurationMaxElement()) {
1799      composeDecimal(t, "TimingRepeatComponent", "durationMax", element.getDurationMaxElement(), -1);
1800    }
1801    if (element.hasDurationUnitElement()) {
1802      composeEnum(t, "TimingRepeatComponent", "durationUnit", element.getDurationUnitElement(), -1);
1803    }
1804    if (element.hasFrequencyElement()) {
1805      composePositiveInt(t, "TimingRepeatComponent", "frequency", element.getFrequencyElement(), -1);
1806    }
1807    if (element.hasFrequencyMaxElement()) {
1808      composePositiveInt(t, "TimingRepeatComponent", "frequencyMax", element.getFrequencyMaxElement(), -1);
1809    }
1810    if (element.hasPeriodElement()) {
1811      composeDecimal(t, "TimingRepeatComponent", "period", element.getPeriodElement(), -1);
1812    }
1813    if (element.hasPeriodMaxElement()) {
1814      composeDecimal(t, "TimingRepeatComponent", "periodMax", element.getPeriodMaxElement(), -1);
1815    }
1816    if (element.hasPeriodUnitElement()) {
1817      composeEnum(t, "TimingRepeatComponent", "periodUnit", element.getPeriodUnitElement(), -1);
1818    }
1819    for (int i = 0; i < element.getDayOfWeek().size(); i++) {
1820      composeEnum(t, "TimingRepeatComponent", "dayOfWeek", element.getDayOfWeek().get(i), i);
1821    }
1822    for (int i = 0; i < element.getTimeOfDay().size(); i++) {
1823      composeTime(t, "TimingRepeatComponent", "timeOfDay", element.getTimeOfDay().get(i), i);
1824    }
1825    for (int i = 0; i < element.getWhen().size(); i++) {
1826      composeEnum(t, "TimingRepeatComponent", "when", element.getWhen().get(i), i);
1827    }
1828    if (element.hasOffsetElement()) {
1829      composeUnsignedInt(t, "TimingRepeatComponent", "offset", element.getOffsetElement(), -1);
1830    }
1831  }
1832
1833  protected void composeTriggerDefinition(Complex parent, String parentType, String name, TriggerDefinition element, int index) {
1834    if (element == null) 
1835      return;
1836    Complex t;
1837    if (Utilities.noString(parentType))
1838      t = parent;
1839    else {
1840      t = parent.predicate("fhir:"+parentType+'.'+name);
1841    }
1842    composeDataType(t, "TriggerDefinition", name, element, index);
1843    if (element.hasTypeElement()) {
1844      composeEnum(t, "TriggerDefinition", "type", element.getTypeElement(), -1);
1845    }
1846    if (element.hasNameElement()) {
1847      composeString(t, "TriggerDefinition", "name", element.getNameElement(), -1);
1848    }
1849    if (element.hasCode()) {
1850      composeCodeableConcept(t, "TriggerDefinition", "code", element.getCode(), -1);
1851    }
1852    if (element.hasSubscriptionTopicElement()) {
1853      composeCanonical(t, "TriggerDefinition", "subscriptionTopic", element.getSubscriptionTopicElement(), -1);
1854    }
1855    if (element.hasTiming()) {
1856      composeType(t, "TriggerDefinition", "timing", element.getTiming(), -1);
1857    }
1858    for (int i = 0; i < element.getData().size(); i++) {
1859      composeDataRequirement(t, "TriggerDefinition", "data", element.getData().get(i), i);
1860    }
1861    if (element.hasCondition()) {
1862      composeExpression(t, "TriggerDefinition", "condition", element.getCondition(), -1);
1863    }
1864  }
1865
1866  protected void composeUsageContext(Complex parent, String parentType, String name, UsageContext element, int index) {
1867    if (element == null) 
1868      return;
1869    Complex t;
1870    if (Utilities.noString(parentType))
1871      t = parent;
1872    else {
1873      t = parent.predicate("fhir:"+parentType+'.'+name);
1874    }
1875    composeDataType(t, "UsageContext", name, element, index);
1876    if (element.hasCode()) {
1877      composeCoding(t, "UsageContext", "code", element.getCode(), -1);
1878    }
1879    if (element.hasValue()) {
1880      composeType(t, "UsageContext", "value", element.getValue(), -1);
1881    }
1882  }
1883
1884  protected void composeVirtualServiceDetail(Complex parent, String parentType, String name, VirtualServiceDetail element, int index) {
1885    if (element == null) 
1886      return;
1887    Complex t;
1888    if (Utilities.noString(parentType))
1889      t = parent;
1890    else {
1891      t = parent.predicate("fhir:"+parentType+'.'+name);
1892    }
1893    composeDataType(t, "VirtualServiceDetail", name, element, index);
1894    if (element.hasChannelType()) {
1895      composeCoding(t, "VirtualServiceDetail", "channelType", element.getChannelType(), -1);
1896    }
1897    if (element.hasAddress()) {
1898      composeType(t, "VirtualServiceDetail", "address", element.getAddress(), -1);
1899    }
1900    for (int i = 0; i < element.getAdditionalInfo().size(); i++) {
1901      composeUrl(t, "VirtualServiceDetail", "additionalInfo", element.getAdditionalInfo().get(i), i);
1902    }
1903    if (element.hasMaxParticipantsElement()) {
1904      composePositiveInt(t, "VirtualServiceDetail", "maxParticipants", element.getMaxParticipantsElement(), -1);
1905    }
1906    if (element.hasSessionKeyElement()) {
1907      composeString(t, "VirtualServiceDetail", "sessionKey", element.getSessionKeyElement(), -1);
1908    }
1909  }
1910
1911  protected void composeCanonicalResource(Complex t, String parentType, String name, CanonicalResource element, int index) {
1912    composeDomainResource(t, parentType, name, element, index);
1913    if (element.hasUrlElement()) {
1914      composeUri(t, "CanonicalResource", "url", element.getUrlElement(), -1);
1915    }
1916    for (int i = 0; i < element.getIdentifier().size(); i++) {
1917      composeIdentifier(t, "CanonicalResource", "identifier", element.getIdentifier().get(i), i);
1918    }
1919    if (element.hasVersionElement()) {
1920      composeString(t, "CanonicalResource", "version", element.getVersionElement(), -1);
1921    }
1922    if (element.hasVersionAlgorithm()) {
1923      composeType(t, "CanonicalResource", "versionAlgorithm", element.getVersionAlgorithm(), -1);
1924    }
1925    if (element.hasNameElement()) {
1926      composeString(t, "CanonicalResource", "name", element.getNameElement(), -1);
1927    }
1928    if (element.hasTitleElement()) {
1929      composeString(t, "CanonicalResource", "title", element.getTitleElement(), -1);
1930    }
1931    if (element.hasStatusElement()) {
1932      composeEnum(t, "CanonicalResource", "status", element.getStatusElement(), -1);
1933    }
1934    if (element.hasExperimentalElement()) {
1935      composeBoolean(t, "CanonicalResource", "experimental", element.getExperimentalElement(), -1);
1936    }
1937    if (element.hasDateElement()) {
1938      composeDateTime(t, "CanonicalResource", "date", element.getDateElement(), -1);
1939    }
1940    if (element.hasPublisherElement()) {
1941      composeString(t, "CanonicalResource", "publisher", element.getPublisherElement(), -1);
1942    }
1943    for (int i = 0; i < element.getContact().size(); i++) {
1944      composeContactDetail(t, "CanonicalResource", "contact", element.getContact().get(i), i);
1945    }
1946    if (element.hasDescriptionElement()) {
1947      composeMarkdown(t, "CanonicalResource", "description", element.getDescriptionElement(), -1);
1948    }
1949    for (int i = 0; i < element.getUseContext().size(); i++) {
1950      composeUsageContext(t, "CanonicalResource", "useContext", element.getUseContext().get(i), i);
1951    }
1952    for (int i = 0; i < element.getJurisdiction().size(); i++) {
1953      composeCodeableConcept(t, "CanonicalResource", "jurisdiction", element.getJurisdiction().get(i), i);
1954    }
1955    if (element.hasPurposeElement()) {
1956      composeMarkdown(t, "CanonicalResource", "purpose", element.getPurposeElement(), -1);
1957    }
1958    if (element.hasCopyrightElement()) {
1959      composeMarkdown(t, "CanonicalResource", "copyright", element.getCopyrightElement(), -1);
1960    }
1961    if (element.hasCopyrightLabelElement()) {
1962      composeString(t, "CanonicalResource", "copyrightLabel", element.getCopyrightLabelElement(), -1);
1963    }
1964  }
1965
1966  protected void composeDomainResource(Complex t, String parentType, String name, DomainResource element, int index) {
1967    composeResource(t, parentType, name, element, index);
1968    if (element.hasText()) {
1969      composeNarrative(t, "DomainResource", "text", element.getText(), -1);
1970    }
1971    for (int i = 0; i < element.getContained().size(); i++) {
1972      composeResource(t, "DomainResource", "contained", element.getContained().get(i), i);
1973    }
1974    for (int i = 0; i < element.getExtension().size(); i++) {
1975      composeExtension(t, "DomainResource", "extension", element.getExtension().get(i), i);
1976    }
1977    for (int i = 0; i < element.getModifierExtension().size(); i++) {
1978      composeExtension(t, "DomainResource", "modifierExtension", element.getModifierExtension().get(i), i);
1979    }
1980  }
1981
1982  protected void composeMetadataResource(Complex t, String parentType, String name, MetadataResource element, int index) {
1983    composeCanonicalResource(t, parentType, name, element, index);
1984    if (element.hasApprovalDateElement()) {
1985      composeDate(t, "MetadataResource", "approvalDate", element.getApprovalDateElement(), -1);
1986    }
1987    if (element.hasLastReviewDateElement()) {
1988      composeDate(t, "MetadataResource", "lastReviewDate", element.getLastReviewDateElement(), -1);
1989    }
1990    if (element.hasEffectivePeriod()) {
1991      composePeriod(t, "MetadataResource", "effectivePeriod", element.getEffectivePeriod(), -1);
1992    }
1993    for (int i = 0; i < element.getTopic().size(); i++) {
1994      composeCodeableConcept(t, "MetadataResource", "topic", element.getTopic().get(i), i);
1995    }
1996    for (int i = 0; i < element.getAuthor().size(); i++) {
1997      composeContactDetail(t, "MetadataResource", "author", element.getAuthor().get(i), i);
1998    }
1999    for (int i = 0; i < element.getEditor().size(); i++) {
2000      composeContactDetail(t, "MetadataResource", "editor", element.getEditor().get(i), i);
2001    }
2002    for (int i = 0; i < element.getReviewer().size(); i++) {
2003      composeContactDetail(t, "MetadataResource", "reviewer", element.getReviewer().get(i), i);
2004    }
2005    for (int i = 0; i < element.getEndorser().size(); i++) {
2006      composeContactDetail(t, "MetadataResource", "endorser", element.getEndorser().get(i), i);
2007    }
2008    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
2009      composeRelatedArtifact(t, "MetadataResource", "relatedArtifact", element.getRelatedArtifact().get(i), i);
2010    }
2011  }
2012
2013  protected void composeResource(Complex t, String parentType, String name, Resource element, int index) {
2014    composeBase(t, parentType, name, element, index);
2015    if (element.hasIdElement()) {
2016      composeId(t, "Resource", "id", element.getIdElement(), -1);
2017    }
2018    if (element.hasMeta()) {
2019      composeMeta(t, "Resource", "meta", element.getMeta(), -1);
2020    }
2021    if (element.hasImplicitRulesElement()) {
2022      composeUri(t, "Resource", "implicitRules", element.getImplicitRulesElement(), -1);
2023    }
2024    if (element.hasLanguageElement()) {
2025      composeCode(t, "Resource", "language", element.getLanguageElement(), -1);
2026    }
2027  }
2028
2029  protected void composeAccount(Complex parent, String parentType, String name, Account element, int index) {
2030    if (element == null) 
2031      return;
2032    Complex t;
2033    if (Utilities.noString(parentType))
2034      t = parent;
2035    else {
2036      t = parent.predicate("fhir:"+parentType+'.'+name);
2037    }
2038    composeDomainResource(t, "Account", name, element, index);
2039    for (int i = 0; i < element.getIdentifier().size(); i++) {
2040      composeIdentifier(t, "Account", "identifier", element.getIdentifier().get(i), i);
2041    }
2042    if (element.hasStatusElement()) {
2043      composeEnum(t, "Account", "status", element.getStatusElement(), -1);
2044    }
2045    if (element.hasBillingStatus()) {
2046      composeCodeableConcept(t, "Account", "billingStatus", element.getBillingStatus(), -1);
2047    }
2048    if (element.hasType()) {
2049      composeCodeableConcept(t, "Account", "type", element.getType(), -1);
2050    }
2051    if (element.hasNameElement()) {
2052      composeString(t, "Account", "name", element.getNameElement(), -1);
2053    }
2054    for (int i = 0; i < element.getSubject().size(); i++) {
2055      composeReference(t, "Account", "subject", element.getSubject().get(i), i);
2056    }
2057    if (element.hasServicePeriod()) {
2058      composePeriod(t, "Account", "servicePeriod", element.getServicePeriod(), -1);
2059    }
2060    for (int i = 0; i < element.getCoverage().size(); i++) {
2061      composeAccountCoverageComponent(t, "Account", "coverage", element.getCoverage().get(i), i);
2062    }
2063    if (element.hasOwner()) {
2064      composeReference(t, "Account", "owner", element.getOwner(), -1);
2065    }
2066    if (element.hasDescriptionElement()) {
2067      composeString(t, "Account", "description", element.getDescriptionElement(), -1);
2068    }
2069    for (int i = 0; i < element.getGuarantor().size(); i++) {
2070      composeAccountGuarantorComponent(t, "Account", "guarantor", element.getGuarantor().get(i), i);
2071    }
2072    for (int i = 0; i < element.getRelatedAccount().size(); i++) {
2073      composeAccountRelatedAccountComponent(t, "Account", "relatedAccount", element.getRelatedAccount().get(i), i);
2074    }
2075    if (element.hasCurrency()) {
2076      composeCodeableConcept(t, "Account", "currency", element.getCurrency(), -1);
2077    }
2078    for (int i = 0; i < element.getBalance().size(); i++) {
2079      composeAccountBalanceComponent(t, "Account", "balance", element.getBalance().get(i), i);
2080    }
2081    if (element.hasCalculatedAtElement()) {
2082      composeInstant(t, "Account", "calculatedAt", element.getCalculatedAtElement(), -1);
2083    }
2084  }
2085
2086  protected void composeAccountCoverageComponent(Complex parent, String parentType, String name, Account.CoverageComponent element, int index) {
2087    if (element == null) 
2088      return;
2089    Complex t;
2090    if (Utilities.noString(parentType))
2091      t = parent;
2092    else {
2093      t = parent.predicate("fhir:"+parentType+'.'+name);
2094    }
2095    composeBackboneElement(t, "coverage", name, element, index);
2096    if (element.hasCoverage()) {
2097      composeReference(t, "CoverageComponent", "coverage", element.getCoverage(), -1);
2098    }
2099    if (element.hasPriorityElement()) {
2100      composePositiveInt(t, "CoverageComponent", "priority", element.getPriorityElement(), -1);
2101    }
2102  }
2103
2104  protected void composeAccountGuarantorComponent(Complex parent, String parentType, String name, Account.GuarantorComponent element, int index) {
2105    if (element == null) 
2106      return;
2107    Complex t;
2108    if (Utilities.noString(parentType))
2109      t = parent;
2110    else {
2111      t = parent.predicate("fhir:"+parentType+'.'+name);
2112    }
2113    composeBackboneElement(t, "guarantor", name, element, index);
2114    if (element.hasParty()) {
2115      composeReference(t, "GuarantorComponent", "party", element.getParty(), -1);
2116    }
2117    if (element.hasOnHoldElement()) {
2118      composeBoolean(t, "GuarantorComponent", "onHold", element.getOnHoldElement(), -1);
2119    }
2120    if (element.hasPeriod()) {
2121      composePeriod(t, "GuarantorComponent", "period", element.getPeriod(), -1);
2122    }
2123  }
2124
2125  protected void composeAccountRelatedAccountComponent(Complex parent, String parentType, String name, Account.AccountRelatedAccountComponent element, int index) {
2126    if (element == null) 
2127      return;
2128    Complex t;
2129    if (Utilities.noString(parentType))
2130      t = parent;
2131    else {
2132      t = parent.predicate("fhir:"+parentType+'.'+name);
2133    }
2134    composeBackboneElement(t, "relatedAccount", name, element, index);
2135    if (element.hasRelationship()) {
2136      composeCodeableConcept(t, "AccountRelatedAccountComponent", "relationship", element.getRelationship(), -1);
2137    }
2138    if (element.hasAccount()) {
2139      composeReference(t, "AccountRelatedAccountComponent", "account", element.getAccount(), -1);
2140    }
2141  }
2142
2143  protected void composeAccountBalanceComponent(Complex parent, String parentType, String name, Account.AccountBalanceComponent element, int index) {
2144    if (element == null) 
2145      return;
2146    Complex t;
2147    if (Utilities.noString(parentType))
2148      t = parent;
2149    else {
2150      t = parent.predicate("fhir:"+parentType+'.'+name);
2151    }
2152    composeBackboneElement(t, "balance", name, element, index);
2153    if (element.hasAggregate()) {
2154      composeCodeableConcept(t, "AccountBalanceComponent", "aggregate", element.getAggregate(), -1);
2155    }
2156    if (element.hasTerm()) {
2157      composeCodeableConcept(t, "AccountBalanceComponent", "term", element.getTerm(), -1);
2158    }
2159    if (element.hasEstimateElement()) {
2160      composeBoolean(t, "AccountBalanceComponent", "estimate", element.getEstimateElement(), -1);
2161    }
2162    if (element.hasAmount()) {
2163      composeMoney(t, "AccountBalanceComponent", "amount", element.getAmount(), -1);
2164    }
2165  }
2166
2167  protected void composeActivityDefinition(Complex parent, String parentType, String name, ActivityDefinition element, int index) {
2168    if (element == null) 
2169      return;
2170    Complex t;
2171    if (Utilities.noString(parentType))
2172      t = parent;
2173    else {
2174      t = parent.predicate("fhir:"+parentType+'.'+name);
2175    }
2176    composeMetadataResource(t, "ActivityDefinition", name, element, index);
2177    if (element.hasUrlElement()) {
2178      composeUri(t, "ActivityDefinition", "url", element.getUrlElement(), -1);
2179    }
2180    for (int i = 0; i < element.getIdentifier().size(); i++) {
2181      composeIdentifier(t, "ActivityDefinition", "identifier", element.getIdentifier().get(i), i);
2182    }
2183    if (element.hasVersionElement()) {
2184      composeString(t, "ActivityDefinition", "version", element.getVersionElement(), -1);
2185    }
2186    if (element.hasNameElement()) {
2187      composeString(t, "ActivityDefinition", "name", element.getNameElement(), -1);
2188    }
2189    if (element.hasTitleElement()) {
2190      composeString(t, "ActivityDefinition", "title", element.getTitleElement(), -1);
2191    }
2192    if (element.hasSubtitleElement()) {
2193      composeString(t, "ActivityDefinition", "subtitle", element.getSubtitleElement(), -1);
2194    }
2195    if (element.hasStatusElement()) {
2196      composeEnum(t, "ActivityDefinition", "status", element.getStatusElement(), -1);
2197    }
2198    if (element.hasExperimentalElement()) {
2199      composeBoolean(t, "ActivityDefinition", "experimental", element.getExperimentalElement(), -1);
2200    }
2201    if (element.hasSubject()) {
2202      composeType(t, "ActivityDefinition", "subject", element.getSubject(), -1);
2203    }
2204    if (element.hasDateElement()) {
2205      composeDateTime(t, "ActivityDefinition", "date", element.getDateElement(), -1);
2206    }
2207    if (element.hasPublisherElement()) {
2208      composeString(t, "ActivityDefinition", "publisher", element.getPublisherElement(), -1);
2209    }
2210    for (int i = 0; i < element.getContact().size(); i++) {
2211      composeContactDetail(t, "ActivityDefinition", "contact", element.getContact().get(i), i);
2212    }
2213    if (element.hasDescriptionElement()) {
2214      composeMarkdown(t, "ActivityDefinition", "description", element.getDescriptionElement(), -1);
2215    }
2216    for (int i = 0; i < element.getUseContext().size(); i++) {
2217      composeUsageContext(t, "ActivityDefinition", "useContext", element.getUseContext().get(i), i);
2218    }
2219    for (int i = 0; i < element.getJurisdiction().size(); i++) {
2220      composeCodeableConcept(t, "ActivityDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
2221    }
2222    if (element.hasPurposeElement()) {
2223      composeMarkdown(t, "ActivityDefinition", "purpose", element.getPurposeElement(), -1);
2224    }
2225    if (element.hasUsageElement()) {
2226      composeString(t, "ActivityDefinition", "usage", element.getUsageElement(), -1);
2227    }
2228    if (element.hasCopyrightElement()) {
2229      composeMarkdown(t, "ActivityDefinition", "copyright", element.getCopyrightElement(), -1);
2230    }
2231    if (element.hasApprovalDateElement()) {
2232      composeDate(t, "ActivityDefinition", "approvalDate", element.getApprovalDateElement(), -1);
2233    }
2234    if (element.hasLastReviewDateElement()) {
2235      composeDate(t, "ActivityDefinition", "lastReviewDate", element.getLastReviewDateElement(), -1);
2236    }
2237    if (element.hasEffectivePeriod()) {
2238      composePeriod(t, "ActivityDefinition", "effectivePeriod", element.getEffectivePeriod(), -1);
2239    }
2240    for (int i = 0; i < element.getTopic().size(); i++) {
2241      composeCodeableConcept(t, "ActivityDefinition", "topic", element.getTopic().get(i), i);
2242    }
2243    for (int i = 0; i < element.getAuthor().size(); i++) {
2244      composeContactDetail(t, "ActivityDefinition", "author", element.getAuthor().get(i), i);
2245    }
2246    for (int i = 0; i < element.getEditor().size(); i++) {
2247      composeContactDetail(t, "ActivityDefinition", "editor", element.getEditor().get(i), i);
2248    }
2249    for (int i = 0; i < element.getReviewer().size(); i++) {
2250      composeContactDetail(t, "ActivityDefinition", "reviewer", element.getReviewer().get(i), i);
2251    }
2252    for (int i = 0; i < element.getEndorser().size(); i++) {
2253      composeContactDetail(t, "ActivityDefinition", "endorser", element.getEndorser().get(i), i);
2254    }
2255    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
2256      composeRelatedArtifact(t, "ActivityDefinition", "relatedArtifact", element.getRelatedArtifact().get(i), i);
2257    }
2258    for (int i = 0; i < element.getLibrary().size(); i++) {
2259      composeCanonical(t, "ActivityDefinition", "library", element.getLibrary().get(i), i);
2260    }
2261    if (element.hasKindElement()) {
2262      composeEnum(t, "ActivityDefinition", "kind", element.getKindElement(), -1);
2263    }
2264    if (element.hasProfileElement()) {
2265      composeCanonical(t, "ActivityDefinition", "profile", element.getProfileElement(), -1);
2266    }
2267    if (element.hasCode()) {
2268      composeCodeableConcept(t, "ActivityDefinition", "code", element.getCode(), -1);
2269    }
2270    if (element.hasIntentElement()) {
2271      composeEnum(t, "ActivityDefinition", "intent", element.getIntentElement(), -1);
2272    }
2273    if (element.hasPriorityElement()) {
2274      composeEnum(t, "ActivityDefinition", "priority", element.getPriorityElement(), -1);
2275    }
2276    if (element.hasDoNotPerformElement()) {
2277      composeBoolean(t, "ActivityDefinition", "doNotPerform", element.getDoNotPerformElement(), -1);
2278    }
2279    if (element.hasTiming()) {
2280      composeType(t, "ActivityDefinition", "timing", element.getTiming(), -1);
2281    }
2282    if (element.hasAsNeeded()) {
2283      composeType(t, "ActivityDefinition", "asNeeded", element.getAsNeeded(), -1);
2284    }
2285    if (element.hasLocation()) {
2286      composeCodeableReference(t, "ActivityDefinition", "location", element.getLocation(), -1);
2287    }
2288    for (int i = 0; i < element.getParticipant().size(); i++) {
2289      composeActivityDefinitionParticipantComponent(t, "ActivityDefinition", "participant", element.getParticipant().get(i), i);
2290    }
2291    if (element.hasProduct()) {
2292      composeType(t, "ActivityDefinition", "product", element.getProduct(), -1);
2293    }
2294    if (element.hasQuantity()) {
2295      composeQuantity(t, "ActivityDefinition", "quantity", element.getQuantity(), -1);
2296    }
2297    for (int i = 0; i < element.getDosage().size(); i++) {
2298      composeDosage(t, "ActivityDefinition", "dosage", element.getDosage().get(i), i);
2299    }
2300    for (int i = 0; i < element.getBodySite().size(); i++) {
2301      composeCodeableConcept(t, "ActivityDefinition", "bodySite", element.getBodySite().get(i), i);
2302    }
2303    for (int i = 0; i < element.getSpecimenRequirement().size(); i++) {
2304      composeCanonical(t, "ActivityDefinition", "specimenRequirement", element.getSpecimenRequirement().get(i), i);
2305    }
2306    for (int i = 0; i < element.getObservationRequirement().size(); i++) {
2307      composeCanonical(t, "ActivityDefinition", "observationRequirement", element.getObservationRequirement().get(i), i);
2308    }
2309    for (int i = 0; i < element.getObservationResultRequirement().size(); i++) {
2310      composeCanonical(t, "ActivityDefinition", "observationResultRequirement", element.getObservationResultRequirement().get(i), i);
2311    }
2312    if (element.hasTransformElement()) {
2313      composeCanonical(t, "ActivityDefinition", "transform", element.getTransformElement(), -1);
2314    }
2315    for (int i = 0; i < element.getDynamicValue().size(); i++) {
2316      composeActivityDefinitionDynamicValueComponent(t, "ActivityDefinition", "dynamicValue", element.getDynamicValue().get(i), i);
2317    }
2318  }
2319
2320  protected void composeActivityDefinitionParticipantComponent(Complex parent, String parentType, String name, ActivityDefinition.ActivityDefinitionParticipantComponent element, int index) {
2321    if (element == null) 
2322      return;
2323    Complex t;
2324    if (Utilities.noString(parentType))
2325      t = parent;
2326    else {
2327      t = parent.predicate("fhir:"+parentType+'.'+name);
2328    }
2329    composeBackboneElement(t, "participant", name, element, index);
2330    if (element.hasTypeElement()) {
2331      composeEnum(t, "ActivityDefinitionParticipantComponent", "type", element.getTypeElement(), -1);
2332    }
2333    if (element.hasTypeCanonicalElement()) {
2334      composeCanonical(t, "ActivityDefinitionParticipantComponent", "typeCanonical", element.getTypeCanonicalElement(), -1);
2335    }
2336    if (element.hasTypeReference()) {
2337      composeReference(t, "ActivityDefinitionParticipantComponent", "typeReference", element.getTypeReference(), -1);
2338    }
2339    if (element.hasRole()) {
2340      composeCodeableConcept(t, "ActivityDefinitionParticipantComponent", "role", element.getRole(), -1);
2341    }
2342    if (element.hasFunction()) {
2343      composeCodeableConcept(t, "ActivityDefinitionParticipantComponent", "function", element.getFunction(), -1);
2344    }
2345  }
2346
2347  protected void composeActivityDefinitionDynamicValueComponent(Complex parent, String parentType, String name, ActivityDefinition.ActivityDefinitionDynamicValueComponent element, int index) {
2348    if (element == null) 
2349      return;
2350    Complex t;
2351    if (Utilities.noString(parentType))
2352      t = parent;
2353    else {
2354      t = parent.predicate("fhir:"+parentType+'.'+name);
2355    }
2356    composeBackboneElement(t, "dynamicValue", name, element, index);
2357    if (element.hasPathElement()) {
2358      composeString(t, "ActivityDefinitionDynamicValueComponent", "path", element.getPathElement(), -1);
2359    }
2360    if (element.hasExpression()) {
2361      composeExpression(t, "ActivityDefinitionDynamicValueComponent", "expression", element.getExpression(), -1);
2362    }
2363  }
2364
2365  protected void composeActorDefinition(Complex parent, String parentType, String name, ActorDefinition element, int index) {
2366    if (element == null) 
2367      return;
2368    Complex t;
2369    if (Utilities.noString(parentType))
2370      t = parent;
2371    else {
2372      t = parent.predicate("fhir:"+parentType+'.'+name);
2373    }
2374    composeCanonicalResource(t, "ActorDefinition", name, element, index);
2375    if (element.hasUrlElement()) {
2376      composeUri(t, "ActorDefinition", "url", element.getUrlElement(), -1);
2377    }
2378    for (int i = 0; i < element.getIdentifier().size(); i++) {
2379      composeIdentifier(t, "ActorDefinition", "identifier", element.getIdentifier().get(i), i);
2380    }
2381    if (element.hasVersionElement()) {
2382      composeString(t, "ActorDefinition", "version", element.getVersionElement(), -1);
2383    }
2384    if (element.hasNameElement()) {
2385      composeString(t, "ActorDefinition", "name", element.getNameElement(), -1);
2386    }
2387    if (element.hasTitleElement()) {
2388      composeString(t, "ActorDefinition", "title", element.getTitleElement(), -1);
2389    }
2390    if (element.hasStatusElement()) {
2391      composeEnum(t, "ActorDefinition", "status", element.getStatusElement(), -1);
2392    }
2393    if (element.hasExperimentalElement()) {
2394      composeBoolean(t, "ActorDefinition", "experimental", element.getExperimentalElement(), -1);
2395    }
2396    if (element.hasDateElement()) {
2397      composeDateTime(t, "ActorDefinition", "date", element.getDateElement(), -1);
2398    }
2399    if (element.hasPublisherElement()) {
2400      composeString(t, "ActorDefinition", "publisher", element.getPublisherElement(), -1);
2401    }
2402    for (int i = 0; i < element.getContact().size(); i++) {
2403      composeContactDetail(t, "ActorDefinition", "contact", element.getContact().get(i), i);
2404    }
2405    if (element.hasDescriptionElement()) {
2406      composeMarkdown(t, "ActorDefinition", "description", element.getDescriptionElement(), -1);
2407    }
2408    for (int i = 0; i < element.getUseContext().size(); i++) {
2409      composeUsageContext(t, "ActorDefinition", "useContext", element.getUseContext().get(i), i);
2410    }
2411    for (int i = 0; i < element.getJurisdiction().size(); i++) {
2412      composeCodeableConcept(t, "ActorDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
2413    }
2414    if (element.hasPurposeElement()) {
2415      composeMarkdown(t, "ActorDefinition", "purpose", element.getPurposeElement(), -1);
2416    }
2417    if (element.hasCopyrightElement()) {
2418      composeMarkdown(t, "ActorDefinition", "copyright", element.getCopyrightElement(), -1);
2419    }
2420    if (element.hasCopyrightLabelElement()) {
2421      composeString(t, "ActorDefinition", "copyrightLabel", element.getCopyrightLabelElement(), -1);
2422    }
2423    if (element.hasTypeElement()) {
2424      composeEnum(t, "ActorDefinition", "type", element.getTypeElement(), -1);
2425    }
2426    if (element.hasDocumentationElement()) {
2427      composeMarkdown(t, "ActorDefinition", "documentation", element.getDocumentationElement(), -1);
2428    }
2429    for (int i = 0; i < element.getReference().size(); i++) {
2430      composeUrl(t, "ActorDefinition", "reference", element.getReference().get(i), i);
2431    }
2432    if (element.hasCapabilitiesElement()) {
2433      composeCanonical(t, "ActorDefinition", "capabilities", element.getCapabilitiesElement(), -1);
2434    }
2435    for (int i = 0; i < element.getDerivedFrom().size(); i++) {
2436      composeCanonical(t, "ActorDefinition", "derivedFrom", element.getDerivedFrom().get(i), i);
2437    }
2438  }
2439
2440  protected void composeAdministrableProductDefinition(Complex parent, String parentType, String name, AdministrableProductDefinition element, int index) {
2441    if (element == null) 
2442      return;
2443    Complex t;
2444    if (Utilities.noString(parentType))
2445      t = parent;
2446    else {
2447      t = parent.predicate("fhir:"+parentType+'.'+name);
2448    }
2449    composeDomainResource(t, "AdministrableProductDefinition", name, element, index);
2450    for (int i = 0; i < element.getIdentifier().size(); i++) {
2451      composeIdentifier(t, "AdministrableProductDefinition", "identifier", element.getIdentifier().get(i), i);
2452    }
2453    if (element.hasStatusElement()) {
2454      composeEnum(t, "AdministrableProductDefinition", "status", element.getStatusElement(), -1);
2455    }
2456    for (int i = 0; i < element.getFormOf().size(); i++) {
2457      composeReference(t, "AdministrableProductDefinition", "formOf", element.getFormOf().get(i), i);
2458    }
2459    if (element.hasAdministrableDoseForm()) {
2460      composeCodeableConcept(t, "AdministrableProductDefinition", "administrableDoseForm", element.getAdministrableDoseForm(), -1);
2461    }
2462    if (element.hasUnitOfPresentation()) {
2463      composeCodeableConcept(t, "AdministrableProductDefinition", "unitOfPresentation", element.getUnitOfPresentation(), -1);
2464    }
2465    for (int i = 0; i < element.getProducedFrom().size(); i++) {
2466      composeReference(t, "AdministrableProductDefinition", "producedFrom", element.getProducedFrom().get(i), i);
2467    }
2468    for (int i = 0; i < element.getIngredient().size(); i++) {
2469      composeCodeableConcept(t, "AdministrableProductDefinition", "ingredient", element.getIngredient().get(i), i);
2470    }
2471    if (element.hasDevice()) {
2472      composeReference(t, "AdministrableProductDefinition", "device", element.getDevice(), -1);
2473    }
2474    for (int i = 0; i < element.getProperty().size(); i++) {
2475      composeAdministrableProductDefinitionPropertyComponent(t, "AdministrableProductDefinition", "property", element.getProperty().get(i), i);
2476    }
2477    for (int i = 0; i < element.getRouteOfAdministration().size(); i++) {
2478      composeAdministrableProductDefinitionRouteOfAdministrationComponent(t, "AdministrableProductDefinition", "routeOfAdministration", element.getRouteOfAdministration().get(i), i);
2479    }
2480  }
2481
2482  protected void composeAdministrableProductDefinitionPropertyComponent(Complex parent, String parentType, String name, AdministrableProductDefinition.AdministrableProductDefinitionPropertyComponent element, int index) {
2483    if (element == null) 
2484      return;
2485    Complex t;
2486    if (Utilities.noString(parentType))
2487      t = parent;
2488    else {
2489      t = parent.predicate("fhir:"+parentType+'.'+name);
2490    }
2491    composeBackboneElement(t, "property", name, element, index);
2492    if (element.hasType()) {
2493      composeCodeableConcept(t, "AdministrableProductDefinitionPropertyComponent", "type", element.getType(), -1);
2494    }
2495    if (element.hasValue()) {
2496      composeType(t, "AdministrableProductDefinitionPropertyComponent", "value", element.getValue(), -1);
2497    }
2498    if (element.hasStatus()) {
2499      composeCodeableConcept(t, "AdministrableProductDefinitionPropertyComponent", "status", element.getStatus(), -1);
2500    }
2501  }
2502
2503  protected void composeAdministrableProductDefinitionRouteOfAdministrationComponent(Complex parent, String parentType, String name, AdministrableProductDefinition.AdministrableProductDefinitionRouteOfAdministrationComponent element, int index) {
2504    if (element == null) 
2505      return;
2506    Complex t;
2507    if (Utilities.noString(parentType))
2508      t = parent;
2509    else {
2510      t = parent.predicate("fhir:"+parentType+'.'+name);
2511    }
2512    composeBackboneElement(t, "routeOfAdministration", name, element, index);
2513    if (element.hasCode()) {
2514      composeCodeableConcept(t, "AdministrableProductDefinitionRouteOfAdministrationComponent", "code", element.getCode(), -1);
2515    }
2516    if (element.hasFirstDose()) {
2517      composeQuantity(t, "AdministrableProductDefinitionRouteOfAdministrationComponent", "firstDose", element.getFirstDose(), -1);
2518    }
2519    if (element.hasMaxSingleDose()) {
2520      composeQuantity(t, "AdministrableProductDefinitionRouteOfAdministrationComponent", "maxSingleDose", element.getMaxSingleDose(), -1);
2521    }
2522    if (element.hasMaxDosePerDay()) {
2523      composeQuantity(t, "AdministrableProductDefinitionRouteOfAdministrationComponent", "maxDosePerDay", element.getMaxDosePerDay(), -1);
2524    }
2525    if (element.hasMaxDosePerTreatmentPeriod()) {
2526      composeRatio(t, "AdministrableProductDefinitionRouteOfAdministrationComponent", "maxDosePerTreatmentPeriod", element.getMaxDosePerTreatmentPeriod(), -1);
2527    }
2528    if (element.hasMaxTreatmentPeriod()) {
2529      composeDuration(t, "AdministrableProductDefinitionRouteOfAdministrationComponent", "maxTreatmentPeriod", element.getMaxTreatmentPeriod(), -1);
2530    }
2531    for (int i = 0; i < element.getTargetSpecies().size(); i++) {
2532      composeAdministrableProductDefinitionRouteOfAdministrationTargetSpeciesComponent(t, "AdministrableProductDefinitionRouteOfAdministrationComponent", "targetSpecies", element.getTargetSpecies().get(i), i);
2533    }
2534  }
2535
2536  protected void composeAdministrableProductDefinitionRouteOfAdministrationTargetSpeciesComponent(Complex parent, String parentType, String name, AdministrableProductDefinition.AdministrableProductDefinitionRouteOfAdministrationTargetSpeciesComponent element, int index) {
2537    if (element == null) 
2538      return;
2539    Complex t;
2540    if (Utilities.noString(parentType))
2541      t = parent;
2542    else {
2543      t = parent.predicate("fhir:"+parentType+'.'+name);
2544    }
2545    composeBackboneElement(t, "targetSpecies", name, element, index);
2546    if (element.hasCode()) {
2547      composeCodeableConcept(t, "AdministrableProductDefinitionRouteOfAdministrationTargetSpeciesComponent", "code", element.getCode(), -1);
2548    }
2549    for (int i = 0; i < element.getWithdrawalPeriod().size(); i++) {
2550      composeAdministrableProductDefinitionRouteOfAdministrationTargetSpeciesWithdrawalPeriodComponent(t, "AdministrableProductDefinitionRouteOfAdministrationTargetSpeciesComponent", "withdrawalPeriod", element.getWithdrawalPeriod().get(i), i);
2551    }
2552  }
2553
2554  protected void composeAdministrableProductDefinitionRouteOfAdministrationTargetSpeciesWithdrawalPeriodComponent(Complex parent, String parentType, String name, AdministrableProductDefinition.AdministrableProductDefinitionRouteOfAdministrationTargetSpeciesWithdrawalPeriodComponent element, int index) {
2555    if (element == null) 
2556      return;
2557    Complex t;
2558    if (Utilities.noString(parentType))
2559      t = parent;
2560    else {
2561      t = parent.predicate("fhir:"+parentType+'.'+name);
2562    }
2563    composeBackboneElement(t, "withdrawalPeriod", name, element, index);
2564    if (element.hasTissue()) {
2565      composeCodeableConcept(t, "AdministrableProductDefinitionRouteOfAdministrationTargetSpeciesWithdrawalPeriodComponent", "tissue", element.getTissue(), -1);
2566    }
2567    if (element.hasValue()) {
2568      composeQuantity(t, "AdministrableProductDefinitionRouteOfAdministrationTargetSpeciesWithdrawalPeriodComponent", "value", element.getValue(), -1);
2569    }
2570    if (element.hasSupportingInformationElement()) {
2571      composeString(t, "AdministrableProductDefinitionRouteOfAdministrationTargetSpeciesWithdrawalPeriodComponent", "supportingInformation", element.getSupportingInformationElement(), -1);
2572    }
2573  }
2574
2575  protected void composeAdverseEvent(Complex parent, String parentType, String name, AdverseEvent element, int index) {
2576    if (element == null) 
2577      return;
2578    Complex t;
2579    if (Utilities.noString(parentType))
2580      t = parent;
2581    else {
2582      t = parent.predicate("fhir:"+parentType+'.'+name);
2583    }
2584    composeDomainResource(t, "AdverseEvent", name, element, index);
2585    for (int i = 0; i < element.getIdentifier().size(); i++) {
2586      composeIdentifier(t, "AdverseEvent", "identifier", element.getIdentifier().get(i), i);
2587    }
2588    if (element.hasStatusElement()) {
2589      composeEnum(t, "AdverseEvent", "status", element.getStatusElement(), -1);
2590    }
2591    if (element.hasActualityElement()) {
2592      composeEnum(t, "AdverseEvent", "actuality", element.getActualityElement(), -1);
2593    }
2594    for (int i = 0; i < element.getCategory().size(); i++) {
2595      composeCodeableConcept(t, "AdverseEvent", "category", element.getCategory().get(i), i);
2596    }
2597    if (element.hasCode()) {
2598      composeCodeableConcept(t, "AdverseEvent", "code", element.getCode(), -1);
2599    }
2600    if (element.hasSubject()) {
2601      composeReference(t, "AdverseEvent", "subject", element.getSubject(), -1);
2602    }
2603    if (element.hasEncounter()) {
2604      composeReference(t, "AdverseEvent", "encounter", element.getEncounter(), -1);
2605    }
2606    if (element.hasOccurrence()) {
2607      composeType(t, "AdverseEvent", "occurrence", element.getOccurrence(), -1);
2608    }
2609    if (element.hasDetectedElement()) {
2610      composeDateTime(t, "AdverseEvent", "detected", element.getDetectedElement(), -1);
2611    }
2612    if (element.hasRecordedDateElement()) {
2613      composeDateTime(t, "AdverseEvent", "recordedDate", element.getRecordedDateElement(), -1);
2614    }
2615    for (int i = 0; i < element.getResultingEffect().size(); i++) {
2616      composeReference(t, "AdverseEvent", "resultingEffect", element.getResultingEffect().get(i), i);
2617    }
2618    if (element.hasLocation()) {
2619      composeReference(t, "AdverseEvent", "location", element.getLocation(), -1);
2620    }
2621    if (element.hasSeriousness()) {
2622      composeCodeableConcept(t, "AdverseEvent", "seriousness", element.getSeriousness(), -1);
2623    }
2624    for (int i = 0; i < element.getOutcome().size(); i++) {
2625      composeCodeableConcept(t, "AdverseEvent", "outcome", element.getOutcome().get(i), i);
2626    }
2627    if (element.hasRecorder()) {
2628      composeReference(t, "AdverseEvent", "recorder", element.getRecorder(), -1);
2629    }
2630    for (int i = 0; i < element.getParticipant().size(); i++) {
2631      composeAdverseEventParticipantComponent(t, "AdverseEvent", "participant", element.getParticipant().get(i), i);
2632    }
2633    for (int i = 0; i < element.getStudy().size(); i++) {
2634      composeReference(t, "AdverseEvent", "study", element.getStudy().get(i), i);
2635    }
2636    if (element.hasExpectedInResearchStudyElement()) {
2637      composeBoolean(t, "AdverseEvent", "expectedInResearchStudy", element.getExpectedInResearchStudyElement(), -1);
2638    }
2639    for (int i = 0; i < element.getSuspectEntity().size(); i++) {
2640      composeAdverseEventSuspectEntityComponent(t, "AdverseEvent", "suspectEntity", element.getSuspectEntity().get(i), i);
2641    }
2642    for (int i = 0; i < element.getContributingFactor().size(); i++) {
2643      composeAdverseEventContributingFactorComponent(t, "AdverseEvent", "contributingFactor", element.getContributingFactor().get(i), i);
2644    }
2645    for (int i = 0; i < element.getPreventiveAction().size(); i++) {
2646      composeAdverseEventPreventiveActionComponent(t, "AdverseEvent", "preventiveAction", element.getPreventiveAction().get(i), i);
2647    }
2648    for (int i = 0; i < element.getMitigatingAction().size(); i++) {
2649      composeAdverseEventMitigatingActionComponent(t, "AdverseEvent", "mitigatingAction", element.getMitigatingAction().get(i), i);
2650    }
2651    for (int i = 0; i < element.getSupportingInfo().size(); i++) {
2652      composeAdverseEventSupportingInfoComponent(t, "AdverseEvent", "supportingInfo", element.getSupportingInfo().get(i), i);
2653    }
2654    for (int i = 0; i < element.getNote().size(); i++) {
2655      composeAnnotation(t, "AdverseEvent", "note", element.getNote().get(i), i);
2656    }
2657  }
2658
2659  protected void composeAdverseEventParticipantComponent(Complex parent, String parentType, String name, AdverseEvent.AdverseEventParticipantComponent element, int index) {
2660    if (element == null) 
2661      return;
2662    Complex t;
2663    if (Utilities.noString(parentType))
2664      t = parent;
2665    else {
2666      t = parent.predicate("fhir:"+parentType+'.'+name);
2667    }
2668    composeBackboneElement(t, "participant", name, element, index);
2669    if (element.hasFunction()) {
2670      composeCodeableConcept(t, "AdverseEventParticipantComponent", "function", element.getFunction(), -1);
2671    }
2672    if (element.hasActor()) {
2673      composeReference(t, "AdverseEventParticipantComponent", "actor", element.getActor(), -1);
2674    }
2675  }
2676
2677  protected void composeAdverseEventSuspectEntityComponent(Complex parent, String parentType, String name, AdverseEvent.AdverseEventSuspectEntityComponent element, int index) {
2678    if (element == null) 
2679      return;
2680    Complex t;
2681    if (Utilities.noString(parentType))
2682      t = parent;
2683    else {
2684      t = parent.predicate("fhir:"+parentType+'.'+name);
2685    }
2686    composeBackboneElement(t, "suspectEntity", name, element, index);
2687    if (element.hasInstance()) {
2688      composeType(t, "AdverseEventSuspectEntityComponent", "instance", element.getInstance(), -1);
2689    }
2690    if (element.hasCausality()) {
2691      composeAdverseEventSuspectEntityCausalityComponent(t, "AdverseEventSuspectEntityComponent", "causality", element.getCausality(), -1);
2692    }
2693  }
2694
2695  protected void composeAdverseEventSuspectEntityCausalityComponent(Complex parent, String parentType, String name, AdverseEvent.AdverseEventSuspectEntityCausalityComponent element, int index) {
2696    if (element == null) 
2697      return;
2698    Complex t;
2699    if (Utilities.noString(parentType))
2700      t = parent;
2701    else {
2702      t = parent.predicate("fhir:"+parentType+'.'+name);
2703    }
2704    composeBackboneElement(t, "causality", name, element, index);
2705    if (element.hasAssessmentMethod()) {
2706      composeCodeableConcept(t, "AdverseEventSuspectEntityCausalityComponent", "assessmentMethod", element.getAssessmentMethod(), -1);
2707    }
2708    if (element.hasEntityRelatedness()) {
2709      composeCodeableConcept(t, "AdverseEventSuspectEntityCausalityComponent", "entityRelatedness", element.getEntityRelatedness(), -1);
2710    }
2711    if (element.hasAuthor()) {
2712      composeReference(t, "AdverseEventSuspectEntityCausalityComponent", "author", element.getAuthor(), -1);
2713    }
2714  }
2715
2716  protected void composeAdverseEventContributingFactorComponent(Complex parent, String parentType, String name, AdverseEvent.AdverseEventContributingFactorComponent element, int index) {
2717    if (element == null) 
2718      return;
2719    Complex t;
2720    if (Utilities.noString(parentType))
2721      t = parent;
2722    else {
2723      t = parent.predicate("fhir:"+parentType+'.'+name);
2724    }
2725    composeBackboneElement(t, "contributingFactor", name, element, index);
2726    if (element.hasItem()) {
2727      composeType(t, "AdverseEventContributingFactorComponent", "item", element.getItem(), -1);
2728    }
2729  }
2730
2731  protected void composeAdverseEventPreventiveActionComponent(Complex parent, String parentType, String name, AdverseEvent.AdverseEventPreventiveActionComponent element, int index) {
2732    if (element == null) 
2733      return;
2734    Complex t;
2735    if (Utilities.noString(parentType))
2736      t = parent;
2737    else {
2738      t = parent.predicate("fhir:"+parentType+'.'+name);
2739    }
2740    composeBackboneElement(t, "preventiveAction", name, element, index);
2741    if (element.hasItem()) {
2742      composeType(t, "AdverseEventPreventiveActionComponent", "item", element.getItem(), -1);
2743    }
2744  }
2745
2746  protected void composeAdverseEventMitigatingActionComponent(Complex parent, String parentType, String name, AdverseEvent.AdverseEventMitigatingActionComponent element, int index) {
2747    if (element == null) 
2748      return;
2749    Complex t;
2750    if (Utilities.noString(parentType))
2751      t = parent;
2752    else {
2753      t = parent.predicate("fhir:"+parentType+'.'+name);
2754    }
2755    composeBackboneElement(t, "mitigatingAction", name, element, index);
2756    if (element.hasItem()) {
2757      composeType(t, "AdverseEventMitigatingActionComponent", "item", element.getItem(), -1);
2758    }
2759  }
2760
2761  protected void composeAdverseEventSupportingInfoComponent(Complex parent, String parentType, String name, AdverseEvent.AdverseEventSupportingInfoComponent element, int index) {
2762    if (element == null) 
2763      return;
2764    Complex t;
2765    if (Utilities.noString(parentType))
2766      t = parent;
2767    else {
2768      t = parent.predicate("fhir:"+parentType+'.'+name);
2769    }
2770    composeBackboneElement(t, "supportingInfo", name, element, index);
2771    if (element.hasItem()) {
2772      composeType(t, "AdverseEventSupportingInfoComponent", "item", element.getItem(), -1);
2773    }
2774  }
2775
2776  protected void composeAllergyIntolerance(Complex parent, String parentType, String name, AllergyIntolerance element, int index) {
2777    if (element == null) 
2778      return;
2779    Complex t;
2780    if (Utilities.noString(parentType))
2781      t = parent;
2782    else {
2783      t = parent.predicate("fhir:"+parentType+'.'+name);
2784    }
2785    composeDomainResource(t, "AllergyIntolerance", name, element, index);
2786    for (int i = 0; i < element.getIdentifier().size(); i++) {
2787      composeIdentifier(t, "AllergyIntolerance", "identifier", element.getIdentifier().get(i), i);
2788    }
2789    if (element.hasClinicalStatus()) {
2790      composeCodeableConcept(t, "AllergyIntolerance", "clinicalStatus", element.getClinicalStatus(), -1);
2791    }
2792    if (element.hasVerificationStatus()) {
2793      composeCodeableConcept(t, "AllergyIntolerance", "verificationStatus", element.getVerificationStatus(), -1);
2794    }
2795    if (element.hasType()) {
2796      composeCodeableConcept(t, "AllergyIntolerance", "type", element.getType(), -1);
2797    }
2798    for (int i = 0; i < element.getCategory().size(); i++) {
2799      composeEnum(t, "AllergyIntolerance", "category", element.getCategory().get(i), i);
2800    }
2801    if (element.hasCriticalityElement()) {
2802      composeEnum(t, "AllergyIntolerance", "criticality", element.getCriticalityElement(), -1);
2803    }
2804    if (element.hasCode()) {
2805      composeCodeableConcept(t, "AllergyIntolerance", "code", element.getCode(), -1);
2806    }
2807    if (element.hasPatient()) {
2808      composeReference(t, "AllergyIntolerance", "patient", element.getPatient(), -1);
2809    }
2810    if (element.hasEncounter()) {
2811      composeReference(t, "AllergyIntolerance", "encounter", element.getEncounter(), -1);
2812    }
2813    if (element.hasOnset()) {
2814      composeType(t, "AllergyIntolerance", "onset", element.getOnset(), -1);
2815    }
2816    if (element.hasRecordedDateElement()) {
2817      composeDateTime(t, "AllergyIntolerance", "recordedDate", element.getRecordedDateElement(), -1);
2818    }
2819    for (int i = 0; i < element.getParticipant().size(); i++) {
2820      composeAllergyIntoleranceParticipantComponent(t, "AllergyIntolerance", "participant", element.getParticipant().get(i), i);
2821    }
2822    if (element.hasLastOccurrenceElement()) {
2823      composeDateTime(t, "AllergyIntolerance", "lastOccurrence", element.getLastOccurrenceElement(), -1);
2824    }
2825    for (int i = 0; i < element.getNote().size(); i++) {
2826      composeAnnotation(t, "AllergyIntolerance", "note", element.getNote().get(i), i);
2827    }
2828    for (int i = 0; i < element.getReaction().size(); i++) {
2829      composeAllergyIntoleranceReactionComponent(t, "AllergyIntolerance", "reaction", element.getReaction().get(i), i);
2830    }
2831  }
2832
2833  protected void composeAllergyIntoleranceParticipantComponent(Complex parent, String parentType, String name, AllergyIntolerance.AllergyIntoleranceParticipantComponent element, int index) {
2834    if (element == null) 
2835      return;
2836    Complex t;
2837    if (Utilities.noString(parentType))
2838      t = parent;
2839    else {
2840      t = parent.predicate("fhir:"+parentType+'.'+name);
2841    }
2842    composeBackboneElement(t, "participant", name, element, index);
2843    if (element.hasFunction()) {
2844      composeCodeableConcept(t, "AllergyIntoleranceParticipantComponent", "function", element.getFunction(), -1);
2845    }
2846    if (element.hasActor()) {
2847      composeReference(t, "AllergyIntoleranceParticipantComponent", "actor", element.getActor(), -1);
2848    }
2849  }
2850
2851  protected void composeAllergyIntoleranceReactionComponent(Complex parent, String parentType, String name, AllergyIntolerance.AllergyIntoleranceReactionComponent element, int index) {
2852    if (element == null) 
2853      return;
2854    Complex t;
2855    if (Utilities.noString(parentType))
2856      t = parent;
2857    else {
2858      t = parent.predicate("fhir:"+parentType+'.'+name);
2859    }
2860    composeBackboneElement(t, "reaction", name, element, index);
2861    if (element.hasSubstance()) {
2862      composeCodeableConcept(t, "AllergyIntoleranceReactionComponent", "substance", element.getSubstance(), -1);
2863    }
2864    for (int i = 0; i < element.getManifestation().size(); i++) {
2865      composeCodeableReference(t, "AllergyIntoleranceReactionComponent", "manifestation", element.getManifestation().get(i), i);
2866    }
2867    if (element.hasDescriptionElement()) {
2868      composeString(t, "AllergyIntoleranceReactionComponent", "description", element.getDescriptionElement(), -1);
2869    }
2870    if (element.hasOnsetElement()) {
2871      composeDateTime(t, "AllergyIntoleranceReactionComponent", "onset", element.getOnsetElement(), -1);
2872    }
2873    if (element.hasSeverityElement()) {
2874      composeEnum(t, "AllergyIntoleranceReactionComponent", "severity", element.getSeverityElement(), -1);
2875    }
2876    if (element.hasExposureRoute()) {
2877      composeCodeableConcept(t, "AllergyIntoleranceReactionComponent", "exposureRoute", element.getExposureRoute(), -1);
2878    }
2879    for (int i = 0; i < element.getNote().size(); i++) {
2880      composeAnnotation(t, "AllergyIntoleranceReactionComponent", "note", element.getNote().get(i), i);
2881    }
2882  }
2883
2884  protected void composeAppointment(Complex parent, String parentType, String name, Appointment element, int index) {
2885    if (element == null) 
2886      return;
2887    Complex t;
2888    if (Utilities.noString(parentType))
2889      t = parent;
2890    else {
2891      t = parent.predicate("fhir:"+parentType+'.'+name);
2892    }
2893    composeDomainResource(t, "Appointment", name, element, index);
2894    for (int i = 0; i < element.getIdentifier().size(); i++) {
2895      composeIdentifier(t, "Appointment", "identifier", element.getIdentifier().get(i), i);
2896    }
2897    if (element.hasStatusElement()) {
2898      composeEnum(t, "Appointment", "status", element.getStatusElement(), -1);
2899    }
2900    if (element.hasCancellationReason()) {
2901      composeCodeableConcept(t, "Appointment", "cancellationReason", element.getCancellationReason(), -1);
2902    }
2903    for (int i = 0; i < element.getClass_().size(); i++) {
2904      composeCodeableConcept(t, "Appointment", "class", element.getClass_().get(i), i);
2905    }
2906    for (int i = 0; i < element.getServiceCategory().size(); i++) {
2907      composeCodeableConcept(t, "Appointment", "serviceCategory", element.getServiceCategory().get(i), i);
2908    }
2909    for (int i = 0; i < element.getServiceType().size(); i++) {
2910      composeCodeableReference(t, "Appointment", "serviceType", element.getServiceType().get(i), i);
2911    }
2912    for (int i = 0; i < element.getSpecialty().size(); i++) {
2913      composeCodeableConcept(t, "Appointment", "specialty", element.getSpecialty().get(i), i);
2914    }
2915    if (element.hasAppointmentType()) {
2916      composeCodeableConcept(t, "Appointment", "appointmentType", element.getAppointmentType(), -1);
2917    }
2918    for (int i = 0; i < element.getReason().size(); i++) {
2919      composeCodeableReference(t, "Appointment", "reason", element.getReason().get(i), i);
2920    }
2921    if (element.hasPriority()) {
2922      composeCodeableConcept(t, "Appointment", "priority", element.getPriority(), -1);
2923    }
2924    if (element.hasDescriptionElement()) {
2925      composeString(t, "Appointment", "description", element.getDescriptionElement(), -1);
2926    }
2927    for (int i = 0; i < element.getReplaces().size(); i++) {
2928      composeReference(t, "Appointment", "replaces", element.getReplaces().get(i), i);
2929    }
2930    for (int i = 0; i < element.getVirtualService().size(); i++) {
2931      composeVirtualServiceDetail(t, "Appointment", "virtualService", element.getVirtualService().get(i), i);
2932    }
2933    for (int i = 0; i < element.getSupportingInformation().size(); i++) {
2934      composeReference(t, "Appointment", "supportingInformation", element.getSupportingInformation().get(i), i);
2935    }
2936    if (element.hasPreviousAppointment()) {
2937      composeReference(t, "Appointment", "previousAppointment", element.getPreviousAppointment(), -1);
2938    }
2939    if (element.hasOriginatingAppointment()) {
2940      composeReference(t, "Appointment", "originatingAppointment", element.getOriginatingAppointment(), -1);
2941    }
2942    if (element.hasStartElement()) {
2943      composeInstant(t, "Appointment", "start", element.getStartElement(), -1);
2944    }
2945    if (element.hasEndElement()) {
2946      composeInstant(t, "Appointment", "end", element.getEndElement(), -1);
2947    }
2948    if (element.hasMinutesDurationElement()) {
2949      composePositiveInt(t, "Appointment", "minutesDuration", element.getMinutesDurationElement(), -1);
2950    }
2951    for (int i = 0; i < element.getSlot().size(); i++) {
2952      composeReference(t, "Appointment", "slot", element.getSlot().get(i), i);
2953    }
2954    for (int i = 0; i < element.getAccount().size(); i++) {
2955      composeReference(t, "Appointment", "account", element.getAccount().get(i), i);
2956    }
2957    if (element.hasCreatedElement()) {
2958      composeDateTime(t, "Appointment", "created", element.getCreatedElement(), -1);
2959    }
2960    for (int i = 0; i < element.getNote().size(); i++) {
2961      composeAnnotation(t, "Appointment", "note", element.getNote().get(i), i);
2962    }
2963    for (int i = 0; i < element.getPatientInstruction().size(); i++) {
2964      composeCodeableReference(t, "Appointment", "patientInstruction", element.getPatientInstruction().get(i), i);
2965    }
2966    for (int i = 0; i < element.getBasedOn().size(); i++) {
2967      composeReference(t, "Appointment", "basedOn", element.getBasedOn().get(i), i);
2968    }
2969    if (element.hasSubject()) {
2970      composeReference(t, "Appointment", "subject", element.getSubject(), -1);
2971    }
2972    for (int i = 0; i < element.getParticipant().size(); i++) {
2973      composeAppointmentParticipantComponent(t, "Appointment", "participant", element.getParticipant().get(i), i);
2974    }
2975    for (int i = 0; i < element.getRequestedPeriod().size(); i++) {
2976      composePeriod(t, "Appointment", "requestedPeriod", element.getRequestedPeriod().get(i), i);
2977    }
2978    if (element.hasRecurrenceIdElement()) {
2979      composePositiveInt(t, "Appointment", "recurrenceId", element.getRecurrenceIdElement(), -1);
2980    }
2981    if (element.hasOccurrenceChangedElement()) {
2982      composeBoolean(t, "Appointment", "occurrenceChanged", element.getOccurrenceChangedElement(), -1);
2983    }
2984    for (int i = 0; i < element.getRecurrenceTemplate().size(); i++) {
2985      composeAppointmentRecurrenceTemplateComponent(t, "Appointment", "recurrenceTemplate", element.getRecurrenceTemplate().get(i), i);
2986    }
2987  }
2988
2989  protected void composeAppointmentParticipantComponent(Complex parent, String parentType, String name, Appointment.AppointmentParticipantComponent element, int index) {
2990    if (element == null) 
2991      return;
2992    Complex t;
2993    if (Utilities.noString(parentType))
2994      t = parent;
2995    else {
2996      t = parent.predicate("fhir:"+parentType+'.'+name);
2997    }
2998    composeBackboneElement(t, "participant", name, element, index);
2999    for (int i = 0; i < element.getType().size(); i++) {
3000      composeCodeableConcept(t, "AppointmentParticipantComponent", "type", element.getType().get(i), i);
3001    }
3002    if (element.hasPeriod()) {
3003      composePeriod(t, "AppointmentParticipantComponent", "period", element.getPeriod(), -1);
3004    }
3005    if (element.hasActor()) {
3006      composeReference(t, "AppointmentParticipantComponent", "actor", element.getActor(), -1);
3007    }
3008    if (element.hasRequiredElement()) {
3009      composeBoolean(t, "AppointmentParticipantComponent", "required", element.getRequiredElement(), -1);
3010    }
3011    if (element.hasStatusElement()) {
3012      composeEnum(t, "AppointmentParticipantComponent", "status", element.getStatusElement(), -1);
3013    }
3014  }
3015
3016  protected void composeAppointmentRecurrenceTemplateComponent(Complex parent, String parentType, String name, Appointment.AppointmentRecurrenceTemplateComponent element, int index) {
3017    if (element == null) 
3018      return;
3019    Complex t;
3020    if (Utilities.noString(parentType))
3021      t = parent;
3022    else {
3023      t = parent.predicate("fhir:"+parentType+'.'+name);
3024    }
3025    composeBackboneElement(t, "recurrenceTemplate", name, element, index);
3026    if (element.hasTimezone()) {
3027      composeCodeableConcept(t, "AppointmentRecurrenceTemplateComponent", "timezone", element.getTimezone(), -1);
3028    }
3029    if (element.hasRecurrenceType()) {
3030      composeCodeableConcept(t, "AppointmentRecurrenceTemplateComponent", "recurrenceType", element.getRecurrenceType(), -1);
3031    }
3032    if (element.hasLastOccurrenceDateElement()) {
3033      composeDate(t, "AppointmentRecurrenceTemplateComponent", "lastOccurrenceDate", element.getLastOccurrenceDateElement(), -1);
3034    }
3035    if (element.hasOccurrenceCountElement()) {
3036      composePositiveInt(t, "AppointmentRecurrenceTemplateComponent", "occurrenceCount", element.getOccurrenceCountElement(), -1);
3037    }
3038    for (int i = 0; i < element.getOccurrenceDate().size(); i++) {
3039      composeDate(t, "AppointmentRecurrenceTemplateComponent", "occurrenceDate", element.getOccurrenceDate().get(i), i);
3040    }
3041    if (element.hasWeeklyTemplate()) {
3042      composeAppointmentRecurrenceTemplateWeeklyTemplateComponent(t, "AppointmentRecurrenceTemplateComponent", "weeklyTemplate", element.getWeeklyTemplate(), -1);
3043    }
3044    if (element.hasMonthlyTemplate()) {
3045      composeAppointmentRecurrenceTemplateMonthlyTemplateComponent(t, "AppointmentRecurrenceTemplateComponent", "monthlyTemplate", element.getMonthlyTemplate(), -1);
3046    }
3047    if (element.hasYearlyTemplate()) {
3048      composeAppointmentRecurrenceTemplateYearlyTemplateComponent(t, "AppointmentRecurrenceTemplateComponent", "yearlyTemplate", element.getYearlyTemplate(), -1);
3049    }
3050    for (int i = 0; i < element.getExcludingDate().size(); i++) {
3051      composeDate(t, "AppointmentRecurrenceTemplateComponent", "excludingDate", element.getExcludingDate().get(i), i);
3052    }
3053    for (int i = 0; i < element.getExcludingRecurrenceId().size(); i++) {
3054      composePositiveInt(t, "AppointmentRecurrenceTemplateComponent", "excludingRecurrenceId", element.getExcludingRecurrenceId().get(i), i);
3055    }
3056  }
3057
3058  protected void composeAppointmentRecurrenceTemplateWeeklyTemplateComponent(Complex parent, String parentType, String name, Appointment.AppointmentRecurrenceTemplateWeeklyTemplateComponent element, int index) {
3059    if (element == null) 
3060      return;
3061    Complex t;
3062    if (Utilities.noString(parentType))
3063      t = parent;
3064    else {
3065      t = parent.predicate("fhir:"+parentType+'.'+name);
3066    }
3067    composeBackboneElement(t, "weeklyTemplate", name, element, index);
3068    if (element.hasMondayElement()) {
3069      composeBoolean(t, "AppointmentRecurrenceTemplateWeeklyTemplateComponent", "monday", element.getMondayElement(), -1);
3070    }
3071    if (element.hasTuesdayElement()) {
3072      composeBoolean(t, "AppointmentRecurrenceTemplateWeeklyTemplateComponent", "tuesday", element.getTuesdayElement(), -1);
3073    }
3074    if (element.hasWednesdayElement()) {
3075      composeBoolean(t, "AppointmentRecurrenceTemplateWeeklyTemplateComponent", "wednesday", element.getWednesdayElement(), -1);
3076    }
3077    if (element.hasThursdayElement()) {
3078      composeBoolean(t, "AppointmentRecurrenceTemplateWeeklyTemplateComponent", "thursday", element.getThursdayElement(), -1);
3079    }
3080    if (element.hasFridayElement()) {
3081      composeBoolean(t, "AppointmentRecurrenceTemplateWeeklyTemplateComponent", "friday", element.getFridayElement(), -1);
3082    }
3083    if (element.hasSaturdayElement()) {
3084      composeBoolean(t, "AppointmentRecurrenceTemplateWeeklyTemplateComponent", "saturday", element.getSaturdayElement(), -1);
3085    }
3086    if (element.hasSundayElement()) {
3087      composeBoolean(t, "AppointmentRecurrenceTemplateWeeklyTemplateComponent", "sunday", element.getSundayElement(), -1);
3088    }
3089    if (element.hasWeekIntervalElement()) {
3090      composePositiveInt(t, "AppointmentRecurrenceTemplateWeeklyTemplateComponent", "weekInterval", element.getWeekIntervalElement(), -1);
3091    }
3092  }
3093
3094  protected void composeAppointmentRecurrenceTemplateMonthlyTemplateComponent(Complex parent, String parentType, String name, Appointment.AppointmentRecurrenceTemplateMonthlyTemplateComponent element, int index) {
3095    if (element == null) 
3096      return;
3097    Complex t;
3098    if (Utilities.noString(parentType))
3099      t = parent;
3100    else {
3101      t = parent.predicate("fhir:"+parentType+'.'+name);
3102    }
3103    composeBackboneElement(t, "monthlyTemplate", name, element, index);
3104    if (element.hasDayOfMonthElement()) {
3105      composePositiveInt(t, "AppointmentRecurrenceTemplateMonthlyTemplateComponent", "dayOfMonth", element.getDayOfMonthElement(), -1);
3106    }
3107    if (element.hasNthWeekOfMonth()) {
3108      composeCoding(t, "AppointmentRecurrenceTemplateMonthlyTemplateComponent", "nthWeekOfMonth", element.getNthWeekOfMonth(), -1);
3109    }
3110    if (element.hasDayOfWeek()) {
3111      composeCoding(t, "AppointmentRecurrenceTemplateMonthlyTemplateComponent", "dayOfWeek", element.getDayOfWeek(), -1);
3112    }
3113    if (element.hasMonthIntervalElement()) {
3114      composePositiveInt(t, "AppointmentRecurrenceTemplateMonthlyTemplateComponent", "monthInterval", element.getMonthIntervalElement(), -1);
3115    }
3116  }
3117
3118  protected void composeAppointmentRecurrenceTemplateYearlyTemplateComponent(Complex parent, String parentType, String name, Appointment.AppointmentRecurrenceTemplateYearlyTemplateComponent element, int index) {
3119    if (element == null) 
3120      return;
3121    Complex t;
3122    if (Utilities.noString(parentType))
3123      t = parent;
3124    else {
3125      t = parent.predicate("fhir:"+parentType+'.'+name);
3126    }
3127    composeBackboneElement(t, "yearlyTemplate", name, element, index);
3128    if (element.hasYearIntervalElement()) {
3129      composePositiveInt(t, "AppointmentRecurrenceTemplateYearlyTemplateComponent", "yearInterval", element.getYearIntervalElement(), -1);
3130    }
3131  }
3132
3133  protected void composeAppointmentResponse(Complex parent, String parentType, String name, AppointmentResponse element, int index) {
3134    if (element == null) 
3135      return;
3136    Complex t;
3137    if (Utilities.noString(parentType))
3138      t = parent;
3139    else {
3140      t = parent.predicate("fhir:"+parentType+'.'+name);
3141    }
3142    composeDomainResource(t, "AppointmentResponse", name, element, index);
3143    for (int i = 0; i < element.getIdentifier().size(); i++) {
3144      composeIdentifier(t, "AppointmentResponse", "identifier", element.getIdentifier().get(i), i);
3145    }
3146    if (element.hasAppointment()) {
3147      composeReference(t, "AppointmentResponse", "appointment", element.getAppointment(), -1);
3148    }
3149    if (element.hasProposedNewTimeElement()) {
3150      composeBoolean(t, "AppointmentResponse", "proposedNewTime", element.getProposedNewTimeElement(), -1);
3151    }
3152    if (element.hasStartElement()) {
3153      composeInstant(t, "AppointmentResponse", "start", element.getStartElement(), -1);
3154    }
3155    if (element.hasEndElement()) {
3156      composeInstant(t, "AppointmentResponse", "end", element.getEndElement(), -1);
3157    }
3158    for (int i = 0; i < element.getParticipantType().size(); i++) {
3159      composeCodeableConcept(t, "AppointmentResponse", "participantType", element.getParticipantType().get(i), i);
3160    }
3161    if (element.hasActor()) {
3162      composeReference(t, "AppointmentResponse", "actor", element.getActor(), -1);
3163    }
3164    if (element.hasParticipantStatusElement()) {
3165      composeEnum(t, "AppointmentResponse", "participantStatus", element.getParticipantStatusElement(), -1);
3166    }
3167    if (element.hasCommentElement()) {
3168      composeString(t, "AppointmentResponse", "comment", element.getCommentElement(), -1);
3169    }
3170    if (element.hasRecurringElement()) {
3171      composeBoolean(t, "AppointmentResponse", "recurring", element.getRecurringElement(), -1);
3172    }
3173    if (element.hasOccurrenceDateElement()) {
3174      composeDate(t, "AppointmentResponse", "occurrenceDate", element.getOccurrenceDateElement(), -1);
3175    }
3176    if (element.hasRecurrenceIdElement()) {
3177      composePositiveInt(t, "AppointmentResponse", "recurrenceId", element.getRecurrenceIdElement(), -1);
3178    }
3179  }
3180
3181  protected void composeArtifactAssessment(Complex parent, String parentType, String name, ArtifactAssessment element, int index) {
3182    if (element == null) 
3183      return;
3184    Complex t;
3185    if (Utilities.noString(parentType))
3186      t = parent;
3187    else {
3188      t = parent.predicate("fhir:"+parentType+'.'+name);
3189    }
3190    composeDomainResource(t, "ArtifactAssessment", name, element, index);
3191    for (int i = 0; i < element.getIdentifier().size(); i++) {
3192      composeIdentifier(t, "ArtifactAssessment", "identifier", element.getIdentifier().get(i), i);
3193    }
3194    if (element.hasCiteAs()) {
3195      composeType(t, "ArtifactAssessment", "citeAs", element.getCiteAs(), -1);
3196    }
3197    if (element.hasDateElement()) {
3198      composeDateTime(t, "ArtifactAssessment", "date", element.getDateElement(), -1);
3199    }
3200    if (element.hasCopyrightElement()) {
3201      composeMarkdown(t, "ArtifactAssessment", "copyright", element.getCopyrightElement(), -1);
3202    }
3203    if (element.hasApprovalDateElement()) {
3204      composeDate(t, "ArtifactAssessment", "approvalDate", element.getApprovalDateElement(), -1);
3205    }
3206    if (element.hasLastReviewDateElement()) {
3207      composeDate(t, "ArtifactAssessment", "lastReviewDate", element.getLastReviewDateElement(), -1);
3208    }
3209    if (element.hasArtifact()) {
3210      composeType(t, "ArtifactAssessment", "artifact", element.getArtifact(), -1);
3211    }
3212    for (int i = 0; i < element.getContent().size(); i++) {
3213      composeArtifactAssessmentContentComponent(t, "ArtifactAssessment", "content", element.getContent().get(i), i);
3214    }
3215    if (element.hasWorkflowStatusElement()) {
3216      composeEnum(t, "ArtifactAssessment", "workflowStatus", element.getWorkflowStatusElement(), -1);
3217    }
3218    if (element.hasDispositionElement()) {
3219      composeEnum(t, "ArtifactAssessment", "disposition", element.getDispositionElement(), -1);
3220    }
3221  }
3222
3223  protected void composeArtifactAssessmentContentComponent(Complex parent, String parentType, String name, ArtifactAssessment.ArtifactAssessmentContentComponent element, int index) {
3224    if (element == null) 
3225      return;
3226    Complex t;
3227    if (Utilities.noString(parentType))
3228      t = parent;
3229    else {
3230      t = parent.predicate("fhir:"+parentType+'.'+name);
3231    }
3232    composeBackboneElement(t, "content", name, element, index);
3233    if (element.hasInformationTypeElement()) {
3234      composeEnum(t, "ArtifactAssessmentContentComponent", "informationType", element.getInformationTypeElement(), -1);
3235    }
3236    if (element.hasSummaryElement()) {
3237      composeMarkdown(t, "ArtifactAssessmentContentComponent", "summary", element.getSummaryElement(), -1);
3238    }
3239    if (element.hasType()) {
3240      composeCodeableConcept(t, "ArtifactAssessmentContentComponent", "type", element.getType(), -1);
3241    }
3242    for (int i = 0; i < element.getClassifier().size(); i++) {
3243      composeCodeableConcept(t, "ArtifactAssessmentContentComponent", "classifier", element.getClassifier().get(i), i);
3244    }
3245    if (element.hasAuthor()) {
3246      composeReference(t, "ArtifactAssessmentContentComponent", "author", element.getAuthor(), -1);
3247    }
3248    for (int i = 0; i < element.getPath().size(); i++) {
3249      composeUri(t, "ArtifactAssessmentContentComponent", "path", element.getPath().get(i), i);
3250    }
3251    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
3252      composeRelatedArtifact(t, "ArtifactAssessmentContentComponent", "relatedArtifact", element.getRelatedArtifact().get(i), i);
3253    }
3254    if (element.hasFreeToShareElement()) {
3255      composeBoolean(t, "ArtifactAssessmentContentComponent", "freeToShare", element.getFreeToShareElement(), -1);
3256    }
3257    for (int i = 0; i < element.getComponent().size(); i++) {
3258      composeArtifactAssessmentContentComponent(t, "ArtifactAssessmentContentComponent", "component", element.getComponent().get(i), i);
3259    }
3260  }
3261
3262  protected void composeAuditEvent(Complex parent, String parentType, String name, AuditEvent element, int index) {
3263    if (element == null) 
3264      return;
3265    Complex t;
3266    if (Utilities.noString(parentType))
3267      t = parent;
3268    else {
3269      t = parent.predicate("fhir:"+parentType+'.'+name);
3270    }
3271    composeDomainResource(t, "AuditEvent", name, element, index);
3272    for (int i = 0; i < element.getCategory().size(); i++) {
3273      composeCodeableConcept(t, "AuditEvent", "category", element.getCategory().get(i), i);
3274    }
3275    if (element.hasCode()) {
3276      composeCodeableConcept(t, "AuditEvent", "code", element.getCode(), -1);
3277    }
3278    if (element.hasActionElement()) {
3279      composeEnum(t, "AuditEvent", "action", element.getActionElement(), -1);
3280    }
3281    if (element.hasSeverityElement()) {
3282      composeEnum(t, "AuditEvent", "severity", element.getSeverityElement(), -1);
3283    }
3284    if (element.hasOccurred()) {
3285      composeType(t, "AuditEvent", "occurred", element.getOccurred(), -1);
3286    }
3287    if (element.hasRecordedElement()) {
3288      composeInstant(t, "AuditEvent", "recorded", element.getRecordedElement(), -1);
3289    }
3290    if (element.hasOutcome()) {
3291      composeAuditEventOutcomeComponent(t, "AuditEvent", "outcome", element.getOutcome(), -1);
3292    }
3293    for (int i = 0; i < element.getAuthorization().size(); i++) {
3294      composeCodeableConcept(t, "AuditEvent", "authorization", element.getAuthorization().get(i), i);
3295    }
3296    for (int i = 0; i < element.getBasedOn().size(); i++) {
3297      composeReference(t, "AuditEvent", "basedOn", element.getBasedOn().get(i), i);
3298    }
3299    if (element.hasPatient()) {
3300      composeReference(t, "AuditEvent", "patient", element.getPatient(), -1);
3301    }
3302    if (element.hasEncounter()) {
3303      composeReference(t, "AuditEvent", "encounter", element.getEncounter(), -1);
3304    }
3305    for (int i = 0; i < element.getAgent().size(); i++) {
3306      composeAuditEventAgentComponent(t, "AuditEvent", "agent", element.getAgent().get(i), i);
3307    }
3308    if (element.hasSource()) {
3309      composeAuditEventSourceComponent(t, "AuditEvent", "source", element.getSource(), -1);
3310    }
3311    for (int i = 0; i < element.getEntity().size(); i++) {
3312      composeAuditEventEntityComponent(t, "AuditEvent", "entity", element.getEntity().get(i), i);
3313    }
3314  }
3315
3316  protected void composeAuditEventOutcomeComponent(Complex parent, String parentType, String name, AuditEvent.AuditEventOutcomeComponent element, int index) {
3317    if (element == null) 
3318      return;
3319    Complex t;
3320    if (Utilities.noString(parentType))
3321      t = parent;
3322    else {
3323      t = parent.predicate("fhir:"+parentType+'.'+name);
3324    }
3325    composeBackboneElement(t, "outcome", name, element, index);
3326    if (element.hasCode()) {
3327      composeCoding(t, "AuditEventOutcomeComponent", "code", element.getCode(), -1);
3328    }
3329    for (int i = 0; i < element.getDetail().size(); i++) {
3330      composeCodeableConcept(t, "AuditEventOutcomeComponent", "detail", element.getDetail().get(i), i);
3331    }
3332  }
3333
3334  protected void composeAuditEventAgentComponent(Complex parent, String parentType, String name, AuditEvent.AuditEventAgentComponent element, int index) {
3335    if (element == null) 
3336      return;
3337    Complex t;
3338    if (Utilities.noString(parentType))
3339      t = parent;
3340    else {
3341      t = parent.predicate("fhir:"+parentType+'.'+name);
3342    }
3343    composeBackboneElement(t, "agent", name, element, index);
3344    if (element.hasType()) {
3345      composeCodeableConcept(t, "AuditEventAgentComponent", "type", element.getType(), -1);
3346    }
3347    for (int i = 0; i < element.getRole().size(); i++) {
3348      composeCodeableConcept(t, "AuditEventAgentComponent", "role", element.getRole().get(i), i);
3349    }
3350    if (element.hasWho()) {
3351      composeReference(t, "AuditEventAgentComponent", "who", element.getWho(), -1);
3352    }
3353    if (element.hasRequestorElement()) {
3354      composeBoolean(t, "AuditEventAgentComponent", "requestor", element.getRequestorElement(), -1);
3355    }
3356    if (element.hasLocation()) {
3357      composeReference(t, "AuditEventAgentComponent", "location", element.getLocation(), -1);
3358    }
3359    for (int i = 0; i < element.getPolicy().size(); i++) {
3360      composeUri(t, "AuditEventAgentComponent", "policy", element.getPolicy().get(i), i);
3361    }
3362    if (element.hasNetwork()) {
3363      composeType(t, "AuditEventAgentComponent", "network", element.getNetwork(), -1);
3364    }
3365    for (int i = 0; i < element.getAuthorization().size(); i++) {
3366      composeCodeableConcept(t, "AuditEventAgentComponent", "authorization", element.getAuthorization().get(i), i);
3367    }
3368  }
3369
3370  protected void composeAuditEventSourceComponent(Complex parent, String parentType, String name, AuditEvent.AuditEventSourceComponent element, int index) {
3371    if (element == null) 
3372      return;
3373    Complex t;
3374    if (Utilities.noString(parentType))
3375      t = parent;
3376    else {
3377      t = parent.predicate("fhir:"+parentType+'.'+name);
3378    }
3379    composeBackboneElement(t, "source", name, element, index);
3380    if (element.hasSite()) {
3381      composeReference(t, "AuditEventSourceComponent", "site", element.getSite(), -1);
3382    }
3383    if (element.hasObserver()) {
3384      composeReference(t, "AuditEventSourceComponent", "observer", element.getObserver(), -1);
3385    }
3386    for (int i = 0; i < element.getType().size(); i++) {
3387      composeCodeableConcept(t, "AuditEventSourceComponent", "type", element.getType().get(i), i);
3388    }
3389  }
3390
3391  protected void composeAuditEventEntityComponent(Complex parent, String parentType, String name, AuditEvent.AuditEventEntityComponent element, int index) {
3392    if (element == null) 
3393      return;
3394    Complex t;
3395    if (Utilities.noString(parentType))
3396      t = parent;
3397    else {
3398      t = parent.predicate("fhir:"+parentType+'.'+name);
3399    }
3400    composeBackboneElement(t, "entity", name, element, index);
3401    if (element.hasWhat()) {
3402      composeReference(t, "AuditEventEntityComponent", "what", element.getWhat(), -1);
3403    }
3404    if (element.hasRole()) {
3405      composeCodeableConcept(t, "AuditEventEntityComponent", "role", element.getRole(), -1);
3406    }
3407    for (int i = 0; i < element.getSecurityLabel().size(); i++) {
3408      composeCodeableConcept(t, "AuditEventEntityComponent", "securityLabel", element.getSecurityLabel().get(i), i);
3409    }
3410    if (element.hasQueryElement()) {
3411      composeBase64Binary(t, "AuditEventEntityComponent", "query", element.getQueryElement(), -1);
3412    }
3413    for (int i = 0; i < element.getDetail().size(); i++) {
3414      composeAuditEventEntityDetailComponent(t, "AuditEventEntityComponent", "detail", element.getDetail().get(i), i);
3415    }
3416    for (int i = 0; i < element.getAgent().size(); i++) {
3417      composeAuditEventAgentComponent(t, "AuditEventEntityComponent", "agent", element.getAgent().get(i), i);
3418    }
3419  }
3420
3421  protected void composeAuditEventEntityDetailComponent(Complex parent, String parentType, String name, AuditEvent.AuditEventEntityDetailComponent element, int index) {
3422    if (element == null) 
3423      return;
3424    Complex t;
3425    if (Utilities.noString(parentType))
3426      t = parent;
3427    else {
3428      t = parent.predicate("fhir:"+parentType+'.'+name);
3429    }
3430    composeBackboneElement(t, "detail", name, element, index);
3431    if (element.hasType()) {
3432      composeCodeableConcept(t, "AuditEventEntityDetailComponent", "type", element.getType(), -1);
3433    }
3434    if (element.hasValue()) {
3435      composeType(t, "AuditEventEntityDetailComponent", "value", element.getValue(), -1);
3436    }
3437  }
3438
3439  protected void composeBasic(Complex parent, String parentType, String name, Basic element, int index) {
3440    if (element == null) 
3441      return;
3442    Complex t;
3443    if (Utilities.noString(parentType))
3444      t = parent;
3445    else {
3446      t = parent.predicate("fhir:"+parentType+'.'+name);
3447    }
3448    composeDomainResource(t, "Basic", name, element, index);
3449    for (int i = 0; i < element.getIdentifier().size(); i++) {
3450      composeIdentifier(t, "Basic", "identifier", element.getIdentifier().get(i), i);
3451    }
3452    if (element.hasCode()) {
3453      composeCodeableConcept(t, "Basic", "code", element.getCode(), -1);
3454    }
3455    if (element.hasSubject()) {
3456      composeReference(t, "Basic", "subject", element.getSubject(), -1);
3457    }
3458    if (element.hasCreatedElement()) {
3459      composeDateTime(t, "Basic", "created", element.getCreatedElement(), -1);
3460    }
3461    if (element.hasAuthor()) {
3462      composeReference(t, "Basic", "author", element.getAuthor(), -1);
3463    }
3464  }
3465
3466  protected void composeBinary(Complex parent, String parentType, String name, Binary element, int index) {
3467    if (element == null) 
3468      return;
3469    Complex t;
3470    if (Utilities.noString(parentType))
3471      t = parent;
3472    else {
3473      t = parent.predicate("fhir:"+parentType+'.'+name);
3474    }
3475    composeResource(t, "Binary", name, element, index);
3476    if (element.hasContentTypeElement()) {
3477      composeCode(t, "Binary", "contentType", element.getContentTypeElement(), -1);
3478    }
3479    if (element.hasSecurityContext()) {
3480      composeReference(t, "Binary", "securityContext", element.getSecurityContext(), -1);
3481    }
3482    if (element.hasDataElement()) {
3483      composeBase64Binary(t, "Binary", "data", element.getDataElement(), -1);
3484    }
3485  }
3486
3487  protected void composeBiologicallyDerivedProduct(Complex parent, String parentType, String name, BiologicallyDerivedProduct element, int index) {
3488    if (element == null) 
3489      return;
3490    Complex t;
3491    if (Utilities.noString(parentType))
3492      t = parent;
3493    else {
3494      t = parent.predicate("fhir:"+parentType+'.'+name);
3495    }
3496    composeDomainResource(t, "BiologicallyDerivedProduct", name, element, index);
3497    if (element.hasProductCategory()) {
3498      composeCoding(t, "BiologicallyDerivedProduct", "productCategory", element.getProductCategory(), -1);
3499    }
3500    if (element.hasProductCode()) {
3501      composeCodeableConcept(t, "BiologicallyDerivedProduct", "productCode", element.getProductCode(), -1);
3502    }
3503    for (int i = 0; i < element.getParent().size(); i++) {
3504      composeReference(t, "BiologicallyDerivedProduct", "parent", element.getParent().get(i), i);
3505    }
3506    for (int i = 0; i < element.getRequest().size(); i++) {
3507      composeReference(t, "BiologicallyDerivedProduct", "request", element.getRequest().get(i), i);
3508    }
3509    for (int i = 0; i < element.getIdentifier().size(); i++) {
3510      composeIdentifier(t, "BiologicallyDerivedProduct", "identifier", element.getIdentifier().get(i), i);
3511    }
3512    if (element.hasBiologicalSourceEvent()) {
3513      composeIdentifier(t, "BiologicallyDerivedProduct", "biologicalSourceEvent", element.getBiologicalSourceEvent(), -1);
3514    }
3515    for (int i = 0; i < element.getProcessingFacility().size(); i++) {
3516      composeReference(t, "BiologicallyDerivedProduct", "processingFacility", element.getProcessingFacility().get(i), i);
3517    }
3518    if (element.hasDivisionElement()) {
3519      composeString(t, "BiologicallyDerivedProduct", "division", element.getDivisionElement(), -1);
3520    }
3521    if (element.hasProductStatus()) {
3522      composeCoding(t, "BiologicallyDerivedProduct", "productStatus", element.getProductStatus(), -1);
3523    }
3524    if (element.hasExpirationDateElement()) {
3525      composeDateTime(t, "BiologicallyDerivedProduct", "expirationDate", element.getExpirationDateElement(), -1);
3526    }
3527    if (element.hasCollection()) {
3528      composeBiologicallyDerivedProductCollectionComponent(t, "BiologicallyDerivedProduct", "collection", element.getCollection(), -1);
3529    }
3530    if (element.hasStorageTempRequirements()) {
3531      composeRange(t, "BiologicallyDerivedProduct", "storageTempRequirements", element.getStorageTempRequirements(), -1);
3532    }
3533    for (int i = 0; i < element.getProperty().size(); i++) {
3534      composeBiologicallyDerivedProductPropertyComponent(t, "BiologicallyDerivedProduct", "property", element.getProperty().get(i), i);
3535    }
3536  }
3537
3538  protected void composeBiologicallyDerivedProductCollectionComponent(Complex parent, String parentType, String name, BiologicallyDerivedProduct.BiologicallyDerivedProductCollectionComponent element, int index) {
3539    if (element == null) 
3540      return;
3541    Complex t;
3542    if (Utilities.noString(parentType))
3543      t = parent;
3544    else {
3545      t = parent.predicate("fhir:"+parentType+'.'+name);
3546    }
3547    composeBackboneElement(t, "collection", name, element, index);
3548    if (element.hasCollector()) {
3549      composeReference(t, "BiologicallyDerivedProductCollectionComponent", "collector", element.getCollector(), -1);
3550    }
3551    if (element.hasSource()) {
3552      composeReference(t, "BiologicallyDerivedProductCollectionComponent", "source", element.getSource(), -1);
3553    }
3554    if (element.hasCollected()) {
3555      composeType(t, "BiologicallyDerivedProductCollectionComponent", "collected", element.getCollected(), -1);
3556    }
3557  }
3558
3559  protected void composeBiologicallyDerivedProductPropertyComponent(Complex parent, String parentType, String name, BiologicallyDerivedProduct.BiologicallyDerivedProductPropertyComponent element, int index) {
3560    if (element == null) 
3561      return;
3562    Complex t;
3563    if (Utilities.noString(parentType))
3564      t = parent;
3565    else {
3566      t = parent.predicate("fhir:"+parentType+'.'+name);
3567    }
3568    composeBackboneElement(t, "property", name, element, index);
3569    if (element.hasType()) {
3570      composeCoding(t, "BiologicallyDerivedProductPropertyComponent", "type", element.getType(), -1);
3571    }
3572    if (element.hasValue()) {
3573      composeType(t, "BiologicallyDerivedProductPropertyComponent", "value", element.getValue(), -1);
3574    }
3575  }
3576
3577  protected void composeBodyStructure(Complex parent, String parentType, String name, BodyStructure element, int index) {
3578    if (element == null) 
3579      return;
3580    Complex t;
3581    if (Utilities.noString(parentType))
3582      t = parent;
3583    else {
3584      t = parent.predicate("fhir:"+parentType+'.'+name);
3585    }
3586    composeDomainResource(t, "BodyStructure", name, element, index);
3587    for (int i = 0; i < element.getIdentifier().size(); i++) {
3588      composeIdentifier(t, "BodyStructure", "identifier", element.getIdentifier().get(i), i);
3589    }
3590    if (element.hasActiveElement()) {
3591      composeBoolean(t, "BodyStructure", "active", element.getActiveElement(), -1);
3592    }
3593    if (element.hasMorphology()) {
3594      composeCodeableConcept(t, "BodyStructure", "morphology", element.getMorphology(), -1);
3595    }
3596    for (int i = 0; i < element.getIncludedStructure().size(); i++) {
3597      composeBodyStructureIncludedStructureComponent(t, "BodyStructure", "includedStructure", element.getIncludedStructure().get(i), i);
3598    }
3599    for (int i = 0; i < element.getExcludedStructure().size(); i++) {
3600      composeBodyStructureExcludedStructureComponent(t, "BodyStructure", "excludedStructure", element.getExcludedStructure().get(i), i);
3601    }
3602    if (element.hasDescriptionElement()) {
3603      composeString(t, "BodyStructure", "description", element.getDescriptionElement(), -1);
3604    }
3605    for (int i = 0; i < element.getImage().size(); i++) {
3606      composeAttachment(t, "BodyStructure", "image", element.getImage().get(i), i);
3607    }
3608    if (element.hasPatient()) {
3609      composeReference(t, "BodyStructure", "patient", element.getPatient(), -1);
3610    }
3611  }
3612
3613  protected void composeBodyStructureIncludedStructureComponent(Complex parent, String parentType, String name, BodyStructure.BodyStructureIncludedStructureComponent element, int index) {
3614    if (element == null) 
3615      return;
3616    Complex t;
3617    if (Utilities.noString(parentType))
3618      t = parent;
3619    else {
3620      t = parent.predicate("fhir:"+parentType+'.'+name);
3621    }
3622    composeBackboneElement(t, "includedStructure", name, element, index);
3623    if (element.hasStructure()) {
3624      composeCodeableConcept(t, "BodyStructureIncludedStructureComponent", "structure", element.getStructure(), -1);
3625    }
3626    if (element.hasLaterality()) {
3627      composeCodeableConcept(t, "BodyStructureIncludedStructureComponent", "laterality", element.getLaterality(), -1);
3628    }
3629    for (int i = 0; i < element.getQualifier().size(); i++) {
3630      composeCodeableConcept(t, "BodyStructureIncludedStructureComponent", "qualifier", element.getQualifier().get(i), i);
3631    }
3632  }
3633
3634  protected void composeBodyStructureExcludedStructureComponent(Complex parent, String parentType, String name, BodyStructure.BodyStructureExcludedStructureComponent element, int index) {
3635    if (element == null) 
3636      return;
3637    Complex t;
3638    if (Utilities.noString(parentType))
3639      t = parent;
3640    else {
3641      t = parent.predicate("fhir:"+parentType+'.'+name);
3642    }
3643    composeBackboneElement(t, "excludedStructure", name, element, index);
3644    if (element.hasStructure()) {
3645      composeCodeableConcept(t, "BodyStructureExcludedStructureComponent", "structure", element.getStructure(), -1);
3646    }
3647    if (element.hasLaterality()) {
3648      composeCodeableConcept(t, "BodyStructureExcludedStructureComponent", "laterality", element.getLaterality(), -1);
3649    }
3650    for (int i = 0; i < element.getQualifier().size(); i++) {
3651      composeCodeableConcept(t, "BodyStructureExcludedStructureComponent", "qualifier", element.getQualifier().get(i), i);
3652    }
3653  }
3654
3655  protected void composeBundle(Complex parent, String parentType, String name, Bundle element, int index) {
3656    if (element == null) 
3657      return;
3658    Complex t;
3659    if (Utilities.noString(parentType))
3660      t = parent;
3661    else {
3662      t = parent.predicate("fhir:"+parentType+'.'+name);
3663    }
3664    composeResource(t, "Bundle", name, element, index);
3665    if (element.hasIdentifier()) {
3666      composeIdentifier(t, "Bundle", "identifier", element.getIdentifier(), -1);
3667    }
3668    if (element.hasTypeElement()) {
3669      composeEnum(t, "Bundle", "type", element.getTypeElement(), -1);
3670    }
3671    if (element.hasTimestampElement()) {
3672      composeInstant(t, "Bundle", "timestamp", element.getTimestampElement(), -1);
3673    }
3674    if (element.hasTotalElement()) {
3675      composeUnsignedInt(t, "Bundle", "total", element.getTotalElement(), -1);
3676    }
3677    for (int i = 0; i < element.getLink().size(); i++) {
3678      composeBundleLinkComponent(t, "Bundle", "link", element.getLink().get(i), i);
3679    }
3680    for (int i = 0; i < element.getEntry().size(); i++) {
3681      composeBundleEntryComponent(t, "Bundle", "entry", element.getEntry().get(i), i);
3682    }
3683    if (element.hasSignature()) {
3684      composeSignature(t, "Bundle", "signature", element.getSignature(), -1);
3685    }
3686    if (element.hasIssues()) {
3687      composeResource(t, "Bundle", "issues", element.getIssues(), -1);
3688    }
3689  }
3690
3691  protected void composeBundleLinkComponent(Complex parent, String parentType, String name, Bundle.BundleLinkComponent element, int index) {
3692    if (element == null) 
3693      return;
3694    Complex t;
3695    if (Utilities.noString(parentType))
3696      t = parent;
3697    else {
3698      t = parent.predicate("fhir:"+parentType+'.'+name);
3699    }
3700    composeBackboneElement(t, "link", name, element, index);
3701    if (element.hasRelationElement()) {
3702      composeEnum(t, "BundleLinkComponent", "relation", element.getRelationElement(), -1);
3703    }
3704    if (element.hasUrlElement()) {
3705      composeUri(t, "BundleLinkComponent", "url", element.getUrlElement(), -1);
3706    }
3707  }
3708
3709  protected void composeBundleEntryComponent(Complex parent, String parentType, String name, Bundle.BundleEntryComponent element, int index) {
3710    if (element == null) 
3711      return;
3712    Complex t;
3713    if (Utilities.noString(parentType))
3714      t = parent;
3715    else {
3716      t = parent.predicate("fhir:"+parentType+'.'+name);
3717    }
3718    composeBackboneElement(t, "entry", name, element, index);
3719    for (int i = 0; i < element.getLink().size(); i++) {
3720      composeBundleLinkComponent(t, "BundleEntryComponent", "link", element.getLink().get(i), i);
3721    }
3722    if (element.hasFullUrlElement()) {
3723      composeUri(t, "BundleEntryComponent", "fullUrl", element.getFullUrlElement(), -1);
3724    }
3725    if (element.hasResource()) {
3726      composeResource(t, "BundleEntryComponent", "resource", element.getResource(), -1);
3727    }
3728    if (element.hasSearch()) {
3729      composeBundleEntrySearchComponent(t, "BundleEntryComponent", "search", element.getSearch(), -1);
3730    }
3731    if (element.hasRequest()) {
3732      composeBundleEntryRequestComponent(t, "BundleEntryComponent", "request", element.getRequest(), -1);
3733    }
3734    if (element.hasResponse()) {
3735      composeBundleEntryResponseComponent(t, "BundleEntryComponent", "response", element.getResponse(), -1);
3736    }
3737  }
3738
3739  protected void composeBundleEntrySearchComponent(Complex parent, String parentType, String name, Bundle.BundleEntrySearchComponent element, int index) {
3740    if (element == null) 
3741      return;
3742    Complex t;
3743    if (Utilities.noString(parentType))
3744      t = parent;
3745    else {
3746      t = parent.predicate("fhir:"+parentType+'.'+name);
3747    }
3748    composeBackboneElement(t, "search", name, element, index);
3749    if (element.hasModeElement()) {
3750      composeEnum(t, "BundleEntrySearchComponent", "mode", element.getModeElement(), -1);
3751    }
3752    if (element.hasScoreElement()) {
3753      composeDecimal(t, "BundleEntrySearchComponent", "score", element.getScoreElement(), -1);
3754    }
3755  }
3756
3757  protected void composeBundleEntryRequestComponent(Complex parent, String parentType, String name, Bundle.BundleEntryRequestComponent element, int index) {
3758    if (element == null) 
3759      return;
3760    Complex t;
3761    if (Utilities.noString(parentType))
3762      t = parent;
3763    else {
3764      t = parent.predicate("fhir:"+parentType+'.'+name);
3765    }
3766    composeBackboneElement(t, "request", name, element, index);
3767    if (element.hasMethodElement()) {
3768      composeEnum(t, "BundleEntryRequestComponent", "method", element.getMethodElement(), -1);
3769    }
3770    if (element.hasUrlElement()) {
3771      composeUri(t, "BundleEntryRequestComponent", "url", element.getUrlElement(), -1);
3772    }
3773    if (element.hasIfNoneMatchElement()) {
3774      composeString(t, "BundleEntryRequestComponent", "ifNoneMatch", element.getIfNoneMatchElement(), -1);
3775    }
3776    if (element.hasIfModifiedSinceElement()) {
3777      composeInstant(t, "BundleEntryRequestComponent", "ifModifiedSince", element.getIfModifiedSinceElement(), -1);
3778    }
3779    if (element.hasIfMatchElement()) {
3780      composeString(t, "BundleEntryRequestComponent", "ifMatch", element.getIfMatchElement(), -1);
3781    }
3782    if (element.hasIfNoneExistElement()) {
3783      composeString(t, "BundleEntryRequestComponent", "ifNoneExist", element.getIfNoneExistElement(), -1);
3784    }
3785  }
3786
3787  protected void composeBundleEntryResponseComponent(Complex parent, String parentType, String name, Bundle.BundleEntryResponseComponent element, int index) {
3788    if (element == null) 
3789      return;
3790    Complex t;
3791    if (Utilities.noString(parentType))
3792      t = parent;
3793    else {
3794      t = parent.predicate("fhir:"+parentType+'.'+name);
3795    }
3796    composeBackboneElement(t, "response", name, element, index);
3797    if (element.hasStatusElement()) {
3798      composeString(t, "BundleEntryResponseComponent", "status", element.getStatusElement(), -1);
3799    }
3800    if (element.hasLocationElement()) {
3801      composeUri(t, "BundleEntryResponseComponent", "location", element.getLocationElement(), -1);
3802    }
3803    if (element.hasEtagElement()) {
3804      composeString(t, "BundleEntryResponseComponent", "etag", element.getEtagElement(), -1);
3805    }
3806    if (element.hasLastModifiedElement()) {
3807      composeInstant(t, "BundleEntryResponseComponent", "lastModified", element.getLastModifiedElement(), -1);
3808    }
3809    if (element.hasOutcome()) {
3810      composeResource(t, "BundleEntryResponseComponent", "outcome", element.getOutcome(), -1);
3811    }
3812  }
3813
3814  protected void composeCapabilityStatement(Complex parent, String parentType, String name, CapabilityStatement element, int index) {
3815    if (element == null) 
3816      return;
3817    Complex t;
3818    if (Utilities.noString(parentType))
3819      t = parent;
3820    else {
3821      t = parent.predicate("fhir:"+parentType+'.'+name);
3822    }
3823    composeCanonicalResource(t, "CapabilityStatement", name, element, index);
3824    if (element.hasUrlElement()) {
3825      composeUri(t, "CapabilityStatement", "url", element.getUrlElement(), -1);
3826    }
3827    if (element.hasVersionElement()) {
3828      composeString(t, "CapabilityStatement", "version", element.getVersionElement(), -1);
3829    }
3830    if (element.hasVersionAlgorithm()) {
3831      composeType(t, "CapabilityStatement", "versionAlgorithm", element.getVersionAlgorithm(), -1);
3832    }
3833    if (element.hasNameElement()) {
3834      composeString(t, "CapabilityStatement", "name", element.getNameElement(), -1);
3835    }
3836    if (element.hasTitleElement()) {
3837      composeString(t, "CapabilityStatement", "title", element.getTitleElement(), -1);
3838    }
3839    if (element.hasStatusElement()) {
3840      composeEnum(t, "CapabilityStatement", "status", element.getStatusElement(), -1);
3841    }
3842    if (element.hasExperimentalElement()) {
3843      composeBoolean(t, "CapabilityStatement", "experimental", element.getExperimentalElement(), -1);
3844    }
3845    if (element.hasDateElement()) {
3846      composeDateTime(t, "CapabilityStatement", "date", element.getDateElement(), -1);
3847    }
3848    if (element.hasPublisherElement()) {
3849      composeString(t, "CapabilityStatement", "publisher", element.getPublisherElement(), -1);
3850    }
3851    for (int i = 0; i < element.getContact().size(); i++) {
3852      composeContactDetail(t, "CapabilityStatement", "contact", element.getContact().get(i), i);
3853    }
3854    if (element.hasDescriptionElement()) {
3855      composeMarkdown(t, "CapabilityStatement", "description", element.getDescriptionElement(), -1);
3856    }
3857    for (int i = 0; i < element.getUseContext().size(); i++) {
3858      composeUsageContext(t, "CapabilityStatement", "useContext", element.getUseContext().get(i), i);
3859    }
3860    for (int i = 0; i < element.getJurisdiction().size(); i++) {
3861      composeCodeableConcept(t, "CapabilityStatement", "jurisdiction", element.getJurisdiction().get(i), i);
3862    }
3863    if (element.hasPurposeElement()) {
3864      composeMarkdown(t, "CapabilityStatement", "purpose", element.getPurposeElement(), -1);
3865    }
3866    if (element.hasCopyrightElement()) {
3867      composeMarkdown(t, "CapabilityStatement", "copyright", element.getCopyrightElement(), -1);
3868    }
3869    if (element.hasCopyrightLabelElement()) {
3870      composeString(t, "CapabilityStatement", "copyrightLabel", element.getCopyrightLabelElement(), -1);
3871    }
3872    if (element.hasKindElement()) {
3873      composeEnum(t, "CapabilityStatement", "kind", element.getKindElement(), -1);
3874    }
3875    for (int i = 0; i < element.getInstantiates().size(); i++) {
3876      composeCanonical(t, "CapabilityStatement", "instantiates", element.getInstantiates().get(i), i);
3877    }
3878    for (int i = 0; i < element.getImports().size(); i++) {
3879      composeCanonical(t, "CapabilityStatement", "imports", element.getImports().get(i), i);
3880    }
3881    if (element.hasSoftware()) {
3882      composeCapabilityStatementSoftwareComponent(t, "CapabilityStatement", "software", element.getSoftware(), -1);
3883    }
3884    if (element.hasImplementation()) {
3885      composeCapabilityStatementImplementationComponent(t, "CapabilityStatement", "implementation", element.getImplementation(), -1);
3886    }
3887    if (element.hasFhirVersionElement()) {
3888      composeEnum(t, "CapabilityStatement", "fhirVersion", element.getFhirVersionElement(), -1);
3889    }
3890    for (int i = 0; i < element.getFormat().size(); i++) {
3891      composeCode(t, "CapabilityStatement", "format", element.getFormat().get(i), i);
3892    }
3893    for (int i = 0; i < element.getPatchFormat().size(); i++) {
3894      composeCode(t, "CapabilityStatement", "patchFormat", element.getPatchFormat().get(i), i);
3895    }
3896    for (int i = 0; i < element.getAcceptLanguage().size(); i++) {
3897      composeCode(t, "CapabilityStatement", "acceptLanguage", element.getAcceptLanguage().get(i), i);
3898    }
3899    for (int i = 0; i < element.getImplementationGuide().size(); i++) {
3900      composeCanonical(t, "CapabilityStatement", "implementationGuide", element.getImplementationGuide().get(i), i);
3901    }
3902    for (int i = 0; i < element.getRest().size(); i++) {
3903      composeCapabilityStatementRestComponent(t, "CapabilityStatement", "rest", element.getRest().get(i), i);
3904    }
3905    for (int i = 0; i < element.getMessaging().size(); i++) {
3906      composeCapabilityStatementMessagingComponent(t, "CapabilityStatement", "messaging", element.getMessaging().get(i), i);
3907    }
3908    for (int i = 0; i < element.getDocument().size(); i++) {
3909      composeCapabilityStatementDocumentComponent(t, "CapabilityStatement", "document", element.getDocument().get(i), i);
3910    }
3911  }
3912
3913  protected void composeCapabilityStatementSoftwareComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementSoftwareComponent element, int index) {
3914    if (element == null) 
3915      return;
3916    Complex t;
3917    if (Utilities.noString(parentType))
3918      t = parent;
3919    else {
3920      t = parent.predicate("fhir:"+parentType+'.'+name);
3921    }
3922    composeBackboneElement(t, "software", name, element, index);
3923    if (element.hasNameElement()) {
3924      composeString(t, "CapabilityStatementSoftwareComponent", "name", element.getNameElement(), -1);
3925    }
3926    if (element.hasVersionElement()) {
3927      composeString(t, "CapabilityStatementSoftwareComponent", "version", element.getVersionElement(), -1);
3928    }
3929    if (element.hasReleaseDateElement()) {
3930      composeDateTime(t, "CapabilityStatementSoftwareComponent", "releaseDate", element.getReleaseDateElement(), -1);
3931    }
3932  }
3933
3934  protected void composeCapabilityStatementImplementationComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementImplementationComponent element, int index) {
3935    if (element == null) 
3936      return;
3937    Complex t;
3938    if (Utilities.noString(parentType))
3939      t = parent;
3940    else {
3941      t = parent.predicate("fhir:"+parentType+'.'+name);
3942    }
3943    composeBackboneElement(t, "implementation", name, element, index);
3944    if (element.hasDescriptionElement()) {
3945      composeString(t, "CapabilityStatementImplementationComponent", "description", element.getDescriptionElement(), -1);
3946    }
3947    if (element.hasUrlElement()) {
3948      composeUrl(t, "CapabilityStatementImplementationComponent", "url", element.getUrlElement(), -1);
3949    }
3950    if (element.hasCustodian()) {
3951      composeReference(t, "CapabilityStatementImplementationComponent", "custodian", element.getCustodian(), -1);
3952    }
3953  }
3954
3955  protected void composeCapabilityStatementRestComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementRestComponent element, int index) {
3956    if (element == null) 
3957      return;
3958    Complex t;
3959    if (Utilities.noString(parentType))
3960      t = parent;
3961    else {
3962      t = parent.predicate("fhir:"+parentType+'.'+name);
3963    }
3964    composeBackboneElement(t, "rest", name, element, index);
3965    if (element.hasModeElement()) {
3966      composeEnum(t, "CapabilityStatementRestComponent", "mode", element.getModeElement(), -1);
3967    }
3968    if (element.hasDocumentationElement()) {
3969      composeMarkdown(t, "CapabilityStatementRestComponent", "documentation", element.getDocumentationElement(), -1);
3970    }
3971    if (element.hasSecurity()) {
3972      composeCapabilityStatementRestSecurityComponent(t, "CapabilityStatementRestComponent", "security", element.getSecurity(), -1);
3973    }
3974    for (int i = 0; i < element.getResource().size(); i++) {
3975      composeCapabilityStatementRestResourceComponent(t, "CapabilityStatementRestComponent", "resource", element.getResource().get(i), i);
3976    }
3977    for (int i = 0; i < element.getInteraction().size(); i++) {
3978      composeCapabilityStatementSystemInteractionComponent(t, "CapabilityStatementRestComponent", "interaction", element.getInteraction().get(i), i);
3979    }
3980    for (int i = 0; i < element.getSearchParam().size(); i++) {
3981      composeCapabilityStatementRestResourceSearchParamComponent(t, "CapabilityStatementRestComponent", "searchParam", element.getSearchParam().get(i), i);
3982    }
3983    for (int i = 0; i < element.getOperation().size(); i++) {
3984      composeCapabilityStatementRestResourceOperationComponent(t, "CapabilityStatementRestComponent", "operation", element.getOperation().get(i), i);
3985    }
3986    for (int i = 0; i < element.getCompartment().size(); i++) {
3987      composeCanonical(t, "CapabilityStatementRestComponent", "compartment", element.getCompartment().get(i), i);
3988    }
3989  }
3990
3991  protected void composeCapabilityStatementRestSecurityComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementRestSecurityComponent element, int index) {
3992    if (element == null) 
3993      return;
3994    Complex t;
3995    if (Utilities.noString(parentType))
3996      t = parent;
3997    else {
3998      t = parent.predicate("fhir:"+parentType+'.'+name);
3999    }
4000    composeBackboneElement(t, "security", name, element, index);
4001    if (element.hasCorsElement()) {
4002      composeBoolean(t, "CapabilityStatementRestSecurityComponent", "cors", element.getCorsElement(), -1);
4003    }
4004    for (int i = 0; i < element.getService().size(); i++) {
4005      composeCodeableConcept(t, "CapabilityStatementRestSecurityComponent", "service", element.getService().get(i), i);
4006    }
4007    if (element.hasDescriptionElement()) {
4008      composeMarkdown(t, "CapabilityStatementRestSecurityComponent", "description", element.getDescriptionElement(), -1);
4009    }
4010  }
4011
4012  protected void composeCapabilityStatementRestResourceComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementRestResourceComponent element, int index) {
4013    if (element == null) 
4014      return;
4015    Complex t;
4016    if (Utilities.noString(parentType))
4017      t = parent;
4018    else {
4019      t = parent.predicate("fhir:"+parentType+'.'+name);
4020    }
4021    composeBackboneElement(t, "resource", name, element, index);
4022    if (element.hasTypeElement()) {
4023      composeCode(t, "CapabilityStatementRestResourceComponent", "type", element.getTypeElement(), -1);
4024    }
4025    if (element.hasProfileElement()) {
4026      composeCanonical(t, "CapabilityStatementRestResourceComponent", "profile", element.getProfileElement(), -1);
4027    }
4028    for (int i = 0; i < element.getSupportedProfile().size(); i++) {
4029      composeCanonical(t, "CapabilityStatementRestResourceComponent", "supportedProfile", element.getSupportedProfile().get(i), i);
4030    }
4031    if (element.hasDocumentationElement()) {
4032      composeMarkdown(t, "CapabilityStatementRestResourceComponent", "documentation", element.getDocumentationElement(), -1);
4033    }
4034    for (int i = 0; i < element.getInteraction().size(); i++) {
4035      composeCapabilityStatementResourceInteractionComponent(t, "CapabilityStatementRestResourceComponent", "interaction", element.getInteraction().get(i), i);
4036    }
4037    if (element.hasVersioningElement()) {
4038      composeEnum(t, "CapabilityStatementRestResourceComponent", "versioning", element.getVersioningElement(), -1);
4039    }
4040    if (element.hasReadHistoryElement()) {
4041      composeBoolean(t, "CapabilityStatementRestResourceComponent", "readHistory", element.getReadHistoryElement(), -1);
4042    }
4043    if (element.hasUpdateCreateElement()) {
4044      composeBoolean(t, "CapabilityStatementRestResourceComponent", "updateCreate", element.getUpdateCreateElement(), -1);
4045    }
4046    if (element.hasConditionalCreateElement()) {
4047      composeBoolean(t, "CapabilityStatementRestResourceComponent", "conditionalCreate", element.getConditionalCreateElement(), -1);
4048    }
4049    if (element.hasConditionalReadElement()) {
4050      composeEnum(t, "CapabilityStatementRestResourceComponent", "conditionalRead", element.getConditionalReadElement(), -1);
4051    }
4052    if (element.hasConditionalUpdateElement()) {
4053      composeBoolean(t, "CapabilityStatementRestResourceComponent", "conditionalUpdate", element.getConditionalUpdateElement(), -1);
4054    }
4055    if (element.hasConditionalPatchElement()) {
4056      composeBoolean(t, "CapabilityStatementRestResourceComponent", "conditionalPatch", element.getConditionalPatchElement(), -1);
4057    }
4058    if (element.hasConditionalDeleteElement()) {
4059      composeEnum(t, "CapabilityStatementRestResourceComponent", "conditionalDelete", element.getConditionalDeleteElement(), -1);
4060    }
4061    for (int i = 0; i < element.getReferencePolicy().size(); i++) {
4062      composeEnum(t, "CapabilityStatementRestResourceComponent", "referencePolicy", element.getReferencePolicy().get(i), i);
4063    }
4064    for (int i = 0; i < element.getSearchInclude().size(); i++) {
4065      composeString(t, "CapabilityStatementRestResourceComponent", "searchInclude", element.getSearchInclude().get(i), i);
4066    }
4067    for (int i = 0; i < element.getSearchRevInclude().size(); i++) {
4068      composeString(t, "CapabilityStatementRestResourceComponent", "searchRevInclude", element.getSearchRevInclude().get(i), i);
4069    }
4070    for (int i = 0; i < element.getSearchParam().size(); i++) {
4071      composeCapabilityStatementRestResourceSearchParamComponent(t, "CapabilityStatementRestResourceComponent", "searchParam", element.getSearchParam().get(i), i);
4072    }
4073    for (int i = 0; i < element.getOperation().size(); i++) {
4074      composeCapabilityStatementRestResourceOperationComponent(t, "CapabilityStatementRestResourceComponent", "operation", element.getOperation().get(i), i);
4075    }
4076  }
4077
4078  protected void composeCapabilityStatementResourceInteractionComponent(Complex parent, String parentType, String name, CapabilityStatement.ResourceInteractionComponent element, int index) {
4079    if (element == null) 
4080      return;
4081    Complex t;
4082    if (Utilities.noString(parentType))
4083      t = parent;
4084    else {
4085      t = parent.predicate("fhir:"+parentType+'.'+name);
4086    }
4087    composeBackboneElement(t, "interaction", name, element, index);
4088    if (element.hasCodeElement()) {
4089      composeEnum(t, "ResourceInteractionComponent", "code", element.getCodeElement(), -1);
4090    }
4091    if (element.hasDocumentationElement()) {
4092      composeMarkdown(t, "ResourceInteractionComponent", "documentation", element.getDocumentationElement(), -1);
4093    }
4094  }
4095
4096  protected void composeCapabilityStatementRestResourceSearchParamComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementRestResourceSearchParamComponent element, int index) {
4097    if (element == null) 
4098      return;
4099    Complex t;
4100    if (Utilities.noString(parentType))
4101      t = parent;
4102    else {
4103      t = parent.predicate("fhir:"+parentType+'.'+name);
4104    }
4105    composeBackboneElement(t, "searchParam", name, element, index);
4106    if (element.hasNameElement()) {
4107      composeString(t, "CapabilityStatementRestResourceSearchParamComponent", "name", element.getNameElement(), -1);
4108    }
4109    if (element.hasDefinitionElement()) {
4110      composeCanonical(t, "CapabilityStatementRestResourceSearchParamComponent", "definition", element.getDefinitionElement(), -1);
4111    }
4112    if (element.hasTypeElement()) {
4113      composeEnum(t, "CapabilityStatementRestResourceSearchParamComponent", "type", element.getTypeElement(), -1);
4114    }
4115    if (element.hasDocumentationElement()) {
4116      composeMarkdown(t, "CapabilityStatementRestResourceSearchParamComponent", "documentation", element.getDocumentationElement(), -1);
4117    }
4118  }
4119
4120  protected void composeCapabilityStatementRestResourceOperationComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementRestResourceOperationComponent element, int index) {
4121    if (element == null) 
4122      return;
4123    Complex t;
4124    if (Utilities.noString(parentType))
4125      t = parent;
4126    else {
4127      t = parent.predicate("fhir:"+parentType+'.'+name);
4128    }
4129    composeBackboneElement(t, "operation", name, element, index);
4130    if (element.hasNameElement()) {
4131      composeString(t, "CapabilityStatementRestResourceOperationComponent", "name", element.getNameElement(), -1);
4132    }
4133    if (element.hasDefinitionElement()) {
4134      composeCanonical(t, "CapabilityStatementRestResourceOperationComponent", "definition", element.getDefinitionElement(), -1);
4135    }
4136    if (element.hasDocumentationElement()) {
4137      composeMarkdown(t, "CapabilityStatementRestResourceOperationComponent", "documentation", element.getDocumentationElement(), -1);
4138    }
4139  }
4140
4141  protected void composeCapabilityStatementSystemInteractionComponent(Complex parent, String parentType, String name, CapabilityStatement.SystemInteractionComponent element, int index) {
4142    if (element == null) 
4143      return;
4144    Complex t;
4145    if (Utilities.noString(parentType))
4146      t = parent;
4147    else {
4148      t = parent.predicate("fhir:"+parentType+'.'+name);
4149    }
4150    composeBackboneElement(t, "interaction", name, element, index);
4151    if (element.hasCodeElement()) {
4152      composeEnum(t, "SystemInteractionComponent", "code", element.getCodeElement(), -1);
4153    }
4154    if (element.hasDocumentationElement()) {
4155      composeMarkdown(t, "SystemInteractionComponent", "documentation", element.getDocumentationElement(), -1);
4156    }
4157  }
4158
4159  protected void composeCapabilityStatementMessagingComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementMessagingComponent element, int index) {
4160    if (element == null) 
4161      return;
4162    Complex t;
4163    if (Utilities.noString(parentType))
4164      t = parent;
4165    else {
4166      t = parent.predicate("fhir:"+parentType+'.'+name);
4167    }
4168    composeBackboneElement(t, "messaging", name, element, index);
4169    for (int i = 0; i < element.getEndpoint().size(); i++) {
4170      composeCapabilityStatementMessagingEndpointComponent(t, "CapabilityStatementMessagingComponent", "endpoint", element.getEndpoint().get(i), i);
4171    }
4172    if (element.hasReliableCacheElement()) {
4173      composeUnsignedInt(t, "CapabilityStatementMessagingComponent", "reliableCache", element.getReliableCacheElement(), -1);
4174    }
4175    if (element.hasDocumentationElement()) {
4176      composeMarkdown(t, "CapabilityStatementMessagingComponent", "documentation", element.getDocumentationElement(), -1);
4177    }
4178    for (int i = 0; i < element.getSupportedMessage().size(); i++) {
4179      composeCapabilityStatementMessagingSupportedMessageComponent(t, "CapabilityStatementMessagingComponent", "supportedMessage", element.getSupportedMessage().get(i), i);
4180    }
4181  }
4182
4183  protected void composeCapabilityStatementMessagingEndpointComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementMessagingEndpointComponent element, int index) {
4184    if (element == null) 
4185      return;
4186    Complex t;
4187    if (Utilities.noString(parentType))
4188      t = parent;
4189    else {
4190      t = parent.predicate("fhir:"+parentType+'.'+name);
4191    }
4192    composeBackboneElement(t, "endpoint", name, element, index);
4193    if (element.hasProtocol()) {
4194      composeCoding(t, "CapabilityStatementMessagingEndpointComponent", "protocol", element.getProtocol(), -1);
4195    }
4196    if (element.hasAddressElement()) {
4197      composeUrl(t, "CapabilityStatementMessagingEndpointComponent", "address", element.getAddressElement(), -1);
4198    }
4199  }
4200
4201  protected void composeCapabilityStatementMessagingSupportedMessageComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementMessagingSupportedMessageComponent element, int index) {
4202    if (element == null) 
4203      return;
4204    Complex t;
4205    if (Utilities.noString(parentType))
4206      t = parent;
4207    else {
4208      t = parent.predicate("fhir:"+parentType+'.'+name);
4209    }
4210    composeBackboneElement(t, "supportedMessage", name, element, index);
4211    if (element.hasModeElement()) {
4212      composeEnum(t, "CapabilityStatementMessagingSupportedMessageComponent", "mode", element.getModeElement(), -1);
4213    }
4214    if (element.hasDefinitionElement()) {
4215      composeCanonical(t, "CapabilityStatementMessagingSupportedMessageComponent", "definition", element.getDefinitionElement(), -1);
4216    }
4217  }
4218
4219  protected void composeCapabilityStatementDocumentComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementDocumentComponent element, int index) {
4220    if (element == null) 
4221      return;
4222    Complex t;
4223    if (Utilities.noString(parentType))
4224      t = parent;
4225    else {
4226      t = parent.predicate("fhir:"+parentType+'.'+name);
4227    }
4228    composeBackboneElement(t, "document", name, element, index);
4229    if (element.hasModeElement()) {
4230      composeEnum(t, "CapabilityStatementDocumentComponent", "mode", element.getModeElement(), -1);
4231    }
4232    if (element.hasDocumentationElement()) {
4233      composeMarkdown(t, "CapabilityStatementDocumentComponent", "documentation", element.getDocumentationElement(), -1);
4234    }
4235    if (element.hasProfileElement()) {
4236      composeCanonical(t, "CapabilityStatementDocumentComponent", "profile", element.getProfileElement(), -1);
4237    }
4238  }
4239
4240  protected void composeCarePlan(Complex parent, String parentType, String name, CarePlan element, int index) {
4241    if (element == null) 
4242      return;
4243    Complex t;
4244    if (Utilities.noString(parentType))
4245      t = parent;
4246    else {
4247      t = parent.predicate("fhir:"+parentType+'.'+name);
4248    }
4249    composeDomainResource(t, "CarePlan", name, element, index);
4250    for (int i = 0; i < element.getIdentifier().size(); i++) {
4251      composeIdentifier(t, "CarePlan", "identifier", element.getIdentifier().get(i), i);
4252    }
4253    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
4254      composeCanonical(t, "CarePlan", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
4255    }
4256    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
4257      composeUri(t, "CarePlan", "instantiatesUri", element.getInstantiatesUri().get(i), i);
4258    }
4259    for (int i = 0; i < element.getBasedOn().size(); i++) {
4260      composeReference(t, "CarePlan", "basedOn", element.getBasedOn().get(i), i);
4261    }
4262    for (int i = 0; i < element.getReplaces().size(); i++) {
4263      composeReference(t, "CarePlan", "replaces", element.getReplaces().get(i), i);
4264    }
4265    for (int i = 0; i < element.getPartOf().size(); i++) {
4266      composeReference(t, "CarePlan", "partOf", element.getPartOf().get(i), i);
4267    }
4268    if (element.hasStatusElement()) {
4269      composeEnum(t, "CarePlan", "status", element.getStatusElement(), -1);
4270    }
4271    if (element.hasIntentElement()) {
4272      composeEnum(t, "CarePlan", "intent", element.getIntentElement(), -1);
4273    }
4274    for (int i = 0; i < element.getCategory().size(); i++) {
4275      composeCodeableConcept(t, "CarePlan", "category", element.getCategory().get(i), i);
4276    }
4277    if (element.hasTitleElement()) {
4278      composeString(t, "CarePlan", "title", element.getTitleElement(), -1);
4279    }
4280    if (element.hasDescriptionElement()) {
4281      composeString(t, "CarePlan", "description", element.getDescriptionElement(), -1);
4282    }
4283    if (element.hasSubject()) {
4284      composeReference(t, "CarePlan", "subject", element.getSubject(), -1);
4285    }
4286    if (element.hasEncounter()) {
4287      composeReference(t, "CarePlan", "encounter", element.getEncounter(), -1);
4288    }
4289    if (element.hasPeriod()) {
4290      composePeriod(t, "CarePlan", "period", element.getPeriod(), -1);
4291    }
4292    if (element.hasCreatedElement()) {
4293      composeDateTime(t, "CarePlan", "created", element.getCreatedElement(), -1);
4294    }
4295    if (element.hasCustodian()) {
4296      composeReference(t, "CarePlan", "custodian", element.getCustodian(), -1);
4297    }
4298    for (int i = 0; i < element.getContributor().size(); i++) {
4299      composeReference(t, "CarePlan", "contributor", element.getContributor().get(i), i);
4300    }
4301    for (int i = 0; i < element.getCareTeam().size(); i++) {
4302      composeReference(t, "CarePlan", "careTeam", element.getCareTeam().get(i), i);
4303    }
4304    for (int i = 0; i < element.getAddresses().size(); i++) {
4305      composeCodeableReference(t, "CarePlan", "addresses", element.getAddresses().get(i), i);
4306    }
4307    for (int i = 0; i < element.getSupportingInfo().size(); i++) {
4308      composeReference(t, "CarePlan", "supportingInfo", element.getSupportingInfo().get(i), i);
4309    }
4310    for (int i = 0; i < element.getGoal().size(); i++) {
4311      composeReference(t, "CarePlan", "goal", element.getGoal().get(i), i);
4312    }
4313    for (int i = 0; i < element.getActivity().size(); i++) {
4314      composeCarePlanActivityComponent(t, "CarePlan", "activity", element.getActivity().get(i), i);
4315    }
4316    for (int i = 0; i < element.getNote().size(); i++) {
4317      composeAnnotation(t, "CarePlan", "note", element.getNote().get(i), i);
4318    }
4319  }
4320
4321  protected void composeCarePlanActivityComponent(Complex parent, String parentType, String name, CarePlan.CarePlanActivityComponent element, int index) {
4322    if (element == null) 
4323      return;
4324    Complex t;
4325    if (Utilities.noString(parentType))
4326      t = parent;
4327    else {
4328      t = parent.predicate("fhir:"+parentType+'.'+name);
4329    }
4330    composeBackboneElement(t, "activity", name, element, index);
4331    for (int i = 0; i < element.getPerformedActivity().size(); i++) {
4332      composeCodeableReference(t, "CarePlanActivityComponent", "performedActivity", element.getPerformedActivity().get(i), i);
4333    }
4334    for (int i = 0; i < element.getProgress().size(); i++) {
4335      composeAnnotation(t, "CarePlanActivityComponent", "progress", element.getProgress().get(i), i);
4336    }
4337    if (element.hasPlannedActivityReference()) {
4338      composeReference(t, "CarePlanActivityComponent", "plannedActivityReference", element.getPlannedActivityReference(), -1);
4339    }
4340    if (element.hasPlannedActivityDetail()) {
4341      composeCarePlanActivityPlannedActivityDetailComponent(t, "CarePlanActivityComponent", "plannedActivityDetail", element.getPlannedActivityDetail(), -1);
4342    }
4343  }
4344
4345  protected void composeCarePlanActivityPlannedActivityDetailComponent(Complex parent, String parentType, String name, CarePlan.CarePlanActivityPlannedActivityDetailComponent element, int index) {
4346    if (element == null) 
4347      return;
4348    Complex t;
4349    if (Utilities.noString(parentType))
4350      t = parent;
4351    else {
4352      t = parent.predicate("fhir:"+parentType+'.'+name);
4353    }
4354    composeBackboneElement(t, "plannedActivityDetail", name, element, index);
4355    if (element.hasKindElement()) {
4356      composeEnum(t, "CarePlanActivityPlannedActivityDetailComponent", "kind", element.getKindElement(), -1);
4357    }
4358    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
4359      composeCanonical(t, "CarePlanActivityPlannedActivityDetailComponent", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
4360    }
4361    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
4362      composeUri(t, "CarePlanActivityPlannedActivityDetailComponent", "instantiatesUri", element.getInstantiatesUri().get(i), i);
4363    }
4364    if (element.hasCode()) {
4365      composeCodeableConcept(t, "CarePlanActivityPlannedActivityDetailComponent", "code", element.getCode(), -1);
4366    }
4367    for (int i = 0; i < element.getReason().size(); i++) {
4368      composeCodeableReference(t, "CarePlanActivityPlannedActivityDetailComponent", "reason", element.getReason().get(i), i);
4369    }
4370    for (int i = 0; i < element.getGoal().size(); i++) {
4371      composeReference(t, "CarePlanActivityPlannedActivityDetailComponent", "goal", element.getGoal().get(i), i);
4372    }
4373    if (element.hasStatusElement()) {
4374      composeEnum(t, "CarePlanActivityPlannedActivityDetailComponent", "status", element.getStatusElement(), -1);
4375    }
4376    if (element.hasStatusReason()) {
4377      composeCodeableConcept(t, "CarePlanActivityPlannedActivityDetailComponent", "statusReason", element.getStatusReason(), -1);
4378    }
4379    if (element.hasDoNotPerformElement()) {
4380      composeBoolean(t, "CarePlanActivityPlannedActivityDetailComponent", "doNotPerform", element.getDoNotPerformElement(), -1);
4381    }
4382    if (element.hasScheduled()) {
4383      composeType(t, "CarePlanActivityPlannedActivityDetailComponent", "scheduled", element.getScheduled(), -1);
4384    }
4385    if (element.hasLocation()) {
4386      composeCodeableReference(t, "CarePlanActivityPlannedActivityDetailComponent", "location", element.getLocation(), -1);
4387    }
4388    if (element.hasReported()) {
4389      composeType(t, "CarePlanActivityPlannedActivityDetailComponent", "reported", element.getReported(), -1);
4390    }
4391    for (int i = 0; i < element.getPerformer().size(); i++) {
4392      composeReference(t, "CarePlanActivityPlannedActivityDetailComponent", "performer", element.getPerformer().get(i), i);
4393    }
4394    if (element.hasProduct()) {
4395      composeType(t, "CarePlanActivityPlannedActivityDetailComponent", "product", element.getProduct(), -1);
4396    }
4397    if (element.hasDailyAmount()) {
4398      composeQuantity(t, "CarePlanActivityPlannedActivityDetailComponent", "dailyAmount", element.getDailyAmount(), -1);
4399    }
4400    if (element.hasQuantity()) {
4401      composeQuantity(t, "CarePlanActivityPlannedActivityDetailComponent", "quantity", element.getQuantity(), -1);
4402    }
4403    if (element.hasDescriptionElement()) {
4404      composeString(t, "CarePlanActivityPlannedActivityDetailComponent", "description", element.getDescriptionElement(), -1);
4405    }
4406  }
4407
4408  protected void composeCareTeam(Complex parent, String parentType, String name, CareTeam element, int index) {
4409    if (element == null) 
4410      return;
4411    Complex t;
4412    if (Utilities.noString(parentType))
4413      t = parent;
4414    else {
4415      t = parent.predicate("fhir:"+parentType+'.'+name);
4416    }
4417    composeDomainResource(t, "CareTeam", name, element, index);
4418    for (int i = 0; i < element.getIdentifier().size(); i++) {
4419      composeIdentifier(t, "CareTeam", "identifier", element.getIdentifier().get(i), i);
4420    }
4421    if (element.hasStatusElement()) {
4422      composeEnum(t, "CareTeam", "status", element.getStatusElement(), -1);
4423    }
4424    for (int i = 0; i < element.getCategory().size(); i++) {
4425      composeCodeableConcept(t, "CareTeam", "category", element.getCategory().get(i), i);
4426    }
4427    if (element.hasNameElement()) {
4428      composeString(t, "CareTeam", "name", element.getNameElement(), -1);
4429    }
4430    if (element.hasSubject()) {
4431      composeReference(t, "CareTeam", "subject", element.getSubject(), -1);
4432    }
4433    if (element.hasPeriod()) {
4434      composePeriod(t, "CareTeam", "period", element.getPeriod(), -1);
4435    }
4436    for (int i = 0; i < element.getParticipant().size(); i++) {
4437      composeCareTeamParticipantComponent(t, "CareTeam", "participant", element.getParticipant().get(i), i);
4438    }
4439    for (int i = 0; i < element.getReason().size(); i++) {
4440      composeCodeableReference(t, "CareTeam", "reason", element.getReason().get(i), i);
4441    }
4442    for (int i = 0; i < element.getManagingOrganization().size(); i++) {
4443      composeReference(t, "CareTeam", "managingOrganization", element.getManagingOrganization().get(i), i);
4444    }
4445    for (int i = 0; i < element.getTelecom().size(); i++) {
4446      composeContactPoint(t, "CareTeam", "telecom", element.getTelecom().get(i), i);
4447    }
4448    for (int i = 0; i < element.getNote().size(); i++) {
4449      composeAnnotation(t, "CareTeam", "note", element.getNote().get(i), i);
4450    }
4451  }
4452
4453  protected void composeCareTeamParticipantComponent(Complex parent, String parentType, String name, CareTeam.CareTeamParticipantComponent element, int index) {
4454    if (element == null) 
4455      return;
4456    Complex t;
4457    if (Utilities.noString(parentType))
4458      t = parent;
4459    else {
4460      t = parent.predicate("fhir:"+parentType+'.'+name);
4461    }
4462    composeBackboneElement(t, "participant", name, element, index);
4463    if (element.hasRole()) {
4464      composeCodeableConcept(t, "CareTeamParticipantComponent", "role", element.getRole(), -1);
4465    }
4466    if (element.hasMember()) {
4467      composeReference(t, "CareTeamParticipantComponent", "member", element.getMember(), -1);
4468    }
4469    if (element.hasOnBehalfOf()) {
4470      composeReference(t, "CareTeamParticipantComponent", "onBehalfOf", element.getOnBehalfOf(), -1);
4471    }
4472    if (element.hasCoverage()) {
4473      composeType(t, "CareTeamParticipantComponent", "coverage", element.getCoverage(), -1);
4474    }
4475  }
4476
4477  protected void composeChargeItem(Complex parent, String parentType, String name, ChargeItem element, int index) {
4478    if (element == null) 
4479      return;
4480    Complex t;
4481    if (Utilities.noString(parentType))
4482      t = parent;
4483    else {
4484      t = parent.predicate("fhir:"+parentType+'.'+name);
4485    }
4486    composeDomainResource(t, "ChargeItem", name, element, index);
4487    for (int i = 0; i < element.getIdentifier().size(); i++) {
4488      composeIdentifier(t, "ChargeItem", "identifier", element.getIdentifier().get(i), i);
4489    }
4490    for (int i = 0; i < element.getDefinitionUri().size(); i++) {
4491      composeUri(t, "ChargeItem", "definitionUri", element.getDefinitionUri().get(i), i);
4492    }
4493    for (int i = 0; i < element.getDefinitionCanonical().size(); i++) {
4494      composeCanonical(t, "ChargeItem", "definitionCanonical", element.getDefinitionCanonical().get(i), i);
4495    }
4496    if (element.hasStatusElement()) {
4497      composeEnum(t, "ChargeItem", "status", element.getStatusElement(), -1);
4498    }
4499    for (int i = 0; i < element.getPartOf().size(); i++) {
4500      composeReference(t, "ChargeItem", "partOf", element.getPartOf().get(i), i);
4501    }
4502    if (element.hasCode()) {
4503      composeCodeableConcept(t, "ChargeItem", "code", element.getCode(), -1);
4504    }
4505    if (element.hasSubject()) {
4506      composeReference(t, "ChargeItem", "subject", element.getSubject(), -1);
4507    }
4508    if (element.hasEncounter()) {
4509      composeReference(t, "ChargeItem", "encounter", element.getEncounter(), -1);
4510    }
4511    if (element.hasOccurrence()) {
4512      composeType(t, "ChargeItem", "occurrence", element.getOccurrence(), -1);
4513    }
4514    for (int i = 0; i < element.getPerformer().size(); i++) {
4515      composeChargeItemPerformerComponent(t, "ChargeItem", "performer", element.getPerformer().get(i), i);
4516    }
4517    if (element.hasPerformingOrganization()) {
4518      composeReference(t, "ChargeItem", "performingOrganization", element.getPerformingOrganization(), -1);
4519    }
4520    if (element.hasRequestingOrganization()) {
4521      composeReference(t, "ChargeItem", "requestingOrganization", element.getRequestingOrganization(), -1);
4522    }
4523    if (element.hasCostCenter()) {
4524      composeReference(t, "ChargeItem", "costCenter", element.getCostCenter(), -1);
4525    }
4526    if (element.hasQuantity()) {
4527      composeQuantity(t, "ChargeItem", "quantity", element.getQuantity(), -1);
4528    }
4529    for (int i = 0; i < element.getBodysite().size(); i++) {
4530      composeCodeableConcept(t, "ChargeItem", "bodysite", element.getBodysite().get(i), i);
4531    }
4532    if (element.hasUnitPriceComponent()) {
4533      composeMonetaryComponent(t, "ChargeItem", "unitPriceComponent", element.getUnitPriceComponent(), -1);
4534    }
4535    if (element.hasTotalPriceComponent()) {
4536      composeMonetaryComponent(t, "ChargeItem", "totalPriceComponent", element.getTotalPriceComponent(), -1);
4537    }
4538    if (element.hasOverrideReason()) {
4539      composeCodeableConcept(t, "ChargeItem", "overrideReason", element.getOverrideReason(), -1);
4540    }
4541    if (element.hasEnterer()) {
4542      composeReference(t, "ChargeItem", "enterer", element.getEnterer(), -1);
4543    }
4544    if (element.hasEnteredDateElement()) {
4545      composeDateTime(t, "ChargeItem", "enteredDate", element.getEnteredDateElement(), -1);
4546    }
4547    for (int i = 0; i < element.getReason().size(); i++) {
4548      composeCodeableConcept(t, "ChargeItem", "reason", element.getReason().get(i), i);
4549    }
4550    for (int i = 0; i < element.getService().size(); i++) {
4551      composeCodeableReference(t, "ChargeItem", "service", element.getService().get(i), i);
4552    }
4553    for (int i = 0; i < element.getProduct().size(); i++) {
4554      composeCodeableReference(t, "ChargeItem", "product", element.getProduct().get(i), i);
4555    }
4556    for (int i = 0; i < element.getAccount().size(); i++) {
4557      composeReference(t, "ChargeItem", "account", element.getAccount().get(i), i);
4558    }
4559    for (int i = 0; i < element.getNote().size(); i++) {
4560      composeAnnotation(t, "ChargeItem", "note", element.getNote().get(i), i);
4561    }
4562    for (int i = 0; i < element.getSupportingInformation().size(); i++) {
4563      composeReference(t, "ChargeItem", "supportingInformation", element.getSupportingInformation().get(i), i);
4564    }
4565  }
4566
4567  protected void composeChargeItemPerformerComponent(Complex parent, String parentType, String name, ChargeItem.ChargeItemPerformerComponent element, int index) {
4568    if (element == null) 
4569      return;
4570    Complex t;
4571    if (Utilities.noString(parentType))
4572      t = parent;
4573    else {
4574      t = parent.predicate("fhir:"+parentType+'.'+name);
4575    }
4576    composeBackboneElement(t, "performer", name, element, index);
4577    if (element.hasFunction()) {
4578      composeCodeableConcept(t, "ChargeItemPerformerComponent", "function", element.getFunction(), -1);
4579    }
4580    if (element.hasActor()) {
4581      composeReference(t, "ChargeItemPerformerComponent", "actor", element.getActor(), -1);
4582    }
4583  }
4584
4585  protected void composeChargeItemDefinition(Complex parent, String parentType, String name, ChargeItemDefinition element, int index) {
4586    if (element == null) 
4587      return;
4588    Complex t;
4589    if (Utilities.noString(parentType))
4590      t = parent;
4591    else {
4592      t = parent.predicate("fhir:"+parentType+'.'+name);
4593    }
4594    composeMetadataResource(t, "ChargeItemDefinition", name, element, index);
4595    if (element.hasUrlElement()) {
4596      composeUri(t, "ChargeItemDefinition", "url", element.getUrlElement(), -1);
4597    }
4598    for (int i = 0; i < element.getIdentifier().size(); i++) {
4599      composeIdentifier(t, "ChargeItemDefinition", "identifier", element.getIdentifier().get(i), i);
4600    }
4601    if (element.hasVersionElement()) {
4602      composeString(t, "ChargeItemDefinition", "version", element.getVersionElement(), -1);
4603    }
4604    if (element.hasNameElement()) {
4605      composeString(t, "ChargeItemDefinition", "name", element.getNameElement(), -1);
4606    }
4607    if (element.hasTitleElement()) {
4608      composeString(t, "ChargeItemDefinition", "title", element.getTitleElement(), -1);
4609    }
4610    for (int i = 0; i < element.getDerivedFromUri().size(); i++) {
4611      composeUri(t, "ChargeItemDefinition", "derivedFromUri", element.getDerivedFromUri().get(i), i);
4612    }
4613    for (int i = 0; i < element.getPartOf().size(); i++) {
4614      composeCanonical(t, "ChargeItemDefinition", "partOf", element.getPartOf().get(i), i);
4615    }
4616    for (int i = 0; i < element.getReplaces().size(); i++) {
4617      composeCanonical(t, "ChargeItemDefinition", "replaces", element.getReplaces().get(i), i);
4618    }
4619    if (element.hasStatusElement()) {
4620      composeEnum(t, "ChargeItemDefinition", "status", element.getStatusElement(), -1);
4621    }
4622    if (element.hasExperimentalElement()) {
4623      composeBoolean(t, "ChargeItemDefinition", "experimental", element.getExperimentalElement(), -1);
4624    }
4625    if (element.hasDateElement()) {
4626      composeDateTime(t, "ChargeItemDefinition", "date", element.getDateElement(), -1);
4627    }
4628    if (element.hasPublisherElement()) {
4629      composeString(t, "ChargeItemDefinition", "publisher", element.getPublisherElement(), -1);
4630    }
4631    for (int i = 0; i < element.getContact().size(); i++) {
4632      composeContactDetail(t, "ChargeItemDefinition", "contact", element.getContact().get(i), i);
4633    }
4634    if (element.hasDescriptionElement()) {
4635      composeMarkdown(t, "ChargeItemDefinition", "description", element.getDescriptionElement(), -1);
4636    }
4637    for (int i = 0; i < element.getUseContext().size(); i++) {
4638      composeUsageContext(t, "ChargeItemDefinition", "useContext", element.getUseContext().get(i), i);
4639    }
4640    for (int i = 0; i < element.getJurisdiction().size(); i++) {
4641      composeCodeableConcept(t, "ChargeItemDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
4642    }
4643    if (element.hasPurposeElement()) {
4644      composeMarkdown(t, "ChargeItemDefinition", "purpose", element.getPurposeElement(), -1);
4645    }
4646    if (element.hasCopyrightElement()) {
4647      composeMarkdown(t, "ChargeItemDefinition", "copyright", element.getCopyrightElement(), -1);
4648    }
4649    if (element.hasApprovalDateElement()) {
4650      composeDate(t, "ChargeItemDefinition", "approvalDate", element.getApprovalDateElement(), -1);
4651    }
4652    if (element.hasLastReviewDateElement()) {
4653      composeDate(t, "ChargeItemDefinition", "lastReviewDate", element.getLastReviewDateElement(), -1);
4654    }
4655    if (element.hasCode()) {
4656      composeCodeableConcept(t, "ChargeItemDefinition", "code", element.getCode(), -1);
4657    }
4658    for (int i = 0; i < element.getInstance().size(); i++) {
4659      composeReference(t, "ChargeItemDefinition", "instance", element.getInstance().get(i), i);
4660    }
4661    for (int i = 0; i < element.getApplicability().size(); i++) {
4662      composeChargeItemDefinitionApplicabilityComponent(t, "ChargeItemDefinition", "applicability", element.getApplicability().get(i), i);
4663    }
4664    for (int i = 0; i < element.getPropertyGroup().size(); i++) {
4665      composeChargeItemDefinitionPropertyGroupComponent(t, "ChargeItemDefinition", "propertyGroup", element.getPropertyGroup().get(i), i);
4666    }
4667  }
4668
4669  protected void composeChargeItemDefinitionApplicabilityComponent(Complex parent, String parentType, String name, ChargeItemDefinition.ChargeItemDefinitionApplicabilityComponent element, int index) {
4670    if (element == null) 
4671      return;
4672    Complex t;
4673    if (Utilities.noString(parentType))
4674      t = parent;
4675    else {
4676      t = parent.predicate("fhir:"+parentType+'.'+name);
4677    }
4678    composeBackboneElement(t, "applicability", name, element, index);
4679    if (element.hasCondition()) {
4680      composeExpression(t, "ChargeItemDefinitionApplicabilityComponent", "condition", element.getCondition(), -1);
4681    }
4682    if (element.hasEffectivePeriod()) {
4683      composePeriod(t, "ChargeItemDefinitionApplicabilityComponent", "effectivePeriod", element.getEffectivePeriod(), -1);
4684    }
4685    if (element.hasRelatedArtifact()) {
4686      composeRelatedArtifact(t, "ChargeItemDefinitionApplicabilityComponent", "relatedArtifact", element.getRelatedArtifact(), -1);
4687    }
4688  }
4689
4690  protected void composeChargeItemDefinitionPropertyGroupComponent(Complex parent, String parentType, String name, ChargeItemDefinition.ChargeItemDefinitionPropertyGroupComponent element, int index) {
4691    if (element == null) 
4692      return;
4693    Complex t;
4694    if (Utilities.noString(parentType))
4695      t = parent;
4696    else {
4697      t = parent.predicate("fhir:"+parentType+'.'+name);
4698    }
4699    composeBackboneElement(t, "propertyGroup", name, element, index);
4700    for (int i = 0; i < element.getApplicability().size(); i++) {
4701      composeChargeItemDefinitionApplicabilityComponent(t, "ChargeItemDefinitionPropertyGroupComponent", "applicability", element.getApplicability().get(i), i);
4702    }
4703    for (int i = 0; i < element.getPriceComponent().size(); i++) {
4704      composeMonetaryComponent(t, "ChargeItemDefinitionPropertyGroupComponent", "priceComponent", element.getPriceComponent().get(i), i);
4705    }
4706  }
4707
4708  protected void composeCitation(Complex parent, String parentType, String name, Citation element, int index) {
4709    if (element == null) 
4710      return;
4711    Complex t;
4712    if (Utilities.noString(parentType))
4713      t = parent;
4714    else {
4715      t = parent.predicate("fhir:"+parentType+'.'+name);
4716    }
4717    composeMetadataResource(t, "Citation", name, element, index);
4718    if (element.hasUrlElement()) {
4719      composeUri(t, "Citation", "url", element.getUrlElement(), -1);
4720    }
4721    for (int i = 0; i < element.getIdentifier().size(); i++) {
4722      composeIdentifier(t, "Citation", "identifier", element.getIdentifier().get(i), i);
4723    }
4724    if (element.hasVersionElement()) {
4725      composeString(t, "Citation", "version", element.getVersionElement(), -1);
4726    }
4727    if (element.hasNameElement()) {
4728      composeString(t, "Citation", "name", element.getNameElement(), -1);
4729    }
4730    if (element.hasTitleElement()) {
4731      composeString(t, "Citation", "title", element.getTitleElement(), -1);
4732    }
4733    if (element.hasStatusElement()) {
4734      composeEnum(t, "Citation", "status", element.getStatusElement(), -1);
4735    }
4736    if (element.hasExperimentalElement()) {
4737      composeBoolean(t, "Citation", "experimental", element.getExperimentalElement(), -1);
4738    }
4739    if (element.hasDateElement()) {
4740      composeDateTime(t, "Citation", "date", element.getDateElement(), -1);
4741    }
4742    if (element.hasPublisherElement()) {
4743      composeString(t, "Citation", "publisher", element.getPublisherElement(), -1);
4744    }
4745    for (int i = 0; i < element.getContact().size(); i++) {
4746      composeContactDetail(t, "Citation", "contact", element.getContact().get(i), i);
4747    }
4748    if (element.hasDescriptionElement()) {
4749      composeMarkdown(t, "Citation", "description", element.getDescriptionElement(), -1);
4750    }
4751    for (int i = 0; i < element.getUseContext().size(); i++) {
4752      composeUsageContext(t, "Citation", "useContext", element.getUseContext().get(i), i);
4753    }
4754    for (int i = 0; i < element.getJurisdiction().size(); i++) {
4755      composeCodeableConcept(t, "Citation", "jurisdiction", element.getJurisdiction().get(i), i);
4756    }
4757    if (element.hasPurposeElement()) {
4758      composeMarkdown(t, "Citation", "purpose", element.getPurposeElement(), -1);
4759    }
4760    if (element.hasCopyrightElement()) {
4761      composeMarkdown(t, "Citation", "copyright", element.getCopyrightElement(), -1);
4762    }
4763    if (element.hasApprovalDateElement()) {
4764      composeDate(t, "Citation", "approvalDate", element.getApprovalDateElement(), -1);
4765    }
4766    if (element.hasLastReviewDateElement()) {
4767      composeDate(t, "Citation", "lastReviewDate", element.getLastReviewDateElement(), -1);
4768    }
4769    if (element.hasEffectivePeriod()) {
4770      composePeriod(t, "Citation", "effectivePeriod", element.getEffectivePeriod(), -1);
4771    }
4772    for (int i = 0; i < element.getAuthor().size(); i++) {
4773      composeContactDetail(t, "Citation", "author", element.getAuthor().get(i), i);
4774    }
4775    for (int i = 0; i < element.getEditor().size(); i++) {
4776      composeContactDetail(t, "Citation", "editor", element.getEditor().get(i), i);
4777    }
4778    for (int i = 0; i < element.getReviewer().size(); i++) {
4779      composeContactDetail(t, "Citation", "reviewer", element.getReviewer().get(i), i);
4780    }
4781    for (int i = 0; i < element.getEndorser().size(); i++) {
4782      composeContactDetail(t, "Citation", "endorser", element.getEndorser().get(i), i);
4783    }
4784    for (int i = 0; i < element.getSummary().size(); i++) {
4785      composeCitationSummaryComponent(t, "Citation", "summary", element.getSummary().get(i), i);
4786    }
4787    for (int i = 0; i < element.getClassification().size(); i++) {
4788      composeCitationClassificationComponent(t, "Citation", "classification", element.getClassification().get(i), i);
4789    }
4790    for (int i = 0; i < element.getNote().size(); i++) {
4791      composeAnnotation(t, "Citation", "note", element.getNote().get(i), i);
4792    }
4793    for (int i = 0; i < element.getCurrentState().size(); i++) {
4794      composeCodeableConcept(t, "Citation", "currentState", element.getCurrentState().get(i), i);
4795    }
4796    for (int i = 0; i < element.getStatusDate().size(); i++) {
4797      composeCitationStatusDateComponent(t, "Citation", "statusDate", element.getStatusDate().get(i), i);
4798    }
4799    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
4800      composeRelatedArtifact(t, "Citation", "relatedArtifact", element.getRelatedArtifact().get(i), i);
4801    }
4802    if (element.hasCitedArtifact()) {
4803      composeCitationCitedArtifactComponent(t, "Citation", "citedArtifact", element.getCitedArtifact(), -1);
4804    }
4805  }
4806
4807  protected void composeCitationSummaryComponent(Complex parent, String parentType, String name, Citation.CitationSummaryComponent element, int index) {
4808    if (element == null) 
4809      return;
4810    Complex t;
4811    if (Utilities.noString(parentType))
4812      t = parent;
4813    else {
4814      t = parent.predicate("fhir:"+parentType+'.'+name);
4815    }
4816    composeBackboneElement(t, "summary", name, element, index);
4817    if (element.hasStyle()) {
4818      composeCodeableConcept(t, "CitationSummaryComponent", "style", element.getStyle(), -1);
4819    }
4820    if (element.hasTextElement()) {
4821      composeMarkdown(t, "CitationSummaryComponent", "text", element.getTextElement(), -1);
4822    }
4823  }
4824
4825  protected void composeCitationClassificationComponent(Complex parent, String parentType, String name, Citation.CitationClassificationComponent element, int index) {
4826    if (element == null) 
4827      return;
4828    Complex t;
4829    if (Utilities.noString(parentType))
4830      t = parent;
4831    else {
4832      t = parent.predicate("fhir:"+parentType+'.'+name);
4833    }
4834    composeBackboneElement(t, "classification", name, element, index);
4835    if (element.hasType()) {
4836      composeCodeableConcept(t, "CitationClassificationComponent", "type", element.getType(), -1);
4837    }
4838    for (int i = 0; i < element.getClassifier().size(); i++) {
4839      composeCodeableConcept(t, "CitationClassificationComponent", "classifier", element.getClassifier().get(i), i);
4840    }
4841  }
4842
4843  protected void composeCitationStatusDateComponent(Complex parent, String parentType, String name, Citation.CitationStatusDateComponent element, int index) {
4844    if (element == null) 
4845      return;
4846    Complex t;
4847    if (Utilities.noString(parentType))
4848      t = parent;
4849    else {
4850      t = parent.predicate("fhir:"+parentType+'.'+name);
4851    }
4852    composeBackboneElement(t, "statusDate", name, element, index);
4853    if (element.hasActivity()) {
4854      composeCodeableConcept(t, "CitationStatusDateComponent", "activity", element.getActivity(), -1);
4855    }
4856    if (element.hasActualElement()) {
4857      composeBoolean(t, "CitationStatusDateComponent", "actual", element.getActualElement(), -1);
4858    }
4859    if (element.hasPeriod()) {
4860      composePeriod(t, "CitationStatusDateComponent", "period", element.getPeriod(), -1);
4861    }
4862  }
4863
4864  protected void composeCitationCitedArtifactComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactComponent element, int index) {
4865    if (element == null) 
4866      return;
4867    Complex t;
4868    if (Utilities.noString(parentType))
4869      t = parent;
4870    else {
4871      t = parent.predicate("fhir:"+parentType+'.'+name);
4872    }
4873    composeBackboneElement(t, "citedArtifact", name, element, index);
4874    for (int i = 0; i < element.getIdentifier().size(); i++) {
4875      composeIdentifier(t, "CitationCitedArtifactComponent", "identifier", element.getIdentifier().get(i), i);
4876    }
4877    for (int i = 0; i < element.getRelatedIdentifier().size(); i++) {
4878      composeIdentifier(t, "CitationCitedArtifactComponent", "relatedIdentifier", element.getRelatedIdentifier().get(i), i);
4879    }
4880    if (element.hasDateAccessedElement()) {
4881      composeDateTime(t, "CitationCitedArtifactComponent", "dateAccessed", element.getDateAccessedElement(), -1);
4882    }
4883    if (element.hasVersion()) {
4884      composeCitationCitedArtifactVersionComponent(t, "CitationCitedArtifactComponent", "version", element.getVersion(), -1);
4885    }
4886    for (int i = 0; i < element.getCurrentState().size(); i++) {
4887      composeCodeableConcept(t, "CitationCitedArtifactComponent", "currentState", element.getCurrentState().get(i), i);
4888    }
4889    for (int i = 0; i < element.getStatusDate().size(); i++) {
4890      composeCitationCitedArtifactStatusDateComponent(t, "CitationCitedArtifactComponent", "statusDate", element.getStatusDate().get(i), i);
4891    }
4892    for (int i = 0; i < element.getTitle().size(); i++) {
4893      composeCitationCitedArtifactTitleComponent(t, "CitationCitedArtifactComponent", "title", element.getTitle().get(i), i);
4894    }
4895    for (int i = 0; i < element.getAbstract().size(); i++) {
4896      composeCitationCitedArtifactAbstractComponent(t, "CitationCitedArtifactComponent", "abstract", element.getAbstract().get(i), i);
4897    }
4898    if (element.hasPart()) {
4899      composeCitationCitedArtifactPartComponent(t, "CitationCitedArtifactComponent", "part", element.getPart(), -1);
4900    }
4901    for (int i = 0; i < element.getRelatesTo().size(); i++) {
4902      composeCitationCitedArtifactRelatesToComponent(t, "CitationCitedArtifactComponent", "relatesTo", element.getRelatesTo().get(i), i);
4903    }
4904    for (int i = 0; i < element.getPublicationForm().size(); i++) {
4905      composeCitationCitedArtifactPublicationFormComponent(t, "CitationCitedArtifactComponent", "publicationForm", element.getPublicationForm().get(i), i);
4906    }
4907    for (int i = 0; i < element.getWebLocation().size(); i++) {
4908      composeCitationCitedArtifactWebLocationComponent(t, "CitationCitedArtifactComponent", "webLocation", element.getWebLocation().get(i), i);
4909    }
4910    for (int i = 0; i < element.getClassification().size(); i++) {
4911      composeCitationCitedArtifactClassificationComponent(t, "CitationCitedArtifactComponent", "classification", element.getClassification().get(i), i);
4912    }
4913    if (element.hasContributorship()) {
4914      composeCitationCitedArtifactContributorshipComponent(t, "CitationCitedArtifactComponent", "contributorship", element.getContributorship(), -1);
4915    }
4916    for (int i = 0; i < element.getNote().size(); i++) {
4917      composeAnnotation(t, "CitationCitedArtifactComponent", "note", element.getNote().get(i), i);
4918    }
4919  }
4920
4921  protected void composeCitationCitedArtifactVersionComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactVersionComponent element, int index) {
4922    if (element == null) 
4923      return;
4924    Complex t;
4925    if (Utilities.noString(parentType))
4926      t = parent;
4927    else {
4928      t = parent.predicate("fhir:"+parentType+'.'+name);
4929    }
4930    composeBackboneElement(t, "version", name, element, index);
4931    if (element.hasValueElement()) {
4932      composeString(t, "CitationCitedArtifactVersionComponent", "value", element.getValueElement(), -1);
4933    }
4934    if (element.hasBaseCitation()) {
4935      composeReference(t, "CitationCitedArtifactVersionComponent", "baseCitation", element.getBaseCitation(), -1);
4936    }
4937  }
4938
4939  protected void composeCitationCitedArtifactStatusDateComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactStatusDateComponent element, int index) {
4940    if (element == null) 
4941      return;
4942    Complex t;
4943    if (Utilities.noString(parentType))
4944      t = parent;
4945    else {
4946      t = parent.predicate("fhir:"+parentType+'.'+name);
4947    }
4948    composeBackboneElement(t, "statusDate", name, element, index);
4949    if (element.hasActivity()) {
4950      composeCodeableConcept(t, "CitationCitedArtifactStatusDateComponent", "activity", element.getActivity(), -1);
4951    }
4952    if (element.hasActualElement()) {
4953      composeBoolean(t, "CitationCitedArtifactStatusDateComponent", "actual", element.getActualElement(), -1);
4954    }
4955    if (element.hasPeriod()) {
4956      composePeriod(t, "CitationCitedArtifactStatusDateComponent", "period", element.getPeriod(), -1);
4957    }
4958  }
4959
4960  protected void composeCitationCitedArtifactTitleComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactTitleComponent element, int index) {
4961    if (element == null) 
4962      return;
4963    Complex t;
4964    if (Utilities.noString(parentType))
4965      t = parent;
4966    else {
4967      t = parent.predicate("fhir:"+parentType+'.'+name);
4968    }
4969    composeBackboneElement(t, "title", name, element, index);
4970    for (int i = 0; i < element.getType().size(); i++) {
4971      composeCodeableConcept(t, "CitationCitedArtifactTitleComponent", "type", element.getType().get(i), i);
4972    }
4973    if (element.hasLanguage()) {
4974      composeCodeableConcept(t, "CitationCitedArtifactTitleComponent", "language", element.getLanguage(), -1);
4975    }
4976    if (element.hasTextElement()) {
4977      composeMarkdown(t, "CitationCitedArtifactTitleComponent", "text", element.getTextElement(), -1);
4978    }
4979  }
4980
4981  protected void composeCitationCitedArtifactAbstractComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactAbstractComponent element, int index) {
4982    if (element == null) 
4983      return;
4984    Complex t;
4985    if (Utilities.noString(parentType))
4986      t = parent;
4987    else {
4988      t = parent.predicate("fhir:"+parentType+'.'+name);
4989    }
4990    composeBackboneElement(t, "abstract", name, element, index);
4991    if (element.hasType()) {
4992      composeCodeableConcept(t, "CitationCitedArtifactAbstractComponent", "type", element.getType(), -1);
4993    }
4994    if (element.hasLanguage()) {
4995      composeCodeableConcept(t, "CitationCitedArtifactAbstractComponent", "language", element.getLanguage(), -1);
4996    }
4997    if (element.hasTextElement()) {
4998      composeMarkdown(t, "CitationCitedArtifactAbstractComponent", "text", element.getTextElement(), -1);
4999    }
5000    if (element.hasCopyrightElement()) {
5001      composeMarkdown(t, "CitationCitedArtifactAbstractComponent", "copyright", element.getCopyrightElement(), -1);
5002    }
5003  }
5004
5005  protected void composeCitationCitedArtifactPartComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactPartComponent element, int index) {
5006    if (element == null) 
5007      return;
5008    Complex t;
5009    if (Utilities.noString(parentType))
5010      t = parent;
5011    else {
5012      t = parent.predicate("fhir:"+parentType+'.'+name);
5013    }
5014    composeBackboneElement(t, "part", name, element, index);
5015    if (element.hasType()) {
5016      composeCodeableConcept(t, "CitationCitedArtifactPartComponent", "type", element.getType(), -1);
5017    }
5018    if (element.hasValueElement()) {
5019      composeString(t, "CitationCitedArtifactPartComponent", "value", element.getValueElement(), -1);
5020    }
5021    if (element.hasBaseCitation()) {
5022      composeReference(t, "CitationCitedArtifactPartComponent", "baseCitation", element.getBaseCitation(), -1);
5023    }
5024  }
5025
5026  protected void composeCitationCitedArtifactRelatesToComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactRelatesToComponent element, int index) {
5027    if (element == null) 
5028      return;
5029    Complex t;
5030    if (Utilities.noString(parentType))
5031      t = parent;
5032    else {
5033      t = parent.predicate("fhir:"+parentType+'.'+name);
5034    }
5035    composeBackboneElement(t, "relatesTo", name, element, index);
5036    if (element.hasTypeElement()) {
5037      composeEnum(t, "CitationCitedArtifactRelatesToComponent", "type", element.getTypeElement(), -1);
5038    }
5039    for (int i = 0; i < element.getClassifier().size(); i++) {
5040      composeCodeableConcept(t, "CitationCitedArtifactRelatesToComponent", "classifier", element.getClassifier().get(i), i);
5041    }
5042    if (element.hasLabelElement()) {
5043      composeString(t, "CitationCitedArtifactRelatesToComponent", "label", element.getLabelElement(), -1);
5044    }
5045    if (element.hasDisplayElement()) {
5046      composeString(t, "CitationCitedArtifactRelatesToComponent", "display", element.getDisplayElement(), -1);
5047    }
5048    if (element.hasCitationElement()) {
5049      composeMarkdown(t, "CitationCitedArtifactRelatesToComponent", "citation", element.getCitationElement(), -1);
5050    }
5051    if (element.hasDocument()) {
5052      composeAttachment(t, "CitationCitedArtifactRelatesToComponent", "document", element.getDocument(), -1);
5053    }
5054    if (element.hasResourceElement()) {
5055      composeCanonical(t, "CitationCitedArtifactRelatesToComponent", "resource", element.getResourceElement(), -1);
5056    }
5057    if (element.hasResourceReference()) {
5058      composeReference(t, "CitationCitedArtifactRelatesToComponent", "resourceReference", element.getResourceReference(), -1);
5059    }
5060  }
5061
5062  protected void composeCitationCitedArtifactPublicationFormComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactPublicationFormComponent element, int index) {
5063    if (element == null) 
5064      return;
5065    Complex t;
5066    if (Utilities.noString(parentType))
5067      t = parent;
5068    else {
5069      t = parent.predicate("fhir:"+parentType+'.'+name);
5070    }
5071    composeBackboneElement(t, "publicationForm", name, element, index);
5072    if (element.hasPublishedIn()) {
5073      composeCitationCitedArtifactPublicationFormPublishedInComponent(t, "CitationCitedArtifactPublicationFormComponent", "publishedIn", element.getPublishedIn(), -1);
5074    }
5075    if (element.hasCitedMedium()) {
5076      composeCodeableConcept(t, "CitationCitedArtifactPublicationFormComponent", "citedMedium", element.getCitedMedium(), -1);
5077    }
5078    if (element.hasVolumeElement()) {
5079      composeString(t, "CitationCitedArtifactPublicationFormComponent", "volume", element.getVolumeElement(), -1);
5080    }
5081    if (element.hasIssueElement()) {
5082      composeString(t, "CitationCitedArtifactPublicationFormComponent", "issue", element.getIssueElement(), -1);
5083    }
5084    if (element.hasPublicationDateYearElement()) {
5085      composeString(t, "CitationCitedArtifactPublicationFormComponent", "publicationDateYear", element.getPublicationDateYearElement(), -1);
5086    }
5087    if (element.hasPublicationDateMonthElement()) {
5088      composeString(t, "CitationCitedArtifactPublicationFormComponent", "publicationDateMonth", element.getPublicationDateMonthElement(), -1);
5089    }
5090    if (element.hasPublicationDateDayElement()) {
5091      composeString(t, "CitationCitedArtifactPublicationFormComponent", "publicationDateDay", element.getPublicationDateDayElement(), -1);
5092    }
5093    if (element.hasPublicationDateSeasonElement()) {
5094      composeString(t, "CitationCitedArtifactPublicationFormComponent", "publicationDateSeason", element.getPublicationDateSeasonElement(), -1);
5095    }
5096    if (element.hasPublicationDateTextElement()) {
5097      composeString(t, "CitationCitedArtifactPublicationFormComponent", "publicationDateText", element.getPublicationDateTextElement(), -1);
5098    }
5099    if (element.hasArticleDateElement()) {
5100      composeDateTime(t, "CitationCitedArtifactPublicationFormComponent", "articleDate", element.getArticleDateElement(), -1);
5101    }
5102    if (element.hasLastRevisionDateElement()) {
5103      composeDateTime(t, "CitationCitedArtifactPublicationFormComponent", "lastRevisionDate", element.getLastRevisionDateElement(), -1);
5104    }
5105    for (int i = 0; i < element.getLanguage().size(); i++) {
5106      composeCodeableConcept(t, "CitationCitedArtifactPublicationFormComponent", "language", element.getLanguage().get(i), i);
5107    }
5108    if (element.hasAccessionNumberElement()) {
5109      composeString(t, "CitationCitedArtifactPublicationFormComponent", "accessionNumber", element.getAccessionNumberElement(), -1);
5110    }
5111    if (element.hasPageStringElement()) {
5112      composeString(t, "CitationCitedArtifactPublicationFormComponent", "pageString", element.getPageStringElement(), -1);
5113    }
5114    if (element.hasFirstPageElement()) {
5115      composeString(t, "CitationCitedArtifactPublicationFormComponent", "firstPage", element.getFirstPageElement(), -1);
5116    }
5117    if (element.hasLastPageElement()) {
5118      composeString(t, "CitationCitedArtifactPublicationFormComponent", "lastPage", element.getLastPageElement(), -1);
5119    }
5120    if (element.hasPageCountElement()) {
5121      composeString(t, "CitationCitedArtifactPublicationFormComponent", "pageCount", element.getPageCountElement(), -1);
5122    }
5123    if (element.hasCopyrightElement()) {
5124      composeMarkdown(t, "CitationCitedArtifactPublicationFormComponent", "copyright", element.getCopyrightElement(), -1);
5125    }
5126  }
5127
5128  protected void composeCitationCitedArtifactPublicationFormPublishedInComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactPublicationFormPublishedInComponent element, int index) {
5129    if (element == null) 
5130      return;
5131    Complex t;
5132    if (Utilities.noString(parentType))
5133      t = parent;
5134    else {
5135      t = parent.predicate("fhir:"+parentType+'.'+name);
5136    }
5137    composeBackboneElement(t, "publishedIn", name, element, index);
5138    if (element.hasType()) {
5139      composeCodeableConcept(t, "CitationCitedArtifactPublicationFormPublishedInComponent", "type", element.getType(), -1);
5140    }
5141    for (int i = 0; i < element.getIdentifier().size(); i++) {
5142      composeIdentifier(t, "CitationCitedArtifactPublicationFormPublishedInComponent", "identifier", element.getIdentifier().get(i), i);
5143    }
5144    if (element.hasTitleElement()) {
5145      composeString(t, "CitationCitedArtifactPublicationFormPublishedInComponent", "title", element.getTitleElement(), -1);
5146    }
5147    if (element.hasPublisher()) {
5148      composeReference(t, "CitationCitedArtifactPublicationFormPublishedInComponent", "publisher", element.getPublisher(), -1);
5149    }
5150    if (element.hasPublisherLocationElement()) {
5151      composeString(t, "CitationCitedArtifactPublicationFormPublishedInComponent", "publisherLocation", element.getPublisherLocationElement(), -1);
5152    }
5153  }
5154
5155  protected void composeCitationCitedArtifactWebLocationComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactWebLocationComponent element, int index) {
5156    if (element == null) 
5157      return;
5158    Complex t;
5159    if (Utilities.noString(parentType))
5160      t = parent;
5161    else {
5162      t = parent.predicate("fhir:"+parentType+'.'+name);
5163    }
5164    composeBackboneElement(t, "webLocation", name, element, index);
5165    for (int i = 0; i < element.getClassifier().size(); i++) {
5166      composeCodeableConcept(t, "CitationCitedArtifactWebLocationComponent", "classifier", element.getClassifier().get(i), i);
5167    }
5168    if (element.hasUrlElement()) {
5169      composeUri(t, "CitationCitedArtifactWebLocationComponent", "url", element.getUrlElement(), -1);
5170    }
5171  }
5172
5173  protected void composeCitationCitedArtifactClassificationComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactClassificationComponent element, int index) {
5174    if (element == null) 
5175      return;
5176    Complex t;
5177    if (Utilities.noString(parentType))
5178      t = parent;
5179    else {
5180      t = parent.predicate("fhir:"+parentType+'.'+name);
5181    }
5182    composeBackboneElement(t, "classification", name, element, index);
5183    if (element.hasType()) {
5184      composeCodeableConcept(t, "CitationCitedArtifactClassificationComponent", "type", element.getType(), -1);
5185    }
5186    for (int i = 0; i < element.getClassifier().size(); i++) {
5187      composeCodeableConcept(t, "CitationCitedArtifactClassificationComponent", "classifier", element.getClassifier().get(i), i);
5188    }
5189    for (int i = 0; i < element.getArtifactAssessment().size(); i++) {
5190      composeReference(t, "CitationCitedArtifactClassificationComponent", "artifactAssessment", element.getArtifactAssessment().get(i), i);
5191    }
5192  }
5193
5194  protected void composeCitationCitedArtifactContributorshipComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactContributorshipComponent element, int index) {
5195    if (element == null) 
5196      return;
5197    Complex t;
5198    if (Utilities.noString(parentType))
5199      t = parent;
5200    else {
5201      t = parent.predicate("fhir:"+parentType+'.'+name);
5202    }
5203    composeBackboneElement(t, "contributorship", name, element, index);
5204    if (element.hasCompleteElement()) {
5205      composeBoolean(t, "CitationCitedArtifactContributorshipComponent", "complete", element.getCompleteElement(), -1);
5206    }
5207    for (int i = 0; i < element.getEntry().size(); i++) {
5208      composeCitationCitedArtifactContributorshipEntryComponent(t, "CitationCitedArtifactContributorshipComponent", "entry", element.getEntry().get(i), i);
5209    }
5210    for (int i = 0; i < element.getSummary().size(); i++) {
5211      composeCitationContributorshipSummaryComponent(t, "CitationCitedArtifactContributorshipComponent", "summary", element.getSummary().get(i), i);
5212    }
5213  }
5214
5215  protected void composeCitationCitedArtifactContributorshipEntryComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactContributorshipEntryComponent element, int index) {
5216    if (element == null) 
5217      return;
5218    Complex t;
5219    if (Utilities.noString(parentType))
5220      t = parent;
5221    else {
5222      t = parent.predicate("fhir:"+parentType+'.'+name);
5223    }
5224    composeBackboneElement(t, "entry", name, element, index);
5225    if (element.hasContributor()) {
5226      composeReference(t, "CitationCitedArtifactContributorshipEntryComponent", "contributor", element.getContributor(), -1);
5227    }
5228    if (element.hasForenameInitialsElement()) {
5229      composeString(t, "CitationCitedArtifactContributorshipEntryComponent", "forenameInitials", element.getForenameInitialsElement(), -1);
5230    }
5231    for (int i = 0; i < element.getAffiliation().size(); i++) {
5232      composeReference(t, "CitationCitedArtifactContributorshipEntryComponent", "affiliation", element.getAffiliation().get(i), i);
5233    }
5234    for (int i = 0; i < element.getContributionType().size(); i++) {
5235      composeCodeableConcept(t, "CitationCitedArtifactContributorshipEntryComponent", "contributionType", element.getContributionType().get(i), i);
5236    }
5237    if (element.hasRole()) {
5238      composeCodeableConcept(t, "CitationCitedArtifactContributorshipEntryComponent", "role", element.getRole(), -1);
5239    }
5240    for (int i = 0; i < element.getContributionInstance().size(); i++) {
5241      composeCitationCitedArtifactContributorshipEntryContributionInstanceComponent(t, "CitationCitedArtifactContributorshipEntryComponent", "contributionInstance", element.getContributionInstance().get(i), i);
5242    }
5243    if (element.hasCorrespondingContactElement()) {
5244      composeBoolean(t, "CitationCitedArtifactContributorshipEntryComponent", "correspondingContact", element.getCorrespondingContactElement(), -1);
5245    }
5246    if (element.hasRankingOrderElement()) {
5247      composePositiveInt(t, "CitationCitedArtifactContributorshipEntryComponent", "rankingOrder", element.getRankingOrderElement(), -1);
5248    }
5249  }
5250
5251  protected void composeCitationCitedArtifactContributorshipEntryContributionInstanceComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactContributorshipEntryContributionInstanceComponent element, int index) {
5252    if (element == null) 
5253      return;
5254    Complex t;
5255    if (Utilities.noString(parentType))
5256      t = parent;
5257    else {
5258      t = parent.predicate("fhir:"+parentType+'.'+name);
5259    }
5260    composeBackboneElement(t, "contributionInstance", name, element, index);
5261    if (element.hasType()) {
5262      composeCodeableConcept(t, "CitationCitedArtifactContributorshipEntryContributionInstanceComponent", "type", element.getType(), -1);
5263    }
5264    if (element.hasTimeElement()) {
5265      composeDateTime(t, "CitationCitedArtifactContributorshipEntryContributionInstanceComponent", "time", element.getTimeElement(), -1);
5266    }
5267  }
5268
5269  protected void composeCitationContributorshipSummaryComponent(Complex parent, String parentType, String name, Citation.ContributorshipSummaryComponent element, int index) {
5270    if (element == null) 
5271      return;
5272    Complex t;
5273    if (Utilities.noString(parentType))
5274      t = parent;
5275    else {
5276      t = parent.predicate("fhir:"+parentType+'.'+name);
5277    }
5278    composeBackboneElement(t, "summary", name, element, index);
5279    if (element.hasType()) {
5280      composeCodeableConcept(t, "ContributorshipSummaryComponent", "type", element.getType(), -1);
5281    }
5282    if (element.hasStyle()) {
5283      composeCodeableConcept(t, "ContributorshipSummaryComponent", "style", element.getStyle(), -1);
5284    }
5285    if (element.hasSource()) {
5286      composeCodeableConcept(t, "ContributorshipSummaryComponent", "source", element.getSource(), -1);
5287    }
5288    if (element.hasValueElement()) {
5289      composeMarkdown(t, "ContributorshipSummaryComponent", "value", element.getValueElement(), -1);
5290    }
5291  }
5292
5293  protected void composeClaim(Complex parent, String parentType, String name, Claim element, int index) {
5294    if (element == null) 
5295      return;
5296    Complex t;
5297    if (Utilities.noString(parentType))
5298      t = parent;
5299    else {
5300      t = parent.predicate("fhir:"+parentType+'.'+name);
5301    }
5302    composeDomainResource(t, "Claim", name, element, index);
5303    for (int i = 0; i < element.getIdentifier().size(); i++) {
5304      composeIdentifier(t, "Claim", "identifier", element.getIdentifier().get(i), i);
5305    }
5306    if (element.hasStatusElement()) {
5307      composeEnum(t, "Claim", "status", element.getStatusElement(), -1);
5308    }
5309    if (element.hasType()) {
5310      composeCodeableConcept(t, "Claim", "type", element.getType(), -1);
5311    }
5312    if (element.hasSubType()) {
5313      composeCodeableConcept(t, "Claim", "subType", element.getSubType(), -1);
5314    }
5315    if (element.hasUseElement()) {
5316      composeEnum(t, "Claim", "use", element.getUseElement(), -1);
5317    }
5318    if (element.hasPatient()) {
5319      composeReference(t, "Claim", "patient", element.getPatient(), -1);
5320    }
5321    if (element.hasBillablePeriod()) {
5322      composePeriod(t, "Claim", "billablePeriod", element.getBillablePeriod(), -1);
5323    }
5324    if (element.hasCreatedElement()) {
5325      composeDateTime(t, "Claim", "created", element.getCreatedElement(), -1);
5326    }
5327    if (element.hasEnterer()) {
5328      composeReference(t, "Claim", "enterer", element.getEnterer(), -1);
5329    }
5330    if (element.hasInsurer()) {
5331      composeReference(t, "Claim", "insurer", element.getInsurer(), -1);
5332    }
5333    if (element.hasProvider()) {
5334      composeReference(t, "Claim", "provider", element.getProvider(), -1);
5335    }
5336    if (element.hasPriority()) {
5337      composeCodeableConcept(t, "Claim", "priority", element.getPriority(), -1);
5338    }
5339    if (element.hasFundsReserve()) {
5340      composeCodeableConcept(t, "Claim", "fundsReserve", element.getFundsReserve(), -1);
5341    }
5342    for (int i = 0; i < element.getRelated().size(); i++) {
5343      composeClaimRelatedClaimComponent(t, "Claim", "related", element.getRelated().get(i), i);
5344    }
5345    if (element.hasPrescription()) {
5346      composeReference(t, "Claim", "prescription", element.getPrescription(), -1);
5347    }
5348    if (element.hasOriginalPrescription()) {
5349      composeReference(t, "Claim", "originalPrescription", element.getOriginalPrescription(), -1);
5350    }
5351    if (element.hasPayee()) {
5352      composeClaimPayeeComponent(t, "Claim", "payee", element.getPayee(), -1);
5353    }
5354    if (element.hasReferral()) {
5355      composeReference(t, "Claim", "referral", element.getReferral(), -1);
5356    }
5357    for (int i = 0; i < element.getEncounter().size(); i++) {
5358      composeReference(t, "Claim", "encounter", element.getEncounter().get(i), i);
5359    }
5360    if (element.hasFacility()) {
5361      composeReference(t, "Claim", "facility", element.getFacility(), -1);
5362    }
5363    if (element.hasDiagnosisRelatedGroup()) {
5364      composeCodeableConcept(t, "Claim", "diagnosisRelatedGroup", element.getDiagnosisRelatedGroup(), -1);
5365    }
5366    for (int i = 0; i < element.getCareTeam().size(); i++) {
5367      composeClaimCareTeamComponent(t, "Claim", "careTeam", element.getCareTeam().get(i), i);
5368    }
5369    for (int i = 0; i < element.getSupportingInfo().size(); i++) {
5370      composeClaimSupportingInformationComponent(t, "Claim", "supportingInfo", element.getSupportingInfo().get(i), i);
5371    }
5372    for (int i = 0; i < element.getDiagnosis().size(); i++) {
5373      composeClaimDiagnosisComponent(t, "Claim", "diagnosis", element.getDiagnosis().get(i), i);
5374    }
5375    for (int i = 0; i < element.getProcedure().size(); i++) {
5376      composeClaimProcedureComponent(t, "Claim", "procedure", element.getProcedure().get(i), i);
5377    }
5378    for (int i = 0; i < element.getInsurance().size(); i++) {
5379      composeClaimInsuranceComponent(t, "Claim", "insurance", element.getInsurance().get(i), i);
5380    }
5381    if (element.hasAccident()) {
5382      composeClaimAccidentComponent(t, "Claim", "accident", element.getAccident(), -1);
5383    }
5384    if (element.hasPatientPaid()) {
5385      composeMoney(t, "Claim", "patientPaid", element.getPatientPaid(), -1);
5386    }
5387    for (int i = 0; i < element.getItem().size(); i++) {
5388      composeClaimItemComponent(t, "Claim", "item", element.getItem().get(i), i);
5389    }
5390    if (element.hasTotal()) {
5391      composeMoney(t, "Claim", "total", element.getTotal(), -1);
5392    }
5393  }
5394
5395  protected void composeClaimRelatedClaimComponent(Complex parent, String parentType, String name, Claim.RelatedClaimComponent element, int index) {
5396    if (element == null) 
5397      return;
5398    Complex t;
5399    if (Utilities.noString(parentType))
5400      t = parent;
5401    else {
5402      t = parent.predicate("fhir:"+parentType+'.'+name);
5403    }
5404    composeBackboneElement(t, "related", name, element, index);
5405    if (element.hasClaim()) {
5406      composeReference(t, "RelatedClaimComponent", "claim", element.getClaim(), -1);
5407    }
5408    if (element.hasRelationship()) {
5409      composeCodeableConcept(t, "RelatedClaimComponent", "relationship", element.getRelationship(), -1);
5410    }
5411    if (element.hasReference()) {
5412      composeIdentifier(t, "RelatedClaimComponent", "reference", element.getReference(), -1);
5413    }
5414  }
5415
5416  protected void composeClaimPayeeComponent(Complex parent, String parentType, String name, Claim.PayeeComponent element, int index) {
5417    if (element == null) 
5418      return;
5419    Complex t;
5420    if (Utilities.noString(parentType))
5421      t = parent;
5422    else {
5423      t = parent.predicate("fhir:"+parentType+'.'+name);
5424    }
5425    composeBackboneElement(t, "payee", name, element, index);
5426    if (element.hasType()) {
5427      composeCodeableConcept(t, "PayeeComponent", "type", element.getType(), -1);
5428    }
5429    if (element.hasParty()) {
5430      composeReference(t, "PayeeComponent", "party", element.getParty(), -1);
5431    }
5432  }
5433
5434  protected void composeClaimCareTeamComponent(Complex parent, String parentType, String name, Claim.CareTeamComponent element, int index) {
5435    if (element == null) 
5436      return;
5437    Complex t;
5438    if (Utilities.noString(parentType))
5439      t = parent;
5440    else {
5441      t = parent.predicate("fhir:"+parentType+'.'+name);
5442    }
5443    composeBackboneElement(t, "careTeam", name, element, index);
5444    if (element.hasSequenceElement()) {
5445      composePositiveInt(t, "CareTeamComponent", "sequence", element.getSequenceElement(), -1);
5446    }
5447    if (element.hasProvider()) {
5448      composeReference(t, "CareTeamComponent", "provider", element.getProvider(), -1);
5449    }
5450    if (element.hasResponsibleElement()) {
5451      composeBoolean(t, "CareTeamComponent", "responsible", element.getResponsibleElement(), -1);
5452    }
5453    if (element.hasRole()) {
5454      composeCodeableConcept(t, "CareTeamComponent", "role", element.getRole(), -1);
5455    }
5456    if (element.hasSpecialty()) {
5457      composeCodeableConcept(t, "CareTeamComponent", "specialty", element.getSpecialty(), -1);
5458    }
5459  }
5460
5461  protected void composeClaimSupportingInformationComponent(Complex parent, String parentType, String name, Claim.SupportingInformationComponent element, int index) {
5462    if (element == null) 
5463      return;
5464    Complex t;
5465    if (Utilities.noString(parentType))
5466      t = parent;
5467    else {
5468      t = parent.predicate("fhir:"+parentType+'.'+name);
5469    }
5470    composeBackboneElement(t, "supportingInfo", name, element, index);
5471    if (element.hasSequenceElement()) {
5472      composePositiveInt(t, "SupportingInformationComponent", "sequence", element.getSequenceElement(), -1);
5473    }
5474    if (element.hasCategory()) {
5475      composeCodeableConcept(t, "SupportingInformationComponent", "category", element.getCategory(), -1);
5476    }
5477    if (element.hasCode()) {
5478      composeCodeableConcept(t, "SupportingInformationComponent", "code", element.getCode(), -1);
5479    }
5480    if (element.hasTiming()) {
5481      composeType(t, "SupportingInformationComponent", "timing", element.getTiming(), -1);
5482    }
5483    if (element.hasValue()) {
5484      composeType(t, "SupportingInformationComponent", "value", element.getValue(), -1);
5485    }
5486    if (element.hasReason()) {
5487      composeCodeableConcept(t, "SupportingInformationComponent", "reason", element.getReason(), -1);
5488    }
5489  }
5490
5491  protected void composeClaimDiagnosisComponent(Complex parent, String parentType, String name, Claim.DiagnosisComponent element, int index) {
5492    if (element == null) 
5493      return;
5494    Complex t;
5495    if (Utilities.noString(parentType))
5496      t = parent;
5497    else {
5498      t = parent.predicate("fhir:"+parentType+'.'+name);
5499    }
5500    composeBackboneElement(t, "diagnosis", name, element, index);
5501    if (element.hasSequenceElement()) {
5502      composePositiveInt(t, "DiagnosisComponent", "sequence", element.getSequenceElement(), -1);
5503    }
5504    if (element.hasDiagnosis()) {
5505      composeType(t, "DiagnosisComponent", "diagnosis", element.getDiagnosis(), -1);
5506    }
5507    for (int i = 0; i < element.getType().size(); i++) {
5508      composeCodeableConcept(t, "DiagnosisComponent", "type", element.getType().get(i), i);
5509    }
5510    if (element.hasOnAdmission()) {
5511      composeCodeableConcept(t, "DiagnosisComponent", "onAdmission", element.getOnAdmission(), -1);
5512    }
5513  }
5514
5515  protected void composeClaimProcedureComponent(Complex parent, String parentType, String name, Claim.ProcedureComponent element, int index) {
5516    if (element == null) 
5517      return;
5518    Complex t;
5519    if (Utilities.noString(parentType))
5520      t = parent;
5521    else {
5522      t = parent.predicate("fhir:"+parentType+'.'+name);
5523    }
5524    composeBackboneElement(t, "procedure", name, element, index);
5525    if (element.hasSequenceElement()) {
5526      composePositiveInt(t, "ProcedureComponent", "sequence", element.getSequenceElement(), -1);
5527    }
5528    for (int i = 0; i < element.getType().size(); i++) {
5529      composeCodeableConcept(t, "ProcedureComponent", "type", element.getType().get(i), i);
5530    }
5531    if (element.hasDateElement()) {
5532      composeDateTime(t, "ProcedureComponent", "date", element.getDateElement(), -1);
5533    }
5534    if (element.hasProcedure()) {
5535      composeType(t, "ProcedureComponent", "procedure", element.getProcedure(), -1);
5536    }
5537    for (int i = 0; i < element.getUdi().size(); i++) {
5538      composeReference(t, "ProcedureComponent", "udi", element.getUdi().get(i), i);
5539    }
5540  }
5541
5542  protected void composeClaimInsuranceComponent(Complex parent, String parentType, String name, Claim.InsuranceComponent element, int index) {
5543    if (element == null) 
5544      return;
5545    Complex t;
5546    if (Utilities.noString(parentType))
5547      t = parent;
5548    else {
5549      t = parent.predicate("fhir:"+parentType+'.'+name);
5550    }
5551    composeBackboneElement(t, "insurance", name, element, index);
5552    if (element.hasSequenceElement()) {
5553      composePositiveInt(t, "InsuranceComponent", "sequence", element.getSequenceElement(), -1);
5554    }
5555    if (element.hasFocalElement()) {
5556      composeBoolean(t, "InsuranceComponent", "focal", element.getFocalElement(), -1);
5557    }
5558    if (element.hasIdentifier()) {
5559      composeIdentifier(t, "InsuranceComponent", "identifier", element.getIdentifier(), -1);
5560    }
5561    if (element.hasCoverage()) {
5562      composeReference(t, "InsuranceComponent", "coverage", element.getCoverage(), -1);
5563    }
5564    if (element.hasBusinessArrangementElement()) {
5565      composeString(t, "InsuranceComponent", "businessArrangement", element.getBusinessArrangementElement(), -1);
5566    }
5567    for (int i = 0; i < element.getPreAuthRef().size(); i++) {
5568      composeString(t, "InsuranceComponent", "preAuthRef", element.getPreAuthRef().get(i), i);
5569    }
5570    if (element.hasClaimResponse()) {
5571      composeReference(t, "InsuranceComponent", "claimResponse", element.getClaimResponse(), -1);
5572    }
5573  }
5574
5575  protected void composeClaimAccidentComponent(Complex parent, String parentType, String name, Claim.AccidentComponent element, int index) {
5576    if (element == null) 
5577      return;
5578    Complex t;
5579    if (Utilities.noString(parentType))
5580      t = parent;
5581    else {
5582      t = parent.predicate("fhir:"+parentType+'.'+name);
5583    }
5584    composeBackboneElement(t, "accident", name, element, index);
5585    if (element.hasDateElement()) {
5586      composeDate(t, "AccidentComponent", "date", element.getDateElement(), -1);
5587    }
5588    if (element.hasType()) {
5589      composeCodeableConcept(t, "AccidentComponent", "type", element.getType(), -1);
5590    }
5591    if (element.hasLocation()) {
5592      composeType(t, "AccidentComponent", "location", element.getLocation(), -1);
5593    }
5594  }
5595
5596  protected void composeClaimItemComponent(Complex parent, String parentType, String name, Claim.ItemComponent element, int index) {
5597    if (element == null) 
5598      return;
5599    Complex t;
5600    if (Utilities.noString(parentType))
5601      t = parent;
5602    else {
5603      t = parent.predicate("fhir:"+parentType+'.'+name);
5604    }
5605    composeBackboneElement(t, "item", name, element, index);
5606    if (element.hasSequenceElement()) {
5607      composePositiveInt(t, "ItemComponent", "sequence", element.getSequenceElement(), -1);
5608    }
5609    for (int i = 0; i < element.getCareTeamSequence().size(); i++) {
5610      composePositiveInt(t, "ItemComponent", "careTeamSequence", element.getCareTeamSequence().get(i), i);
5611    }
5612    for (int i = 0; i < element.getDiagnosisSequence().size(); i++) {
5613      composePositiveInt(t, "ItemComponent", "diagnosisSequence", element.getDiagnosisSequence().get(i), i);
5614    }
5615    for (int i = 0; i < element.getProcedureSequence().size(); i++) {
5616      composePositiveInt(t, "ItemComponent", "procedureSequence", element.getProcedureSequence().get(i), i);
5617    }
5618    for (int i = 0; i < element.getInformationSequence().size(); i++) {
5619      composePositiveInt(t, "ItemComponent", "informationSequence", element.getInformationSequence().get(i), i);
5620    }
5621    if (element.hasRevenue()) {
5622      composeCodeableConcept(t, "ItemComponent", "revenue", element.getRevenue(), -1);
5623    }
5624    if (element.hasCategory()) {
5625      composeCodeableConcept(t, "ItemComponent", "category", element.getCategory(), -1);
5626    }
5627    if (element.hasProductOrService()) {
5628      composeCodeableConcept(t, "ItemComponent", "productOrService", element.getProductOrService(), -1);
5629    }
5630    if (element.hasProductOrServiceEnd()) {
5631      composeCodeableConcept(t, "ItemComponent", "productOrServiceEnd", element.getProductOrServiceEnd(), -1);
5632    }
5633    for (int i = 0; i < element.getModifier().size(); i++) {
5634      composeCodeableConcept(t, "ItemComponent", "modifier", element.getModifier().get(i), i);
5635    }
5636    for (int i = 0; i < element.getProgramCode().size(); i++) {
5637      composeCodeableConcept(t, "ItemComponent", "programCode", element.getProgramCode().get(i), i);
5638    }
5639    if (element.hasServiced()) {
5640      composeType(t, "ItemComponent", "serviced", element.getServiced(), -1);
5641    }
5642    if (element.hasLocation()) {
5643      composeType(t, "ItemComponent", "location", element.getLocation(), -1);
5644    }
5645    if (element.hasPatientPaid()) {
5646      composeMoney(t, "ItemComponent", "patientPaid", element.getPatientPaid(), -1);
5647    }
5648    if (element.hasQuantity()) {
5649      composeQuantity(t, "ItemComponent", "quantity", element.getQuantity(), -1);
5650    }
5651    if (element.hasUnitPrice()) {
5652      composeMoney(t, "ItemComponent", "unitPrice", element.getUnitPrice(), -1);
5653    }
5654    if (element.hasFactorElement()) {
5655      composeDecimal(t, "ItemComponent", "factor", element.getFactorElement(), -1);
5656    }
5657    if (element.hasTax()) {
5658      composeMoney(t, "ItemComponent", "tax", element.getTax(), -1);
5659    }
5660    if (element.hasNet()) {
5661      composeMoney(t, "ItemComponent", "net", element.getNet(), -1);
5662    }
5663    for (int i = 0; i < element.getUdi().size(); i++) {
5664      composeReference(t, "ItemComponent", "udi", element.getUdi().get(i), i);
5665    }
5666    for (int i = 0; i < element.getBodySite().size(); i++) {
5667      composeClaimBodySiteComponent(t, "ItemComponent", "bodySite", element.getBodySite().get(i), i);
5668    }
5669    for (int i = 0; i < element.getEncounter().size(); i++) {
5670      composeReference(t, "ItemComponent", "encounter", element.getEncounter().get(i), i);
5671    }
5672    for (int i = 0; i < element.getDetail().size(); i++) {
5673      composeClaimDetailComponent(t, "ItemComponent", "detail", element.getDetail().get(i), i);
5674    }
5675  }
5676
5677  protected void composeClaimBodySiteComponent(Complex parent, String parentType, String name, Claim.BodySiteComponent element, int index) {
5678    if (element == null) 
5679      return;
5680    Complex t;
5681    if (Utilities.noString(parentType))
5682      t = parent;
5683    else {
5684      t = parent.predicate("fhir:"+parentType+'.'+name);
5685    }
5686    composeBackboneElement(t, "bodySite", name, element, index);
5687    for (int i = 0; i < element.getSite().size(); i++) {
5688      composeCodeableReference(t, "BodySiteComponent", "site", element.getSite().get(i), i);
5689    }
5690    for (int i = 0; i < element.getSubSite().size(); i++) {
5691      composeCodeableConcept(t, "BodySiteComponent", "subSite", element.getSubSite().get(i), i);
5692    }
5693  }
5694
5695  protected void composeClaimDetailComponent(Complex parent, String parentType, String name, Claim.DetailComponent element, int index) {
5696    if (element == null) 
5697      return;
5698    Complex t;
5699    if (Utilities.noString(parentType))
5700      t = parent;
5701    else {
5702      t = parent.predicate("fhir:"+parentType+'.'+name);
5703    }
5704    composeBackboneElement(t, "detail", name, element, index);
5705    if (element.hasSequenceElement()) {
5706      composePositiveInt(t, "DetailComponent", "sequence", element.getSequenceElement(), -1);
5707    }
5708    if (element.hasRevenue()) {
5709      composeCodeableConcept(t, "DetailComponent", "revenue", element.getRevenue(), -1);
5710    }
5711    if (element.hasCategory()) {
5712      composeCodeableConcept(t, "DetailComponent", "category", element.getCategory(), -1);
5713    }
5714    if (element.hasProductOrService()) {
5715      composeCodeableConcept(t, "DetailComponent", "productOrService", element.getProductOrService(), -1);
5716    }
5717    if (element.hasProductOrServiceEnd()) {
5718      composeCodeableConcept(t, "DetailComponent", "productOrServiceEnd", element.getProductOrServiceEnd(), -1);
5719    }
5720    for (int i = 0; i < element.getModifier().size(); i++) {
5721      composeCodeableConcept(t, "DetailComponent", "modifier", element.getModifier().get(i), i);
5722    }
5723    for (int i = 0; i < element.getProgramCode().size(); i++) {
5724      composeCodeableConcept(t, "DetailComponent", "programCode", element.getProgramCode().get(i), i);
5725    }
5726    if (element.hasPatientPaid()) {
5727      composeMoney(t, "DetailComponent", "patientPaid", element.getPatientPaid(), -1);
5728    }
5729    if (element.hasQuantity()) {
5730      composeQuantity(t, "DetailComponent", "quantity", element.getQuantity(), -1);
5731    }
5732    if (element.hasUnitPrice()) {
5733      composeMoney(t, "DetailComponent", "unitPrice", element.getUnitPrice(), -1);
5734    }
5735    if (element.hasFactorElement()) {
5736      composeDecimal(t, "DetailComponent", "factor", element.getFactorElement(), -1);
5737    }
5738    if (element.hasTax()) {
5739      composeMoney(t, "DetailComponent", "tax", element.getTax(), -1);
5740    }
5741    if (element.hasNet()) {
5742      composeMoney(t, "DetailComponent", "net", element.getNet(), -1);
5743    }
5744    for (int i = 0; i < element.getUdi().size(); i++) {
5745      composeReference(t, "DetailComponent", "udi", element.getUdi().get(i), i);
5746    }
5747    for (int i = 0; i < element.getSubDetail().size(); i++) {
5748      composeClaimSubDetailComponent(t, "DetailComponent", "subDetail", element.getSubDetail().get(i), i);
5749    }
5750  }
5751
5752  protected void composeClaimSubDetailComponent(Complex parent, String parentType, String name, Claim.SubDetailComponent element, int index) {
5753    if (element == null) 
5754      return;
5755    Complex t;
5756    if (Utilities.noString(parentType))
5757      t = parent;
5758    else {
5759      t = parent.predicate("fhir:"+parentType+'.'+name);
5760    }
5761    composeBackboneElement(t, "subDetail", name, element, index);
5762    if (element.hasSequenceElement()) {
5763      composePositiveInt(t, "SubDetailComponent", "sequence", element.getSequenceElement(), -1);
5764    }
5765    if (element.hasRevenue()) {
5766      composeCodeableConcept(t, "SubDetailComponent", "revenue", element.getRevenue(), -1);
5767    }
5768    if (element.hasCategory()) {
5769      composeCodeableConcept(t, "SubDetailComponent", "category", element.getCategory(), -1);
5770    }
5771    if (element.hasProductOrService()) {
5772      composeCodeableConcept(t, "SubDetailComponent", "productOrService", element.getProductOrService(), -1);
5773    }
5774    if (element.hasProductOrServiceEnd()) {
5775      composeCodeableConcept(t, "SubDetailComponent", "productOrServiceEnd", element.getProductOrServiceEnd(), -1);
5776    }
5777    for (int i = 0; i < element.getModifier().size(); i++) {
5778      composeCodeableConcept(t, "SubDetailComponent", "modifier", element.getModifier().get(i), i);
5779    }
5780    for (int i = 0; i < element.getProgramCode().size(); i++) {
5781      composeCodeableConcept(t, "SubDetailComponent", "programCode", element.getProgramCode().get(i), i);
5782    }
5783    if (element.hasPatientPaid()) {
5784      composeMoney(t, "SubDetailComponent", "patientPaid", element.getPatientPaid(), -1);
5785    }
5786    if (element.hasQuantity()) {
5787      composeQuantity(t, "SubDetailComponent", "quantity", element.getQuantity(), -1);
5788    }
5789    if (element.hasUnitPrice()) {
5790      composeMoney(t, "SubDetailComponent", "unitPrice", element.getUnitPrice(), -1);
5791    }
5792    if (element.hasFactorElement()) {
5793      composeDecimal(t, "SubDetailComponent", "factor", element.getFactorElement(), -1);
5794    }
5795    if (element.hasTax()) {
5796      composeMoney(t, "SubDetailComponent", "tax", element.getTax(), -1);
5797    }
5798    if (element.hasNet()) {
5799      composeMoney(t, "SubDetailComponent", "net", element.getNet(), -1);
5800    }
5801    for (int i = 0; i < element.getUdi().size(); i++) {
5802      composeReference(t, "SubDetailComponent", "udi", element.getUdi().get(i), i);
5803    }
5804  }
5805
5806  protected void composeClaimResponse(Complex parent, String parentType, String name, ClaimResponse element, int index) {
5807    if (element == null) 
5808      return;
5809    Complex t;
5810    if (Utilities.noString(parentType))
5811      t = parent;
5812    else {
5813      t = parent.predicate("fhir:"+parentType+'.'+name);
5814    }
5815    composeDomainResource(t, "ClaimResponse", name, element, index);
5816    for (int i = 0; i < element.getIdentifier().size(); i++) {
5817      composeIdentifier(t, "ClaimResponse", "identifier", element.getIdentifier().get(i), i);
5818    }
5819    if (element.hasStatusElement()) {
5820      composeEnum(t, "ClaimResponse", "status", element.getStatusElement(), -1);
5821    }
5822    if (element.hasType()) {
5823      composeCodeableConcept(t, "ClaimResponse", "type", element.getType(), -1);
5824    }
5825    if (element.hasSubType()) {
5826      composeCodeableConcept(t, "ClaimResponse", "subType", element.getSubType(), -1);
5827    }
5828    if (element.hasUseElement()) {
5829      composeEnum(t, "ClaimResponse", "use", element.getUseElement(), -1);
5830    }
5831    if (element.hasPatient()) {
5832      composeReference(t, "ClaimResponse", "patient", element.getPatient(), -1);
5833    }
5834    if (element.hasCreatedElement()) {
5835      composeDateTime(t, "ClaimResponse", "created", element.getCreatedElement(), -1);
5836    }
5837    if (element.hasInsurer()) {
5838      composeReference(t, "ClaimResponse", "insurer", element.getInsurer(), -1);
5839    }
5840    if (element.hasRequestor()) {
5841      composeReference(t, "ClaimResponse", "requestor", element.getRequestor(), -1);
5842    }
5843    if (element.hasRequest()) {
5844      composeReference(t, "ClaimResponse", "request", element.getRequest(), -1);
5845    }
5846    if (element.hasOutcomeElement()) {
5847      composeEnum(t, "ClaimResponse", "outcome", element.getOutcomeElement(), -1);
5848    }
5849    if (element.hasDecision()) {
5850      composeCodeableConcept(t, "ClaimResponse", "decision", element.getDecision(), -1);
5851    }
5852    if (element.hasDispositionElement()) {
5853      composeString(t, "ClaimResponse", "disposition", element.getDispositionElement(), -1);
5854    }
5855    if (element.hasPreAuthRefElement()) {
5856      composeString(t, "ClaimResponse", "preAuthRef", element.getPreAuthRefElement(), -1);
5857    }
5858    if (element.hasPreAuthPeriod()) {
5859      composePeriod(t, "ClaimResponse", "preAuthPeriod", element.getPreAuthPeriod(), -1);
5860    }
5861    if (element.hasPayeeType()) {
5862      composeCodeableConcept(t, "ClaimResponse", "payeeType", element.getPayeeType(), -1);
5863    }
5864    for (int i = 0; i < element.getEncounter().size(); i++) {
5865      composeReference(t, "ClaimResponse", "encounter", element.getEncounter().get(i), i);
5866    }
5867    if (element.hasDiagnosisRelatedGroup()) {
5868      composeCodeableConcept(t, "ClaimResponse", "diagnosisRelatedGroup", element.getDiagnosisRelatedGroup(), -1);
5869    }
5870    for (int i = 0; i < element.getItem().size(); i++) {
5871      composeClaimResponseItemComponent(t, "ClaimResponse", "item", element.getItem().get(i), i);
5872    }
5873    for (int i = 0; i < element.getAddItem().size(); i++) {
5874      composeClaimResponseAddedItemComponent(t, "ClaimResponse", "addItem", element.getAddItem().get(i), i);
5875    }
5876    for (int i = 0; i < element.getAdjudication().size(); i++) {
5877      composeClaimResponseAdjudicationComponent(t, "ClaimResponse", "adjudication", element.getAdjudication().get(i), i);
5878    }
5879    for (int i = 0; i < element.getTotal().size(); i++) {
5880      composeClaimResponseTotalComponent(t, "ClaimResponse", "total", element.getTotal().get(i), i);
5881    }
5882    if (element.hasPayment()) {
5883      composeClaimResponsePaymentComponent(t, "ClaimResponse", "payment", element.getPayment(), -1);
5884    }
5885    if (element.hasFundsReserve()) {
5886      composeCodeableConcept(t, "ClaimResponse", "fundsReserve", element.getFundsReserve(), -1);
5887    }
5888    if (element.hasFormCode()) {
5889      composeCodeableConcept(t, "ClaimResponse", "formCode", element.getFormCode(), -1);
5890    }
5891    if (element.hasForm()) {
5892      composeAttachment(t, "ClaimResponse", "form", element.getForm(), -1);
5893    }
5894    for (int i = 0; i < element.getProcessNote().size(); i++) {
5895      composeClaimResponseNoteComponent(t, "ClaimResponse", "processNote", element.getProcessNote().get(i), i);
5896    }
5897    for (int i = 0; i < element.getCommunicationRequest().size(); i++) {
5898      composeReference(t, "ClaimResponse", "communicationRequest", element.getCommunicationRequest().get(i), i);
5899    }
5900    for (int i = 0; i < element.getInsurance().size(); i++) {
5901      composeClaimResponseInsuranceComponent(t, "ClaimResponse", "insurance", element.getInsurance().get(i), i);
5902    }
5903    for (int i = 0; i < element.getError().size(); i++) {
5904      composeClaimResponseErrorComponent(t, "ClaimResponse", "error", element.getError().get(i), i);
5905    }
5906  }
5907
5908  protected void composeClaimResponseItemComponent(Complex parent, String parentType, String name, ClaimResponse.ItemComponent element, int index) {
5909    if (element == null) 
5910      return;
5911    Complex t;
5912    if (Utilities.noString(parentType))
5913      t = parent;
5914    else {
5915      t = parent.predicate("fhir:"+parentType+'.'+name);
5916    }
5917    composeBackboneElement(t, "item", name, element, index);
5918    if (element.hasItemSequenceElement()) {
5919      composePositiveInt(t, "ItemComponent", "itemSequence", element.getItemSequenceElement(), -1);
5920    }
5921    for (int i = 0; i < element.getNoteNumber().size(); i++) {
5922      composePositiveInt(t, "ItemComponent", "noteNumber", element.getNoteNumber().get(i), i);
5923    }
5924    if (element.hasDecision()) {
5925      composeCodeableConcept(t, "ItemComponent", "decision", element.getDecision(), -1);
5926    }
5927    for (int i = 0; i < element.getAdjudication().size(); i++) {
5928      composeClaimResponseAdjudicationComponent(t, "ItemComponent", "adjudication", element.getAdjudication().get(i), i);
5929    }
5930    for (int i = 0; i < element.getDetail().size(); i++) {
5931      composeClaimResponseItemDetailComponent(t, "ItemComponent", "detail", element.getDetail().get(i), i);
5932    }
5933  }
5934
5935  protected void composeClaimResponseAdjudicationComponent(Complex parent, String parentType, String name, ClaimResponse.AdjudicationComponent element, int index) {
5936    if (element == null) 
5937      return;
5938    Complex t;
5939    if (Utilities.noString(parentType))
5940      t = parent;
5941    else {
5942      t = parent.predicate("fhir:"+parentType+'.'+name);
5943    }
5944    composeBackboneElement(t, "adjudication", name, element, index);
5945    if (element.hasCategory()) {
5946      composeCodeableConcept(t, "AdjudicationComponent", "category", element.getCategory(), -1);
5947    }
5948    if (element.hasReason()) {
5949      composeCodeableConcept(t, "AdjudicationComponent", "reason", element.getReason(), -1);
5950    }
5951    if (element.hasAmount()) {
5952      composeMoney(t, "AdjudicationComponent", "amount", element.getAmount(), -1);
5953    }
5954    if (element.hasValueElement()) {
5955      composeDecimal(t, "AdjudicationComponent", "value", element.getValueElement(), -1);
5956    }
5957  }
5958
5959  protected void composeClaimResponseItemDetailComponent(Complex parent, String parentType, String name, ClaimResponse.ItemDetailComponent element, int index) {
5960    if (element == null) 
5961      return;
5962    Complex t;
5963    if (Utilities.noString(parentType))
5964      t = parent;
5965    else {
5966      t = parent.predicate("fhir:"+parentType+'.'+name);
5967    }
5968    composeBackboneElement(t, "detail", name, element, index);
5969    if (element.hasDetailSequenceElement()) {
5970      composePositiveInt(t, "ItemDetailComponent", "detailSequence", element.getDetailSequenceElement(), -1);
5971    }
5972    for (int i = 0; i < element.getNoteNumber().size(); i++) {
5973      composePositiveInt(t, "ItemDetailComponent", "noteNumber", element.getNoteNumber().get(i), i);
5974    }
5975    if (element.hasDecision()) {
5976      composeCodeableConcept(t, "ItemDetailComponent", "decision", element.getDecision(), -1);
5977    }
5978    for (int i = 0; i < element.getAdjudication().size(); i++) {
5979      composeClaimResponseAdjudicationComponent(t, "ItemDetailComponent", "adjudication", element.getAdjudication().get(i), i);
5980    }
5981    for (int i = 0; i < element.getSubDetail().size(); i++) {
5982      composeClaimResponseSubDetailComponent(t, "ItemDetailComponent", "subDetail", element.getSubDetail().get(i), i);
5983    }
5984  }
5985
5986  protected void composeClaimResponseSubDetailComponent(Complex parent, String parentType, String name, ClaimResponse.SubDetailComponent element, int index) {
5987    if (element == null) 
5988      return;
5989    Complex t;
5990    if (Utilities.noString(parentType))
5991      t = parent;
5992    else {
5993      t = parent.predicate("fhir:"+parentType+'.'+name);
5994    }
5995    composeBackboneElement(t, "subDetail", name, element, index);
5996    if (element.hasSubDetailSequenceElement()) {
5997      composePositiveInt(t, "SubDetailComponent", "subDetailSequence", element.getSubDetailSequenceElement(), -1);
5998    }
5999    for (int i = 0; i < element.getNoteNumber().size(); i++) {
6000      composePositiveInt(t, "SubDetailComponent", "noteNumber", element.getNoteNumber().get(i), i);
6001    }
6002    if (element.hasDecision()) {
6003      composeCodeableConcept(t, "SubDetailComponent", "decision", element.getDecision(), -1);
6004    }
6005    for (int i = 0; i < element.getAdjudication().size(); i++) {
6006      composeClaimResponseAdjudicationComponent(t, "SubDetailComponent", "adjudication", element.getAdjudication().get(i), i);
6007    }
6008  }
6009
6010  protected void composeClaimResponseAddedItemComponent(Complex parent, String parentType, String name, ClaimResponse.AddedItemComponent element, int index) {
6011    if (element == null) 
6012      return;
6013    Complex t;
6014    if (Utilities.noString(parentType))
6015      t = parent;
6016    else {
6017      t = parent.predicate("fhir:"+parentType+'.'+name);
6018    }
6019    composeBackboneElement(t, "addItem", name, element, index);
6020    for (int i = 0; i < element.getItemSequence().size(); i++) {
6021      composePositiveInt(t, "AddedItemComponent", "itemSequence", element.getItemSequence().get(i), i);
6022    }
6023    for (int i = 0; i < element.getDetailSequence().size(); i++) {
6024      composePositiveInt(t, "AddedItemComponent", "detailSequence", element.getDetailSequence().get(i), i);
6025    }
6026    for (int i = 0; i < element.getSubdetailSequence().size(); i++) {
6027      composePositiveInt(t, "AddedItemComponent", "subdetailSequence", element.getSubdetailSequence().get(i), i);
6028    }
6029    for (int i = 0; i < element.getProvider().size(); i++) {
6030      composeReference(t, "AddedItemComponent", "provider", element.getProvider().get(i), i);
6031    }
6032    if (element.hasRevenue()) {
6033      composeCodeableConcept(t, "AddedItemComponent", "revenue", element.getRevenue(), -1);
6034    }
6035    if (element.hasProductOrService()) {
6036      composeCodeableConcept(t, "AddedItemComponent", "productOrService", element.getProductOrService(), -1);
6037    }
6038    if (element.hasProductOrServiceEnd()) {
6039      composeCodeableConcept(t, "AddedItemComponent", "productOrServiceEnd", element.getProductOrServiceEnd(), -1);
6040    }
6041    for (int i = 0; i < element.getModifier().size(); i++) {
6042      composeCodeableConcept(t, "AddedItemComponent", "modifier", element.getModifier().get(i), i);
6043    }
6044    for (int i = 0; i < element.getProgramCode().size(); i++) {
6045      composeCodeableConcept(t, "AddedItemComponent", "programCode", element.getProgramCode().get(i), i);
6046    }
6047    if (element.hasServiced()) {
6048      composeType(t, "AddedItemComponent", "serviced", element.getServiced(), -1);
6049    }
6050    if (element.hasLocation()) {
6051      composeType(t, "AddedItemComponent", "location", element.getLocation(), -1);
6052    }
6053    if (element.hasQuantity()) {
6054      composeQuantity(t, "AddedItemComponent", "quantity", element.getQuantity(), -1);
6055    }
6056    if (element.hasUnitPrice()) {
6057      composeMoney(t, "AddedItemComponent", "unitPrice", element.getUnitPrice(), -1);
6058    }
6059    if (element.hasFactorElement()) {
6060      composeDecimal(t, "AddedItemComponent", "factor", element.getFactorElement(), -1);
6061    }
6062    if (element.hasTax()) {
6063      composeMoney(t, "AddedItemComponent", "tax", element.getTax(), -1);
6064    }
6065    if (element.hasNet()) {
6066      composeMoney(t, "AddedItemComponent", "net", element.getNet(), -1);
6067    }
6068    for (int i = 0; i < element.getBodySite().size(); i++) {
6069      composeClaimResponseBodySiteComponent(t, "AddedItemComponent", "bodySite", element.getBodySite().get(i), i);
6070    }
6071    for (int i = 0; i < element.getNoteNumber().size(); i++) {
6072      composePositiveInt(t, "AddedItemComponent", "noteNumber", element.getNoteNumber().get(i), i);
6073    }
6074    if (element.hasDecision()) {
6075      composeCodeableConcept(t, "AddedItemComponent", "decision", element.getDecision(), -1);
6076    }
6077    for (int i = 0; i < element.getAdjudication().size(); i++) {
6078      composeClaimResponseAdjudicationComponent(t, "AddedItemComponent", "adjudication", element.getAdjudication().get(i), i);
6079    }
6080    for (int i = 0; i < element.getDetail().size(); i++) {
6081      composeClaimResponseAddedItemDetailComponent(t, "AddedItemComponent", "detail", element.getDetail().get(i), i);
6082    }
6083  }
6084
6085  protected void composeClaimResponseBodySiteComponent(Complex parent, String parentType, String name, ClaimResponse.BodySiteComponent element, int index) {
6086    if (element == null) 
6087      return;
6088    Complex t;
6089    if (Utilities.noString(parentType))
6090      t = parent;
6091    else {
6092      t = parent.predicate("fhir:"+parentType+'.'+name);
6093    }
6094    composeBackboneElement(t, "bodySite", name, element, index);
6095    for (int i = 0; i < element.getSite().size(); i++) {
6096      composeCodeableReference(t, "BodySiteComponent", "site", element.getSite().get(i), i);
6097    }
6098    for (int i = 0; i < element.getSubSite().size(); i++) {
6099      composeCodeableConcept(t, "BodySiteComponent", "subSite", element.getSubSite().get(i), i);
6100    }
6101  }
6102
6103  protected void composeClaimResponseAddedItemDetailComponent(Complex parent, String parentType, String name, ClaimResponse.AddedItemDetailComponent element, int index) {
6104    if (element == null) 
6105      return;
6106    Complex t;
6107    if (Utilities.noString(parentType))
6108      t = parent;
6109    else {
6110      t = parent.predicate("fhir:"+parentType+'.'+name);
6111    }
6112    composeBackboneElement(t, "detail", name, element, index);
6113    if (element.hasRevenue()) {
6114      composeCodeableConcept(t, "AddedItemDetailComponent", "revenue", element.getRevenue(), -1);
6115    }
6116    if (element.hasProductOrService()) {
6117      composeCodeableConcept(t, "AddedItemDetailComponent", "productOrService", element.getProductOrService(), -1);
6118    }
6119    if (element.hasProductOrServiceEnd()) {
6120      composeCodeableConcept(t, "AddedItemDetailComponent", "productOrServiceEnd", element.getProductOrServiceEnd(), -1);
6121    }
6122    for (int i = 0; i < element.getModifier().size(); i++) {
6123      composeCodeableConcept(t, "AddedItemDetailComponent", "modifier", element.getModifier().get(i), i);
6124    }
6125    if (element.hasQuantity()) {
6126      composeQuantity(t, "AddedItemDetailComponent", "quantity", element.getQuantity(), -1);
6127    }
6128    if (element.hasUnitPrice()) {
6129      composeMoney(t, "AddedItemDetailComponent", "unitPrice", element.getUnitPrice(), -1);
6130    }
6131    if (element.hasFactorElement()) {
6132      composeDecimal(t, "AddedItemDetailComponent", "factor", element.getFactorElement(), -1);
6133    }
6134    if (element.hasTax()) {
6135      composeMoney(t, "AddedItemDetailComponent", "tax", element.getTax(), -1);
6136    }
6137    if (element.hasNet()) {
6138      composeMoney(t, "AddedItemDetailComponent", "net", element.getNet(), -1);
6139    }
6140    for (int i = 0; i < element.getNoteNumber().size(); i++) {
6141      composePositiveInt(t, "AddedItemDetailComponent", "noteNumber", element.getNoteNumber().get(i), i);
6142    }
6143    if (element.hasDecision()) {
6144      composeCodeableConcept(t, "AddedItemDetailComponent", "decision", element.getDecision(), -1);
6145    }
6146    for (int i = 0; i < element.getAdjudication().size(); i++) {
6147      composeClaimResponseAdjudicationComponent(t, "AddedItemDetailComponent", "adjudication", element.getAdjudication().get(i), i);
6148    }
6149    for (int i = 0; i < element.getSubDetail().size(); i++) {
6150      composeClaimResponseAddedItemSubDetailComponent(t, "AddedItemDetailComponent", "subDetail", element.getSubDetail().get(i), i);
6151    }
6152  }
6153
6154  protected void composeClaimResponseAddedItemSubDetailComponent(Complex parent, String parentType, String name, ClaimResponse.AddedItemSubDetailComponent element, int index) {
6155    if (element == null) 
6156      return;
6157    Complex t;
6158    if (Utilities.noString(parentType))
6159      t = parent;
6160    else {
6161      t = parent.predicate("fhir:"+parentType+'.'+name);
6162    }
6163    composeBackboneElement(t, "subDetail", name, element, index);
6164    if (element.hasRevenue()) {
6165      composeCodeableConcept(t, "AddedItemSubDetailComponent", "revenue", element.getRevenue(), -1);
6166    }
6167    if (element.hasProductOrService()) {
6168      composeCodeableConcept(t, "AddedItemSubDetailComponent", "productOrService", element.getProductOrService(), -1);
6169    }
6170    if (element.hasProductOrServiceEnd()) {
6171      composeCodeableConcept(t, "AddedItemSubDetailComponent", "productOrServiceEnd", element.getProductOrServiceEnd(), -1);
6172    }
6173    for (int i = 0; i < element.getModifier().size(); i++) {
6174      composeCodeableConcept(t, "AddedItemSubDetailComponent", "modifier", element.getModifier().get(i), i);
6175    }
6176    if (element.hasQuantity()) {
6177      composeQuantity(t, "AddedItemSubDetailComponent", "quantity", element.getQuantity(), -1);
6178    }
6179    if (element.hasUnitPrice()) {
6180      composeMoney(t, "AddedItemSubDetailComponent", "unitPrice", element.getUnitPrice(), -1);
6181    }
6182    if (element.hasFactorElement()) {
6183      composeDecimal(t, "AddedItemSubDetailComponent", "factor", element.getFactorElement(), -1);
6184    }
6185    if (element.hasTax()) {
6186      composeMoney(t, "AddedItemSubDetailComponent", "tax", element.getTax(), -1);
6187    }
6188    if (element.hasNet()) {
6189      composeMoney(t, "AddedItemSubDetailComponent", "net", element.getNet(), -1);
6190    }
6191    for (int i = 0; i < element.getNoteNumber().size(); i++) {
6192      composePositiveInt(t, "AddedItemSubDetailComponent", "noteNumber", element.getNoteNumber().get(i), i);
6193    }
6194    if (element.hasDecision()) {
6195      composeCodeableConcept(t, "AddedItemSubDetailComponent", "decision", element.getDecision(), -1);
6196    }
6197    for (int i = 0; i < element.getAdjudication().size(); i++) {
6198      composeClaimResponseAdjudicationComponent(t, "AddedItemSubDetailComponent", "adjudication", element.getAdjudication().get(i), i);
6199    }
6200  }
6201
6202  protected void composeClaimResponseTotalComponent(Complex parent, String parentType, String name, ClaimResponse.TotalComponent element, int index) {
6203    if (element == null) 
6204      return;
6205    Complex t;
6206    if (Utilities.noString(parentType))
6207      t = parent;
6208    else {
6209      t = parent.predicate("fhir:"+parentType+'.'+name);
6210    }
6211    composeBackboneElement(t, "total", name, element, index);
6212    if (element.hasCategory()) {
6213      composeCodeableConcept(t, "TotalComponent", "category", element.getCategory(), -1);
6214    }
6215    if (element.hasAmount()) {
6216      composeMoney(t, "TotalComponent", "amount", element.getAmount(), -1);
6217    }
6218  }
6219
6220  protected void composeClaimResponsePaymentComponent(Complex parent, String parentType, String name, ClaimResponse.PaymentComponent element, int index) {
6221    if (element == null) 
6222      return;
6223    Complex t;
6224    if (Utilities.noString(parentType))
6225      t = parent;
6226    else {
6227      t = parent.predicate("fhir:"+parentType+'.'+name);
6228    }
6229    composeBackboneElement(t, "payment", name, element, index);
6230    if (element.hasType()) {
6231      composeCodeableConcept(t, "PaymentComponent", "type", element.getType(), -1);
6232    }
6233    if (element.hasAdjustment()) {
6234      composeMoney(t, "PaymentComponent", "adjustment", element.getAdjustment(), -1);
6235    }
6236    if (element.hasAdjustmentReason()) {
6237      composeCodeableConcept(t, "PaymentComponent", "adjustmentReason", element.getAdjustmentReason(), -1);
6238    }
6239    if (element.hasDateElement()) {
6240      composeDate(t, "PaymentComponent", "date", element.getDateElement(), -1);
6241    }
6242    if (element.hasAmount()) {
6243      composeMoney(t, "PaymentComponent", "amount", element.getAmount(), -1);
6244    }
6245    if (element.hasIdentifier()) {
6246      composeIdentifier(t, "PaymentComponent", "identifier", element.getIdentifier(), -1);
6247    }
6248  }
6249
6250  protected void composeClaimResponseNoteComponent(Complex parent, String parentType, String name, ClaimResponse.NoteComponent element, int index) {
6251    if (element == null) 
6252      return;
6253    Complex t;
6254    if (Utilities.noString(parentType))
6255      t = parent;
6256    else {
6257      t = parent.predicate("fhir:"+parentType+'.'+name);
6258    }
6259    composeBackboneElement(t, "processNote", name, element, index);
6260    if (element.hasNumberElement()) {
6261      composePositiveInt(t, "NoteComponent", "number", element.getNumberElement(), -1);
6262    }
6263    if (element.hasTypeElement()) {
6264      composeEnum(t, "NoteComponent", "type", element.getTypeElement(), -1);
6265    }
6266    if (element.hasTextElement()) {
6267      composeString(t, "NoteComponent", "text", element.getTextElement(), -1);
6268    }
6269    if (element.hasLanguage()) {
6270      composeCodeableConcept(t, "NoteComponent", "language", element.getLanguage(), -1);
6271    }
6272  }
6273
6274  protected void composeClaimResponseInsuranceComponent(Complex parent, String parentType, String name, ClaimResponse.InsuranceComponent element, int index) {
6275    if (element == null) 
6276      return;
6277    Complex t;
6278    if (Utilities.noString(parentType))
6279      t = parent;
6280    else {
6281      t = parent.predicate("fhir:"+parentType+'.'+name);
6282    }
6283    composeBackboneElement(t, "insurance", name, element, index);
6284    if (element.hasSequenceElement()) {
6285      composePositiveInt(t, "InsuranceComponent", "sequence", element.getSequenceElement(), -1);
6286    }
6287    if (element.hasFocalElement()) {
6288      composeBoolean(t, "InsuranceComponent", "focal", element.getFocalElement(), -1);
6289    }
6290    if (element.hasCoverage()) {
6291      composeReference(t, "InsuranceComponent", "coverage", element.getCoverage(), -1);
6292    }
6293    if (element.hasBusinessArrangementElement()) {
6294      composeString(t, "InsuranceComponent", "businessArrangement", element.getBusinessArrangementElement(), -1);
6295    }
6296    if (element.hasClaimResponse()) {
6297      composeReference(t, "InsuranceComponent", "claimResponse", element.getClaimResponse(), -1);
6298    }
6299  }
6300
6301  protected void composeClaimResponseErrorComponent(Complex parent, String parentType, String name, ClaimResponse.ErrorComponent element, int index) {
6302    if (element == null) 
6303      return;
6304    Complex t;
6305    if (Utilities.noString(parentType))
6306      t = parent;
6307    else {
6308      t = parent.predicate("fhir:"+parentType+'.'+name);
6309    }
6310    composeBackboneElement(t, "error", name, element, index);
6311    if (element.hasItemSequenceElement()) {
6312      composePositiveInt(t, "ErrorComponent", "itemSequence", element.getItemSequenceElement(), -1);
6313    }
6314    if (element.hasDetailSequenceElement()) {
6315      composePositiveInt(t, "ErrorComponent", "detailSequence", element.getDetailSequenceElement(), -1);
6316    }
6317    if (element.hasSubDetailSequenceElement()) {
6318      composePositiveInt(t, "ErrorComponent", "subDetailSequence", element.getSubDetailSequenceElement(), -1);
6319    }
6320    if (element.hasCode()) {
6321      composeCodeableConcept(t, "ErrorComponent", "code", element.getCode(), -1);
6322    }
6323  }
6324
6325  protected void composeClinicalImpression(Complex parent, String parentType, String name, ClinicalImpression element, int index) {
6326    if (element == null) 
6327      return;
6328    Complex t;
6329    if (Utilities.noString(parentType))
6330      t = parent;
6331    else {
6332      t = parent.predicate("fhir:"+parentType+'.'+name);
6333    }
6334    composeDomainResource(t, "ClinicalImpression", name, element, index);
6335    for (int i = 0; i < element.getIdentifier().size(); i++) {
6336      composeIdentifier(t, "ClinicalImpression", "identifier", element.getIdentifier().get(i), i);
6337    }
6338    if (element.hasStatusElement()) {
6339      composeEnum(t, "ClinicalImpression", "status", element.getStatusElement(), -1);
6340    }
6341    if (element.hasStatusReason()) {
6342      composeCodeableConcept(t, "ClinicalImpression", "statusReason", element.getStatusReason(), -1);
6343    }
6344    if (element.hasDescriptionElement()) {
6345      composeString(t, "ClinicalImpression", "description", element.getDescriptionElement(), -1);
6346    }
6347    if (element.hasSubject()) {
6348      composeReference(t, "ClinicalImpression", "subject", element.getSubject(), -1);
6349    }
6350    if (element.hasEncounter()) {
6351      composeReference(t, "ClinicalImpression", "encounter", element.getEncounter(), -1);
6352    }
6353    if (element.hasEffective()) {
6354      composeType(t, "ClinicalImpression", "effective", element.getEffective(), -1);
6355    }
6356    if (element.hasDateElement()) {
6357      composeDateTime(t, "ClinicalImpression", "date", element.getDateElement(), -1);
6358    }
6359    if (element.hasPerformer()) {
6360      composeReference(t, "ClinicalImpression", "performer", element.getPerformer(), -1);
6361    }
6362    if (element.hasPrevious()) {
6363      composeReference(t, "ClinicalImpression", "previous", element.getPrevious(), -1);
6364    }
6365    for (int i = 0; i < element.getProblem().size(); i++) {
6366      composeReference(t, "ClinicalImpression", "problem", element.getProblem().get(i), i);
6367    }
6368    if (element.hasChangePattern()) {
6369      composeCodeableConcept(t, "ClinicalImpression", "changePattern", element.getChangePattern(), -1);
6370    }
6371    for (int i = 0; i < element.getProtocol().size(); i++) {
6372      composeUri(t, "ClinicalImpression", "protocol", element.getProtocol().get(i), i);
6373    }
6374    if (element.hasSummaryElement()) {
6375      composeString(t, "ClinicalImpression", "summary", element.getSummaryElement(), -1);
6376    }
6377    for (int i = 0; i < element.getFinding().size(); i++) {
6378      composeClinicalImpressionFindingComponent(t, "ClinicalImpression", "finding", element.getFinding().get(i), i);
6379    }
6380    for (int i = 0; i < element.getPrognosisCodeableConcept().size(); i++) {
6381      composeCodeableConcept(t, "ClinicalImpression", "prognosisCodeableConcept", element.getPrognosisCodeableConcept().get(i), i);
6382    }
6383    for (int i = 0; i < element.getPrognosisReference().size(); i++) {
6384      composeReference(t, "ClinicalImpression", "prognosisReference", element.getPrognosisReference().get(i), i);
6385    }
6386    for (int i = 0; i < element.getSupportingInfo().size(); i++) {
6387      composeReference(t, "ClinicalImpression", "supportingInfo", element.getSupportingInfo().get(i), i);
6388    }
6389    for (int i = 0; i < element.getNote().size(); i++) {
6390      composeAnnotation(t, "ClinicalImpression", "note", element.getNote().get(i), i);
6391    }
6392  }
6393
6394  protected void composeClinicalImpressionFindingComponent(Complex parent, String parentType, String name, ClinicalImpression.ClinicalImpressionFindingComponent element, int index) {
6395    if (element == null) 
6396      return;
6397    Complex t;
6398    if (Utilities.noString(parentType))
6399      t = parent;
6400    else {
6401      t = parent.predicate("fhir:"+parentType+'.'+name);
6402    }
6403    composeBackboneElement(t, "finding", name, element, index);
6404    if (element.hasItem()) {
6405      composeCodeableReference(t, "ClinicalImpressionFindingComponent", "item", element.getItem(), -1);
6406    }
6407    if (element.hasBasisElement()) {
6408      composeString(t, "ClinicalImpressionFindingComponent", "basis", element.getBasisElement(), -1);
6409    }
6410  }
6411
6412  protected void composeClinicalUseDefinition(Complex parent, String parentType, String name, ClinicalUseDefinition element, int index) {
6413    if (element == null) 
6414      return;
6415    Complex t;
6416    if (Utilities.noString(parentType))
6417      t = parent;
6418    else {
6419      t = parent.predicate("fhir:"+parentType+'.'+name);
6420    }
6421    composeDomainResource(t, "ClinicalUseDefinition", name, element, index);
6422    for (int i = 0; i < element.getIdentifier().size(); i++) {
6423      composeIdentifier(t, "ClinicalUseDefinition", "identifier", element.getIdentifier().get(i), i);
6424    }
6425    if (element.hasTypeElement()) {
6426      composeEnum(t, "ClinicalUseDefinition", "type", element.getTypeElement(), -1);
6427    }
6428    for (int i = 0; i < element.getCategory().size(); i++) {
6429      composeCodeableConcept(t, "ClinicalUseDefinition", "category", element.getCategory().get(i), i);
6430    }
6431    for (int i = 0; i < element.getSubject().size(); i++) {
6432      composeReference(t, "ClinicalUseDefinition", "subject", element.getSubject().get(i), i);
6433    }
6434    if (element.hasStatus()) {
6435      composeCodeableConcept(t, "ClinicalUseDefinition", "status", element.getStatus(), -1);
6436    }
6437    if (element.hasContraindication()) {
6438      composeClinicalUseDefinitionContraindicationComponent(t, "ClinicalUseDefinition", "contraindication", element.getContraindication(), -1);
6439    }
6440    if (element.hasIndication()) {
6441      composeClinicalUseDefinitionIndicationComponent(t, "ClinicalUseDefinition", "indication", element.getIndication(), -1);
6442    }
6443    if (element.hasInteraction()) {
6444      composeClinicalUseDefinitionInteractionComponent(t, "ClinicalUseDefinition", "interaction", element.getInteraction(), -1);
6445    }
6446    for (int i = 0; i < element.getPopulation().size(); i++) {
6447      composeReference(t, "ClinicalUseDefinition", "population", element.getPopulation().get(i), i);
6448    }
6449    for (int i = 0; i < element.getLibrary().size(); i++) {
6450      composeCanonical(t, "ClinicalUseDefinition", "library", element.getLibrary().get(i), i);
6451    }
6452    if (element.hasUndesirableEffect()) {
6453      composeClinicalUseDefinitionUndesirableEffectComponent(t, "ClinicalUseDefinition", "undesirableEffect", element.getUndesirableEffect(), -1);
6454    }
6455    if (element.hasWarning()) {
6456      composeClinicalUseDefinitionWarningComponent(t, "ClinicalUseDefinition", "warning", element.getWarning(), -1);
6457    }
6458  }
6459
6460  protected void composeClinicalUseDefinitionContraindicationComponent(Complex parent, String parentType, String name, ClinicalUseDefinition.ClinicalUseDefinitionContraindicationComponent element, int index) {
6461    if (element == null) 
6462      return;
6463    Complex t;
6464    if (Utilities.noString(parentType))
6465      t = parent;
6466    else {
6467      t = parent.predicate("fhir:"+parentType+'.'+name);
6468    }
6469    composeBackboneElement(t, "contraindication", name, element, index);
6470    if (element.hasDiseaseSymptomProcedure()) {
6471      composeCodeableReference(t, "ClinicalUseDefinitionContraindicationComponent", "diseaseSymptomProcedure", element.getDiseaseSymptomProcedure(), -1);
6472    }
6473    if (element.hasDiseaseStatus()) {
6474      composeCodeableReference(t, "ClinicalUseDefinitionContraindicationComponent", "diseaseStatus", element.getDiseaseStatus(), -1);
6475    }
6476    for (int i = 0; i < element.getComorbidity().size(); i++) {
6477      composeCodeableReference(t, "ClinicalUseDefinitionContraindicationComponent", "comorbidity", element.getComorbidity().get(i), i);
6478    }
6479    for (int i = 0; i < element.getIndication().size(); i++) {
6480      composeReference(t, "ClinicalUseDefinitionContraindicationComponent", "indication", element.getIndication().get(i), i);
6481    }
6482    if (element.hasApplicability()) {
6483      composeExpression(t, "ClinicalUseDefinitionContraindicationComponent", "applicability", element.getApplicability(), -1);
6484    }
6485    for (int i = 0; i < element.getOtherTherapy().size(); i++) {
6486      composeClinicalUseDefinitionContraindicationOtherTherapyComponent(t, "ClinicalUseDefinitionContraindicationComponent", "otherTherapy", element.getOtherTherapy().get(i), i);
6487    }
6488  }
6489
6490  protected void composeClinicalUseDefinitionContraindicationOtherTherapyComponent(Complex parent, String parentType, String name, ClinicalUseDefinition.ClinicalUseDefinitionContraindicationOtherTherapyComponent element, int index) {
6491    if (element == null) 
6492      return;
6493    Complex t;
6494    if (Utilities.noString(parentType))
6495      t = parent;
6496    else {
6497      t = parent.predicate("fhir:"+parentType+'.'+name);
6498    }
6499    composeBackboneElement(t, "otherTherapy", name, element, index);
6500    if (element.hasRelationshipType()) {
6501      composeCodeableConcept(t, "ClinicalUseDefinitionContraindicationOtherTherapyComponent", "relationshipType", element.getRelationshipType(), -1);
6502    }
6503    if (element.hasTreatment()) {
6504      composeCodeableReference(t, "ClinicalUseDefinitionContraindicationOtherTherapyComponent", "treatment", element.getTreatment(), -1);
6505    }
6506  }
6507
6508  protected void composeClinicalUseDefinitionIndicationComponent(Complex parent, String parentType, String name, ClinicalUseDefinition.ClinicalUseDefinitionIndicationComponent element, int index) {
6509    if (element == null) 
6510      return;
6511    Complex t;
6512    if (Utilities.noString(parentType))
6513      t = parent;
6514    else {
6515      t = parent.predicate("fhir:"+parentType+'.'+name);
6516    }
6517    composeBackboneElement(t, "indication", name, element, index);
6518    if (element.hasDiseaseSymptomProcedure()) {
6519      composeCodeableReference(t, "ClinicalUseDefinitionIndicationComponent", "diseaseSymptomProcedure", element.getDiseaseSymptomProcedure(), -1);
6520    }
6521    if (element.hasDiseaseStatus()) {
6522      composeCodeableReference(t, "ClinicalUseDefinitionIndicationComponent", "diseaseStatus", element.getDiseaseStatus(), -1);
6523    }
6524    for (int i = 0; i < element.getComorbidity().size(); i++) {
6525      composeCodeableReference(t, "ClinicalUseDefinitionIndicationComponent", "comorbidity", element.getComorbidity().get(i), i);
6526    }
6527    if (element.hasIntendedEffect()) {
6528      composeCodeableReference(t, "ClinicalUseDefinitionIndicationComponent", "intendedEffect", element.getIntendedEffect(), -1);
6529    }
6530    if (element.hasDuration()) {
6531      composeType(t, "ClinicalUseDefinitionIndicationComponent", "duration", element.getDuration(), -1);
6532    }
6533    for (int i = 0; i < element.getUndesirableEffect().size(); i++) {
6534      composeReference(t, "ClinicalUseDefinitionIndicationComponent", "undesirableEffect", element.getUndesirableEffect().get(i), i);
6535    }
6536    if (element.hasApplicability()) {
6537      composeExpression(t, "ClinicalUseDefinitionIndicationComponent", "applicability", element.getApplicability(), -1);
6538    }
6539    for (int i = 0; i < element.getOtherTherapy().size(); i++) {
6540      composeClinicalUseDefinitionContraindicationOtherTherapyComponent(t, "ClinicalUseDefinitionIndicationComponent", "otherTherapy", element.getOtherTherapy().get(i), i);
6541    }
6542  }
6543
6544  protected void composeClinicalUseDefinitionInteractionComponent(Complex parent, String parentType, String name, ClinicalUseDefinition.ClinicalUseDefinitionInteractionComponent element, int index) {
6545    if (element == null) 
6546      return;
6547    Complex t;
6548    if (Utilities.noString(parentType))
6549      t = parent;
6550    else {
6551      t = parent.predicate("fhir:"+parentType+'.'+name);
6552    }
6553    composeBackboneElement(t, "interaction", name, element, index);
6554    for (int i = 0; i < element.getInteractant().size(); i++) {
6555      composeClinicalUseDefinitionInteractionInteractantComponent(t, "ClinicalUseDefinitionInteractionComponent", "interactant", element.getInteractant().get(i), i);
6556    }
6557    if (element.hasType()) {
6558      composeCodeableConcept(t, "ClinicalUseDefinitionInteractionComponent", "type", element.getType(), -1);
6559    }
6560    if (element.hasEffect()) {
6561      composeCodeableReference(t, "ClinicalUseDefinitionInteractionComponent", "effect", element.getEffect(), -1);
6562    }
6563    if (element.hasIncidence()) {
6564      composeCodeableConcept(t, "ClinicalUseDefinitionInteractionComponent", "incidence", element.getIncidence(), -1);
6565    }
6566    for (int i = 0; i < element.getManagement().size(); i++) {
6567      composeCodeableConcept(t, "ClinicalUseDefinitionInteractionComponent", "management", element.getManagement().get(i), i);
6568    }
6569  }
6570
6571  protected void composeClinicalUseDefinitionInteractionInteractantComponent(Complex parent, String parentType, String name, ClinicalUseDefinition.ClinicalUseDefinitionInteractionInteractantComponent element, int index) {
6572    if (element == null) 
6573      return;
6574    Complex t;
6575    if (Utilities.noString(parentType))
6576      t = parent;
6577    else {
6578      t = parent.predicate("fhir:"+parentType+'.'+name);
6579    }
6580    composeBackboneElement(t, "interactant", name, element, index);
6581    if (element.hasItem()) {
6582      composeType(t, "ClinicalUseDefinitionInteractionInteractantComponent", "item", element.getItem(), -1);
6583    }
6584  }
6585
6586  protected void composeClinicalUseDefinitionUndesirableEffectComponent(Complex parent, String parentType, String name, ClinicalUseDefinition.ClinicalUseDefinitionUndesirableEffectComponent element, int index) {
6587    if (element == null) 
6588      return;
6589    Complex t;
6590    if (Utilities.noString(parentType))
6591      t = parent;
6592    else {
6593      t = parent.predicate("fhir:"+parentType+'.'+name);
6594    }
6595    composeBackboneElement(t, "undesirableEffect", name, element, index);
6596    if (element.hasSymptomConditionEffect()) {
6597      composeCodeableReference(t, "ClinicalUseDefinitionUndesirableEffectComponent", "symptomConditionEffect", element.getSymptomConditionEffect(), -1);
6598    }
6599    if (element.hasClassification()) {
6600      composeCodeableConcept(t, "ClinicalUseDefinitionUndesirableEffectComponent", "classification", element.getClassification(), -1);
6601    }
6602    if (element.hasFrequencyOfOccurrence()) {
6603      composeCodeableConcept(t, "ClinicalUseDefinitionUndesirableEffectComponent", "frequencyOfOccurrence", element.getFrequencyOfOccurrence(), -1);
6604    }
6605  }
6606
6607  protected void composeClinicalUseDefinitionWarningComponent(Complex parent, String parentType, String name, ClinicalUseDefinition.ClinicalUseDefinitionWarningComponent element, int index) {
6608    if (element == null) 
6609      return;
6610    Complex t;
6611    if (Utilities.noString(parentType))
6612      t = parent;
6613    else {
6614      t = parent.predicate("fhir:"+parentType+'.'+name);
6615    }
6616    composeBackboneElement(t, "warning", name, element, index);
6617    if (element.hasDescriptionElement()) {
6618      composeMarkdown(t, "ClinicalUseDefinitionWarningComponent", "description", element.getDescriptionElement(), -1);
6619    }
6620    if (element.hasCode()) {
6621      composeCodeableConcept(t, "ClinicalUseDefinitionWarningComponent", "code", element.getCode(), -1);
6622    }
6623  }
6624
6625  protected void composeCodeSystem(Complex parent, String parentType, String name, CodeSystem element, int index) {
6626    if (element == null) 
6627      return;
6628    Complex t;
6629    if (Utilities.noString(parentType))
6630      t = parent;
6631    else {
6632      t = parent.predicate("fhir:"+parentType+'.'+name);
6633    }
6634    composeMetadataResource(t, "CodeSystem", name, element, index);
6635    if (element.hasUrlElement()) {
6636      composeUri(t, "CodeSystem", "url", element.getUrlElement(), -1);
6637    }
6638    for (int i = 0; i < element.getIdentifier().size(); i++) {
6639      composeIdentifier(t, "CodeSystem", "identifier", element.getIdentifier().get(i), i);
6640    }
6641    if (element.hasVersionElement()) {
6642      composeString(t, "CodeSystem", "version", element.getVersionElement(), -1);
6643    }
6644    if (element.hasNameElement()) {
6645      composeString(t, "CodeSystem", "name", element.getNameElement(), -1);
6646    }
6647    if (element.hasTitleElement()) {
6648      composeString(t, "CodeSystem", "title", element.getTitleElement(), -1);
6649    }
6650    if (element.hasStatusElement()) {
6651      composeEnum(t, "CodeSystem", "status", element.getStatusElement(), -1);
6652    }
6653    if (element.hasExperimentalElement()) {
6654      composeBoolean(t, "CodeSystem", "experimental", element.getExperimentalElement(), -1);
6655    }
6656    if (element.hasDateElement()) {
6657      composeDateTime(t, "CodeSystem", "date", element.getDateElement(), -1);
6658    }
6659    if (element.hasPublisherElement()) {
6660      composeString(t, "CodeSystem", "publisher", element.getPublisherElement(), -1);
6661    }
6662    for (int i = 0; i < element.getContact().size(); i++) {
6663      composeContactDetail(t, "CodeSystem", "contact", element.getContact().get(i), i);
6664    }
6665    if (element.hasDescriptionElement()) {
6666      composeMarkdown(t, "CodeSystem", "description", element.getDescriptionElement(), -1);
6667    }
6668    for (int i = 0; i < element.getUseContext().size(); i++) {
6669      composeUsageContext(t, "CodeSystem", "useContext", element.getUseContext().get(i), i);
6670    }
6671    for (int i = 0; i < element.getJurisdiction().size(); i++) {
6672      composeCodeableConcept(t, "CodeSystem", "jurisdiction", element.getJurisdiction().get(i), i);
6673    }
6674    if (element.hasPurposeElement()) {
6675      composeMarkdown(t, "CodeSystem", "purpose", element.getPurposeElement(), -1);
6676    }
6677    if (element.hasCopyrightElement()) {
6678      composeMarkdown(t, "CodeSystem", "copyright", element.getCopyrightElement(), -1);
6679    }
6680    if (element.hasApprovalDateElement()) {
6681      composeDate(t, "CodeSystem", "approvalDate", element.getApprovalDateElement(), -1);
6682    }
6683    if (element.hasLastReviewDateElement()) {
6684      composeDate(t, "CodeSystem", "lastReviewDate", element.getLastReviewDateElement(), -1);
6685    }
6686    if (element.hasEffectivePeriod()) {
6687      composePeriod(t, "CodeSystem", "effectivePeriod", element.getEffectivePeriod(), -1);
6688    }
6689    for (int i = 0; i < element.getTopic().size(); i++) {
6690      composeCodeableConcept(t, "CodeSystem", "topic", element.getTopic().get(i), i);
6691    }
6692    for (int i = 0; i < element.getAuthor().size(); i++) {
6693      composeContactDetail(t, "CodeSystem", "author", element.getAuthor().get(i), i);
6694    }
6695    for (int i = 0; i < element.getEditor().size(); i++) {
6696      composeContactDetail(t, "CodeSystem", "editor", element.getEditor().get(i), i);
6697    }
6698    for (int i = 0; i < element.getReviewer().size(); i++) {
6699      composeContactDetail(t, "CodeSystem", "reviewer", element.getReviewer().get(i), i);
6700    }
6701    for (int i = 0; i < element.getEndorser().size(); i++) {
6702      composeContactDetail(t, "CodeSystem", "endorser", element.getEndorser().get(i), i);
6703    }
6704    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
6705      composeRelatedArtifact(t, "CodeSystem", "relatedArtifact", element.getRelatedArtifact().get(i), i);
6706    }
6707    if (element.hasCaseSensitiveElement()) {
6708      composeBoolean(t, "CodeSystem", "caseSensitive", element.getCaseSensitiveElement(), -1);
6709    }
6710    if (element.hasValueSetElement()) {
6711      composeCanonical(t, "CodeSystem", "valueSet", element.getValueSetElement(), -1);
6712    }
6713    if (element.hasHierarchyMeaningElement()) {
6714      composeEnum(t, "CodeSystem", "hierarchyMeaning", element.getHierarchyMeaningElement(), -1);
6715    }
6716    if (element.hasCompositionalElement()) {
6717      composeBoolean(t, "CodeSystem", "compositional", element.getCompositionalElement(), -1);
6718    }
6719    if (element.hasVersionNeededElement()) {
6720      composeBoolean(t, "CodeSystem", "versionNeeded", element.getVersionNeededElement(), -1);
6721    }
6722    if (element.hasContentElement()) {
6723      composeEnum(t, "CodeSystem", "content", element.getContentElement(), -1);
6724    }
6725    if (element.hasSupplementsElement()) {
6726      composeCanonical(t, "CodeSystem", "supplements", element.getSupplementsElement(), -1);
6727    }
6728    if (element.hasCountElement()) {
6729      composeUnsignedInt(t, "CodeSystem", "count", element.getCountElement(), -1);
6730    }
6731    for (int i = 0; i < element.getFilter().size(); i++) {
6732      composeCodeSystemFilterComponent(t, "CodeSystem", "filter", element.getFilter().get(i), i);
6733    }
6734    for (int i = 0; i < element.getProperty().size(); i++) {
6735      composeCodeSystemPropertyComponent(t, "CodeSystem", "property", element.getProperty().get(i), i);
6736    }
6737    for (int i = 0; i < element.getConcept().size(); i++) {
6738      composeCodeSystemConceptDefinitionComponent(t, "CodeSystem", "concept", element.getConcept().get(i), i);
6739    }
6740  }
6741
6742  protected void composeCodeSystemFilterComponent(Complex parent, String parentType, String name, CodeSystem.CodeSystemFilterComponent element, int index) {
6743    if (element == null) 
6744      return;
6745    Complex t;
6746    if (Utilities.noString(parentType))
6747      t = parent;
6748    else {
6749      t = parent.predicate("fhir:"+parentType+'.'+name);
6750    }
6751    composeBackboneElement(t, "filter", name, element, index);
6752    if (element.hasCodeElement()) {
6753      composeCode(t, "CodeSystemFilterComponent", "code", element.getCodeElement(), -1);
6754    }
6755    if (element.hasDescriptionElement()) {
6756      composeString(t, "CodeSystemFilterComponent", "description", element.getDescriptionElement(), -1);
6757    }
6758    for (int i = 0; i < element.getOperator().size(); i++) {
6759      composeEnum(t, "CodeSystemFilterComponent", "operator", element.getOperator().get(i), i);
6760    }
6761    if (element.hasValueElement()) {
6762      composeString(t, "CodeSystemFilterComponent", "value", element.getValueElement(), -1);
6763    }
6764  }
6765
6766  protected void composeCodeSystemPropertyComponent(Complex parent, String parentType, String name, CodeSystem.PropertyComponent element, int index) {
6767    if (element == null) 
6768      return;
6769    Complex t;
6770    if (Utilities.noString(parentType))
6771      t = parent;
6772    else {
6773      t = parent.predicate("fhir:"+parentType+'.'+name);
6774    }
6775    composeBackboneElement(t, "property", name, element, index);
6776    if (element.hasCodeElement()) {
6777      composeCode(t, "PropertyComponent", "code", element.getCodeElement(), -1);
6778    }
6779    if (element.hasUriElement()) {
6780      composeUri(t, "PropertyComponent", "uri", element.getUriElement(), -1);
6781    }
6782    if (element.hasDescriptionElement()) {
6783      composeString(t, "PropertyComponent", "description", element.getDescriptionElement(), -1);
6784    }
6785    if (element.hasTypeElement()) {
6786      composeEnum(t, "PropertyComponent", "type", element.getTypeElement(), -1);
6787    }
6788  }
6789
6790  protected void composeCodeSystemConceptDefinitionComponent(Complex parent, String parentType, String name, CodeSystem.ConceptDefinitionComponent element, int index) {
6791    if (element == null) 
6792      return;
6793    Complex t;
6794    if (Utilities.noString(parentType))
6795      t = parent;
6796    else {
6797      t = parent.predicate("fhir:"+parentType+'.'+name);
6798    }
6799    composeBackboneElement(t, "concept", name, element, index);
6800    if (element.hasCodeElement()) {
6801      composeCode(t, "ConceptDefinitionComponent", "code", element.getCodeElement(), -1);
6802    }
6803    if (element.hasDisplayElement()) {
6804      composeString(t, "ConceptDefinitionComponent", "display", element.getDisplayElement(), -1);
6805    }
6806    if (element.hasDefinitionElement()) {
6807      composeString(t, "ConceptDefinitionComponent", "definition", element.getDefinitionElement(), -1);
6808    }
6809    for (int i = 0; i < element.getDesignation().size(); i++) {
6810      composeCodeSystemConceptDefinitionDesignationComponent(t, "ConceptDefinitionComponent", "designation", element.getDesignation().get(i), i);
6811    }
6812    for (int i = 0; i < element.getProperty().size(); i++) {
6813      composeCodeSystemConceptPropertyComponent(t, "ConceptDefinitionComponent", "property", element.getProperty().get(i), i);
6814    }
6815    for (int i = 0; i < element.getConcept().size(); i++) {
6816      composeCodeSystemConceptDefinitionComponent(t, "ConceptDefinitionComponent", "concept", element.getConcept().get(i), i);
6817    }
6818  }
6819
6820  protected void composeCodeSystemConceptDefinitionDesignationComponent(Complex parent, String parentType, String name, CodeSystem.ConceptDefinitionDesignationComponent element, int index) {
6821    if (element == null) 
6822      return;
6823    Complex t;
6824    if (Utilities.noString(parentType))
6825      t = parent;
6826    else {
6827      t = parent.predicate("fhir:"+parentType+'.'+name);
6828    }
6829    composeBackboneElement(t, "designation", name, element, index);
6830    if (element.hasLanguageElement()) {
6831      composeCode(t, "ConceptDefinitionDesignationComponent", "language", element.getLanguageElement(), -1);
6832    }
6833    if (element.hasUse()) {
6834      composeCoding(t, "ConceptDefinitionDesignationComponent", "use", element.getUse(), -1);
6835    }
6836    for (int i = 0; i < element.getAdditionalUse().size(); i++) {
6837      composeCoding(t, "ConceptDefinitionDesignationComponent", "additionalUse", element.getAdditionalUse().get(i), i);
6838    }
6839    if (element.hasValueElement()) {
6840      composeString(t, "ConceptDefinitionDesignationComponent", "value", element.getValueElement(), -1);
6841    }
6842  }
6843
6844  protected void composeCodeSystemConceptPropertyComponent(Complex parent, String parentType, String name, CodeSystem.ConceptPropertyComponent element, int index) {
6845    if (element == null) 
6846      return;
6847    Complex t;
6848    if (Utilities.noString(parentType))
6849      t = parent;
6850    else {
6851      t = parent.predicate("fhir:"+parentType+'.'+name);
6852    }
6853    composeBackboneElement(t, "property", name, element, index);
6854    if (element.hasCodeElement()) {
6855      composeCode(t, "ConceptPropertyComponent", "code", element.getCodeElement(), -1);
6856    }
6857    if (element.hasValue()) {
6858      composeType(t, "ConceptPropertyComponent", "value", element.getValue(), -1);
6859    }
6860  }
6861
6862  protected void composeCommunication(Complex parent, String parentType, String name, Communication element, int index) {
6863    if (element == null) 
6864      return;
6865    Complex t;
6866    if (Utilities.noString(parentType))
6867      t = parent;
6868    else {
6869      t = parent.predicate("fhir:"+parentType+'.'+name);
6870    }
6871    composeDomainResource(t, "Communication", name, element, index);
6872    for (int i = 0; i < element.getIdentifier().size(); i++) {
6873      composeIdentifier(t, "Communication", "identifier", element.getIdentifier().get(i), i);
6874    }
6875    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
6876      composeCanonical(t, "Communication", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
6877    }
6878    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
6879      composeUri(t, "Communication", "instantiatesUri", element.getInstantiatesUri().get(i), i);
6880    }
6881    for (int i = 0; i < element.getBasedOn().size(); i++) {
6882      composeReference(t, "Communication", "basedOn", element.getBasedOn().get(i), i);
6883    }
6884    for (int i = 0; i < element.getPartOf().size(); i++) {
6885      composeReference(t, "Communication", "partOf", element.getPartOf().get(i), i);
6886    }
6887    for (int i = 0; i < element.getInResponseTo().size(); i++) {
6888      composeReference(t, "Communication", "inResponseTo", element.getInResponseTo().get(i), i);
6889    }
6890    if (element.hasStatusElement()) {
6891      composeEnum(t, "Communication", "status", element.getStatusElement(), -1);
6892    }
6893    if (element.hasStatusReason()) {
6894      composeCodeableConcept(t, "Communication", "statusReason", element.getStatusReason(), -1);
6895    }
6896    for (int i = 0; i < element.getCategory().size(); i++) {
6897      composeCodeableConcept(t, "Communication", "category", element.getCategory().get(i), i);
6898    }
6899    if (element.hasPriorityElement()) {
6900      composeEnum(t, "Communication", "priority", element.getPriorityElement(), -1);
6901    }
6902    for (int i = 0; i < element.getMedium().size(); i++) {
6903      composeCodeableConcept(t, "Communication", "medium", element.getMedium().get(i), i);
6904    }
6905    if (element.hasSubject()) {
6906      composeReference(t, "Communication", "subject", element.getSubject(), -1);
6907    }
6908    if (element.hasTopic()) {
6909      composeCodeableConcept(t, "Communication", "topic", element.getTopic(), -1);
6910    }
6911    for (int i = 0; i < element.getAbout().size(); i++) {
6912      composeReference(t, "Communication", "about", element.getAbout().get(i), i);
6913    }
6914    if (element.hasEncounter()) {
6915      composeReference(t, "Communication", "encounter", element.getEncounter(), -1);
6916    }
6917    if (element.hasSentElement()) {
6918      composeDateTime(t, "Communication", "sent", element.getSentElement(), -1);
6919    }
6920    if (element.hasReceivedElement()) {
6921      composeDateTime(t, "Communication", "received", element.getReceivedElement(), -1);
6922    }
6923    for (int i = 0; i < element.getRecipient().size(); i++) {
6924      composeReference(t, "Communication", "recipient", element.getRecipient().get(i), i);
6925    }
6926    if (element.hasSender()) {
6927      composeReference(t, "Communication", "sender", element.getSender(), -1);
6928    }
6929    for (int i = 0; i < element.getReason().size(); i++) {
6930      composeCodeableReference(t, "Communication", "reason", element.getReason().get(i), i);
6931    }
6932    for (int i = 0; i < element.getPayload().size(); i++) {
6933      composeCommunicationPayloadComponent(t, "Communication", "payload", element.getPayload().get(i), i);
6934    }
6935    for (int i = 0; i < element.getNote().size(); i++) {
6936      composeAnnotation(t, "Communication", "note", element.getNote().get(i), i);
6937    }
6938  }
6939
6940  protected void composeCommunicationPayloadComponent(Complex parent, String parentType, String name, Communication.CommunicationPayloadComponent element, int index) {
6941    if (element == null) 
6942      return;
6943    Complex t;
6944    if (Utilities.noString(parentType))
6945      t = parent;
6946    else {
6947      t = parent.predicate("fhir:"+parentType+'.'+name);
6948    }
6949    composeBackboneElement(t, "payload", name, element, index);
6950    if (element.hasContent()) {
6951      composeType(t, "CommunicationPayloadComponent", "content", element.getContent(), -1);
6952    }
6953  }
6954
6955  protected void composeCommunicationRequest(Complex parent, String parentType, String name, CommunicationRequest element, int index) {
6956    if (element == null) 
6957      return;
6958    Complex t;
6959    if (Utilities.noString(parentType))
6960      t = parent;
6961    else {
6962      t = parent.predicate("fhir:"+parentType+'.'+name);
6963    }
6964    composeDomainResource(t, "CommunicationRequest", name, element, index);
6965    for (int i = 0; i < element.getIdentifier().size(); i++) {
6966      composeIdentifier(t, "CommunicationRequest", "identifier", element.getIdentifier().get(i), i);
6967    }
6968    for (int i = 0; i < element.getBasedOn().size(); i++) {
6969      composeReference(t, "CommunicationRequest", "basedOn", element.getBasedOn().get(i), i);
6970    }
6971    for (int i = 0; i < element.getReplaces().size(); i++) {
6972      composeReference(t, "CommunicationRequest", "replaces", element.getReplaces().get(i), i);
6973    }
6974    if (element.hasGroupIdentifier()) {
6975      composeIdentifier(t, "CommunicationRequest", "groupIdentifier", element.getGroupIdentifier(), -1);
6976    }
6977    if (element.hasStatusElement()) {
6978      composeEnum(t, "CommunicationRequest", "status", element.getStatusElement(), -1);
6979    }
6980    if (element.hasStatusReason()) {
6981      composeCodeableConcept(t, "CommunicationRequest", "statusReason", element.getStatusReason(), -1);
6982    }
6983    if (element.hasIntentElement()) {
6984      composeEnum(t, "CommunicationRequest", "intent", element.getIntentElement(), -1);
6985    }
6986    for (int i = 0; i < element.getCategory().size(); i++) {
6987      composeCodeableConcept(t, "CommunicationRequest", "category", element.getCategory().get(i), i);
6988    }
6989    if (element.hasPriorityElement()) {
6990      composeEnum(t, "CommunicationRequest", "priority", element.getPriorityElement(), -1);
6991    }
6992    if (element.hasDoNotPerformElement()) {
6993      composeBoolean(t, "CommunicationRequest", "doNotPerform", element.getDoNotPerformElement(), -1);
6994    }
6995    for (int i = 0; i < element.getMedium().size(); i++) {
6996      composeCodeableConcept(t, "CommunicationRequest", "medium", element.getMedium().get(i), i);
6997    }
6998    if (element.hasSubject()) {
6999      composeReference(t, "CommunicationRequest", "subject", element.getSubject(), -1);
7000    }
7001    for (int i = 0; i < element.getAbout().size(); i++) {
7002      composeReference(t, "CommunicationRequest", "about", element.getAbout().get(i), i);
7003    }
7004    if (element.hasEncounter()) {
7005      composeReference(t, "CommunicationRequest", "encounter", element.getEncounter(), -1);
7006    }
7007    for (int i = 0; i < element.getPayload().size(); i++) {
7008      composeCommunicationRequestPayloadComponent(t, "CommunicationRequest", "payload", element.getPayload().get(i), i);
7009    }
7010    if (element.hasOccurrence()) {
7011      composeType(t, "CommunicationRequest", "occurrence", element.getOccurrence(), -1);
7012    }
7013    if (element.hasAuthoredOnElement()) {
7014      composeDateTime(t, "CommunicationRequest", "authoredOn", element.getAuthoredOnElement(), -1);
7015    }
7016    if (element.hasRequester()) {
7017      composeReference(t, "CommunicationRequest", "requester", element.getRequester(), -1);
7018    }
7019    for (int i = 0; i < element.getRecipient().size(); i++) {
7020      composeReference(t, "CommunicationRequest", "recipient", element.getRecipient().get(i), i);
7021    }
7022    for (int i = 0; i < element.getInformationProvider().size(); i++) {
7023      composeReference(t, "CommunicationRequest", "informationProvider", element.getInformationProvider().get(i), i);
7024    }
7025    for (int i = 0; i < element.getReason().size(); i++) {
7026      composeCodeableReference(t, "CommunicationRequest", "reason", element.getReason().get(i), i);
7027    }
7028    for (int i = 0; i < element.getNote().size(); i++) {
7029      composeAnnotation(t, "CommunicationRequest", "note", element.getNote().get(i), i);
7030    }
7031  }
7032
7033  protected void composeCommunicationRequestPayloadComponent(Complex parent, String parentType, String name, CommunicationRequest.CommunicationRequestPayloadComponent element, int index) {
7034    if (element == null) 
7035      return;
7036    Complex t;
7037    if (Utilities.noString(parentType))
7038      t = parent;
7039    else {
7040      t = parent.predicate("fhir:"+parentType+'.'+name);
7041    }
7042    composeBackboneElement(t, "payload", name, element, index);
7043    if (element.hasContent()) {
7044      composeType(t, "CommunicationRequestPayloadComponent", "content", element.getContent(), -1);
7045    }
7046  }
7047
7048  protected void composeCompartmentDefinition(Complex parent, String parentType, String name, CompartmentDefinition element, int index) {
7049    if (element == null) 
7050      return;
7051    Complex t;
7052    if (Utilities.noString(parentType))
7053      t = parent;
7054    else {
7055      t = parent.predicate("fhir:"+parentType+'.'+name);
7056    }
7057    composeCanonicalResource(t, "CompartmentDefinition", name, element, index);
7058    if (element.hasUrlElement()) {
7059      composeUri(t, "CompartmentDefinition", "url", element.getUrlElement(), -1);
7060    }
7061    if (element.hasVersionElement()) {
7062      composeString(t, "CompartmentDefinition", "version", element.getVersionElement(), -1);
7063    }
7064    if (element.hasVersionAlgorithm()) {
7065      composeType(t, "CompartmentDefinition", "versionAlgorithm", element.getVersionAlgorithm(), -1);
7066    }
7067    if (element.hasNameElement()) {
7068      composeString(t, "CompartmentDefinition", "name", element.getNameElement(), -1);
7069    }
7070    if (element.hasTitleElement()) {
7071      composeString(t, "CompartmentDefinition", "title", element.getTitleElement(), -1);
7072    }
7073    if (element.hasStatusElement()) {
7074      composeEnum(t, "CompartmentDefinition", "status", element.getStatusElement(), -1);
7075    }
7076    if (element.hasExperimentalElement()) {
7077      composeBoolean(t, "CompartmentDefinition", "experimental", element.getExperimentalElement(), -1);
7078    }
7079    if (element.hasDateElement()) {
7080      composeDateTime(t, "CompartmentDefinition", "date", element.getDateElement(), -1);
7081    }
7082    if (element.hasPublisherElement()) {
7083      composeString(t, "CompartmentDefinition", "publisher", element.getPublisherElement(), -1);
7084    }
7085    for (int i = 0; i < element.getContact().size(); i++) {
7086      composeContactDetail(t, "CompartmentDefinition", "contact", element.getContact().get(i), i);
7087    }
7088    if (element.hasDescriptionElement()) {
7089      composeMarkdown(t, "CompartmentDefinition", "description", element.getDescriptionElement(), -1);
7090    }
7091    for (int i = 0; i < element.getUseContext().size(); i++) {
7092      composeUsageContext(t, "CompartmentDefinition", "useContext", element.getUseContext().get(i), i);
7093    }
7094    if (element.hasPurposeElement()) {
7095      composeMarkdown(t, "CompartmentDefinition", "purpose", element.getPurposeElement(), -1);
7096    }
7097    if (element.hasCodeElement()) {
7098      composeEnum(t, "CompartmentDefinition", "code", element.getCodeElement(), -1);
7099    }
7100    if (element.hasSearchElement()) {
7101      composeBoolean(t, "CompartmentDefinition", "search", element.getSearchElement(), -1);
7102    }
7103    for (int i = 0; i < element.getResource().size(); i++) {
7104      composeCompartmentDefinitionResourceComponent(t, "CompartmentDefinition", "resource", element.getResource().get(i), i);
7105    }
7106  }
7107
7108  protected void composeCompartmentDefinitionResourceComponent(Complex parent, String parentType, String name, CompartmentDefinition.CompartmentDefinitionResourceComponent element, int index) {
7109    if (element == null) 
7110      return;
7111    Complex t;
7112    if (Utilities.noString(parentType))
7113      t = parent;
7114    else {
7115      t = parent.predicate("fhir:"+parentType+'.'+name);
7116    }
7117    composeBackboneElement(t, "resource", name, element, index);
7118    if (element.hasCodeElement()) {
7119      composeCode(t, "CompartmentDefinitionResourceComponent", "code", element.getCodeElement(), -1);
7120    }
7121    for (int i = 0; i < element.getParam().size(); i++) {
7122      composeString(t, "CompartmentDefinitionResourceComponent", "param", element.getParam().get(i), i);
7123    }
7124    if (element.hasDocumentationElement()) {
7125      composeString(t, "CompartmentDefinitionResourceComponent", "documentation", element.getDocumentationElement(), -1);
7126    }
7127    if (element.hasStartParamElement()) {
7128      composeUri(t, "CompartmentDefinitionResourceComponent", "startParam", element.getStartParamElement(), -1);
7129    }
7130    if (element.hasEndParamElement()) {
7131      composeUri(t, "CompartmentDefinitionResourceComponent", "endParam", element.getEndParamElement(), -1);
7132    }
7133  }
7134
7135  protected void composeComposition(Complex parent, String parentType, String name, Composition element, int index) {
7136    if (element == null) 
7137      return;
7138    Complex t;
7139    if (Utilities.noString(parentType))
7140      t = parent;
7141    else {
7142      t = parent.predicate("fhir:"+parentType+'.'+name);
7143    }
7144    composeDomainResource(t, "Composition", name, element, index);
7145    if (element.hasUrlElement()) {
7146      composeUri(t, "Composition", "url", element.getUrlElement(), -1);
7147    }
7148    for (int i = 0; i < element.getIdentifier().size(); i++) {
7149      composeIdentifier(t, "Composition", "identifier", element.getIdentifier().get(i), i);
7150    }
7151    if (element.hasVersionElement()) {
7152      composeString(t, "Composition", "version", element.getVersionElement(), -1);
7153    }
7154    if (element.hasStatusElement()) {
7155      composeEnum(t, "Composition", "status", element.getStatusElement(), -1);
7156    }
7157    if (element.hasType()) {
7158      composeCodeableConcept(t, "Composition", "type", element.getType(), -1);
7159    }
7160    for (int i = 0; i < element.getCategory().size(); i++) {
7161      composeCodeableConcept(t, "Composition", "category", element.getCategory().get(i), i);
7162    }
7163    for (int i = 0; i < element.getSubject().size(); i++) {
7164      composeReference(t, "Composition", "subject", element.getSubject().get(i), i);
7165    }
7166    if (element.hasEncounter()) {
7167      composeReference(t, "Composition", "encounter", element.getEncounter(), -1);
7168    }
7169    if (element.hasDateElement()) {
7170      composeDateTime(t, "Composition", "date", element.getDateElement(), -1);
7171    }
7172    for (int i = 0; i < element.getUseContext().size(); i++) {
7173      composeUsageContext(t, "Composition", "useContext", element.getUseContext().get(i), i);
7174    }
7175    for (int i = 0; i < element.getAuthor().size(); i++) {
7176      composeReference(t, "Composition", "author", element.getAuthor().get(i), i);
7177    }
7178    if (element.hasNameElement()) {
7179      composeString(t, "Composition", "name", element.getNameElement(), -1);
7180    }
7181    if (element.hasTitleElement()) {
7182      composeString(t, "Composition", "title", element.getTitleElement(), -1);
7183    }
7184    for (int i = 0; i < element.getNote().size(); i++) {
7185      composeAnnotation(t, "Composition", "note", element.getNote().get(i), i);
7186    }
7187    for (int i = 0; i < element.getAttester().size(); i++) {
7188      composeCompositionAttesterComponent(t, "Composition", "attester", element.getAttester().get(i), i);
7189    }
7190    if (element.hasCustodian()) {
7191      composeReference(t, "Composition", "custodian", element.getCustodian(), -1);
7192    }
7193    for (int i = 0; i < element.getRelatesTo().size(); i++) {
7194      composeRelatedArtifact(t, "Composition", "relatesTo", element.getRelatesTo().get(i), i);
7195    }
7196    for (int i = 0; i < element.getEvent().size(); i++) {
7197      composeCompositionEventComponent(t, "Composition", "event", element.getEvent().get(i), i);
7198    }
7199    for (int i = 0; i < element.getSection().size(); i++) {
7200      composeCompositionSectionComponent(t, "Composition", "section", element.getSection().get(i), i);
7201    }
7202  }
7203
7204  protected void composeCompositionAttesterComponent(Complex parent, String parentType, String name, Composition.CompositionAttesterComponent element, int index) {
7205    if (element == null) 
7206      return;
7207    Complex t;
7208    if (Utilities.noString(parentType))
7209      t = parent;
7210    else {
7211      t = parent.predicate("fhir:"+parentType+'.'+name);
7212    }
7213    composeBackboneElement(t, "attester", name, element, index);
7214    if (element.hasMode()) {
7215      composeCodeableConcept(t, "CompositionAttesterComponent", "mode", element.getMode(), -1);
7216    }
7217    if (element.hasTimeElement()) {
7218      composeDateTime(t, "CompositionAttesterComponent", "time", element.getTimeElement(), -1);
7219    }
7220    if (element.hasParty()) {
7221      composeReference(t, "CompositionAttesterComponent", "party", element.getParty(), -1);
7222    }
7223  }
7224
7225  protected void composeCompositionEventComponent(Complex parent, String parentType, String name, Composition.CompositionEventComponent element, int index) {
7226    if (element == null) 
7227      return;
7228    Complex t;
7229    if (Utilities.noString(parentType))
7230      t = parent;
7231    else {
7232      t = parent.predicate("fhir:"+parentType+'.'+name);
7233    }
7234    composeBackboneElement(t, "event", name, element, index);
7235    for (int i = 0; i < element.getCode().size(); i++) {
7236      composeCodeableConcept(t, "CompositionEventComponent", "code", element.getCode().get(i), i);
7237    }
7238    if (element.hasPeriod()) {
7239      composePeriod(t, "CompositionEventComponent", "period", element.getPeriod(), -1);
7240    }
7241    for (int i = 0; i < element.getDetail().size(); i++) {
7242      composeReference(t, "CompositionEventComponent", "detail", element.getDetail().get(i), i);
7243    }
7244  }
7245
7246  protected void composeCompositionSectionComponent(Complex parent, String parentType, String name, Composition.SectionComponent element, int index) {
7247    if (element == null) 
7248      return;
7249    Complex t;
7250    if (Utilities.noString(parentType))
7251      t = parent;
7252    else {
7253      t = parent.predicate("fhir:"+parentType+'.'+name);
7254    }
7255    composeBackboneElement(t, "section", name, element, index);
7256    if (element.hasTitleElement()) {
7257      composeString(t, "SectionComponent", "title", element.getTitleElement(), -1);
7258    }
7259    if (element.hasCode()) {
7260      composeCodeableConcept(t, "SectionComponent", "code", element.getCode(), -1);
7261    }
7262    for (int i = 0; i < element.getAuthor().size(); i++) {
7263      composeReference(t, "SectionComponent", "author", element.getAuthor().get(i), i);
7264    }
7265    if (element.hasFocus()) {
7266      composeReference(t, "SectionComponent", "focus", element.getFocus(), -1);
7267    }
7268    if (element.hasText()) {
7269      composeNarrative(t, "SectionComponent", "text", element.getText(), -1);
7270    }
7271    if (element.hasModeElement()) {
7272      composeEnum(t, "SectionComponent", "mode", element.getModeElement(), -1);
7273    }
7274    if (element.hasOrderedBy()) {
7275      composeCodeableConcept(t, "SectionComponent", "orderedBy", element.getOrderedBy(), -1);
7276    }
7277    for (int i = 0; i < element.getEntry().size(); i++) {
7278      composeReference(t, "SectionComponent", "entry", element.getEntry().get(i), i);
7279    }
7280    if (element.hasEmptyReason()) {
7281      composeCodeableConcept(t, "SectionComponent", "emptyReason", element.getEmptyReason(), -1);
7282    }
7283    for (int i = 0; i < element.getSection().size(); i++) {
7284      composeCompositionSectionComponent(t, "SectionComponent", "section", element.getSection().get(i), i);
7285    }
7286  }
7287
7288  protected void composeConceptMap(Complex parent, String parentType, String name, ConceptMap element, int index) {
7289    if (element == null) 
7290      return;
7291    Complex t;
7292    if (Utilities.noString(parentType))
7293      t = parent;
7294    else {
7295      t = parent.predicate("fhir:"+parentType+'.'+name);
7296    }
7297    composeMetadataResource(t, "ConceptMap", name, element, index);
7298    if (element.hasUrlElement()) {
7299      composeUri(t, "ConceptMap", "url", element.getUrlElement(), -1);
7300    }
7301    for (int i = 0; i < element.getIdentifier().size(); i++) {
7302      composeIdentifier(t, "ConceptMap", "identifier", element.getIdentifier().get(i), i);
7303    }
7304    if (element.hasVersionElement()) {
7305      composeString(t, "ConceptMap", "version", element.getVersionElement(), -1);
7306    }
7307    if (element.hasNameElement()) {
7308      composeString(t, "ConceptMap", "name", element.getNameElement(), -1);
7309    }
7310    if (element.hasTitleElement()) {
7311      composeString(t, "ConceptMap", "title", element.getTitleElement(), -1);
7312    }
7313    if (element.hasStatusElement()) {
7314      composeEnum(t, "ConceptMap", "status", element.getStatusElement(), -1);
7315    }
7316    if (element.hasExperimentalElement()) {
7317      composeBoolean(t, "ConceptMap", "experimental", element.getExperimentalElement(), -1);
7318    }
7319    if (element.hasDateElement()) {
7320      composeDateTime(t, "ConceptMap", "date", element.getDateElement(), -1);
7321    }
7322    if (element.hasPublisherElement()) {
7323      composeString(t, "ConceptMap", "publisher", element.getPublisherElement(), -1);
7324    }
7325    for (int i = 0; i < element.getContact().size(); i++) {
7326      composeContactDetail(t, "ConceptMap", "contact", element.getContact().get(i), i);
7327    }
7328    if (element.hasDescriptionElement()) {
7329      composeMarkdown(t, "ConceptMap", "description", element.getDescriptionElement(), -1);
7330    }
7331    for (int i = 0; i < element.getUseContext().size(); i++) {
7332      composeUsageContext(t, "ConceptMap", "useContext", element.getUseContext().get(i), i);
7333    }
7334    for (int i = 0; i < element.getJurisdiction().size(); i++) {
7335      composeCodeableConcept(t, "ConceptMap", "jurisdiction", element.getJurisdiction().get(i), i);
7336    }
7337    if (element.hasPurposeElement()) {
7338      composeMarkdown(t, "ConceptMap", "purpose", element.getPurposeElement(), -1);
7339    }
7340    if (element.hasCopyrightElement()) {
7341      composeMarkdown(t, "ConceptMap", "copyright", element.getCopyrightElement(), -1);
7342    }
7343    if (element.hasApprovalDateElement()) {
7344      composeDate(t, "ConceptMap", "approvalDate", element.getApprovalDateElement(), -1);
7345    }
7346    if (element.hasLastReviewDateElement()) {
7347      composeDate(t, "ConceptMap", "lastReviewDate", element.getLastReviewDateElement(), -1);
7348    }
7349    if (element.hasEffectivePeriod()) {
7350      composePeriod(t, "ConceptMap", "effectivePeriod", element.getEffectivePeriod(), -1);
7351    }
7352    for (int i = 0; i < element.getTopic().size(); i++) {
7353      composeCodeableConcept(t, "ConceptMap", "topic", element.getTopic().get(i), i);
7354    }
7355    for (int i = 0; i < element.getAuthor().size(); i++) {
7356      composeContactDetail(t, "ConceptMap", "author", element.getAuthor().get(i), i);
7357    }
7358    for (int i = 0; i < element.getEditor().size(); i++) {
7359      composeContactDetail(t, "ConceptMap", "editor", element.getEditor().get(i), i);
7360    }
7361    for (int i = 0; i < element.getReviewer().size(); i++) {
7362      composeContactDetail(t, "ConceptMap", "reviewer", element.getReviewer().get(i), i);
7363    }
7364    for (int i = 0; i < element.getEndorser().size(); i++) {
7365      composeContactDetail(t, "ConceptMap", "endorser", element.getEndorser().get(i), i);
7366    }
7367    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
7368      composeRelatedArtifact(t, "ConceptMap", "relatedArtifact", element.getRelatedArtifact().get(i), i);
7369    }
7370    if (element.hasSourceScope()) {
7371      composeType(t, "ConceptMap", "sourceScope", element.getSourceScope(), -1);
7372    }
7373    if (element.hasTargetScope()) {
7374      composeType(t, "ConceptMap", "targetScope", element.getTargetScope(), -1);
7375    }
7376    for (int i = 0; i < element.getGroup().size(); i++) {
7377      composeConceptMapGroupComponent(t, "ConceptMap", "group", element.getGroup().get(i), i);
7378    }
7379  }
7380
7381  protected void composeConceptMapGroupComponent(Complex parent, String parentType, String name, ConceptMap.ConceptMapGroupComponent element, int index) {
7382    if (element == null) 
7383      return;
7384    Complex t;
7385    if (Utilities.noString(parentType))
7386      t = parent;
7387    else {
7388      t = parent.predicate("fhir:"+parentType+'.'+name);
7389    }
7390    composeBackboneElement(t, "group", name, element, index);
7391    if (element.hasSourceElement()) {
7392      composeCanonical(t, "ConceptMapGroupComponent", "source", element.getSourceElement(), -1);
7393    }
7394    if (element.hasTargetElement()) {
7395      composeCanonical(t, "ConceptMapGroupComponent", "target", element.getTargetElement(), -1);
7396    }
7397    for (int i = 0; i < element.getElement().size(); i++) {
7398      composeConceptMapSourceElementComponent(t, "ConceptMapGroupComponent", "element", element.getElement().get(i), i);
7399    }
7400    if (element.hasUnmapped()) {
7401      composeConceptMapGroupUnmappedComponent(t, "ConceptMapGroupComponent", "unmapped", element.getUnmapped(), -1);
7402    }
7403  }
7404
7405  protected void composeConceptMapSourceElementComponent(Complex parent, String parentType, String name, ConceptMap.SourceElementComponent element, int index) {
7406    if (element == null) 
7407      return;
7408    Complex t;
7409    if (Utilities.noString(parentType))
7410      t = parent;
7411    else {
7412      t = parent.predicate("fhir:"+parentType+'.'+name);
7413    }
7414    composeBackboneElement(t, "element", name, element, index);
7415    if (element.hasCodeElement()) {
7416      composeCode(t, "SourceElementComponent", "code", element.getCodeElement(), -1);
7417    }
7418    if (element.hasDisplayElement()) {
7419      composeString(t, "SourceElementComponent", "display", element.getDisplayElement(), -1);
7420    }
7421    if (element.hasValueSetElement()) {
7422      composeCanonical(t, "SourceElementComponent", "valueSet", element.getValueSetElement(), -1);
7423    }
7424    if (element.hasNoMapElement()) {
7425      composeBoolean(t, "SourceElementComponent", "noMap", element.getNoMapElement(), -1);
7426    }
7427    for (int i = 0; i < element.getTarget().size(); i++) {
7428      composeConceptMapTargetElementComponent(t, "SourceElementComponent", "target", element.getTarget().get(i), i);
7429    }
7430  }
7431
7432  protected void composeConceptMapTargetElementComponent(Complex parent, String parentType, String name, ConceptMap.TargetElementComponent element, int index) {
7433    if (element == null) 
7434      return;
7435    Complex t;
7436    if (Utilities.noString(parentType))
7437      t = parent;
7438    else {
7439      t = parent.predicate("fhir:"+parentType+'.'+name);
7440    }
7441    composeBackboneElement(t, "target", name, element, index);
7442    if (element.hasCodeElement()) {
7443      composeCode(t, "TargetElementComponent", "code", element.getCodeElement(), -1);
7444    }
7445    if (element.hasDisplayElement()) {
7446      composeString(t, "TargetElementComponent", "display", element.getDisplayElement(), -1);
7447    }
7448    if (element.hasValueSetElement()) {
7449      composeCanonical(t, "TargetElementComponent", "valueSet", element.getValueSetElement(), -1);
7450    }
7451    if (element.hasRelationshipElement()) {
7452      composeEnum(t, "TargetElementComponent", "relationship", element.getRelationshipElement(), -1);
7453    }
7454    if (element.hasCommentElement()) {
7455      composeString(t, "TargetElementComponent", "comment", element.getCommentElement(), -1);
7456    }
7457    for (int i = 0; i < element.getDependsOn().size(); i++) {
7458      composeConceptMapOtherElementComponent(t, "TargetElementComponent", "dependsOn", element.getDependsOn().get(i), i);
7459    }
7460    for (int i = 0; i < element.getProduct().size(); i++) {
7461      composeConceptMapOtherElementComponent(t, "TargetElementComponent", "product", element.getProduct().get(i), i);
7462    }
7463  }
7464
7465  protected void composeConceptMapOtherElementComponent(Complex parent, String parentType, String name, ConceptMap.OtherElementComponent element, int index) {
7466    if (element == null) 
7467      return;
7468    Complex t;
7469    if (Utilities.noString(parentType))
7470      t = parent;
7471    else {
7472      t = parent.predicate("fhir:"+parentType+'.'+name);
7473    }
7474    composeBackboneElement(t, "dependsOn", name, element, index);
7475    if (element.hasPropertyElement()) {
7476      composeUri(t, "OtherElementComponent", "property", element.getPropertyElement(), -1);
7477    }
7478    if (element.hasValue()) {
7479      composeType(t, "OtherElementComponent", "value", element.getValue(), -1);
7480    }
7481    if (element.hasValueSetElement()) {
7482      composeCanonical(t, "OtherElementComponent", "valueSet", element.getValueSetElement(), -1);
7483    }
7484  }
7485
7486  protected void composeConceptMapGroupUnmappedComponent(Complex parent, String parentType, String name, ConceptMap.ConceptMapGroupUnmappedComponent element, int index) {
7487    if (element == null) 
7488      return;
7489    Complex t;
7490    if (Utilities.noString(parentType))
7491      t = parent;
7492    else {
7493      t = parent.predicate("fhir:"+parentType+'.'+name);
7494    }
7495    composeBackboneElement(t, "unmapped", name, element, index);
7496    if (element.hasModeElement()) {
7497      composeEnum(t, "ConceptMapGroupUnmappedComponent", "mode", element.getModeElement(), -1);
7498    }
7499    if (element.hasCodeElement()) {
7500      composeCode(t, "ConceptMapGroupUnmappedComponent", "code", element.getCodeElement(), -1);
7501    }
7502    if (element.hasDisplayElement()) {
7503      composeString(t, "ConceptMapGroupUnmappedComponent", "display", element.getDisplayElement(), -1);
7504    }
7505    if (element.hasValueSetElement()) {
7506      composeCanonical(t, "ConceptMapGroupUnmappedComponent", "valueSet", element.getValueSetElement(), -1);
7507    }
7508    if (element.hasRelationshipElement()) {
7509      composeEnum(t, "ConceptMapGroupUnmappedComponent", "relationship", element.getRelationshipElement(), -1);
7510    }
7511    if (element.hasOtherMapElement()) {
7512      composeCanonical(t, "ConceptMapGroupUnmappedComponent", "otherMap", element.getOtherMapElement(), -1);
7513    }
7514  }
7515
7516  protected void composeCondition(Complex parent, String parentType, String name, Condition element, int index) {
7517    if (element == null) 
7518      return;
7519    Complex t;
7520    if (Utilities.noString(parentType))
7521      t = parent;
7522    else {
7523      t = parent.predicate("fhir:"+parentType+'.'+name);
7524    }
7525    composeDomainResource(t, "Condition", name, element, index);
7526    for (int i = 0; i < element.getIdentifier().size(); i++) {
7527      composeIdentifier(t, "Condition", "identifier", element.getIdentifier().get(i), i);
7528    }
7529    if (element.hasClinicalStatus()) {
7530      composeCodeableConcept(t, "Condition", "clinicalStatus", element.getClinicalStatus(), -1);
7531    }
7532    if (element.hasVerificationStatus()) {
7533      composeCodeableConcept(t, "Condition", "verificationStatus", element.getVerificationStatus(), -1);
7534    }
7535    for (int i = 0; i < element.getCategory().size(); i++) {
7536      composeCodeableConcept(t, "Condition", "category", element.getCategory().get(i), i);
7537    }
7538    if (element.hasSeverity()) {
7539      composeCodeableConcept(t, "Condition", "severity", element.getSeverity(), -1);
7540    }
7541    if (element.hasCode()) {
7542      composeCodeableConcept(t, "Condition", "code", element.getCode(), -1);
7543    }
7544    for (int i = 0; i < element.getBodySite().size(); i++) {
7545      composeCodeableConcept(t, "Condition", "bodySite", element.getBodySite().get(i), i);
7546    }
7547    if (element.hasSubject()) {
7548      composeReference(t, "Condition", "subject", element.getSubject(), -1);
7549    }
7550    if (element.hasEncounter()) {
7551      composeReference(t, "Condition", "encounter", element.getEncounter(), -1);
7552    }
7553    if (element.hasOnset()) {
7554      composeType(t, "Condition", "onset", element.getOnset(), -1);
7555    }
7556    if (element.hasAbatement()) {
7557      composeType(t, "Condition", "abatement", element.getAbatement(), -1);
7558    }
7559    if (element.hasRecordedDateElement()) {
7560      composeDateTime(t, "Condition", "recordedDate", element.getRecordedDateElement(), -1);
7561    }
7562    for (int i = 0; i < element.getParticipant().size(); i++) {
7563      composeConditionParticipantComponent(t, "Condition", "participant", element.getParticipant().get(i), i);
7564    }
7565    for (int i = 0; i < element.getStage().size(); i++) {
7566      composeConditionStageComponent(t, "Condition", "stage", element.getStage().get(i), i);
7567    }
7568    for (int i = 0; i < element.getEvidence().size(); i++) {
7569      composeCodeableReference(t, "Condition", "evidence", element.getEvidence().get(i), i);
7570    }
7571    for (int i = 0; i < element.getNote().size(); i++) {
7572      composeAnnotation(t, "Condition", "note", element.getNote().get(i), i);
7573    }
7574  }
7575
7576  protected void composeConditionParticipantComponent(Complex parent, String parentType, String name, Condition.ConditionParticipantComponent element, int index) {
7577    if (element == null) 
7578      return;
7579    Complex t;
7580    if (Utilities.noString(parentType))
7581      t = parent;
7582    else {
7583      t = parent.predicate("fhir:"+parentType+'.'+name);
7584    }
7585    composeBackboneElement(t, "participant", name, element, index);
7586    if (element.hasFunction()) {
7587      composeCodeableConcept(t, "ConditionParticipantComponent", "function", element.getFunction(), -1);
7588    }
7589    if (element.hasActor()) {
7590      composeReference(t, "ConditionParticipantComponent", "actor", element.getActor(), -1);
7591    }
7592  }
7593
7594  protected void composeConditionStageComponent(Complex parent, String parentType, String name, Condition.ConditionStageComponent element, int index) {
7595    if (element == null) 
7596      return;
7597    Complex t;
7598    if (Utilities.noString(parentType))
7599      t = parent;
7600    else {
7601      t = parent.predicate("fhir:"+parentType+'.'+name);
7602    }
7603    composeBackboneElement(t, "stage", name, element, index);
7604    if (element.hasSummary()) {
7605      composeCodeableConcept(t, "ConditionStageComponent", "summary", element.getSummary(), -1);
7606    }
7607    for (int i = 0; i < element.getAssessment().size(); i++) {
7608      composeReference(t, "ConditionStageComponent", "assessment", element.getAssessment().get(i), i);
7609    }
7610    if (element.hasType()) {
7611      composeCodeableConcept(t, "ConditionStageComponent", "type", element.getType(), -1);
7612    }
7613  }
7614
7615  protected void composeConditionDefinition(Complex parent, String parentType, String name, ConditionDefinition element, int index) {
7616    if (element == null) 
7617      return;
7618    Complex t;
7619    if (Utilities.noString(parentType))
7620      t = parent;
7621    else {
7622      t = parent.predicate("fhir:"+parentType+'.'+name);
7623    }
7624    composeMetadataResource(t, "ConditionDefinition", name, element, index);
7625    if (element.hasUrlElement()) {
7626      composeUri(t, "ConditionDefinition", "url", element.getUrlElement(), -1);
7627    }
7628    for (int i = 0; i < element.getIdentifier().size(); i++) {
7629      composeIdentifier(t, "ConditionDefinition", "identifier", element.getIdentifier().get(i), i);
7630    }
7631    if (element.hasVersionElement()) {
7632      composeString(t, "ConditionDefinition", "version", element.getVersionElement(), -1);
7633    }
7634    if (element.hasNameElement()) {
7635      composeString(t, "ConditionDefinition", "name", element.getNameElement(), -1);
7636    }
7637    if (element.hasTitleElement()) {
7638      composeString(t, "ConditionDefinition", "title", element.getTitleElement(), -1);
7639    }
7640    if (element.hasSubtitleElement()) {
7641      composeString(t, "ConditionDefinition", "subtitle", element.getSubtitleElement(), -1);
7642    }
7643    if (element.hasStatusElement()) {
7644      composeEnum(t, "ConditionDefinition", "status", element.getStatusElement(), -1);
7645    }
7646    if (element.hasExperimentalElement()) {
7647      composeBoolean(t, "ConditionDefinition", "experimental", element.getExperimentalElement(), -1);
7648    }
7649    if (element.hasDateElement()) {
7650      composeDateTime(t, "ConditionDefinition", "date", element.getDateElement(), -1);
7651    }
7652    if (element.hasPublisherElement()) {
7653      composeString(t, "ConditionDefinition", "publisher", element.getPublisherElement(), -1);
7654    }
7655    for (int i = 0; i < element.getContact().size(); i++) {
7656      composeContactDetail(t, "ConditionDefinition", "contact", element.getContact().get(i), i);
7657    }
7658    if (element.hasDescriptionElement()) {
7659      composeMarkdown(t, "ConditionDefinition", "description", element.getDescriptionElement(), -1);
7660    }
7661    for (int i = 0; i < element.getUseContext().size(); i++) {
7662      composeUsageContext(t, "ConditionDefinition", "useContext", element.getUseContext().get(i), i);
7663    }
7664    for (int i = 0; i < element.getJurisdiction().size(); i++) {
7665      composeCodeableConcept(t, "ConditionDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
7666    }
7667    if (element.hasCode()) {
7668      composeCodeableConcept(t, "ConditionDefinition", "code", element.getCode(), -1);
7669    }
7670    if (element.hasSeverity()) {
7671      composeCodeableConcept(t, "ConditionDefinition", "severity", element.getSeverity(), -1);
7672    }
7673    if (element.hasBodySite()) {
7674      composeCodeableConcept(t, "ConditionDefinition", "bodySite", element.getBodySite(), -1);
7675    }
7676    if (element.hasStage()) {
7677      composeCodeableConcept(t, "ConditionDefinition", "stage", element.getStage(), -1);
7678    }
7679    if (element.hasHasSeverityElement()) {
7680      composeBoolean(t, "ConditionDefinition", "hasSeverity", element.getHasSeverityElement(), -1);
7681    }
7682    if (element.hasHasBodySiteElement()) {
7683      composeBoolean(t, "ConditionDefinition", "hasBodySite", element.getHasBodySiteElement(), -1);
7684    }
7685    if (element.hasHasStageElement()) {
7686      composeBoolean(t, "ConditionDefinition", "hasStage", element.getHasStageElement(), -1);
7687    }
7688    for (int i = 0; i < element.getDefinition().size(); i++) {
7689      composeUri(t, "ConditionDefinition", "definition", element.getDefinition().get(i), i);
7690    }
7691    for (int i = 0; i < element.getObservation().size(); i++) {
7692      composeConditionDefinitionObservationComponent(t, "ConditionDefinition", "observation", element.getObservation().get(i), i);
7693    }
7694    for (int i = 0; i < element.getMedication().size(); i++) {
7695      composeConditionDefinitionMedicationComponent(t, "ConditionDefinition", "medication", element.getMedication().get(i), i);
7696    }
7697    for (int i = 0; i < element.getPrecondition().size(); i++) {
7698      composeConditionDefinitionPreconditionComponent(t, "ConditionDefinition", "precondition", element.getPrecondition().get(i), i);
7699    }
7700    for (int i = 0; i < element.getTeam().size(); i++) {
7701      composeReference(t, "ConditionDefinition", "team", element.getTeam().get(i), i);
7702    }
7703    for (int i = 0; i < element.getQuestionnaire().size(); i++) {
7704      composeConditionDefinitionQuestionnaireComponent(t, "ConditionDefinition", "questionnaire", element.getQuestionnaire().get(i), i);
7705    }
7706    for (int i = 0; i < element.getPlan().size(); i++) {
7707      composeConditionDefinitionPlanComponent(t, "ConditionDefinition", "plan", element.getPlan().get(i), i);
7708    }
7709  }
7710
7711  protected void composeConditionDefinitionObservationComponent(Complex parent, String parentType, String name, ConditionDefinition.ConditionDefinitionObservationComponent element, int index) {
7712    if (element == null) 
7713      return;
7714    Complex t;
7715    if (Utilities.noString(parentType))
7716      t = parent;
7717    else {
7718      t = parent.predicate("fhir:"+parentType+'.'+name);
7719    }
7720    composeBackboneElement(t, "observation", name, element, index);
7721    if (element.hasCategory()) {
7722      composeCodeableConcept(t, "ConditionDefinitionObservationComponent", "category", element.getCategory(), -1);
7723    }
7724    if (element.hasCode()) {
7725      composeCodeableConcept(t, "ConditionDefinitionObservationComponent", "code", element.getCode(), -1);
7726    }
7727  }
7728
7729  protected void composeConditionDefinitionMedicationComponent(Complex parent, String parentType, String name, ConditionDefinition.ConditionDefinitionMedicationComponent element, int index) {
7730    if (element == null) 
7731      return;
7732    Complex t;
7733    if (Utilities.noString(parentType))
7734      t = parent;
7735    else {
7736      t = parent.predicate("fhir:"+parentType+'.'+name);
7737    }
7738    composeBackboneElement(t, "medication", name, element, index);
7739    if (element.hasCategory()) {
7740      composeCodeableConcept(t, "ConditionDefinitionMedicationComponent", "category", element.getCategory(), -1);
7741    }
7742    if (element.hasCode()) {
7743      composeCodeableConcept(t, "ConditionDefinitionMedicationComponent", "code", element.getCode(), -1);
7744    }
7745  }
7746
7747  protected void composeConditionDefinitionPreconditionComponent(Complex parent, String parentType, String name, ConditionDefinition.ConditionDefinitionPreconditionComponent element, int index) {
7748    if (element == null) 
7749      return;
7750    Complex t;
7751    if (Utilities.noString(parentType))
7752      t = parent;
7753    else {
7754      t = parent.predicate("fhir:"+parentType+'.'+name);
7755    }
7756    composeBackboneElement(t, "precondition", name, element, index);
7757    if (element.hasTypeElement()) {
7758      composeEnum(t, "ConditionDefinitionPreconditionComponent", "type", element.getTypeElement(), -1);
7759    }
7760    if (element.hasCode()) {
7761      composeCodeableConcept(t, "ConditionDefinitionPreconditionComponent", "code", element.getCode(), -1);
7762    }
7763    if (element.hasValue()) {
7764      composeType(t, "ConditionDefinitionPreconditionComponent", "value", element.getValue(), -1);
7765    }
7766  }
7767
7768  protected void composeConditionDefinitionQuestionnaireComponent(Complex parent, String parentType, String name, ConditionDefinition.ConditionDefinitionQuestionnaireComponent element, int index) {
7769    if (element == null) 
7770      return;
7771    Complex t;
7772    if (Utilities.noString(parentType))
7773      t = parent;
7774    else {
7775      t = parent.predicate("fhir:"+parentType+'.'+name);
7776    }
7777    composeBackboneElement(t, "questionnaire", name, element, index);
7778    if (element.hasPurposeElement()) {
7779      composeEnum(t, "ConditionDefinitionQuestionnaireComponent", "purpose", element.getPurposeElement(), -1);
7780    }
7781    if (element.hasReference()) {
7782      composeReference(t, "ConditionDefinitionQuestionnaireComponent", "reference", element.getReference(), -1);
7783    }
7784  }
7785
7786  protected void composeConditionDefinitionPlanComponent(Complex parent, String parentType, String name, ConditionDefinition.ConditionDefinitionPlanComponent element, int index) {
7787    if (element == null) 
7788      return;
7789    Complex t;
7790    if (Utilities.noString(parentType))
7791      t = parent;
7792    else {
7793      t = parent.predicate("fhir:"+parentType+'.'+name);
7794    }
7795    composeBackboneElement(t, "plan", name, element, index);
7796    if (element.hasRole()) {
7797      composeCodeableConcept(t, "ConditionDefinitionPlanComponent", "role", element.getRole(), -1);
7798    }
7799    if (element.hasReference()) {
7800      composeReference(t, "ConditionDefinitionPlanComponent", "reference", element.getReference(), -1);
7801    }
7802  }
7803
7804  protected void composeConsent(Complex parent, String parentType, String name, Consent element, int index) {
7805    if (element == null) 
7806      return;
7807    Complex t;
7808    if (Utilities.noString(parentType))
7809      t = parent;
7810    else {
7811      t = parent.predicate("fhir:"+parentType+'.'+name);
7812    }
7813    composeDomainResource(t, "Consent", name, element, index);
7814    for (int i = 0; i < element.getIdentifier().size(); i++) {
7815      composeIdentifier(t, "Consent", "identifier", element.getIdentifier().get(i), i);
7816    }
7817    if (element.hasStatusElement()) {
7818      composeEnum(t, "Consent", "status", element.getStatusElement(), -1);
7819    }
7820    for (int i = 0; i < element.getCategory().size(); i++) {
7821      composeCodeableConcept(t, "Consent", "category", element.getCategory().get(i), i);
7822    }
7823    if (element.hasSubject()) {
7824      composeReference(t, "Consent", "subject", element.getSubject(), -1);
7825    }
7826    if (element.hasDateElement()) {
7827      composeDate(t, "Consent", "date", element.getDateElement(), -1);
7828    }
7829    if (element.hasPeriod()) {
7830      composePeriod(t, "Consent", "period", element.getPeriod(), -1);
7831    }
7832    for (int i = 0; i < element.getGrantor().size(); i++) {
7833      composeReference(t, "Consent", "grantor", element.getGrantor().get(i), i);
7834    }
7835    for (int i = 0; i < element.getGrantee().size(); i++) {
7836      composeReference(t, "Consent", "grantee", element.getGrantee().get(i), i);
7837    }
7838    for (int i = 0; i < element.getManager().size(); i++) {
7839      composeReference(t, "Consent", "manager", element.getManager().get(i), i);
7840    }
7841    for (int i = 0; i < element.getController().size(); i++) {
7842      composeReference(t, "Consent", "controller", element.getController().get(i), i);
7843    }
7844    for (int i = 0; i < element.getSourceAttachment().size(); i++) {
7845      composeAttachment(t, "Consent", "sourceAttachment", element.getSourceAttachment().get(i), i);
7846    }
7847    for (int i = 0; i < element.getSourceReference().size(); i++) {
7848      composeReference(t, "Consent", "sourceReference", element.getSourceReference().get(i), i);
7849    }
7850    for (int i = 0; i < element.getRegulatoryBasis().size(); i++) {
7851      composeCodeableConcept(t, "Consent", "regulatoryBasis", element.getRegulatoryBasis().get(i), i);
7852    }
7853    if (element.hasPolicyBasis()) {
7854      composeConsentPolicyBasisComponent(t, "Consent", "policyBasis", element.getPolicyBasis(), -1);
7855    }
7856    for (int i = 0; i < element.getPolicyText().size(); i++) {
7857      composeReference(t, "Consent", "policyText", element.getPolicyText().get(i), i);
7858    }
7859    for (int i = 0; i < element.getVerification().size(); i++) {
7860      composeConsentVerificationComponent(t, "Consent", "verification", element.getVerification().get(i), i);
7861    }
7862    if (element.hasProvision()) {
7863      composeConsentProvisionComponent(t, "Consent", "provision", element.getProvision(), -1);
7864    }
7865  }
7866
7867  protected void composeConsentPolicyBasisComponent(Complex parent, String parentType, String name, Consent.ConsentPolicyBasisComponent element, int index) {
7868    if (element == null) 
7869      return;
7870    Complex t;
7871    if (Utilities.noString(parentType))
7872      t = parent;
7873    else {
7874      t = parent.predicate("fhir:"+parentType+'.'+name);
7875    }
7876    composeBackboneElement(t, "policyBasis", name, element, index);
7877    if (element.hasReference()) {
7878      composeReference(t, "ConsentPolicyBasisComponent", "reference", element.getReference(), -1);
7879    }
7880    if (element.hasUrlElement()) {
7881      composeUrl(t, "ConsentPolicyBasisComponent", "url", element.getUrlElement(), -1);
7882    }
7883  }
7884
7885  protected void composeConsentVerificationComponent(Complex parent, String parentType, String name, Consent.ConsentVerificationComponent element, int index) {
7886    if (element == null) 
7887      return;
7888    Complex t;
7889    if (Utilities.noString(parentType))
7890      t = parent;
7891    else {
7892      t = parent.predicate("fhir:"+parentType+'.'+name);
7893    }
7894    composeBackboneElement(t, "verification", name, element, index);
7895    if (element.hasVerifiedElement()) {
7896      composeBoolean(t, "ConsentVerificationComponent", "verified", element.getVerifiedElement(), -1);
7897    }
7898    if (element.hasVerificationType()) {
7899      composeCodeableConcept(t, "ConsentVerificationComponent", "verificationType", element.getVerificationType(), -1);
7900    }
7901    if (element.hasVerifiedBy()) {
7902      composeReference(t, "ConsentVerificationComponent", "verifiedBy", element.getVerifiedBy(), -1);
7903    }
7904    if (element.hasVerifiedWith()) {
7905      composeReference(t, "ConsentVerificationComponent", "verifiedWith", element.getVerifiedWith(), -1);
7906    }
7907    for (int i = 0; i < element.getVerificationDate().size(); i++) {
7908      composeDateTime(t, "ConsentVerificationComponent", "verificationDate", element.getVerificationDate().get(i), i);
7909    }
7910  }
7911
7912  protected void composeConsentProvisionComponent(Complex parent, String parentType, String name, Consent.ProvisionComponent element, int index) {
7913    if (element == null) 
7914      return;
7915    Complex t;
7916    if (Utilities.noString(parentType))
7917      t = parent;
7918    else {
7919      t = parent.predicate("fhir:"+parentType+'.'+name);
7920    }
7921    composeBackboneElement(t, "provision", name, element, index);
7922    if (element.hasTypeElement()) {
7923      composeEnum(t, "ProvisionComponent", "type", element.getTypeElement(), -1);
7924    }
7925    if (element.hasPeriod()) {
7926      composePeriod(t, "ProvisionComponent", "period", element.getPeriod(), -1);
7927    }
7928    for (int i = 0; i < element.getActor().size(); i++) {
7929      composeConsentProvisionActorComponent(t, "ProvisionComponent", "actor", element.getActor().get(i), i);
7930    }
7931    for (int i = 0; i < element.getAction().size(); i++) {
7932      composeCodeableConcept(t, "ProvisionComponent", "action", element.getAction().get(i), i);
7933    }
7934    for (int i = 0; i < element.getSecurityLabel().size(); i++) {
7935      composeCoding(t, "ProvisionComponent", "securityLabel", element.getSecurityLabel().get(i), i);
7936    }
7937    for (int i = 0; i < element.getPurpose().size(); i++) {
7938      composeCoding(t, "ProvisionComponent", "purpose", element.getPurpose().get(i), i);
7939    }
7940    for (int i = 0; i < element.getDocumentType().size(); i++) {
7941      composeCoding(t, "ProvisionComponent", "documentType", element.getDocumentType().get(i), i);
7942    }
7943    for (int i = 0; i < element.getResourceType().size(); i++) {
7944      composeCoding(t, "ProvisionComponent", "resourceType", element.getResourceType().get(i), i);
7945    }
7946    for (int i = 0; i < element.getCode().size(); i++) {
7947      composeCodeableConcept(t, "ProvisionComponent", "code", element.getCode().get(i), i);
7948    }
7949    if (element.hasDataPeriod()) {
7950      composePeriod(t, "ProvisionComponent", "dataPeriod", element.getDataPeriod(), -1);
7951    }
7952    for (int i = 0; i < element.getData().size(); i++) {
7953      composeConsentProvisionDataComponent(t, "ProvisionComponent", "data", element.getData().get(i), i);
7954    }
7955    if (element.hasExpression()) {
7956      composeExpression(t, "ProvisionComponent", "expression", element.getExpression(), -1);
7957    }
7958    for (int i = 0; i < element.getProvision().size(); i++) {
7959      composeConsentProvisionComponent(t, "ProvisionComponent", "provision", element.getProvision().get(i), i);
7960    }
7961  }
7962
7963  protected void composeConsentProvisionActorComponent(Complex parent, String parentType, String name, Consent.ProvisionActorComponent element, int index) {
7964    if (element == null) 
7965      return;
7966    Complex t;
7967    if (Utilities.noString(parentType))
7968      t = parent;
7969    else {
7970      t = parent.predicate("fhir:"+parentType+'.'+name);
7971    }
7972    composeBackboneElement(t, "actor", name, element, index);
7973    if (element.hasRole()) {
7974      composeCodeableConcept(t, "ProvisionActorComponent", "role", element.getRole(), -1);
7975    }
7976    if (element.hasReference()) {
7977      composeReference(t, "ProvisionActorComponent", "reference", element.getReference(), -1);
7978    }
7979  }
7980
7981  protected void composeConsentProvisionDataComponent(Complex parent, String parentType, String name, Consent.ProvisionDataComponent element, int index) {
7982    if (element == null) 
7983      return;
7984    Complex t;
7985    if (Utilities.noString(parentType))
7986      t = parent;
7987    else {
7988      t = parent.predicate("fhir:"+parentType+'.'+name);
7989    }
7990    composeBackboneElement(t, "data", name, element, index);
7991    if (element.hasMeaningElement()) {
7992      composeEnum(t, "ProvisionDataComponent", "meaning", element.getMeaningElement(), -1);
7993    }
7994    if (element.hasReference()) {
7995      composeReference(t, "ProvisionDataComponent", "reference", element.getReference(), -1);
7996    }
7997  }
7998
7999  protected void composeContract(Complex parent, String parentType, String name, Contract element, int index) {
8000    if (element == null) 
8001      return;
8002    Complex t;
8003    if (Utilities.noString(parentType))
8004      t = parent;
8005    else {
8006      t = parent.predicate("fhir:"+parentType+'.'+name);
8007    }
8008    composeDomainResource(t, "Contract", name, element, index);
8009    for (int i = 0; i < element.getIdentifier().size(); i++) {
8010      composeIdentifier(t, "Contract", "identifier", element.getIdentifier().get(i), i);
8011    }
8012    if (element.hasUrlElement()) {
8013      composeUri(t, "Contract", "url", element.getUrlElement(), -1);
8014    }
8015    if (element.hasVersionElement()) {
8016      composeString(t, "Contract", "version", element.getVersionElement(), -1);
8017    }
8018    if (element.hasStatusElement()) {
8019      composeEnum(t, "Contract", "status", element.getStatusElement(), -1);
8020    }
8021    if (element.hasLegalState()) {
8022      composeCodeableConcept(t, "Contract", "legalState", element.getLegalState(), -1);
8023    }
8024    if (element.hasInstantiatesCanonical()) {
8025      composeReference(t, "Contract", "instantiatesCanonical", element.getInstantiatesCanonical(), -1);
8026    }
8027    if (element.hasInstantiatesUriElement()) {
8028      composeUri(t, "Contract", "instantiatesUri", element.getInstantiatesUriElement(), -1);
8029    }
8030    if (element.hasContentDerivative()) {
8031      composeCodeableConcept(t, "Contract", "contentDerivative", element.getContentDerivative(), -1);
8032    }
8033    if (element.hasIssuedElement()) {
8034      composeDateTime(t, "Contract", "issued", element.getIssuedElement(), -1);
8035    }
8036    if (element.hasApplies()) {
8037      composePeriod(t, "Contract", "applies", element.getApplies(), -1);
8038    }
8039    if (element.hasExpirationType()) {
8040      composeCodeableConcept(t, "Contract", "expirationType", element.getExpirationType(), -1);
8041    }
8042    for (int i = 0; i < element.getSubject().size(); i++) {
8043      composeReference(t, "Contract", "subject", element.getSubject().get(i), i);
8044    }
8045    for (int i = 0; i < element.getAuthority().size(); i++) {
8046      composeReference(t, "Contract", "authority", element.getAuthority().get(i), i);
8047    }
8048    for (int i = 0; i < element.getDomain().size(); i++) {
8049      composeReference(t, "Contract", "domain", element.getDomain().get(i), i);
8050    }
8051    for (int i = 0; i < element.getSite().size(); i++) {
8052      composeReference(t, "Contract", "site", element.getSite().get(i), i);
8053    }
8054    if (element.hasNameElement()) {
8055      composeString(t, "Contract", "name", element.getNameElement(), -1);
8056    }
8057    if (element.hasTitleElement()) {
8058      composeString(t, "Contract", "title", element.getTitleElement(), -1);
8059    }
8060    if (element.hasSubtitleElement()) {
8061      composeString(t, "Contract", "subtitle", element.getSubtitleElement(), -1);
8062    }
8063    for (int i = 0; i < element.getAlias().size(); i++) {
8064      composeString(t, "Contract", "alias", element.getAlias().get(i), i);
8065    }
8066    if (element.hasAuthor()) {
8067      composeReference(t, "Contract", "author", element.getAuthor(), -1);
8068    }
8069    if (element.hasScope()) {
8070      composeCodeableConcept(t, "Contract", "scope", element.getScope(), -1);
8071    }
8072    if (element.hasTopic()) {
8073      composeType(t, "Contract", "topic", element.getTopic(), -1);
8074    }
8075    if (element.hasType()) {
8076      composeCodeableConcept(t, "Contract", "type", element.getType(), -1);
8077    }
8078    for (int i = 0; i < element.getSubType().size(); i++) {
8079      composeCodeableConcept(t, "Contract", "subType", element.getSubType().get(i), i);
8080    }
8081    if (element.hasContentDefinition()) {
8082      composeContractContentDefinitionComponent(t, "Contract", "contentDefinition", element.getContentDefinition(), -1);
8083    }
8084    for (int i = 0; i < element.getTerm().size(); i++) {
8085      composeContractTermComponent(t, "Contract", "term", element.getTerm().get(i), i);
8086    }
8087    for (int i = 0; i < element.getSupportingInfo().size(); i++) {
8088      composeReference(t, "Contract", "supportingInfo", element.getSupportingInfo().get(i), i);
8089    }
8090    for (int i = 0; i < element.getRelevantHistory().size(); i++) {
8091      composeReference(t, "Contract", "relevantHistory", element.getRelevantHistory().get(i), i);
8092    }
8093    for (int i = 0; i < element.getSigner().size(); i++) {
8094      composeContractSignatoryComponent(t, "Contract", "signer", element.getSigner().get(i), i);
8095    }
8096    for (int i = 0; i < element.getFriendly().size(); i++) {
8097      composeContractFriendlyLanguageComponent(t, "Contract", "friendly", element.getFriendly().get(i), i);
8098    }
8099    for (int i = 0; i < element.getLegal().size(); i++) {
8100      composeContractLegalLanguageComponent(t, "Contract", "legal", element.getLegal().get(i), i);
8101    }
8102    for (int i = 0; i < element.getRule().size(); i++) {
8103      composeContractComputableLanguageComponent(t, "Contract", "rule", element.getRule().get(i), i);
8104    }
8105    if (element.hasLegallyBinding()) {
8106      composeType(t, "Contract", "legallyBinding", element.getLegallyBinding(), -1);
8107    }
8108  }
8109
8110  protected void composeContractContentDefinitionComponent(Complex parent, String parentType, String name, Contract.ContentDefinitionComponent element, int index) {
8111    if (element == null) 
8112      return;
8113    Complex t;
8114    if (Utilities.noString(parentType))
8115      t = parent;
8116    else {
8117      t = parent.predicate("fhir:"+parentType+'.'+name);
8118    }
8119    composeBackboneElement(t, "contentDefinition", name, element, index);
8120    if (element.hasType()) {
8121      composeCodeableConcept(t, "ContentDefinitionComponent", "type", element.getType(), -1);
8122    }
8123    if (element.hasSubType()) {
8124      composeCodeableConcept(t, "ContentDefinitionComponent", "subType", element.getSubType(), -1);
8125    }
8126    if (element.hasPublisher()) {
8127      composeReference(t, "ContentDefinitionComponent", "publisher", element.getPublisher(), -1);
8128    }
8129    if (element.hasPublicationDateElement()) {
8130      composeDateTime(t, "ContentDefinitionComponent", "publicationDate", element.getPublicationDateElement(), -1);
8131    }
8132    if (element.hasPublicationStatusElement()) {
8133      composeEnum(t, "ContentDefinitionComponent", "publicationStatus", element.getPublicationStatusElement(), -1);
8134    }
8135    if (element.hasCopyrightElement()) {
8136      composeMarkdown(t, "ContentDefinitionComponent", "copyright", element.getCopyrightElement(), -1);
8137    }
8138  }
8139
8140  protected void composeContractTermComponent(Complex parent, String parentType, String name, Contract.TermComponent element, int index) {
8141    if (element == null) 
8142      return;
8143    Complex t;
8144    if (Utilities.noString(parentType))
8145      t = parent;
8146    else {
8147      t = parent.predicate("fhir:"+parentType+'.'+name);
8148    }
8149    composeBackboneElement(t, "term", name, element, index);
8150    if (element.hasIdentifier()) {
8151      composeIdentifier(t, "TermComponent", "identifier", element.getIdentifier(), -1);
8152    }
8153    if (element.hasIssuedElement()) {
8154      composeDateTime(t, "TermComponent", "issued", element.getIssuedElement(), -1);
8155    }
8156    if (element.hasApplies()) {
8157      composePeriod(t, "TermComponent", "applies", element.getApplies(), -1);
8158    }
8159    if (element.hasTopic()) {
8160      composeType(t, "TermComponent", "topic", element.getTopic(), -1);
8161    }
8162    if (element.hasType()) {
8163      composeCodeableConcept(t, "TermComponent", "type", element.getType(), -1);
8164    }
8165    if (element.hasSubType()) {
8166      composeCodeableConcept(t, "TermComponent", "subType", element.getSubType(), -1);
8167    }
8168    if (element.hasTextElement()) {
8169      composeString(t, "TermComponent", "text", element.getTextElement(), -1);
8170    }
8171    for (int i = 0; i < element.getSecurityLabel().size(); i++) {
8172      composeContractSecurityLabelComponent(t, "TermComponent", "securityLabel", element.getSecurityLabel().get(i), i);
8173    }
8174    if (element.hasOffer()) {
8175      composeContractOfferComponent(t, "TermComponent", "offer", element.getOffer(), -1);
8176    }
8177    for (int i = 0; i < element.getAsset().size(); i++) {
8178      composeContractAssetComponent(t, "TermComponent", "asset", element.getAsset().get(i), i);
8179    }
8180    for (int i = 0; i < element.getAction().size(); i++) {
8181      composeContractActionComponent(t, "TermComponent", "action", element.getAction().get(i), i);
8182    }
8183    for (int i = 0; i < element.getGroup().size(); i++) {
8184      composeContractTermComponent(t, "TermComponent", "group", element.getGroup().get(i), i);
8185    }
8186  }
8187
8188  protected void composeContractSecurityLabelComponent(Complex parent, String parentType, String name, Contract.SecurityLabelComponent element, int index) {
8189    if (element == null) 
8190      return;
8191    Complex t;
8192    if (Utilities.noString(parentType))
8193      t = parent;
8194    else {
8195      t = parent.predicate("fhir:"+parentType+'.'+name);
8196    }
8197    composeBackboneElement(t, "securityLabel", name, element, index);
8198    for (int i = 0; i < element.getNumber().size(); i++) {
8199      composeUnsignedInt(t, "SecurityLabelComponent", "number", element.getNumber().get(i), i);
8200    }
8201    if (element.hasClassification()) {
8202      composeCoding(t, "SecurityLabelComponent", "classification", element.getClassification(), -1);
8203    }
8204    for (int i = 0; i < element.getCategory().size(); i++) {
8205      composeCoding(t, "SecurityLabelComponent", "category", element.getCategory().get(i), i);
8206    }
8207    for (int i = 0; i < element.getControl().size(); i++) {
8208      composeCoding(t, "SecurityLabelComponent", "control", element.getControl().get(i), i);
8209    }
8210  }
8211
8212  protected void composeContractOfferComponent(Complex parent, String parentType, String name, Contract.ContractOfferComponent element, int index) {
8213    if (element == null) 
8214      return;
8215    Complex t;
8216    if (Utilities.noString(parentType))
8217      t = parent;
8218    else {
8219      t = parent.predicate("fhir:"+parentType+'.'+name);
8220    }
8221    composeBackboneElement(t, "offer", name, element, index);
8222    for (int i = 0; i < element.getIdentifier().size(); i++) {
8223      composeIdentifier(t, "ContractOfferComponent", "identifier", element.getIdentifier().get(i), i);
8224    }
8225    for (int i = 0; i < element.getParty().size(); i++) {
8226      composeContractPartyComponent(t, "ContractOfferComponent", "party", element.getParty().get(i), i);
8227    }
8228    if (element.hasTopic()) {
8229      composeReference(t, "ContractOfferComponent", "topic", element.getTopic(), -1);
8230    }
8231    if (element.hasType()) {
8232      composeCodeableConcept(t, "ContractOfferComponent", "type", element.getType(), -1);
8233    }
8234    if (element.hasDecision()) {
8235      composeCodeableConcept(t, "ContractOfferComponent", "decision", element.getDecision(), -1);
8236    }
8237    for (int i = 0; i < element.getDecisionMode().size(); i++) {
8238      composeCodeableConcept(t, "ContractOfferComponent", "decisionMode", element.getDecisionMode().get(i), i);
8239    }
8240    for (int i = 0; i < element.getAnswer().size(); i++) {
8241      composeContractAnswerComponent(t, "ContractOfferComponent", "answer", element.getAnswer().get(i), i);
8242    }
8243    if (element.hasTextElement()) {
8244      composeString(t, "ContractOfferComponent", "text", element.getTextElement(), -1);
8245    }
8246    for (int i = 0; i < element.getLinkId().size(); i++) {
8247      composeString(t, "ContractOfferComponent", "linkId", element.getLinkId().get(i), i);
8248    }
8249    for (int i = 0; i < element.getSecurityLabelNumber().size(); i++) {
8250      composeUnsignedInt(t, "ContractOfferComponent", "securityLabelNumber", element.getSecurityLabelNumber().get(i), i);
8251    }
8252  }
8253
8254  protected void composeContractPartyComponent(Complex parent, String parentType, String name, Contract.ContractPartyComponent element, int index) {
8255    if (element == null) 
8256      return;
8257    Complex t;
8258    if (Utilities.noString(parentType))
8259      t = parent;
8260    else {
8261      t = parent.predicate("fhir:"+parentType+'.'+name);
8262    }
8263    composeBackboneElement(t, "party", name, element, index);
8264    for (int i = 0; i < element.getReference().size(); i++) {
8265      composeReference(t, "ContractPartyComponent", "reference", element.getReference().get(i), i);
8266    }
8267    if (element.hasRole()) {
8268      composeCodeableConcept(t, "ContractPartyComponent", "role", element.getRole(), -1);
8269    }
8270  }
8271
8272  protected void composeContractAnswerComponent(Complex parent, String parentType, String name, Contract.AnswerComponent element, int index) {
8273    if (element == null) 
8274      return;
8275    Complex t;
8276    if (Utilities.noString(parentType))
8277      t = parent;
8278    else {
8279      t = parent.predicate("fhir:"+parentType+'.'+name);
8280    }
8281    composeBackboneElement(t, "answer", name, element, index);
8282    if (element.hasValue()) {
8283      composeType(t, "AnswerComponent", "value", element.getValue(), -1);
8284    }
8285  }
8286
8287  protected void composeContractAssetComponent(Complex parent, String parentType, String name, Contract.ContractAssetComponent element, int index) {
8288    if (element == null) 
8289      return;
8290    Complex t;
8291    if (Utilities.noString(parentType))
8292      t = parent;
8293    else {
8294      t = parent.predicate("fhir:"+parentType+'.'+name);
8295    }
8296    composeBackboneElement(t, "asset", name, element, index);
8297    if (element.hasScope()) {
8298      composeCodeableConcept(t, "ContractAssetComponent", "scope", element.getScope(), -1);
8299    }
8300    for (int i = 0; i < element.getType().size(); i++) {
8301      composeCodeableConcept(t, "ContractAssetComponent", "type", element.getType().get(i), i);
8302    }
8303    for (int i = 0; i < element.getTypeReference().size(); i++) {
8304      composeReference(t, "ContractAssetComponent", "typeReference", element.getTypeReference().get(i), i);
8305    }
8306    for (int i = 0; i < element.getSubtype().size(); i++) {
8307      composeCodeableConcept(t, "ContractAssetComponent", "subtype", element.getSubtype().get(i), i);
8308    }
8309    if (element.hasRelationship()) {
8310      composeCoding(t, "ContractAssetComponent", "relationship", element.getRelationship(), -1);
8311    }
8312    for (int i = 0; i < element.getContext().size(); i++) {
8313      composeContractAssetContextComponent(t, "ContractAssetComponent", "context", element.getContext().get(i), i);
8314    }
8315    if (element.hasConditionElement()) {
8316      composeString(t, "ContractAssetComponent", "condition", element.getConditionElement(), -1);
8317    }
8318    for (int i = 0; i < element.getPeriodType().size(); i++) {
8319      composeCodeableConcept(t, "ContractAssetComponent", "periodType", element.getPeriodType().get(i), i);
8320    }
8321    for (int i = 0; i < element.getPeriod().size(); i++) {
8322      composePeriod(t, "ContractAssetComponent", "period", element.getPeriod().get(i), i);
8323    }
8324    for (int i = 0; i < element.getUsePeriod().size(); i++) {
8325      composePeriod(t, "ContractAssetComponent", "usePeriod", element.getUsePeriod().get(i), i);
8326    }
8327    if (element.hasTextElement()) {
8328      composeString(t, "ContractAssetComponent", "text", element.getTextElement(), -1);
8329    }
8330    for (int i = 0; i < element.getLinkId().size(); i++) {
8331      composeString(t, "ContractAssetComponent", "linkId", element.getLinkId().get(i), i);
8332    }
8333    for (int i = 0; i < element.getAnswer().size(); i++) {
8334      composeContractAnswerComponent(t, "ContractAssetComponent", "answer", element.getAnswer().get(i), i);
8335    }
8336    for (int i = 0; i < element.getSecurityLabelNumber().size(); i++) {
8337      composeUnsignedInt(t, "ContractAssetComponent", "securityLabelNumber", element.getSecurityLabelNumber().get(i), i);
8338    }
8339    for (int i = 0; i < element.getValuedItem().size(); i++) {
8340      composeContractValuedItemComponent(t, "ContractAssetComponent", "valuedItem", element.getValuedItem().get(i), i);
8341    }
8342  }
8343
8344  protected void composeContractAssetContextComponent(Complex parent, String parentType, String name, Contract.AssetContextComponent element, int index) {
8345    if (element == null) 
8346      return;
8347    Complex t;
8348    if (Utilities.noString(parentType))
8349      t = parent;
8350    else {
8351      t = parent.predicate("fhir:"+parentType+'.'+name);
8352    }
8353    composeBackboneElement(t, "context", name, element, index);
8354    if (element.hasReference()) {
8355      composeReference(t, "AssetContextComponent", "reference", element.getReference(), -1);
8356    }
8357    for (int i = 0; i < element.getCode().size(); i++) {
8358      composeCodeableConcept(t, "AssetContextComponent", "code", element.getCode().get(i), i);
8359    }
8360    if (element.hasTextElement()) {
8361      composeString(t, "AssetContextComponent", "text", element.getTextElement(), -1);
8362    }
8363  }
8364
8365  protected void composeContractValuedItemComponent(Complex parent, String parentType, String name, Contract.ValuedItemComponent element, int index) {
8366    if (element == null) 
8367      return;
8368    Complex t;
8369    if (Utilities.noString(parentType))
8370      t = parent;
8371    else {
8372      t = parent.predicate("fhir:"+parentType+'.'+name);
8373    }
8374    composeBackboneElement(t, "valuedItem", name, element, index);
8375    if (element.hasEntity()) {
8376      composeType(t, "ValuedItemComponent", "entity", element.getEntity(), -1);
8377    }
8378    if (element.hasIdentifier()) {
8379      composeIdentifier(t, "ValuedItemComponent", "identifier", element.getIdentifier(), -1);
8380    }
8381    if (element.hasEffectiveTimeElement()) {
8382      composeDateTime(t, "ValuedItemComponent", "effectiveTime", element.getEffectiveTimeElement(), -1);
8383    }
8384    if (element.hasQuantity()) {
8385      composeQuantity(t, "ValuedItemComponent", "quantity", element.getQuantity(), -1);
8386    }
8387    if (element.hasUnitPrice()) {
8388      composeMoney(t, "ValuedItemComponent", "unitPrice", element.getUnitPrice(), -1);
8389    }
8390    if (element.hasFactorElement()) {
8391      composeDecimal(t, "ValuedItemComponent", "factor", element.getFactorElement(), -1);
8392    }
8393    if (element.hasPointsElement()) {
8394      composeDecimal(t, "ValuedItemComponent", "points", element.getPointsElement(), -1);
8395    }
8396    if (element.hasNet()) {
8397      composeMoney(t, "ValuedItemComponent", "net", element.getNet(), -1);
8398    }
8399    if (element.hasPaymentElement()) {
8400      composeString(t, "ValuedItemComponent", "payment", element.getPaymentElement(), -1);
8401    }
8402    if (element.hasPaymentDateElement()) {
8403      composeDateTime(t, "ValuedItemComponent", "paymentDate", element.getPaymentDateElement(), -1);
8404    }
8405    if (element.hasResponsible()) {
8406      composeReference(t, "ValuedItemComponent", "responsible", element.getResponsible(), -1);
8407    }
8408    if (element.hasRecipient()) {
8409      composeReference(t, "ValuedItemComponent", "recipient", element.getRecipient(), -1);
8410    }
8411    for (int i = 0; i < element.getLinkId().size(); i++) {
8412      composeString(t, "ValuedItemComponent", "linkId", element.getLinkId().get(i), i);
8413    }
8414    for (int i = 0; i < element.getSecurityLabelNumber().size(); i++) {
8415      composeUnsignedInt(t, "ValuedItemComponent", "securityLabelNumber", element.getSecurityLabelNumber().get(i), i);
8416    }
8417  }
8418
8419  protected void composeContractActionComponent(Complex parent, String parentType, String name, Contract.ActionComponent element, int index) {
8420    if (element == null) 
8421      return;
8422    Complex t;
8423    if (Utilities.noString(parentType))
8424      t = parent;
8425    else {
8426      t = parent.predicate("fhir:"+parentType+'.'+name);
8427    }
8428    composeBackboneElement(t, "action", name, element, index);
8429    if (element.hasDoNotPerformElement()) {
8430      composeBoolean(t, "ActionComponent", "doNotPerform", element.getDoNotPerformElement(), -1);
8431    }
8432    if (element.hasType()) {
8433      composeCodeableConcept(t, "ActionComponent", "type", element.getType(), -1);
8434    }
8435    for (int i = 0; i < element.getSubject().size(); i++) {
8436      composeContractActionSubjectComponent(t, "ActionComponent", "subject", element.getSubject().get(i), i);
8437    }
8438    if (element.hasIntent()) {
8439      composeCodeableConcept(t, "ActionComponent", "intent", element.getIntent(), -1);
8440    }
8441    for (int i = 0; i < element.getLinkId().size(); i++) {
8442      composeString(t, "ActionComponent", "linkId", element.getLinkId().get(i), i);
8443    }
8444    if (element.hasStatus()) {
8445      composeCodeableConcept(t, "ActionComponent", "status", element.getStatus(), -1);
8446    }
8447    if (element.hasContext()) {
8448      composeReference(t, "ActionComponent", "context", element.getContext(), -1);
8449    }
8450    for (int i = 0; i < element.getContextLinkId().size(); i++) {
8451      composeString(t, "ActionComponent", "contextLinkId", element.getContextLinkId().get(i), i);
8452    }
8453    if (element.hasOccurrence()) {
8454      composeType(t, "ActionComponent", "occurrence", element.getOccurrence(), -1);
8455    }
8456    for (int i = 0; i < element.getRequester().size(); i++) {
8457      composeReference(t, "ActionComponent", "requester", element.getRequester().get(i), i);
8458    }
8459    for (int i = 0; i < element.getRequesterLinkId().size(); i++) {
8460      composeString(t, "ActionComponent", "requesterLinkId", element.getRequesterLinkId().get(i), i);
8461    }
8462    for (int i = 0; i < element.getPerformerType().size(); i++) {
8463      composeCodeableConcept(t, "ActionComponent", "performerType", element.getPerformerType().get(i), i);
8464    }
8465    if (element.hasPerformerRole()) {
8466      composeCodeableConcept(t, "ActionComponent", "performerRole", element.getPerformerRole(), -1);
8467    }
8468    if (element.hasPerformer()) {
8469      composeReference(t, "ActionComponent", "performer", element.getPerformer(), -1);
8470    }
8471    for (int i = 0; i < element.getPerformerLinkId().size(); i++) {
8472      composeString(t, "ActionComponent", "performerLinkId", element.getPerformerLinkId().get(i), i);
8473    }
8474    for (int i = 0; i < element.getReason().size(); i++) {
8475      composeCodeableReference(t, "ActionComponent", "reason", element.getReason().get(i), i);
8476    }
8477    for (int i = 0; i < element.getReasonLinkId().size(); i++) {
8478      composeString(t, "ActionComponent", "reasonLinkId", element.getReasonLinkId().get(i), i);
8479    }
8480    for (int i = 0; i < element.getNote().size(); i++) {
8481      composeAnnotation(t, "ActionComponent", "note", element.getNote().get(i), i);
8482    }
8483    for (int i = 0; i < element.getSecurityLabelNumber().size(); i++) {
8484      composeUnsignedInt(t, "ActionComponent", "securityLabelNumber", element.getSecurityLabelNumber().get(i), i);
8485    }
8486  }
8487
8488  protected void composeContractActionSubjectComponent(Complex parent, String parentType, String name, Contract.ActionSubjectComponent element, int index) {
8489    if (element == null) 
8490      return;
8491    Complex t;
8492    if (Utilities.noString(parentType))
8493      t = parent;
8494    else {
8495      t = parent.predicate("fhir:"+parentType+'.'+name);
8496    }
8497    composeBackboneElement(t, "subject", name, element, index);
8498    for (int i = 0; i < element.getReference().size(); i++) {
8499      composeReference(t, "ActionSubjectComponent", "reference", element.getReference().get(i), i);
8500    }
8501    if (element.hasRole()) {
8502      composeCodeableConcept(t, "ActionSubjectComponent", "role", element.getRole(), -1);
8503    }
8504  }
8505
8506  protected void composeContractSignatoryComponent(Complex parent, String parentType, String name, Contract.SignatoryComponent element, int index) {
8507    if (element == null) 
8508      return;
8509    Complex t;
8510    if (Utilities.noString(parentType))
8511      t = parent;
8512    else {
8513      t = parent.predicate("fhir:"+parentType+'.'+name);
8514    }
8515    composeBackboneElement(t, "signer", name, element, index);
8516    if (element.hasType()) {
8517      composeCoding(t, "SignatoryComponent", "type", element.getType(), -1);
8518    }
8519    if (element.hasParty()) {
8520      composeReference(t, "SignatoryComponent", "party", element.getParty(), -1);
8521    }
8522    for (int i = 0; i < element.getSignature().size(); i++) {
8523      composeSignature(t, "SignatoryComponent", "signature", element.getSignature().get(i), i);
8524    }
8525  }
8526
8527  protected void composeContractFriendlyLanguageComponent(Complex parent, String parentType, String name, Contract.FriendlyLanguageComponent element, int index) {
8528    if (element == null) 
8529      return;
8530    Complex t;
8531    if (Utilities.noString(parentType))
8532      t = parent;
8533    else {
8534      t = parent.predicate("fhir:"+parentType+'.'+name);
8535    }
8536    composeBackboneElement(t, "friendly", name, element, index);
8537    if (element.hasContent()) {
8538      composeType(t, "FriendlyLanguageComponent", "content", element.getContent(), -1);
8539    }
8540  }
8541
8542  protected void composeContractLegalLanguageComponent(Complex parent, String parentType, String name, Contract.LegalLanguageComponent element, int index) {
8543    if (element == null) 
8544      return;
8545    Complex t;
8546    if (Utilities.noString(parentType))
8547      t = parent;
8548    else {
8549      t = parent.predicate("fhir:"+parentType+'.'+name);
8550    }
8551    composeBackboneElement(t, "legal", name, element, index);
8552    if (element.hasContent()) {
8553      composeType(t, "LegalLanguageComponent", "content", element.getContent(), -1);
8554    }
8555  }
8556
8557  protected void composeContractComputableLanguageComponent(Complex parent, String parentType, String name, Contract.ComputableLanguageComponent element, int index) {
8558    if (element == null) 
8559      return;
8560    Complex t;
8561    if (Utilities.noString(parentType))
8562      t = parent;
8563    else {
8564      t = parent.predicate("fhir:"+parentType+'.'+name);
8565    }
8566    composeBackboneElement(t, "rule", name, element, index);
8567    if (element.hasContent()) {
8568      composeType(t, "ComputableLanguageComponent", "content", element.getContent(), -1);
8569    }
8570  }
8571
8572  protected void composeCoverage(Complex parent, String parentType, String name, Coverage element, int index) {
8573    if (element == null) 
8574      return;
8575    Complex t;
8576    if (Utilities.noString(parentType))
8577      t = parent;
8578    else {
8579      t = parent.predicate("fhir:"+parentType+'.'+name);
8580    }
8581    composeDomainResource(t, "Coverage", name, element, index);
8582    for (int i = 0; i < element.getIdentifier().size(); i++) {
8583      composeIdentifier(t, "Coverage", "identifier", element.getIdentifier().get(i), i);
8584    }
8585    if (element.hasStatusElement()) {
8586      composeEnum(t, "Coverage", "status", element.getStatusElement(), -1);
8587    }
8588    if (element.hasKindElement()) {
8589      composeEnum(t, "Coverage", "kind", element.getKindElement(), -1);
8590    }
8591    for (int i = 0; i < element.getPaymentBy().size(); i++) {
8592      composeCoveragePaymentByComponent(t, "Coverage", "paymentBy", element.getPaymentBy().get(i), i);
8593    }
8594    if (element.hasType()) {
8595      composeCodeableConcept(t, "Coverage", "type", element.getType(), -1);
8596    }
8597    if (element.hasPolicyHolder()) {
8598      composeReference(t, "Coverage", "policyHolder", element.getPolicyHolder(), -1);
8599    }
8600    if (element.hasSubscriber()) {
8601      composeReference(t, "Coverage", "subscriber", element.getSubscriber(), -1);
8602    }
8603    for (int i = 0; i < element.getSubscriberId().size(); i++) {
8604      composeIdentifier(t, "Coverage", "subscriberId", element.getSubscriberId().get(i), i);
8605    }
8606    if (element.hasBeneficiary()) {
8607      composeReference(t, "Coverage", "beneficiary", element.getBeneficiary(), -1);
8608    }
8609    if (element.hasDependentElement()) {
8610      composeString(t, "Coverage", "dependent", element.getDependentElement(), -1);
8611    }
8612    if (element.hasRelationship()) {
8613      composeCodeableConcept(t, "Coverage", "relationship", element.getRelationship(), -1);
8614    }
8615    if (element.hasPeriod()) {
8616      composePeriod(t, "Coverage", "period", element.getPeriod(), -1);
8617    }
8618    if (element.hasInsurer()) {
8619      composeReference(t, "Coverage", "insurer", element.getInsurer(), -1);
8620    }
8621    for (int i = 0; i < element.getClass_().size(); i++) {
8622      composeCoverageClassComponent(t, "Coverage", "class", element.getClass_().get(i), i);
8623    }
8624    if (element.hasOrderElement()) {
8625      composePositiveInt(t, "Coverage", "order", element.getOrderElement(), -1);
8626    }
8627    if (element.hasNetworkElement()) {
8628      composeString(t, "Coverage", "network", element.getNetworkElement(), -1);
8629    }
8630    for (int i = 0; i < element.getCostToBeneficiary().size(); i++) {
8631      composeCoverageCostToBeneficiaryComponent(t, "Coverage", "costToBeneficiary", element.getCostToBeneficiary().get(i), i);
8632    }
8633    if (element.hasSubrogationElement()) {
8634      composeBoolean(t, "Coverage", "subrogation", element.getSubrogationElement(), -1);
8635    }
8636    for (int i = 0; i < element.getContract().size(); i++) {
8637      composeReference(t, "Coverage", "contract", element.getContract().get(i), i);
8638    }
8639    if (element.hasInsurancePlan()) {
8640      composeReference(t, "Coverage", "insurancePlan", element.getInsurancePlan(), -1);
8641    }
8642  }
8643
8644  protected void composeCoveragePaymentByComponent(Complex parent, String parentType, String name, Coverage.CoveragePaymentByComponent element, int index) {
8645    if (element == null) 
8646      return;
8647    Complex t;
8648    if (Utilities.noString(parentType))
8649      t = parent;
8650    else {
8651      t = parent.predicate("fhir:"+parentType+'.'+name);
8652    }
8653    composeBackboneElement(t, "paymentBy", name, element, index);
8654    if (element.hasParty()) {
8655      composeReference(t, "CoveragePaymentByComponent", "party", element.getParty(), -1);
8656    }
8657    if (element.hasResponsibilityElement()) {
8658      composeString(t, "CoveragePaymentByComponent", "responsibility", element.getResponsibilityElement(), -1);
8659    }
8660  }
8661
8662  protected void composeCoverageClassComponent(Complex parent, String parentType, String name, Coverage.ClassComponent element, int index) {
8663    if (element == null) 
8664      return;
8665    Complex t;
8666    if (Utilities.noString(parentType))
8667      t = parent;
8668    else {
8669      t = parent.predicate("fhir:"+parentType+'.'+name);
8670    }
8671    composeBackboneElement(t, "class", name, element, index);
8672    if (element.hasType()) {
8673      composeCodeableConcept(t, "ClassComponent", "type", element.getType(), -1);
8674    }
8675    if (element.hasValue()) {
8676      composeIdentifier(t, "ClassComponent", "value", element.getValue(), -1);
8677    }
8678    if (element.hasNameElement()) {
8679      composeString(t, "ClassComponent", "name", element.getNameElement(), -1);
8680    }
8681  }
8682
8683  protected void composeCoverageCostToBeneficiaryComponent(Complex parent, String parentType, String name, Coverage.CostToBeneficiaryComponent element, int index) {
8684    if (element == null) 
8685      return;
8686    Complex t;
8687    if (Utilities.noString(parentType))
8688      t = parent;
8689    else {
8690      t = parent.predicate("fhir:"+parentType+'.'+name);
8691    }
8692    composeBackboneElement(t, "costToBeneficiary", name, element, index);
8693    if (element.hasType()) {
8694      composeCodeableConcept(t, "CostToBeneficiaryComponent", "type", element.getType(), -1);
8695    }
8696    if (element.hasCategory()) {
8697      composeCodeableConcept(t, "CostToBeneficiaryComponent", "category", element.getCategory(), -1);
8698    }
8699    if (element.hasNetwork()) {
8700      composeCodeableConcept(t, "CostToBeneficiaryComponent", "network", element.getNetwork(), -1);
8701    }
8702    if (element.hasUnit()) {
8703      composeCodeableConcept(t, "CostToBeneficiaryComponent", "unit", element.getUnit(), -1);
8704    }
8705    if (element.hasTerm()) {
8706      composeCodeableConcept(t, "CostToBeneficiaryComponent", "term", element.getTerm(), -1);
8707    }
8708    if (element.hasValue()) {
8709      composeType(t, "CostToBeneficiaryComponent", "value", element.getValue(), -1);
8710    }
8711    for (int i = 0; i < element.getException().size(); i++) {
8712      composeCoverageExemptionComponent(t, "CostToBeneficiaryComponent", "exception", element.getException().get(i), i);
8713    }
8714  }
8715
8716  protected void composeCoverageExemptionComponent(Complex parent, String parentType, String name, Coverage.ExemptionComponent element, int index) {
8717    if (element == null) 
8718      return;
8719    Complex t;
8720    if (Utilities.noString(parentType))
8721      t = parent;
8722    else {
8723      t = parent.predicate("fhir:"+parentType+'.'+name);
8724    }
8725    composeBackboneElement(t, "exception", name, element, index);
8726    if (element.hasType()) {
8727      composeCodeableConcept(t, "ExemptionComponent", "type", element.getType(), -1);
8728    }
8729    if (element.hasPeriod()) {
8730      composePeriod(t, "ExemptionComponent", "period", element.getPeriod(), -1);
8731    }
8732  }
8733
8734  protected void composeCoverageEligibilityRequest(Complex parent, String parentType, String name, CoverageEligibilityRequest element, int index) {
8735    if (element == null) 
8736      return;
8737    Complex t;
8738    if (Utilities.noString(parentType))
8739      t = parent;
8740    else {
8741      t = parent.predicate("fhir:"+parentType+'.'+name);
8742    }
8743    composeDomainResource(t, "CoverageEligibilityRequest", name, element, index);
8744    for (int i = 0; i < element.getIdentifier().size(); i++) {
8745      composeIdentifier(t, "CoverageEligibilityRequest", "identifier", element.getIdentifier().get(i), i);
8746    }
8747    if (element.hasStatusElement()) {
8748      composeEnum(t, "CoverageEligibilityRequest", "status", element.getStatusElement(), -1);
8749    }
8750    if (element.hasPriority()) {
8751      composeCodeableConcept(t, "CoverageEligibilityRequest", "priority", element.getPriority(), -1);
8752    }
8753    for (int i = 0; i < element.getPurpose().size(); i++) {
8754      composeEnum(t, "CoverageEligibilityRequest", "purpose", element.getPurpose().get(i), i);
8755    }
8756    if (element.hasPatient()) {
8757      composeReference(t, "CoverageEligibilityRequest", "patient", element.getPatient(), -1);
8758    }
8759    if (element.hasServiced()) {
8760      composeType(t, "CoverageEligibilityRequest", "serviced", element.getServiced(), -1);
8761    }
8762    if (element.hasCreatedElement()) {
8763      composeDateTime(t, "CoverageEligibilityRequest", "created", element.getCreatedElement(), -1);
8764    }
8765    if (element.hasEnterer()) {
8766      composeReference(t, "CoverageEligibilityRequest", "enterer", element.getEnterer(), -1);
8767    }
8768    if (element.hasProvider()) {
8769      composeReference(t, "CoverageEligibilityRequest", "provider", element.getProvider(), -1);
8770    }
8771    if (element.hasInsurer()) {
8772      composeReference(t, "CoverageEligibilityRequest", "insurer", element.getInsurer(), -1);
8773    }
8774    if (element.hasFacility()) {
8775      composeReference(t, "CoverageEligibilityRequest", "facility", element.getFacility(), -1);
8776    }
8777    for (int i = 0; i < element.getSupportingInfo().size(); i++) {
8778      composeCoverageEligibilityRequestSupportingInformationComponent(t, "CoverageEligibilityRequest", "supportingInfo", element.getSupportingInfo().get(i), i);
8779    }
8780    for (int i = 0; i < element.getInsurance().size(); i++) {
8781      composeCoverageEligibilityRequestInsuranceComponent(t, "CoverageEligibilityRequest", "insurance", element.getInsurance().get(i), i);
8782    }
8783    for (int i = 0; i < element.getItem().size(); i++) {
8784      composeCoverageEligibilityRequestDetailsComponent(t, "CoverageEligibilityRequest", "item", element.getItem().get(i), i);
8785    }
8786  }
8787
8788  protected void composeCoverageEligibilityRequestSupportingInformationComponent(Complex parent, String parentType, String name, CoverageEligibilityRequest.SupportingInformationComponent element, int index) {
8789    if (element == null) 
8790      return;
8791    Complex t;
8792    if (Utilities.noString(parentType))
8793      t = parent;
8794    else {
8795      t = parent.predicate("fhir:"+parentType+'.'+name);
8796    }
8797    composeBackboneElement(t, "supportingInfo", name, element, index);
8798    if (element.hasSequenceElement()) {
8799      composePositiveInt(t, "SupportingInformationComponent", "sequence", element.getSequenceElement(), -1);
8800    }
8801    if (element.hasInformation()) {
8802      composeReference(t, "SupportingInformationComponent", "information", element.getInformation(), -1);
8803    }
8804    if (element.hasAppliesToAllElement()) {
8805      composeBoolean(t, "SupportingInformationComponent", "appliesToAll", element.getAppliesToAllElement(), -1);
8806    }
8807  }
8808
8809  protected void composeCoverageEligibilityRequestInsuranceComponent(Complex parent, String parentType, String name, CoverageEligibilityRequest.InsuranceComponent element, int index) {
8810    if (element == null) 
8811      return;
8812    Complex t;
8813    if (Utilities.noString(parentType))
8814      t = parent;
8815    else {
8816      t = parent.predicate("fhir:"+parentType+'.'+name);
8817    }
8818    composeBackboneElement(t, "insurance", name, element, index);
8819    if (element.hasFocalElement()) {
8820      composeBoolean(t, "InsuranceComponent", "focal", element.getFocalElement(), -1);
8821    }
8822    if (element.hasCoverage()) {
8823      composeReference(t, "InsuranceComponent", "coverage", element.getCoverage(), -1);
8824    }
8825    if (element.hasBusinessArrangementElement()) {
8826      composeString(t, "InsuranceComponent", "businessArrangement", element.getBusinessArrangementElement(), -1);
8827    }
8828  }
8829
8830  protected void composeCoverageEligibilityRequestDetailsComponent(Complex parent, String parentType, String name, CoverageEligibilityRequest.DetailsComponent element, int index) {
8831    if (element == null) 
8832      return;
8833    Complex t;
8834    if (Utilities.noString(parentType))
8835      t = parent;
8836    else {
8837      t = parent.predicate("fhir:"+parentType+'.'+name);
8838    }
8839    composeBackboneElement(t, "item", name, element, index);
8840    for (int i = 0; i < element.getSupportingInfoSequence().size(); i++) {
8841      composePositiveInt(t, "DetailsComponent", "supportingInfoSequence", element.getSupportingInfoSequence().get(i), i);
8842    }
8843    if (element.hasCategory()) {
8844      composeCodeableConcept(t, "DetailsComponent", "category", element.getCategory(), -1);
8845    }
8846    if (element.hasProductOrService()) {
8847      composeCodeableConcept(t, "DetailsComponent", "productOrService", element.getProductOrService(), -1);
8848    }
8849    for (int i = 0; i < element.getModifier().size(); i++) {
8850      composeCodeableConcept(t, "DetailsComponent", "modifier", element.getModifier().get(i), i);
8851    }
8852    if (element.hasProvider()) {
8853      composeReference(t, "DetailsComponent", "provider", element.getProvider(), -1);
8854    }
8855    if (element.hasQuantity()) {
8856      composeQuantity(t, "DetailsComponent", "quantity", element.getQuantity(), -1);
8857    }
8858    if (element.hasUnitPrice()) {
8859      composeMoney(t, "DetailsComponent", "unitPrice", element.getUnitPrice(), -1);
8860    }
8861    if (element.hasFacility()) {
8862      composeReference(t, "DetailsComponent", "facility", element.getFacility(), -1);
8863    }
8864    for (int i = 0; i < element.getDiagnosis().size(); i++) {
8865      composeCoverageEligibilityRequestDiagnosisComponent(t, "DetailsComponent", "diagnosis", element.getDiagnosis().get(i), i);
8866    }
8867    for (int i = 0; i < element.getDetail().size(); i++) {
8868      composeReference(t, "DetailsComponent", "detail", element.getDetail().get(i), i);
8869    }
8870  }
8871
8872  protected void composeCoverageEligibilityRequestDiagnosisComponent(Complex parent, String parentType, String name, CoverageEligibilityRequest.DiagnosisComponent element, int index) {
8873    if (element == null) 
8874      return;
8875    Complex t;
8876    if (Utilities.noString(parentType))
8877      t = parent;
8878    else {
8879      t = parent.predicate("fhir:"+parentType+'.'+name);
8880    }
8881    composeBackboneElement(t, "diagnosis", name, element, index);
8882    if (element.hasDiagnosis()) {
8883      composeType(t, "DiagnosisComponent", "diagnosis", element.getDiagnosis(), -1);
8884    }
8885  }
8886
8887  protected void composeCoverageEligibilityResponse(Complex parent, String parentType, String name, CoverageEligibilityResponse element, int index) {
8888    if (element == null) 
8889      return;
8890    Complex t;
8891    if (Utilities.noString(parentType))
8892      t = parent;
8893    else {
8894      t = parent.predicate("fhir:"+parentType+'.'+name);
8895    }
8896    composeDomainResource(t, "CoverageEligibilityResponse", name, element, index);
8897    for (int i = 0; i < element.getIdentifier().size(); i++) {
8898      composeIdentifier(t, "CoverageEligibilityResponse", "identifier", element.getIdentifier().get(i), i);
8899    }
8900    if (element.hasStatusElement()) {
8901      composeEnum(t, "CoverageEligibilityResponse", "status", element.getStatusElement(), -1);
8902    }
8903    for (int i = 0; i < element.getPurpose().size(); i++) {
8904      composeEnum(t, "CoverageEligibilityResponse", "purpose", element.getPurpose().get(i), i);
8905    }
8906    if (element.hasPatient()) {
8907      composeReference(t, "CoverageEligibilityResponse", "patient", element.getPatient(), -1);
8908    }
8909    if (element.hasServiced()) {
8910      composeType(t, "CoverageEligibilityResponse", "serviced", element.getServiced(), -1);
8911    }
8912    if (element.hasCreatedElement()) {
8913      composeDateTime(t, "CoverageEligibilityResponse", "created", element.getCreatedElement(), -1);
8914    }
8915    if (element.hasRequestor()) {
8916      composeReference(t, "CoverageEligibilityResponse", "requestor", element.getRequestor(), -1);
8917    }
8918    if (element.hasRequest()) {
8919      composeReference(t, "CoverageEligibilityResponse", "request", element.getRequest(), -1);
8920    }
8921    if (element.hasOutcomeElement()) {
8922      composeEnum(t, "CoverageEligibilityResponse", "outcome", element.getOutcomeElement(), -1);
8923    }
8924    if (element.hasDispositionElement()) {
8925      composeString(t, "CoverageEligibilityResponse", "disposition", element.getDispositionElement(), -1);
8926    }
8927    if (element.hasInsurer()) {
8928      composeReference(t, "CoverageEligibilityResponse", "insurer", element.getInsurer(), -1);
8929    }
8930    for (int i = 0; i < element.getInsurance().size(); i++) {
8931      composeCoverageEligibilityResponseInsuranceComponent(t, "CoverageEligibilityResponse", "insurance", element.getInsurance().get(i), i);
8932    }
8933    if (element.hasPreAuthRefElement()) {
8934      composeString(t, "CoverageEligibilityResponse", "preAuthRef", element.getPreAuthRefElement(), -1);
8935    }
8936    if (element.hasForm()) {
8937      composeCodeableConcept(t, "CoverageEligibilityResponse", "form", element.getForm(), -1);
8938    }
8939    for (int i = 0; i < element.getError().size(); i++) {
8940      composeCoverageEligibilityResponseErrorsComponent(t, "CoverageEligibilityResponse", "error", element.getError().get(i), i);
8941    }
8942  }
8943
8944  protected void composeCoverageEligibilityResponseInsuranceComponent(Complex parent, String parentType, String name, CoverageEligibilityResponse.InsuranceComponent element, int index) {
8945    if (element == null) 
8946      return;
8947    Complex t;
8948    if (Utilities.noString(parentType))
8949      t = parent;
8950    else {
8951      t = parent.predicate("fhir:"+parentType+'.'+name);
8952    }
8953    composeBackboneElement(t, "insurance", name, element, index);
8954    if (element.hasCoverage()) {
8955      composeReference(t, "InsuranceComponent", "coverage", element.getCoverage(), -1);
8956    }
8957    if (element.hasInforceElement()) {
8958      composeBoolean(t, "InsuranceComponent", "inforce", element.getInforceElement(), -1);
8959    }
8960    if (element.hasBenefitPeriod()) {
8961      composePeriod(t, "InsuranceComponent", "benefitPeriod", element.getBenefitPeriod(), -1);
8962    }
8963    for (int i = 0; i < element.getItem().size(); i++) {
8964      composeCoverageEligibilityResponseItemsComponent(t, "InsuranceComponent", "item", element.getItem().get(i), i);
8965    }
8966  }
8967
8968  protected void composeCoverageEligibilityResponseItemsComponent(Complex parent, String parentType, String name, CoverageEligibilityResponse.ItemsComponent element, int index) {
8969    if (element == null) 
8970      return;
8971    Complex t;
8972    if (Utilities.noString(parentType))
8973      t = parent;
8974    else {
8975      t = parent.predicate("fhir:"+parentType+'.'+name);
8976    }
8977    composeBackboneElement(t, "item", name, element, index);
8978    if (element.hasCategory()) {
8979      composeCodeableConcept(t, "ItemsComponent", "category", element.getCategory(), -1);
8980    }
8981    if (element.hasProductOrService()) {
8982      composeCodeableConcept(t, "ItemsComponent", "productOrService", element.getProductOrService(), -1);
8983    }
8984    for (int i = 0; i < element.getModifier().size(); i++) {
8985      composeCodeableConcept(t, "ItemsComponent", "modifier", element.getModifier().get(i), i);
8986    }
8987    if (element.hasProvider()) {
8988      composeReference(t, "ItemsComponent", "provider", element.getProvider(), -1);
8989    }
8990    if (element.hasExcludedElement()) {
8991      composeBoolean(t, "ItemsComponent", "excluded", element.getExcludedElement(), -1);
8992    }
8993    if (element.hasNameElement()) {
8994      composeString(t, "ItemsComponent", "name", element.getNameElement(), -1);
8995    }
8996    if (element.hasDescriptionElement()) {
8997      composeString(t, "ItemsComponent", "description", element.getDescriptionElement(), -1);
8998    }
8999    if (element.hasNetwork()) {
9000      composeCodeableConcept(t, "ItemsComponent", "network", element.getNetwork(), -1);
9001    }
9002    if (element.hasUnit()) {
9003      composeCodeableConcept(t, "ItemsComponent", "unit", element.getUnit(), -1);
9004    }
9005    if (element.hasTerm()) {
9006      composeCodeableConcept(t, "ItemsComponent", "term", element.getTerm(), -1);
9007    }
9008    for (int i = 0; i < element.getBenefit().size(); i++) {
9009      composeCoverageEligibilityResponseBenefitComponent(t, "ItemsComponent", "benefit", element.getBenefit().get(i), i);
9010    }
9011    if (element.hasAuthorizationRequiredElement()) {
9012      composeBoolean(t, "ItemsComponent", "authorizationRequired", element.getAuthorizationRequiredElement(), -1);
9013    }
9014    for (int i = 0; i < element.getAuthorizationSupporting().size(); i++) {
9015      composeCodeableConcept(t, "ItemsComponent", "authorizationSupporting", element.getAuthorizationSupporting().get(i), i);
9016    }
9017    if (element.hasAuthorizationUrlElement()) {
9018      composeUri(t, "ItemsComponent", "authorizationUrl", element.getAuthorizationUrlElement(), -1);
9019    }
9020  }
9021
9022  protected void composeCoverageEligibilityResponseBenefitComponent(Complex parent, String parentType, String name, CoverageEligibilityResponse.BenefitComponent element, int index) {
9023    if (element == null) 
9024      return;
9025    Complex t;
9026    if (Utilities.noString(parentType))
9027      t = parent;
9028    else {
9029      t = parent.predicate("fhir:"+parentType+'.'+name);
9030    }
9031    composeBackboneElement(t, "benefit", name, element, index);
9032    if (element.hasType()) {
9033      composeCodeableConcept(t, "BenefitComponent", "type", element.getType(), -1);
9034    }
9035    if (element.hasAllowed()) {
9036      composeType(t, "BenefitComponent", "allowed", element.getAllowed(), -1);
9037    }
9038    if (element.hasUsed()) {
9039      composeType(t, "BenefitComponent", "used", element.getUsed(), -1);
9040    }
9041  }
9042
9043  protected void composeCoverageEligibilityResponseErrorsComponent(Complex parent, String parentType, String name, CoverageEligibilityResponse.ErrorsComponent element, int index) {
9044    if (element == null) 
9045      return;
9046    Complex t;
9047    if (Utilities.noString(parentType))
9048      t = parent;
9049    else {
9050      t = parent.predicate("fhir:"+parentType+'.'+name);
9051    }
9052    composeBackboneElement(t, "error", name, element, index);
9053    if (element.hasCode()) {
9054      composeCodeableConcept(t, "ErrorsComponent", "code", element.getCode(), -1);
9055    }
9056  }
9057
9058  protected void composeDetectedIssue(Complex parent, String parentType, String name, DetectedIssue element, int index) {
9059    if (element == null) 
9060      return;
9061    Complex t;
9062    if (Utilities.noString(parentType))
9063      t = parent;
9064    else {
9065      t = parent.predicate("fhir:"+parentType+'.'+name);
9066    }
9067    composeDomainResource(t, "DetectedIssue", name, element, index);
9068    for (int i = 0; i < element.getIdentifier().size(); i++) {
9069      composeIdentifier(t, "DetectedIssue", "identifier", element.getIdentifier().get(i), i);
9070    }
9071    if (element.hasStatusElement()) {
9072      composeEnum(t, "DetectedIssue", "status", element.getStatusElement(), -1);
9073    }
9074    for (int i = 0; i < element.getCategory().size(); i++) {
9075      composeCodeableConcept(t, "DetectedIssue", "category", element.getCategory().get(i), i);
9076    }
9077    if (element.hasCode()) {
9078      composeCodeableConcept(t, "DetectedIssue", "code", element.getCode(), -1);
9079    }
9080    if (element.hasSeverityElement()) {
9081      composeEnum(t, "DetectedIssue", "severity", element.getSeverityElement(), -1);
9082    }
9083    if (element.hasSubject()) {
9084      composeReference(t, "DetectedIssue", "subject", element.getSubject(), -1);
9085    }
9086    if (element.hasIdentified()) {
9087      composeType(t, "DetectedIssue", "identified", element.getIdentified(), -1);
9088    }
9089    if (element.hasAuthor()) {
9090      composeReference(t, "DetectedIssue", "author", element.getAuthor(), -1);
9091    }
9092    for (int i = 0; i < element.getImplicated().size(); i++) {
9093      composeReference(t, "DetectedIssue", "implicated", element.getImplicated().get(i), i);
9094    }
9095    for (int i = 0; i < element.getEvidence().size(); i++) {
9096      composeDetectedIssueEvidenceComponent(t, "DetectedIssue", "evidence", element.getEvidence().get(i), i);
9097    }
9098    if (element.hasDetailElement()) {
9099      composeString(t, "DetectedIssue", "detail", element.getDetailElement(), -1);
9100    }
9101    if (element.hasReferenceElement()) {
9102      composeUri(t, "DetectedIssue", "reference", element.getReferenceElement(), -1);
9103    }
9104    for (int i = 0; i < element.getMitigation().size(); i++) {
9105      composeDetectedIssueMitigationComponent(t, "DetectedIssue", "mitigation", element.getMitigation().get(i), i);
9106    }
9107  }
9108
9109  protected void composeDetectedIssueEvidenceComponent(Complex parent, String parentType, String name, DetectedIssue.DetectedIssueEvidenceComponent element, int index) {
9110    if (element == null) 
9111      return;
9112    Complex t;
9113    if (Utilities.noString(parentType))
9114      t = parent;
9115    else {
9116      t = parent.predicate("fhir:"+parentType+'.'+name);
9117    }
9118    composeBackboneElement(t, "evidence", name, element, index);
9119    for (int i = 0; i < element.getCode().size(); i++) {
9120      composeCodeableConcept(t, "DetectedIssueEvidenceComponent", "code", element.getCode().get(i), i);
9121    }
9122    for (int i = 0; i < element.getDetail().size(); i++) {
9123      composeReference(t, "DetectedIssueEvidenceComponent", "detail", element.getDetail().get(i), i);
9124    }
9125  }
9126
9127  protected void composeDetectedIssueMitigationComponent(Complex parent, String parentType, String name, DetectedIssue.DetectedIssueMitigationComponent element, int index) {
9128    if (element == null) 
9129      return;
9130    Complex t;
9131    if (Utilities.noString(parentType))
9132      t = parent;
9133    else {
9134      t = parent.predicate("fhir:"+parentType+'.'+name);
9135    }
9136    composeBackboneElement(t, "mitigation", name, element, index);
9137    if (element.hasAction()) {
9138      composeCodeableConcept(t, "DetectedIssueMitigationComponent", "action", element.getAction(), -1);
9139    }
9140    if (element.hasDateElement()) {
9141      composeDateTime(t, "DetectedIssueMitigationComponent", "date", element.getDateElement(), -1);
9142    }
9143    if (element.hasAuthor()) {
9144      composeReference(t, "DetectedIssueMitigationComponent", "author", element.getAuthor(), -1);
9145    }
9146  }
9147
9148  protected void composeDevice(Complex parent, String parentType, String name, Device element, int index) {
9149    if (element == null) 
9150      return;
9151    Complex t;
9152    if (Utilities.noString(parentType))
9153      t = parent;
9154    else {
9155      t = parent.predicate("fhir:"+parentType+'.'+name);
9156    }
9157    composeDomainResource(t, "Device", name, element, index);
9158    for (int i = 0; i < element.getIdentifier().size(); i++) {
9159      composeIdentifier(t, "Device", "identifier", element.getIdentifier().get(i), i);
9160    }
9161    if (element.hasDisplayNameElement()) {
9162      composeString(t, "Device", "displayName", element.getDisplayNameElement(), -1);
9163    }
9164    if (element.hasDefinition()) {
9165      composeCodeableReference(t, "Device", "definition", element.getDefinition(), -1);
9166    }
9167    for (int i = 0; i < element.getUdiCarrier().size(); i++) {
9168      composeDeviceUdiCarrierComponent(t, "Device", "udiCarrier", element.getUdiCarrier().get(i), i);
9169    }
9170    if (element.hasStatusElement()) {
9171      composeEnum(t, "Device", "status", element.getStatusElement(), -1);
9172    }
9173    if (element.hasAvailabilityStatus()) {
9174      composeCodeableConcept(t, "Device", "availabilityStatus", element.getAvailabilityStatus(), -1);
9175    }
9176    if (element.hasBiologicalSourceEvent()) {
9177      composeIdentifier(t, "Device", "biologicalSourceEvent", element.getBiologicalSourceEvent(), -1);
9178    }
9179    if (element.hasManufacturerElement()) {
9180      composeString(t, "Device", "manufacturer", element.getManufacturerElement(), -1);
9181    }
9182    if (element.hasManufactureDateElement()) {
9183      composeDateTime(t, "Device", "manufactureDate", element.getManufactureDateElement(), -1);
9184    }
9185    if (element.hasExpirationDateElement()) {
9186      composeDateTime(t, "Device", "expirationDate", element.getExpirationDateElement(), -1);
9187    }
9188    if (element.hasLotNumberElement()) {
9189      composeString(t, "Device", "lotNumber", element.getLotNumberElement(), -1);
9190    }
9191    if (element.hasSerialNumberElement()) {
9192      composeString(t, "Device", "serialNumber", element.getSerialNumberElement(), -1);
9193    }
9194    for (int i = 0; i < element.getDeviceName().size(); i++) {
9195      composeDeviceDeviceNameComponent(t, "Device", "deviceName", element.getDeviceName().get(i), i);
9196    }
9197    if (element.hasModelNumberElement()) {
9198      composeString(t, "Device", "modelNumber", element.getModelNumberElement(), -1);
9199    }
9200    if (element.hasPartNumberElement()) {
9201      composeString(t, "Device", "partNumber", element.getPartNumberElement(), -1);
9202    }
9203    for (int i = 0; i < element.getCategory().size(); i++) {
9204      composeCodeableConcept(t, "Device", "category", element.getCategory().get(i), i);
9205    }
9206    for (int i = 0; i < element.getType().size(); i++) {
9207      composeCodeableConcept(t, "Device", "type", element.getType().get(i), i);
9208    }
9209    for (int i = 0; i < element.getVersion().size(); i++) {
9210      composeDeviceVersionComponent(t, "Device", "version", element.getVersion().get(i), i);
9211    }
9212    for (int i = 0; i < element.getSpecialization().size(); i++) {
9213      composeDeviceSpecializationComponent(t, "Device", "specialization", element.getSpecialization().get(i), i);
9214    }
9215    for (int i = 0; i < element.getProperty().size(); i++) {
9216      composeDevicePropertyComponent(t, "Device", "property", element.getProperty().get(i), i);
9217    }
9218    for (int i = 0; i < element.getOperation().size(); i++) {
9219      composeDeviceOperationComponent(t, "Device", "operation", element.getOperation().get(i), i);
9220    }
9221    for (int i = 0; i < element.getAssociation().size(); i++) {
9222      composeDeviceAssociationComponent(t, "Device", "association", element.getAssociation().get(i), i);
9223    }
9224    if (element.hasOwner()) {
9225      composeReference(t, "Device", "owner", element.getOwner(), -1);
9226    }
9227    for (int i = 0; i < element.getContact().size(); i++) {
9228      composeContactPoint(t, "Device", "contact", element.getContact().get(i), i);
9229    }
9230    if (element.hasLocation()) {
9231      composeReference(t, "Device", "location", element.getLocation(), -1);
9232    }
9233    if (element.hasUrlElement()) {
9234      composeUri(t, "Device", "url", element.getUrlElement(), -1);
9235    }
9236    for (int i = 0; i < element.getEndpoint().size(); i++) {
9237      composeReference(t, "Device", "endpoint", element.getEndpoint().get(i), i);
9238    }
9239    for (int i = 0; i < element.getGateway().size(); i++) {
9240      composeCodeableReference(t, "Device", "gateway", element.getGateway().get(i), i);
9241    }
9242    for (int i = 0; i < element.getNote().size(); i++) {
9243      composeAnnotation(t, "Device", "note", element.getNote().get(i), i);
9244    }
9245    for (int i = 0; i < element.getSafety().size(); i++) {
9246      composeCodeableConcept(t, "Device", "safety", element.getSafety().get(i), i);
9247    }
9248    if (element.hasParent()) {
9249      composeReference(t, "Device", "parent", element.getParent(), -1);
9250    }
9251  }
9252
9253  protected void composeDeviceUdiCarrierComponent(Complex parent, String parentType, String name, Device.DeviceUdiCarrierComponent element, int index) {
9254    if (element == null) 
9255      return;
9256    Complex t;
9257    if (Utilities.noString(parentType))
9258      t = parent;
9259    else {
9260      t = parent.predicate("fhir:"+parentType+'.'+name);
9261    }
9262    composeBackboneElement(t, "udiCarrier", name, element, index);
9263    if (element.hasDeviceIdentifierElement()) {
9264      composeString(t, "DeviceUdiCarrierComponent", "deviceIdentifier", element.getDeviceIdentifierElement(), -1);
9265    }
9266    if (element.hasIssuerElement()) {
9267      composeUri(t, "DeviceUdiCarrierComponent", "issuer", element.getIssuerElement(), -1);
9268    }
9269    if (element.hasJurisdictionElement()) {
9270      composeUri(t, "DeviceUdiCarrierComponent", "jurisdiction", element.getJurisdictionElement(), -1);
9271    }
9272    if (element.hasCarrierAIDCElement()) {
9273      composeBase64Binary(t, "DeviceUdiCarrierComponent", "carrierAIDC", element.getCarrierAIDCElement(), -1);
9274    }
9275    if (element.hasCarrierHRFElement()) {
9276      composeString(t, "DeviceUdiCarrierComponent", "carrierHRF", element.getCarrierHRFElement(), -1);
9277    }
9278    if (element.hasEntryTypeElement()) {
9279      composeEnum(t, "DeviceUdiCarrierComponent", "entryType", element.getEntryTypeElement(), -1);
9280    }
9281  }
9282
9283  protected void composeDeviceDeviceNameComponent(Complex parent, String parentType, String name, Device.DeviceDeviceNameComponent element, int index) {
9284    if (element == null) 
9285      return;
9286    Complex t;
9287    if (Utilities.noString(parentType))
9288      t = parent;
9289    else {
9290      t = parent.predicate("fhir:"+parentType+'.'+name);
9291    }
9292    composeBackboneElement(t, "deviceName", name, element, index);
9293    if (element.hasNameElement()) {
9294      composeString(t, "DeviceDeviceNameComponent", "name", element.getNameElement(), -1);
9295    }
9296    if (element.hasTypeElement()) {
9297      composeEnum(t, "DeviceDeviceNameComponent", "type", element.getTypeElement(), -1);
9298    }
9299  }
9300
9301  protected void composeDeviceVersionComponent(Complex parent, String parentType, String name, Device.DeviceVersionComponent element, int index) {
9302    if (element == null) 
9303      return;
9304    Complex t;
9305    if (Utilities.noString(parentType))
9306      t = parent;
9307    else {
9308      t = parent.predicate("fhir:"+parentType+'.'+name);
9309    }
9310    composeBackboneElement(t, "version", name, element, index);
9311    if (element.hasType()) {
9312      composeCodeableConcept(t, "DeviceVersionComponent", "type", element.getType(), -1);
9313    }
9314    if (element.hasComponent()) {
9315      composeIdentifier(t, "DeviceVersionComponent", "component", element.getComponent(), -1);
9316    }
9317    if (element.hasInstallDateElement()) {
9318      composeDateTime(t, "DeviceVersionComponent", "installDate", element.getInstallDateElement(), -1);
9319    }
9320    if (element.hasValueElement()) {
9321      composeString(t, "DeviceVersionComponent", "value", element.getValueElement(), -1);
9322    }
9323  }
9324
9325  protected void composeDeviceSpecializationComponent(Complex parent, String parentType, String name, Device.DeviceSpecializationComponent element, int index) {
9326    if (element == null) 
9327      return;
9328    Complex t;
9329    if (Utilities.noString(parentType))
9330      t = parent;
9331    else {
9332      t = parent.predicate("fhir:"+parentType+'.'+name);
9333    }
9334    composeBackboneElement(t, "specialization", name, element, index);
9335    if (element.hasSystemType()) {
9336      composeCodeableConcept(t, "DeviceSpecializationComponent", "systemType", element.getSystemType(), -1);
9337    }
9338    if (element.hasVersionElement()) {
9339      composeString(t, "DeviceSpecializationComponent", "version", element.getVersionElement(), -1);
9340    }
9341    if (element.hasCategory()) {
9342      composeCoding(t, "DeviceSpecializationComponent", "category", element.getCategory(), -1);
9343    }
9344  }
9345
9346  protected void composeDevicePropertyComponent(Complex parent, String parentType, String name, Device.DevicePropertyComponent element, int index) {
9347    if (element == null) 
9348      return;
9349    Complex t;
9350    if (Utilities.noString(parentType))
9351      t = parent;
9352    else {
9353      t = parent.predicate("fhir:"+parentType+'.'+name);
9354    }
9355    composeBackboneElement(t, "property", name, element, index);
9356    if (element.hasType()) {
9357      composeCodeableConcept(t, "DevicePropertyComponent", "type", element.getType(), -1);
9358    }
9359    if (element.hasValue()) {
9360      composeType(t, "DevicePropertyComponent", "value", element.getValue(), -1);
9361    }
9362  }
9363
9364  protected void composeDeviceOperationComponent(Complex parent, String parentType, String name, Device.DeviceOperationComponent element, int index) {
9365    if (element == null) 
9366      return;
9367    Complex t;
9368    if (Utilities.noString(parentType))
9369      t = parent;
9370    else {
9371      t = parent.predicate("fhir:"+parentType+'.'+name);
9372    }
9373    composeBackboneElement(t, "operation", name, element, index);
9374    if (element.hasStatus()) {
9375      composeCodeableConcept(t, "DeviceOperationComponent", "status", element.getStatus(), -1);
9376    }
9377    for (int i = 0; i < element.getStatusReason().size(); i++) {
9378      composeCodeableConcept(t, "DeviceOperationComponent", "statusReason", element.getStatusReason().get(i), i);
9379    }
9380    for (int i = 0; i < element.getOperator().size(); i++) {
9381      composeReference(t, "DeviceOperationComponent", "operator", element.getOperator().get(i), i);
9382    }
9383    if (element.hasMode()) {
9384      composeCodeableConcept(t, "DeviceOperationComponent", "mode", element.getMode(), -1);
9385    }
9386    if (element.hasCycle()) {
9387      composeCount(t, "DeviceOperationComponent", "cycle", element.getCycle(), -1);
9388    }
9389    if (element.hasDuration()) {
9390      composeDuration(t, "DeviceOperationComponent", "duration", element.getDuration(), -1);
9391    }
9392  }
9393
9394  protected void composeDeviceAssociationComponent(Complex parent, String parentType, String name, Device.DeviceAssociationComponent element, int index) {
9395    if (element == null) 
9396      return;
9397    Complex t;
9398    if (Utilities.noString(parentType))
9399      t = parent;
9400    else {
9401      t = parent.predicate("fhir:"+parentType+'.'+name);
9402    }
9403    composeBackboneElement(t, "association", name, element, index);
9404    if (element.hasStatus()) {
9405      composeCodeableConcept(t, "DeviceAssociationComponent", "status", element.getStatus(), -1);
9406    }
9407    for (int i = 0; i < element.getStatusReason().size(); i++) {
9408      composeCodeableConcept(t, "DeviceAssociationComponent", "statusReason", element.getStatusReason().get(i), i);
9409    }
9410    if (element.hasHumanSubject()) {
9411      composeReference(t, "DeviceAssociationComponent", "humanSubject", element.getHumanSubject(), -1);
9412    }
9413    if (element.hasBodyStructure()) {
9414      composeCodeableReference(t, "DeviceAssociationComponent", "bodyStructure", element.getBodyStructure(), -1);
9415    }
9416  }
9417
9418  protected void composeDeviceDefinition(Complex parent, String parentType, String name, DeviceDefinition element, int index) {
9419    if (element == null) 
9420      return;
9421    Complex t;
9422    if (Utilities.noString(parentType))
9423      t = parent;
9424    else {
9425      t = parent.predicate("fhir:"+parentType+'.'+name);
9426    }
9427    composeDomainResource(t, "DeviceDefinition", name, element, index);
9428    if (element.hasDescriptionElement()) {
9429      composeMarkdown(t, "DeviceDefinition", "description", element.getDescriptionElement(), -1);
9430    }
9431    for (int i = 0; i < element.getIdentifier().size(); i++) {
9432      composeIdentifier(t, "DeviceDefinition", "identifier", element.getIdentifier().get(i), i);
9433    }
9434    for (int i = 0; i < element.getUdiDeviceIdentifier().size(); i++) {
9435      composeDeviceDefinitionUdiDeviceIdentifierComponent(t, "DeviceDefinition", "udiDeviceIdentifier", element.getUdiDeviceIdentifier().get(i), i);
9436    }
9437    for (int i = 0; i < element.getRegulatoryIdentifier().size(); i++) {
9438      composeDeviceDefinitionRegulatoryIdentifierComponent(t, "DeviceDefinition", "regulatoryIdentifier", element.getRegulatoryIdentifier().get(i), i);
9439    }
9440    if (element.hasPartNumberElement()) {
9441      composeString(t, "DeviceDefinition", "partNumber", element.getPartNumberElement(), -1);
9442    }
9443    if (element.hasManufacturer()) {
9444      composeReference(t, "DeviceDefinition", "manufacturer", element.getManufacturer(), -1);
9445    }
9446    for (int i = 0; i < element.getDeviceName().size(); i++) {
9447      composeDeviceDefinitionDeviceNameComponent(t, "DeviceDefinition", "deviceName", element.getDeviceName().get(i), i);
9448    }
9449    if (element.hasModelNumberElement()) {
9450      composeString(t, "DeviceDefinition", "modelNumber", element.getModelNumberElement(), -1);
9451    }
9452    for (int i = 0; i < element.getClassification().size(); i++) {
9453      composeDeviceDefinitionClassificationComponent(t, "DeviceDefinition", "classification", element.getClassification().get(i), i);
9454    }
9455    for (int i = 0; i < element.getSpecialization().size(); i++) {
9456      composeRelatedArtifact(t, "DeviceDefinition", "specialization", element.getSpecialization().get(i), i);
9457    }
9458    for (int i = 0; i < element.getHasPart().size(); i++) {
9459      composeDeviceDefinitionHasPartComponent(t, "DeviceDefinition", "hasPart", element.getHasPart().get(i), i);
9460    }
9461    for (int i = 0; i < element.getPackaging().size(); i++) {
9462      composeDeviceDefinitionPackagingComponent(t, "DeviceDefinition", "packaging", element.getPackaging().get(i), i);
9463    }
9464    for (int i = 0; i < element.getVersion().size(); i++) {
9465      composeDeviceDefinitionVersionComponent(t, "DeviceDefinition", "version", element.getVersion().get(i), i);
9466    }
9467    for (int i = 0; i < element.getSafety().size(); i++) {
9468      composeCodeableConcept(t, "DeviceDefinition", "safety", element.getSafety().get(i), i);
9469    }
9470    for (int i = 0; i < element.getShelfLifeStorage().size(); i++) {
9471      composeProductShelfLife(t, "DeviceDefinition", "shelfLifeStorage", element.getShelfLifeStorage().get(i), i);
9472    }
9473    for (int i = 0; i < element.getLanguageCode().size(); i++) {
9474      composeCodeableConcept(t, "DeviceDefinition", "languageCode", element.getLanguageCode().get(i), i);
9475    }
9476    for (int i = 0; i < element.getProperty().size(); i++) {
9477      composeDeviceDefinitionPropertyComponent(t, "DeviceDefinition", "property", element.getProperty().get(i), i);
9478    }
9479    if (element.hasOwner()) {
9480      composeReference(t, "DeviceDefinition", "owner", element.getOwner(), -1);
9481    }
9482    for (int i = 0; i < element.getContact().size(); i++) {
9483      composeContactPoint(t, "DeviceDefinition", "contact", element.getContact().get(i), i);
9484    }
9485    for (int i = 0; i < element.getLink().size(); i++) {
9486      composeDeviceDefinitionLinkComponent(t, "DeviceDefinition", "link", element.getLink().get(i), i);
9487    }
9488    for (int i = 0; i < element.getNote().size(); i++) {
9489      composeAnnotation(t, "DeviceDefinition", "note", element.getNote().get(i), i);
9490    }
9491    if (element.hasParentDevice()) {
9492      composeReference(t, "DeviceDefinition", "parentDevice", element.getParentDevice(), -1);
9493    }
9494    for (int i = 0; i < element.getMaterial().size(); i++) {
9495      composeDeviceDefinitionMaterialComponent(t, "DeviceDefinition", "material", element.getMaterial().get(i), i);
9496    }
9497    for (int i = 0; i < element.getProductionIdentifierInUDI().size(); i++) {
9498      composeEnum(t, "DeviceDefinition", "productionIdentifierInUDI", element.getProductionIdentifierInUDI().get(i), i);
9499    }
9500    if (element.hasGuideline()) {
9501      composeDeviceDefinitionGuidelineComponent(t, "DeviceDefinition", "guideline", element.getGuideline(), -1);
9502    }
9503    if (element.hasCorrectiveAction()) {
9504      composeDeviceDefinitionCorrectiveActionComponent(t, "DeviceDefinition", "correctiveAction", element.getCorrectiveAction(), -1);
9505    }
9506    for (int i = 0; i < element.getChargeItem().size(); i++) {
9507      composeDeviceDefinitionChargeItemComponent(t, "DeviceDefinition", "chargeItem", element.getChargeItem().get(i), i);
9508    }
9509  }
9510
9511  protected void composeDeviceDefinitionUdiDeviceIdentifierComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionUdiDeviceIdentifierComponent element, int index) {
9512    if (element == null) 
9513      return;
9514    Complex t;
9515    if (Utilities.noString(parentType))
9516      t = parent;
9517    else {
9518      t = parent.predicate("fhir:"+parentType+'.'+name);
9519    }
9520    composeBackboneElement(t, "udiDeviceIdentifier", name, element, index);
9521    if (element.hasDeviceIdentifierElement()) {
9522      composeString(t, "DeviceDefinitionUdiDeviceIdentifierComponent", "deviceIdentifier", element.getDeviceIdentifierElement(), -1);
9523    }
9524    if (element.hasIssuerElement()) {
9525      composeUri(t, "DeviceDefinitionUdiDeviceIdentifierComponent", "issuer", element.getIssuerElement(), -1);
9526    }
9527    if (element.hasJurisdictionElement()) {
9528      composeUri(t, "DeviceDefinitionUdiDeviceIdentifierComponent", "jurisdiction", element.getJurisdictionElement(), -1);
9529    }
9530    for (int i = 0; i < element.getMarketDistribution().size(); i++) {
9531      composeDeviceDefinitionUdiDeviceIdentifierMarketDistributionComponent(t, "DeviceDefinitionUdiDeviceIdentifierComponent", "marketDistribution", element.getMarketDistribution().get(i), i);
9532    }
9533  }
9534
9535  protected void composeDeviceDefinitionUdiDeviceIdentifierMarketDistributionComponent(Complex parent, String parentType, String name, DeviceDefinition.UdiDeviceIdentifierMarketDistributionComponent element, int index) {
9536    if (element == null) 
9537      return;
9538    Complex t;
9539    if (Utilities.noString(parentType))
9540      t = parent;
9541    else {
9542      t = parent.predicate("fhir:"+parentType+'.'+name);
9543    }
9544    composeBackboneElement(t, "marketDistribution", name, element, index);
9545    if (element.hasMarketPeriod()) {
9546      composePeriod(t, "UdiDeviceIdentifierMarketDistributionComponent", "marketPeriod", element.getMarketPeriod(), -1);
9547    }
9548    if (element.hasSubJurisdictionElement()) {
9549      composeUri(t, "UdiDeviceIdentifierMarketDistributionComponent", "subJurisdiction", element.getSubJurisdictionElement(), -1);
9550    }
9551  }
9552
9553  protected void composeDeviceDefinitionRegulatoryIdentifierComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionRegulatoryIdentifierComponent element, int index) {
9554    if (element == null) 
9555      return;
9556    Complex t;
9557    if (Utilities.noString(parentType))
9558      t = parent;
9559    else {
9560      t = parent.predicate("fhir:"+parentType+'.'+name);
9561    }
9562    composeBackboneElement(t, "regulatoryIdentifier", name, element, index);
9563    if (element.hasTypeElement()) {
9564      composeEnum(t, "DeviceDefinitionRegulatoryIdentifierComponent", "type", element.getTypeElement(), -1);
9565    }
9566    if (element.hasDeviceIdentifierElement()) {
9567      composeString(t, "DeviceDefinitionRegulatoryIdentifierComponent", "deviceIdentifier", element.getDeviceIdentifierElement(), -1);
9568    }
9569    if (element.hasIssuerElement()) {
9570      composeUri(t, "DeviceDefinitionRegulatoryIdentifierComponent", "issuer", element.getIssuerElement(), -1);
9571    }
9572    if (element.hasJurisdictionElement()) {
9573      composeUri(t, "DeviceDefinitionRegulatoryIdentifierComponent", "jurisdiction", element.getJurisdictionElement(), -1);
9574    }
9575  }
9576
9577  protected void composeDeviceDefinitionDeviceNameComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionDeviceNameComponent element, int index) {
9578    if (element == null) 
9579      return;
9580    Complex t;
9581    if (Utilities.noString(parentType))
9582      t = parent;
9583    else {
9584      t = parent.predicate("fhir:"+parentType+'.'+name);
9585    }
9586    composeBackboneElement(t, "deviceName", name, element, index);
9587    if (element.hasNameElement()) {
9588      composeString(t, "DeviceDefinitionDeviceNameComponent", "name", element.getNameElement(), -1);
9589    }
9590    if (element.hasTypeElement()) {
9591      composeEnum(t, "DeviceDefinitionDeviceNameComponent", "type", element.getTypeElement(), -1);
9592    }
9593  }
9594
9595  protected void composeDeviceDefinitionClassificationComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionClassificationComponent element, int index) {
9596    if (element == null) 
9597      return;
9598    Complex t;
9599    if (Utilities.noString(parentType))
9600      t = parent;
9601    else {
9602      t = parent.predicate("fhir:"+parentType+'.'+name);
9603    }
9604    composeBackboneElement(t, "classification", name, element, index);
9605    if (element.hasType()) {
9606      composeCodeableConcept(t, "DeviceDefinitionClassificationComponent", "type", element.getType(), -1);
9607    }
9608    for (int i = 0; i < element.getJustification().size(); i++) {
9609      composeRelatedArtifact(t, "DeviceDefinitionClassificationComponent", "justification", element.getJustification().get(i), i);
9610    }
9611  }
9612
9613  protected void composeDeviceDefinitionHasPartComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionHasPartComponent element, int index) {
9614    if (element == null) 
9615      return;
9616    Complex t;
9617    if (Utilities.noString(parentType))
9618      t = parent;
9619    else {
9620      t = parent.predicate("fhir:"+parentType+'.'+name);
9621    }
9622    composeBackboneElement(t, "hasPart", name, element, index);
9623    if (element.hasReference()) {
9624      composeReference(t, "DeviceDefinitionHasPartComponent", "reference", element.getReference(), -1);
9625    }
9626    if (element.hasCountElement()) {
9627      composeInteger(t, "DeviceDefinitionHasPartComponent", "count", element.getCountElement(), -1);
9628    }
9629  }
9630
9631  protected void composeDeviceDefinitionPackagingComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionPackagingComponent element, int index) {
9632    if (element == null) 
9633      return;
9634    Complex t;
9635    if (Utilities.noString(parentType))
9636      t = parent;
9637    else {
9638      t = parent.predicate("fhir:"+parentType+'.'+name);
9639    }
9640    composeBackboneElement(t, "packaging", name, element, index);
9641    if (element.hasIdentifier()) {
9642      composeIdentifier(t, "DeviceDefinitionPackagingComponent", "identifier", element.getIdentifier(), -1);
9643    }
9644    if (element.hasType()) {
9645      composeCodeableConcept(t, "DeviceDefinitionPackagingComponent", "type", element.getType(), -1);
9646    }
9647    if (element.hasCountElement()) {
9648      composeInteger(t, "DeviceDefinitionPackagingComponent", "count", element.getCountElement(), -1);
9649    }
9650    for (int i = 0; i < element.getDistributor().size(); i++) {
9651      composeDeviceDefinitionPackagingDistributorComponent(t, "DeviceDefinitionPackagingComponent", "distributor", element.getDistributor().get(i), i);
9652    }
9653    for (int i = 0; i < element.getUdiDeviceIdentifier().size(); i++) {
9654      composeDeviceDefinitionUdiDeviceIdentifierComponent(t, "DeviceDefinitionPackagingComponent", "udiDeviceIdentifier", element.getUdiDeviceIdentifier().get(i), i);
9655    }
9656    for (int i = 0; i < element.getPackaging().size(); i++) {
9657      composeDeviceDefinitionPackagingComponent(t, "DeviceDefinitionPackagingComponent", "packaging", element.getPackaging().get(i), i);
9658    }
9659  }
9660
9661  protected void composeDeviceDefinitionPackagingDistributorComponent(Complex parent, String parentType, String name, DeviceDefinition.PackagingDistributorComponent element, int index) {
9662    if (element == null) 
9663      return;
9664    Complex t;
9665    if (Utilities.noString(parentType))
9666      t = parent;
9667    else {
9668      t = parent.predicate("fhir:"+parentType+'.'+name);
9669    }
9670    composeBackboneElement(t, "distributor", name, element, index);
9671    if (element.hasNameElement()) {
9672      composeString(t, "PackagingDistributorComponent", "name", element.getNameElement(), -1);
9673    }
9674    for (int i = 0; i < element.getOrganizationReference().size(); i++) {
9675      composeReference(t, "PackagingDistributorComponent", "organizationReference", element.getOrganizationReference().get(i), i);
9676    }
9677  }
9678
9679  protected void composeDeviceDefinitionVersionComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionVersionComponent element, int index) {
9680    if (element == null) 
9681      return;
9682    Complex t;
9683    if (Utilities.noString(parentType))
9684      t = parent;
9685    else {
9686      t = parent.predicate("fhir:"+parentType+'.'+name);
9687    }
9688    composeBackboneElement(t, "version", name, element, index);
9689    if (element.hasType()) {
9690      composeCodeableConcept(t, "DeviceDefinitionVersionComponent", "type", element.getType(), -1);
9691    }
9692    if (element.hasComponent()) {
9693      composeIdentifier(t, "DeviceDefinitionVersionComponent", "component", element.getComponent(), -1);
9694    }
9695    if (element.hasValueElement()) {
9696      composeString(t, "DeviceDefinitionVersionComponent", "value", element.getValueElement(), -1);
9697    }
9698  }
9699
9700  protected void composeDeviceDefinitionPropertyComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionPropertyComponent element, int index) {
9701    if (element == null) 
9702      return;
9703    Complex t;
9704    if (Utilities.noString(parentType))
9705      t = parent;
9706    else {
9707      t = parent.predicate("fhir:"+parentType+'.'+name);
9708    }
9709    composeBackboneElement(t, "property", name, element, index);
9710    if (element.hasType()) {
9711      composeCodeableConcept(t, "DeviceDefinitionPropertyComponent", "type", element.getType(), -1);
9712    }
9713    if (element.hasValue()) {
9714      composeType(t, "DeviceDefinitionPropertyComponent", "value", element.getValue(), -1);
9715    }
9716  }
9717
9718  protected void composeDeviceDefinitionLinkComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionLinkComponent element, int index) {
9719    if (element == null) 
9720      return;
9721    Complex t;
9722    if (Utilities.noString(parentType))
9723      t = parent;
9724    else {
9725      t = parent.predicate("fhir:"+parentType+'.'+name);
9726    }
9727    composeBackboneElement(t, "link", name, element, index);
9728    if (element.hasRelation()) {
9729      composeCoding(t, "DeviceDefinitionLinkComponent", "relation", element.getRelation(), -1);
9730    }
9731    if (element.hasRelatedDevice()) {
9732      composeCodeableReference(t, "DeviceDefinitionLinkComponent", "relatedDevice", element.getRelatedDevice(), -1);
9733    }
9734  }
9735
9736  protected void composeDeviceDefinitionMaterialComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionMaterialComponent element, int index) {
9737    if (element == null) 
9738      return;
9739    Complex t;
9740    if (Utilities.noString(parentType))
9741      t = parent;
9742    else {
9743      t = parent.predicate("fhir:"+parentType+'.'+name);
9744    }
9745    composeBackboneElement(t, "material", name, element, index);
9746    if (element.hasSubstance()) {
9747      composeCodeableConcept(t, "DeviceDefinitionMaterialComponent", "substance", element.getSubstance(), -1);
9748    }
9749    if (element.hasAlternateElement()) {
9750      composeBoolean(t, "DeviceDefinitionMaterialComponent", "alternate", element.getAlternateElement(), -1);
9751    }
9752    if (element.hasAllergenicIndicatorElement()) {
9753      composeBoolean(t, "DeviceDefinitionMaterialComponent", "allergenicIndicator", element.getAllergenicIndicatorElement(), -1);
9754    }
9755  }
9756
9757  protected void composeDeviceDefinitionGuidelineComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionGuidelineComponent element, int index) {
9758    if (element == null) 
9759      return;
9760    Complex t;
9761    if (Utilities.noString(parentType))
9762      t = parent;
9763    else {
9764      t = parent.predicate("fhir:"+parentType+'.'+name);
9765    }
9766    composeBackboneElement(t, "guideline", name, element, index);
9767    for (int i = 0; i < element.getUseContext().size(); i++) {
9768      composeUsageContext(t, "DeviceDefinitionGuidelineComponent", "useContext", element.getUseContext().get(i), i);
9769    }
9770    if (element.hasUsageInstructionElement()) {
9771      composeMarkdown(t, "DeviceDefinitionGuidelineComponent", "usageInstruction", element.getUsageInstructionElement(), -1);
9772    }
9773    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
9774      composeRelatedArtifact(t, "DeviceDefinitionGuidelineComponent", "relatedArtifact", element.getRelatedArtifact().get(i), i);
9775    }
9776    for (int i = 0; i < element.getIndication().size(); i++) {
9777      composeCodeableReference(t, "DeviceDefinitionGuidelineComponent", "indication", element.getIndication().get(i), i);
9778    }
9779    for (int i = 0; i < element.getContraindication().size(); i++) {
9780      composeCodeableReference(t, "DeviceDefinitionGuidelineComponent", "contraindication", element.getContraindication().get(i), i);
9781    }
9782    for (int i = 0; i < element.getWarning().size(); i++) {
9783      composeCodeableReference(t, "DeviceDefinitionGuidelineComponent", "warning", element.getWarning().get(i), i);
9784    }
9785    if (element.hasIntendedUseElement()) {
9786      composeString(t, "DeviceDefinitionGuidelineComponent", "intendedUse", element.getIntendedUseElement(), -1);
9787    }
9788  }
9789
9790  protected void composeDeviceDefinitionCorrectiveActionComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionCorrectiveActionComponent element, int index) {
9791    if (element == null) 
9792      return;
9793    Complex t;
9794    if (Utilities.noString(parentType))
9795      t = parent;
9796    else {
9797      t = parent.predicate("fhir:"+parentType+'.'+name);
9798    }
9799    composeBackboneElement(t, "correctiveAction", name, element, index);
9800    if (element.hasRecallElement()) {
9801      composeBoolean(t, "DeviceDefinitionCorrectiveActionComponent", "recall", element.getRecallElement(), -1);
9802    }
9803    if (element.hasScopeElement()) {
9804      composeEnum(t, "DeviceDefinitionCorrectiveActionComponent", "scope", element.getScopeElement(), -1);
9805    }
9806    if (element.hasPeriod()) {
9807      composePeriod(t, "DeviceDefinitionCorrectiveActionComponent", "period", element.getPeriod(), -1);
9808    }
9809  }
9810
9811  protected void composeDeviceDefinitionChargeItemComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionChargeItemComponent element, int index) {
9812    if (element == null) 
9813      return;
9814    Complex t;
9815    if (Utilities.noString(parentType))
9816      t = parent;
9817    else {
9818      t = parent.predicate("fhir:"+parentType+'.'+name);
9819    }
9820    composeBackboneElement(t, "chargeItem", name, element, index);
9821    if (element.hasChargeItemCode()) {
9822      composeCodeableReference(t, "DeviceDefinitionChargeItemComponent", "chargeItemCode", element.getChargeItemCode(), -1);
9823    }
9824    if (element.hasCount()) {
9825      composeQuantity(t, "DeviceDefinitionChargeItemComponent", "count", element.getCount(), -1);
9826    }
9827    if (element.hasEffectivePeriod()) {
9828      composePeriod(t, "DeviceDefinitionChargeItemComponent", "effectivePeriod", element.getEffectivePeriod(), -1);
9829    }
9830    for (int i = 0; i < element.getUseContext().size(); i++) {
9831      composeUsageContext(t, "DeviceDefinitionChargeItemComponent", "useContext", element.getUseContext().get(i), i);
9832    }
9833  }
9834
9835  protected void composeDeviceDispense(Complex parent, String parentType, String name, DeviceDispense element, int index) {
9836    if (element == null) 
9837      return;
9838    Complex t;
9839    if (Utilities.noString(parentType))
9840      t = parent;
9841    else {
9842      t = parent.predicate("fhir:"+parentType+'.'+name);
9843    }
9844    composeDomainResource(t, "DeviceDispense", name, element, index);
9845    for (int i = 0; i < element.getIdentifier().size(); i++) {
9846      composeIdentifier(t, "DeviceDispense", "identifier", element.getIdentifier().get(i), i);
9847    }
9848    for (int i = 0; i < element.getBasedOn().size(); i++) {
9849      composeReference(t, "DeviceDispense", "basedOn", element.getBasedOn().get(i), i);
9850    }
9851    for (int i = 0; i < element.getPartOf().size(); i++) {
9852      composeReference(t, "DeviceDispense", "partOf", element.getPartOf().get(i), i);
9853    }
9854    if (element.hasStatusElement()) {
9855      composeEnum(t, "DeviceDispense", "status", element.getStatusElement(), -1);
9856    }
9857    if (element.hasStatusReason()) {
9858      composeCodeableReference(t, "DeviceDispense", "statusReason", element.getStatusReason(), -1);
9859    }
9860    for (int i = 0; i < element.getCategory().size(); i++) {
9861      composeCodeableConcept(t, "DeviceDispense", "category", element.getCategory().get(i), i);
9862    }
9863    if (element.hasDevice()) {
9864      composeCodeableReference(t, "DeviceDispense", "device", element.getDevice(), -1);
9865    }
9866    if (element.hasSubject()) {
9867      composeReference(t, "DeviceDispense", "subject", element.getSubject(), -1);
9868    }
9869    if (element.hasEncounter()) {
9870      composeReference(t, "DeviceDispense", "encounter", element.getEncounter(), -1);
9871    }
9872    for (int i = 0; i < element.getSupportingInformation().size(); i++) {
9873      composeReference(t, "DeviceDispense", "supportingInformation", element.getSupportingInformation().get(i), i);
9874    }
9875    for (int i = 0; i < element.getPerformer().size(); i++) {
9876      composeDeviceDispensePerformerComponent(t, "DeviceDispense", "performer", element.getPerformer().get(i), i);
9877    }
9878    if (element.hasLocation()) {
9879      composeReference(t, "DeviceDispense", "location", element.getLocation(), -1);
9880    }
9881    if (element.hasType()) {
9882      composeCodeableConcept(t, "DeviceDispense", "type", element.getType(), -1);
9883    }
9884    if (element.hasQuantity()) {
9885      composeQuantity(t, "DeviceDispense", "quantity", element.getQuantity(), -1);
9886    }
9887    if (element.hasPreparedDateElement()) {
9888      composeDateTime(t, "DeviceDispense", "preparedDate", element.getPreparedDateElement(), -1);
9889    }
9890    if (element.hasWhenHandedOverElement()) {
9891      composeDateTime(t, "DeviceDispense", "whenHandedOver", element.getWhenHandedOverElement(), -1);
9892    }
9893    if (element.hasDestination()) {
9894      composeReference(t, "DeviceDispense", "destination", element.getDestination(), -1);
9895    }
9896    for (int i = 0; i < element.getNote().size(); i++) {
9897      composeAnnotation(t, "DeviceDispense", "note", element.getNote().get(i), i);
9898    }
9899    if (element.hasUsageInstructionElement()) {
9900      composeString(t, "DeviceDispense", "usageInstruction", element.getUsageInstructionElement(), -1);
9901    }
9902    for (int i = 0; i < element.getEventHistory().size(); i++) {
9903      composeReference(t, "DeviceDispense", "eventHistory", element.getEventHistory().get(i), i);
9904    }
9905  }
9906
9907  protected void composeDeviceDispensePerformerComponent(Complex parent, String parentType, String name, DeviceDispense.DeviceDispensePerformerComponent element, int index) {
9908    if (element == null) 
9909      return;
9910    Complex t;
9911    if (Utilities.noString(parentType))
9912      t = parent;
9913    else {
9914      t = parent.predicate("fhir:"+parentType+'.'+name);
9915    }
9916    composeBackboneElement(t, "performer", name, element, index);
9917    if (element.hasFunction()) {
9918      composeCodeableConcept(t, "DeviceDispensePerformerComponent", "function", element.getFunction(), -1);
9919    }
9920    if (element.hasActor()) {
9921      composeReference(t, "DeviceDispensePerformerComponent", "actor", element.getActor(), -1);
9922    }
9923  }
9924
9925  protected void composeDeviceMetric(Complex parent, String parentType, String name, DeviceMetric element, int index) {
9926    if (element == null) 
9927      return;
9928    Complex t;
9929    if (Utilities.noString(parentType))
9930      t = parent;
9931    else {
9932      t = parent.predicate("fhir:"+parentType+'.'+name);
9933    }
9934    composeDomainResource(t, "DeviceMetric", name, element, index);
9935    for (int i = 0; i < element.getIdentifier().size(); i++) {
9936      composeIdentifier(t, "DeviceMetric", "identifier", element.getIdentifier().get(i), i);
9937    }
9938    if (element.hasType()) {
9939      composeCodeableConcept(t, "DeviceMetric", "type", element.getType(), -1);
9940    }
9941    if (element.hasUnit()) {
9942      composeCodeableConcept(t, "DeviceMetric", "unit", element.getUnit(), -1);
9943    }
9944    if (element.hasSource()) {
9945      composeReference(t, "DeviceMetric", "source", element.getSource(), -1);
9946    }
9947    if (element.hasParent()) {
9948      composeReference(t, "DeviceMetric", "parent", element.getParent(), -1);
9949    }
9950    if (element.hasOperationalStatusElement()) {
9951      composeEnum(t, "DeviceMetric", "operationalStatus", element.getOperationalStatusElement(), -1);
9952    }
9953    if (element.hasColorElement()) {
9954      composeEnum(t, "DeviceMetric", "color", element.getColorElement(), -1);
9955    }
9956    if (element.hasCategoryElement()) {
9957      composeEnum(t, "DeviceMetric", "category", element.getCategoryElement(), -1);
9958    }
9959    if (element.hasMeasurementPeriod()) {
9960      composeTiming(t, "DeviceMetric", "measurementPeriod", element.getMeasurementPeriod(), -1);
9961    }
9962    for (int i = 0; i < element.getCalibration().size(); i++) {
9963      composeDeviceMetricCalibrationComponent(t, "DeviceMetric", "calibration", element.getCalibration().get(i), i);
9964    }
9965  }
9966
9967  protected void composeDeviceMetricCalibrationComponent(Complex parent, String parentType, String name, DeviceMetric.DeviceMetricCalibrationComponent element, int index) {
9968    if (element == null) 
9969      return;
9970    Complex t;
9971    if (Utilities.noString(parentType))
9972      t = parent;
9973    else {
9974      t = parent.predicate("fhir:"+parentType+'.'+name);
9975    }
9976    composeBackboneElement(t, "calibration", name, element, index);
9977    if (element.hasTypeElement()) {
9978      composeEnum(t, "DeviceMetricCalibrationComponent", "type", element.getTypeElement(), -1);
9979    }
9980    if (element.hasStateElement()) {
9981      composeEnum(t, "DeviceMetricCalibrationComponent", "state", element.getStateElement(), -1);
9982    }
9983    if (element.hasTimeElement()) {
9984      composeInstant(t, "DeviceMetricCalibrationComponent", "time", element.getTimeElement(), -1);
9985    }
9986  }
9987
9988  protected void composeDeviceRequest(Complex parent, String parentType, String name, DeviceRequest element, int index) {
9989    if (element == null) 
9990      return;
9991    Complex t;
9992    if (Utilities.noString(parentType))
9993      t = parent;
9994    else {
9995      t = parent.predicate("fhir:"+parentType+'.'+name);
9996    }
9997    composeDomainResource(t, "DeviceRequest", name, element, index);
9998    for (int i = 0; i < element.getIdentifier().size(); i++) {
9999      composeIdentifier(t, "DeviceRequest", "identifier", element.getIdentifier().get(i), i);
10000    }
10001    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
10002      composeCanonical(t, "DeviceRequest", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
10003    }
10004    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
10005      composeUri(t, "DeviceRequest", "instantiatesUri", element.getInstantiatesUri().get(i), i);
10006    }
10007    for (int i = 0; i < element.getBasedOn().size(); i++) {
10008      composeReference(t, "DeviceRequest", "basedOn", element.getBasedOn().get(i), i);
10009    }
10010    for (int i = 0; i < element.getReplaces().size(); i++) {
10011      composeReference(t, "DeviceRequest", "replaces", element.getReplaces().get(i), i);
10012    }
10013    if (element.hasGroupIdentifier()) {
10014      composeIdentifier(t, "DeviceRequest", "groupIdentifier", element.getGroupIdentifier(), -1);
10015    }
10016    if (element.hasStatusElement()) {
10017      composeEnum(t, "DeviceRequest", "status", element.getStatusElement(), -1);
10018    }
10019    if (element.hasIntentElement()) {
10020      composeEnum(t, "DeviceRequest", "intent", element.getIntentElement(), -1);
10021    }
10022    if (element.hasPriorityElement()) {
10023      composeEnum(t, "DeviceRequest", "priority", element.getPriorityElement(), -1);
10024    }
10025    if (element.hasDoNotPerformElement()) {
10026      composeBoolean(t, "DeviceRequest", "doNotPerform", element.getDoNotPerformElement(), -1);
10027    }
10028    if (element.hasCode()) {
10029      composeCodeableReference(t, "DeviceRequest", "code", element.getCode(), -1);
10030    }
10031    if (element.hasQuantityElement()) {
10032      composeInteger(t, "DeviceRequest", "quantity", element.getQuantityElement(), -1);
10033    }
10034    for (int i = 0; i < element.getParameter().size(); i++) {
10035      composeDeviceRequestParameterComponent(t, "DeviceRequest", "parameter", element.getParameter().get(i), i);
10036    }
10037    if (element.hasSubject()) {
10038      composeReference(t, "DeviceRequest", "subject", element.getSubject(), -1);
10039    }
10040    if (element.hasEncounter()) {
10041      composeReference(t, "DeviceRequest", "encounter", element.getEncounter(), -1);
10042    }
10043    if (element.hasOccurrence()) {
10044      composeType(t, "DeviceRequest", "occurrence", element.getOccurrence(), -1);
10045    }
10046    if (element.hasAuthoredOnElement()) {
10047      composeDateTime(t, "DeviceRequest", "authoredOn", element.getAuthoredOnElement(), -1);
10048    }
10049    if (element.hasRequester()) {
10050      composeReference(t, "DeviceRequest", "requester", element.getRequester(), -1);
10051    }
10052    if (element.hasPerformerType()) {
10053      composeCodeableConcept(t, "DeviceRequest", "performerType", element.getPerformerType(), -1);
10054    }
10055    if (element.hasPerformer()) {
10056      composeReference(t, "DeviceRequest", "performer", element.getPerformer(), -1);
10057    }
10058    for (int i = 0; i < element.getReason().size(); i++) {
10059      composeCodeableReference(t, "DeviceRequest", "reason", element.getReason().get(i), i);
10060    }
10061    if (element.hasAsNeededElement()) {
10062      composeBoolean(t, "DeviceRequest", "asNeeded", element.getAsNeededElement(), -1);
10063    }
10064    if (element.hasAsNeededFor()) {
10065      composeCodeableConcept(t, "DeviceRequest", "asNeededFor", element.getAsNeededFor(), -1);
10066    }
10067    for (int i = 0; i < element.getInsurance().size(); i++) {
10068      composeReference(t, "DeviceRequest", "insurance", element.getInsurance().get(i), i);
10069    }
10070    for (int i = 0; i < element.getSupportingInfo().size(); i++) {
10071      composeReference(t, "DeviceRequest", "supportingInfo", element.getSupportingInfo().get(i), i);
10072    }
10073    for (int i = 0; i < element.getNote().size(); i++) {
10074      composeAnnotation(t, "DeviceRequest", "note", element.getNote().get(i), i);
10075    }
10076    for (int i = 0; i < element.getRelevantHistory().size(); i++) {
10077      composeReference(t, "DeviceRequest", "relevantHistory", element.getRelevantHistory().get(i), i);
10078    }
10079  }
10080
10081  protected void composeDeviceRequestParameterComponent(Complex parent, String parentType, String name, DeviceRequest.DeviceRequestParameterComponent element, int index) {
10082    if (element == null) 
10083      return;
10084    Complex t;
10085    if (Utilities.noString(parentType))
10086      t = parent;
10087    else {
10088      t = parent.predicate("fhir:"+parentType+'.'+name);
10089    }
10090    composeBackboneElement(t, "parameter", name, element, index);
10091    if (element.hasCode()) {
10092      composeCodeableConcept(t, "DeviceRequestParameterComponent", "code", element.getCode(), -1);
10093    }
10094    if (element.hasValue()) {
10095      composeType(t, "DeviceRequestParameterComponent", "value", element.getValue(), -1);
10096    }
10097  }
10098
10099  protected void composeDeviceUsage(Complex parent, String parentType, String name, DeviceUsage element, int index) {
10100    if (element == null) 
10101      return;
10102    Complex t;
10103    if (Utilities.noString(parentType))
10104      t = parent;
10105    else {
10106      t = parent.predicate("fhir:"+parentType+'.'+name);
10107    }
10108    composeDomainResource(t, "DeviceUsage", name, element, index);
10109    for (int i = 0; i < element.getIdentifier().size(); i++) {
10110      composeIdentifier(t, "DeviceUsage", "identifier", element.getIdentifier().get(i), i);
10111    }
10112    for (int i = 0; i < element.getBasedOn().size(); i++) {
10113      composeReference(t, "DeviceUsage", "basedOn", element.getBasedOn().get(i), i);
10114    }
10115    if (element.hasStatusElement()) {
10116      composeEnum(t, "DeviceUsage", "status", element.getStatusElement(), -1);
10117    }
10118    for (int i = 0; i < element.getCategory().size(); i++) {
10119      composeCodeableConcept(t, "DeviceUsage", "category", element.getCategory().get(i), i);
10120    }
10121    if (element.hasPatient()) {
10122      composeReference(t, "DeviceUsage", "patient", element.getPatient(), -1);
10123    }
10124    for (int i = 0; i < element.getDerivedFrom().size(); i++) {
10125      composeReference(t, "DeviceUsage", "derivedFrom", element.getDerivedFrom().get(i), i);
10126    }
10127    if (element.hasContext()) {
10128      composeReference(t, "DeviceUsage", "context", element.getContext(), -1);
10129    }
10130    if (element.hasTiming()) {
10131      composeType(t, "DeviceUsage", "timing", element.getTiming(), -1);
10132    }
10133    if (element.hasDateAssertedElement()) {
10134      composeDateTime(t, "DeviceUsage", "dateAsserted", element.getDateAssertedElement(), -1);
10135    }
10136    if (element.hasUsageStatus()) {
10137      composeCodeableConcept(t, "DeviceUsage", "usageStatus", element.getUsageStatus(), -1);
10138    }
10139    for (int i = 0; i < element.getUsageReason().size(); i++) {
10140      composeCodeableConcept(t, "DeviceUsage", "usageReason", element.getUsageReason().get(i), i);
10141    }
10142    if (element.hasAdherence()) {
10143      composeDeviceUsageAdherenceComponent(t, "DeviceUsage", "adherence", element.getAdherence(), -1);
10144    }
10145    if (element.hasInformationSource()) {
10146      composeReference(t, "DeviceUsage", "informationSource", element.getInformationSource(), -1);
10147    }
10148    if (element.hasDevice()) {
10149      composeCodeableReference(t, "DeviceUsage", "device", element.getDevice(), -1);
10150    }
10151    for (int i = 0; i < element.getReason().size(); i++) {
10152      composeCodeableReference(t, "DeviceUsage", "reason", element.getReason().get(i), i);
10153    }
10154    if (element.hasBodySite()) {
10155      composeCodeableReference(t, "DeviceUsage", "bodySite", element.getBodySite(), -1);
10156    }
10157    for (int i = 0; i < element.getNote().size(); i++) {
10158      composeAnnotation(t, "DeviceUsage", "note", element.getNote().get(i), i);
10159    }
10160  }
10161
10162  protected void composeDeviceUsageAdherenceComponent(Complex parent, String parentType, String name, DeviceUsage.DeviceUsageAdherenceComponent element, int index) {
10163    if (element == null) 
10164      return;
10165    Complex t;
10166    if (Utilities.noString(parentType))
10167      t = parent;
10168    else {
10169      t = parent.predicate("fhir:"+parentType+'.'+name);
10170    }
10171    composeBackboneElement(t, "adherence", name, element, index);
10172    if (element.hasCode()) {
10173      composeCodeableConcept(t, "DeviceUsageAdherenceComponent", "code", element.getCode(), -1);
10174    }
10175    for (int i = 0; i < element.getReason().size(); i++) {
10176      composeCodeableConcept(t, "DeviceUsageAdherenceComponent", "reason", element.getReason().get(i), i);
10177    }
10178  }
10179
10180  protected void composeDiagnosticReport(Complex parent, String parentType, String name, DiagnosticReport element, int index) {
10181    if (element == null) 
10182      return;
10183    Complex t;
10184    if (Utilities.noString(parentType))
10185      t = parent;
10186    else {
10187      t = parent.predicate("fhir:"+parentType+'.'+name);
10188    }
10189    composeDomainResource(t, "DiagnosticReport", name, element, index);
10190    for (int i = 0; i < element.getIdentifier().size(); i++) {
10191      composeIdentifier(t, "DiagnosticReport", "identifier", element.getIdentifier().get(i), i);
10192    }
10193    for (int i = 0; i < element.getBasedOn().size(); i++) {
10194      composeReference(t, "DiagnosticReport", "basedOn", element.getBasedOn().get(i), i);
10195    }
10196    if (element.hasStatusElement()) {
10197      composeEnum(t, "DiagnosticReport", "status", element.getStatusElement(), -1);
10198    }
10199    for (int i = 0; i < element.getCategory().size(); i++) {
10200      composeCodeableConcept(t, "DiagnosticReport", "category", element.getCategory().get(i), i);
10201    }
10202    if (element.hasCode()) {
10203      composeCodeableConcept(t, "DiagnosticReport", "code", element.getCode(), -1);
10204    }
10205    if (element.hasSubject()) {
10206      composeReference(t, "DiagnosticReport", "subject", element.getSubject(), -1);
10207    }
10208    if (element.hasEncounter()) {
10209      composeReference(t, "DiagnosticReport", "encounter", element.getEncounter(), -1);
10210    }
10211    if (element.hasEffective()) {
10212      composeType(t, "DiagnosticReport", "effective", element.getEffective(), -1);
10213    }
10214    if (element.hasIssuedElement()) {
10215      composeInstant(t, "DiagnosticReport", "issued", element.getIssuedElement(), -1);
10216    }
10217    for (int i = 0; i < element.getPerformer().size(); i++) {
10218      composeReference(t, "DiagnosticReport", "performer", element.getPerformer().get(i), i);
10219    }
10220    for (int i = 0; i < element.getResultsInterpreter().size(); i++) {
10221      composeReference(t, "DiagnosticReport", "resultsInterpreter", element.getResultsInterpreter().get(i), i);
10222    }
10223    for (int i = 0; i < element.getSpecimen().size(); i++) {
10224      composeReference(t, "DiagnosticReport", "specimen", element.getSpecimen().get(i), i);
10225    }
10226    for (int i = 0; i < element.getResult().size(); i++) {
10227      composeReference(t, "DiagnosticReport", "result", element.getResult().get(i), i);
10228    }
10229    for (int i = 0; i < element.getNote().size(); i++) {
10230      composeAnnotation(t, "DiagnosticReport", "note", element.getNote().get(i), i);
10231    }
10232    for (int i = 0; i < element.getStudy().size(); i++) {
10233      composeReference(t, "DiagnosticReport", "study", element.getStudy().get(i), i);
10234    }
10235    for (int i = 0; i < element.getSupportingInfo().size(); i++) {
10236      composeDiagnosticReportSupportingInfoComponent(t, "DiagnosticReport", "supportingInfo", element.getSupportingInfo().get(i), i);
10237    }
10238    for (int i = 0; i < element.getMedia().size(); i++) {
10239      composeDiagnosticReportMediaComponent(t, "DiagnosticReport", "media", element.getMedia().get(i), i);
10240    }
10241    if (element.hasComposition()) {
10242      composeReference(t, "DiagnosticReport", "composition", element.getComposition(), -1);
10243    }
10244    if (element.hasConclusionElement()) {
10245      composeString(t, "DiagnosticReport", "conclusion", element.getConclusionElement(), -1);
10246    }
10247    for (int i = 0; i < element.getConclusionCode().size(); i++) {
10248      composeCodeableConcept(t, "DiagnosticReport", "conclusionCode", element.getConclusionCode().get(i), i);
10249    }
10250    for (int i = 0; i < element.getPresentedForm().size(); i++) {
10251      composeAttachment(t, "DiagnosticReport", "presentedForm", element.getPresentedForm().get(i), i);
10252    }
10253  }
10254
10255  protected void composeDiagnosticReportSupportingInfoComponent(Complex parent, String parentType, String name, DiagnosticReport.DiagnosticReportSupportingInfoComponent element, int index) {
10256    if (element == null) 
10257      return;
10258    Complex t;
10259    if (Utilities.noString(parentType))
10260      t = parent;
10261    else {
10262      t = parent.predicate("fhir:"+parentType+'.'+name);
10263    }
10264    composeBackboneElement(t, "supportingInfo", name, element, index);
10265    if (element.hasType()) {
10266      composeCodeableConcept(t, "DiagnosticReportSupportingInfoComponent", "type", element.getType(), -1);
10267    }
10268    if (element.hasReference()) {
10269      composeReference(t, "DiagnosticReportSupportingInfoComponent", "reference", element.getReference(), -1);
10270    }
10271  }
10272
10273  protected void composeDiagnosticReportMediaComponent(Complex parent, String parentType, String name, DiagnosticReport.DiagnosticReportMediaComponent element, int index) {
10274    if (element == null) 
10275      return;
10276    Complex t;
10277    if (Utilities.noString(parentType))
10278      t = parent;
10279    else {
10280      t = parent.predicate("fhir:"+parentType+'.'+name);
10281    }
10282    composeBackboneElement(t, "media", name, element, index);
10283    if (element.hasCommentElement()) {
10284      composeString(t, "DiagnosticReportMediaComponent", "comment", element.getCommentElement(), -1);
10285    }
10286    if (element.hasLink()) {
10287      composeReference(t, "DiagnosticReportMediaComponent", "link", element.getLink(), -1);
10288    }
10289  }
10290
10291  protected void composeDocumentManifest(Complex parent, String parentType, String name, DocumentManifest element, int index) {
10292    if (element == null) 
10293      return;
10294    Complex t;
10295    if (Utilities.noString(parentType))
10296      t = parent;
10297    else {
10298      t = parent.predicate("fhir:"+parentType+'.'+name);
10299    }
10300    composeDomainResource(t, "DocumentManifest", name, element, index);
10301    if (element.hasMasterIdentifier()) {
10302      composeIdentifier(t, "DocumentManifest", "masterIdentifier", element.getMasterIdentifier(), -1);
10303    }
10304    for (int i = 0; i < element.getIdentifier().size(); i++) {
10305      composeIdentifier(t, "DocumentManifest", "identifier", element.getIdentifier().get(i), i);
10306    }
10307    if (element.hasStatusElement()) {
10308      composeEnum(t, "DocumentManifest", "status", element.getStatusElement(), -1);
10309    }
10310    if (element.hasType()) {
10311      composeCodeableConcept(t, "DocumentManifest", "type", element.getType(), -1);
10312    }
10313    if (element.hasSubject()) {
10314      composeReference(t, "DocumentManifest", "subject", element.getSubject(), -1);
10315    }
10316    if (element.hasCreatedElement()) {
10317      composeDateTime(t, "DocumentManifest", "created", element.getCreatedElement(), -1);
10318    }
10319    for (int i = 0; i < element.getAuthor().size(); i++) {
10320      composeReference(t, "DocumentManifest", "author", element.getAuthor().get(i), i);
10321    }
10322    for (int i = 0; i < element.getRecipient().size(); i++) {
10323      composeReference(t, "DocumentManifest", "recipient", element.getRecipient().get(i), i);
10324    }
10325    if (element.hasSourceElement()) {
10326      composeUri(t, "DocumentManifest", "source", element.getSourceElement(), -1);
10327    }
10328    if (element.hasDescriptionElement()) {
10329      composeString(t, "DocumentManifest", "description", element.getDescriptionElement(), -1);
10330    }
10331    for (int i = 0; i < element.getContent().size(); i++) {
10332      composeReference(t, "DocumentManifest", "content", element.getContent().get(i), i);
10333    }
10334    for (int i = 0; i < element.getRelated().size(); i++) {
10335      composeDocumentManifestRelatedComponent(t, "DocumentManifest", "related", element.getRelated().get(i), i);
10336    }
10337  }
10338
10339  protected void composeDocumentManifestRelatedComponent(Complex parent, String parentType, String name, DocumentManifest.DocumentManifestRelatedComponent element, int index) {
10340    if (element == null) 
10341      return;
10342    Complex t;
10343    if (Utilities.noString(parentType))
10344      t = parent;
10345    else {
10346      t = parent.predicate("fhir:"+parentType+'.'+name);
10347    }
10348    composeBackboneElement(t, "related", name, element, index);
10349    if (element.hasIdentifier()) {
10350      composeIdentifier(t, "DocumentManifestRelatedComponent", "identifier", element.getIdentifier(), -1);
10351    }
10352    if (element.hasRef()) {
10353      composeReference(t, "DocumentManifestRelatedComponent", "ref", element.getRef(), -1);
10354    }
10355  }
10356
10357  protected void composeDocumentReference(Complex parent, String parentType, String name, DocumentReference element, int index) {
10358    if (element == null) 
10359      return;
10360    Complex t;
10361    if (Utilities.noString(parentType))
10362      t = parent;
10363    else {
10364      t = parent.predicate("fhir:"+parentType+'.'+name);
10365    }
10366    composeDomainResource(t, "DocumentReference", name, element, index);
10367    for (int i = 0; i < element.getIdentifier().size(); i++) {
10368      composeIdentifier(t, "DocumentReference", "identifier", element.getIdentifier().get(i), i);
10369    }
10370    for (int i = 0; i < element.getBasedOn().size(); i++) {
10371      composeReference(t, "DocumentReference", "basedOn", element.getBasedOn().get(i), i);
10372    }
10373    if (element.hasStatusElement()) {
10374      composeEnum(t, "DocumentReference", "status", element.getStatusElement(), -1);
10375    }
10376    if (element.hasDocStatusElement()) {
10377      composeEnum(t, "DocumentReference", "docStatus", element.getDocStatusElement(), -1);
10378    }
10379    if (element.hasType()) {
10380      composeCodeableConcept(t, "DocumentReference", "type", element.getType(), -1);
10381    }
10382    for (int i = 0; i < element.getCategory().size(); i++) {
10383      composeCodeableConcept(t, "DocumentReference", "category", element.getCategory().get(i), i);
10384    }
10385    if (element.hasSubject()) {
10386      composeReference(t, "DocumentReference", "subject", element.getSubject(), -1);
10387    }
10388    for (int i = 0; i < element.getContext().size(); i++) {
10389      composeReference(t, "DocumentReference", "context", element.getContext().get(i), i);
10390    }
10391    for (int i = 0; i < element.getEvent().size(); i++) {
10392      composeCodeableReference(t, "DocumentReference", "event", element.getEvent().get(i), i);
10393    }
10394    if (element.hasFacilityType()) {
10395      composeCodeableConcept(t, "DocumentReference", "facilityType", element.getFacilityType(), -1);
10396    }
10397    if (element.hasPracticeSetting()) {
10398      composeCodeableConcept(t, "DocumentReference", "practiceSetting", element.getPracticeSetting(), -1);
10399    }
10400    if (element.hasPeriod()) {
10401      composePeriod(t, "DocumentReference", "period", element.getPeriod(), -1);
10402    }
10403    if (element.hasDateElement()) {
10404      composeInstant(t, "DocumentReference", "date", element.getDateElement(), -1);
10405    }
10406    for (int i = 0; i < element.getAuthor().size(); i++) {
10407      composeReference(t, "DocumentReference", "author", element.getAuthor().get(i), i);
10408    }
10409    for (int i = 0; i < element.getAttester().size(); i++) {
10410      composeDocumentReferenceAttesterComponent(t, "DocumentReference", "attester", element.getAttester().get(i), i);
10411    }
10412    if (element.hasCustodian()) {
10413      composeReference(t, "DocumentReference", "custodian", element.getCustodian(), -1);
10414    }
10415    for (int i = 0; i < element.getRelatesTo().size(); i++) {
10416      composeDocumentReferenceRelatesToComponent(t, "DocumentReference", "relatesTo", element.getRelatesTo().get(i), i);
10417    }
10418    if (element.hasDescriptionElement()) {
10419      composeMarkdown(t, "DocumentReference", "description", element.getDescriptionElement(), -1);
10420    }
10421    for (int i = 0; i < element.getSecurityLabel().size(); i++) {
10422      composeCodeableConcept(t, "DocumentReference", "securityLabel", element.getSecurityLabel().get(i), i);
10423    }
10424    for (int i = 0; i < element.getContent().size(); i++) {
10425      composeDocumentReferenceContentComponent(t, "DocumentReference", "content", element.getContent().get(i), i);
10426    }
10427  }
10428
10429  protected void composeDocumentReferenceAttesterComponent(Complex parent, String parentType, String name, DocumentReference.DocumentReferenceAttesterComponent element, int index) {
10430    if (element == null) 
10431      return;
10432    Complex t;
10433    if (Utilities.noString(parentType))
10434      t = parent;
10435    else {
10436      t = parent.predicate("fhir:"+parentType+'.'+name);
10437    }
10438    composeBackboneElement(t, "attester", name, element, index);
10439    if (element.hasMode()) {
10440      composeCodeableConcept(t, "DocumentReferenceAttesterComponent", "mode", element.getMode(), -1);
10441    }
10442    if (element.hasTimeElement()) {
10443      composeDateTime(t, "DocumentReferenceAttesterComponent", "time", element.getTimeElement(), -1);
10444    }
10445    if (element.hasParty()) {
10446      composeReference(t, "DocumentReferenceAttesterComponent", "party", element.getParty(), -1);
10447    }
10448  }
10449
10450  protected void composeDocumentReferenceRelatesToComponent(Complex parent, String parentType, String name, DocumentReference.DocumentReferenceRelatesToComponent element, int index) {
10451    if (element == null) 
10452      return;
10453    Complex t;
10454    if (Utilities.noString(parentType))
10455      t = parent;
10456    else {
10457      t = parent.predicate("fhir:"+parentType+'.'+name);
10458    }
10459    composeBackboneElement(t, "relatesTo", name, element, index);
10460    if (element.hasCode()) {
10461      composeCodeableConcept(t, "DocumentReferenceRelatesToComponent", "code", element.getCode(), -1);
10462    }
10463    if (element.hasTarget()) {
10464      composeReference(t, "DocumentReferenceRelatesToComponent", "target", element.getTarget(), -1);
10465    }
10466  }
10467
10468  protected void composeDocumentReferenceContentComponent(Complex parent, String parentType, String name, DocumentReference.DocumentReferenceContentComponent element, int index) {
10469    if (element == null) 
10470      return;
10471    Complex t;
10472    if (Utilities.noString(parentType))
10473      t = parent;
10474    else {
10475      t = parent.predicate("fhir:"+parentType+'.'+name);
10476    }
10477    composeBackboneElement(t, "content", name, element, index);
10478    if (element.hasAttachment()) {
10479      composeAttachment(t, "DocumentReferenceContentComponent", "attachment", element.getAttachment(), -1);
10480    }
10481    for (int i = 0; i < element.getProfile().size(); i++) {
10482      composeDocumentReferenceContentProfileComponent(t, "DocumentReferenceContentComponent", "profile", element.getProfile().get(i), i);
10483    }
10484  }
10485
10486  protected void composeDocumentReferenceContentProfileComponent(Complex parent, String parentType, String name, DocumentReference.DocumentReferenceContentProfileComponent element, int index) {
10487    if (element == null) 
10488      return;
10489    Complex t;
10490    if (Utilities.noString(parentType))
10491      t = parent;
10492    else {
10493      t = parent.predicate("fhir:"+parentType+'.'+name);
10494    }
10495    composeBackboneElement(t, "profile", name, element, index);
10496    if (element.hasValue()) {
10497      composeType(t, "DocumentReferenceContentProfileComponent", "value", element.getValue(), -1);
10498    }
10499  }
10500
10501  protected void composeEncounter(Complex parent, String parentType, String name, Encounter element, int index) {
10502    if (element == null) 
10503      return;
10504    Complex t;
10505    if (Utilities.noString(parentType))
10506      t = parent;
10507    else {
10508      t = parent.predicate("fhir:"+parentType+'.'+name);
10509    }
10510    composeDomainResource(t, "Encounter", name, element, index);
10511    for (int i = 0; i < element.getIdentifier().size(); i++) {
10512      composeIdentifier(t, "Encounter", "identifier", element.getIdentifier().get(i), i);
10513    }
10514    if (element.hasStatusElement()) {
10515      composeEnum(t, "Encounter", "status", element.getStatusElement(), -1);
10516    }
10517    for (int i = 0; i < element.getStatusHistory().size(); i++) {
10518      composeEncounterStatusHistoryComponent(t, "Encounter", "statusHistory", element.getStatusHistory().get(i), i);
10519    }
10520    for (int i = 0; i < element.getClass_().size(); i++) {
10521      composeCodeableConcept(t, "Encounter", "class", element.getClass_().get(i), i);
10522    }
10523    for (int i = 0; i < element.getClassHistory().size(); i++) {
10524      composeEncounterClassHistoryComponent(t, "Encounter", "classHistory", element.getClassHistory().get(i), i);
10525    }
10526    if (element.hasPriority()) {
10527      composeCodeableConcept(t, "Encounter", "priority", element.getPriority(), -1);
10528    }
10529    for (int i = 0; i < element.getType().size(); i++) {
10530      composeCodeableConcept(t, "Encounter", "type", element.getType().get(i), i);
10531    }
10532    for (int i = 0; i < element.getServiceType().size(); i++) {
10533      composeCodeableReference(t, "Encounter", "serviceType", element.getServiceType().get(i), i);
10534    }
10535    if (element.hasSubject()) {
10536      composeReference(t, "Encounter", "subject", element.getSubject(), -1);
10537    }
10538    if (element.hasSubjectStatus()) {
10539      composeCodeableConcept(t, "Encounter", "subjectStatus", element.getSubjectStatus(), -1);
10540    }
10541    for (int i = 0; i < element.getEpisodeOfCare().size(); i++) {
10542      composeReference(t, "Encounter", "episodeOfCare", element.getEpisodeOfCare().get(i), i);
10543    }
10544    for (int i = 0; i < element.getBasedOn().size(); i++) {
10545      composeReference(t, "Encounter", "basedOn", element.getBasedOn().get(i), i);
10546    }
10547    for (int i = 0; i < element.getCareTeam().size(); i++) {
10548      composeReference(t, "Encounter", "careTeam", element.getCareTeam().get(i), i);
10549    }
10550    if (element.hasPartOf()) {
10551      composeReference(t, "Encounter", "partOf", element.getPartOf(), -1);
10552    }
10553    if (element.hasServiceProvider()) {
10554      composeReference(t, "Encounter", "serviceProvider", element.getServiceProvider(), -1);
10555    }
10556    for (int i = 0; i < element.getParticipant().size(); i++) {
10557      composeEncounterParticipantComponent(t, "Encounter", "participant", element.getParticipant().get(i), i);
10558    }
10559    for (int i = 0; i < element.getAppointment().size(); i++) {
10560      composeReference(t, "Encounter", "appointment", element.getAppointment().get(i), i);
10561    }
10562    for (int i = 0; i < element.getVirtualService().size(); i++) {
10563      composeVirtualServiceDetail(t, "Encounter", "virtualService", element.getVirtualService().get(i), i);
10564    }
10565    if (element.hasActualPeriod()) {
10566      composePeriod(t, "Encounter", "actualPeriod", element.getActualPeriod(), -1);
10567    }
10568    if (element.hasPlannedStartDateElement()) {
10569      composeDateTime(t, "Encounter", "plannedStartDate", element.getPlannedStartDateElement(), -1);
10570    }
10571    if (element.hasPlannedEndDateElement()) {
10572      composeDateTime(t, "Encounter", "plannedEndDate", element.getPlannedEndDateElement(), -1);
10573    }
10574    if (element.hasLength()) {
10575      composeDuration(t, "Encounter", "length", element.getLength(), -1);
10576    }
10577    for (int i = 0; i < element.getReason().size(); i++) {
10578      composeCodeableReference(t, "Encounter", "reason", element.getReason().get(i), i);
10579    }
10580    for (int i = 0; i < element.getDiagnosis().size(); i++) {
10581      composeEncounterDiagnosisComponent(t, "Encounter", "diagnosis", element.getDiagnosis().get(i), i);
10582    }
10583    for (int i = 0; i < element.getAccount().size(); i++) {
10584      composeReference(t, "Encounter", "account", element.getAccount().get(i), i);
10585    }
10586    if (element.hasAdmission()) {
10587      composeEncounterAdmissionComponent(t, "Encounter", "admission", element.getAdmission(), -1);
10588    }
10589    for (int i = 0; i < element.getLocation().size(); i++) {
10590      composeEncounterLocationComponent(t, "Encounter", "location", element.getLocation().get(i), i);
10591    }
10592  }
10593
10594  protected void composeEncounterStatusHistoryComponent(Complex parent, String parentType, String name, Encounter.StatusHistoryComponent element, int index) {
10595    if (element == null) 
10596      return;
10597    Complex t;
10598    if (Utilities.noString(parentType))
10599      t = parent;
10600    else {
10601      t = parent.predicate("fhir:"+parentType+'.'+name);
10602    }
10603    composeBackboneElement(t, "statusHistory", name, element, index);
10604    if (element.hasStatusElement()) {
10605      composeEnum(t, "StatusHistoryComponent", "status", element.getStatusElement(), -1);
10606    }
10607    if (element.hasPeriod()) {
10608      composePeriod(t, "StatusHistoryComponent", "period", element.getPeriod(), -1);
10609    }
10610  }
10611
10612  protected void composeEncounterClassHistoryComponent(Complex parent, String parentType, String name, Encounter.ClassHistoryComponent element, int index) {
10613    if (element == null) 
10614      return;
10615    Complex t;
10616    if (Utilities.noString(parentType))
10617      t = parent;
10618    else {
10619      t = parent.predicate("fhir:"+parentType+'.'+name);
10620    }
10621    composeBackboneElement(t, "classHistory", name, element, index);
10622    if (element.hasClass_()) {
10623      composeCoding(t, "ClassHistoryComponent", "class", element.getClass_(), -1);
10624    }
10625    if (element.hasPeriod()) {
10626      composePeriod(t, "ClassHistoryComponent", "period", element.getPeriod(), -1);
10627    }
10628  }
10629
10630  protected void composeEncounterParticipantComponent(Complex parent, String parentType, String name, Encounter.EncounterParticipantComponent element, int index) {
10631    if (element == null) 
10632      return;
10633    Complex t;
10634    if (Utilities.noString(parentType))
10635      t = parent;
10636    else {
10637      t = parent.predicate("fhir:"+parentType+'.'+name);
10638    }
10639    composeBackboneElement(t, "participant", name, element, index);
10640    for (int i = 0; i < element.getType().size(); i++) {
10641      composeCodeableConcept(t, "EncounterParticipantComponent", "type", element.getType().get(i), i);
10642    }
10643    if (element.hasPeriod()) {
10644      composePeriod(t, "EncounterParticipantComponent", "period", element.getPeriod(), -1);
10645    }
10646    if (element.hasActor()) {
10647      composeReference(t, "EncounterParticipantComponent", "actor", element.getActor(), -1);
10648    }
10649  }
10650
10651  protected void composeEncounterDiagnosisComponent(Complex parent, String parentType, String name, Encounter.DiagnosisComponent element, int index) {
10652    if (element == null) 
10653      return;
10654    Complex t;
10655    if (Utilities.noString(parentType))
10656      t = parent;
10657    else {
10658      t = parent.predicate("fhir:"+parentType+'.'+name);
10659    }
10660    composeBackboneElement(t, "diagnosis", name, element, index);
10661    if (element.hasCondition()) {
10662      composeReference(t, "DiagnosisComponent", "condition", element.getCondition(), -1);
10663    }
10664    if (element.hasUse()) {
10665      composeCodeableConcept(t, "DiagnosisComponent", "use", element.getUse(), -1);
10666    }
10667    if (element.hasRankElement()) {
10668      composePositiveInt(t, "DiagnosisComponent", "rank", element.getRankElement(), -1);
10669    }
10670  }
10671
10672  protected void composeEncounterAdmissionComponent(Complex parent, String parentType, String name, Encounter.EncounterAdmissionComponent element, int index) {
10673    if (element == null) 
10674      return;
10675    Complex t;
10676    if (Utilities.noString(parentType))
10677      t = parent;
10678    else {
10679      t = parent.predicate("fhir:"+parentType+'.'+name);
10680    }
10681    composeBackboneElement(t, "admission", name, element, index);
10682    if (element.hasPreAdmissionIdentifier()) {
10683      composeIdentifier(t, "EncounterAdmissionComponent", "preAdmissionIdentifier", element.getPreAdmissionIdentifier(), -1);
10684    }
10685    if (element.hasOrigin()) {
10686      composeReference(t, "EncounterAdmissionComponent", "origin", element.getOrigin(), -1);
10687    }
10688    if (element.hasAdmitSource()) {
10689      composeCodeableConcept(t, "EncounterAdmissionComponent", "admitSource", element.getAdmitSource(), -1);
10690    }
10691    if (element.hasReAdmission()) {
10692      composeCodeableConcept(t, "EncounterAdmissionComponent", "reAdmission", element.getReAdmission(), -1);
10693    }
10694    for (int i = 0; i < element.getDietPreference().size(); i++) {
10695      composeCodeableConcept(t, "EncounterAdmissionComponent", "dietPreference", element.getDietPreference().get(i), i);
10696    }
10697    for (int i = 0; i < element.getSpecialCourtesy().size(); i++) {
10698      composeCodeableConcept(t, "EncounterAdmissionComponent", "specialCourtesy", element.getSpecialCourtesy().get(i), i);
10699    }
10700    for (int i = 0; i < element.getSpecialArrangement().size(); i++) {
10701      composeCodeableConcept(t, "EncounterAdmissionComponent", "specialArrangement", element.getSpecialArrangement().get(i), i);
10702    }
10703    if (element.hasDestination()) {
10704      composeReference(t, "EncounterAdmissionComponent", "destination", element.getDestination(), -1);
10705    }
10706    if (element.hasDischargeDisposition()) {
10707      composeCodeableConcept(t, "EncounterAdmissionComponent", "dischargeDisposition", element.getDischargeDisposition(), -1);
10708    }
10709  }
10710
10711  protected void composeEncounterLocationComponent(Complex parent, String parentType, String name, Encounter.EncounterLocationComponent element, int index) {
10712    if (element == null) 
10713      return;
10714    Complex t;
10715    if (Utilities.noString(parentType))
10716      t = parent;
10717    else {
10718      t = parent.predicate("fhir:"+parentType+'.'+name);
10719    }
10720    composeBackboneElement(t, "location", name, element, index);
10721    if (element.hasLocation()) {
10722      composeReference(t, "EncounterLocationComponent", "location", element.getLocation(), -1);
10723    }
10724    if (element.hasStatusElement()) {
10725      composeEnum(t, "EncounterLocationComponent", "status", element.getStatusElement(), -1);
10726    }
10727    if (element.hasForm()) {
10728      composeCodeableConcept(t, "EncounterLocationComponent", "form", element.getForm(), -1);
10729    }
10730    if (element.hasPeriod()) {
10731      composePeriod(t, "EncounterLocationComponent", "period", element.getPeriod(), -1);
10732    }
10733  }
10734
10735  protected void composeEndpoint(Complex parent, String parentType, String name, Endpoint element, int index) {
10736    if (element == null) 
10737      return;
10738    Complex t;
10739    if (Utilities.noString(parentType))
10740      t = parent;
10741    else {
10742      t = parent.predicate("fhir:"+parentType+'.'+name);
10743    }
10744    composeDomainResource(t, "Endpoint", name, element, index);
10745    for (int i = 0; i < element.getIdentifier().size(); i++) {
10746      composeIdentifier(t, "Endpoint", "identifier", element.getIdentifier().get(i), i);
10747    }
10748    if (element.hasStatusElement()) {
10749      composeEnum(t, "Endpoint", "status", element.getStatusElement(), -1);
10750    }
10751    for (int i = 0; i < element.getConnectionType().size(); i++) {
10752      composeCodeableConcept(t, "Endpoint", "connectionType", element.getConnectionType().get(i), i);
10753    }
10754    if (element.hasNameElement()) {
10755      composeString(t, "Endpoint", "name", element.getNameElement(), -1);
10756    }
10757    if (element.hasDescriptionElement()) {
10758      composeString(t, "Endpoint", "description", element.getDescriptionElement(), -1);
10759    }
10760    for (int i = 0; i < element.getEnvironmentType().size(); i++) {
10761      composeCodeableConcept(t, "Endpoint", "environmentType", element.getEnvironmentType().get(i), i);
10762    }
10763    if (element.hasManagingOrganization()) {
10764      composeReference(t, "Endpoint", "managingOrganization", element.getManagingOrganization(), -1);
10765    }
10766    for (int i = 0; i < element.getContact().size(); i++) {
10767      composeContactPoint(t, "Endpoint", "contact", element.getContact().get(i), i);
10768    }
10769    if (element.hasPeriod()) {
10770      composePeriod(t, "Endpoint", "period", element.getPeriod(), -1);
10771    }
10772    for (int i = 0; i < element.getPayloadType().size(); i++) {
10773      composeCodeableConcept(t, "Endpoint", "payloadType", element.getPayloadType().get(i), i);
10774    }
10775    for (int i = 0; i < element.getPayloadMimeType().size(); i++) {
10776      composeCode(t, "Endpoint", "payloadMimeType", element.getPayloadMimeType().get(i), i);
10777    }
10778    if (element.hasAddressElement()) {
10779      composeUrl(t, "Endpoint", "address", element.getAddressElement(), -1);
10780    }
10781    for (int i = 0; i < element.getHeader().size(); i++) {
10782      composeString(t, "Endpoint", "header", element.getHeader().get(i), i);
10783    }
10784  }
10785
10786  protected void composeEnrollmentRequest(Complex parent, String parentType, String name, EnrollmentRequest element, int index) {
10787    if (element == null) 
10788      return;
10789    Complex t;
10790    if (Utilities.noString(parentType))
10791      t = parent;
10792    else {
10793      t = parent.predicate("fhir:"+parentType+'.'+name);
10794    }
10795    composeDomainResource(t, "EnrollmentRequest", name, element, index);
10796    for (int i = 0; i < element.getIdentifier().size(); i++) {
10797      composeIdentifier(t, "EnrollmentRequest", "identifier", element.getIdentifier().get(i), i);
10798    }
10799    if (element.hasStatusElement()) {
10800      composeEnum(t, "EnrollmentRequest", "status", element.getStatusElement(), -1);
10801    }
10802    if (element.hasCreatedElement()) {
10803      composeDateTime(t, "EnrollmentRequest", "created", element.getCreatedElement(), -1);
10804    }
10805    if (element.hasInsurer()) {
10806      composeReference(t, "EnrollmentRequest", "insurer", element.getInsurer(), -1);
10807    }
10808    if (element.hasProvider()) {
10809      composeReference(t, "EnrollmentRequest", "provider", element.getProvider(), -1);
10810    }
10811    if (element.hasCandidate()) {
10812      composeReference(t, "EnrollmentRequest", "candidate", element.getCandidate(), -1);
10813    }
10814    if (element.hasCoverage()) {
10815      composeReference(t, "EnrollmentRequest", "coverage", element.getCoverage(), -1);
10816    }
10817  }
10818
10819  protected void composeEnrollmentResponse(Complex parent, String parentType, String name, EnrollmentResponse element, int index) {
10820    if (element == null) 
10821      return;
10822    Complex t;
10823    if (Utilities.noString(parentType))
10824      t = parent;
10825    else {
10826      t = parent.predicate("fhir:"+parentType+'.'+name);
10827    }
10828    composeDomainResource(t, "EnrollmentResponse", name, element, index);
10829    for (int i = 0; i < element.getIdentifier().size(); i++) {
10830      composeIdentifier(t, "EnrollmentResponse", "identifier", element.getIdentifier().get(i), i);
10831    }
10832    if (element.hasStatusElement()) {
10833      composeEnum(t, "EnrollmentResponse", "status", element.getStatusElement(), -1);
10834    }
10835    if (element.hasRequest()) {
10836      composeReference(t, "EnrollmentResponse", "request", element.getRequest(), -1);
10837    }
10838    if (element.hasOutcomeElement()) {
10839      composeEnum(t, "EnrollmentResponse", "outcome", element.getOutcomeElement(), -1);
10840    }
10841    if (element.hasDispositionElement()) {
10842      composeString(t, "EnrollmentResponse", "disposition", element.getDispositionElement(), -1);
10843    }
10844    if (element.hasCreatedElement()) {
10845      composeDateTime(t, "EnrollmentResponse", "created", element.getCreatedElement(), -1);
10846    }
10847    if (element.hasOrganization()) {
10848      composeReference(t, "EnrollmentResponse", "organization", element.getOrganization(), -1);
10849    }
10850    if (element.hasRequestProvider()) {
10851      composeReference(t, "EnrollmentResponse", "requestProvider", element.getRequestProvider(), -1);
10852    }
10853  }
10854
10855  protected void composeEpisodeOfCare(Complex parent, String parentType, String name, EpisodeOfCare element, int index) {
10856    if (element == null) 
10857      return;
10858    Complex t;
10859    if (Utilities.noString(parentType))
10860      t = parent;
10861    else {
10862      t = parent.predicate("fhir:"+parentType+'.'+name);
10863    }
10864    composeDomainResource(t, "EpisodeOfCare", name, element, index);
10865    for (int i = 0; i < element.getIdentifier().size(); i++) {
10866      composeIdentifier(t, "EpisodeOfCare", "identifier", element.getIdentifier().get(i), i);
10867    }
10868    if (element.hasStatusElement()) {
10869      composeEnum(t, "EpisodeOfCare", "status", element.getStatusElement(), -1);
10870    }
10871    for (int i = 0; i < element.getStatusHistory().size(); i++) {
10872      composeEpisodeOfCareStatusHistoryComponent(t, "EpisodeOfCare", "statusHistory", element.getStatusHistory().get(i), i);
10873    }
10874    for (int i = 0; i < element.getType().size(); i++) {
10875      composeCodeableConcept(t, "EpisodeOfCare", "type", element.getType().get(i), i);
10876    }
10877    for (int i = 0; i < element.getDiagnosis().size(); i++) {
10878      composeEpisodeOfCareDiagnosisComponent(t, "EpisodeOfCare", "diagnosis", element.getDiagnosis().get(i), i);
10879    }
10880    if (element.hasPatient()) {
10881      composeReference(t, "EpisodeOfCare", "patient", element.getPatient(), -1);
10882    }
10883    if (element.hasManagingOrganization()) {
10884      composeReference(t, "EpisodeOfCare", "managingOrganization", element.getManagingOrganization(), -1);
10885    }
10886    if (element.hasPeriod()) {
10887      composePeriod(t, "EpisodeOfCare", "period", element.getPeriod(), -1);
10888    }
10889    for (int i = 0; i < element.getReferralRequest().size(); i++) {
10890      composeReference(t, "EpisodeOfCare", "referralRequest", element.getReferralRequest().get(i), i);
10891    }
10892    if (element.hasCareManager()) {
10893      composeReference(t, "EpisodeOfCare", "careManager", element.getCareManager(), -1);
10894    }
10895    for (int i = 0; i < element.getCareTeam().size(); i++) {
10896      composeReference(t, "EpisodeOfCare", "careTeam", element.getCareTeam().get(i), i);
10897    }
10898    for (int i = 0; i < element.getAccount().size(); i++) {
10899      composeReference(t, "EpisodeOfCare", "account", element.getAccount().get(i), i);
10900    }
10901  }
10902
10903  protected void composeEpisodeOfCareStatusHistoryComponent(Complex parent, String parentType, String name, EpisodeOfCare.EpisodeOfCareStatusHistoryComponent element, int index) {
10904    if (element == null) 
10905      return;
10906    Complex t;
10907    if (Utilities.noString(parentType))
10908      t = parent;
10909    else {
10910      t = parent.predicate("fhir:"+parentType+'.'+name);
10911    }
10912    composeBackboneElement(t, "statusHistory", name, element, index);
10913    if (element.hasStatusElement()) {
10914      composeEnum(t, "EpisodeOfCareStatusHistoryComponent", "status", element.getStatusElement(), -1);
10915    }
10916    if (element.hasPeriod()) {
10917      composePeriod(t, "EpisodeOfCareStatusHistoryComponent", "period", element.getPeriod(), -1);
10918    }
10919  }
10920
10921  protected void composeEpisodeOfCareDiagnosisComponent(Complex parent, String parentType, String name, EpisodeOfCare.DiagnosisComponent element, int index) {
10922    if (element == null) 
10923      return;
10924    Complex t;
10925    if (Utilities.noString(parentType))
10926      t = parent;
10927    else {
10928      t = parent.predicate("fhir:"+parentType+'.'+name);
10929    }
10930    composeBackboneElement(t, "diagnosis", name, element, index);
10931    if (element.hasCondition()) {
10932      composeCodeableReference(t, "DiagnosisComponent", "condition", element.getCondition(), -1);
10933    }
10934    if (element.hasRole()) {
10935      composeCodeableConcept(t, "DiagnosisComponent", "role", element.getRole(), -1);
10936    }
10937    if (element.hasRankElement()) {
10938      composePositiveInt(t, "DiagnosisComponent", "rank", element.getRankElement(), -1);
10939    }
10940  }
10941
10942  protected void composeEventDefinition(Complex parent, String parentType, String name, EventDefinition element, int index) {
10943    if (element == null) 
10944      return;
10945    Complex t;
10946    if (Utilities.noString(parentType))
10947      t = parent;
10948    else {
10949      t = parent.predicate("fhir:"+parentType+'.'+name);
10950    }
10951    composeMetadataResource(t, "EventDefinition", name, element, index);
10952    if (element.hasUrlElement()) {
10953      composeUri(t, "EventDefinition", "url", element.getUrlElement(), -1);
10954    }
10955    for (int i = 0; i < element.getIdentifier().size(); i++) {
10956      composeIdentifier(t, "EventDefinition", "identifier", element.getIdentifier().get(i), i);
10957    }
10958    if (element.hasVersionElement()) {
10959      composeString(t, "EventDefinition", "version", element.getVersionElement(), -1);
10960    }
10961    if (element.hasNameElement()) {
10962      composeString(t, "EventDefinition", "name", element.getNameElement(), -1);
10963    }
10964    if (element.hasTitleElement()) {
10965      composeString(t, "EventDefinition", "title", element.getTitleElement(), -1);
10966    }
10967    if (element.hasSubtitleElement()) {
10968      composeString(t, "EventDefinition", "subtitle", element.getSubtitleElement(), -1);
10969    }
10970    if (element.hasStatusElement()) {
10971      composeEnum(t, "EventDefinition", "status", element.getStatusElement(), -1);
10972    }
10973    if (element.hasExperimentalElement()) {
10974      composeBoolean(t, "EventDefinition", "experimental", element.getExperimentalElement(), -1);
10975    }
10976    if (element.hasSubject()) {
10977      composeType(t, "EventDefinition", "subject", element.getSubject(), -1);
10978    }
10979    if (element.hasDateElement()) {
10980      composeDateTime(t, "EventDefinition", "date", element.getDateElement(), -1);
10981    }
10982    if (element.hasPublisherElement()) {
10983      composeString(t, "EventDefinition", "publisher", element.getPublisherElement(), -1);
10984    }
10985    for (int i = 0; i < element.getContact().size(); i++) {
10986      composeContactDetail(t, "EventDefinition", "contact", element.getContact().get(i), i);
10987    }
10988    if (element.hasDescriptionElement()) {
10989      composeMarkdown(t, "EventDefinition", "description", element.getDescriptionElement(), -1);
10990    }
10991    for (int i = 0; i < element.getUseContext().size(); i++) {
10992      composeUsageContext(t, "EventDefinition", "useContext", element.getUseContext().get(i), i);
10993    }
10994    for (int i = 0; i < element.getJurisdiction().size(); i++) {
10995      composeCodeableConcept(t, "EventDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
10996    }
10997    if (element.hasPurposeElement()) {
10998      composeMarkdown(t, "EventDefinition", "purpose", element.getPurposeElement(), -1);
10999    }
11000    if (element.hasUsageElement()) {
11001      composeString(t, "EventDefinition", "usage", element.getUsageElement(), -1);
11002    }
11003    if (element.hasCopyrightElement()) {
11004      composeMarkdown(t, "EventDefinition", "copyright", element.getCopyrightElement(), -1);
11005    }
11006    if (element.hasApprovalDateElement()) {
11007      composeDate(t, "EventDefinition", "approvalDate", element.getApprovalDateElement(), -1);
11008    }
11009    if (element.hasLastReviewDateElement()) {
11010      composeDate(t, "EventDefinition", "lastReviewDate", element.getLastReviewDateElement(), -1);
11011    }
11012    if (element.hasEffectivePeriod()) {
11013      composePeriod(t, "EventDefinition", "effectivePeriod", element.getEffectivePeriod(), -1);
11014    }
11015    for (int i = 0; i < element.getTopic().size(); i++) {
11016      composeCodeableConcept(t, "EventDefinition", "topic", element.getTopic().get(i), i);
11017    }
11018    for (int i = 0; i < element.getAuthor().size(); i++) {
11019      composeContactDetail(t, "EventDefinition", "author", element.getAuthor().get(i), i);
11020    }
11021    for (int i = 0; i < element.getEditor().size(); i++) {
11022      composeContactDetail(t, "EventDefinition", "editor", element.getEditor().get(i), i);
11023    }
11024    for (int i = 0; i < element.getReviewer().size(); i++) {
11025      composeContactDetail(t, "EventDefinition", "reviewer", element.getReviewer().get(i), i);
11026    }
11027    for (int i = 0; i < element.getEndorser().size(); i++) {
11028      composeContactDetail(t, "EventDefinition", "endorser", element.getEndorser().get(i), i);
11029    }
11030    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
11031      composeRelatedArtifact(t, "EventDefinition", "relatedArtifact", element.getRelatedArtifact().get(i), i);
11032    }
11033    for (int i = 0; i < element.getTrigger().size(); i++) {
11034      composeTriggerDefinition(t, "EventDefinition", "trigger", element.getTrigger().get(i), i);
11035    }
11036  }
11037
11038  protected void composeEvidence(Complex parent, String parentType, String name, Evidence element, int index) {
11039    if (element == null) 
11040      return;
11041    Complex t;
11042    if (Utilities.noString(parentType))
11043      t = parent;
11044    else {
11045      t = parent.predicate("fhir:"+parentType+'.'+name);
11046    }
11047    composeMetadataResource(t, "Evidence", name, element, index);
11048    if (element.hasUrlElement()) {
11049      composeUri(t, "Evidence", "url", element.getUrlElement(), -1);
11050    }
11051    for (int i = 0; i < element.getIdentifier().size(); i++) {
11052      composeIdentifier(t, "Evidence", "identifier", element.getIdentifier().get(i), i);
11053    }
11054    if (element.hasVersionElement()) {
11055      composeString(t, "Evidence", "version", element.getVersionElement(), -1);
11056    }
11057    if (element.hasNameElement()) {
11058      composeString(t, "Evidence", "name", element.getNameElement(), -1);
11059    }
11060    if (element.hasTitleElement()) {
11061      composeString(t, "Evidence", "title", element.getTitleElement(), -1);
11062    }
11063    if (element.hasCiteAs()) {
11064      composeType(t, "Evidence", "citeAs", element.getCiteAs(), -1);
11065    }
11066    if (element.hasStatusElement()) {
11067      composeEnum(t, "Evidence", "status", element.getStatusElement(), -1);
11068    }
11069    if (element.hasExperimentalElement()) {
11070      composeBoolean(t, "Evidence", "experimental", element.getExperimentalElement(), -1);
11071    }
11072    if (element.hasDateElement()) {
11073      composeDateTime(t, "Evidence", "date", element.getDateElement(), -1);
11074    }
11075    for (int i = 0; i < element.getUseContext().size(); i++) {
11076      composeUsageContext(t, "Evidence", "useContext", element.getUseContext().get(i), i);
11077    }
11078    if (element.hasApprovalDateElement()) {
11079      composeDate(t, "Evidence", "approvalDate", element.getApprovalDateElement(), -1);
11080    }
11081    if (element.hasLastReviewDateElement()) {
11082      composeDate(t, "Evidence", "lastReviewDate", element.getLastReviewDateElement(), -1);
11083    }
11084    if (element.hasPublisherElement()) {
11085      composeString(t, "Evidence", "publisher", element.getPublisherElement(), -1);
11086    }
11087    for (int i = 0; i < element.getContact().size(); i++) {
11088      composeContactDetail(t, "Evidence", "contact", element.getContact().get(i), i);
11089    }
11090    for (int i = 0; i < element.getAuthor().size(); i++) {
11091      composeContactDetail(t, "Evidence", "author", element.getAuthor().get(i), i);
11092    }
11093    for (int i = 0; i < element.getEditor().size(); i++) {
11094      composeContactDetail(t, "Evidence", "editor", element.getEditor().get(i), i);
11095    }
11096    for (int i = 0; i < element.getReviewer().size(); i++) {
11097      composeContactDetail(t, "Evidence", "reviewer", element.getReviewer().get(i), i);
11098    }
11099    for (int i = 0; i < element.getEndorser().size(); i++) {
11100      composeContactDetail(t, "Evidence", "endorser", element.getEndorser().get(i), i);
11101    }
11102    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
11103      composeRelatedArtifact(t, "Evidence", "relatedArtifact", element.getRelatedArtifact().get(i), i);
11104    }
11105    if (element.hasDescriptionElement()) {
11106      composeMarkdown(t, "Evidence", "description", element.getDescriptionElement(), -1);
11107    }
11108    if (element.hasAssertionElement()) {
11109      composeMarkdown(t, "Evidence", "assertion", element.getAssertionElement(), -1);
11110    }
11111    for (int i = 0; i < element.getNote().size(); i++) {
11112      composeAnnotation(t, "Evidence", "note", element.getNote().get(i), i);
11113    }
11114    for (int i = 0; i < element.getVariableDefinition().size(); i++) {
11115      composeEvidenceVariableDefinitionComponent(t, "Evidence", "variableDefinition", element.getVariableDefinition().get(i), i);
11116    }
11117    if (element.hasSynthesisType()) {
11118      composeCodeableConcept(t, "Evidence", "synthesisType", element.getSynthesisType(), -1);
11119    }
11120    for (int i = 0; i < element.getStudyDesign().size(); i++) {
11121      composeCodeableConcept(t, "Evidence", "studyDesign", element.getStudyDesign().get(i), i);
11122    }
11123    for (int i = 0; i < element.getStatistic().size(); i++) {
11124      composeEvidenceStatisticComponent(t, "Evidence", "statistic", element.getStatistic().get(i), i);
11125    }
11126    for (int i = 0; i < element.getCertainty().size(); i++) {
11127      composeEvidenceCertaintyComponent(t, "Evidence", "certainty", element.getCertainty().get(i), i);
11128    }
11129  }
11130
11131  protected void composeEvidenceVariableDefinitionComponent(Complex parent, String parentType, String name, Evidence.EvidenceVariableDefinitionComponent element, int index) {
11132    if (element == null) 
11133      return;
11134    Complex t;
11135    if (Utilities.noString(parentType))
11136      t = parent;
11137    else {
11138      t = parent.predicate("fhir:"+parentType+'.'+name);
11139    }
11140    composeBackboneElement(t, "variableDefinition", name, element, index);
11141    if (element.hasDescriptionElement()) {
11142      composeMarkdown(t, "EvidenceVariableDefinitionComponent", "description", element.getDescriptionElement(), -1);
11143    }
11144    for (int i = 0; i < element.getNote().size(); i++) {
11145      composeAnnotation(t, "EvidenceVariableDefinitionComponent", "note", element.getNote().get(i), i);
11146    }
11147    if (element.hasVariableRole()) {
11148      composeCodeableConcept(t, "EvidenceVariableDefinitionComponent", "variableRole", element.getVariableRole(), -1);
11149    }
11150    if (element.hasObserved()) {
11151      composeReference(t, "EvidenceVariableDefinitionComponent", "observed", element.getObserved(), -1);
11152    }
11153    if (element.hasIntended()) {
11154      composeReference(t, "EvidenceVariableDefinitionComponent", "intended", element.getIntended(), -1);
11155    }
11156    if (element.hasDirectnessMatch()) {
11157      composeCodeableConcept(t, "EvidenceVariableDefinitionComponent", "directnessMatch", element.getDirectnessMatch(), -1);
11158    }
11159  }
11160
11161  protected void composeEvidenceStatisticComponent(Complex parent, String parentType, String name, Evidence.EvidenceStatisticComponent element, int index) {
11162    if (element == null) 
11163      return;
11164    Complex t;
11165    if (Utilities.noString(parentType))
11166      t = parent;
11167    else {
11168      t = parent.predicate("fhir:"+parentType+'.'+name);
11169    }
11170    composeBackboneElement(t, "statistic", name, element, index);
11171    if (element.hasDescriptionElement()) {
11172      composeString(t, "EvidenceStatisticComponent", "description", element.getDescriptionElement(), -1);
11173    }
11174    for (int i = 0; i < element.getNote().size(); i++) {
11175      composeAnnotation(t, "EvidenceStatisticComponent", "note", element.getNote().get(i), i);
11176    }
11177    if (element.hasStatisticType()) {
11178      composeCodeableConcept(t, "EvidenceStatisticComponent", "statisticType", element.getStatisticType(), -1);
11179    }
11180    if (element.hasCategory()) {
11181      composeCodeableConcept(t, "EvidenceStatisticComponent", "category", element.getCategory(), -1);
11182    }
11183    if (element.hasQuantity()) {
11184      composeQuantity(t, "EvidenceStatisticComponent", "quantity", element.getQuantity(), -1);
11185    }
11186    if (element.hasNumberOfEventsElement()) {
11187      composeUnsignedInt(t, "EvidenceStatisticComponent", "numberOfEvents", element.getNumberOfEventsElement(), -1);
11188    }
11189    if (element.hasNumberAffectedElement()) {
11190      composeUnsignedInt(t, "EvidenceStatisticComponent", "numberAffected", element.getNumberAffectedElement(), -1);
11191    }
11192    if (element.hasSampleSize()) {
11193      composeEvidenceStatisticSampleSizeComponent(t, "EvidenceStatisticComponent", "sampleSize", element.getSampleSize(), -1);
11194    }
11195    for (int i = 0; i < element.getAttributeEstimate().size(); i++) {
11196      composeEvidenceStatisticAttributeEstimateComponent(t, "EvidenceStatisticComponent", "attributeEstimate", element.getAttributeEstimate().get(i), i);
11197    }
11198    for (int i = 0; i < element.getModelCharacteristic().size(); i++) {
11199      composeEvidenceStatisticModelCharacteristicComponent(t, "EvidenceStatisticComponent", "modelCharacteristic", element.getModelCharacteristic().get(i), i);
11200    }
11201  }
11202
11203  protected void composeEvidenceStatisticSampleSizeComponent(Complex parent, String parentType, String name, Evidence.EvidenceStatisticSampleSizeComponent element, int index) {
11204    if (element == null) 
11205      return;
11206    Complex t;
11207    if (Utilities.noString(parentType))
11208      t = parent;
11209    else {
11210      t = parent.predicate("fhir:"+parentType+'.'+name);
11211    }
11212    composeBackboneElement(t, "sampleSize", name, element, index);
11213    if (element.hasDescriptionElement()) {
11214      composeString(t, "EvidenceStatisticSampleSizeComponent", "description", element.getDescriptionElement(), -1);
11215    }
11216    for (int i = 0; i < element.getNote().size(); i++) {
11217      composeAnnotation(t, "EvidenceStatisticSampleSizeComponent", "note", element.getNote().get(i), i);
11218    }
11219    if (element.hasNumberOfStudiesElement()) {
11220      composeUnsignedInt(t, "EvidenceStatisticSampleSizeComponent", "numberOfStudies", element.getNumberOfStudiesElement(), -1);
11221    }
11222    if (element.hasNumberOfParticipantsElement()) {
11223      composeUnsignedInt(t, "EvidenceStatisticSampleSizeComponent", "numberOfParticipants", element.getNumberOfParticipantsElement(), -1);
11224    }
11225    if (element.hasKnownDataCountElement()) {
11226      composeUnsignedInt(t, "EvidenceStatisticSampleSizeComponent", "knownDataCount", element.getKnownDataCountElement(), -1);
11227    }
11228  }
11229
11230  protected void composeEvidenceStatisticAttributeEstimateComponent(Complex parent, String parentType, String name, Evidence.EvidenceStatisticAttributeEstimateComponent element, int index) {
11231    if (element == null) 
11232      return;
11233    Complex t;
11234    if (Utilities.noString(parentType))
11235      t = parent;
11236    else {
11237      t = parent.predicate("fhir:"+parentType+'.'+name);
11238    }
11239    composeBackboneElement(t, "attributeEstimate", name, element, index);
11240    if (element.hasDescriptionElement()) {
11241      composeString(t, "EvidenceStatisticAttributeEstimateComponent", "description", element.getDescriptionElement(), -1);
11242    }
11243    for (int i = 0; i < element.getNote().size(); i++) {
11244      composeAnnotation(t, "EvidenceStatisticAttributeEstimateComponent", "note", element.getNote().get(i), i);
11245    }
11246    if (element.hasType()) {
11247      composeCodeableConcept(t, "EvidenceStatisticAttributeEstimateComponent", "type", element.getType(), -1);
11248    }
11249    if (element.hasQuantity()) {
11250      composeQuantity(t, "EvidenceStatisticAttributeEstimateComponent", "quantity", element.getQuantity(), -1);
11251    }
11252    if (element.hasLevelElement()) {
11253      composeDecimal(t, "EvidenceStatisticAttributeEstimateComponent", "level", element.getLevelElement(), -1);
11254    }
11255    if (element.hasRange()) {
11256      composeRange(t, "EvidenceStatisticAttributeEstimateComponent", "range", element.getRange(), -1);
11257    }
11258    for (int i = 0; i < element.getAttributeEstimate().size(); i++) {
11259      composeEvidenceStatisticAttributeEstimateComponent(t, "EvidenceStatisticAttributeEstimateComponent", "attributeEstimate", element.getAttributeEstimate().get(i), i);
11260    }
11261  }
11262
11263  protected void composeEvidenceStatisticModelCharacteristicComponent(Complex parent, String parentType, String name, Evidence.EvidenceStatisticModelCharacteristicComponent element, int index) {
11264    if (element == null) 
11265      return;
11266    Complex t;
11267    if (Utilities.noString(parentType))
11268      t = parent;
11269    else {
11270      t = parent.predicate("fhir:"+parentType+'.'+name);
11271    }
11272    composeBackboneElement(t, "modelCharacteristic", name, element, index);
11273    if (element.hasCode()) {
11274      composeCodeableConcept(t, "EvidenceStatisticModelCharacteristicComponent", "code", element.getCode(), -1);
11275    }
11276    if (element.hasValue()) {
11277      composeQuantity(t, "EvidenceStatisticModelCharacteristicComponent", "value", element.getValue(), -1);
11278    }
11279    for (int i = 0; i < element.getVariable().size(); i++) {
11280      composeEvidenceStatisticModelCharacteristicVariableComponent(t, "EvidenceStatisticModelCharacteristicComponent", "variable", element.getVariable().get(i), i);
11281    }
11282    for (int i = 0; i < element.getAttributeEstimate().size(); i++) {
11283      composeEvidenceStatisticAttributeEstimateComponent(t, "EvidenceStatisticModelCharacteristicComponent", "attributeEstimate", element.getAttributeEstimate().get(i), i);
11284    }
11285  }
11286
11287  protected void composeEvidenceStatisticModelCharacteristicVariableComponent(Complex parent, String parentType, String name, Evidence.EvidenceStatisticModelCharacteristicVariableComponent element, int index) {
11288    if (element == null) 
11289      return;
11290    Complex t;
11291    if (Utilities.noString(parentType))
11292      t = parent;
11293    else {
11294      t = parent.predicate("fhir:"+parentType+'.'+name);
11295    }
11296    composeBackboneElement(t, "variable", name, element, index);
11297    if (element.hasVariableDefinition()) {
11298      composeReference(t, "EvidenceStatisticModelCharacteristicVariableComponent", "variableDefinition", element.getVariableDefinition(), -1);
11299    }
11300    if (element.hasHandlingElement()) {
11301      composeEnum(t, "EvidenceStatisticModelCharacteristicVariableComponent", "handling", element.getHandlingElement(), -1);
11302    }
11303    for (int i = 0; i < element.getValueCategory().size(); i++) {
11304      composeCodeableConcept(t, "EvidenceStatisticModelCharacteristicVariableComponent", "valueCategory", element.getValueCategory().get(i), i);
11305    }
11306    for (int i = 0; i < element.getValueQuantity().size(); i++) {
11307      composeQuantity(t, "EvidenceStatisticModelCharacteristicVariableComponent", "valueQuantity", element.getValueQuantity().get(i), i);
11308    }
11309    for (int i = 0; i < element.getValueRange().size(); i++) {
11310      composeRange(t, "EvidenceStatisticModelCharacteristicVariableComponent", "valueRange", element.getValueRange().get(i), i);
11311    }
11312  }
11313
11314  protected void composeEvidenceCertaintyComponent(Complex parent, String parentType, String name, Evidence.EvidenceCertaintyComponent element, int index) {
11315    if (element == null) 
11316      return;
11317    Complex t;
11318    if (Utilities.noString(parentType))
11319      t = parent;
11320    else {
11321      t = parent.predicate("fhir:"+parentType+'.'+name);
11322    }
11323    composeBackboneElement(t, "certainty", name, element, index);
11324    if (element.hasDescriptionElement()) {
11325      composeString(t, "EvidenceCertaintyComponent", "description", element.getDescriptionElement(), -1);
11326    }
11327    for (int i = 0; i < element.getNote().size(); i++) {
11328      composeAnnotation(t, "EvidenceCertaintyComponent", "note", element.getNote().get(i), i);
11329    }
11330    if (element.hasType()) {
11331      composeCodeableConcept(t, "EvidenceCertaintyComponent", "type", element.getType(), -1);
11332    }
11333    if (element.hasRating()) {
11334      composeCodeableConcept(t, "EvidenceCertaintyComponent", "rating", element.getRating(), -1);
11335    }
11336    if (element.hasRaterElement()) {
11337      composeString(t, "EvidenceCertaintyComponent", "rater", element.getRaterElement(), -1);
11338    }
11339    for (int i = 0; i < element.getSubcomponent().size(); i++) {
11340      composeEvidenceCertaintyComponent(t, "EvidenceCertaintyComponent", "subcomponent", element.getSubcomponent().get(i), i);
11341    }
11342  }
11343
11344  protected void composeEvidenceReport(Complex parent, String parentType, String name, EvidenceReport element, int index) {
11345    if (element == null) 
11346      return;
11347    Complex t;
11348    if (Utilities.noString(parentType))
11349      t = parent;
11350    else {
11351      t = parent.predicate("fhir:"+parentType+'.'+name);
11352    }
11353    composeMetadataResource(t, "EvidenceReport", name, element, index);
11354    if (element.hasUrlElement()) {
11355      composeUri(t, "EvidenceReport", "url", element.getUrlElement(), -1);
11356    }
11357    if (element.hasStatusElement()) {
11358      composeEnum(t, "EvidenceReport", "status", element.getStatusElement(), -1);
11359    }
11360    for (int i = 0; i < element.getUseContext().size(); i++) {
11361      composeUsageContext(t, "EvidenceReport", "useContext", element.getUseContext().get(i), i);
11362    }
11363    for (int i = 0; i < element.getIdentifier().size(); i++) {
11364      composeIdentifier(t, "EvidenceReport", "identifier", element.getIdentifier().get(i), i);
11365    }
11366    for (int i = 0; i < element.getRelatedIdentifier().size(); i++) {
11367      composeIdentifier(t, "EvidenceReport", "relatedIdentifier", element.getRelatedIdentifier().get(i), i);
11368    }
11369    if (element.hasCiteAs()) {
11370      composeType(t, "EvidenceReport", "citeAs", element.getCiteAs(), -1);
11371    }
11372    if (element.hasType()) {
11373      composeCodeableConcept(t, "EvidenceReport", "type", element.getType(), -1);
11374    }
11375    for (int i = 0; i < element.getNote().size(); i++) {
11376      composeAnnotation(t, "EvidenceReport", "note", element.getNote().get(i), i);
11377    }
11378    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
11379      composeRelatedArtifact(t, "EvidenceReport", "relatedArtifact", element.getRelatedArtifact().get(i), i);
11380    }
11381    if (element.hasSubject()) {
11382      composeEvidenceReportSubjectComponent(t, "EvidenceReport", "subject", element.getSubject(), -1);
11383    }
11384    if (element.hasPublisherElement()) {
11385      composeString(t, "EvidenceReport", "publisher", element.getPublisherElement(), -1);
11386    }
11387    for (int i = 0; i < element.getContact().size(); i++) {
11388      composeContactDetail(t, "EvidenceReport", "contact", element.getContact().get(i), i);
11389    }
11390    for (int i = 0; i < element.getAuthor().size(); i++) {
11391      composeContactDetail(t, "EvidenceReport", "author", element.getAuthor().get(i), i);
11392    }
11393    for (int i = 0; i < element.getEditor().size(); i++) {
11394      composeContactDetail(t, "EvidenceReport", "editor", element.getEditor().get(i), i);
11395    }
11396    for (int i = 0; i < element.getReviewer().size(); i++) {
11397      composeContactDetail(t, "EvidenceReport", "reviewer", element.getReviewer().get(i), i);
11398    }
11399    for (int i = 0; i < element.getEndorser().size(); i++) {
11400      composeContactDetail(t, "EvidenceReport", "endorser", element.getEndorser().get(i), i);
11401    }
11402    for (int i = 0; i < element.getRelatesTo().size(); i++) {
11403      composeEvidenceReportRelatesToComponent(t, "EvidenceReport", "relatesTo", element.getRelatesTo().get(i), i);
11404    }
11405    for (int i = 0; i < element.getSection().size(); i++) {
11406      composeEvidenceReportSectionComponent(t, "EvidenceReport", "section", element.getSection().get(i), i);
11407    }
11408  }
11409
11410  protected void composeEvidenceReportSubjectComponent(Complex parent, String parentType, String name, EvidenceReport.EvidenceReportSubjectComponent element, int index) {
11411    if (element == null) 
11412      return;
11413    Complex t;
11414    if (Utilities.noString(parentType))
11415      t = parent;
11416    else {
11417      t = parent.predicate("fhir:"+parentType+'.'+name);
11418    }
11419    composeBackboneElement(t, "subject", name, element, index);
11420    for (int i = 0; i < element.getCharacteristic().size(); i++) {
11421      composeEvidenceReportSubjectCharacteristicComponent(t, "EvidenceReportSubjectComponent", "characteristic", element.getCharacteristic().get(i), i);
11422    }
11423    for (int i = 0; i < element.getNote().size(); i++) {
11424      composeAnnotation(t, "EvidenceReportSubjectComponent", "note", element.getNote().get(i), i);
11425    }
11426  }
11427
11428  protected void composeEvidenceReportSubjectCharacteristicComponent(Complex parent, String parentType, String name, EvidenceReport.EvidenceReportSubjectCharacteristicComponent element, int index) {
11429    if (element == null) 
11430      return;
11431    Complex t;
11432    if (Utilities.noString(parentType))
11433      t = parent;
11434    else {
11435      t = parent.predicate("fhir:"+parentType+'.'+name);
11436    }
11437    composeBackboneElement(t, "characteristic", name, element, index);
11438    if (element.hasCode()) {
11439      composeCodeableConcept(t, "EvidenceReportSubjectCharacteristicComponent", "code", element.getCode(), -1);
11440    }
11441    if (element.hasValue()) {
11442      composeType(t, "EvidenceReportSubjectCharacteristicComponent", "value", element.getValue(), -1);
11443    }
11444    if (element.hasExcludeElement()) {
11445      composeBoolean(t, "EvidenceReportSubjectCharacteristicComponent", "exclude", element.getExcludeElement(), -1);
11446    }
11447    if (element.hasPeriod()) {
11448      composePeriod(t, "EvidenceReportSubjectCharacteristicComponent", "period", element.getPeriod(), -1);
11449    }
11450  }
11451
11452  protected void composeEvidenceReportRelatesToComponent(Complex parent, String parentType, String name, EvidenceReport.EvidenceReportRelatesToComponent element, int index) {
11453    if (element == null) 
11454      return;
11455    Complex t;
11456    if (Utilities.noString(parentType))
11457      t = parent;
11458    else {
11459      t = parent.predicate("fhir:"+parentType+'.'+name);
11460    }
11461    composeBackboneElement(t, "relatesTo", name, element, index);
11462    if (element.hasCodeElement()) {
11463      composeEnum(t, "EvidenceReportRelatesToComponent", "code", element.getCodeElement(), -1);
11464    }
11465    if (element.hasTarget()) {
11466      composeEvidenceReportRelatesToTargetComponent(t, "EvidenceReportRelatesToComponent", "target", element.getTarget(), -1);
11467    }
11468  }
11469
11470  protected void composeEvidenceReportRelatesToTargetComponent(Complex parent, String parentType, String name, EvidenceReport.EvidenceReportRelatesToTargetComponent element, int index) {
11471    if (element == null) 
11472      return;
11473    Complex t;
11474    if (Utilities.noString(parentType))
11475      t = parent;
11476    else {
11477      t = parent.predicate("fhir:"+parentType+'.'+name);
11478    }
11479    composeBackboneElement(t, "target", name, element, index);
11480    if (element.hasUrlElement()) {
11481      composeUri(t, "EvidenceReportRelatesToTargetComponent", "url", element.getUrlElement(), -1);
11482    }
11483    if (element.hasIdentifier()) {
11484      composeIdentifier(t, "EvidenceReportRelatesToTargetComponent", "identifier", element.getIdentifier(), -1);
11485    }
11486    if (element.hasDisplayElement()) {
11487      composeMarkdown(t, "EvidenceReportRelatesToTargetComponent", "display", element.getDisplayElement(), -1);
11488    }
11489    if (element.hasResource()) {
11490      composeReference(t, "EvidenceReportRelatesToTargetComponent", "resource", element.getResource(), -1);
11491    }
11492  }
11493
11494  protected void composeEvidenceReportSectionComponent(Complex parent, String parentType, String name, EvidenceReport.SectionComponent element, int index) {
11495    if (element == null) 
11496      return;
11497    Complex t;
11498    if (Utilities.noString(parentType))
11499      t = parent;
11500    else {
11501      t = parent.predicate("fhir:"+parentType+'.'+name);
11502    }
11503    composeBackboneElement(t, "section", name, element, index);
11504    if (element.hasTitleElement()) {
11505      composeString(t, "SectionComponent", "title", element.getTitleElement(), -1);
11506    }
11507    if (element.hasFocus()) {
11508      composeCodeableConcept(t, "SectionComponent", "focus", element.getFocus(), -1);
11509    }
11510    if (element.hasFocusReference()) {
11511      composeReference(t, "SectionComponent", "focusReference", element.getFocusReference(), -1);
11512    }
11513    for (int i = 0; i < element.getAuthor().size(); i++) {
11514      composeReference(t, "SectionComponent", "author", element.getAuthor().get(i), i);
11515    }
11516    if (element.hasText()) {
11517      composeNarrative(t, "SectionComponent", "text", element.getText(), -1);
11518    }
11519    if (element.hasModeElement()) {
11520      composeEnum(t, "SectionComponent", "mode", element.getModeElement(), -1);
11521    }
11522    if (element.hasOrderedBy()) {
11523      composeCodeableConcept(t, "SectionComponent", "orderedBy", element.getOrderedBy(), -1);
11524    }
11525    for (int i = 0; i < element.getEntryClassifier().size(); i++) {
11526      composeCodeableConcept(t, "SectionComponent", "entryClassifier", element.getEntryClassifier().get(i), i);
11527    }
11528    for (int i = 0; i < element.getEntryReference().size(); i++) {
11529      composeReference(t, "SectionComponent", "entryReference", element.getEntryReference().get(i), i);
11530    }
11531    for (int i = 0; i < element.getEntryQuantity().size(); i++) {
11532      composeQuantity(t, "SectionComponent", "entryQuantity", element.getEntryQuantity().get(i), i);
11533    }
11534    if (element.hasEmptyReason()) {
11535      composeCodeableConcept(t, "SectionComponent", "emptyReason", element.getEmptyReason(), -1);
11536    }
11537    for (int i = 0; i < element.getSection().size(); i++) {
11538      composeEvidenceReportSectionComponent(t, "SectionComponent", "section", element.getSection().get(i), i);
11539    }
11540  }
11541
11542  protected void composeEvidenceVariable(Complex parent, String parentType, String name, EvidenceVariable element, int index) {
11543    if (element == null) 
11544      return;
11545    Complex t;
11546    if (Utilities.noString(parentType))
11547      t = parent;
11548    else {
11549      t = parent.predicate("fhir:"+parentType+'.'+name);
11550    }
11551    composeMetadataResource(t, "EvidenceVariable", name, element, index);
11552    if (element.hasUrlElement()) {
11553      composeUri(t, "EvidenceVariable", "url", element.getUrlElement(), -1);
11554    }
11555    for (int i = 0; i < element.getIdentifier().size(); i++) {
11556      composeIdentifier(t, "EvidenceVariable", "identifier", element.getIdentifier().get(i), i);
11557    }
11558    if (element.hasVersionElement()) {
11559      composeString(t, "EvidenceVariable", "version", element.getVersionElement(), -1);
11560    }
11561    if (element.hasNameElement()) {
11562      composeString(t, "EvidenceVariable", "name", element.getNameElement(), -1);
11563    }
11564    if (element.hasTitleElement()) {
11565      composeString(t, "EvidenceVariable", "title", element.getTitleElement(), -1);
11566    }
11567    if (element.hasShortTitleElement()) {
11568      composeString(t, "EvidenceVariable", "shortTitle", element.getShortTitleElement(), -1);
11569    }
11570    if (element.hasSubtitleElement()) {
11571      composeString(t, "EvidenceVariable", "subtitle", element.getSubtitleElement(), -1);
11572    }
11573    if (element.hasStatusElement()) {
11574      composeEnum(t, "EvidenceVariable", "status", element.getStatusElement(), -1);
11575    }
11576    if (element.hasExperimentalElement()) {
11577      composeBoolean(t, "EvidenceVariable", "experimental", element.getExperimentalElement(), -1);
11578    }
11579    if (element.hasDateElement()) {
11580      composeDateTime(t, "EvidenceVariable", "date", element.getDateElement(), -1);
11581    }
11582    if (element.hasPublisherElement()) {
11583      composeString(t, "EvidenceVariable", "publisher", element.getPublisherElement(), -1);
11584    }
11585    for (int i = 0; i < element.getContact().size(); i++) {
11586      composeContactDetail(t, "EvidenceVariable", "contact", element.getContact().get(i), i);
11587    }
11588    if (element.hasDescriptionElement()) {
11589      composeMarkdown(t, "EvidenceVariable", "description", element.getDescriptionElement(), -1);
11590    }
11591    for (int i = 0; i < element.getNote().size(); i++) {
11592      composeAnnotation(t, "EvidenceVariable", "note", element.getNote().get(i), i);
11593    }
11594    for (int i = 0; i < element.getUseContext().size(); i++) {
11595      composeUsageContext(t, "EvidenceVariable", "useContext", element.getUseContext().get(i), i);
11596    }
11597    if (element.hasCopyrightElement()) {
11598      composeMarkdown(t, "EvidenceVariable", "copyright", element.getCopyrightElement(), -1);
11599    }
11600    if (element.hasApprovalDateElement()) {
11601      composeDate(t, "EvidenceVariable", "approvalDate", element.getApprovalDateElement(), -1);
11602    }
11603    if (element.hasLastReviewDateElement()) {
11604      composeDate(t, "EvidenceVariable", "lastReviewDate", element.getLastReviewDateElement(), -1);
11605    }
11606    if (element.hasEffectivePeriod()) {
11607      composePeriod(t, "EvidenceVariable", "effectivePeriod", element.getEffectivePeriod(), -1);
11608    }
11609    for (int i = 0; i < element.getAuthor().size(); i++) {
11610      composeContactDetail(t, "EvidenceVariable", "author", element.getAuthor().get(i), i);
11611    }
11612    for (int i = 0; i < element.getEditor().size(); i++) {
11613      composeContactDetail(t, "EvidenceVariable", "editor", element.getEditor().get(i), i);
11614    }
11615    for (int i = 0; i < element.getReviewer().size(); i++) {
11616      composeContactDetail(t, "EvidenceVariable", "reviewer", element.getReviewer().get(i), i);
11617    }
11618    for (int i = 0; i < element.getEndorser().size(); i++) {
11619      composeContactDetail(t, "EvidenceVariable", "endorser", element.getEndorser().get(i), i);
11620    }
11621    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
11622      composeRelatedArtifact(t, "EvidenceVariable", "relatedArtifact", element.getRelatedArtifact().get(i), i);
11623    }
11624    if (element.hasActualElement()) {
11625      composeBoolean(t, "EvidenceVariable", "actual", element.getActualElement(), -1);
11626    }
11627    for (int i = 0; i < element.getCharacteristic().size(); i++) {
11628      composeEvidenceVariableCharacteristicComponent(t, "EvidenceVariable", "characteristic", element.getCharacteristic().get(i), i);
11629    }
11630    if (element.hasHandlingElement()) {
11631      composeEnum(t, "EvidenceVariable", "handling", element.getHandlingElement(), -1);
11632    }
11633    for (int i = 0; i < element.getCategory().size(); i++) {
11634      composeEvidenceVariableCategoryComponent(t, "EvidenceVariable", "category", element.getCategory().get(i), i);
11635    }
11636  }
11637
11638  protected void composeEvidenceVariableCharacteristicComponent(Complex parent, String parentType, String name, EvidenceVariable.EvidenceVariableCharacteristicComponent element, int index) {
11639    if (element == null) 
11640      return;
11641    Complex t;
11642    if (Utilities.noString(parentType))
11643      t = parent;
11644    else {
11645      t = parent.predicate("fhir:"+parentType+'.'+name);
11646    }
11647    composeBackboneElement(t, "characteristic", name, element, index);
11648    if (element.hasLinkIdElement()) {
11649      composeId(t, "EvidenceVariableCharacteristicComponent", "linkId", element.getLinkIdElement(), -1);
11650    }
11651    if (element.hasDescriptionElement()) {
11652      composeString(t, "EvidenceVariableCharacteristicComponent", "description", element.getDescriptionElement(), -1);
11653    }
11654    for (int i = 0; i < element.getNote().size(); i++) {
11655      composeAnnotation(t, "EvidenceVariableCharacteristicComponent", "note", element.getNote().get(i), i);
11656    }
11657    if (element.hasExcludeElement()) {
11658      composeBoolean(t, "EvidenceVariableCharacteristicComponent", "exclude", element.getExcludeElement(), -1);
11659    }
11660    if (element.hasDefinitionReference()) {
11661      composeReference(t, "EvidenceVariableCharacteristicComponent", "definitionReference", element.getDefinitionReference(), -1);
11662    }
11663    if (element.hasDefinitionCanonicalElement()) {
11664      composeCanonical(t, "EvidenceVariableCharacteristicComponent", "definitionCanonical", element.getDefinitionCanonicalElement(), -1);
11665    }
11666    if (element.hasDefinitionCodeableConcept()) {
11667      composeCodeableConcept(t, "EvidenceVariableCharacteristicComponent", "definitionCodeableConcept", element.getDefinitionCodeableConcept(), -1);
11668    }
11669    if (element.hasDefinitionExpression()) {
11670      composeExpression(t, "EvidenceVariableCharacteristicComponent", "definitionExpression", element.getDefinitionExpression(), -1);
11671    }
11672    if (element.hasDefinitionIdElement()) {
11673      composeId(t, "EvidenceVariableCharacteristicComponent", "definitionId", element.getDefinitionIdElement(), -1);
11674    }
11675    if (element.hasDefinitionByTypeAndValue()) {
11676      composeEvidenceVariableCharacteristicDefinitionByTypeAndValueComponent(t, "EvidenceVariableCharacteristicComponent", "definitionByTypeAndValue", element.getDefinitionByTypeAndValue(), -1);
11677    }
11678    if (element.hasDefinitionByCombination()) {
11679      composeEvidenceVariableCharacteristicDefinitionByCombinationComponent(t, "EvidenceVariableCharacteristicComponent", "definitionByCombination", element.getDefinitionByCombination(), -1);
11680    }
11681    for (int i = 0; i < element.getTimeFromEvent().size(); i++) {
11682      composeEvidenceVariableCharacteristicTimeFromEventComponent(t, "EvidenceVariableCharacteristicComponent", "timeFromEvent", element.getTimeFromEvent().get(i), i);
11683    }
11684  }
11685
11686  protected void composeEvidenceVariableCharacteristicDefinitionByTypeAndValueComponent(Complex parent, String parentType, String name, EvidenceVariable.EvidenceVariableCharacteristicDefinitionByTypeAndValueComponent element, int index) {
11687    if (element == null) 
11688      return;
11689    Complex t;
11690    if (Utilities.noString(parentType))
11691      t = parent;
11692    else {
11693      t = parent.predicate("fhir:"+parentType+'.'+name);
11694    }
11695    composeBackboneElement(t, "definitionByTypeAndValue", name, element, index);
11696    if (element.hasType()) {
11697      composeCodeableConcept(t, "EvidenceVariableCharacteristicDefinitionByTypeAndValueComponent", "type", element.getType(), -1);
11698    }
11699    for (int i = 0; i < element.getMethod().size(); i++) {
11700      composeCodeableConcept(t, "EvidenceVariableCharacteristicDefinitionByTypeAndValueComponent", "method", element.getMethod().get(i), i);
11701    }
11702    if (element.hasDevice()) {
11703      composeReference(t, "EvidenceVariableCharacteristicDefinitionByTypeAndValueComponent", "device", element.getDevice(), -1);
11704    }
11705    if (element.hasValue()) {
11706      composeType(t, "EvidenceVariableCharacteristicDefinitionByTypeAndValueComponent", "value", element.getValue(), -1);
11707    }
11708    if (element.hasOffset()) {
11709      composeCodeableConcept(t, "EvidenceVariableCharacteristicDefinitionByTypeAndValueComponent", "offset", element.getOffset(), -1);
11710    }
11711  }
11712
11713  protected void composeEvidenceVariableCharacteristicDefinitionByCombinationComponent(Complex parent, String parentType, String name, EvidenceVariable.EvidenceVariableCharacteristicDefinitionByCombinationComponent element, int index) {
11714    if (element == null) 
11715      return;
11716    Complex t;
11717    if (Utilities.noString(parentType))
11718      t = parent;
11719    else {
11720      t = parent.predicate("fhir:"+parentType+'.'+name);
11721    }
11722    composeBackboneElement(t, "definitionByCombination", name, element, index);
11723    if (element.hasCodeElement()) {
11724      composeEnum(t, "EvidenceVariableCharacteristicDefinitionByCombinationComponent", "code", element.getCodeElement(), -1);
11725    }
11726    if (element.hasThresholdElement()) {
11727      composePositiveInt(t, "EvidenceVariableCharacteristicDefinitionByCombinationComponent", "threshold", element.getThresholdElement(), -1);
11728    }
11729    for (int i = 0; i < element.getCharacteristic().size(); i++) {
11730      composeEvidenceVariableCharacteristicComponent(t, "EvidenceVariableCharacteristicDefinitionByCombinationComponent", "characteristic", element.getCharacteristic().get(i), i);
11731    }
11732  }
11733
11734  protected void composeEvidenceVariableCharacteristicTimeFromEventComponent(Complex parent, String parentType, String name, EvidenceVariable.EvidenceVariableCharacteristicTimeFromEventComponent element, int index) {
11735    if (element == null) 
11736      return;
11737    Complex t;
11738    if (Utilities.noString(parentType))
11739      t = parent;
11740    else {
11741      t = parent.predicate("fhir:"+parentType+'.'+name);
11742    }
11743    composeBackboneElement(t, "timeFromEvent", name, element, index);
11744    if (element.hasDescriptionElement()) {
11745      composeString(t, "EvidenceVariableCharacteristicTimeFromEventComponent", "description", element.getDescriptionElement(), -1);
11746    }
11747    for (int i = 0; i < element.getNote().size(); i++) {
11748      composeAnnotation(t, "EvidenceVariableCharacteristicTimeFromEventComponent", "note", element.getNote().get(i), i);
11749    }
11750    if (element.hasEvent()) {
11751      composeType(t, "EvidenceVariableCharacteristicTimeFromEventComponent", "event", element.getEvent(), -1);
11752    }
11753    if (element.hasQuantity()) {
11754      composeQuantity(t, "EvidenceVariableCharacteristicTimeFromEventComponent", "quantity", element.getQuantity(), -1);
11755    }
11756    if (element.hasRange()) {
11757      composeRange(t, "EvidenceVariableCharacteristicTimeFromEventComponent", "range", element.getRange(), -1);
11758    }
11759  }
11760
11761  protected void composeEvidenceVariableCategoryComponent(Complex parent, String parentType, String name, EvidenceVariable.EvidenceVariableCategoryComponent element, int index) {
11762    if (element == null) 
11763      return;
11764    Complex t;
11765    if (Utilities.noString(parentType))
11766      t = parent;
11767    else {
11768      t = parent.predicate("fhir:"+parentType+'.'+name);
11769    }
11770    composeBackboneElement(t, "category", name, element, index);
11771    if (element.hasNameElement()) {
11772      composeString(t, "EvidenceVariableCategoryComponent", "name", element.getNameElement(), -1);
11773    }
11774    if (element.hasValue()) {
11775      composeType(t, "EvidenceVariableCategoryComponent", "value", element.getValue(), -1);
11776    }
11777  }
11778
11779  protected void composeExampleScenario(Complex parent, String parentType, String name, ExampleScenario element, int index) {
11780    if (element == null) 
11781      return;
11782    Complex t;
11783    if (Utilities.noString(parentType))
11784      t = parent;
11785    else {
11786      t = parent.predicate("fhir:"+parentType+'.'+name);
11787    }
11788    composeCanonicalResource(t, "ExampleScenario", name, element, index);
11789    if (element.hasUrlElement()) {
11790      composeUri(t, "ExampleScenario", "url", element.getUrlElement(), -1);
11791    }
11792    for (int i = 0; i < element.getIdentifier().size(); i++) {
11793      composeIdentifier(t, "ExampleScenario", "identifier", element.getIdentifier().get(i), i);
11794    }
11795    if (element.hasVersionElement()) {
11796      composeString(t, "ExampleScenario", "version", element.getVersionElement(), -1);
11797    }
11798    if (element.hasVersionAlgorithm()) {
11799      composeType(t, "ExampleScenario", "versionAlgorithm", element.getVersionAlgorithm(), -1);
11800    }
11801    if (element.hasNameElement()) {
11802      composeString(t, "ExampleScenario", "name", element.getNameElement(), -1);
11803    }
11804    if (element.hasTitleElement()) {
11805      composeString(t, "ExampleScenario", "title", element.getTitleElement(), -1);
11806    }
11807    if (element.hasStatusElement()) {
11808      composeEnum(t, "ExampleScenario", "status", element.getStatusElement(), -1);
11809    }
11810    if (element.hasExperimentalElement()) {
11811      composeBoolean(t, "ExampleScenario", "experimental", element.getExperimentalElement(), -1);
11812    }
11813    if (element.hasDateElement()) {
11814      composeDateTime(t, "ExampleScenario", "date", element.getDateElement(), -1);
11815    }
11816    if (element.hasPublisherElement()) {
11817      composeString(t, "ExampleScenario", "publisher", element.getPublisherElement(), -1);
11818    }
11819    for (int i = 0; i < element.getContact().size(); i++) {
11820      composeContactDetail(t, "ExampleScenario", "contact", element.getContact().get(i), i);
11821    }
11822    if (element.hasDescriptionElement()) {
11823      composeMarkdown(t, "ExampleScenario", "description", element.getDescriptionElement(), -1);
11824    }
11825    for (int i = 0; i < element.getUseContext().size(); i++) {
11826      composeUsageContext(t, "ExampleScenario", "useContext", element.getUseContext().get(i), i);
11827    }
11828    for (int i = 0; i < element.getJurisdiction().size(); i++) {
11829      composeCodeableConcept(t, "ExampleScenario", "jurisdiction", element.getJurisdiction().get(i), i);
11830    }
11831    if (element.hasPurposeElement()) {
11832      composeMarkdown(t, "ExampleScenario", "purpose", element.getPurposeElement(), -1);
11833    }
11834    if (element.hasCopyrightElement()) {
11835      composeMarkdown(t, "ExampleScenario", "copyright", element.getCopyrightElement(), -1);
11836    }
11837    if (element.hasCopyrightLabelElement()) {
11838      composeString(t, "ExampleScenario", "copyrightLabel", element.getCopyrightLabelElement(), -1);
11839    }
11840    for (int i = 0; i < element.getActor().size(); i++) {
11841      composeExampleScenarioActorComponent(t, "ExampleScenario", "actor", element.getActor().get(i), i);
11842    }
11843    for (int i = 0; i < element.getInstance().size(); i++) {
11844      composeExampleScenarioInstanceComponent(t, "ExampleScenario", "instance", element.getInstance().get(i), i);
11845    }
11846    for (int i = 0; i < element.getProcess().size(); i++) {
11847      composeExampleScenarioProcessComponent(t, "ExampleScenario", "process", element.getProcess().get(i), i);
11848    }
11849  }
11850
11851  protected void composeExampleScenarioActorComponent(Complex parent, String parentType, String name, ExampleScenario.ExampleScenarioActorComponent element, int index) {
11852    if (element == null) 
11853      return;
11854    Complex t;
11855    if (Utilities.noString(parentType))
11856      t = parent;
11857    else {
11858      t = parent.predicate("fhir:"+parentType+'.'+name);
11859    }
11860    composeBackboneElement(t, "actor", name, element, index);
11861    if (element.hasKeyElement()) {
11862      composeString(t, "ExampleScenarioActorComponent", "key", element.getKeyElement(), -1);
11863    }
11864    if (element.hasTypeElement()) {
11865      composeEnum(t, "ExampleScenarioActorComponent", "type", element.getTypeElement(), -1);
11866    }
11867    if (element.hasTitleElement()) {
11868      composeString(t, "ExampleScenarioActorComponent", "title", element.getTitleElement(), -1);
11869    }
11870    if (element.hasDescriptionElement()) {
11871      composeMarkdown(t, "ExampleScenarioActorComponent", "description", element.getDescriptionElement(), -1);
11872    }
11873  }
11874
11875  protected void composeExampleScenarioInstanceComponent(Complex parent, String parentType, String name, ExampleScenario.ExampleScenarioInstanceComponent element, int index) {
11876    if (element == null) 
11877      return;
11878    Complex t;
11879    if (Utilities.noString(parentType))
11880      t = parent;
11881    else {
11882      t = parent.predicate("fhir:"+parentType+'.'+name);
11883    }
11884    composeBackboneElement(t, "instance", name, element, index);
11885    if (element.hasKeyElement()) {
11886      composeString(t, "ExampleScenarioInstanceComponent", "key", element.getKeyElement(), -1);
11887    }
11888    if (element.hasStructureType()) {
11889      composeCoding(t, "ExampleScenarioInstanceComponent", "structureType", element.getStructureType(), -1);
11890    }
11891    if (element.hasStructureVersionElement()) {
11892      composeString(t, "ExampleScenarioInstanceComponent", "structureVersion", element.getStructureVersionElement(), -1);
11893    }
11894    if (element.hasStructureProfile()) {
11895      composeType(t, "ExampleScenarioInstanceComponent", "structureProfile", element.getStructureProfile(), -1);
11896    }
11897    if (element.hasTitleElement()) {
11898      composeString(t, "ExampleScenarioInstanceComponent", "title", element.getTitleElement(), -1);
11899    }
11900    if (element.hasDescriptionElement()) {
11901      composeMarkdown(t, "ExampleScenarioInstanceComponent", "description", element.getDescriptionElement(), -1);
11902    }
11903    if (element.hasContent()) {
11904      composeReference(t, "ExampleScenarioInstanceComponent", "content", element.getContent(), -1);
11905    }
11906    for (int i = 0; i < element.getVersion().size(); i++) {
11907      composeExampleScenarioInstanceVersionComponent(t, "ExampleScenarioInstanceComponent", "version", element.getVersion().get(i), i);
11908    }
11909    for (int i = 0; i < element.getContainedInstance().size(); i++) {
11910      composeExampleScenarioInstanceContainedInstanceComponent(t, "ExampleScenarioInstanceComponent", "containedInstance", element.getContainedInstance().get(i), i);
11911    }
11912  }
11913
11914  protected void composeExampleScenarioInstanceVersionComponent(Complex parent, String parentType, String name, ExampleScenario.ExampleScenarioInstanceVersionComponent element, int index) {
11915    if (element == null) 
11916      return;
11917    Complex t;
11918    if (Utilities.noString(parentType))
11919      t = parent;
11920    else {
11921      t = parent.predicate("fhir:"+parentType+'.'+name);
11922    }
11923    composeBackboneElement(t, "version", name, element, index);
11924    if (element.hasKeyElement()) {
11925      composeString(t, "ExampleScenarioInstanceVersionComponent", "key", element.getKeyElement(), -1);
11926    }
11927    if (element.hasTitleElement()) {
11928      composeString(t, "ExampleScenarioInstanceVersionComponent", "title", element.getTitleElement(), -1);
11929    }
11930    if (element.hasDescriptionElement()) {
11931      composeMarkdown(t, "ExampleScenarioInstanceVersionComponent", "description", element.getDescriptionElement(), -1);
11932    }
11933    if (element.hasContent()) {
11934      composeReference(t, "ExampleScenarioInstanceVersionComponent", "content", element.getContent(), -1);
11935    }
11936  }
11937
11938  protected void composeExampleScenarioInstanceContainedInstanceComponent(Complex parent, String parentType, String name, ExampleScenario.ExampleScenarioInstanceContainedInstanceComponent element, int index) {
11939    if (element == null) 
11940      return;
11941    Complex t;
11942    if (Utilities.noString(parentType))
11943      t = parent;
11944    else {
11945      t = parent.predicate("fhir:"+parentType+'.'+name);
11946    }
11947    composeBackboneElement(t, "containedInstance", name, element, index);
11948    if (element.hasInstanceReferenceElement()) {
11949      composeString(t, "ExampleScenarioInstanceContainedInstanceComponent", "instanceReference", element.getInstanceReferenceElement(), -1);
11950    }
11951    if (element.hasVersionReferenceElement()) {
11952      composeString(t, "ExampleScenarioInstanceContainedInstanceComponent", "versionReference", element.getVersionReferenceElement(), -1);
11953    }
11954  }
11955
11956  protected void composeExampleScenarioProcessComponent(Complex parent, String parentType, String name, ExampleScenario.ExampleScenarioProcessComponent element, int index) {
11957    if (element == null) 
11958      return;
11959    Complex t;
11960    if (Utilities.noString(parentType))
11961      t = parent;
11962    else {
11963      t = parent.predicate("fhir:"+parentType+'.'+name);
11964    }
11965    composeBackboneElement(t, "process", name, element, index);
11966    if (element.hasTitleElement()) {
11967      composeString(t, "ExampleScenarioProcessComponent", "title", element.getTitleElement(), -1);
11968    }
11969    if (element.hasDescriptionElement()) {
11970      composeMarkdown(t, "ExampleScenarioProcessComponent", "description", element.getDescriptionElement(), -1);
11971    }
11972    if (element.hasPreConditionsElement()) {
11973      composeMarkdown(t, "ExampleScenarioProcessComponent", "preConditions", element.getPreConditionsElement(), -1);
11974    }
11975    if (element.hasPostConditionsElement()) {
11976      composeMarkdown(t, "ExampleScenarioProcessComponent", "postConditions", element.getPostConditionsElement(), -1);
11977    }
11978    for (int i = 0; i < element.getStep().size(); i++) {
11979      composeExampleScenarioProcessStepComponent(t, "ExampleScenarioProcessComponent", "step", element.getStep().get(i), i);
11980    }
11981  }
11982
11983  protected void composeExampleScenarioProcessStepComponent(Complex parent, String parentType, String name, ExampleScenario.ExampleScenarioProcessStepComponent element, int index) {
11984    if (element == null) 
11985      return;
11986    Complex t;
11987    if (Utilities.noString(parentType))
11988      t = parent;
11989    else {
11990      t = parent.predicate("fhir:"+parentType+'.'+name);
11991    }
11992    composeBackboneElement(t, "step", name, element, index);
11993    if (element.hasNumberElement()) {
11994      composeString(t, "ExampleScenarioProcessStepComponent", "number", element.getNumberElement(), -1);
11995    }
11996    if (element.hasProcess()) {
11997      composeExampleScenarioProcessComponent(t, "ExampleScenarioProcessStepComponent", "process", element.getProcess(), -1);
11998    }
11999    if (element.hasWorkflowElement()) {
12000      composeCanonical(t, "ExampleScenarioProcessStepComponent", "workflow", element.getWorkflowElement(), -1);
12001    }
12002    if (element.hasOperation()) {
12003      composeExampleScenarioProcessStepOperationComponent(t, "ExampleScenarioProcessStepComponent", "operation", element.getOperation(), -1);
12004    }
12005    for (int i = 0; i < element.getAlternative().size(); i++) {
12006      composeExampleScenarioProcessStepAlternativeComponent(t, "ExampleScenarioProcessStepComponent", "alternative", element.getAlternative().get(i), i);
12007    }
12008    if (element.hasPauseElement()) {
12009      composeBoolean(t, "ExampleScenarioProcessStepComponent", "pause", element.getPauseElement(), -1);
12010    }
12011  }
12012
12013  protected void composeExampleScenarioProcessStepOperationComponent(Complex parent, String parentType, String name, ExampleScenario.ExampleScenarioProcessStepOperationComponent element, int index) {
12014    if (element == null) 
12015      return;
12016    Complex t;
12017    if (Utilities.noString(parentType))
12018      t = parent;
12019    else {
12020      t = parent.predicate("fhir:"+parentType+'.'+name);
12021    }
12022    composeBackboneElement(t, "operation", name, element, index);
12023    if (element.hasType()) {
12024      composeCoding(t, "ExampleScenarioProcessStepOperationComponent", "type", element.getType(), -1);
12025    }
12026    if (element.hasTitleElement()) {
12027      composeString(t, "ExampleScenarioProcessStepOperationComponent", "title", element.getTitleElement(), -1);
12028    }
12029    if (element.hasInitiatorElement()) {
12030      composeString(t, "ExampleScenarioProcessStepOperationComponent", "initiator", element.getInitiatorElement(), -1);
12031    }
12032    if (element.hasReceiverElement()) {
12033      composeString(t, "ExampleScenarioProcessStepOperationComponent", "receiver", element.getReceiverElement(), -1);
12034    }
12035    if (element.hasDescriptionElement()) {
12036      composeMarkdown(t, "ExampleScenarioProcessStepOperationComponent", "description", element.getDescriptionElement(), -1);
12037    }
12038    if (element.hasInitiatorActiveElement()) {
12039      composeBoolean(t, "ExampleScenarioProcessStepOperationComponent", "initiatorActive", element.getInitiatorActiveElement(), -1);
12040    }
12041    if (element.hasReceiverActiveElement()) {
12042      composeBoolean(t, "ExampleScenarioProcessStepOperationComponent", "receiverActive", element.getReceiverActiveElement(), -1);
12043    }
12044    if (element.hasRequest()) {
12045      composeExampleScenarioInstanceContainedInstanceComponent(t, "ExampleScenarioProcessStepOperationComponent", "request", element.getRequest(), -1);
12046    }
12047    if (element.hasResponse()) {
12048      composeExampleScenarioInstanceContainedInstanceComponent(t, "ExampleScenarioProcessStepOperationComponent", "response", element.getResponse(), -1);
12049    }
12050  }
12051
12052  protected void composeExampleScenarioProcessStepAlternativeComponent(Complex parent, String parentType, String name, ExampleScenario.ExampleScenarioProcessStepAlternativeComponent element, int index) {
12053    if (element == null) 
12054      return;
12055    Complex t;
12056    if (Utilities.noString(parentType))
12057      t = parent;
12058    else {
12059      t = parent.predicate("fhir:"+parentType+'.'+name);
12060    }
12061    composeBackboneElement(t, "alternative", name, element, index);
12062    if (element.hasTitleElement()) {
12063      composeString(t, "ExampleScenarioProcessStepAlternativeComponent", "title", element.getTitleElement(), -1);
12064    }
12065    if (element.hasDescriptionElement()) {
12066      composeMarkdown(t, "ExampleScenarioProcessStepAlternativeComponent", "description", element.getDescriptionElement(), -1);
12067    }
12068    for (int i = 0; i < element.getStep().size(); i++) {
12069      composeExampleScenarioProcessStepComponent(t, "ExampleScenarioProcessStepAlternativeComponent", "step", element.getStep().get(i), i);
12070    }
12071  }
12072
12073  protected void composeExplanationOfBenefit(Complex parent, String parentType, String name, ExplanationOfBenefit element, int index) {
12074    if (element == null) 
12075      return;
12076    Complex t;
12077    if (Utilities.noString(parentType))
12078      t = parent;
12079    else {
12080      t = parent.predicate("fhir:"+parentType+'.'+name);
12081    }
12082    composeDomainResource(t, "ExplanationOfBenefit", name, element, index);
12083    for (int i = 0; i < element.getIdentifier().size(); i++) {
12084      composeIdentifier(t, "ExplanationOfBenefit", "identifier", element.getIdentifier().get(i), i);
12085    }
12086    if (element.hasStatusElement()) {
12087      composeEnum(t, "ExplanationOfBenefit", "status", element.getStatusElement(), -1);
12088    }
12089    if (element.hasType()) {
12090      composeCodeableConcept(t, "ExplanationOfBenefit", "type", element.getType(), -1);
12091    }
12092    if (element.hasSubType()) {
12093      composeCodeableConcept(t, "ExplanationOfBenefit", "subType", element.getSubType(), -1);
12094    }
12095    if (element.hasUseElement()) {
12096      composeEnum(t, "ExplanationOfBenefit", "use", element.getUseElement(), -1);
12097    }
12098    if (element.hasPatient()) {
12099      composeReference(t, "ExplanationOfBenefit", "patient", element.getPatient(), -1);
12100    }
12101    if (element.hasBillablePeriod()) {
12102      composePeriod(t, "ExplanationOfBenefit", "billablePeriod", element.getBillablePeriod(), -1);
12103    }
12104    if (element.hasCreatedElement()) {
12105      composeDateTime(t, "ExplanationOfBenefit", "created", element.getCreatedElement(), -1);
12106    }
12107    if (element.hasEnterer()) {
12108      composeReference(t, "ExplanationOfBenefit", "enterer", element.getEnterer(), -1);
12109    }
12110    if (element.hasInsurer()) {
12111      composeReference(t, "ExplanationOfBenefit", "insurer", element.getInsurer(), -1);
12112    }
12113    if (element.hasProvider()) {
12114      composeReference(t, "ExplanationOfBenefit", "provider", element.getProvider(), -1);
12115    }
12116    if (element.hasPriority()) {
12117      composeCodeableConcept(t, "ExplanationOfBenefit", "priority", element.getPriority(), -1);
12118    }
12119    if (element.hasFundsReserveRequested()) {
12120      composeCodeableConcept(t, "ExplanationOfBenefit", "fundsReserveRequested", element.getFundsReserveRequested(), -1);
12121    }
12122    if (element.hasFundsReserve()) {
12123      composeCodeableConcept(t, "ExplanationOfBenefit", "fundsReserve", element.getFundsReserve(), -1);
12124    }
12125    for (int i = 0; i < element.getRelated().size(); i++) {
12126      composeExplanationOfBenefitRelatedClaimComponent(t, "ExplanationOfBenefit", "related", element.getRelated().get(i), i);
12127    }
12128    if (element.hasPrescription()) {
12129      composeReference(t, "ExplanationOfBenefit", "prescription", element.getPrescription(), -1);
12130    }
12131    if (element.hasOriginalPrescription()) {
12132      composeReference(t, "ExplanationOfBenefit", "originalPrescription", element.getOriginalPrescription(), -1);
12133    }
12134    if (element.hasPayee()) {
12135      composeExplanationOfBenefitPayeeComponent(t, "ExplanationOfBenefit", "payee", element.getPayee(), -1);
12136    }
12137    if (element.hasReferral()) {
12138      composeReference(t, "ExplanationOfBenefit", "referral", element.getReferral(), -1);
12139    }
12140    for (int i = 0; i < element.getEncounter().size(); i++) {
12141      composeReference(t, "ExplanationOfBenefit", "encounter", element.getEncounter().get(i), i);
12142    }
12143    if (element.hasFacility()) {
12144      composeReference(t, "ExplanationOfBenefit", "facility", element.getFacility(), -1);
12145    }
12146    if (element.hasClaim()) {
12147      composeReference(t, "ExplanationOfBenefit", "claim", element.getClaim(), -1);
12148    }
12149    if (element.hasClaimResponse()) {
12150      composeReference(t, "ExplanationOfBenefit", "claimResponse", element.getClaimResponse(), -1);
12151    }
12152    if (element.hasOutcomeElement()) {
12153      composeEnum(t, "ExplanationOfBenefit", "outcome", element.getOutcomeElement(), -1);
12154    }
12155    if (element.hasDecision()) {
12156      composeCodeableConcept(t, "ExplanationOfBenefit", "decision", element.getDecision(), -1);
12157    }
12158    if (element.hasDispositionElement()) {
12159      composeString(t, "ExplanationOfBenefit", "disposition", element.getDispositionElement(), -1);
12160    }
12161    for (int i = 0; i < element.getPreAuthRef().size(); i++) {
12162      composeString(t, "ExplanationOfBenefit", "preAuthRef", element.getPreAuthRef().get(i), i);
12163    }
12164    for (int i = 0; i < element.getPreAuthRefPeriod().size(); i++) {
12165      composePeriod(t, "ExplanationOfBenefit", "preAuthRefPeriod", element.getPreAuthRefPeriod().get(i), i);
12166    }
12167    if (element.hasDiagnosisRelatedGroup()) {
12168      composeCodeableConcept(t, "ExplanationOfBenefit", "diagnosisRelatedGroup", element.getDiagnosisRelatedGroup(), -1);
12169    }
12170    for (int i = 0; i < element.getCareTeam().size(); i++) {
12171      composeExplanationOfBenefitCareTeamComponent(t, "ExplanationOfBenefit", "careTeam", element.getCareTeam().get(i), i);
12172    }
12173    for (int i = 0; i < element.getSupportingInfo().size(); i++) {
12174      composeExplanationOfBenefitSupportingInformationComponent(t, "ExplanationOfBenefit", "supportingInfo", element.getSupportingInfo().get(i), i);
12175    }
12176    for (int i = 0; i < element.getDiagnosis().size(); i++) {
12177      composeExplanationOfBenefitDiagnosisComponent(t, "ExplanationOfBenefit", "diagnosis", element.getDiagnosis().get(i), i);
12178    }
12179    for (int i = 0; i < element.getProcedure().size(); i++) {
12180      composeExplanationOfBenefitProcedureComponent(t, "ExplanationOfBenefit", "procedure", element.getProcedure().get(i), i);
12181    }
12182    if (element.hasPrecedenceElement()) {
12183      composePositiveInt(t, "ExplanationOfBenefit", "precedence", element.getPrecedenceElement(), -1);
12184    }
12185    for (int i = 0; i < element.getInsurance().size(); i++) {
12186      composeExplanationOfBenefitInsuranceComponent(t, "ExplanationOfBenefit", "insurance", element.getInsurance().get(i), i);
12187    }
12188    if (element.hasAccident()) {
12189      composeExplanationOfBenefitAccidentComponent(t, "ExplanationOfBenefit", "accident", element.getAccident(), -1);
12190    }
12191    if (element.hasPatientPaid()) {
12192      composeMoney(t, "ExplanationOfBenefit", "patientPaid", element.getPatientPaid(), -1);
12193    }
12194    for (int i = 0; i < element.getItem().size(); i++) {
12195      composeExplanationOfBenefitItemComponent(t, "ExplanationOfBenefit", "item", element.getItem().get(i), i);
12196    }
12197    for (int i = 0; i < element.getAddItem().size(); i++) {
12198      composeExplanationOfBenefitAddedItemComponent(t, "ExplanationOfBenefit", "addItem", element.getAddItem().get(i), i);
12199    }
12200    for (int i = 0; i < element.getAdjudication().size(); i++) {
12201      composeExplanationOfBenefitAdjudicationComponent(t, "ExplanationOfBenefit", "adjudication", element.getAdjudication().get(i), i);
12202    }
12203    for (int i = 0; i < element.getTotal().size(); i++) {
12204      composeExplanationOfBenefitTotalComponent(t, "ExplanationOfBenefit", "total", element.getTotal().get(i), i);
12205    }
12206    if (element.hasPayment()) {
12207      composeExplanationOfBenefitPaymentComponent(t, "ExplanationOfBenefit", "payment", element.getPayment(), -1);
12208    }
12209    if (element.hasFormCode()) {
12210      composeCodeableConcept(t, "ExplanationOfBenefit", "formCode", element.getFormCode(), -1);
12211    }
12212    if (element.hasForm()) {
12213      composeAttachment(t, "ExplanationOfBenefit", "form", element.getForm(), -1);
12214    }
12215    for (int i = 0; i < element.getProcessNote().size(); i++) {
12216      composeExplanationOfBenefitNoteComponent(t, "ExplanationOfBenefit", "processNote", element.getProcessNote().get(i), i);
12217    }
12218    if (element.hasBenefitPeriod()) {
12219      composePeriod(t, "ExplanationOfBenefit", "benefitPeriod", element.getBenefitPeriod(), -1);
12220    }
12221    for (int i = 0; i < element.getBenefitBalance().size(); i++) {
12222      composeExplanationOfBenefitBenefitBalanceComponent(t, "ExplanationOfBenefit", "benefitBalance", element.getBenefitBalance().get(i), i);
12223    }
12224  }
12225
12226  protected void composeExplanationOfBenefitRelatedClaimComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.RelatedClaimComponent element, int index) {
12227    if (element == null) 
12228      return;
12229    Complex t;
12230    if (Utilities.noString(parentType))
12231      t = parent;
12232    else {
12233      t = parent.predicate("fhir:"+parentType+'.'+name);
12234    }
12235    composeBackboneElement(t, "related", name, element, index);
12236    if (element.hasClaim()) {
12237      composeReference(t, "RelatedClaimComponent", "claim", element.getClaim(), -1);
12238    }
12239    if (element.hasRelationship()) {
12240      composeCodeableConcept(t, "RelatedClaimComponent", "relationship", element.getRelationship(), -1);
12241    }
12242    if (element.hasReference()) {
12243      composeIdentifier(t, "RelatedClaimComponent", "reference", element.getReference(), -1);
12244    }
12245  }
12246
12247  protected void composeExplanationOfBenefitPayeeComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.PayeeComponent element, int index) {
12248    if (element == null) 
12249      return;
12250    Complex t;
12251    if (Utilities.noString(parentType))
12252      t = parent;
12253    else {
12254      t = parent.predicate("fhir:"+parentType+'.'+name);
12255    }
12256    composeBackboneElement(t, "payee", name, element, index);
12257    if (element.hasType()) {
12258      composeCodeableConcept(t, "PayeeComponent", "type", element.getType(), -1);
12259    }
12260    if (element.hasParty()) {
12261      composeReference(t, "PayeeComponent", "party", element.getParty(), -1);
12262    }
12263  }
12264
12265  protected void composeExplanationOfBenefitCareTeamComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.CareTeamComponent element, int index) {
12266    if (element == null) 
12267      return;
12268    Complex t;
12269    if (Utilities.noString(parentType))
12270      t = parent;
12271    else {
12272      t = parent.predicate("fhir:"+parentType+'.'+name);
12273    }
12274    composeBackboneElement(t, "careTeam", name, element, index);
12275    if (element.hasSequenceElement()) {
12276      composePositiveInt(t, "CareTeamComponent", "sequence", element.getSequenceElement(), -1);
12277    }
12278    if (element.hasProvider()) {
12279      composeReference(t, "CareTeamComponent", "provider", element.getProvider(), -1);
12280    }
12281    if (element.hasResponsibleElement()) {
12282      composeBoolean(t, "CareTeamComponent", "responsible", element.getResponsibleElement(), -1);
12283    }
12284    if (element.hasRole()) {
12285      composeCodeableConcept(t, "CareTeamComponent", "role", element.getRole(), -1);
12286    }
12287    if (element.hasSpecialty()) {
12288      composeCodeableConcept(t, "CareTeamComponent", "specialty", element.getSpecialty(), -1);
12289    }
12290  }
12291
12292  protected void composeExplanationOfBenefitSupportingInformationComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.SupportingInformationComponent element, int index) {
12293    if (element == null) 
12294      return;
12295    Complex t;
12296    if (Utilities.noString(parentType))
12297      t = parent;
12298    else {
12299      t = parent.predicate("fhir:"+parentType+'.'+name);
12300    }
12301    composeBackboneElement(t, "supportingInfo", name, element, index);
12302    if (element.hasSequenceElement()) {
12303      composePositiveInt(t, "SupportingInformationComponent", "sequence", element.getSequenceElement(), -1);
12304    }
12305    if (element.hasCategory()) {
12306      composeCodeableConcept(t, "SupportingInformationComponent", "category", element.getCategory(), -1);
12307    }
12308    if (element.hasCode()) {
12309      composeCodeableConcept(t, "SupportingInformationComponent", "code", element.getCode(), -1);
12310    }
12311    if (element.hasTiming()) {
12312      composeType(t, "SupportingInformationComponent", "timing", element.getTiming(), -1);
12313    }
12314    if (element.hasValue()) {
12315      composeType(t, "SupportingInformationComponent", "value", element.getValue(), -1);
12316    }
12317    if (element.hasReason()) {
12318      composeCoding(t, "SupportingInformationComponent", "reason", element.getReason(), -1);
12319    }
12320  }
12321
12322  protected void composeExplanationOfBenefitDiagnosisComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.DiagnosisComponent element, int index) {
12323    if (element == null) 
12324      return;
12325    Complex t;
12326    if (Utilities.noString(parentType))
12327      t = parent;
12328    else {
12329      t = parent.predicate("fhir:"+parentType+'.'+name);
12330    }
12331    composeBackboneElement(t, "diagnosis", name, element, index);
12332    if (element.hasSequenceElement()) {
12333      composePositiveInt(t, "DiagnosisComponent", "sequence", element.getSequenceElement(), -1);
12334    }
12335    if (element.hasDiagnosis()) {
12336      composeType(t, "DiagnosisComponent", "diagnosis", element.getDiagnosis(), -1);
12337    }
12338    for (int i = 0; i < element.getType().size(); i++) {
12339      composeCodeableConcept(t, "DiagnosisComponent", "type", element.getType().get(i), i);
12340    }
12341    if (element.hasOnAdmission()) {
12342      composeCodeableConcept(t, "DiagnosisComponent", "onAdmission", element.getOnAdmission(), -1);
12343    }
12344  }
12345
12346  protected void composeExplanationOfBenefitProcedureComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.ProcedureComponent element, int index) {
12347    if (element == null) 
12348      return;
12349    Complex t;
12350    if (Utilities.noString(parentType))
12351      t = parent;
12352    else {
12353      t = parent.predicate("fhir:"+parentType+'.'+name);
12354    }
12355    composeBackboneElement(t, "procedure", name, element, index);
12356    if (element.hasSequenceElement()) {
12357      composePositiveInt(t, "ProcedureComponent", "sequence", element.getSequenceElement(), -1);
12358    }
12359    for (int i = 0; i < element.getType().size(); i++) {
12360      composeCodeableConcept(t, "ProcedureComponent", "type", element.getType().get(i), i);
12361    }
12362    if (element.hasDateElement()) {
12363      composeDateTime(t, "ProcedureComponent", "date", element.getDateElement(), -1);
12364    }
12365    if (element.hasProcedure()) {
12366      composeType(t, "ProcedureComponent", "procedure", element.getProcedure(), -1);
12367    }
12368    for (int i = 0; i < element.getUdi().size(); i++) {
12369      composeReference(t, "ProcedureComponent", "udi", element.getUdi().get(i), i);
12370    }
12371  }
12372
12373  protected void composeExplanationOfBenefitInsuranceComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.InsuranceComponent element, int index) {
12374    if (element == null) 
12375      return;
12376    Complex t;
12377    if (Utilities.noString(parentType))
12378      t = parent;
12379    else {
12380      t = parent.predicate("fhir:"+parentType+'.'+name);
12381    }
12382    composeBackboneElement(t, "insurance", name, element, index);
12383    if (element.hasFocalElement()) {
12384      composeBoolean(t, "InsuranceComponent", "focal", element.getFocalElement(), -1);
12385    }
12386    if (element.hasCoverage()) {
12387      composeReference(t, "InsuranceComponent", "coverage", element.getCoverage(), -1);
12388    }
12389    for (int i = 0; i < element.getPreAuthRef().size(); i++) {
12390      composeString(t, "InsuranceComponent", "preAuthRef", element.getPreAuthRef().get(i), i);
12391    }
12392  }
12393
12394  protected void composeExplanationOfBenefitAccidentComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.AccidentComponent element, int index) {
12395    if (element == null) 
12396      return;
12397    Complex t;
12398    if (Utilities.noString(parentType))
12399      t = parent;
12400    else {
12401      t = parent.predicate("fhir:"+parentType+'.'+name);
12402    }
12403    composeBackboneElement(t, "accident", name, element, index);
12404    if (element.hasDateElement()) {
12405      composeDate(t, "AccidentComponent", "date", element.getDateElement(), -1);
12406    }
12407    if (element.hasType()) {
12408      composeCodeableConcept(t, "AccidentComponent", "type", element.getType(), -1);
12409    }
12410    if (element.hasLocation()) {
12411      composeType(t, "AccidentComponent", "location", element.getLocation(), -1);
12412    }
12413  }
12414
12415  protected void composeExplanationOfBenefitItemComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.ItemComponent element, int index) {
12416    if (element == null) 
12417      return;
12418    Complex t;
12419    if (Utilities.noString(parentType))
12420      t = parent;
12421    else {
12422      t = parent.predicate("fhir:"+parentType+'.'+name);
12423    }
12424    composeBackboneElement(t, "item", name, element, index);
12425    if (element.hasSequenceElement()) {
12426      composePositiveInt(t, "ItemComponent", "sequence", element.getSequenceElement(), -1);
12427    }
12428    for (int i = 0; i < element.getCareTeamSequence().size(); i++) {
12429      composePositiveInt(t, "ItemComponent", "careTeamSequence", element.getCareTeamSequence().get(i), i);
12430    }
12431    for (int i = 0; i < element.getDiagnosisSequence().size(); i++) {
12432      composePositiveInt(t, "ItemComponent", "diagnosisSequence", element.getDiagnosisSequence().get(i), i);
12433    }
12434    for (int i = 0; i < element.getProcedureSequence().size(); i++) {
12435      composePositiveInt(t, "ItemComponent", "procedureSequence", element.getProcedureSequence().get(i), i);
12436    }
12437    for (int i = 0; i < element.getInformationSequence().size(); i++) {
12438      composePositiveInt(t, "ItemComponent", "informationSequence", element.getInformationSequence().get(i), i);
12439    }
12440    if (element.hasRevenue()) {
12441      composeCodeableConcept(t, "ItemComponent", "revenue", element.getRevenue(), -1);
12442    }
12443    if (element.hasCategory()) {
12444      composeCodeableConcept(t, "ItemComponent", "category", element.getCategory(), -1);
12445    }
12446    if (element.hasProductOrService()) {
12447      composeCodeableConcept(t, "ItemComponent", "productOrService", element.getProductOrService(), -1);
12448    }
12449    if (element.hasProductOrServiceEnd()) {
12450      composeCodeableConcept(t, "ItemComponent", "productOrServiceEnd", element.getProductOrServiceEnd(), -1);
12451    }
12452    for (int i = 0; i < element.getModifier().size(); i++) {
12453      composeCodeableConcept(t, "ItemComponent", "modifier", element.getModifier().get(i), i);
12454    }
12455    for (int i = 0; i < element.getProgramCode().size(); i++) {
12456      composeCodeableConcept(t, "ItemComponent", "programCode", element.getProgramCode().get(i), i);
12457    }
12458    if (element.hasServiced()) {
12459      composeType(t, "ItemComponent", "serviced", element.getServiced(), -1);
12460    }
12461    if (element.hasLocation()) {
12462      composeType(t, "ItemComponent", "location", element.getLocation(), -1);
12463    }
12464    if (element.hasPatientPaid()) {
12465      composeMoney(t, "ItemComponent", "patientPaid", element.getPatientPaid(), -1);
12466    }
12467    if (element.hasQuantity()) {
12468      composeQuantity(t, "ItemComponent", "quantity", element.getQuantity(), -1);
12469    }
12470    if (element.hasUnitPrice()) {
12471      composeMoney(t, "ItemComponent", "unitPrice", element.getUnitPrice(), -1);
12472    }
12473    if (element.hasFactorElement()) {
12474      composeDecimal(t, "ItemComponent", "factor", element.getFactorElement(), -1);
12475    }
12476    if (element.hasTax()) {
12477      composeMoney(t, "ItemComponent", "tax", element.getTax(), -1);
12478    }
12479    if (element.hasNet()) {
12480      composeMoney(t, "ItemComponent", "net", element.getNet(), -1);
12481    }
12482    for (int i = 0; i < element.getUdi().size(); i++) {
12483      composeReference(t, "ItemComponent", "udi", element.getUdi().get(i), i);
12484    }
12485    for (int i = 0; i < element.getBodySite().size(); i++) {
12486      composeExplanationOfBenefitItemBodySiteComponent(t, "ItemComponent", "bodySite", element.getBodySite().get(i), i);
12487    }
12488    for (int i = 0; i < element.getEncounter().size(); i++) {
12489      composeReference(t, "ItemComponent", "encounter", element.getEncounter().get(i), i);
12490    }
12491    for (int i = 0; i < element.getNoteNumber().size(); i++) {
12492      composePositiveInt(t, "ItemComponent", "noteNumber", element.getNoteNumber().get(i), i);
12493    }
12494    if (element.hasDecision()) {
12495      composeCodeableConcept(t, "ItemComponent", "decision", element.getDecision(), -1);
12496    }
12497    for (int i = 0; i < element.getAdjudication().size(); i++) {
12498      composeExplanationOfBenefitAdjudicationComponent(t, "ItemComponent", "adjudication", element.getAdjudication().get(i), i);
12499    }
12500    for (int i = 0; i < element.getDetail().size(); i++) {
12501      composeExplanationOfBenefitDetailComponent(t, "ItemComponent", "detail", element.getDetail().get(i), i);
12502    }
12503  }
12504
12505  protected void composeExplanationOfBenefitItemBodySiteComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.ItemBodySiteComponent element, int index) {
12506    if (element == null) 
12507      return;
12508    Complex t;
12509    if (Utilities.noString(parentType))
12510      t = parent;
12511    else {
12512      t = parent.predicate("fhir:"+parentType+'.'+name);
12513    }
12514    composeBackboneElement(t, "bodySite", name, element, index);
12515    for (int i = 0; i < element.getSite().size(); i++) {
12516      composeCodeableReference(t, "ItemBodySiteComponent", "site", element.getSite().get(i), i);
12517    }
12518    for (int i = 0; i < element.getSubSite().size(); i++) {
12519      composeCodeableConcept(t, "ItemBodySiteComponent", "subSite", element.getSubSite().get(i), i);
12520    }
12521  }
12522
12523  protected void composeExplanationOfBenefitAdjudicationComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.AdjudicationComponent element, int index) {
12524    if (element == null) 
12525      return;
12526    Complex t;
12527    if (Utilities.noString(parentType))
12528      t = parent;
12529    else {
12530      t = parent.predicate("fhir:"+parentType+'.'+name);
12531    }
12532    composeBackboneElement(t, "adjudication", name, element, index);
12533    if (element.hasCategory()) {
12534      composeCodeableConcept(t, "AdjudicationComponent", "category", element.getCategory(), -1);
12535    }
12536    if (element.hasReason()) {
12537      composeCodeableConcept(t, "AdjudicationComponent", "reason", element.getReason(), -1);
12538    }
12539    if (element.hasAmount()) {
12540      composeMoney(t, "AdjudicationComponent", "amount", element.getAmount(), -1);
12541    }
12542    if (element.hasValueElement()) {
12543      composeDecimal(t, "AdjudicationComponent", "value", element.getValueElement(), -1);
12544    }
12545  }
12546
12547  protected void composeExplanationOfBenefitDetailComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.DetailComponent element, int index) {
12548    if (element == null) 
12549      return;
12550    Complex t;
12551    if (Utilities.noString(parentType))
12552      t = parent;
12553    else {
12554      t = parent.predicate("fhir:"+parentType+'.'+name);
12555    }
12556    composeBackboneElement(t, "detail", name, element, index);
12557    if (element.hasSequenceElement()) {
12558      composePositiveInt(t, "DetailComponent", "sequence", element.getSequenceElement(), -1);
12559    }
12560    if (element.hasRevenue()) {
12561      composeCodeableConcept(t, "DetailComponent", "revenue", element.getRevenue(), -1);
12562    }
12563    if (element.hasCategory()) {
12564      composeCodeableConcept(t, "DetailComponent", "category", element.getCategory(), -1);
12565    }
12566    if (element.hasProductOrService()) {
12567      composeCodeableConcept(t, "DetailComponent", "productOrService", element.getProductOrService(), -1);
12568    }
12569    if (element.hasProductOrServiceEnd()) {
12570      composeCodeableConcept(t, "DetailComponent", "productOrServiceEnd", element.getProductOrServiceEnd(), -1);
12571    }
12572    for (int i = 0; i < element.getModifier().size(); i++) {
12573      composeCodeableConcept(t, "DetailComponent", "modifier", element.getModifier().get(i), i);
12574    }
12575    for (int i = 0; i < element.getProgramCode().size(); i++) {
12576      composeCodeableConcept(t, "DetailComponent", "programCode", element.getProgramCode().get(i), i);
12577    }
12578    if (element.hasPatientPaid()) {
12579      composeMoney(t, "DetailComponent", "patientPaid", element.getPatientPaid(), -1);
12580    }
12581    if (element.hasQuantity()) {
12582      composeQuantity(t, "DetailComponent", "quantity", element.getQuantity(), -1);
12583    }
12584    if (element.hasUnitPrice()) {
12585      composeMoney(t, "DetailComponent", "unitPrice", element.getUnitPrice(), -1);
12586    }
12587    if (element.hasFactorElement()) {
12588      composeDecimal(t, "DetailComponent", "factor", element.getFactorElement(), -1);
12589    }
12590    if (element.hasTax()) {
12591      composeMoney(t, "DetailComponent", "tax", element.getTax(), -1);
12592    }
12593    if (element.hasNet()) {
12594      composeMoney(t, "DetailComponent", "net", element.getNet(), -1);
12595    }
12596    for (int i = 0; i < element.getUdi().size(); i++) {
12597      composeReference(t, "DetailComponent", "udi", element.getUdi().get(i), i);
12598    }
12599    for (int i = 0; i < element.getNoteNumber().size(); i++) {
12600      composePositiveInt(t, "DetailComponent", "noteNumber", element.getNoteNumber().get(i), i);
12601    }
12602    if (element.hasDecision()) {
12603      composeCodeableConcept(t, "DetailComponent", "decision", element.getDecision(), -1);
12604    }
12605    for (int i = 0; i < element.getAdjudication().size(); i++) {
12606      composeExplanationOfBenefitAdjudicationComponent(t, "DetailComponent", "adjudication", element.getAdjudication().get(i), i);
12607    }
12608    for (int i = 0; i < element.getSubDetail().size(); i++) {
12609      composeExplanationOfBenefitSubDetailComponent(t, "DetailComponent", "subDetail", element.getSubDetail().get(i), i);
12610    }
12611  }
12612
12613  protected void composeExplanationOfBenefitSubDetailComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.SubDetailComponent element, int index) {
12614    if (element == null) 
12615      return;
12616    Complex t;
12617    if (Utilities.noString(parentType))
12618      t = parent;
12619    else {
12620      t = parent.predicate("fhir:"+parentType+'.'+name);
12621    }
12622    composeBackboneElement(t, "subDetail", name, element, index);
12623    if (element.hasSequenceElement()) {
12624      composePositiveInt(t, "SubDetailComponent", "sequence", element.getSequenceElement(), -1);
12625    }
12626    if (element.hasRevenue()) {
12627      composeCodeableConcept(t, "SubDetailComponent", "revenue", element.getRevenue(), -1);
12628    }
12629    if (element.hasCategory()) {
12630      composeCodeableConcept(t, "SubDetailComponent", "category", element.getCategory(), -1);
12631    }
12632    if (element.hasProductOrService()) {
12633      composeCodeableConcept(t, "SubDetailComponent", "productOrService", element.getProductOrService(), -1);
12634    }
12635    if (element.hasProductOrServiceEnd()) {
12636      composeCodeableConcept(t, "SubDetailComponent", "productOrServiceEnd", element.getProductOrServiceEnd(), -1);
12637    }
12638    for (int i = 0; i < element.getModifier().size(); i++) {
12639      composeCodeableConcept(t, "SubDetailComponent", "modifier", element.getModifier().get(i), i);
12640    }
12641    for (int i = 0; i < element.getProgramCode().size(); i++) {
12642      composeCodeableConcept(t, "SubDetailComponent", "programCode", element.getProgramCode().get(i), i);
12643    }
12644    if (element.hasPatientPaid()) {
12645      composeMoney(t, "SubDetailComponent", "patientPaid", element.getPatientPaid(), -1);
12646    }
12647    if (element.hasQuantity()) {
12648      composeQuantity(t, "SubDetailComponent", "quantity", element.getQuantity(), -1);
12649    }
12650    if (element.hasUnitPrice()) {
12651      composeMoney(t, "SubDetailComponent", "unitPrice", element.getUnitPrice(), -1);
12652    }
12653    if (element.hasFactorElement()) {
12654      composeDecimal(t, "SubDetailComponent", "factor", element.getFactorElement(), -1);
12655    }
12656    if (element.hasTax()) {
12657      composeMoney(t, "SubDetailComponent", "tax", element.getTax(), -1);
12658    }
12659    if (element.hasNet()) {
12660      composeMoney(t, "SubDetailComponent", "net", element.getNet(), -1);
12661    }
12662    for (int i = 0; i < element.getUdi().size(); i++) {
12663      composeReference(t, "SubDetailComponent", "udi", element.getUdi().get(i), i);
12664    }
12665    for (int i = 0; i < element.getNoteNumber().size(); i++) {
12666      composePositiveInt(t, "SubDetailComponent", "noteNumber", element.getNoteNumber().get(i), i);
12667    }
12668    if (element.hasDecision()) {
12669      composeCodeableConcept(t, "SubDetailComponent", "decision", element.getDecision(), -1);
12670    }
12671    for (int i = 0; i < element.getAdjudication().size(); i++) {
12672      composeExplanationOfBenefitAdjudicationComponent(t, "SubDetailComponent", "adjudication", element.getAdjudication().get(i), i);
12673    }
12674  }
12675
12676  protected void composeExplanationOfBenefitAddedItemComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.AddedItemComponent element, int index) {
12677    if (element == null) 
12678      return;
12679    Complex t;
12680    if (Utilities.noString(parentType))
12681      t = parent;
12682    else {
12683      t = parent.predicate("fhir:"+parentType+'.'+name);
12684    }
12685    composeBackboneElement(t, "addItem", name, element, index);
12686    for (int i = 0; i < element.getItemSequence().size(); i++) {
12687      composePositiveInt(t, "AddedItemComponent", "itemSequence", element.getItemSequence().get(i), i);
12688    }
12689    for (int i = 0; i < element.getDetailSequence().size(); i++) {
12690      composePositiveInt(t, "AddedItemComponent", "detailSequence", element.getDetailSequence().get(i), i);
12691    }
12692    for (int i = 0; i < element.getSubDetailSequence().size(); i++) {
12693      composePositiveInt(t, "AddedItemComponent", "subDetailSequence", element.getSubDetailSequence().get(i), i);
12694    }
12695    for (int i = 0; i < element.getProvider().size(); i++) {
12696      composeReference(t, "AddedItemComponent", "provider", element.getProvider().get(i), i);
12697    }
12698    if (element.hasRevenue()) {
12699      composeCodeableConcept(t, "AddedItemComponent", "revenue", element.getRevenue(), -1);
12700    }
12701    if (element.hasProductOrService()) {
12702      composeCodeableConcept(t, "AddedItemComponent", "productOrService", element.getProductOrService(), -1);
12703    }
12704    if (element.hasProductOrServiceEnd()) {
12705      composeCodeableConcept(t, "AddedItemComponent", "productOrServiceEnd", element.getProductOrServiceEnd(), -1);
12706    }
12707    for (int i = 0; i < element.getModifier().size(); i++) {
12708      composeCodeableConcept(t, "AddedItemComponent", "modifier", element.getModifier().get(i), i);
12709    }
12710    for (int i = 0; i < element.getProgramCode().size(); i++) {
12711      composeCodeableConcept(t, "AddedItemComponent", "programCode", element.getProgramCode().get(i), i);
12712    }
12713    if (element.hasServiced()) {
12714      composeType(t, "AddedItemComponent", "serviced", element.getServiced(), -1);
12715    }
12716    if (element.hasLocation()) {
12717      composeType(t, "AddedItemComponent", "location", element.getLocation(), -1);
12718    }
12719    if (element.hasPatientPaid()) {
12720      composeMoney(t, "AddedItemComponent", "patientPaid", element.getPatientPaid(), -1);
12721    }
12722    if (element.hasQuantity()) {
12723      composeQuantity(t, "AddedItemComponent", "quantity", element.getQuantity(), -1);
12724    }
12725    if (element.hasUnitPrice()) {
12726      composeMoney(t, "AddedItemComponent", "unitPrice", element.getUnitPrice(), -1);
12727    }
12728    if (element.hasFactorElement()) {
12729      composeDecimal(t, "AddedItemComponent", "factor", element.getFactorElement(), -1);
12730    }
12731    if (element.hasTax()) {
12732      composeMoney(t, "AddedItemComponent", "tax", element.getTax(), -1);
12733    }
12734    if (element.hasNet()) {
12735      composeMoney(t, "AddedItemComponent", "net", element.getNet(), -1);
12736    }
12737    for (int i = 0; i < element.getBodySite().size(); i++) {
12738      composeExplanationOfBenefitAddedItemBodySiteComponent(t, "AddedItemComponent", "bodySite", element.getBodySite().get(i), i);
12739    }
12740    for (int i = 0; i < element.getNoteNumber().size(); i++) {
12741      composePositiveInt(t, "AddedItemComponent", "noteNumber", element.getNoteNumber().get(i), i);
12742    }
12743    if (element.hasDecision()) {
12744      composeCodeableConcept(t, "AddedItemComponent", "decision", element.getDecision(), -1);
12745    }
12746    for (int i = 0; i < element.getAdjudication().size(); i++) {
12747      composeExplanationOfBenefitAdjudicationComponent(t, "AddedItemComponent", "adjudication", element.getAdjudication().get(i), i);
12748    }
12749    for (int i = 0; i < element.getDetail().size(); i++) {
12750      composeExplanationOfBenefitAddedItemDetailComponent(t, "AddedItemComponent", "detail", element.getDetail().get(i), i);
12751    }
12752  }
12753
12754  protected void composeExplanationOfBenefitAddedItemBodySiteComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.AddedItemBodySiteComponent element, int index) {
12755    if (element == null) 
12756      return;
12757    Complex t;
12758    if (Utilities.noString(parentType))
12759      t = parent;
12760    else {
12761      t = parent.predicate("fhir:"+parentType+'.'+name);
12762    }
12763    composeBackboneElement(t, "bodySite", name, element, index);
12764    for (int i = 0; i < element.getSite().size(); i++) {
12765      composeCodeableReference(t, "AddedItemBodySiteComponent", "site", element.getSite().get(i), i);
12766    }
12767    for (int i = 0; i < element.getSubSite().size(); i++) {
12768      composeCodeableConcept(t, "AddedItemBodySiteComponent", "subSite", element.getSubSite().get(i), i);
12769    }
12770  }
12771
12772  protected void composeExplanationOfBenefitAddedItemDetailComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.AddedItemDetailComponent element, int index) {
12773    if (element == null) 
12774      return;
12775    Complex t;
12776    if (Utilities.noString(parentType))
12777      t = parent;
12778    else {
12779      t = parent.predicate("fhir:"+parentType+'.'+name);
12780    }
12781    composeBackboneElement(t, "detail", name, element, index);
12782    if (element.hasRevenue()) {
12783      composeCodeableConcept(t, "AddedItemDetailComponent", "revenue", element.getRevenue(), -1);
12784    }
12785    if (element.hasProductOrService()) {
12786      composeCodeableConcept(t, "AddedItemDetailComponent", "productOrService", element.getProductOrService(), -1);
12787    }
12788    if (element.hasProductOrServiceEnd()) {
12789      composeCodeableConcept(t, "AddedItemDetailComponent", "productOrServiceEnd", element.getProductOrServiceEnd(), -1);
12790    }
12791    for (int i = 0; i < element.getModifier().size(); i++) {
12792      composeCodeableConcept(t, "AddedItemDetailComponent", "modifier", element.getModifier().get(i), i);
12793    }
12794    if (element.hasPatientPaid()) {
12795      composeMoney(t, "AddedItemDetailComponent", "patientPaid", element.getPatientPaid(), -1);
12796    }
12797    if (element.hasQuantity()) {
12798      composeQuantity(t, "AddedItemDetailComponent", "quantity", element.getQuantity(), -1);
12799    }
12800    if (element.hasUnitPrice()) {
12801      composeMoney(t, "AddedItemDetailComponent", "unitPrice", element.getUnitPrice(), -1);
12802    }
12803    if (element.hasFactorElement()) {
12804      composeDecimal(t, "AddedItemDetailComponent", "factor", element.getFactorElement(), -1);
12805    }
12806    if (element.hasTax()) {
12807      composeMoney(t, "AddedItemDetailComponent", "tax", element.getTax(), -1);
12808    }
12809    if (element.hasNet()) {
12810      composeMoney(t, "AddedItemDetailComponent", "net", element.getNet(), -1);
12811    }
12812    for (int i = 0; i < element.getNoteNumber().size(); i++) {
12813      composePositiveInt(t, "AddedItemDetailComponent", "noteNumber", element.getNoteNumber().get(i), i);
12814    }
12815    if (element.hasDecision()) {
12816      composeCodeableConcept(t, "AddedItemDetailComponent", "decision", element.getDecision(), -1);
12817    }
12818    for (int i = 0; i < element.getAdjudication().size(); i++) {
12819      composeExplanationOfBenefitAdjudicationComponent(t, "AddedItemDetailComponent", "adjudication", element.getAdjudication().get(i), i);
12820    }
12821    for (int i = 0; i < element.getSubDetail().size(); i++) {
12822      composeExplanationOfBenefitAddedItemDetailSubDetailComponent(t, "AddedItemDetailComponent", "subDetail", element.getSubDetail().get(i), i);
12823    }
12824  }
12825
12826  protected void composeExplanationOfBenefitAddedItemDetailSubDetailComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.AddedItemDetailSubDetailComponent element, int index) {
12827    if (element == null) 
12828      return;
12829    Complex t;
12830    if (Utilities.noString(parentType))
12831      t = parent;
12832    else {
12833      t = parent.predicate("fhir:"+parentType+'.'+name);
12834    }
12835    composeBackboneElement(t, "subDetail", name, element, index);
12836    if (element.hasRevenue()) {
12837      composeCodeableConcept(t, "AddedItemDetailSubDetailComponent", "revenue", element.getRevenue(), -1);
12838    }
12839    if (element.hasProductOrService()) {
12840      composeCodeableConcept(t, "AddedItemDetailSubDetailComponent", "productOrService", element.getProductOrService(), -1);
12841    }
12842    if (element.hasProductOrServiceEnd()) {
12843      composeCodeableConcept(t, "AddedItemDetailSubDetailComponent", "productOrServiceEnd", element.getProductOrServiceEnd(), -1);
12844    }
12845    for (int i = 0; i < element.getModifier().size(); i++) {
12846      composeCodeableConcept(t, "AddedItemDetailSubDetailComponent", "modifier", element.getModifier().get(i), i);
12847    }
12848    if (element.hasPatientPaid()) {
12849      composeMoney(t, "AddedItemDetailSubDetailComponent", "patientPaid", element.getPatientPaid(), -1);
12850    }
12851    if (element.hasQuantity()) {
12852      composeQuantity(t, "AddedItemDetailSubDetailComponent", "quantity", element.getQuantity(), -1);
12853    }
12854    if (element.hasUnitPrice()) {
12855      composeMoney(t, "AddedItemDetailSubDetailComponent", "unitPrice", element.getUnitPrice(), -1);
12856    }
12857    if (element.hasFactorElement()) {
12858      composeDecimal(t, "AddedItemDetailSubDetailComponent", "factor", element.getFactorElement(), -1);
12859    }
12860    if (element.hasTax()) {
12861      composeMoney(t, "AddedItemDetailSubDetailComponent", "tax", element.getTax(), -1);
12862    }
12863    if (element.hasNet()) {
12864      composeMoney(t, "AddedItemDetailSubDetailComponent", "net", element.getNet(), -1);
12865    }
12866    for (int i = 0; i < element.getNoteNumber().size(); i++) {
12867      composePositiveInt(t, "AddedItemDetailSubDetailComponent", "noteNumber", element.getNoteNumber().get(i), i);
12868    }
12869    if (element.hasDecision()) {
12870      composeCodeableConcept(t, "AddedItemDetailSubDetailComponent", "decision", element.getDecision(), -1);
12871    }
12872    for (int i = 0; i < element.getAdjudication().size(); i++) {
12873      composeExplanationOfBenefitAdjudicationComponent(t, "AddedItemDetailSubDetailComponent", "adjudication", element.getAdjudication().get(i), i);
12874    }
12875  }
12876
12877  protected void composeExplanationOfBenefitTotalComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.TotalComponent element, int index) {
12878    if (element == null) 
12879      return;
12880    Complex t;
12881    if (Utilities.noString(parentType))
12882      t = parent;
12883    else {
12884      t = parent.predicate("fhir:"+parentType+'.'+name);
12885    }
12886    composeBackboneElement(t, "total", name, element, index);
12887    if (element.hasCategory()) {
12888      composeCodeableConcept(t, "TotalComponent", "category", element.getCategory(), -1);
12889    }
12890    if (element.hasAmount()) {
12891      composeMoney(t, "TotalComponent", "amount", element.getAmount(), -1);
12892    }
12893  }
12894
12895  protected void composeExplanationOfBenefitPaymentComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.PaymentComponent element, int index) {
12896    if (element == null) 
12897      return;
12898    Complex t;
12899    if (Utilities.noString(parentType))
12900      t = parent;
12901    else {
12902      t = parent.predicate("fhir:"+parentType+'.'+name);
12903    }
12904    composeBackboneElement(t, "payment", name, element, index);
12905    if (element.hasType()) {
12906      composeCodeableConcept(t, "PaymentComponent", "type", element.getType(), -1);
12907    }
12908    if (element.hasAdjustment()) {
12909      composeMoney(t, "PaymentComponent", "adjustment", element.getAdjustment(), -1);
12910    }
12911    if (element.hasAdjustmentReason()) {
12912      composeCodeableConcept(t, "PaymentComponent", "adjustmentReason", element.getAdjustmentReason(), -1);
12913    }
12914    if (element.hasDateElement()) {
12915      composeDate(t, "PaymentComponent", "date", element.getDateElement(), -1);
12916    }
12917    if (element.hasAmount()) {
12918      composeMoney(t, "PaymentComponent", "amount", element.getAmount(), -1);
12919    }
12920    if (element.hasIdentifier()) {
12921      composeIdentifier(t, "PaymentComponent", "identifier", element.getIdentifier(), -1);
12922    }
12923  }
12924
12925  protected void composeExplanationOfBenefitNoteComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.NoteComponent element, int index) {
12926    if (element == null) 
12927      return;
12928    Complex t;
12929    if (Utilities.noString(parentType))
12930      t = parent;
12931    else {
12932      t = parent.predicate("fhir:"+parentType+'.'+name);
12933    }
12934    composeBackboneElement(t, "processNote", name, element, index);
12935    if (element.hasNumberElement()) {
12936      composePositiveInt(t, "NoteComponent", "number", element.getNumberElement(), -1);
12937    }
12938    if (element.hasTypeElement()) {
12939      composeEnum(t, "NoteComponent", "type", element.getTypeElement(), -1);
12940    }
12941    if (element.hasTextElement()) {
12942      composeString(t, "NoteComponent", "text", element.getTextElement(), -1);
12943    }
12944    if (element.hasLanguage()) {
12945      composeCodeableConcept(t, "NoteComponent", "language", element.getLanguage(), -1);
12946    }
12947  }
12948
12949  protected void composeExplanationOfBenefitBenefitBalanceComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.BenefitBalanceComponent element, int index) {
12950    if (element == null) 
12951      return;
12952    Complex t;
12953    if (Utilities.noString(parentType))
12954      t = parent;
12955    else {
12956      t = parent.predicate("fhir:"+parentType+'.'+name);
12957    }
12958    composeBackboneElement(t, "benefitBalance", name, element, index);
12959    if (element.hasCategory()) {
12960      composeCodeableConcept(t, "BenefitBalanceComponent", "category", element.getCategory(), -1);
12961    }
12962    if (element.hasExcludedElement()) {
12963      composeBoolean(t, "BenefitBalanceComponent", "excluded", element.getExcludedElement(), -1);
12964    }
12965    if (element.hasNameElement()) {
12966      composeString(t, "BenefitBalanceComponent", "name", element.getNameElement(), -1);
12967    }
12968    if (element.hasDescriptionElement()) {
12969      composeString(t, "BenefitBalanceComponent", "description", element.getDescriptionElement(), -1);
12970    }
12971    if (element.hasNetwork()) {
12972      composeCodeableConcept(t, "BenefitBalanceComponent", "network", element.getNetwork(), -1);
12973    }
12974    if (element.hasUnit()) {
12975      composeCodeableConcept(t, "BenefitBalanceComponent", "unit", element.getUnit(), -1);
12976    }
12977    if (element.hasTerm()) {
12978      composeCodeableConcept(t, "BenefitBalanceComponent", "term", element.getTerm(), -1);
12979    }
12980    for (int i = 0; i < element.getFinancial().size(); i++) {
12981      composeExplanationOfBenefitBenefitComponent(t, "BenefitBalanceComponent", "financial", element.getFinancial().get(i), i);
12982    }
12983  }
12984
12985  protected void composeExplanationOfBenefitBenefitComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.BenefitComponent element, int index) {
12986    if (element == null) 
12987      return;
12988    Complex t;
12989    if (Utilities.noString(parentType))
12990      t = parent;
12991    else {
12992      t = parent.predicate("fhir:"+parentType+'.'+name);
12993    }
12994    composeBackboneElement(t, "financial", name, element, index);
12995    if (element.hasType()) {
12996      composeCodeableConcept(t, "BenefitComponent", "type", element.getType(), -1);
12997    }
12998    if (element.hasAllowed()) {
12999      composeType(t, "BenefitComponent", "allowed", element.getAllowed(), -1);
13000    }
13001    if (element.hasUsed()) {
13002      composeType(t, "BenefitComponent", "used", element.getUsed(), -1);
13003    }
13004  }
13005
13006  protected void composeFamilyMemberHistory(Complex parent, String parentType, String name, FamilyMemberHistory element, int index) {
13007    if (element == null) 
13008      return;
13009    Complex t;
13010    if (Utilities.noString(parentType))
13011      t = parent;
13012    else {
13013      t = parent.predicate("fhir:"+parentType+'.'+name);
13014    }
13015    composeDomainResource(t, "FamilyMemberHistory", name, element, index);
13016    for (int i = 0; i < element.getIdentifier().size(); i++) {
13017      composeIdentifier(t, "FamilyMemberHistory", "identifier", element.getIdentifier().get(i), i);
13018    }
13019    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
13020      composeCanonical(t, "FamilyMemberHistory", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
13021    }
13022    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
13023      composeUri(t, "FamilyMemberHistory", "instantiatesUri", element.getInstantiatesUri().get(i), i);
13024    }
13025    if (element.hasStatusElement()) {
13026      composeEnum(t, "FamilyMemberHistory", "status", element.getStatusElement(), -1);
13027    }
13028    if (element.hasDataAbsentReason()) {
13029      composeCodeableConcept(t, "FamilyMemberHistory", "dataAbsentReason", element.getDataAbsentReason(), -1);
13030    }
13031    if (element.hasPatient()) {
13032      composeReference(t, "FamilyMemberHistory", "patient", element.getPatient(), -1);
13033    }
13034    if (element.hasDateElement()) {
13035      composeDateTime(t, "FamilyMemberHistory", "date", element.getDateElement(), -1);
13036    }
13037    for (int i = 0; i < element.getParticipant().size(); i++) {
13038      composeFamilyMemberHistoryParticipantComponent(t, "FamilyMemberHistory", "participant", element.getParticipant().get(i), i);
13039    }
13040    if (element.hasNameElement()) {
13041      composeString(t, "FamilyMemberHistory", "name", element.getNameElement(), -1);
13042    }
13043    if (element.hasRelationship()) {
13044      composeCodeableConcept(t, "FamilyMemberHistory", "relationship", element.getRelationship(), -1);
13045    }
13046    if (element.hasSex()) {
13047      composeCodeableConcept(t, "FamilyMemberHistory", "sex", element.getSex(), -1);
13048    }
13049    if (element.hasBorn()) {
13050      composeType(t, "FamilyMemberHistory", "born", element.getBorn(), -1);
13051    }
13052    if (element.hasAge()) {
13053      composeType(t, "FamilyMemberHistory", "age", element.getAge(), -1);
13054    }
13055    if (element.hasEstimatedAgeElement()) {
13056      composeBoolean(t, "FamilyMemberHistory", "estimatedAge", element.getEstimatedAgeElement(), -1);
13057    }
13058    if (element.hasDeceased()) {
13059      composeType(t, "FamilyMemberHistory", "deceased", element.getDeceased(), -1);
13060    }
13061    for (int i = 0; i < element.getReason().size(); i++) {
13062      composeCodeableReference(t, "FamilyMemberHistory", "reason", element.getReason().get(i), i);
13063    }
13064    for (int i = 0; i < element.getNote().size(); i++) {
13065      composeAnnotation(t, "FamilyMemberHistory", "note", element.getNote().get(i), i);
13066    }
13067    for (int i = 0; i < element.getCondition().size(); i++) {
13068      composeFamilyMemberHistoryConditionComponent(t, "FamilyMemberHistory", "condition", element.getCondition().get(i), i);
13069    }
13070    for (int i = 0; i < element.getProcedure().size(); i++) {
13071      composeFamilyMemberHistoryProcedureComponent(t, "FamilyMemberHistory", "procedure", element.getProcedure().get(i), i);
13072    }
13073  }
13074
13075  protected void composeFamilyMemberHistoryParticipantComponent(Complex parent, String parentType, String name, FamilyMemberHistory.FamilyMemberHistoryParticipantComponent element, int index) {
13076    if (element == null) 
13077      return;
13078    Complex t;
13079    if (Utilities.noString(parentType))
13080      t = parent;
13081    else {
13082      t = parent.predicate("fhir:"+parentType+'.'+name);
13083    }
13084    composeBackboneElement(t, "participant", name, element, index);
13085    if (element.hasFunction()) {
13086      composeCodeableConcept(t, "FamilyMemberHistoryParticipantComponent", "function", element.getFunction(), -1);
13087    }
13088    if (element.hasActor()) {
13089      composeReference(t, "FamilyMemberHistoryParticipantComponent", "actor", element.getActor(), -1);
13090    }
13091  }
13092
13093  protected void composeFamilyMemberHistoryConditionComponent(Complex parent, String parentType, String name, FamilyMemberHistory.FamilyMemberHistoryConditionComponent element, int index) {
13094    if (element == null) 
13095      return;
13096    Complex t;
13097    if (Utilities.noString(parentType))
13098      t = parent;
13099    else {
13100      t = parent.predicate("fhir:"+parentType+'.'+name);
13101    }
13102    composeBackboneElement(t, "condition", name, element, index);
13103    if (element.hasCode()) {
13104      composeCodeableConcept(t, "FamilyMemberHistoryConditionComponent", "code", element.getCode(), -1);
13105    }
13106    if (element.hasOutcome()) {
13107      composeCodeableConcept(t, "FamilyMemberHistoryConditionComponent", "outcome", element.getOutcome(), -1);
13108    }
13109    if (element.hasContributedToDeathElement()) {
13110      composeBoolean(t, "FamilyMemberHistoryConditionComponent", "contributedToDeath", element.getContributedToDeathElement(), -1);
13111    }
13112    if (element.hasOnset()) {
13113      composeType(t, "FamilyMemberHistoryConditionComponent", "onset", element.getOnset(), -1);
13114    }
13115    for (int i = 0; i < element.getNote().size(); i++) {
13116      composeAnnotation(t, "FamilyMemberHistoryConditionComponent", "note", element.getNote().get(i), i);
13117    }
13118  }
13119
13120  protected void composeFamilyMemberHistoryProcedureComponent(Complex parent, String parentType, String name, FamilyMemberHistory.FamilyMemberHistoryProcedureComponent element, int index) {
13121    if (element == null) 
13122      return;
13123    Complex t;
13124    if (Utilities.noString(parentType))
13125      t = parent;
13126    else {
13127      t = parent.predicate("fhir:"+parentType+'.'+name);
13128    }
13129    composeBackboneElement(t, "procedure", name, element, index);
13130    if (element.hasCode()) {
13131      composeCodeableConcept(t, "FamilyMemberHistoryProcedureComponent", "code", element.getCode(), -1);
13132    }
13133    if (element.hasOutcome()) {
13134      composeCodeableConcept(t, "FamilyMemberHistoryProcedureComponent", "outcome", element.getOutcome(), -1);
13135    }
13136    if (element.hasContributedToDeathElement()) {
13137      composeBoolean(t, "FamilyMemberHistoryProcedureComponent", "contributedToDeath", element.getContributedToDeathElement(), -1);
13138    }
13139    if (element.hasPerformed()) {
13140      composeType(t, "FamilyMemberHistoryProcedureComponent", "performed", element.getPerformed(), -1);
13141    }
13142    for (int i = 0; i < element.getNote().size(); i++) {
13143      composeAnnotation(t, "FamilyMemberHistoryProcedureComponent", "note", element.getNote().get(i), i);
13144    }
13145  }
13146
13147  protected void composeFlag(Complex parent, String parentType, String name, Flag element, int index) {
13148    if (element == null) 
13149      return;
13150    Complex t;
13151    if (Utilities.noString(parentType))
13152      t = parent;
13153    else {
13154      t = parent.predicate("fhir:"+parentType+'.'+name);
13155    }
13156    composeDomainResource(t, "Flag", name, element, index);
13157    for (int i = 0; i < element.getIdentifier().size(); i++) {
13158      composeIdentifier(t, "Flag", "identifier", element.getIdentifier().get(i), i);
13159    }
13160    if (element.hasStatusElement()) {
13161      composeEnum(t, "Flag", "status", element.getStatusElement(), -1);
13162    }
13163    for (int i = 0; i < element.getCategory().size(); i++) {
13164      composeCodeableConcept(t, "Flag", "category", element.getCategory().get(i), i);
13165    }
13166    if (element.hasCode()) {
13167      composeCodeableConcept(t, "Flag", "code", element.getCode(), -1);
13168    }
13169    if (element.hasSubject()) {
13170      composeReference(t, "Flag", "subject", element.getSubject(), -1);
13171    }
13172    if (element.hasPeriod()) {
13173      composePeriod(t, "Flag", "period", element.getPeriod(), -1);
13174    }
13175    if (element.hasEncounter()) {
13176      composeReference(t, "Flag", "encounter", element.getEncounter(), -1);
13177    }
13178    if (element.hasAuthor()) {
13179      composeReference(t, "Flag", "author", element.getAuthor(), -1);
13180    }
13181  }
13182
13183  protected void composeFormularyItem(Complex parent, String parentType, String name, FormularyItem element, int index) {
13184    if (element == null) 
13185      return;
13186    Complex t;
13187    if (Utilities.noString(parentType))
13188      t = parent;
13189    else {
13190      t = parent.predicate("fhir:"+parentType+'.'+name);
13191    }
13192    composeDomainResource(t, "FormularyItem", name, element, index);
13193    for (int i = 0; i < element.getIdentifier().size(); i++) {
13194      composeIdentifier(t, "FormularyItem", "identifier", element.getIdentifier().get(i), i);
13195    }
13196    if (element.hasCode()) {
13197      composeCodeableConcept(t, "FormularyItem", "code", element.getCode(), -1);
13198    }
13199    if (element.hasStatusElement()) {
13200      composeEnum(t, "FormularyItem", "status", element.getStatusElement(), -1);
13201    }
13202  }
13203
13204  protected void composeGenomicStudy(Complex parent, String parentType, String name, GenomicStudy element, int index) {
13205    if (element == null) 
13206      return;
13207    Complex t;
13208    if (Utilities.noString(parentType))
13209      t = parent;
13210    else {
13211      t = parent.predicate("fhir:"+parentType+'.'+name);
13212    }
13213    composeDomainResource(t, "GenomicStudy", name, element, index);
13214    for (int i = 0; i < element.getIdentifier().size(); i++) {
13215      composeIdentifier(t, "GenomicStudy", "identifier", element.getIdentifier().get(i), i);
13216    }
13217    if (element.hasStatus()) {
13218      composeCodeableConcept(t, "GenomicStudy", "status", element.getStatus(), -1);
13219    }
13220    for (int i = 0; i < element.getType().size(); i++) {
13221      composeCodeableConcept(t, "GenomicStudy", "type", element.getType().get(i), i);
13222    }
13223    if (element.hasSubject()) {
13224      composeReference(t, "GenomicStudy", "subject", element.getSubject(), -1);
13225    }
13226    if (element.hasEncounter()) {
13227      composeReference(t, "GenomicStudy", "encounter", element.getEncounter(), -1);
13228    }
13229    if (element.hasStartDateElement()) {
13230      composeDateTime(t, "GenomicStudy", "startDate", element.getStartDateElement(), -1);
13231    }
13232    for (int i = 0; i < element.getBasedOn().size(); i++) {
13233      composeReference(t, "GenomicStudy", "basedOn", element.getBasedOn().get(i), i);
13234    }
13235    if (element.hasReferrer()) {
13236      composeReference(t, "GenomicStudy", "referrer", element.getReferrer(), -1);
13237    }
13238    for (int i = 0; i < element.getInterpreter().size(); i++) {
13239      composeReference(t, "GenomicStudy", "interpreter", element.getInterpreter().get(i), i);
13240    }
13241    for (int i = 0; i < element.getReason().size(); i++) {
13242      composeCodeableReference(t, "GenomicStudy", "reason", element.getReason().get(i), i);
13243    }
13244    if (element.hasInstantiatesCanonicalElement()) {
13245      composeCanonical(t, "GenomicStudy", "instantiatesCanonical", element.getInstantiatesCanonicalElement(), -1);
13246    }
13247    if (element.hasInstantiatesUriElement()) {
13248      composeUri(t, "GenomicStudy", "instantiatesUri", element.getInstantiatesUriElement(), -1);
13249    }
13250    for (int i = 0; i < element.getNote().size(); i++) {
13251      composeAnnotation(t, "GenomicStudy", "note", element.getNote().get(i), i);
13252    }
13253    if (element.hasDescriptionElement()) {
13254      composeString(t, "GenomicStudy", "description", element.getDescriptionElement(), -1);
13255    }
13256    for (int i = 0; i < element.getAnalysis().size(); i++) {
13257      composeGenomicStudyAnalysisComponent(t, "GenomicStudy", "analysis", element.getAnalysis().get(i), i);
13258    }
13259  }
13260
13261  protected void composeGenomicStudyAnalysisComponent(Complex parent, String parentType, String name, GenomicStudy.GenomicStudyAnalysisComponent element, int index) {
13262    if (element == null) 
13263      return;
13264    Complex t;
13265    if (Utilities.noString(parentType))
13266      t = parent;
13267    else {
13268      t = parent.predicate("fhir:"+parentType+'.'+name);
13269    }
13270    composeBackboneElement(t, "analysis", name, element, index);
13271    for (int i = 0; i < element.getIdentifier().size(); i++) {
13272      composeIdentifier(t, "GenomicStudyAnalysisComponent", "identifier", element.getIdentifier().get(i), i);
13273    }
13274    for (int i = 0; i < element.getMethodType().size(); i++) {
13275      composeCodeableConcept(t, "GenomicStudyAnalysisComponent", "methodType", element.getMethodType().get(i), i);
13276    }
13277    for (int i = 0; i < element.getChangeType().size(); i++) {
13278      composeCodeableConcept(t, "GenomicStudyAnalysisComponent", "changeType", element.getChangeType().get(i), i);
13279    }
13280    if (element.hasGenomeBuild()) {
13281      composeCodeableConcept(t, "GenomicStudyAnalysisComponent", "genomeBuild", element.getGenomeBuild(), -1);
13282    }
13283    if (element.hasInstantiatesCanonicalElement()) {
13284      composeCanonical(t, "GenomicStudyAnalysisComponent", "instantiatesCanonical", element.getInstantiatesCanonicalElement(), -1);
13285    }
13286    if (element.hasInstantiatesUriElement()) {
13287      composeUri(t, "GenomicStudyAnalysisComponent", "instantiatesUri", element.getInstantiatesUriElement(), -1);
13288    }
13289    if (element.hasTitleElement()) {
13290      composeString(t, "GenomicStudyAnalysisComponent", "title", element.getTitleElement(), -1);
13291    }
13292    if (element.hasSubject()) {
13293      composeReference(t, "GenomicStudyAnalysisComponent", "subject", element.getSubject(), -1);
13294    }
13295    for (int i = 0; i < element.getSpecimen().size(); i++) {
13296      composeReference(t, "GenomicStudyAnalysisComponent", "specimen", element.getSpecimen().get(i), i);
13297    }
13298    if (element.hasDateElement()) {
13299      composeDateTime(t, "GenomicStudyAnalysisComponent", "date", element.getDateElement(), -1);
13300    }
13301    for (int i = 0; i < element.getNote().size(); i++) {
13302      composeAnnotation(t, "GenomicStudyAnalysisComponent", "note", element.getNote().get(i), i);
13303    }
13304    if (element.hasProtocolPerformed()) {
13305      composeReference(t, "GenomicStudyAnalysisComponent", "protocolPerformed", element.getProtocolPerformed(), -1);
13306    }
13307    for (int i = 0; i < element.getRegionsStudied().size(); i++) {
13308      composeReference(t, "GenomicStudyAnalysisComponent", "regionsStudied", element.getRegionsStudied().get(i), i);
13309    }
13310    for (int i = 0; i < element.getRegionsCalled().size(); i++) {
13311      composeReference(t, "GenomicStudyAnalysisComponent", "regionsCalled", element.getRegionsCalled().get(i), i);
13312    }
13313    for (int i = 0; i < element.getInput().size(); i++) {
13314      composeGenomicStudyAnalysisInputComponent(t, "GenomicStudyAnalysisComponent", "input", element.getInput().get(i), i);
13315    }
13316    for (int i = 0; i < element.getOutput().size(); i++) {
13317      composeGenomicStudyAnalysisOutputComponent(t, "GenomicStudyAnalysisComponent", "output", element.getOutput().get(i), i);
13318    }
13319    for (int i = 0; i < element.getPerformer().size(); i++) {
13320      composeGenomicStudyAnalysisPerformerComponent(t, "GenomicStudyAnalysisComponent", "performer", element.getPerformer().get(i), i);
13321    }
13322    for (int i = 0; i < element.getDevice().size(); i++) {
13323      composeGenomicStudyAnalysisDeviceComponent(t, "GenomicStudyAnalysisComponent", "device", element.getDevice().get(i), i);
13324    }
13325  }
13326
13327  protected void composeGenomicStudyAnalysisInputComponent(Complex parent, String parentType, String name, GenomicStudy.GenomicStudyAnalysisInputComponent element, int index) {
13328    if (element == null) 
13329      return;
13330    Complex t;
13331    if (Utilities.noString(parentType))
13332      t = parent;
13333    else {
13334      t = parent.predicate("fhir:"+parentType+'.'+name);
13335    }
13336    composeBackboneElement(t, "input", name, element, index);
13337    if (element.hasFile()) {
13338      composeReference(t, "GenomicStudyAnalysisInputComponent", "file", element.getFile(), -1);
13339    }
13340    if (element.hasType()) {
13341      composeCodeableConcept(t, "GenomicStudyAnalysisInputComponent", "type", element.getType(), -1);
13342    }
13343    if (element.hasGeneratedBy()) {
13344      composeType(t, "GenomicStudyAnalysisInputComponent", "generatedBy", element.getGeneratedBy(), -1);
13345    }
13346  }
13347
13348  protected void composeGenomicStudyAnalysisOutputComponent(Complex parent, String parentType, String name, GenomicStudy.GenomicStudyAnalysisOutputComponent element, int index) {
13349    if (element == null) 
13350      return;
13351    Complex t;
13352    if (Utilities.noString(parentType))
13353      t = parent;
13354    else {
13355      t = parent.predicate("fhir:"+parentType+'.'+name);
13356    }
13357    composeBackboneElement(t, "output", name, element, index);
13358    if (element.hasFile()) {
13359      composeReference(t, "GenomicStudyAnalysisOutputComponent", "file", element.getFile(), -1);
13360    }
13361    if (element.hasType()) {
13362      composeCodeableConcept(t, "GenomicStudyAnalysisOutputComponent", "type", element.getType(), -1);
13363    }
13364  }
13365
13366  protected void composeGenomicStudyAnalysisPerformerComponent(Complex parent, String parentType, String name, GenomicStudy.GenomicStudyAnalysisPerformerComponent element, int index) {
13367    if (element == null) 
13368      return;
13369    Complex t;
13370    if (Utilities.noString(parentType))
13371      t = parent;
13372    else {
13373      t = parent.predicate("fhir:"+parentType+'.'+name);
13374    }
13375    composeBackboneElement(t, "performer", name, element, index);
13376    if (element.hasActor()) {
13377      composeReference(t, "GenomicStudyAnalysisPerformerComponent", "actor", element.getActor(), -1);
13378    }
13379    if (element.hasRole()) {
13380      composeCodeableConcept(t, "GenomicStudyAnalysisPerformerComponent", "role", element.getRole(), -1);
13381    }
13382  }
13383
13384  protected void composeGenomicStudyAnalysisDeviceComponent(Complex parent, String parentType, String name, GenomicStudy.GenomicStudyAnalysisDeviceComponent element, int index) {
13385    if (element == null) 
13386      return;
13387    Complex t;
13388    if (Utilities.noString(parentType))
13389      t = parent;
13390    else {
13391      t = parent.predicate("fhir:"+parentType+'.'+name);
13392    }
13393    composeBackboneElement(t, "device", name, element, index);
13394    if (element.hasDevice()) {
13395      composeReference(t, "GenomicStudyAnalysisDeviceComponent", "device", element.getDevice(), -1);
13396    }
13397    if (element.hasFunction()) {
13398      composeCodeableConcept(t, "GenomicStudyAnalysisDeviceComponent", "function", element.getFunction(), -1);
13399    }
13400  }
13401
13402  protected void composeGoal(Complex parent, String parentType, String name, Goal element, int index) {
13403    if (element == null) 
13404      return;
13405    Complex t;
13406    if (Utilities.noString(parentType))
13407      t = parent;
13408    else {
13409      t = parent.predicate("fhir:"+parentType+'.'+name);
13410    }
13411    composeDomainResource(t, "Goal", name, element, index);
13412    for (int i = 0; i < element.getIdentifier().size(); i++) {
13413      composeIdentifier(t, "Goal", "identifier", element.getIdentifier().get(i), i);
13414    }
13415    if (element.hasLifecycleStatusElement()) {
13416      composeEnum(t, "Goal", "lifecycleStatus", element.getLifecycleStatusElement(), -1);
13417    }
13418    if (element.hasAchievementStatus()) {
13419      composeCodeableConcept(t, "Goal", "achievementStatus", element.getAchievementStatus(), -1);
13420    }
13421    for (int i = 0; i < element.getCategory().size(); i++) {
13422      composeCodeableConcept(t, "Goal", "category", element.getCategory().get(i), i);
13423    }
13424    if (element.hasContinuousElement()) {
13425      composeBoolean(t, "Goal", "continuous", element.getContinuousElement(), -1);
13426    }
13427    if (element.hasPriority()) {
13428      composeCodeableConcept(t, "Goal", "priority", element.getPriority(), -1);
13429    }
13430    if (element.hasDescription()) {
13431      composeCodeableConcept(t, "Goal", "description", element.getDescription(), -1);
13432    }
13433    if (element.hasSubject()) {
13434      composeReference(t, "Goal", "subject", element.getSubject(), -1);
13435    }
13436    if (element.hasStart()) {
13437      composeType(t, "Goal", "start", element.getStart(), -1);
13438    }
13439    for (int i = 0; i < element.getTarget().size(); i++) {
13440      composeGoalTargetComponent(t, "Goal", "target", element.getTarget().get(i), i);
13441    }
13442    if (element.hasStatusDateElement()) {
13443      composeDate(t, "Goal", "statusDate", element.getStatusDateElement(), -1);
13444    }
13445    if (element.hasStatusReasonElement()) {
13446      composeString(t, "Goal", "statusReason", element.getStatusReasonElement(), -1);
13447    }
13448    if (element.hasSource()) {
13449      composeReference(t, "Goal", "source", element.getSource(), -1);
13450    }
13451    for (int i = 0; i < element.getAddresses().size(); i++) {
13452      composeReference(t, "Goal", "addresses", element.getAddresses().get(i), i);
13453    }
13454    for (int i = 0; i < element.getNote().size(); i++) {
13455      composeAnnotation(t, "Goal", "note", element.getNote().get(i), i);
13456    }
13457    for (int i = 0; i < element.getOutcome().size(); i++) {
13458      composeCodeableReference(t, "Goal", "outcome", element.getOutcome().get(i), i);
13459    }
13460  }
13461
13462  protected void composeGoalTargetComponent(Complex parent, String parentType, String name, Goal.GoalTargetComponent element, int index) {
13463    if (element == null) 
13464      return;
13465    Complex t;
13466    if (Utilities.noString(parentType))
13467      t = parent;
13468    else {
13469      t = parent.predicate("fhir:"+parentType+'.'+name);
13470    }
13471    composeBackboneElement(t, "target", name, element, index);
13472    if (element.hasMeasure()) {
13473      composeCodeableConcept(t, "GoalTargetComponent", "measure", element.getMeasure(), -1);
13474    }
13475    if (element.hasDetail()) {
13476      composeType(t, "GoalTargetComponent", "detail", element.getDetail(), -1);
13477    }
13478    if (element.hasDue()) {
13479      composeType(t, "GoalTargetComponent", "due", element.getDue(), -1);
13480    }
13481  }
13482
13483  protected void composeGraphDefinition(Complex parent, String parentType, String name, GraphDefinition element, int index) {
13484    if (element == null) 
13485      return;
13486    Complex t;
13487    if (Utilities.noString(parentType))
13488      t = parent;
13489    else {
13490      t = parent.predicate("fhir:"+parentType+'.'+name);
13491    }
13492    composeCanonicalResource(t, "GraphDefinition", name, element, index);
13493    if (element.hasUrlElement()) {
13494      composeUri(t, "GraphDefinition", "url", element.getUrlElement(), -1);
13495    }
13496    if (element.hasVersionElement()) {
13497      composeString(t, "GraphDefinition", "version", element.getVersionElement(), -1);
13498    }
13499    if (element.hasVersionAlgorithm()) {
13500      composeType(t, "GraphDefinition", "versionAlgorithm", element.getVersionAlgorithm(), -1);
13501    }
13502    if (element.hasNameElement()) {
13503      composeString(t, "GraphDefinition", "name", element.getNameElement(), -1);
13504    }
13505    if (element.hasTitleElement()) {
13506      composeString(t, "GraphDefinition", "title", element.getTitleElement(), -1);
13507    }
13508    if (element.hasStatusElement()) {
13509      composeEnum(t, "GraphDefinition", "status", element.getStatusElement(), -1);
13510    }
13511    if (element.hasExperimentalElement()) {
13512      composeBoolean(t, "GraphDefinition", "experimental", element.getExperimentalElement(), -1);
13513    }
13514    if (element.hasDateElement()) {
13515      composeDateTime(t, "GraphDefinition", "date", element.getDateElement(), -1);
13516    }
13517    if (element.hasPublisherElement()) {
13518      composeString(t, "GraphDefinition", "publisher", element.getPublisherElement(), -1);
13519    }
13520    for (int i = 0; i < element.getContact().size(); i++) {
13521      composeContactDetail(t, "GraphDefinition", "contact", element.getContact().get(i), i);
13522    }
13523    if (element.hasDescriptionElement()) {
13524      composeMarkdown(t, "GraphDefinition", "description", element.getDescriptionElement(), -1);
13525    }
13526    for (int i = 0; i < element.getUseContext().size(); i++) {
13527      composeUsageContext(t, "GraphDefinition", "useContext", element.getUseContext().get(i), i);
13528    }
13529    for (int i = 0; i < element.getJurisdiction().size(); i++) {
13530      composeCodeableConcept(t, "GraphDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
13531    }
13532    if (element.hasPurposeElement()) {
13533      composeMarkdown(t, "GraphDefinition", "purpose", element.getPurposeElement(), -1);
13534    }
13535    if (element.hasStartElement()) {
13536      composeId(t, "GraphDefinition", "start", element.getStartElement(), -1);
13537    }
13538    for (int i = 0; i < element.getNode().size(); i++) {
13539      composeGraphDefinitionNodeComponent(t, "GraphDefinition", "node", element.getNode().get(i), i);
13540    }
13541    for (int i = 0; i < element.getLink().size(); i++) {
13542      composeGraphDefinitionLinkComponent(t, "GraphDefinition", "link", element.getLink().get(i), i);
13543    }
13544  }
13545
13546  protected void composeGraphDefinitionNodeComponent(Complex parent, String parentType, String name, GraphDefinition.GraphDefinitionNodeComponent element, int index) {
13547    if (element == null) 
13548      return;
13549    Complex t;
13550    if (Utilities.noString(parentType))
13551      t = parent;
13552    else {
13553      t = parent.predicate("fhir:"+parentType+'.'+name);
13554    }
13555    composeBackboneElement(t, "node", name, element, index);
13556    if (element.hasNodeIdElement()) {
13557      composeId(t, "GraphDefinitionNodeComponent", "nodeId", element.getNodeIdElement(), -1);
13558    }
13559    if (element.hasDescriptionElement()) {
13560      composeString(t, "GraphDefinitionNodeComponent", "description", element.getDescriptionElement(), -1);
13561    }
13562    if (element.hasTypeElement()) {
13563      composeEnum(t, "GraphDefinitionNodeComponent", "type", element.getTypeElement(), -1);
13564    }
13565    if (element.hasProfileElement()) {
13566      composeCanonical(t, "GraphDefinitionNodeComponent", "profile", element.getProfileElement(), -1);
13567    }
13568  }
13569
13570  protected void composeGraphDefinitionLinkComponent(Complex parent, String parentType, String name, GraphDefinition.GraphDefinitionLinkComponent element, int index) {
13571    if (element == null) 
13572      return;
13573    Complex t;
13574    if (Utilities.noString(parentType))
13575      t = parent;
13576    else {
13577      t = parent.predicate("fhir:"+parentType+'.'+name);
13578    }
13579    composeBackboneElement(t, "link", name, element, index);
13580    if (element.hasDescriptionElement()) {
13581      composeString(t, "GraphDefinitionLinkComponent", "description", element.getDescriptionElement(), -1);
13582    }
13583    if (element.hasMinElement()) {
13584      composeInteger(t, "GraphDefinitionLinkComponent", "min", element.getMinElement(), -1);
13585    }
13586    if (element.hasMaxElement()) {
13587      composeString(t, "GraphDefinitionLinkComponent", "max", element.getMaxElement(), -1);
13588    }
13589    if (element.hasSourceIdElement()) {
13590      composeId(t, "GraphDefinitionLinkComponent", "sourceId", element.getSourceIdElement(), -1);
13591    }
13592    if (element.hasPathElement()) {
13593      composeString(t, "GraphDefinitionLinkComponent", "path", element.getPathElement(), -1);
13594    }
13595    if (element.hasSliceNameElement()) {
13596      composeString(t, "GraphDefinitionLinkComponent", "sliceName", element.getSliceNameElement(), -1);
13597    }
13598    if (element.hasTargetIdElement()) {
13599      composeId(t, "GraphDefinitionLinkComponent", "targetId", element.getTargetIdElement(), -1);
13600    }
13601    if (element.hasParamsElement()) {
13602      composeString(t, "GraphDefinitionLinkComponent", "params", element.getParamsElement(), -1);
13603    }
13604    for (int i = 0; i < element.getCompartment().size(); i++) {
13605      composeGraphDefinitionLinkCompartmentComponent(t, "GraphDefinitionLinkComponent", "compartment", element.getCompartment().get(i), i);
13606    }
13607  }
13608
13609  protected void composeGraphDefinitionLinkCompartmentComponent(Complex parent, String parentType, String name, GraphDefinition.GraphDefinitionLinkCompartmentComponent element, int index) {
13610    if (element == null) 
13611      return;
13612    Complex t;
13613    if (Utilities.noString(parentType))
13614      t = parent;
13615    else {
13616      t = parent.predicate("fhir:"+parentType+'.'+name);
13617    }
13618    composeBackboneElement(t, "compartment", name, element, index);
13619    if (element.hasUseElement()) {
13620      composeEnum(t, "GraphDefinitionLinkCompartmentComponent", "use", element.getUseElement(), -1);
13621    }
13622    if (element.hasRuleElement()) {
13623      composeEnum(t, "GraphDefinitionLinkCompartmentComponent", "rule", element.getRuleElement(), -1);
13624    }
13625    if (element.hasCodeElement()) {
13626      composeEnum(t, "GraphDefinitionLinkCompartmentComponent", "code", element.getCodeElement(), -1);
13627    }
13628    if (element.hasExpressionElement()) {
13629      composeString(t, "GraphDefinitionLinkCompartmentComponent", "expression", element.getExpressionElement(), -1);
13630    }
13631    if (element.hasDescriptionElement()) {
13632      composeString(t, "GraphDefinitionLinkCompartmentComponent", "description", element.getDescriptionElement(), -1);
13633    }
13634  }
13635
13636  protected void composeGroup(Complex parent, String parentType, String name, Group element, int index) {
13637    if (element == null) 
13638      return;
13639    Complex t;
13640    if (Utilities.noString(parentType))
13641      t = parent;
13642    else {
13643      t = parent.predicate("fhir:"+parentType+'.'+name);
13644    }
13645    composeDomainResource(t, "Group", name, element, index);
13646    for (int i = 0; i < element.getIdentifier().size(); i++) {
13647      composeIdentifier(t, "Group", "identifier", element.getIdentifier().get(i), i);
13648    }
13649    if (element.hasActiveElement()) {
13650      composeBoolean(t, "Group", "active", element.getActiveElement(), -1);
13651    }
13652    if (element.hasTypeElement()) {
13653      composeEnum(t, "Group", "type", element.getTypeElement(), -1);
13654    }
13655    if (element.hasMembershipElement()) {
13656      composeEnum(t, "Group", "membership", element.getMembershipElement(), -1);
13657    }
13658    if (element.hasCode()) {
13659      composeCodeableConcept(t, "Group", "code", element.getCode(), -1);
13660    }
13661    if (element.hasNameElement()) {
13662      composeString(t, "Group", "name", element.getNameElement(), -1);
13663    }
13664    if (element.hasDescriptionElement()) {
13665      composeMarkdown(t, "Group", "description", element.getDescriptionElement(), -1);
13666    }
13667    if (element.hasQuantityElement()) {
13668      composeUnsignedInt(t, "Group", "quantity", element.getQuantityElement(), -1);
13669    }
13670    if (element.hasManagingEntity()) {
13671      composeReference(t, "Group", "managingEntity", element.getManagingEntity(), -1);
13672    }
13673    for (int i = 0; i < element.getCharacteristic().size(); i++) {
13674      composeGroupCharacteristicComponent(t, "Group", "characteristic", element.getCharacteristic().get(i), i);
13675    }
13676    for (int i = 0; i < element.getMember().size(); i++) {
13677      composeGroupMemberComponent(t, "Group", "member", element.getMember().get(i), i);
13678    }
13679  }
13680
13681  protected void composeGroupCharacteristicComponent(Complex parent, String parentType, String name, Group.GroupCharacteristicComponent element, int index) {
13682    if (element == null) 
13683      return;
13684    Complex t;
13685    if (Utilities.noString(parentType))
13686      t = parent;
13687    else {
13688      t = parent.predicate("fhir:"+parentType+'.'+name);
13689    }
13690    composeBackboneElement(t, "characteristic", name, element, index);
13691    if (element.hasCode()) {
13692      composeCodeableConcept(t, "GroupCharacteristicComponent", "code", element.getCode(), -1);
13693    }
13694    if (element.hasValue()) {
13695      composeType(t, "GroupCharacteristicComponent", "value", element.getValue(), -1);
13696    }
13697    if (element.hasExcludeElement()) {
13698      composeBoolean(t, "GroupCharacteristicComponent", "exclude", element.getExcludeElement(), -1);
13699    }
13700    if (element.hasPeriod()) {
13701      composePeriod(t, "GroupCharacteristicComponent", "period", element.getPeriod(), -1);
13702    }
13703  }
13704
13705  protected void composeGroupMemberComponent(Complex parent, String parentType, String name, Group.GroupMemberComponent element, int index) {
13706    if (element == null) 
13707      return;
13708    Complex t;
13709    if (Utilities.noString(parentType))
13710      t = parent;
13711    else {
13712      t = parent.predicate("fhir:"+parentType+'.'+name);
13713    }
13714    composeBackboneElement(t, "member", name, element, index);
13715    if (element.hasEntity()) {
13716      composeReference(t, "GroupMemberComponent", "entity", element.getEntity(), -1);
13717    }
13718    if (element.hasPeriod()) {
13719      composePeriod(t, "GroupMemberComponent", "period", element.getPeriod(), -1);
13720    }
13721    if (element.hasInactiveElement()) {
13722      composeBoolean(t, "GroupMemberComponent", "inactive", element.getInactiveElement(), -1);
13723    }
13724  }
13725
13726  protected void composeGuidanceResponse(Complex parent, String parentType, String name, GuidanceResponse element, int index) {
13727    if (element == null) 
13728      return;
13729    Complex t;
13730    if (Utilities.noString(parentType))
13731      t = parent;
13732    else {
13733      t = parent.predicate("fhir:"+parentType+'.'+name);
13734    }
13735    composeDomainResource(t, "GuidanceResponse", name, element, index);
13736    if (element.hasRequestIdentifier()) {
13737      composeIdentifier(t, "GuidanceResponse", "requestIdentifier", element.getRequestIdentifier(), -1);
13738    }
13739    for (int i = 0; i < element.getIdentifier().size(); i++) {
13740      composeIdentifier(t, "GuidanceResponse", "identifier", element.getIdentifier().get(i), i);
13741    }
13742    if (element.hasModule()) {
13743      composeType(t, "GuidanceResponse", "module", element.getModule(), -1);
13744    }
13745    if (element.hasStatusElement()) {
13746      composeEnum(t, "GuidanceResponse", "status", element.getStatusElement(), -1);
13747    }
13748    if (element.hasSubject()) {
13749      composeReference(t, "GuidanceResponse", "subject", element.getSubject(), -1);
13750    }
13751    if (element.hasEncounter()) {
13752      composeReference(t, "GuidanceResponse", "encounter", element.getEncounter(), -1);
13753    }
13754    if (element.hasOccurrenceDateTimeElement()) {
13755      composeDateTime(t, "GuidanceResponse", "occurrenceDateTime", element.getOccurrenceDateTimeElement(), -1);
13756    }
13757    if (element.hasPerformer()) {
13758      composeReference(t, "GuidanceResponse", "performer", element.getPerformer(), -1);
13759    }
13760    for (int i = 0; i < element.getReason().size(); i++) {
13761      composeCodeableReference(t, "GuidanceResponse", "reason", element.getReason().get(i), i);
13762    }
13763    for (int i = 0; i < element.getNote().size(); i++) {
13764      composeAnnotation(t, "GuidanceResponse", "note", element.getNote().get(i), i);
13765    }
13766    for (int i = 0; i < element.getEvaluationMessage().size(); i++) {
13767      composeReference(t, "GuidanceResponse", "evaluationMessage", element.getEvaluationMessage().get(i), i);
13768    }
13769    if (element.hasOutputParameters()) {
13770      composeReference(t, "GuidanceResponse", "outputParameters", element.getOutputParameters(), -1);
13771    }
13772    if (element.hasResult()) {
13773      composeReference(t, "GuidanceResponse", "result", element.getResult(), -1);
13774    }
13775    for (int i = 0; i < element.getDataRequirement().size(); i++) {
13776      composeDataRequirement(t, "GuidanceResponse", "dataRequirement", element.getDataRequirement().get(i), i);
13777    }
13778  }
13779
13780  protected void composeHealthcareService(Complex parent, String parentType, String name, HealthcareService element, int index) {
13781    if (element == null) 
13782      return;
13783    Complex t;
13784    if (Utilities.noString(parentType))
13785      t = parent;
13786    else {
13787      t = parent.predicate("fhir:"+parentType+'.'+name);
13788    }
13789    composeDomainResource(t, "HealthcareService", name, element, index);
13790    for (int i = 0; i < element.getIdentifier().size(); i++) {
13791      composeIdentifier(t, "HealthcareService", "identifier", element.getIdentifier().get(i), i);
13792    }
13793    if (element.hasActiveElement()) {
13794      composeBoolean(t, "HealthcareService", "active", element.getActiveElement(), -1);
13795    }
13796    if (element.hasProvidedBy()) {
13797      composeReference(t, "HealthcareService", "providedBy", element.getProvidedBy(), -1);
13798    }
13799    for (int i = 0; i < element.getOfferedIn().size(); i++) {
13800      composeReference(t, "HealthcareService", "offeredIn", element.getOfferedIn().get(i), i);
13801    }
13802    for (int i = 0; i < element.getCategory().size(); i++) {
13803      composeCodeableConcept(t, "HealthcareService", "category", element.getCategory().get(i), i);
13804    }
13805    for (int i = 0; i < element.getType().size(); i++) {
13806      composeCodeableConcept(t, "HealthcareService", "type", element.getType().get(i), i);
13807    }
13808    for (int i = 0; i < element.getSpecialty().size(); i++) {
13809      composeCodeableConcept(t, "HealthcareService", "specialty", element.getSpecialty().get(i), i);
13810    }
13811    for (int i = 0; i < element.getLocation().size(); i++) {
13812      composeReference(t, "HealthcareService", "location", element.getLocation().get(i), i);
13813    }
13814    if (element.hasNameElement()) {
13815      composeString(t, "HealthcareService", "name", element.getNameElement(), -1);
13816    }
13817    if (element.hasCommentElement()) {
13818      composeString(t, "HealthcareService", "comment", element.getCommentElement(), -1);
13819    }
13820    if (element.hasExtraDetailsElement()) {
13821      composeMarkdown(t, "HealthcareService", "extraDetails", element.getExtraDetailsElement(), -1);
13822    }
13823    if (element.hasPhoto()) {
13824      composeAttachment(t, "HealthcareService", "photo", element.getPhoto(), -1);
13825    }
13826    for (int i = 0; i < element.getContact().size(); i++) {
13827      composeExtendedContactDetail(t, "HealthcareService", "contact", element.getContact().get(i), i);
13828    }
13829    for (int i = 0; i < element.getCoverageArea().size(); i++) {
13830      composeReference(t, "HealthcareService", "coverageArea", element.getCoverageArea().get(i), i);
13831    }
13832    for (int i = 0; i < element.getServiceProvisionCode().size(); i++) {
13833      composeCodeableConcept(t, "HealthcareService", "serviceProvisionCode", element.getServiceProvisionCode().get(i), i);
13834    }
13835    for (int i = 0; i < element.getEligibility().size(); i++) {
13836      composeHealthcareServiceEligibilityComponent(t, "HealthcareService", "eligibility", element.getEligibility().get(i), i);
13837    }
13838    for (int i = 0; i < element.getProgram().size(); i++) {
13839      composeCodeableConcept(t, "HealthcareService", "program", element.getProgram().get(i), i);
13840    }
13841    for (int i = 0; i < element.getCharacteristic().size(); i++) {
13842      composeCodeableConcept(t, "HealthcareService", "characteristic", element.getCharacteristic().get(i), i);
13843    }
13844    for (int i = 0; i < element.getCommunication().size(); i++) {
13845      composeCodeableConcept(t, "HealthcareService", "communication", element.getCommunication().get(i), i);
13846    }
13847    for (int i = 0; i < element.getReferralMethod().size(); i++) {
13848      composeCodeableConcept(t, "HealthcareService", "referralMethod", element.getReferralMethod().get(i), i);
13849    }
13850    if (element.hasAppointmentRequiredElement()) {
13851      composeBoolean(t, "HealthcareService", "appointmentRequired", element.getAppointmentRequiredElement(), -1);
13852    }
13853    for (int i = 0; i < element.getAvailability().size(); i++) {
13854      composeAvailability(t, "HealthcareService", "availability", element.getAvailability().get(i), i);
13855    }
13856    for (int i = 0; i < element.getEndpoint().size(); i++) {
13857      composeReference(t, "HealthcareService", "endpoint", element.getEndpoint().get(i), i);
13858    }
13859  }
13860
13861  protected void composeHealthcareServiceEligibilityComponent(Complex parent, String parentType, String name, HealthcareService.HealthcareServiceEligibilityComponent element, int index) {
13862    if (element == null) 
13863      return;
13864    Complex t;
13865    if (Utilities.noString(parentType))
13866      t = parent;
13867    else {
13868      t = parent.predicate("fhir:"+parentType+'.'+name);
13869    }
13870    composeBackboneElement(t, "eligibility", name, element, index);
13871    if (element.hasCode()) {
13872      composeCodeableConcept(t, "HealthcareServiceEligibilityComponent", "code", element.getCode(), -1);
13873    }
13874    if (element.hasCommentElement()) {
13875      composeMarkdown(t, "HealthcareServiceEligibilityComponent", "comment", element.getCommentElement(), -1);
13876    }
13877  }
13878
13879  protected void composeImagingSelection(Complex parent, String parentType, String name, ImagingSelection element, int index) {
13880    if (element == null) 
13881      return;
13882    Complex t;
13883    if (Utilities.noString(parentType))
13884      t = parent;
13885    else {
13886      t = parent.predicate("fhir:"+parentType+'.'+name);
13887    }
13888    composeDomainResource(t, "ImagingSelection", name, element, index);
13889    for (int i = 0; i < element.getIdentifier().size(); i++) {
13890      composeIdentifier(t, "ImagingSelection", "identifier", element.getIdentifier().get(i), i);
13891    }
13892    if (element.hasStatusElement()) {
13893      composeEnum(t, "ImagingSelection", "status", element.getStatusElement(), -1);
13894    }
13895    if (element.hasSubject()) {
13896      composeReference(t, "ImagingSelection", "subject", element.getSubject(), -1);
13897    }
13898    if (element.hasIssuedElement()) {
13899      composeInstant(t, "ImagingSelection", "issued", element.getIssuedElement(), -1);
13900    }
13901    for (int i = 0; i < element.getPerformer().size(); i++) {
13902      composeImagingSelectionPerformerComponent(t, "ImagingSelection", "performer", element.getPerformer().get(i), i);
13903    }
13904    for (int i = 0; i < element.getBasedOn().size(); i++) {
13905      composeReference(t, "ImagingSelection", "basedOn", element.getBasedOn().get(i), i);
13906    }
13907    for (int i = 0; i < element.getCategory().size(); i++) {
13908      composeCodeableConcept(t, "ImagingSelection", "category", element.getCategory().get(i), i);
13909    }
13910    if (element.hasCode()) {
13911      composeCodeableConcept(t, "ImagingSelection", "code", element.getCode(), -1);
13912    }
13913    if (element.hasStudyUidElement()) {
13914      composeId(t, "ImagingSelection", "studyUid", element.getStudyUidElement(), -1);
13915    }
13916    for (int i = 0; i < element.getDerivedFrom().size(); i++) {
13917      composeReference(t, "ImagingSelection", "derivedFrom", element.getDerivedFrom().get(i), i);
13918    }
13919    for (int i = 0; i < element.getEndpoint().size(); i++) {
13920      composeReference(t, "ImagingSelection", "endpoint", element.getEndpoint().get(i), i);
13921    }
13922    if (element.hasSeriesUidElement()) {
13923      composeId(t, "ImagingSelection", "seriesUid", element.getSeriesUidElement(), -1);
13924    }
13925    if (element.hasSeriesNumberElement()) {
13926      composeUnsignedInt(t, "ImagingSelection", "seriesNumber", element.getSeriesNumberElement(), -1);
13927    }
13928    if (element.hasFrameOfReferenceUidElement()) {
13929      composeId(t, "ImagingSelection", "frameOfReferenceUid", element.getFrameOfReferenceUidElement(), -1);
13930    }
13931    if (element.hasBodySite()) {
13932      composeCodeableReference(t, "ImagingSelection", "bodySite", element.getBodySite(), -1);
13933    }
13934    for (int i = 0; i < element.getFocus().size(); i++) {
13935      composeReference(t, "ImagingSelection", "focus", element.getFocus().get(i), i);
13936    }
13937    for (int i = 0; i < element.getInstance().size(); i++) {
13938      composeImagingSelectionInstanceComponent(t, "ImagingSelection", "instance", element.getInstance().get(i), i);
13939    }
13940    for (int i = 0; i < element.getImageRegion().size(); i++) {
13941      composeImagingSelectionImageRegion3DComponent(t, "ImagingSelection", "imageRegion", element.getImageRegion().get(i), i);
13942    }
13943  }
13944
13945  protected void composeImagingSelectionPerformerComponent(Complex parent, String parentType, String name, ImagingSelection.ImagingSelectionPerformerComponent element, int index) {
13946    if (element == null) 
13947      return;
13948    Complex t;
13949    if (Utilities.noString(parentType))
13950      t = parent;
13951    else {
13952      t = parent.predicate("fhir:"+parentType+'.'+name);
13953    }
13954    composeBackboneElement(t, "performer", name, element, index);
13955    if (element.hasFunction()) {
13956      composeCodeableConcept(t, "ImagingSelectionPerformerComponent", "function", element.getFunction(), -1);
13957    }
13958    if (element.hasActor()) {
13959      composeReference(t, "ImagingSelectionPerformerComponent", "actor", element.getActor(), -1);
13960    }
13961  }
13962
13963  protected void composeImagingSelectionInstanceComponent(Complex parent, String parentType, String name, ImagingSelection.ImagingSelectionInstanceComponent element, int index) {
13964    if (element == null) 
13965      return;
13966    Complex t;
13967    if (Utilities.noString(parentType))
13968      t = parent;
13969    else {
13970      t = parent.predicate("fhir:"+parentType+'.'+name);
13971    }
13972    composeBackboneElement(t, "instance", name, element, index);
13973    if (element.hasUidElement()) {
13974      composeId(t, "ImagingSelectionInstanceComponent", "uid", element.getUidElement(), -1);
13975    }
13976    if (element.hasNumberElement()) {
13977      composeUnsignedInt(t, "ImagingSelectionInstanceComponent", "number", element.getNumberElement(), -1);
13978    }
13979    if (element.hasSopClass()) {
13980      composeCoding(t, "ImagingSelectionInstanceComponent", "sopClass", element.getSopClass(), -1);
13981    }
13982    for (int i = 0; i < element.getSubset().size(); i++) {
13983      composeString(t, "ImagingSelectionInstanceComponent", "subset", element.getSubset().get(i), i);
13984    }
13985    for (int i = 0; i < element.getImageRegion().size(); i++) {
13986      composeImagingSelectionImageRegion2DComponent(t, "ImagingSelectionInstanceComponent", "imageRegion", element.getImageRegion().get(i), i);
13987    }
13988  }
13989
13990  protected void composeImagingSelectionImageRegion2DComponent(Complex parent, String parentType, String name, ImagingSelection.ImageRegion2DComponent element, int index) {
13991    if (element == null) 
13992      return;
13993    Complex t;
13994    if (Utilities.noString(parentType))
13995      t = parent;
13996    else {
13997      t = parent.predicate("fhir:"+parentType+'.'+name);
13998    }
13999    composeBackboneElement(t, "imageRegion", name, element, index);
14000    if (element.hasRegionTypeElement()) {
14001      composeEnum(t, "ImageRegion2DComponent", "regionType", element.getRegionTypeElement(), -1);
14002    }
14003    for (int i = 0; i < element.getCoordinate().size(); i++) {
14004      composeDecimal(t, "ImageRegion2DComponent", "coordinate", element.getCoordinate().get(i), i);
14005    }
14006  }
14007
14008  protected void composeImagingSelectionImageRegion3DComponent(Complex parent, String parentType, String name, ImagingSelection.ImageRegion3DComponent element, int index) {
14009    if (element == null) 
14010      return;
14011    Complex t;
14012    if (Utilities.noString(parentType))
14013      t = parent;
14014    else {
14015      t = parent.predicate("fhir:"+parentType+'.'+name);
14016    }
14017    composeBackboneElement(t, "imageRegion", name, element, index);
14018    if (element.hasRegionTypeElement()) {
14019      composeEnum(t, "ImageRegion3DComponent", "regionType", element.getRegionTypeElement(), -1);
14020    }
14021    for (int i = 0; i < element.getCoordinate().size(); i++) {
14022      composeDecimal(t, "ImageRegion3DComponent", "coordinate", element.getCoordinate().get(i), i);
14023    }
14024  }
14025
14026  protected void composeImagingStudy(Complex parent, String parentType, String name, ImagingStudy element, int index) {
14027    if (element == null) 
14028      return;
14029    Complex t;
14030    if (Utilities.noString(parentType))
14031      t = parent;
14032    else {
14033      t = parent.predicate("fhir:"+parentType+'.'+name);
14034    }
14035    composeDomainResource(t, "ImagingStudy", name, element, index);
14036    for (int i = 0; i < element.getIdentifier().size(); i++) {
14037      composeIdentifier(t, "ImagingStudy", "identifier", element.getIdentifier().get(i), i);
14038    }
14039    if (element.hasStatusElement()) {
14040      composeEnum(t, "ImagingStudy", "status", element.getStatusElement(), -1);
14041    }
14042    for (int i = 0; i < element.getModality().size(); i++) {
14043      composeCodeableConcept(t, "ImagingStudy", "modality", element.getModality().get(i), i);
14044    }
14045    if (element.hasSubject()) {
14046      composeReference(t, "ImagingStudy", "subject", element.getSubject(), -1);
14047    }
14048    if (element.hasEncounter()) {
14049      composeReference(t, "ImagingStudy", "encounter", element.getEncounter(), -1);
14050    }
14051    if (element.hasStartedElement()) {
14052      composeDateTime(t, "ImagingStudy", "started", element.getStartedElement(), -1);
14053    }
14054    for (int i = 0; i < element.getBasedOn().size(); i++) {
14055      composeReference(t, "ImagingStudy", "basedOn", element.getBasedOn().get(i), i);
14056    }
14057    if (element.hasReferrer()) {
14058      composeReference(t, "ImagingStudy", "referrer", element.getReferrer(), -1);
14059    }
14060    for (int i = 0; i < element.getInterpreter().size(); i++) {
14061      composeReference(t, "ImagingStudy", "interpreter", element.getInterpreter().get(i), i);
14062    }
14063    for (int i = 0; i < element.getEndpoint().size(); i++) {
14064      composeReference(t, "ImagingStudy", "endpoint", element.getEndpoint().get(i), i);
14065    }
14066    if (element.hasNumberOfSeriesElement()) {
14067      composeUnsignedInt(t, "ImagingStudy", "numberOfSeries", element.getNumberOfSeriesElement(), -1);
14068    }
14069    if (element.hasNumberOfInstancesElement()) {
14070      composeUnsignedInt(t, "ImagingStudy", "numberOfInstances", element.getNumberOfInstancesElement(), -1);
14071    }
14072    for (int i = 0; i < element.getProcedure().size(); i++) {
14073      composeCodeableReference(t, "ImagingStudy", "procedure", element.getProcedure().get(i), i);
14074    }
14075    if (element.hasLocation()) {
14076      composeReference(t, "ImagingStudy", "location", element.getLocation(), -1);
14077    }
14078    for (int i = 0; i < element.getReason().size(); i++) {
14079      composeCodeableReference(t, "ImagingStudy", "reason", element.getReason().get(i), i);
14080    }
14081    for (int i = 0; i < element.getNote().size(); i++) {
14082      composeAnnotation(t, "ImagingStudy", "note", element.getNote().get(i), i);
14083    }
14084    if (element.hasDescriptionElement()) {
14085      composeString(t, "ImagingStudy", "description", element.getDescriptionElement(), -1);
14086    }
14087    for (int i = 0; i < element.getSeries().size(); i++) {
14088      composeImagingStudySeriesComponent(t, "ImagingStudy", "series", element.getSeries().get(i), i);
14089    }
14090  }
14091
14092  protected void composeImagingStudySeriesComponent(Complex parent, String parentType, String name, ImagingStudy.ImagingStudySeriesComponent element, int index) {
14093    if (element == null) 
14094      return;
14095    Complex t;
14096    if (Utilities.noString(parentType))
14097      t = parent;
14098    else {
14099      t = parent.predicate("fhir:"+parentType+'.'+name);
14100    }
14101    composeBackboneElement(t, "series", name, element, index);
14102    if (element.hasUidElement()) {
14103      composeId(t, "ImagingStudySeriesComponent", "uid", element.getUidElement(), -1);
14104    }
14105    if (element.hasNumberElement()) {
14106      composeUnsignedInt(t, "ImagingStudySeriesComponent", "number", element.getNumberElement(), -1);
14107    }
14108    if (element.hasModality()) {
14109      composeCodeableConcept(t, "ImagingStudySeriesComponent", "modality", element.getModality(), -1);
14110    }
14111    if (element.hasDescriptionElement()) {
14112      composeString(t, "ImagingStudySeriesComponent", "description", element.getDescriptionElement(), -1);
14113    }
14114    if (element.hasNumberOfInstancesElement()) {
14115      composeUnsignedInt(t, "ImagingStudySeriesComponent", "numberOfInstances", element.getNumberOfInstancesElement(), -1);
14116    }
14117    for (int i = 0; i < element.getEndpoint().size(); i++) {
14118      composeReference(t, "ImagingStudySeriesComponent", "endpoint", element.getEndpoint().get(i), i);
14119    }
14120    if (element.hasBodySite()) {
14121      composeCodeableReference(t, "ImagingStudySeriesComponent", "bodySite", element.getBodySite(), -1);
14122    }
14123    if (element.hasLaterality()) {
14124      composeCodeableConcept(t, "ImagingStudySeriesComponent", "laterality", element.getLaterality(), -1);
14125    }
14126    for (int i = 0; i < element.getSpecimen().size(); i++) {
14127      composeReference(t, "ImagingStudySeriesComponent", "specimen", element.getSpecimen().get(i), i);
14128    }
14129    if (element.hasStartedElement()) {
14130      composeDateTime(t, "ImagingStudySeriesComponent", "started", element.getStartedElement(), -1);
14131    }
14132    for (int i = 0; i < element.getPerformer().size(); i++) {
14133      composeImagingStudySeriesPerformerComponent(t, "ImagingStudySeriesComponent", "performer", element.getPerformer().get(i), i);
14134    }
14135    for (int i = 0; i < element.getInstance().size(); i++) {
14136      composeImagingStudySeriesInstanceComponent(t, "ImagingStudySeriesComponent", "instance", element.getInstance().get(i), i);
14137    }
14138  }
14139
14140  protected void composeImagingStudySeriesPerformerComponent(Complex parent, String parentType, String name, ImagingStudy.ImagingStudySeriesPerformerComponent element, int index) {
14141    if (element == null) 
14142      return;
14143    Complex t;
14144    if (Utilities.noString(parentType))
14145      t = parent;
14146    else {
14147      t = parent.predicate("fhir:"+parentType+'.'+name);
14148    }
14149    composeBackboneElement(t, "performer", name, element, index);
14150    if (element.hasFunction()) {
14151      composeCodeableConcept(t, "ImagingStudySeriesPerformerComponent", "function", element.getFunction(), -1);
14152    }
14153    if (element.hasActor()) {
14154      composeReference(t, "ImagingStudySeriesPerformerComponent", "actor", element.getActor(), -1);
14155    }
14156  }
14157
14158  protected void composeImagingStudySeriesInstanceComponent(Complex parent, String parentType, String name, ImagingStudy.ImagingStudySeriesInstanceComponent element, int index) {
14159    if (element == null) 
14160      return;
14161    Complex t;
14162    if (Utilities.noString(parentType))
14163      t = parent;
14164    else {
14165      t = parent.predicate("fhir:"+parentType+'.'+name);
14166    }
14167    composeBackboneElement(t, "instance", name, element, index);
14168    if (element.hasUidElement()) {
14169      composeId(t, "ImagingStudySeriesInstanceComponent", "uid", element.getUidElement(), -1);
14170    }
14171    if (element.hasSopClass()) {
14172      composeCoding(t, "ImagingStudySeriesInstanceComponent", "sopClass", element.getSopClass(), -1);
14173    }
14174    if (element.hasNumberElement()) {
14175      composeUnsignedInt(t, "ImagingStudySeriesInstanceComponent", "number", element.getNumberElement(), -1);
14176    }
14177    if (element.hasTitleElement()) {
14178      composeString(t, "ImagingStudySeriesInstanceComponent", "title", element.getTitleElement(), -1);
14179    }
14180  }
14181
14182  protected void composeImmunization(Complex parent, String parentType, String name, Immunization element, int index) {
14183    if (element == null) 
14184      return;
14185    Complex t;
14186    if (Utilities.noString(parentType))
14187      t = parent;
14188    else {
14189      t = parent.predicate("fhir:"+parentType+'.'+name);
14190    }
14191    composeDomainResource(t, "Immunization", name, element, index);
14192    for (int i = 0; i < element.getIdentifier().size(); i++) {
14193      composeIdentifier(t, "Immunization", "identifier", element.getIdentifier().get(i), i);
14194    }
14195    for (int i = 0; i < element.getBasedOn().size(); i++) {
14196      composeReference(t, "Immunization", "basedOn", element.getBasedOn().get(i), i);
14197    }
14198    if (element.hasStatusElement()) {
14199      composeEnum(t, "Immunization", "status", element.getStatusElement(), -1);
14200    }
14201    if (element.hasStatusReason()) {
14202      composeCodeableConcept(t, "Immunization", "statusReason", element.getStatusReason(), -1);
14203    }
14204    if (element.hasVaccineCode()) {
14205      composeCodeableConcept(t, "Immunization", "vaccineCode", element.getVaccineCode(), -1);
14206    }
14207    if (element.hasAdministeredProduct()) {
14208      composeCodeableReference(t, "Immunization", "administeredProduct", element.getAdministeredProduct(), -1);
14209    }
14210    if (element.hasManufacturer()) {
14211      composeCodeableReference(t, "Immunization", "manufacturer", element.getManufacturer(), -1);
14212    }
14213    if (element.hasLotNumberElement()) {
14214      composeString(t, "Immunization", "lotNumber", element.getLotNumberElement(), -1);
14215    }
14216    if (element.hasExpirationDateElement()) {
14217      composeDate(t, "Immunization", "expirationDate", element.getExpirationDateElement(), -1);
14218    }
14219    if (element.hasPatient()) {
14220      composeReference(t, "Immunization", "patient", element.getPatient(), -1);
14221    }
14222    if (element.hasEncounter()) {
14223      composeReference(t, "Immunization", "encounter", element.getEncounter(), -1);
14224    }
14225    for (int i = 0; i < element.getSupportingInformation().size(); i++) {
14226      composeReference(t, "Immunization", "supportingInformation", element.getSupportingInformation().get(i), i);
14227    }
14228    if (element.hasOccurrence()) {
14229      composeType(t, "Immunization", "occurrence", element.getOccurrence(), -1);
14230    }
14231    if (element.hasPrimarySourceElement()) {
14232      composeBoolean(t, "Immunization", "primarySource", element.getPrimarySourceElement(), -1);
14233    }
14234    if (element.hasInformationSource()) {
14235      composeCodeableReference(t, "Immunization", "informationSource", element.getInformationSource(), -1);
14236    }
14237    if (element.hasLocation()) {
14238      composeReference(t, "Immunization", "location", element.getLocation(), -1);
14239    }
14240    if (element.hasSite()) {
14241      composeCodeableConcept(t, "Immunization", "site", element.getSite(), -1);
14242    }
14243    if (element.hasRoute()) {
14244      composeCodeableConcept(t, "Immunization", "route", element.getRoute(), -1);
14245    }
14246    if (element.hasDoseQuantity()) {
14247      composeQuantity(t, "Immunization", "doseQuantity", element.getDoseQuantity(), -1);
14248    }
14249    for (int i = 0; i < element.getPerformer().size(); i++) {
14250      composeImmunizationPerformerComponent(t, "Immunization", "performer", element.getPerformer().get(i), i);
14251    }
14252    for (int i = 0; i < element.getNote().size(); i++) {
14253      composeAnnotation(t, "Immunization", "note", element.getNote().get(i), i);
14254    }
14255    for (int i = 0; i < element.getReason().size(); i++) {
14256      composeCodeableReference(t, "Immunization", "reason", element.getReason().get(i), i);
14257    }
14258    if (element.hasIsSubpotentElement()) {
14259      composeBoolean(t, "Immunization", "isSubpotent", element.getIsSubpotentElement(), -1);
14260    }
14261    for (int i = 0; i < element.getSubpotentReason().size(); i++) {
14262      composeCodeableConcept(t, "Immunization", "subpotentReason", element.getSubpotentReason().get(i), i);
14263    }
14264    for (int i = 0; i < element.getProgramEligibility().size(); i++) {
14265      composeImmunizationProgramEligibilityComponent(t, "Immunization", "programEligibility", element.getProgramEligibility().get(i), i);
14266    }
14267    if (element.hasFundingSource()) {
14268      composeCodeableConcept(t, "Immunization", "fundingSource", element.getFundingSource(), -1);
14269    }
14270    for (int i = 0; i < element.getReaction().size(); i++) {
14271      composeImmunizationReactionComponent(t, "Immunization", "reaction", element.getReaction().get(i), i);
14272    }
14273    for (int i = 0; i < element.getProtocolApplied().size(); i++) {
14274      composeImmunizationProtocolAppliedComponent(t, "Immunization", "protocolApplied", element.getProtocolApplied().get(i), i);
14275    }
14276  }
14277
14278  protected void composeImmunizationPerformerComponent(Complex parent, String parentType, String name, Immunization.ImmunizationPerformerComponent element, int index) {
14279    if (element == null) 
14280      return;
14281    Complex t;
14282    if (Utilities.noString(parentType))
14283      t = parent;
14284    else {
14285      t = parent.predicate("fhir:"+parentType+'.'+name);
14286    }
14287    composeBackboneElement(t, "performer", name, element, index);
14288    if (element.hasFunction()) {
14289      composeCodeableConcept(t, "ImmunizationPerformerComponent", "function", element.getFunction(), -1);
14290    }
14291    if (element.hasActor()) {
14292      composeReference(t, "ImmunizationPerformerComponent", "actor", element.getActor(), -1);
14293    }
14294  }
14295
14296  protected void composeImmunizationProgramEligibilityComponent(Complex parent, String parentType, String name, Immunization.ImmunizationProgramEligibilityComponent element, int index) {
14297    if (element == null) 
14298      return;
14299    Complex t;
14300    if (Utilities.noString(parentType))
14301      t = parent;
14302    else {
14303      t = parent.predicate("fhir:"+parentType+'.'+name);
14304    }
14305    composeBackboneElement(t, "programEligibility", name, element, index);
14306    if (element.hasProgram()) {
14307      composeCodeableConcept(t, "ImmunizationProgramEligibilityComponent", "program", element.getProgram(), -1);
14308    }
14309    if (element.hasProgramStatus()) {
14310      composeCodeableConcept(t, "ImmunizationProgramEligibilityComponent", "programStatus", element.getProgramStatus(), -1);
14311    }
14312  }
14313
14314  protected void composeImmunizationReactionComponent(Complex parent, String parentType, String name, Immunization.ImmunizationReactionComponent element, int index) {
14315    if (element == null) 
14316      return;
14317    Complex t;
14318    if (Utilities.noString(parentType))
14319      t = parent;
14320    else {
14321      t = parent.predicate("fhir:"+parentType+'.'+name);
14322    }
14323    composeBackboneElement(t, "reaction", name, element, index);
14324    if (element.hasDateElement()) {
14325      composeDateTime(t, "ImmunizationReactionComponent", "date", element.getDateElement(), -1);
14326    }
14327    if (element.hasManifestation()) {
14328      composeCodeableReference(t, "ImmunizationReactionComponent", "manifestation", element.getManifestation(), -1);
14329    }
14330    if (element.hasReportedElement()) {
14331      composeBoolean(t, "ImmunizationReactionComponent", "reported", element.getReportedElement(), -1);
14332    }
14333  }
14334
14335  protected void composeImmunizationProtocolAppliedComponent(Complex parent, String parentType, String name, Immunization.ImmunizationProtocolAppliedComponent element, int index) {
14336    if (element == null) 
14337      return;
14338    Complex t;
14339    if (Utilities.noString(parentType))
14340      t = parent;
14341    else {
14342      t = parent.predicate("fhir:"+parentType+'.'+name);
14343    }
14344    composeBackboneElement(t, "protocolApplied", name, element, index);
14345    if (element.hasSeriesElement()) {
14346      composeString(t, "ImmunizationProtocolAppliedComponent", "series", element.getSeriesElement(), -1);
14347    }
14348    if (element.hasAuthority()) {
14349      composeReference(t, "ImmunizationProtocolAppliedComponent", "authority", element.getAuthority(), -1);
14350    }
14351    for (int i = 0; i < element.getTargetDisease().size(); i++) {
14352      composeCodeableConcept(t, "ImmunizationProtocolAppliedComponent", "targetDisease", element.getTargetDisease().get(i), i);
14353    }
14354    if (element.hasDoseNumberElement()) {
14355      composeString(t, "ImmunizationProtocolAppliedComponent", "doseNumber", element.getDoseNumberElement(), -1);
14356    }
14357    if (element.hasSeriesDosesElement()) {
14358      composeString(t, "ImmunizationProtocolAppliedComponent", "seriesDoses", element.getSeriesDosesElement(), -1);
14359    }
14360  }
14361
14362  protected void composeImmunizationEvaluation(Complex parent, String parentType, String name, ImmunizationEvaluation element, int index) {
14363    if (element == null) 
14364      return;
14365    Complex t;
14366    if (Utilities.noString(parentType))
14367      t = parent;
14368    else {
14369      t = parent.predicate("fhir:"+parentType+'.'+name);
14370    }
14371    composeDomainResource(t, "ImmunizationEvaluation", name, element, index);
14372    for (int i = 0; i < element.getIdentifier().size(); i++) {
14373      composeIdentifier(t, "ImmunizationEvaluation", "identifier", element.getIdentifier().get(i), i);
14374    }
14375    if (element.hasStatusElement()) {
14376      composeEnum(t, "ImmunizationEvaluation", "status", element.getStatusElement(), -1);
14377    }
14378    if (element.hasPatient()) {
14379      composeReference(t, "ImmunizationEvaluation", "patient", element.getPatient(), -1);
14380    }
14381    if (element.hasDateElement()) {
14382      composeDateTime(t, "ImmunizationEvaluation", "date", element.getDateElement(), -1);
14383    }
14384    if (element.hasAuthority()) {
14385      composeReference(t, "ImmunizationEvaluation", "authority", element.getAuthority(), -1);
14386    }
14387    if (element.hasTargetDisease()) {
14388      composeCodeableConcept(t, "ImmunizationEvaluation", "targetDisease", element.getTargetDisease(), -1);
14389    }
14390    if (element.hasImmunizationEvent()) {
14391      composeReference(t, "ImmunizationEvaluation", "immunizationEvent", element.getImmunizationEvent(), -1);
14392    }
14393    if (element.hasDoseStatus()) {
14394      composeCodeableConcept(t, "ImmunizationEvaluation", "doseStatus", element.getDoseStatus(), -1);
14395    }
14396    for (int i = 0; i < element.getDoseStatusReason().size(); i++) {
14397      composeCodeableConcept(t, "ImmunizationEvaluation", "doseStatusReason", element.getDoseStatusReason().get(i), i);
14398    }
14399    if (element.hasDescriptionElement()) {
14400      composeString(t, "ImmunizationEvaluation", "description", element.getDescriptionElement(), -1);
14401    }
14402    if (element.hasSeriesElement()) {
14403      composeString(t, "ImmunizationEvaluation", "series", element.getSeriesElement(), -1);
14404    }
14405    if (element.hasDoseNumberElement()) {
14406      composeString(t, "ImmunizationEvaluation", "doseNumber", element.getDoseNumberElement(), -1);
14407    }
14408    if (element.hasSeriesDosesElement()) {
14409      composeString(t, "ImmunizationEvaluation", "seriesDoses", element.getSeriesDosesElement(), -1);
14410    }
14411  }
14412
14413  protected void composeImmunizationRecommendation(Complex parent, String parentType, String name, ImmunizationRecommendation element, int index) {
14414    if (element == null) 
14415      return;
14416    Complex t;
14417    if (Utilities.noString(parentType))
14418      t = parent;
14419    else {
14420      t = parent.predicate("fhir:"+parentType+'.'+name);
14421    }
14422    composeDomainResource(t, "ImmunizationRecommendation", name, element, index);
14423    for (int i = 0; i < element.getIdentifier().size(); i++) {
14424      composeIdentifier(t, "ImmunizationRecommendation", "identifier", element.getIdentifier().get(i), i);
14425    }
14426    if (element.hasPatient()) {
14427      composeReference(t, "ImmunizationRecommendation", "patient", element.getPatient(), -1);
14428    }
14429    if (element.hasDateElement()) {
14430      composeDateTime(t, "ImmunizationRecommendation", "date", element.getDateElement(), -1);
14431    }
14432    if (element.hasAuthority()) {
14433      composeReference(t, "ImmunizationRecommendation", "authority", element.getAuthority(), -1);
14434    }
14435    for (int i = 0; i < element.getRecommendation().size(); i++) {
14436      composeImmunizationRecommendationRecommendationComponent(t, "ImmunizationRecommendation", "recommendation", element.getRecommendation().get(i), i);
14437    }
14438  }
14439
14440  protected void composeImmunizationRecommendationRecommendationComponent(Complex parent, String parentType, String name, ImmunizationRecommendation.ImmunizationRecommendationRecommendationComponent element, int index) {
14441    if (element == null) 
14442      return;
14443    Complex t;
14444    if (Utilities.noString(parentType))
14445      t = parent;
14446    else {
14447      t = parent.predicate("fhir:"+parentType+'.'+name);
14448    }
14449    composeBackboneElement(t, "recommendation", name, element, index);
14450    for (int i = 0; i < element.getVaccineCode().size(); i++) {
14451      composeCodeableConcept(t, "ImmunizationRecommendationRecommendationComponent", "vaccineCode", element.getVaccineCode().get(i), i);
14452    }
14453    for (int i = 0; i < element.getTargetDisease().size(); i++) {
14454      composeCodeableConcept(t, "ImmunizationRecommendationRecommendationComponent", "targetDisease", element.getTargetDisease().get(i), i);
14455    }
14456    for (int i = 0; i < element.getContraindicatedVaccineCode().size(); i++) {
14457      composeCodeableConcept(t, "ImmunizationRecommendationRecommendationComponent", "contraindicatedVaccineCode", element.getContraindicatedVaccineCode().get(i), i);
14458    }
14459    if (element.hasForecastStatus()) {
14460      composeCodeableConcept(t, "ImmunizationRecommendationRecommendationComponent", "forecastStatus", element.getForecastStatus(), -1);
14461    }
14462    for (int i = 0; i < element.getForecastReason().size(); i++) {
14463      composeCodeableConcept(t, "ImmunizationRecommendationRecommendationComponent", "forecastReason", element.getForecastReason().get(i), i);
14464    }
14465    for (int i = 0; i < element.getDateCriterion().size(); i++) {
14466      composeImmunizationRecommendationRecommendationDateCriterionComponent(t, "ImmunizationRecommendationRecommendationComponent", "dateCriterion", element.getDateCriterion().get(i), i);
14467    }
14468    if (element.hasDescriptionElement()) {
14469      composeString(t, "ImmunizationRecommendationRecommendationComponent", "description", element.getDescriptionElement(), -1);
14470    }
14471    if (element.hasSeriesElement()) {
14472      composeString(t, "ImmunizationRecommendationRecommendationComponent", "series", element.getSeriesElement(), -1);
14473    }
14474    if (element.hasDoseNumberElement()) {
14475      composeString(t, "ImmunizationRecommendationRecommendationComponent", "doseNumber", element.getDoseNumberElement(), -1);
14476    }
14477    if (element.hasSeriesDosesElement()) {
14478      composeString(t, "ImmunizationRecommendationRecommendationComponent", "seriesDoses", element.getSeriesDosesElement(), -1);
14479    }
14480    for (int i = 0; i < element.getSupportingImmunization().size(); i++) {
14481      composeReference(t, "ImmunizationRecommendationRecommendationComponent", "supportingImmunization", element.getSupportingImmunization().get(i), i);
14482    }
14483    for (int i = 0; i < element.getSupportingPatientInformation().size(); i++) {
14484      composeReference(t, "ImmunizationRecommendationRecommendationComponent", "supportingPatientInformation", element.getSupportingPatientInformation().get(i), i);
14485    }
14486  }
14487
14488  protected void composeImmunizationRecommendationRecommendationDateCriterionComponent(Complex parent, String parentType, String name, ImmunizationRecommendation.ImmunizationRecommendationRecommendationDateCriterionComponent element, int index) {
14489    if (element == null) 
14490      return;
14491    Complex t;
14492    if (Utilities.noString(parentType))
14493      t = parent;
14494    else {
14495      t = parent.predicate("fhir:"+parentType+'.'+name);
14496    }
14497    composeBackboneElement(t, "dateCriterion", name, element, index);
14498    if (element.hasCode()) {
14499      composeCodeableConcept(t, "ImmunizationRecommendationRecommendationDateCriterionComponent", "code", element.getCode(), -1);
14500    }
14501    if (element.hasValueElement()) {
14502      composeDateTime(t, "ImmunizationRecommendationRecommendationDateCriterionComponent", "value", element.getValueElement(), -1);
14503    }
14504  }
14505
14506  protected void composeImplementationGuide(Complex parent, String parentType, String name, ImplementationGuide element, int index) {
14507    if (element == null) 
14508      return;
14509    Complex t;
14510    if (Utilities.noString(parentType))
14511      t = parent;
14512    else {
14513      t = parent.predicate("fhir:"+parentType+'.'+name);
14514    }
14515    composeCanonicalResource(t, "ImplementationGuide", name, element, index);
14516    if (element.hasUrlElement()) {
14517      composeUri(t, "ImplementationGuide", "url", element.getUrlElement(), -1);
14518    }
14519    if (element.hasVersionElement()) {
14520      composeString(t, "ImplementationGuide", "version", element.getVersionElement(), -1);
14521    }
14522    if (element.hasVersionAlgorithm()) {
14523      composeType(t, "ImplementationGuide", "versionAlgorithm", element.getVersionAlgorithm(), -1);
14524    }
14525    if (element.hasNameElement()) {
14526      composeString(t, "ImplementationGuide", "name", element.getNameElement(), -1);
14527    }
14528    if (element.hasTitleElement()) {
14529      composeString(t, "ImplementationGuide", "title", element.getTitleElement(), -1);
14530    }
14531    if (element.hasStatusElement()) {
14532      composeEnum(t, "ImplementationGuide", "status", element.getStatusElement(), -1);
14533    }
14534    if (element.hasExperimentalElement()) {
14535      composeBoolean(t, "ImplementationGuide", "experimental", element.getExperimentalElement(), -1);
14536    }
14537    if (element.hasDateElement()) {
14538      composeDateTime(t, "ImplementationGuide", "date", element.getDateElement(), -1);
14539    }
14540    if (element.hasPublisherElement()) {
14541      composeString(t, "ImplementationGuide", "publisher", element.getPublisherElement(), -1);
14542    }
14543    for (int i = 0; i < element.getContact().size(); i++) {
14544      composeContactDetail(t, "ImplementationGuide", "contact", element.getContact().get(i), i);
14545    }
14546    if (element.hasDescriptionElement()) {
14547      composeMarkdown(t, "ImplementationGuide", "description", element.getDescriptionElement(), -1);
14548    }
14549    for (int i = 0; i < element.getUseContext().size(); i++) {
14550      composeUsageContext(t, "ImplementationGuide", "useContext", element.getUseContext().get(i), i);
14551    }
14552    for (int i = 0; i < element.getJurisdiction().size(); i++) {
14553      composeCodeableConcept(t, "ImplementationGuide", "jurisdiction", element.getJurisdiction().get(i), i);
14554    }
14555    if (element.hasCopyrightElement()) {
14556      composeMarkdown(t, "ImplementationGuide", "copyright", element.getCopyrightElement(), -1);
14557    }
14558    if (element.hasCopyrightLabelElement()) {
14559      composeString(t, "ImplementationGuide", "copyrightLabel", element.getCopyrightLabelElement(), -1);
14560    }
14561    if (element.hasPackageIdElement()) {
14562      composeId(t, "ImplementationGuide", "packageId", element.getPackageIdElement(), -1);
14563    }
14564    if (element.hasLicenseElement()) {
14565      composeEnum(t, "ImplementationGuide", "license", element.getLicenseElement(), -1);
14566    }
14567    for (int i = 0; i < element.getFhirVersion().size(); i++) {
14568      composeEnum(t, "ImplementationGuide", "fhirVersion", element.getFhirVersion().get(i), i);
14569    }
14570    for (int i = 0; i < element.getDependsOn().size(); i++) {
14571      composeImplementationGuideDependsOnComponent(t, "ImplementationGuide", "dependsOn", element.getDependsOn().get(i), i);
14572    }
14573    for (int i = 0; i < element.getGlobal().size(); i++) {
14574      composeImplementationGuideGlobalComponent(t, "ImplementationGuide", "global", element.getGlobal().get(i), i);
14575    }
14576    if (element.hasDefinition()) {
14577      composeImplementationGuideDefinitionComponent(t, "ImplementationGuide", "definition", element.getDefinition(), -1);
14578    }
14579    if (element.hasManifest()) {
14580      composeImplementationGuideManifestComponent(t, "ImplementationGuide", "manifest", element.getManifest(), -1);
14581    }
14582  }
14583
14584  protected void composeImplementationGuideDependsOnComponent(Complex parent, String parentType, String name, ImplementationGuide.ImplementationGuideDependsOnComponent element, int index) {
14585    if (element == null) 
14586      return;
14587    Complex t;
14588    if (Utilities.noString(parentType))
14589      t = parent;
14590    else {
14591      t = parent.predicate("fhir:"+parentType+'.'+name);
14592    }
14593    composeBackboneElement(t, "dependsOn", name, element, index);
14594    if (element.hasUriElement()) {
14595      composeCanonical(t, "ImplementationGuideDependsOnComponent", "uri", element.getUriElement(), -1);
14596    }
14597    if (element.hasPackageIdElement()) {
14598      composeId(t, "ImplementationGuideDependsOnComponent", "packageId", element.getPackageIdElement(), -1);
14599    }
14600    if (element.hasVersionElement()) {
14601      composeString(t, "ImplementationGuideDependsOnComponent", "version", element.getVersionElement(), -1);
14602    }
14603    if (element.hasReasonElement()) {
14604      composeMarkdown(t, "ImplementationGuideDependsOnComponent", "reason", element.getReasonElement(), -1);
14605    }
14606  }
14607
14608  protected void composeImplementationGuideGlobalComponent(Complex parent, String parentType, String name, ImplementationGuide.ImplementationGuideGlobalComponent element, int index) {
14609    if (element == null) 
14610      return;
14611    Complex t;
14612    if (Utilities.noString(parentType))
14613      t = parent;
14614    else {
14615      t = parent.predicate("fhir:"+parentType+'.'+name);
14616    }
14617    composeBackboneElement(t, "global", name, element, index);
14618    if (element.hasTypeElement()) {
14619      composeCode(t, "ImplementationGuideGlobalComponent", "type", element.getTypeElement(), -1);
14620    }
14621    if (element.hasProfileElement()) {
14622      composeCanonical(t, "ImplementationGuideGlobalComponent", "profile", element.getProfileElement(), -1);
14623    }
14624  }
14625
14626  protected void composeImplementationGuideDefinitionComponent(Complex parent, String parentType, String name, ImplementationGuide.ImplementationGuideDefinitionComponent element, int index) {
14627    if (element == null) 
14628      return;
14629    Complex t;
14630    if (Utilities.noString(parentType))
14631      t = parent;
14632    else {
14633      t = parent.predicate("fhir:"+parentType+'.'+name);
14634    }
14635    composeBackboneElement(t, "definition", name, element, index);
14636    for (int i = 0; i < element.getGrouping().size(); i++) {
14637      composeImplementationGuideDefinitionGroupingComponent(t, "ImplementationGuideDefinitionComponent", "grouping", element.getGrouping().get(i), i);
14638    }
14639    for (int i = 0; i < element.getResource().size(); i++) {
14640      composeImplementationGuideDefinitionResourceComponent(t, "ImplementationGuideDefinitionComponent", "resource", element.getResource().get(i), i);
14641    }
14642    if (element.hasPage()) {
14643      composeImplementationGuideDefinitionPageComponent(t, "ImplementationGuideDefinitionComponent", "page", element.getPage(), -1);
14644    }
14645    for (int i = 0; i < element.getParameter().size(); i++) {
14646      composeImplementationGuideDefinitionParameterComponent(t, "ImplementationGuideDefinitionComponent", "parameter", element.getParameter().get(i), i);
14647    }
14648    for (int i = 0; i < element.getTemplate().size(); i++) {
14649      composeImplementationGuideDefinitionTemplateComponent(t, "ImplementationGuideDefinitionComponent", "template", element.getTemplate().get(i), i);
14650    }
14651  }
14652
14653  protected void composeImplementationGuideDefinitionGroupingComponent(Complex parent, String parentType, String name, ImplementationGuide.ImplementationGuideDefinitionGroupingComponent element, int index) {
14654    if (element == null) 
14655      return;
14656    Complex t;
14657    if (Utilities.noString(parentType))
14658      t = parent;
14659    else {
14660      t = parent.predicate("fhir:"+parentType+'.'+name);
14661    }
14662    composeBackboneElement(t, "grouping", name, element, index);
14663    if (element.hasNameElement()) {
14664      composeString(t, "ImplementationGuideDefinitionGroupingComponent", "name", element.getNameElement(), -1);
14665    }
14666    if (element.hasDescriptionElement()) {
14667      composeMarkdown(t, "ImplementationGuideDefinitionGroupingComponent", "description", element.getDescriptionElement(), -1);
14668    }
14669  }
14670
14671  protected void composeImplementationGuideDefinitionResourceComponent(Complex parent, String parentType, String name, ImplementationGuide.ImplementationGuideDefinitionResourceComponent element, int index) {
14672    if (element == null) 
14673      return;
14674    Complex t;
14675    if (Utilities.noString(parentType))
14676      t = parent;
14677    else {
14678      t = parent.predicate("fhir:"+parentType+'.'+name);
14679    }
14680    composeBackboneElement(t, "resource", name, element, index);
14681    if (element.hasReference()) {
14682      composeReference(t, "ImplementationGuideDefinitionResourceComponent", "reference", element.getReference(), -1);
14683    }
14684    for (int i = 0; i < element.getFhirVersion().size(); i++) {
14685      composeEnum(t, "ImplementationGuideDefinitionResourceComponent", "fhirVersion", element.getFhirVersion().get(i), i);
14686    }
14687    if (element.hasNameElement()) {
14688      composeString(t, "ImplementationGuideDefinitionResourceComponent", "name", element.getNameElement(), -1);
14689    }
14690    if (element.hasDescriptionElement()) {
14691      composeMarkdown(t, "ImplementationGuideDefinitionResourceComponent", "description", element.getDescriptionElement(), -1);
14692    }
14693    if (element.hasIsExampleElement()) {
14694      composeBoolean(t, "ImplementationGuideDefinitionResourceComponent", "isExample", element.getIsExampleElement(), -1);
14695    }
14696    for (int i = 0; i < element.getProfile().size(); i++) {
14697      composeCanonical(t, "ImplementationGuideDefinitionResourceComponent", "profile", element.getProfile().get(i), i);
14698    }
14699    if (element.hasGroupingIdElement()) {
14700      composeId(t, "ImplementationGuideDefinitionResourceComponent", "groupingId", element.getGroupingIdElement(), -1);
14701    }
14702  }
14703
14704  protected void composeImplementationGuideDefinitionPageComponent(Complex parent, String parentType, String name, ImplementationGuide.ImplementationGuideDefinitionPageComponent element, int index) {
14705    if (element == null) 
14706      return;
14707    Complex t;
14708    if (Utilities.noString(parentType))
14709      t = parent;
14710    else {
14711      t = parent.predicate("fhir:"+parentType+'.'+name);
14712    }
14713    composeBackboneElement(t, "page", name, element, index);
14714    if (element.hasSource()) {
14715      composeType(t, "ImplementationGuideDefinitionPageComponent", "source", element.getSource(), -1);
14716    }
14717    if (element.hasNameElement()) {
14718      composeUrl(t, "ImplementationGuideDefinitionPageComponent", "name", element.getNameElement(), -1);
14719    }
14720    if (element.hasTitleElement()) {
14721      composeString(t, "ImplementationGuideDefinitionPageComponent", "title", element.getTitleElement(), -1);
14722    }
14723    if (element.hasGenerationElement()) {
14724      composeEnum(t, "ImplementationGuideDefinitionPageComponent", "generation", element.getGenerationElement(), -1);
14725    }
14726    for (int i = 0; i < element.getPage().size(); i++) {
14727      composeImplementationGuideDefinitionPageComponent(t, "ImplementationGuideDefinitionPageComponent", "page", element.getPage().get(i), i);
14728    }
14729  }
14730
14731  protected void composeImplementationGuideDefinitionParameterComponent(Complex parent, String parentType, String name, ImplementationGuide.ImplementationGuideDefinitionParameterComponent element, int index) {
14732    if (element == null) 
14733      return;
14734    Complex t;
14735    if (Utilities.noString(parentType))
14736      t = parent;
14737    else {
14738      t = parent.predicate("fhir:"+parentType+'.'+name);
14739    }
14740    composeBackboneElement(t, "parameter", name, element, index);
14741    if (element.hasCode()) {
14742      composeCoding(t, "ImplementationGuideDefinitionParameterComponent", "code", element.getCode(), -1);
14743    }
14744    if (element.hasValueElement()) {
14745      composeString(t, "ImplementationGuideDefinitionParameterComponent", "value", element.getValueElement(), -1);
14746    }
14747  }
14748
14749  protected void composeImplementationGuideDefinitionTemplateComponent(Complex parent, String parentType, String name, ImplementationGuide.ImplementationGuideDefinitionTemplateComponent element, int index) {
14750    if (element == null) 
14751      return;
14752    Complex t;
14753    if (Utilities.noString(parentType))
14754      t = parent;
14755    else {
14756      t = parent.predicate("fhir:"+parentType+'.'+name);
14757    }
14758    composeBackboneElement(t, "template", name, element, index);
14759    if (element.hasCodeElement()) {
14760      composeCode(t, "ImplementationGuideDefinitionTemplateComponent", "code", element.getCodeElement(), -1);
14761    }
14762    if (element.hasSourceElement()) {
14763      composeString(t, "ImplementationGuideDefinitionTemplateComponent", "source", element.getSourceElement(), -1);
14764    }
14765    if (element.hasScopeElement()) {
14766      composeString(t, "ImplementationGuideDefinitionTemplateComponent", "scope", element.getScopeElement(), -1);
14767    }
14768  }
14769
14770  protected void composeImplementationGuideManifestComponent(Complex parent, String parentType, String name, ImplementationGuide.ImplementationGuideManifestComponent element, int index) {
14771    if (element == null) 
14772      return;
14773    Complex t;
14774    if (Utilities.noString(parentType))
14775      t = parent;
14776    else {
14777      t = parent.predicate("fhir:"+parentType+'.'+name);
14778    }
14779    composeBackboneElement(t, "manifest", name, element, index);
14780    if (element.hasRenderingElement()) {
14781      composeUrl(t, "ImplementationGuideManifestComponent", "rendering", element.getRenderingElement(), -1);
14782    }
14783    for (int i = 0; i < element.getResource().size(); i++) {
14784      composeImplementationGuideManifestResourceComponent(t, "ImplementationGuideManifestComponent", "resource", element.getResource().get(i), i);
14785    }
14786    for (int i = 0; i < element.getPage().size(); i++) {
14787      composeImplementationGuideManifestPageComponent(t, "ImplementationGuideManifestComponent", "page", element.getPage().get(i), i);
14788    }
14789    for (int i = 0; i < element.getImage().size(); i++) {
14790      composeString(t, "ImplementationGuideManifestComponent", "image", element.getImage().get(i), i);
14791    }
14792    for (int i = 0; i < element.getOther().size(); i++) {
14793      composeString(t, "ImplementationGuideManifestComponent", "other", element.getOther().get(i), i);
14794    }
14795  }
14796
14797  protected void composeImplementationGuideManifestResourceComponent(Complex parent, String parentType, String name, ImplementationGuide.ManifestResourceComponent element, int index) {
14798    if (element == null) 
14799      return;
14800    Complex t;
14801    if (Utilities.noString(parentType))
14802      t = parent;
14803    else {
14804      t = parent.predicate("fhir:"+parentType+'.'+name);
14805    }
14806    composeBackboneElement(t, "resource", name, element, index);
14807    if (element.hasReference()) {
14808      composeReference(t, "ManifestResourceComponent", "reference", element.getReference(), -1);
14809    }
14810    if (element.hasIsExampleElement()) {
14811      composeBoolean(t, "ManifestResourceComponent", "isExample", element.getIsExampleElement(), -1);
14812    }
14813    for (int i = 0; i < element.getProfile().size(); i++) {
14814      composeCanonical(t, "ManifestResourceComponent", "profile", element.getProfile().get(i), i);
14815    }
14816    if (element.hasRelativePathElement()) {
14817      composeUrl(t, "ManifestResourceComponent", "relativePath", element.getRelativePathElement(), -1);
14818    }
14819  }
14820
14821  protected void composeImplementationGuideManifestPageComponent(Complex parent, String parentType, String name, ImplementationGuide.ManifestPageComponent element, int index) {
14822    if (element == null) 
14823      return;
14824    Complex t;
14825    if (Utilities.noString(parentType))
14826      t = parent;
14827    else {
14828      t = parent.predicate("fhir:"+parentType+'.'+name);
14829    }
14830    composeBackboneElement(t, "page", name, element, index);
14831    if (element.hasNameElement()) {
14832      composeString(t, "ManifestPageComponent", "name", element.getNameElement(), -1);
14833    }
14834    if (element.hasTitleElement()) {
14835      composeString(t, "ManifestPageComponent", "title", element.getTitleElement(), -1);
14836    }
14837    for (int i = 0; i < element.getAnchor().size(); i++) {
14838      composeString(t, "ManifestPageComponent", "anchor", element.getAnchor().get(i), i);
14839    }
14840  }
14841
14842  protected void composeIngredient(Complex parent, String parentType, String name, Ingredient element, int index) {
14843    if (element == null) 
14844      return;
14845    Complex t;
14846    if (Utilities.noString(parentType))
14847      t = parent;
14848    else {
14849      t = parent.predicate("fhir:"+parentType+'.'+name);
14850    }
14851    composeDomainResource(t, "Ingredient", name, element, index);
14852    if (element.hasIdentifier()) {
14853      composeIdentifier(t, "Ingredient", "identifier", element.getIdentifier(), -1);
14854    }
14855    if (element.hasStatusElement()) {
14856      composeEnum(t, "Ingredient", "status", element.getStatusElement(), -1);
14857    }
14858    for (int i = 0; i < element.getFor().size(); i++) {
14859      composeReference(t, "Ingredient", "for", element.getFor().get(i), i);
14860    }
14861    if (element.hasRole()) {
14862      composeCodeableConcept(t, "Ingredient", "role", element.getRole(), -1);
14863    }
14864    for (int i = 0; i < element.getFunction().size(); i++) {
14865      composeCodeableConcept(t, "Ingredient", "function", element.getFunction().get(i), i);
14866    }
14867    if (element.hasGroup()) {
14868      composeCodeableConcept(t, "Ingredient", "group", element.getGroup(), -1);
14869    }
14870    if (element.hasAllergenicIndicatorElement()) {
14871      composeBoolean(t, "Ingredient", "allergenicIndicator", element.getAllergenicIndicatorElement(), -1);
14872    }
14873    for (int i = 0; i < element.getManufacturer().size(); i++) {
14874      composeIngredientManufacturerComponent(t, "Ingredient", "manufacturer", element.getManufacturer().get(i), i);
14875    }
14876    if (element.hasSubstance()) {
14877      composeIngredientSubstanceComponent(t, "Ingredient", "substance", element.getSubstance(), -1);
14878    }
14879  }
14880
14881  protected void composeIngredientManufacturerComponent(Complex parent, String parentType, String name, Ingredient.IngredientManufacturerComponent element, int index) {
14882    if (element == null) 
14883      return;
14884    Complex t;
14885    if (Utilities.noString(parentType))
14886      t = parent;
14887    else {
14888      t = parent.predicate("fhir:"+parentType+'.'+name);
14889    }
14890    composeBackboneElement(t, "manufacturer", name, element, index);
14891    if (element.hasRoleElement()) {
14892      composeEnum(t, "IngredientManufacturerComponent", "role", element.getRoleElement(), -1);
14893    }
14894    if (element.hasManufacturer()) {
14895      composeReference(t, "IngredientManufacturerComponent", "manufacturer", element.getManufacturer(), -1);
14896    }
14897  }
14898
14899  protected void composeIngredientSubstanceComponent(Complex parent, String parentType, String name, Ingredient.IngredientSubstanceComponent element, int index) {
14900    if (element == null) 
14901      return;
14902    Complex t;
14903    if (Utilities.noString(parentType))
14904      t = parent;
14905    else {
14906      t = parent.predicate("fhir:"+parentType+'.'+name);
14907    }
14908    composeBackboneElement(t, "substance", name, element, index);
14909    if (element.hasCode()) {
14910      composeCodeableReference(t, "IngredientSubstanceComponent", "code", element.getCode(), -1);
14911    }
14912    for (int i = 0; i < element.getStrength().size(); i++) {
14913      composeIngredientSubstanceStrengthComponent(t, "IngredientSubstanceComponent", "strength", element.getStrength().get(i), i);
14914    }
14915  }
14916
14917  protected void composeIngredientSubstanceStrengthComponent(Complex parent, String parentType, String name, Ingredient.IngredientSubstanceStrengthComponent element, int index) {
14918    if (element == null) 
14919      return;
14920    Complex t;
14921    if (Utilities.noString(parentType))
14922      t = parent;
14923    else {
14924      t = parent.predicate("fhir:"+parentType+'.'+name);
14925    }
14926    composeBackboneElement(t, "strength", name, element, index);
14927    if (element.hasPresentation()) {
14928      composeType(t, "IngredientSubstanceStrengthComponent", "presentation", element.getPresentation(), -1);
14929    }
14930    if (element.hasTextPresentationElement()) {
14931      composeString(t, "IngredientSubstanceStrengthComponent", "textPresentation", element.getTextPresentationElement(), -1);
14932    }
14933    if (element.hasConcentration()) {
14934      composeType(t, "IngredientSubstanceStrengthComponent", "concentration", element.getConcentration(), -1);
14935    }
14936    if (element.hasTextConcentrationElement()) {
14937      composeString(t, "IngredientSubstanceStrengthComponent", "textConcentration", element.getTextConcentrationElement(), -1);
14938    }
14939    if (element.hasBasis()) {
14940      composeCodeableConcept(t, "IngredientSubstanceStrengthComponent", "basis", element.getBasis(), -1);
14941    }
14942    if (element.hasMeasurementPointElement()) {
14943      composeString(t, "IngredientSubstanceStrengthComponent", "measurementPoint", element.getMeasurementPointElement(), -1);
14944    }
14945    for (int i = 0; i < element.getCountry().size(); i++) {
14946      composeCodeableConcept(t, "IngredientSubstanceStrengthComponent", "country", element.getCountry().get(i), i);
14947    }
14948    for (int i = 0; i < element.getReferenceStrength().size(); i++) {
14949      composeIngredientSubstanceStrengthReferenceStrengthComponent(t, "IngredientSubstanceStrengthComponent", "referenceStrength", element.getReferenceStrength().get(i), i);
14950    }
14951  }
14952
14953  protected void composeIngredientSubstanceStrengthReferenceStrengthComponent(Complex parent, String parentType, String name, Ingredient.IngredientSubstanceStrengthReferenceStrengthComponent element, int index) {
14954    if (element == null) 
14955      return;
14956    Complex t;
14957    if (Utilities.noString(parentType))
14958      t = parent;
14959    else {
14960      t = parent.predicate("fhir:"+parentType+'.'+name);
14961    }
14962    composeBackboneElement(t, "referenceStrength", name, element, index);
14963    if (element.hasSubstance()) {
14964      composeCodeableReference(t, "IngredientSubstanceStrengthReferenceStrengthComponent", "substance", element.getSubstance(), -1);
14965    }
14966    if (element.hasStrength()) {
14967      composeType(t, "IngredientSubstanceStrengthReferenceStrengthComponent", "strength", element.getStrength(), -1);
14968    }
14969    if (element.hasMeasurementPointElement()) {
14970      composeString(t, "IngredientSubstanceStrengthReferenceStrengthComponent", "measurementPoint", element.getMeasurementPointElement(), -1);
14971    }
14972    for (int i = 0; i < element.getCountry().size(); i++) {
14973      composeCodeableConcept(t, "IngredientSubstanceStrengthReferenceStrengthComponent", "country", element.getCountry().get(i), i);
14974    }
14975  }
14976
14977  protected void composeInsurancePlan(Complex parent, String parentType, String name, InsurancePlan element, int index) {
14978    if (element == null) 
14979      return;
14980    Complex t;
14981    if (Utilities.noString(parentType))
14982      t = parent;
14983    else {
14984      t = parent.predicate("fhir:"+parentType+'.'+name);
14985    }
14986    composeDomainResource(t, "InsurancePlan", name, element, index);
14987    for (int i = 0; i < element.getIdentifier().size(); i++) {
14988      composeIdentifier(t, "InsurancePlan", "identifier", element.getIdentifier().get(i), i);
14989    }
14990    if (element.hasStatusElement()) {
14991      composeEnum(t, "InsurancePlan", "status", element.getStatusElement(), -1);
14992    }
14993    for (int i = 0; i < element.getType().size(); i++) {
14994      composeCodeableConcept(t, "InsurancePlan", "type", element.getType().get(i), i);
14995    }
14996    if (element.hasNameElement()) {
14997      composeString(t, "InsurancePlan", "name", element.getNameElement(), -1);
14998    }
14999    for (int i = 0; i < element.getAlias().size(); i++) {
15000      composeString(t, "InsurancePlan", "alias", element.getAlias().get(i), i);
15001    }
15002    if (element.hasPeriod()) {
15003      composePeriod(t, "InsurancePlan", "period", element.getPeriod(), -1);
15004    }
15005    if (element.hasOwnedBy()) {
15006      composeReference(t, "InsurancePlan", "ownedBy", element.getOwnedBy(), -1);
15007    }
15008    if (element.hasAdministeredBy()) {
15009      composeReference(t, "InsurancePlan", "administeredBy", element.getAdministeredBy(), -1);
15010    }
15011    for (int i = 0; i < element.getCoverageArea().size(); i++) {
15012      composeReference(t, "InsurancePlan", "coverageArea", element.getCoverageArea().get(i), i);
15013    }
15014    for (int i = 0; i < element.getContact().size(); i++) {
15015      composeExtendedContactDetail(t, "InsurancePlan", "contact", element.getContact().get(i), i);
15016    }
15017    for (int i = 0; i < element.getEndpoint().size(); i++) {
15018      composeReference(t, "InsurancePlan", "endpoint", element.getEndpoint().get(i), i);
15019    }
15020    for (int i = 0; i < element.getNetwork().size(); i++) {
15021      composeReference(t, "InsurancePlan", "network", element.getNetwork().get(i), i);
15022    }
15023    for (int i = 0; i < element.getCoverage().size(); i++) {
15024      composeInsurancePlanCoverageComponent(t, "InsurancePlan", "coverage", element.getCoverage().get(i), i);
15025    }
15026    for (int i = 0; i < element.getPlan().size(); i++) {
15027      composeInsurancePlanPlanComponent(t, "InsurancePlan", "plan", element.getPlan().get(i), i);
15028    }
15029  }
15030
15031  protected void composeInsurancePlanCoverageComponent(Complex parent, String parentType, String name, InsurancePlan.InsurancePlanCoverageComponent element, int index) {
15032    if (element == null) 
15033      return;
15034    Complex t;
15035    if (Utilities.noString(parentType))
15036      t = parent;
15037    else {
15038      t = parent.predicate("fhir:"+parentType+'.'+name);
15039    }
15040    composeBackboneElement(t, "coverage", name, element, index);
15041    if (element.hasType()) {
15042      composeCodeableConcept(t, "InsurancePlanCoverageComponent", "type", element.getType(), -1);
15043    }
15044    for (int i = 0; i < element.getNetwork().size(); i++) {
15045      composeReference(t, "InsurancePlanCoverageComponent", "network", element.getNetwork().get(i), i);
15046    }
15047    for (int i = 0; i < element.getBenefit().size(); i++) {
15048      composeInsurancePlanCoverageBenefitComponent(t, "InsurancePlanCoverageComponent", "benefit", element.getBenefit().get(i), i);
15049    }
15050  }
15051
15052  protected void composeInsurancePlanCoverageBenefitComponent(Complex parent, String parentType, String name, InsurancePlan.CoverageBenefitComponent element, int index) {
15053    if (element == null) 
15054      return;
15055    Complex t;
15056    if (Utilities.noString(parentType))
15057      t = parent;
15058    else {
15059      t = parent.predicate("fhir:"+parentType+'.'+name);
15060    }
15061    composeBackboneElement(t, "benefit", name, element, index);
15062    if (element.hasType()) {
15063      composeCodeableConcept(t, "CoverageBenefitComponent", "type", element.getType(), -1);
15064    }
15065    if (element.hasRequirementElement()) {
15066      composeString(t, "CoverageBenefitComponent", "requirement", element.getRequirementElement(), -1);
15067    }
15068    for (int i = 0; i < element.getLimit().size(); i++) {
15069      composeInsurancePlanCoverageBenefitLimitComponent(t, "CoverageBenefitComponent", "limit", element.getLimit().get(i), i);
15070    }
15071  }
15072
15073  protected void composeInsurancePlanCoverageBenefitLimitComponent(Complex parent, String parentType, String name, InsurancePlan.CoverageBenefitLimitComponent element, int index) {
15074    if (element == null) 
15075      return;
15076    Complex t;
15077    if (Utilities.noString(parentType))
15078      t = parent;
15079    else {
15080      t = parent.predicate("fhir:"+parentType+'.'+name);
15081    }
15082    composeBackboneElement(t, "limit", name, element, index);
15083    if (element.hasValue()) {
15084      composeQuantity(t, "CoverageBenefitLimitComponent", "value", element.getValue(), -1);
15085    }
15086    if (element.hasCode()) {
15087      composeCodeableConcept(t, "CoverageBenefitLimitComponent", "code", element.getCode(), -1);
15088    }
15089  }
15090
15091  protected void composeInsurancePlanPlanComponent(Complex parent, String parentType, String name, InsurancePlan.InsurancePlanPlanComponent element, int index) {
15092    if (element == null) 
15093      return;
15094    Complex t;
15095    if (Utilities.noString(parentType))
15096      t = parent;
15097    else {
15098      t = parent.predicate("fhir:"+parentType+'.'+name);
15099    }
15100    composeBackboneElement(t, "plan", name, element, index);
15101    for (int i = 0; i < element.getIdentifier().size(); i++) {
15102      composeIdentifier(t, "InsurancePlanPlanComponent", "identifier", element.getIdentifier().get(i), i);
15103    }
15104    if (element.hasType()) {
15105      composeCodeableConcept(t, "InsurancePlanPlanComponent", "type", element.getType(), -1);
15106    }
15107    for (int i = 0; i < element.getCoverageArea().size(); i++) {
15108      composeReference(t, "InsurancePlanPlanComponent", "coverageArea", element.getCoverageArea().get(i), i);
15109    }
15110    for (int i = 0; i < element.getNetwork().size(); i++) {
15111      composeReference(t, "InsurancePlanPlanComponent", "network", element.getNetwork().get(i), i);
15112    }
15113    for (int i = 0; i < element.getGeneralCost().size(); i++) {
15114      composeInsurancePlanPlanGeneralCostComponent(t, "InsurancePlanPlanComponent", "generalCost", element.getGeneralCost().get(i), i);
15115    }
15116    for (int i = 0; i < element.getSpecificCost().size(); i++) {
15117      composeInsurancePlanPlanSpecificCostComponent(t, "InsurancePlanPlanComponent", "specificCost", element.getSpecificCost().get(i), i);
15118    }
15119  }
15120
15121  protected void composeInsurancePlanPlanGeneralCostComponent(Complex parent, String parentType, String name, InsurancePlan.InsurancePlanPlanGeneralCostComponent element, int index) {
15122    if (element == null) 
15123      return;
15124    Complex t;
15125    if (Utilities.noString(parentType))
15126      t = parent;
15127    else {
15128      t = parent.predicate("fhir:"+parentType+'.'+name);
15129    }
15130    composeBackboneElement(t, "generalCost", name, element, index);
15131    if (element.hasType()) {
15132      composeCodeableConcept(t, "InsurancePlanPlanGeneralCostComponent", "type", element.getType(), -1);
15133    }
15134    if (element.hasGroupSizeElement()) {
15135      composePositiveInt(t, "InsurancePlanPlanGeneralCostComponent", "groupSize", element.getGroupSizeElement(), -1);
15136    }
15137    if (element.hasCost()) {
15138      composeMoney(t, "InsurancePlanPlanGeneralCostComponent", "cost", element.getCost(), -1);
15139    }
15140    if (element.hasCommentElement()) {
15141      composeString(t, "InsurancePlanPlanGeneralCostComponent", "comment", element.getCommentElement(), -1);
15142    }
15143  }
15144
15145  protected void composeInsurancePlanPlanSpecificCostComponent(Complex parent, String parentType, String name, InsurancePlan.InsurancePlanPlanSpecificCostComponent element, int index) {
15146    if (element == null) 
15147      return;
15148    Complex t;
15149    if (Utilities.noString(parentType))
15150      t = parent;
15151    else {
15152      t = parent.predicate("fhir:"+parentType+'.'+name);
15153    }
15154    composeBackboneElement(t, "specificCost", name, element, index);
15155    if (element.hasCategory()) {
15156      composeCodeableConcept(t, "InsurancePlanPlanSpecificCostComponent", "category", element.getCategory(), -1);
15157    }
15158    for (int i = 0; i < element.getBenefit().size(); i++) {
15159      composeInsurancePlanPlanBenefitComponent(t, "InsurancePlanPlanSpecificCostComponent", "benefit", element.getBenefit().get(i), i);
15160    }
15161  }
15162
15163  protected void composeInsurancePlanPlanBenefitComponent(Complex parent, String parentType, String name, InsurancePlan.PlanBenefitComponent element, int index) {
15164    if (element == null) 
15165      return;
15166    Complex t;
15167    if (Utilities.noString(parentType))
15168      t = parent;
15169    else {
15170      t = parent.predicate("fhir:"+parentType+'.'+name);
15171    }
15172    composeBackboneElement(t, "benefit", name, element, index);
15173    if (element.hasType()) {
15174      composeCodeableConcept(t, "PlanBenefitComponent", "type", element.getType(), -1);
15175    }
15176    for (int i = 0; i < element.getCost().size(); i++) {
15177      composeInsurancePlanPlanBenefitCostComponent(t, "PlanBenefitComponent", "cost", element.getCost().get(i), i);
15178    }
15179  }
15180
15181  protected void composeInsurancePlanPlanBenefitCostComponent(Complex parent, String parentType, String name, InsurancePlan.PlanBenefitCostComponent element, int index) {
15182    if (element == null) 
15183      return;
15184    Complex t;
15185    if (Utilities.noString(parentType))
15186      t = parent;
15187    else {
15188      t = parent.predicate("fhir:"+parentType+'.'+name);
15189    }
15190    composeBackboneElement(t, "cost", name, element, index);
15191    if (element.hasType()) {
15192      composeCodeableConcept(t, "PlanBenefitCostComponent", "type", element.getType(), -1);
15193    }
15194    if (element.hasApplicability()) {
15195      composeCodeableConcept(t, "PlanBenefitCostComponent", "applicability", element.getApplicability(), -1);
15196    }
15197    for (int i = 0; i < element.getQualifiers().size(); i++) {
15198      composeCodeableConcept(t, "PlanBenefitCostComponent", "qualifiers", element.getQualifiers().get(i), i);
15199    }
15200    if (element.hasValue()) {
15201      composeQuantity(t, "PlanBenefitCostComponent", "value", element.getValue(), -1);
15202    }
15203  }
15204
15205  protected void composeInventoryReport(Complex parent, String parentType, String name, InventoryReport element, int index) {
15206    if (element == null) 
15207      return;
15208    Complex t;
15209    if (Utilities.noString(parentType))
15210      t = parent;
15211    else {
15212      t = parent.predicate("fhir:"+parentType+'.'+name);
15213    }
15214    composeDomainResource(t, "InventoryReport", name, element, index);
15215    for (int i = 0; i < element.getIdentifier().size(); i++) {
15216      composeIdentifier(t, "InventoryReport", "identifier", element.getIdentifier().get(i), i);
15217    }
15218    if (element.hasStatusElement()) {
15219      composeEnum(t, "InventoryReport", "status", element.getStatusElement(), -1);
15220    }
15221    if (element.hasCountTypeElement()) {
15222      composeEnum(t, "InventoryReport", "countType", element.getCountTypeElement(), -1);
15223    }
15224    if (element.hasOperationType()) {
15225      composeCodeableConcept(t, "InventoryReport", "operationType", element.getOperationType(), -1);
15226    }
15227    if (element.hasOperationTypeReason()) {
15228      composeCodeableConcept(t, "InventoryReport", "operationTypeReason", element.getOperationTypeReason(), -1);
15229    }
15230    if (element.hasReportedDateTimeElement()) {
15231      composeDateTime(t, "InventoryReport", "reportedDateTime", element.getReportedDateTimeElement(), -1);
15232    }
15233    if (element.hasReporter()) {
15234      composeReference(t, "InventoryReport", "reporter", element.getReporter(), -1);
15235    }
15236    if (element.hasReportingPeriod()) {
15237      composePeriod(t, "InventoryReport", "reportingPeriod", element.getReportingPeriod(), -1);
15238    }
15239    for (int i = 0; i < element.getInventoryListing().size(); i++) {
15240      composeInventoryReportInventoryListingComponent(t, "InventoryReport", "inventoryListing", element.getInventoryListing().get(i), i);
15241    }
15242    if (element.hasNote()) {
15243      composeAnnotation(t, "InventoryReport", "note", element.getNote(), -1);
15244    }
15245  }
15246
15247  protected void composeInventoryReportInventoryListingComponent(Complex parent, String parentType, String name, InventoryReport.InventoryReportInventoryListingComponent element, int index) {
15248    if (element == null) 
15249      return;
15250    Complex t;
15251    if (Utilities.noString(parentType))
15252      t = parent;
15253    else {
15254      t = parent.predicate("fhir:"+parentType+'.'+name);
15255    }
15256    composeBackboneElement(t, "inventoryListing", name, element, index);
15257    if (element.hasLocation()) {
15258      composeReference(t, "InventoryReportInventoryListingComponent", "location", element.getLocation(), -1);
15259    }
15260    if (element.hasItemStatus()) {
15261      composeCodeableConcept(t, "InventoryReportInventoryListingComponent", "itemStatus", element.getItemStatus(), -1);
15262    }
15263    if (element.hasCountingDateTimeElement()) {
15264      composeDateTime(t, "InventoryReportInventoryListingComponent", "countingDateTime", element.getCountingDateTimeElement(), -1);
15265    }
15266    for (int i = 0; i < element.getItems().size(); i++) {
15267      composeInventoryReportInventoryListingItemsComponent(t, "InventoryReportInventoryListingComponent", "items", element.getItems().get(i), i);
15268    }
15269  }
15270
15271  protected void composeInventoryReportInventoryListingItemsComponent(Complex parent, String parentType, String name, InventoryReport.InventoryReportInventoryListingItemsComponent element, int index) {
15272    if (element == null) 
15273      return;
15274    Complex t;
15275    if (Utilities.noString(parentType))
15276      t = parent;
15277    else {
15278      t = parent.predicate("fhir:"+parentType+'.'+name);
15279    }
15280    composeBackboneElement(t, "items", name, element, index);
15281    if (element.hasCategory()) {
15282      composeCodeableConcept(t, "InventoryReportInventoryListingItemsComponent", "category", element.getCategory(), -1);
15283    }
15284    if (element.hasQuantity()) {
15285      composeQuantity(t, "InventoryReportInventoryListingItemsComponent", "quantity", element.getQuantity(), -1);
15286    }
15287    if (element.hasItem()) {
15288      composeCodeableReference(t, "InventoryReportInventoryListingItemsComponent", "item", element.getItem(), -1);
15289    }
15290    if (element.hasLotElement()) {
15291      composeString(t, "InventoryReportInventoryListingItemsComponent", "lot", element.getLotElement(), -1);
15292    }
15293    if (element.hasSerialElement()) {
15294      composeString(t, "InventoryReportInventoryListingItemsComponent", "serial", element.getSerialElement(), -1);
15295    }
15296    if (element.hasExpiryElement()) {
15297      composeDateTime(t, "InventoryReportInventoryListingItemsComponent", "expiry", element.getExpiryElement(), -1);
15298    }
15299    if (element.hasManufacturingDateElement()) {
15300      composeDateTime(t, "InventoryReportInventoryListingItemsComponent", "manufacturingDate", element.getManufacturingDateElement(), -1);
15301    }
15302  }
15303
15304  protected void composeInvoice(Complex parent, String parentType, String name, Invoice element, int index) {
15305    if (element == null) 
15306      return;
15307    Complex t;
15308    if (Utilities.noString(parentType))
15309      t = parent;
15310    else {
15311      t = parent.predicate("fhir:"+parentType+'.'+name);
15312    }
15313    composeDomainResource(t, "Invoice", name, element, index);
15314    for (int i = 0; i < element.getIdentifier().size(); i++) {
15315      composeIdentifier(t, "Invoice", "identifier", element.getIdentifier().get(i), i);
15316    }
15317    if (element.hasStatusElement()) {
15318      composeEnum(t, "Invoice", "status", element.getStatusElement(), -1);
15319    }
15320    if (element.hasCancelledReasonElement()) {
15321      composeString(t, "Invoice", "cancelledReason", element.getCancelledReasonElement(), -1);
15322    }
15323    if (element.hasType()) {
15324      composeCodeableConcept(t, "Invoice", "type", element.getType(), -1);
15325    }
15326    if (element.hasSubject()) {
15327      composeReference(t, "Invoice", "subject", element.getSubject(), -1);
15328    }
15329    if (element.hasRecipient()) {
15330      composeReference(t, "Invoice", "recipient", element.getRecipient(), -1);
15331    }
15332    if (element.hasDateElement()) {
15333      composeDateTime(t, "Invoice", "date", element.getDateElement(), -1);
15334    }
15335    if (element.hasCreationElement()) {
15336      composeDateTime(t, "Invoice", "creation", element.getCreationElement(), -1);
15337    }
15338    if (element.hasPeriod()) {
15339      composeType(t, "Invoice", "period", element.getPeriod(), -1);
15340    }
15341    for (int i = 0; i < element.getParticipant().size(); i++) {
15342      composeInvoiceParticipantComponent(t, "Invoice", "participant", element.getParticipant().get(i), i);
15343    }
15344    if (element.hasIssuer()) {
15345      composeReference(t, "Invoice", "issuer", element.getIssuer(), -1);
15346    }
15347    if (element.hasAccount()) {
15348      composeReference(t, "Invoice", "account", element.getAccount(), -1);
15349    }
15350    for (int i = 0; i < element.getLineItem().size(); i++) {
15351      composeInvoiceLineItemComponent(t, "Invoice", "lineItem", element.getLineItem().get(i), i);
15352    }
15353    for (int i = 0; i < element.getTotalPriceComponent().size(); i++) {
15354      composeMonetaryComponent(t, "Invoice", "totalPriceComponent", element.getTotalPriceComponent().get(i), i);
15355    }
15356    if (element.hasTotalNet()) {
15357      composeMoney(t, "Invoice", "totalNet", element.getTotalNet(), -1);
15358    }
15359    if (element.hasTotalGross()) {
15360      composeMoney(t, "Invoice", "totalGross", element.getTotalGross(), -1);
15361    }
15362    if (element.hasPaymentTermsElement()) {
15363      composeMarkdown(t, "Invoice", "paymentTerms", element.getPaymentTermsElement(), -1);
15364    }
15365    for (int i = 0; i < element.getNote().size(); i++) {
15366      composeAnnotation(t, "Invoice", "note", element.getNote().get(i), i);
15367    }
15368  }
15369
15370  protected void composeInvoiceParticipantComponent(Complex parent, String parentType, String name, Invoice.InvoiceParticipantComponent element, int index) {
15371    if (element == null) 
15372      return;
15373    Complex t;
15374    if (Utilities.noString(parentType))
15375      t = parent;
15376    else {
15377      t = parent.predicate("fhir:"+parentType+'.'+name);
15378    }
15379    composeBackboneElement(t, "participant", name, element, index);
15380    if (element.hasRole()) {
15381      composeCodeableConcept(t, "InvoiceParticipantComponent", "role", element.getRole(), -1);
15382    }
15383    if (element.hasActor()) {
15384      composeReference(t, "InvoiceParticipantComponent", "actor", element.getActor(), -1);
15385    }
15386  }
15387
15388  protected void composeInvoiceLineItemComponent(Complex parent, String parentType, String name, Invoice.InvoiceLineItemComponent element, int index) {
15389    if (element == null) 
15390      return;
15391    Complex t;
15392    if (Utilities.noString(parentType))
15393      t = parent;
15394    else {
15395      t = parent.predicate("fhir:"+parentType+'.'+name);
15396    }
15397    composeBackboneElement(t, "lineItem", name, element, index);
15398    if (element.hasSequenceElement()) {
15399      composePositiveInt(t, "InvoiceLineItemComponent", "sequence", element.getSequenceElement(), -1);
15400    }
15401    if (element.hasServiced()) {
15402      composeType(t, "InvoiceLineItemComponent", "serviced", element.getServiced(), -1);
15403    }
15404    if (element.hasChargeItem()) {
15405      composeType(t, "InvoiceLineItemComponent", "chargeItem", element.getChargeItem(), -1);
15406    }
15407    for (int i = 0; i < element.getPriceComponent().size(); i++) {
15408      composeMonetaryComponent(t, "InvoiceLineItemComponent", "priceComponent", element.getPriceComponent().get(i), i);
15409    }
15410  }
15411
15412  protected void composeLibrary(Complex parent, String parentType, String name, Library element, int index) {
15413    if (element == null) 
15414      return;
15415    Complex t;
15416    if (Utilities.noString(parentType))
15417      t = parent;
15418    else {
15419      t = parent.predicate("fhir:"+parentType+'.'+name);
15420    }
15421    composeMetadataResource(t, "Library", name, element, index);
15422    if (element.hasUrlElement()) {
15423      composeUri(t, "Library", "url", element.getUrlElement(), -1);
15424    }
15425    for (int i = 0; i < element.getIdentifier().size(); i++) {
15426      composeIdentifier(t, "Library", "identifier", element.getIdentifier().get(i), i);
15427    }
15428    if (element.hasVersionElement()) {
15429      composeString(t, "Library", "version", element.getVersionElement(), -1);
15430    }
15431    if (element.hasNameElement()) {
15432      composeString(t, "Library", "name", element.getNameElement(), -1);
15433    }
15434    if (element.hasTitleElement()) {
15435      composeString(t, "Library", "title", element.getTitleElement(), -1);
15436    }
15437    if (element.hasSubtitleElement()) {
15438      composeString(t, "Library", "subtitle", element.getSubtitleElement(), -1);
15439    }
15440    if (element.hasStatusElement()) {
15441      composeEnum(t, "Library", "status", element.getStatusElement(), -1);
15442    }
15443    if (element.hasExperimentalElement()) {
15444      composeBoolean(t, "Library", "experimental", element.getExperimentalElement(), -1);
15445    }
15446    if (element.hasType()) {
15447      composeCodeableConcept(t, "Library", "type", element.getType(), -1);
15448    }
15449    if (element.hasSubject()) {
15450      composeType(t, "Library", "subject", element.getSubject(), -1);
15451    }
15452    if (element.hasDateElement()) {
15453      composeDateTime(t, "Library", "date", element.getDateElement(), -1);
15454    }
15455    if (element.hasPublisherElement()) {
15456      composeString(t, "Library", "publisher", element.getPublisherElement(), -1);
15457    }
15458    for (int i = 0; i < element.getContact().size(); i++) {
15459      composeContactDetail(t, "Library", "contact", element.getContact().get(i), i);
15460    }
15461    if (element.hasDescriptionElement()) {
15462      composeMarkdown(t, "Library", "description", element.getDescriptionElement(), -1);
15463    }
15464    for (int i = 0; i < element.getUseContext().size(); i++) {
15465      composeUsageContext(t, "Library", "useContext", element.getUseContext().get(i), i);
15466    }
15467    for (int i = 0; i < element.getJurisdiction().size(); i++) {
15468      composeCodeableConcept(t, "Library", "jurisdiction", element.getJurisdiction().get(i), i);
15469    }
15470    if (element.hasPurposeElement()) {
15471      composeMarkdown(t, "Library", "purpose", element.getPurposeElement(), -1);
15472    }
15473    if (element.hasUsageElement()) {
15474      composeString(t, "Library", "usage", element.getUsageElement(), -1);
15475    }
15476    if (element.hasCopyrightElement()) {
15477      composeMarkdown(t, "Library", "copyright", element.getCopyrightElement(), -1);
15478    }
15479    if (element.hasApprovalDateElement()) {
15480      composeDate(t, "Library", "approvalDate", element.getApprovalDateElement(), -1);
15481    }
15482    if (element.hasLastReviewDateElement()) {
15483      composeDate(t, "Library", "lastReviewDate", element.getLastReviewDateElement(), -1);
15484    }
15485    if (element.hasEffectivePeriod()) {
15486      composePeriod(t, "Library", "effectivePeriod", element.getEffectivePeriod(), -1);
15487    }
15488    for (int i = 0; i < element.getTopic().size(); i++) {
15489      composeCodeableConcept(t, "Library", "topic", element.getTopic().get(i), i);
15490    }
15491    for (int i = 0; i < element.getAuthor().size(); i++) {
15492      composeContactDetail(t, "Library", "author", element.getAuthor().get(i), i);
15493    }
15494    for (int i = 0; i < element.getEditor().size(); i++) {
15495      composeContactDetail(t, "Library", "editor", element.getEditor().get(i), i);
15496    }
15497    for (int i = 0; i < element.getReviewer().size(); i++) {
15498      composeContactDetail(t, "Library", "reviewer", element.getReviewer().get(i), i);
15499    }
15500    for (int i = 0; i < element.getEndorser().size(); i++) {
15501      composeContactDetail(t, "Library", "endorser", element.getEndorser().get(i), i);
15502    }
15503    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
15504      composeRelatedArtifact(t, "Library", "relatedArtifact", element.getRelatedArtifact().get(i), i);
15505    }
15506    for (int i = 0; i < element.getParameter().size(); i++) {
15507      composeParameterDefinition(t, "Library", "parameter", element.getParameter().get(i), i);
15508    }
15509    for (int i = 0; i < element.getDataRequirement().size(); i++) {
15510      composeDataRequirement(t, "Library", "dataRequirement", element.getDataRequirement().get(i), i);
15511    }
15512    for (int i = 0; i < element.getContent().size(); i++) {
15513      composeAttachment(t, "Library", "content", element.getContent().get(i), i);
15514    }
15515  }
15516
15517  protected void composeLinkage(Complex parent, String parentType, String name, Linkage element, int index) {
15518    if (element == null) 
15519      return;
15520    Complex t;
15521    if (Utilities.noString(parentType))
15522      t = parent;
15523    else {
15524      t = parent.predicate("fhir:"+parentType+'.'+name);
15525    }
15526    composeDomainResource(t, "Linkage", name, element, index);
15527    if (element.hasActiveElement()) {
15528      composeBoolean(t, "Linkage", "active", element.getActiveElement(), -1);
15529    }
15530    if (element.hasAuthor()) {
15531      composeReference(t, "Linkage", "author", element.getAuthor(), -1);
15532    }
15533    for (int i = 0; i < element.getItem().size(); i++) {
15534      composeLinkageItemComponent(t, "Linkage", "item", element.getItem().get(i), i);
15535    }
15536  }
15537
15538  protected void composeLinkageItemComponent(Complex parent, String parentType, String name, Linkage.LinkageItemComponent element, int index) {
15539    if (element == null) 
15540      return;
15541    Complex t;
15542    if (Utilities.noString(parentType))
15543      t = parent;
15544    else {
15545      t = parent.predicate("fhir:"+parentType+'.'+name);
15546    }
15547    composeBackboneElement(t, "item", name, element, index);
15548    if (element.hasTypeElement()) {
15549      composeEnum(t, "LinkageItemComponent", "type", element.getTypeElement(), -1);
15550    }
15551    if (element.hasResource()) {
15552      composeReference(t, "LinkageItemComponent", "resource", element.getResource(), -1);
15553    }
15554  }
15555
15556  protected void composeListResource(Complex parent, String parentType, String name, ListResource element, int index) {
15557    if (element == null) 
15558      return;
15559    Complex t;
15560    if (Utilities.noString(parentType))
15561      t = parent;
15562    else {
15563      t = parent.predicate("fhir:"+parentType+'.'+name);
15564    }
15565    composeDomainResource(t, "List", name, element, index);
15566    for (int i = 0; i < element.getIdentifier().size(); i++) {
15567      composeIdentifier(t, "ListResource", "identifier", element.getIdentifier().get(i), i);
15568    }
15569    if (element.hasStatusElement()) {
15570      composeEnum(t, "ListResource", "status", element.getStatusElement(), -1);
15571    }
15572    if (element.hasModeElement()) {
15573      composeEnum(t, "ListResource", "mode", element.getModeElement(), -1);
15574    }
15575    if (element.hasTitleElement()) {
15576      composeString(t, "ListResource", "title", element.getTitleElement(), -1);
15577    }
15578    if (element.hasCode()) {
15579      composeCodeableConcept(t, "ListResource", "code", element.getCode(), -1);
15580    }
15581    if (element.hasSubject()) {
15582      composeReference(t, "ListResource", "subject", element.getSubject(), -1);
15583    }
15584    if (element.hasEncounter()) {
15585      composeReference(t, "ListResource", "encounter", element.getEncounter(), -1);
15586    }
15587    if (element.hasDateElement()) {
15588      composeDateTime(t, "ListResource", "date", element.getDateElement(), -1);
15589    }
15590    if (element.hasSource()) {
15591      composeReference(t, "ListResource", "source", element.getSource(), -1);
15592    }
15593    if (element.hasOrderedBy()) {
15594      composeCodeableConcept(t, "ListResource", "orderedBy", element.getOrderedBy(), -1);
15595    }
15596    for (int i = 0; i < element.getNote().size(); i++) {
15597      composeAnnotation(t, "ListResource", "note", element.getNote().get(i), i);
15598    }
15599    for (int i = 0; i < element.getEntry().size(); i++) {
15600      composeListResourceEntryComponent(t, "ListResource", "entry", element.getEntry().get(i), i);
15601    }
15602    if (element.hasEmptyReason()) {
15603      composeCodeableConcept(t, "ListResource", "emptyReason", element.getEmptyReason(), -1);
15604    }
15605  }
15606
15607  protected void composeListResourceEntryComponent(Complex parent, String parentType, String name, ListResource.ListResourceEntryComponent element, int index) {
15608    if (element == null) 
15609      return;
15610    Complex t;
15611    if (Utilities.noString(parentType))
15612      t = parent;
15613    else {
15614      t = parent.predicate("fhir:"+parentType+'.'+name);
15615    }
15616    composeBackboneElement(t, "entry", name, element, index);
15617    if (element.hasFlag()) {
15618      composeCodeableConcept(t, "ListResourceEntryComponent", "flag", element.getFlag(), -1);
15619    }
15620    if (element.hasDeletedElement()) {
15621      composeBoolean(t, "ListResourceEntryComponent", "deleted", element.getDeletedElement(), -1);
15622    }
15623    if (element.hasDateElement()) {
15624      composeDateTime(t, "ListResourceEntryComponent", "date", element.getDateElement(), -1);
15625    }
15626    if (element.hasItem()) {
15627      composeReference(t, "ListResourceEntryComponent", "item", element.getItem(), -1);
15628    }
15629  }
15630
15631  protected void composeLocation(Complex parent, String parentType, String name, Location element, int index) {
15632    if (element == null) 
15633      return;
15634    Complex t;
15635    if (Utilities.noString(parentType))
15636      t = parent;
15637    else {
15638      t = parent.predicate("fhir:"+parentType+'.'+name);
15639    }
15640    composeDomainResource(t, "Location", name, element, index);
15641    for (int i = 0; i < element.getIdentifier().size(); i++) {
15642      composeIdentifier(t, "Location", "identifier", element.getIdentifier().get(i), i);
15643    }
15644    if (element.hasStatusElement()) {
15645      composeEnum(t, "Location", "status", element.getStatusElement(), -1);
15646    }
15647    if (element.hasOperationalStatus()) {
15648      composeCoding(t, "Location", "operationalStatus", element.getOperationalStatus(), -1);
15649    }
15650    if (element.hasNameElement()) {
15651      composeString(t, "Location", "name", element.getNameElement(), -1);
15652    }
15653    for (int i = 0; i < element.getAlias().size(); i++) {
15654      composeString(t, "Location", "alias", element.getAlias().get(i), i);
15655    }
15656    if (element.hasDescriptionElement()) {
15657      composeString(t, "Location", "description", element.getDescriptionElement(), -1);
15658    }
15659    if (element.hasModeElement()) {
15660      composeEnum(t, "Location", "mode", element.getModeElement(), -1);
15661    }
15662    for (int i = 0; i < element.getType().size(); i++) {
15663      composeCodeableConcept(t, "Location", "type", element.getType().get(i), i);
15664    }
15665    for (int i = 0; i < element.getContact().size(); i++) {
15666      composeExtendedContactDetail(t, "Location", "contact", element.getContact().get(i), i);
15667    }
15668    if (element.hasAddress()) {
15669      composeAddress(t, "Location", "address", element.getAddress(), -1);
15670    }
15671    if (element.hasForm()) {
15672      composeCodeableConcept(t, "Location", "form", element.getForm(), -1);
15673    }
15674    if (element.hasPosition()) {
15675      composeLocationPositionComponent(t, "Location", "position", element.getPosition(), -1);
15676    }
15677    if (element.hasManagingOrganization()) {
15678      composeReference(t, "Location", "managingOrganization", element.getManagingOrganization(), -1);
15679    }
15680    if (element.hasPartOf()) {
15681      composeReference(t, "Location", "partOf", element.getPartOf(), -1);
15682    }
15683    for (int i = 0; i < element.getCharacteristic().size(); i++) {
15684      composeCodeableConcept(t, "Location", "characteristic", element.getCharacteristic().get(i), i);
15685    }
15686    for (int i = 0; i < element.getHoursOfOperation().size(); i++) {
15687      composeAvailability(t, "Location", "hoursOfOperation", element.getHoursOfOperation().get(i), i);
15688    }
15689    for (int i = 0; i < element.getVirtualService().size(); i++) {
15690      composeVirtualServiceDetail(t, "Location", "virtualService", element.getVirtualService().get(i), i);
15691    }
15692    for (int i = 0; i < element.getEndpoint().size(); i++) {
15693      composeReference(t, "Location", "endpoint", element.getEndpoint().get(i), i);
15694    }
15695  }
15696
15697  protected void composeLocationPositionComponent(Complex parent, String parentType, String name, Location.LocationPositionComponent element, int index) {
15698    if (element == null) 
15699      return;
15700    Complex t;
15701    if (Utilities.noString(parentType))
15702      t = parent;
15703    else {
15704      t = parent.predicate("fhir:"+parentType+'.'+name);
15705    }
15706    composeBackboneElement(t, "position", name, element, index);
15707    if (element.hasLongitudeElement()) {
15708      composeDecimal(t, "LocationPositionComponent", "longitude", element.getLongitudeElement(), -1);
15709    }
15710    if (element.hasLatitudeElement()) {
15711      composeDecimal(t, "LocationPositionComponent", "latitude", element.getLatitudeElement(), -1);
15712    }
15713    if (element.hasAltitudeElement()) {
15714      composeDecimal(t, "LocationPositionComponent", "altitude", element.getAltitudeElement(), -1);
15715    }
15716  }
15717
15718  protected void composeManufacturedItemDefinition(Complex parent, String parentType, String name, ManufacturedItemDefinition element, int index) {
15719    if (element == null) 
15720      return;
15721    Complex t;
15722    if (Utilities.noString(parentType))
15723      t = parent;
15724    else {
15725      t = parent.predicate("fhir:"+parentType+'.'+name);
15726    }
15727    composeDomainResource(t, "ManufacturedItemDefinition", name, element, index);
15728    for (int i = 0; i < element.getIdentifier().size(); i++) {
15729      composeIdentifier(t, "ManufacturedItemDefinition", "identifier", element.getIdentifier().get(i), i);
15730    }
15731    if (element.hasStatusElement()) {
15732      composeEnum(t, "ManufacturedItemDefinition", "status", element.getStatusElement(), -1);
15733    }
15734    if (element.hasNameElement()) {
15735      composeString(t, "ManufacturedItemDefinition", "name", element.getNameElement(), -1);
15736    }
15737    if (element.hasManufacturedDoseForm()) {
15738      composeCodeableConcept(t, "ManufacturedItemDefinition", "manufacturedDoseForm", element.getManufacturedDoseForm(), -1);
15739    }
15740    if (element.hasUnitOfPresentation()) {
15741      composeCodeableConcept(t, "ManufacturedItemDefinition", "unitOfPresentation", element.getUnitOfPresentation(), -1);
15742    }
15743    for (int i = 0; i < element.getManufacturer().size(); i++) {
15744      composeReference(t, "ManufacturedItemDefinition", "manufacturer", element.getManufacturer().get(i), i);
15745    }
15746    for (int i = 0; i < element.getMarketingStatus().size(); i++) {
15747      composeMarketingStatus(t, "ManufacturedItemDefinition", "marketingStatus", element.getMarketingStatus().get(i), i);
15748    }
15749    for (int i = 0; i < element.getIngredient().size(); i++) {
15750      composeCodeableConcept(t, "ManufacturedItemDefinition", "ingredient", element.getIngredient().get(i), i);
15751    }
15752    for (int i = 0; i < element.getProperty().size(); i++) {
15753      composeManufacturedItemDefinitionPropertyComponent(t, "ManufacturedItemDefinition", "property", element.getProperty().get(i), i);
15754    }
15755    for (int i = 0; i < element.getComponent().size(); i++) {
15756      composeManufacturedItemDefinitionComponentComponent(t, "ManufacturedItemDefinition", "component", element.getComponent().get(i), i);
15757    }
15758  }
15759
15760  protected void composeManufacturedItemDefinitionPropertyComponent(Complex parent, String parentType, String name, ManufacturedItemDefinition.ManufacturedItemDefinitionPropertyComponent element, int index) {
15761    if (element == null) 
15762      return;
15763    Complex t;
15764    if (Utilities.noString(parentType))
15765      t = parent;
15766    else {
15767      t = parent.predicate("fhir:"+parentType+'.'+name);
15768    }
15769    composeBackboneElement(t, "property", name, element, index);
15770    if (element.hasType()) {
15771      composeCodeableConcept(t, "ManufacturedItemDefinitionPropertyComponent", "type", element.getType(), -1);
15772    }
15773    if (element.hasValue()) {
15774      composeType(t, "ManufacturedItemDefinitionPropertyComponent", "value", element.getValue(), -1);
15775    }
15776  }
15777
15778  protected void composeManufacturedItemDefinitionComponentComponent(Complex parent, String parentType, String name, ManufacturedItemDefinition.ManufacturedItemDefinitionComponentComponent element, int index) {
15779    if (element == null) 
15780      return;
15781    Complex t;
15782    if (Utilities.noString(parentType))
15783      t = parent;
15784    else {
15785      t = parent.predicate("fhir:"+parentType+'.'+name);
15786    }
15787    composeBackboneElement(t, "component", name, element, index);
15788    if (element.hasType()) {
15789      composeCodeableConcept(t, "ManufacturedItemDefinitionComponentComponent", "type", element.getType(), -1);
15790    }
15791    for (int i = 0; i < element.getFunction().size(); i++) {
15792      composeCodeableConcept(t, "ManufacturedItemDefinitionComponentComponent", "function", element.getFunction().get(i), i);
15793    }
15794    for (int i = 0; i < element.getAmount().size(); i++) {
15795      composeQuantity(t, "ManufacturedItemDefinitionComponentComponent", "amount", element.getAmount().get(i), i);
15796    }
15797    for (int i = 0; i < element.getConstituent().size(); i++) {
15798      composeManufacturedItemDefinitionComponentConstituentComponent(t, "ManufacturedItemDefinitionComponentComponent", "constituent", element.getConstituent().get(i), i);
15799    }
15800    for (int i = 0; i < element.getProperty().size(); i++) {
15801      composeManufacturedItemDefinitionPropertyComponent(t, "ManufacturedItemDefinitionComponentComponent", "property", element.getProperty().get(i), i);
15802    }
15803    for (int i = 0; i < element.getComponent().size(); i++) {
15804      composeManufacturedItemDefinitionComponentComponent(t, "ManufacturedItemDefinitionComponentComponent", "component", element.getComponent().get(i), i);
15805    }
15806  }
15807
15808  protected void composeManufacturedItemDefinitionComponentConstituentComponent(Complex parent, String parentType, String name, ManufacturedItemDefinition.ManufacturedItemDefinitionComponentConstituentComponent element, int index) {
15809    if (element == null) 
15810      return;
15811    Complex t;
15812    if (Utilities.noString(parentType))
15813      t = parent;
15814    else {
15815      t = parent.predicate("fhir:"+parentType+'.'+name);
15816    }
15817    composeBackboneElement(t, "constituent", name, element, index);
15818    for (int i = 0; i < element.getAmount().size(); i++) {
15819      composeQuantity(t, "ManufacturedItemDefinitionComponentConstituentComponent", "amount", element.getAmount().get(i), i);
15820    }
15821    for (int i = 0; i < element.getLocation().size(); i++) {
15822      composeCodeableConcept(t, "ManufacturedItemDefinitionComponentConstituentComponent", "location", element.getLocation().get(i), i);
15823    }
15824    for (int i = 0; i < element.getFunction().size(); i++) {
15825      composeCodeableConcept(t, "ManufacturedItemDefinitionComponentConstituentComponent", "function", element.getFunction().get(i), i);
15826    }
15827    for (int i = 0; i < element.getHasIngredient().size(); i++) {
15828      composeCodeableReference(t, "ManufacturedItemDefinitionComponentConstituentComponent", "hasIngredient", element.getHasIngredient().get(i), i);
15829    }
15830  }
15831
15832  protected void composeMeasure(Complex parent, String parentType, String name, Measure element, int index) {
15833    if (element == null) 
15834      return;
15835    Complex t;
15836    if (Utilities.noString(parentType))
15837      t = parent;
15838    else {
15839      t = parent.predicate("fhir:"+parentType+'.'+name);
15840    }
15841    composeMetadataResource(t, "Measure", name, element, index);
15842    if (element.hasUrlElement()) {
15843      composeUri(t, "Measure", "url", element.getUrlElement(), -1);
15844    }
15845    for (int i = 0; i < element.getIdentifier().size(); i++) {
15846      composeIdentifier(t, "Measure", "identifier", element.getIdentifier().get(i), i);
15847    }
15848    if (element.hasVersionElement()) {
15849      composeString(t, "Measure", "version", element.getVersionElement(), -1);
15850    }
15851    if (element.hasNameElement()) {
15852      composeString(t, "Measure", "name", element.getNameElement(), -1);
15853    }
15854    if (element.hasTitleElement()) {
15855      composeString(t, "Measure", "title", element.getTitleElement(), -1);
15856    }
15857    if (element.hasSubtitleElement()) {
15858      composeString(t, "Measure", "subtitle", element.getSubtitleElement(), -1);
15859    }
15860    if (element.hasStatusElement()) {
15861      composeEnum(t, "Measure", "status", element.getStatusElement(), -1);
15862    }
15863    if (element.hasExperimentalElement()) {
15864      composeBoolean(t, "Measure", "experimental", element.getExperimentalElement(), -1);
15865    }
15866    if (element.hasSubject()) {
15867      composeType(t, "Measure", "subject", element.getSubject(), -1);
15868    }
15869    if (element.hasBasisElement()) {
15870      composeEnum(t, "Measure", "basis", element.getBasisElement(), -1);
15871    }
15872    if (element.hasDateElement()) {
15873      composeDateTime(t, "Measure", "date", element.getDateElement(), -1);
15874    }
15875    if (element.hasPublisherElement()) {
15876      composeString(t, "Measure", "publisher", element.getPublisherElement(), -1);
15877    }
15878    for (int i = 0; i < element.getContact().size(); i++) {
15879      composeContactDetail(t, "Measure", "contact", element.getContact().get(i), i);
15880    }
15881    if (element.hasDescriptionElement()) {
15882      composeMarkdown(t, "Measure", "description", element.getDescriptionElement(), -1);
15883    }
15884    for (int i = 0; i < element.getUseContext().size(); i++) {
15885      composeUsageContext(t, "Measure", "useContext", element.getUseContext().get(i), i);
15886    }
15887    for (int i = 0; i < element.getJurisdiction().size(); i++) {
15888      composeCodeableConcept(t, "Measure", "jurisdiction", element.getJurisdiction().get(i), i);
15889    }
15890    if (element.hasPurposeElement()) {
15891      composeMarkdown(t, "Measure", "purpose", element.getPurposeElement(), -1);
15892    }
15893    if (element.hasUsageElement()) {
15894      composeString(t, "Measure", "usage", element.getUsageElement(), -1);
15895    }
15896    if (element.hasCopyrightElement()) {
15897      composeMarkdown(t, "Measure", "copyright", element.getCopyrightElement(), -1);
15898    }
15899    if (element.hasApprovalDateElement()) {
15900      composeDate(t, "Measure", "approvalDate", element.getApprovalDateElement(), -1);
15901    }
15902    if (element.hasLastReviewDateElement()) {
15903      composeDate(t, "Measure", "lastReviewDate", element.getLastReviewDateElement(), -1);
15904    }
15905    if (element.hasEffectivePeriod()) {
15906      composePeriod(t, "Measure", "effectivePeriod", element.getEffectivePeriod(), -1);
15907    }
15908    for (int i = 0; i < element.getTopic().size(); i++) {
15909      composeCodeableConcept(t, "Measure", "topic", element.getTopic().get(i), i);
15910    }
15911    for (int i = 0; i < element.getAuthor().size(); i++) {
15912      composeContactDetail(t, "Measure", "author", element.getAuthor().get(i), i);
15913    }
15914    for (int i = 0; i < element.getEditor().size(); i++) {
15915      composeContactDetail(t, "Measure", "editor", element.getEditor().get(i), i);
15916    }
15917    for (int i = 0; i < element.getReviewer().size(); i++) {
15918      composeContactDetail(t, "Measure", "reviewer", element.getReviewer().get(i), i);
15919    }
15920    for (int i = 0; i < element.getEndorser().size(); i++) {
15921      composeContactDetail(t, "Measure", "endorser", element.getEndorser().get(i), i);
15922    }
15923    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
15924      composeRelatedArtifact(t, "Measure", "relatedArtifact", element.getRelatedArtifact().get(i), i);
15925    }
15926    for (int i = 0; i < element.getLibrary().size(); i++) {
15927      composeCanonical(t, "Measure", "library", element.getLibrary().get(i), i);
15928    }
15929    if (element.hasDisclaimerElement()) {
15930      composeMarkdown(t, "Measure", "disclaimer", element.getDisclaimerElement(), -1);
15931    }
15932    if (element.hasScoring()) {
15933      composeCodeableConcept(t, "Measure", "scoring", element.getScoring(), -1);
15934    }
15935    if (element.hasScoringUnit()) {
15936      composeCodeableConcept(t, "Measure", "scoringUnit", element.getScoringUnit(), -1);
15937    }
15938    if (element.hasCompositeScoring()) {
15939      composeCodeableConcept(t, "Measure", "compositeScoring", element.getCompositeScoring(), -1);
15940    }
15941    for (int i = 0; i < element.getType().size(); i++) {
15942      composeCodeableConcept(t, "Measure", "type", element.getType().get(i), i);
15943    }
15944    if (element.hasRiskAdjustmentElement()) {
15945      composeString(t, "Measure", "riskAdjustment", element.getRiskAdjustmentElement(), -1);
15946    }
15947    if (element.hasRateAggregationElement()) {
15948      composeString(t, "Measure", "rateAggregation", element.getRateAggregationElement(), -1);
15949    }
15950    if (element.hasRationaleElement()) {
15951      composeMarkdown(t, "Measure", "rationale", element.getRationaleElement(), -1);
15952    }
15953    if (element.hasClinicalRecommendationStatementElement()) {
15954      composeMarkdown(t, "Measure", "clinicalRecommendationStatement", element.getClinicalRecommendationStatementElement(), -1);
15955    }
15956    if (element.hasImprovementNotation()) {
15957      composeCodeableConcept(t, "Measure", "improvementNotation", element.getImprovementNotation(), -1);
15958    }
15959    for (int i = 0; i < element.getTerm().size(); i++) {
15960      composeMeasureTermComponent(t, "Measure", "term", element.getTerm().get(i), i);
15961    }
15962    if (element.hasGuidanceElement()) {
15963      composeMarkdown(t, "Measure", "guidance", element.getGuidanceElement(), -1);
15964    }
15965    for (int i = 0; i < element.getGroup().size(); i++) {
15966      composeMeasureGroupComponent(t, "Measure", "group", element.getGroup().get(i), i);
15967    }
15968    for (int i = 0; i < element.getSupplementalData().size(); i++) {
15969      composeMeasureSupplementalDataComponent(t, "Measure", "supplementalData", element.getSupplementalData().get(i), i);
15970    }
15971  }
15972
15973  protected void composeMeasureTermComponent(Complex parent, String parentType, String name, Measure.MeasureTermComponent element, int index) {
15974    if (element == null) 
15975      return;
15976    Complex t;
15977    if (Utilities.noString(parentType))
15978      t = parent;
15979    else {
15980      t = parent.predicate("fhir:"+parentType+'.'+name);
15981    }
15982    composeBackboneElement(t, "term", name, element, index);
15983    if (element.hasCode()) {
15984      composeCodeableConcept(t, "MeasureTermComponent", "code", element.getCode(), -1);
15985    }
15986    if (element.hasDefinitionElement()) {
15987      composeMarkdown(t, "MeasureTermComponent", "definition", element.getDefinitionElement(), -1);
15988    }
15989  }
15990
15991  protected void composeMeasureGroupComponent(Complex parent, String parentType, String name, Measure.MeasureGroupComponent element, int index) {
15992    if (element == null) 
15993      return;
15994    Complex t;
15995    if (Utilities.noString(parentType))
15996      t = parent;
15997    else {
15998      t = parent.predicate("fhir:"+parentType+'.'+name);
15999    }
16000    composeBackboneElement(t, "group", name, element, index);
16001    if (element.hasCode()) {
16002      composeCodeableConcept(t, "MeasureGroupComponent", "code", element.getCode(), -1);
16003    }
16004    if (element.hasDescriptionElement()) {
16005      composeString(t, "MeasureGroupComponent", "description", element.getDescriptionElement(), -1);
16006    }
16007    for (int i = 0; i < element.getType().size(); i++) {
16008      composeCodeableConcept(t, "MeasureGroupComponent", "type", element.getType().get(i), i);
16009    }
16010    if (element.hasBasisElement()) {
16011      composeEnum(t, "MeasureGroupComponent", "basis", element.getBasisElement(), -1);
16012    }
16013    if (element.hasScoring()) {
16014      composeCodeableConcept(t, "MeasureGroupComponent", "scoring", element.getScoring(), -1);
16015    }
16016    if (element.hasScoringUnit()) {
16017      composeCodeableConcept(t, "MeasureGroupComponent", "scoringUnit", element.getScoringUnit(), -1);
16018    }
16019    if (element.hasImprovementNotation()) {
16020      composeCodeableConcept(t, "MeasureGroupComponent", "improvementNotation", element.getImprovementNotation(), -1);
16021    }
16022    for (int i = 0; i < element.getPopulation().size(); i++) {
16023      composeMeasureGroupPopulationComponent(t, "MeasureGroupComponent", "population", element.getPopulation().get(i), i);
16024    }
16025    for (int i = 0; i < element.getStratifier().size(); i++) {
16026      composeMeasureGroupStratifierComponent(t, "MeasureGroupComponent", "stratifier", element.getStratifier().get(i), i);
16027    }
16028  }
16029
16030  protected void composeMeasureGroupPopulationComponent(Complex parent, String parentType, String name, Measure.MeasureGroupPopulationComponent element, int index) {
16031    if (element == null) 
16032      return;
16033    Complex t;
16034    if (Utilities.noString(parentType))
16035      t = parent;
16036    else {
16037      t = parent.predicate("fhir:"+parentType+'.'+name);
16038    }
16039    composeBackboneElement(t, "population", name, element, index);
16040    if (element.hasCode()) {
16041      composeCodeableConcept(t, "MeasureGroupPopulationComponent", "code", element.getCode(), -1);
16042    }
16043    if (element.hasDescriptionElement()) {
16044      composeString(t, "MeasureGroupPopulationComponent", "description", element.getDescriptionElement(), -1);
16045    }
16046    if (element.hasCriteria()) {
16047      composeExpression(t, "MeasureGroupPopulationComponent", "criteria", element.getCriteria(), -1);
16048    }
16049    if (element.hasInputPopulationIdElement()) {
16050      composeString(t, "MeasureGroupPopulationComponent", "inputPopulationId", element.getInputPopulationIdElement(), -1);
16051    }
16052    if (element.hasAggregateMethod()) {
16053      composeCodeableConcept(t, "MeasureGroupPopulationComponent", "aggregateMethod", element.getAggregateMethod(), -1);
16054    }
16055  }
16056
16057  protected void composeMeasureGroupStratifierComponent(Complex parent, String parentType, String name, Measure.MeasureGroupStratifierComponent element, int index) {
16058    if (element == null) 
16059      return;
16060    Complex t;
16061    if (Utilities.noString(parentType))
16062      t = parent;
16063    else {
16064      t = parent.predicate("fhir:"+parentType+'.'+name);
16065    }
16066    composeBackboneElement(t, "stratifier", name, element, index);
16067    if (element.hasCode()) {
16068      composeCodeableConcept(t, "MeasureGroupStratifierComponent", "code", element.getCode(), -1);
16069    }
16070    if (element.hasDescriptionElement()) {
16071      composeString(t, "MeasureGroupStratifierComponent", "description", element.getDescriptionElement(), -1);
16072    }
16073    if (element.hasCriteria()) {
16074      composeExpression(t, "MeasureGroupStratifierComponent", "criteria", element.getCriteria(), -1);
16075    }
16076    for (int i = 0; i < element.getComponent().size(); i++) {
16077      composeMeasureGroupStratifierComponentComponent(t, "MeasureGroupStratifierComponent", "component", element.getComponent().get(i), i);
16078    }
16079  }
16080
16081  protected void composeMeasureGroupStratifierComponentComponent(Complex parent, String parentType, String name, Measure.MeasureGroupStratifierComponentComponent element, int index) {
16082    if (element == null) 
16083      return;
16084    Complex t;
16085    if (Utilities.noString(parentType))
16086      t = parent;
16087    else {
16088      t = parent.predicate("fhir:"+parentType+'.'+name);
16089    }
16090    composeBackboneElement(t, "component", name, element, index);
16091    if (element.hasCode()) {
16092      composeCodeableConcept(t, "MeasureGroupStratifierComponentComponent", "code", element.getCode(), -1);
16093    }
16094    if (element.hasDescriptionElement()) {
16095      composeString(t, "MeasureGroupStratifierComponentComponent", "description", element.getDescriptionElement(), -1);
16096    }
16097    if (element.hasCriteria()) {
16098      composeExpression(t, "MeasureGroupStratifierComponentComponent", "criteria", element.getCriteria(), -1);
16099    }
16100  }
16101
16102  protected void composeMeasureSupplementalDataComponent(Complex parent, String parentType, String name, Measure.MeasureSupplementalDataComponent element, int index) {
16103    if (element == null) 
16104      return;
16105    Complex t;
16106    if (Utilities.noString(parentType))
16107      t = parent;
16108    else {
16109      t = parent.predicate("fhir:"+parentType+'.'+name);
16110    }
16111    composeBackboneElement(t, "supplementalData", name, element, index);
16112    if (element.hasCode()) {
16113      composeCodeableConcept(t, "MeasureSupplementalDataComponent", "code", element.getCode(), -1);
16114    }
16115    for (int i = 0; i < element.getUsage().size(); i++) {
16116      composeCodeableConcept(t, "MeasureSupplementalDataComponent", "usage", element.getUsage().get(i), i);
16117    }
16118    if (element.hasDescriptionElement()) {
16119      composeString(t, "MeasureSupplementalDataComponent", "description", element.getDescriptionElement(), -1);
16120    }
16121    if (element.hasCriteria()) {
16122      composeExpression(t, "MeasureSupplementalDataComponent", "criteria", element.getCriteria(), -1);
16123    }
16124  }
16125
16126  protected void composeMeasureReport(Complex parent, String parentType, String name, MeasureReport element, int index) {
16127    if (element == null) 
16128      return;
16129    Complex t;
16130    if (Utilities.noString(parentType))
16131      t = parent;
16132    else {
16133      t = parent.predicate("fhir:"+parentType+'.'+name);
16134    }
16135    composeDomainResource(t, "MeasureReport", name, element, index);
16136    for (int i = 0; i < element.getIdentifier().size(); i++) {
16137      composeIdentifier(t, "MeasureReport", "identifier", element.getIdentifier().get(i), i);
16138    }
16139    if (element.hasStatusElement()) {
16140      composeEnum(t, "MeasureReport", "status", element.getStatusElement(), -1);
16141    }
16142    if (element.hasTypeElement()) {
16143      composeEnum(t, "MeasureReport", "type", element.getTypeElement(), -1);
16144    }
16145    if (element.hasDataUpdateTypeElement()) {
16146      composeEnum(t, "MeasureReport", "dataUpdateType", element.getDataUpdateTypeElement(), -1);
16147    }
16148    if (element.hasMeasureElement()) {
16149      composeCanonical(t, "MeasureReport", "measure", element.getMeasureElement(), -1);
16150    }
16151    if (element.hasSubject()) {
16152      composeReference(t, "MeasureReport", "subject", element.getSubject(), -1);
16153    }
16154    if (element.hasDateElement()) {
16155      composeDateTime(t, "MeasureReport", "date", element.getDateElement(), -1);
16156    }
16157    if (element.hasReporter()) {
16158      composeReference(t, "MeasureReport", "reporter", element.getReporter(), -1);
16159    }
16160    if (element.hasReportingVendor()) {
16161      composeReference(t, "MeasureReport", "reportingVendor", element.getReportingVendor(), -1);
16162    }
16163    if (element.hasLocation()) {
16164      composeReference(t, "MeasureReport", "location", element.getLocation(), -1);
16165    }
16166    if (element.hasPeriod()) {
16167      composePeriod(t, "MeasureReport", "period", element.getPeriod(), -1);
16168    }
16169    if (element.hasInputParameters()) {
16170      composeReference(t, "MeasureReport", "inputParameters", element.getInputParameters(), -1);
16171    }
16172    if (element.hasScoring()) {
16173      composeCodeableConcept(t, "MeasureReport", "scoring", element.getScoring(), -1);
16174    }
16175    if (element.hasImprovementNotation()) {
16176      composeCodeableConcept(t, "MeasureReport", "improvementNotation", element.getImprovementNotation(), -1);
16177    }
16178    for (int i = 0; i < element.getGroup().size(); i++) {
16179      composeMeasureReportGroupComponent(t, "MeasureReport", "group", element.getGroup().get(i), i);
16180    }
16181    for (int i = 0; i < element.getEvaluatedResource().size(); i++) {
16182      composeReference(t, "MeasureReport", "evaluatedResource", element.getEvaluatedResource().get(i), i);
16183    }
16184  }
16185
16186  protected void composeMeasureReportGroupComponent(Complex parent, String parentType, String name, MeasureReport.MeasureReportGroupComponent element, int index) {
16187    if (element == null) 
16188      return;
16189    Complex t;
16190    if (Utilities.noString(parentType))
16191      t = parent;
16192    else {
16193      t = parent.predicate("fhir:"+parentType+'.'+name);
16194    }
16195    composeBackboneElement(t, "group", name, element, index);
16196    if (element.hasCode()) {
16197      composeCodeableConcept(t, "MeasureReportGroupComponent", "code", element.getCode(), -1);
16198    }
16199    for (int i = 0; i < element.getPopulation().size(); i++) {
16200      composeMeasureReportGroupPopulationComponent(t, "MeasureReportGroupComponent", "population", element.getPopulation().get(i), i);
16201    }
16202    if (element.hasMeasureScore()) {
16203      composeType(t, "MeasureReportGroupComponent", "measureScore", element.getMeasureScore(), -1);
16204    }
16205    for (int i = 0; i < element.getStratifier().size(); i++) {
16206      composeMeasureReportGroupStratifierComponent(t, "MeasureReportGroupComponent", "stratifier", element.getStratifier().get(i), i);
16207    }
16208  }
16209
16210  protected void composeMeasureReportGroupPopulationComponent(Complex parent, String parentType, String name, MeasureReport.MeasureReportGroupPopulationComponent element, int index) {
16211    if (element == null) 
16212      return;
16213    Complex t;
16214    if (Utilities.noString(parentType))
16215      t = parent;
16216    else {
16217      t = parent.predicate("fhir:"+parentType+'.'+name);
16218    }
16219    composeBackboneElement(t, "population", name, element, index);
16220    if (element.hasCode()) {
16221      composeCodeableConcept(t, "MeasureReportGroupPopulationComponent", "code", element.getCode(), -1);
16222    }
16223    if (element.hasCountElement()) {
16224      composeInteger(t, "MeasureReportGroupPopulationComponent", "count", element.getCountElement(), -1);
16225    }
16226    if (element.hasSubjectResults()) {
16227      composeReference(t, "MeasureReportGroupPopulationComponent", "subjectResults", element.getSubjectResults(), -1);
16228    }
16229  }
16230
16231  protected void composeMeasureReportGroupStratifierComponent(Complex parent, String parentType, String name, MeasureReport.MeasureReportGroupStratifierComponent element, int index) {
16232    if (element == null) 
16233      return;
16234    Complex t;
16235    if (Utilities.noString(parentType))
16236      t = parent;
16237    else {
16238      t = parent.predicate("fhir:"+parentType+'.'+name);
16239    }
16240    composeBackboneElement(t, "stratifier", name, element, index);
16241    if (element.hasCode()) {
16242      composeCodeableConcept(t, "MeasureReportGroupStratifierComponent", "code", element.getCode(), -1);
16243    }
16244    for (int i = 0; i < element.getStratum().size(); i++) {
16245      composeMeasureReportStratifierGroupComponent(t, "MeasureReportGroupStratifierComponent", "stratum", element.getStratum().get(i), i);
16246    }
16247  }
16248
16249  protected void composeMeasureReportStratifierGroupComponent(Complex parent, String parentType, String name, MeasureReport.StratifierGroupComponent element, int index) {
16250    if (element == null) 
16251      return;
16252    Complex t;
16253    if (Utilities.noString(parentType))
16254      t = parent;
16255    else {
16256      t = parent.predicate("fhir:"+parentType+'.'+name);
16257    }
16258    composeBackboneElement(t, "stratum", name, element, index);
16259    if (element.hasValue()) {
16260      composeType(t, "StratifierGroupComponent", "value", element.getValue(), -1);
16261    }
16262    for (int i = 0; i < element.getComponent().size(); i++) {
16263      composeMeasureReportStratifierGroupComponentComponent(t, "StratifierGroupComponent", "component", element.getComponent().get(i), i);
16264    }
16265    for (int i = 0; i < element.getPopulation().size(); i++) {
16266      composeMeasureReportStratifierGroupPopulationComponent(t, "StratifierGroupComponent", "population", element.getPopulation().get(i), i);
16267    }
16268    if (element.hasMeasureScore()) {
16269      composeType(t, "StratifierGroupComponent", "measureScore", element.getMeasureScore(), -1);
16270    }
16271  }
16272
16273  protected void composeMeasureReportStratifierGroupComponentComponent(Complex parent, String parentType, String name, MeasureReport.StratifierGroupComponentComponent element, int index) {
16274    if (element == null) 
16275      return;
16276    Complex t;
16277    if (Utilities.noString(parentType))
16278      t = parent;
16279    else {
16280      t = parent.predicate("fhir:"+parentType+'.'+name);
16281    }
16282    composeBackboneElement(t, "component", name, element, index);
16283    if (element.hasCode()) {
16284      composeCodeableConcept(t, "StratifierGroupComponentComponent", "code", element.getCode(), -1);
16285    }
16286    if (element.hasValue()) {
16287      composeType(t, "StratifierGroupComponentComponent", "value", element.getValue(), -1);
16288    }
16289  }
16290
16291  protected void composeMeasureReportStratifierGroupPopulationComponent(Complex parent, String parentType, String name, MeasureReport.StratifierGroupPopulationComponent element, int index) {
16292    if (element == null) 
16293      return;
16294    Complex t;
16295    if (Utilities.noString(parentType))
16296      t = parent;
16297    else {
16298      t = parent.predicate("fhir:"+parentType+'.'+name);
16299    }
16300    composeBackboneElement(t, "population", name, element, index);
16301    if (element.hasCode()) {
16302      composeCodeableConcept(t, "StratifierGroupPopulationComponent", "code", element.getCode(), -1);
16303    }
16304    if (element.hasCountElement()) {
16305      composeInteger(t, "StratifierGroupPopulationComponent", "count", element.getCountElement(), -1);
16306    }
16307    if (element.hasSubjectResults()) {
16308      composeReference(t, "StratifierGroupPopulationComponent", "subjectResults", element.getSubjectResults(), -1);
16309    }
16310  }
16311
16312  protected void composeMedication(Complex parent, String parentType, String name, Medication element, int index) {
16313    if (element == null) 
16314      return;
16315    Complex t;
16316    if (Utilities.noString(parentType))
16317      t = parent;
16318    else {
16319      t = parent.predicate("fhir:"+parentType+'.'+name);
16320    }
16321    composeDomainResource(t, "Medication", name, element, index);
16322    for (int i = 0; i < element.getIdentifier().size(); i++) {
16323      composeIdentifier(t, "Medication", "identifier", element.getIdentifier().get(i), i);
16324    }
16325    if (element.hasCode()) {
16326      composeCodeableConcept(t, "Medication", "code", element.getCode(), -1);
16327    }
16328    if (element.hasStatusElement()) {
16329      composeEnum(t, "Medication", "status", element.getStatusElement(), -1);
16330    }
16331    if (element.hasMarketingAuthorizationHolder()) {
16332      composeReference(t, "Medication", "marketingAuthorizationHolder", element.getMarketingAuthorizationHolder(), -1);
16333    }
16334    if (element.hasDoseForm()) {
16335      composeCodeableConcept(t, "Medication", "doseForm", element.getDoseForm(), -1);
16336    }
16337    if (element.hasTotalVolume()) {
16338      composeRatio(t, "Medication", "totalVolume", element.getTotalVolume(), -1);
16339    }
16340    for (int i = 0; i < element.getIngredient().size(); i++) {
16341      composeMedicationIngredientComponent(t, "Medication", "ingredient", element.getIngredient().get(i), i);
16342    }
16343    if (element.hasBatch()) {
16344      composeMedicationBatchComponent(t, "Medication", "batch", element.getBatch(), -1);
16345    }
16346  }
16347
16348  protected void composeMedicationIngredientComponent(Complex parent, String parentType, String name, Medication.MedicationIngredientComponent element, int index) {
16349    if (element == null) 
16350      return;
16351    Complex t;
16352    if (Utilities.noString(parentType))
16353      t = parent;
16354    else {
16355      t = parent.predicate("fhir:"+parentType+'.'+name);
16356    }
16357    composeBackboneElement(t, "ingredient", name, element, index);
16358    if (element.hasItem()) {
16359      composeCodeableReference(t, "MedicationIngredientComponent", "item", element.getItem(), -1);
16360    }
16361    if (element.hasIsActiveElement()) {
16362      composeBoolean(t, "MedicationIngredientComponent", "isActive", element.getIsActiveElement(), -1);
16363    }
16364    if (element.hasStrength()) {
16365      composeType(t, "MedicationIngredientComponent", "strength", element.getStrength(), -1);
16366    }
16367  }
16368
16369  protected void composeMedicationBatchComponent(Complex parent, String parentType, String name, Medication.MedicationBatchComponent element, int index) {
16370    if (element == null) 
16371      return;
16372    Complex t;
16373    if (Utilities.noString(parentType))
16374      t = parent;
16375    else {
16376      t = parent.predicate("fhir:"+parentType+'.'+name);
16377    }
16378    composeBackboneElement(t, "batch", name, element, index);
16379    if (element.hasLotNumberElement()) {
16380      composeString(t, "MedicationBatchComponent", "lotNumber", element.getLotNumberElement(), -1);
16381    }
16382    if (element.hasExpirationDateElement()) {
16383      composeDateTime(t, "MedicationBatchComponent", "expirationDate", element.getExpirationDateElement(), -1);
16384    }
16385  }
16386
16387  protected void composeMedicationAdministration(Complex parent, String parentType, String name, MedicationAdministration element, int index) {
16388    if (element == null) 
16389      return;
16390    Complex t;
16391    if (Utilities.noString(parentType))
16392      t = parent;
16393    else {
16394      t = parent.predicate("fhir:"+parentType+'.'+name);
16395    }
16396    composeDomainResource(t, "MedicationAdministration", name, element, index);
16397    for (int i = 0; i < element.getIdentifier().size(); i++) {
16398      composeIdentifier(t, "MedicationAdministration", "identifier", element.getIdentifier().get(i), i);
16399    }
16400    for (int i = 0; i < element.getBasedOn().size(); i++) {
16401      composeReference(t, "MedicationAdministration", "basedOn", element.getBasedOn().get(i), i);
16402    }
16403    for (int i = 0; i < element.getPartOf().size(); i++) {
16404      composeReference(t, "MedicationAdministration", "partOf", element.getPartOf().get(i), i);
16405    }
16406    if (element.hasStatusElement()) {
16407      composeEnum(t, "MedicationAdministration", "status", element.getStatusElement(), -1);
16408    }
16409    for (int i = 0; i < element.getStatusReason().size(); i++) {
16410      composeCodeableConcept(t, "MedicationAdministration", "statusReason", element.getStatusReason().get(i), i);
16411    }
16412    for (int i = 0; i < element.getCategory().size(); i++) {
16413      composeCodeableConcept(t, "MedicationAdministration", "category", element.getCategory().get(i), i);
16414    }
16415    if (element.hasMedication()) {
16416      composeCodeableReference(t, "MedicationAdministration", "medication", element.getMedication(), -1);
16417    }
16418    if (element.hasSubject()) {
16419      composeReference(t, "MedicationAdministration", "subject", element.getSubject(), -1);
16420    }
16421    if (element.hasEncounter()) {
16422      composeReference(t, "MedicationAdministration", "encounter", element.getEncounter(), -1);
16423    }
16424    for (int i = 0; i < element.getSupportingInformation().size(); i++) {
16425      composeReference(t, "MedicationAdministration", "supportingInformation", element.getSupportingInformation().get(i), i);
16426    }
16427    if (element.hasOccurence()) {
16428      composeType(t, "MedicationAdministration", "occurence", element.getOccurence(), -1);
16429    }
16430    if (element.hasRecordedElement()) {
16431      composeDateTime(t, "MedicationAdministration", "recorded", element.getRecordedElement(), -1);
16432    }
16433    if (element.hasIsSubPotentElement()) {
16434      composeBoolean(t, "MedicationAdministration", "isSubPotent", element.getIsSubPotentElement(), -1);
16435    }
16436    for (int i = 0; i < element.getSubPotentReason().size(); i++) {
16437      composeCodeableConcept(t, "MedicationAdministration", "subPotentReason", element.getSubPotentReason().get(i), i);
16438    }
16439    for (int i = 0; i < element.getPerformer().size(); i++) {
16440      composeMedicationAdministrationPerformerComponent(t, "MedicationAdministration", "performer", element.getPerformer().get(i), i);
16441    }
16442    for (int i = 0; i < element.getReason().size(); i++) {
16443      composeCodeableReference(t, "MedicationAdministration", "reason", element.getReason().get(i), i);
16444    }
16445    if (element.hasRequest()) {
16446      composeReference(t, "MedicationAdministration", "request", element.getRequest(), -1);
16447    }
16448    for (int i = 0; i < element.getDevice().size(); i++) {
16449      composeReference(t, "MedicationAdministration", "device", element.getDevice().get(i), i);
16450    }
16451    for (int i = 0; i < element.getNote().size(); i++) {
16452      composeAnnotation(t, "MedicationAdministration", "note", element.getNote().get(i), i);
16453    }
16454    if (element.hasDosage()) {
16455      composeMedicationAdministrationDosageComponent(t, "MedicationAdministration", "dosage", element.getDosage(), -1);
16456    }
16457    for (int i = 0; i < element.getEventHistory().size(); i++) {
16458      composeReference(t, "MedicationAdministration", "eventHistory", element.getEventHistory().get(i), i);
16459    }
16460  }
16461
16462  protected void composeMedicationAdministrationPerformerComponent(Complex parent, String parentType, String name, MedicationAdministration.MedicationAdministrationPerformerComponent element, int index) {
16463    if (element == null) 
16464      return;
16465    Complex t;
16466    if (Utilities.noString(parentType))
16467      t = parent;
16468    else {
16469      t = parent.predicate("fhir:"+parentType+'.'+name);
16470    }
16471    composeBackboneElement(t, "performer", name, element, index);
16472    if (element.hasFunction()) {
16473      composeCodeableConcept(t, "MedicationAdministrationPerformerComponent", "function", element.getFunction(), -1);
16474    }
16475    if (element.hasActor()) {
16476      composeReference(t, "MedicationAdministrationPerformerComponent", "actor", element.getActor(), -1);
16477    }
16478  }
16479
16480  protected void composeMedicationAdministrationDosageComponent(Complex parent, String parentType, String name, MedicationAdministration.MedicationAdministrationDosageComponent element, int index) {
16481    if (element == null) 
16482      return;
16483    Complex t;
16484    if (Utilities.noString(parentType))
16485      t = parent;
16486    else {
16487      t = parent.predicate("fhir:"+parentType+'.'+name);
16488    }
16489    composeBackboneElement(t, "dosage", name, element, index);
16490    if (element.hasTextElement()) {
16491      composeString(t, "MedicationAdministrationDosageComponent", "text", element.getTextElement(), -1);
16492    }
16493    if (element.hasSite()) {
16494      composeCodeableConcept(t, "MedicationAdministrationDosageComponent", "site", element.getSite(), -1);
16495    }
16496    if (element.hasRoute()) {
16497      composeCodeableConcept(t, "MedicationAdministrationDosageComponent", "route", element.getRoute(), -1);
16498    }
16499    if (element.hasMethod()) {
16500      composeCodeableConcept(t, "MedicationAdministrationDosageComponent", "method", element.getMethod(), -1);
16501    }
16502    if (element.hasDose()) {
16503      composeQuantity(t, "MedicationAdministrationDosageComponent", "dose", element.getDose(), -1);
16504    }
16505    if (element.hasRate()) {
16506      composeType(t, "MedicationAdministrationDosageComponent", "rate", element.getRate(), -1);
16507    }
16508  }
16509
16510  protected void composeMedicationDispense(Complex parent, String parentType, String name, MedicationDispense element, int index) {
16511    if (element == null) 
16512      return;
16513    Complex t;
16514    if (Utilities.noString(parentType))
16515      t = parent;
16516    else {
16517      t = parent.predicate("fhir:"+parentType+'.'+name);
16518    }
16519    composeDomainResource(t, "MedicationDispense", name, element, index);
16520    for (int i = 0; i < element.getIdentifier().size(); i++) {
16521      composeIdentifier(t, "MedicationDispense", "identifier", element.getIdentifier().get(i), i);
16522    }
16523    for (int i = 0; i < element.getBasedOn().size(); i++) {
16524      composeReference(t, "MedicationDispense", "basedOn", element.getBasedOn().get(i), i);
16525    }
16526    for (int i = 0; i < element.getPartOf().size(); i++) {
16527      composeReference(t, "MedicationDispense", "partOf", element.getPartOf().get(i), i);
16528    }
16529    if (element.hasStatusElement()) {
16530      composeEnum(t, "MedicationDispense", "status", element.getStatusElement(), -1);
16531    }
16532    if (element.hasNotPerformedReason()) {
16533      composeCodeableReference(t, "MedicationDispense", "notPerformedReason", element.getNotPerformedReason(), -1);
16534    }
16535    if (element.hasStatusChangedElement()) {
16536      composeDateTime(t, "MedicationDispense", "statusChanged", element.getStatusChangedElement(), -1);
16537    }
16538    for (int i = 0; i < element.getCategory().size(); i++) {
16539      composeCodeableConcept(t, "MedicationDispense", "category", element.getCategory().get(i), i);
16540    }
16541    if (element.hasMedication()) {
16542      composeCodeableReference(t, "MedicationDispense", "medication", element.getMedication(), -1);
16543    }
16544    if (element.hasSubject()) {
16545      composeReference(t, "MedicationDispense", "subject", element.getSubject(), -1);
16546    }
16547    if (element.hasEncounter()) {
16548      composeReference(t, "MedicationDispense", "encounter", element.getEncounter(), -1);
16549    }
16550    for (int i = 0; i < element.getSupportingInformation().size(); i++) {
16551      composeReference(t, "MedicationDispense", "supportingInformation", element.getSupportingInformation().get(i), i);
16552    }
16553    for (int i = 0; i < element.getPerformer().size(); i++) {
16554      composeMedicationDispensePerformerComponent(t, "MedicationDispense", "performer", element.getPerformer().get(i), i);
16555    }
16556    if (element.hasLocation()) {
16557      composeReference(t, "MedicationDispense", "location", element.getLocation(), -1);
16558    }
16559    for (int i = 0; i < element.getAuthorizingPrescription().size(); i++) {
16560      composeReference(t, "MedicationDispense", "authorizingPrescription", element.getAuthorizingPrescription().get(i), i);
16561    }
16562    if (element.hasType()) {
16563      composeCodeableConcept(t, "MedicationDispense", "type", element.getType(), -1);
16564    }
16565    if (element.hasQuantity()) {
16566      composeQuantity(t, "MedicationDispense", "quantity", element.getQuantity(), -1);
16567    }
16568    if (element.hasDaysSupply()) {
16569      composeQuantity(t, "MedicationDispense", "daysSupply", element.getDaysSupply(), -1);
16570    }
16571    if (element.hasRecordedElement()) {
16572      composeDateTime(t, "MedicationDispense", "recorded", element.getRecordedElement(), -1);
16573    }
16574    if (element.hasWhenPreparedElement()) {
16575      composeDateTime(t, "MedicationDispense", "whenPrepared", element.getWhenPreparedElement(), -1);
16576    }
16577    if (element.hasWhenHandedOverElement()) {
16578      composeDateTime(t, "MedicationDispense", "whenHandedOver", element.getWhenHandedOverElement(), -1);
16579    }
16580    if (element.hasDestination()) {
16581      composeReference(t, "MedicationDispense", "destination", element.getDestination(), -1);
16582    }
16583    for (int i = 0; i < element.getReceiver().size(); i++) {
16584      composeReference(t, "MedicationDispense", "receiver", element.getReceiver().get(i), i);
16585    }
16586    for (int i = 0; i < element.getNote().size(); i++) {
16587      composeAnnotation(t, "MedicationDispense", "note", element.getNote().get(i), i);
16588    }
16589    if (element.hasRenderedDosageInstructionElement()) {
16590      composeString(t, "MedicationDispense", "renderedDosageInstruction", element.getRenderedDosageInstructionElement(), -1);
16591    }
16592    for (int i = 0; i < element.getDosageInstruction().size(); i++) {
16593      composeDosage(t, "MedicationDispense", "dosageInstruction", element.getDosageInstruction().get(i), i);
16594    }
16595    if (element.hasSubstitution()) {
16596      composeMedicationDispenseSubstitutionComponent(t, "MedicationDispense", "substitution", element.getSubstitution(), -1);
16597    }
16598    for (int i = 0; i < element.getEventHistory().size(); i++) {
16599      composeReference(t, "MedicationDispense", "eventHistory", element.getEventHistory().get(i), i);
16600    }
16601  }
16602
16603  protected void composeMedicationDispensePerformerComponent(Complex parent, String parentType, String name, MedicationDispense.MedicationDispensePerformerComponent element, int index) {
16604    if (element == null) 
16605      return;
16606    Complex t;
16607    if (Utilities.noString(parentType))
16608      t = parent;
16609    else {
16610      t = parent.predicate("fhir:"+parentType+'.'+name);
16611    }
16612    composeBackboneElement(t, "performer", name, element, index);
16613    if (element.hasFunction()) {
16614      composeCodeableConcept(t, "MedicationDispensePerformerComponent", "function", element.getFunction(), -1);
16615    }
16616    if (element.hasActor()) {
16617      composeReference(t, "MedicationDispensePerformerComponent", "actor", element.getActor(), -1);
16618    }
16619  }
16620
16621  protected void composeMedicationDispenseSubstitutionComponent(Complex parent, String parentType, String name, MedicationDispense.MedicationDispenseSubstitutionComponent element, int index) {
16622    if (element == null) 
16623      return;
16624    Complex t;
16625    if (Utilities.noString(parentType))
16626      t = parent;
16627    else {
16628      t = parent.predicate("fhir:"+parentType+'.'+name);
16629    }
16630    composeBackboneElement(t, "substitution", name, element, index);
16631    if (element.hasWasSubstitutedElement()) {
16632      composeBoolean(t, "MedicationDispenseSubstitutionComponent", "wasSubstituted", element.getWasSubstitutedElement(), -1);
16633    }
16634    if (element.hasType()) {
16635      composeCodeableConcept(t, "MedicationDispenseSubstitutionComponent", "type", element.getType(), -1);
16636    }
16637    for (int i = 0; i < element.getReason().size(); i++) {
16638      composeCodeableConcept(t, "MedicationDispenseSubstitutionComponent", "reason", element.getReason().get(i), i);
16639    }
16640    if (element.hasResponsibleParty()) {
16641      composeReference(t, "MedicationDispenseSubstitutionComponent", "responsibleParty", element.getResponsibleParty(), -1);
16642    }
16643  }
16644
16645  protected void composeMedicationKnowledge(Complex parent, String parentType, String name, MedicationKnowledge element, int index) {
16646    if (element == null) 
16647      return;
16648    Complex t;
16649    if (Utilities.noString(parentType))
16650      t = parent;
16651    else {
16652      t = parent.predicate("fhir:"+parentType+'.'+name);
16653    }
16654    composeDomainResource(t, "MedicationKnowledge", name, element, index);
16655    for (int i = 0; i < element.getIdentifier().size(); i++) {
16656      composeIdentifier(t, "MedicationKnowledge", "identifier", element.getIdentifier().get(i), i);
16657    }
16658    if (element.hasCode()) {
16659      composeCodeableConcept(t, "MedicationKnowledge", "code", element.getCode(), -1);
16660    }
16661    if (element.hasStatusElement()) {
16662      composeEnum(t, "MedicationKnowledge", "status", element.getStatusElement(), -1);
16663    }
16664    if (element.hasAuthor()) {
16665      composeReference(t, "MedicationKnowledge", "author", element.getAuthor(), -1);
16666    }
16667    for (int i = 0; i < element.getIntendedJurisdiction().size(); i++) {
16668      composeCodeableConcept(t, "MedicationKnowledge", "intendedJurisdiction", element.getIntendedJurisdiction().get(i), i);
16669    }
16670    for (int i = 0; i < element.getName().size(); i++) {
16671      composeString(t, "MedicationKnowledge", "name", element.getName().get(i), i);
16672    }
16673    for (int i = 0; i < element.getRelatedMedicationKnowledge().size(); i++) {
16674      composeMedicationKnowledgeRelatedMedicationKnowledgeComponent(t, "MedicationKnowledge", "relatedMedicationKnowledge", element.getRelatedMedicationKnowledge().get(i), i);
16675    }
16676    for (int i = 0; i < element.getAssociatedMedication().size(); i++) {
16677      composeReference(t, "MedicationKnowledge", "associatedMedication", element.getAssociatedMedication().get(i), i);
16678    }
16679    for (int i = 0; i < element.getProductType().size(); i++) {
16680      composeCodeableConcept(t, "MedicationKnowledge", "productType", element.getProductType().get(i), i);
16681    }
16682    for (int i = 0; i < element.getMonograph().size(); i++) {
16683      composeMedicationKnowledgeMonographComponent(t, "MedicationKnowledge", "monograph", element.getMonograph().get(i), i);
16684    }
16685    if (element.hasPreparationInstructionElement()) {
16686      composeMarkdown(t, "MedicationKnowledge", "preparationInstruction", element.getPreparationInstructionElement(), -1);
16687    }
16688    for (int i = 0; i < element.getCost().size(); i++) {
16689      composeMedicationKnowledgeCostComponent(t, "MedicationKnowledge", "cost", element.getCost().get(i), i);
16690    }
16691    for (int i = 0; i < element.getMonitoringProgram().size(); i++) {
16692      composeMedicationKnowledgeMonitoringProgramComponent(t, "MedicationKnowledge", "monitoringProgram", element.getMonitoringProgram().get(i), i);
16693    }
16694    for (int i = 0; i < element.getIndicationGuideline().size(); i++) {
16695      composeMedicationKnowledgeIndicationGuidelineComponent(t, "MedicationKnowledge", "indicationGuideline", element.getIndicationGuideline().get(i), i);
16696    }
16697    for (int i = 0; i < element.getMedicineClassification().size(); i++) {
16698      composeMedicationKnowledgeMedicineClassificationComponent(t, "MedicationKnowledge", "medicineClassification", element.getMedicineClassification().get(i), i);
16699    }
16700    for (int i = 0; i < element.getPackaging().size(); i++) {
16701      composeMedicationKnowledgePackagingComponent(t, "MedicationKnowledge", "packaging", element.getPackaging().get(i), i);
16702    }
16703    for (int i = 0; i < element.getClinicalUseIssue().size(); i++) {
16704      composeReference(t, "MedicationKnowledge", "clinicalUseIssue", element.getClinicalUseIssue().get(i), i);
16705    }
16706    for (int i = 0; i < element.getStorageGuideline().size(); i++) {
16707      composeMedicationKnowledgeStorageGuidelineComponent(t, "MedicationKnowledge", "storageGuideline", element.getStorageGuideline().get(i), i);
16708    }
16709    for (int i = 0; i < element.getRegulatory().size(); i++) {
16710      composeMedicationKnowledgeRegulatoryComponent(t, "MedicationKnowledge", "regulatory", element.getRegulatory().get(i), i);
16711    }
16712    if (element.hasDefinitional()) {
16713      composeMedicationKnowledgeDefinitionalComponent(t, "MedicationKnowledge", "definitional", element.getDefinitional(), -1);
16714    }
16715  }
16716
16717  protected void composeMedicationKnowledgeRelatedMedicationKnowledgeComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeRelatedMedicationKnowledgeComponent element, int index) {
16718    if (element == null) 
16719      return;
16720    Complex t;
16721    if (Utilities.noString(parentType))
16722      t = parent;
16723    else {
16724      t = parent.predicate("fhir:"+parentType+'.'+name);
16725    }
16726    composeBackboneElement(t, "relatedMedicationKnowledge", name, element, index);
16727    if (element.hasType()) {
16728      composeCodeableConcept(t, "MedicationKnowledgeRelatedMedicationKnowledgeComponent", "type", element.getType(), -1);
16729    }
16730    for (int i = 0; i < element.getReference().size(); i++) {
16731      composeReference(t, "MedicationKnowledgeRelatedMedicationKnowledgeComponent", "reference", element.getReference().get(i), i);
16732    }
16733  }
16734
16735  protected void composeMedicationKnowledgeMonographComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeMonographComponent element, int index) {
16736    if (element == null) 
16737      return;
16738    Complex t;
16739    if (Utilities.noString(parentType))
16740      t = parent;
16741    else {
16742      t = parent.predicate("fhir:"+parentType+'.'+name);
16743    }
16744    composeBackboneElement(t, "monograph", name, element, index);
16745    if (element.hasType()) {
16746      composeCodeableConcept(t, "MedicationKnowledgeMonographComponent", "type", element.getType(), -1);
16747    }
16748    if (element.hasSource()) {
16749      composeReference(t, "MedicationKnowledgeMonographComponent", "source", element.getSource(), -1);
16750    }
16751  }
16752
16753  protected void composeMedicationKnowledgeCostComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeCostComponent element, int index) {
16754    if (element == null) 
16755      return;
16756    Complex t;
16757    if (Utilities.noString(parentType))
16758      t = parent;
16759    else {
16760      t = parent.predicate("fhir:"+parentType+'.'+name);
16761    }
16762    composeBackboneElement(t, "cost", name, element, index);
16763    for (int i = 0; i < element.getEffectiveDate().size(); i++) {
16764      composePeriod(t, "MedicationKnowledgeCostComponent", "effectiveDate", element.getEffectiveDate().get(i), i);
16765    }
16766    if (element.hasType()) {
16767      composeCodeableConcept(t, "MedicationKnowledgeCostComponent", "type", element.getType(), -1);
16768    }
16769    if (element.hasSourceElement()) {
16770      composeString(t, "MedicationKnowledgeCostComponent", "source", element.getSourceElement(), -1);
16771    }
16772    if (element.hasCost()) {
16773      composeType(t, "MedicationKnowledgeCostComponent", "cost", element.getCost(), -1);
16774    }
16775  }
16776
16777  protected void composeMedicationKnowledgeMonitoringProgramComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeMonitoringProgramComponent element, int index) {
16778    if (element == null) 
16779      return;
16780    Complex t;
16781    if (Utilities.noString(parentType))
16782      t = parent;
16783    else {
16784      t = parent.predicate("fhir:"+parentType+'.'+name);
16785    }
16786    composeBackboneElement(t, "monitoringProgram", name, element, index);
16787    if (element.hasType()) {
16788      composeCodeableConcept(t, "MedicationKnowledgeMonitoringProgramComponent", "type", element.getType(), -1);
16789    }
16790    if (element.hasNameElement()) {
16791      composeString(t, "MedicationKnowledgeMonitoringProgramComponent", "name", element.getNameElement(), -1);
16792    }
16793  }
16794
16795  protected void composeMedicationKnowledgeIndicationGuidelineComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeIndicationGuidelineComponent element, int index) {
16796    if (element == null) 
16797      return;
16798    Complex t;
16799    if (Utilities.noString(parentType))
16800      t = parent;
16801    else {
16802      t = parent.predicate("fhir:"+parentType+'.'+name);
16803    }
16804    composeBackboneElement(t, "indicationGuideline", name, element, index);
16805    for (int i = 0; i < element.getIndication().size(); i++) {
16806      composeCodeableReference(t, "MedicationKnowledgeIndicationGuidelineComponent", "indication", element.getIndication().get(i), i);
16807    }
16808    for (int i = 0; i < element.getDosingGuideline().size(); i++) {
16809      composeMedicationKnowledgeIndicationGuidelineDosingGuidelineComponent(t, "MedicationKnowledgeIndicationGuidelineComponent", "dosingGuideline", element.getDosingGuideline().get(i), i);
16810    }
16811  }
16812
16813  protected void composeMedicationKnowledgeIndicationGuidelineDosingGuidelineComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeIndicationGuidelineDosingGuidelineComponent element, int index) {
16814    if (element == null) 
16815      return;
16816    Complex t;
16817    if (Utilities.noString(parentType))
16818      t = parent;
16819    else {
16820      t = parent.predicate("fhir:"+parentType+'.'+name);
16821    }
16822    composeBackboneElement(t, "dosingGuideline", name, element, index);
16823    if (element.hasTreatmentIntent()) {
16824      composeCodeableConcept(t, "MedicationKnowledgeIndicationGuidelineDosingGuidelineComponent", "treatmentIntent", element.getTreatmentIntent(), -1);
16825    }
16826    for (int i = 0; i < element.getDosage().size(); i++) {
16827      composeMedicationKnowledgeIndicationGuidelineDosingGuidelineDosageComponent(t, "MedicationKnowledgeIndicationGuidelineDosingGuidelineComponent", "dosage", element.getDosage().get(i), i);
16828    }
16829    if (element.hasAdministrationTreatment()) {
16830      composeCodeableConcept(t, "MedicationKnowledgeIndicationGuidelineDosingGuidelineComponent", "administrationTreatment", element.getAdministrationTreatment(), -1);
16831    }
16832    for (int i = 0; i < element.getPatientCharacteristic().size(); i++) {
16833      composeMedicationKnowledgeIndicationGuidelineDosingGuidelinePatientCharacteristicComponent(t, "MedicationKnowledgeIndicationGuidelineDosingGuidelineComponent", "patientCharacteristic", element.getPatientCharacteristic().get(i), i);
16834    }
16835  }
16836
16837  protected void composeMedicationKnowledgeIndicationGuidelineDosingGuidelineDosageComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeIndicationGuidelineDosingGuidelineDosageComponent element, int index) {
16838    if (element == null) 
16839      return;
16840    Complex t;
16841    if (Utilities.noString(parentType))
16842      t = parent;
16843    else {
16844      t = parent.predicate("fhir:"+parentType+'.'+name);
16845    }
16846    composeBackboneElement(t, "dosage", name, element, index);
16847    if (element.hasType()) {
16848      composeCodeableConcept(t, "MedicationKnowledgeIndicationGuidelineDosingGuidelineDosageComponent", "type", element.getType(), -1);
16849    }
16850    for (int i = 0; i < element.getDosage().size(); i++) {
16851      composeDosage(t, "MedicationKnowledgeIndicationGuidelineDosingGuidelineDosageComponent", "dosage", element.getDosage().get(i), i);
16852    }
16853  }
16854
16855  protected void composeMedicationKnowledgeIndicationGuidelineDosingGuidelinePatientCharacteristicComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeIndicationGuidelineDosingGuidelinePatientCharacteristicComponent element, int index) {
16856    if (element == null) 
16857      return;
16858    Complex t;
16859    if (Utilities.noString(parentType))
16860      t = parent;
16861    else {
16862      t = parent.predicate("fhir:"+parentType+'.'+name);
16863    }
16864    composeBackboneElement(t, "patientCharacteristic", name, element, index);
16865    if (element.hasType()) {
16866      composeCodeableConcept(t, "MedicationKnowledgeIndicationGuidelineDosingGuidelinePatientCharacteristicComponent", "type", element.getType(), -1);
16867    }
16868    if (element.hasValue()) {
16869      composeType(t, "MedicationKnowledgeIndicationGuidelineDosingGuidelinePatientCharacteristicComponent", "value", element.getValue(), -1);
16870    }
16871  }
16872
16873  protected void composeMedicationKnowledgeMedicineClassificationComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeMedicineClassificationComponent element, int index) {
16874    if (element == null) 
16875      return;
16876    Complex t;
16877    if (Utilities.noString(parentType))
16878      t = parent;
16879    else {
16880      t = parent.predicate("fhir:"+parentType+'.'+name);
16881    }
16882    composeBackboneElement(t, "medicineClassification", name, element, index);
16883    if (element.hasType()) {
16884      composeCodeableConcept(t, "MedicationKnowledgeMedicineClassificationComponent", "type", element.getType(), -1);
16885    }
16886    if (element.hasSource()) {
16887      composeType(t, "MedicationKnowledgeMedicineClassificationComponent", "source", element.getSource(), -1);
16888    }
16889    for (int i = 0; i < element.getClassification().size(); i++) {
16890      composeCodeableConcept(t, "MedicationKnowledgeMedicineClassificationComponent", "classification", element.getClassification().get(i), i);
16891    }
16892  }
16893
16894  protected void composeMedicationKnowledgePackagingComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgePackagingComponent element, int index) {
16895    if (element == null) 
16896      return;
16897    Complex t;
16898    if (Utilities.noString(parentType))
16899      t = parent;
16900    else {
16901      t = parent.predicate("fhir:"+parentType+'.'+name);
16902    }
16903    composeBackboneElement(t, "packaging", name, element, index);
16904    for (int i = 0; i < element.getCost().size(); i++) {
16905      composeMedicationKnowledgeCostComponent(t, "MedicationKnowledgePackagingComponent", "cost", element.getCost().get(i), i);
16906    }
16907    if (element.hasPackagedProduct()) {
16908      composeReference(t, "MedicationKnowledgePackagingComponent", "packagedProduct", element.getPackagedProduct(), -1);
16909    }
16910  }
16911
16912  protected void composeMedicationKnowledgeStorageGuidelineComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeStorageGuidelineComponent element, int index) {
16913    if (element == null) 
16914      return;
16915    Complex t;
16916    if (Utilities.noString(parentType))
16917      t = parent;
16918    else {
16919      t = parent.predicate("fhir:"+parentType+'.'+name);
16920    }
16921    composeBackboneElement(t, "storageGuideline", name, element, index);
16922    if (element.hasReferenceElement()) {
16923      composeUri(t, "MedicationKnowledgeStorageGuidelineComponent", "reference", element.getReferenceElement(), -1);
16924    }
16925    for (int i = 0; i < element.getNote().size(); i++) {
16926      composeAnnotation(t, "MedicationKnowledgeStorageGuidelineComponent", "note", element.getNote().get(i), i);
16927    }
16928    if (element.hasStabilityDuration()) {
16929      composeDuration(t, "MedicationKnowledgeStorageGuidelineComponent", "stabilityDuration", element.getStabilityDuration(), -1);
16930    }
16931    for (int i = 0; i < element.getEnvironmentalSetting().size(); i++) {
16932      composeMedicationKnowledgeStorageGuidelineEnvironmentalSettingComponent(t, "MedicationKnowledgeStorageGuidelineComponent", "environmentalSetting", element.getEnvironmentalSetting().get(i), i);
16933    }
16934  }
16935
16936  protected void composeMedicationKnowledgeStorageGuidelineEnvironmentalSettingComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeStorageGuidelineEnvironmentalSettingComponent element, int index) {
16937    if (element == null) 
16938      return;
16939    Complex t;
16940    if (Utilities.noString(parentType))
16941      t = parent;
16942    else {
16943      t = parent.predicate("fhir:"+parentType+'.'+name);
16944    }
16945    composeBackboneElement(t, "environmentalSetting", name, element, index);
16946    if (element.hasType()) {
16947      composeCodeableConcept(t, "MedicationKnowledgeStorageGuidelineEnvironmentalSettingComponent", "type", element.getType(), -1);
16948    }
16949    if (element.hasValue()) {
16950      composeType(t, "MedicationKnowledgeStorageGuidelineEnvironmentalSettingComponent", "value", element.getValue(), -1);
16951    }
16952  }
16953
16954  protected void composeMedicationKnowledgeRegulatoryComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeRegulatoryComponent element, int index) {
16955    if (element == null) 
16956      return;
16957    Complex t;
16958    if (Utilities.noString(parentType))
16959      t = parent;
16960    else {
16961      t = parent.predicate("fhir:"+parentType+'.'+name);
16962    }
16963    composeBackboneElement(t, "regulatory", name, element, index);
16964    if (element.hasRegulatoryAuthority()) {
16965      composeReference(t, "MedicationKnowledgeRegulatoryComponent", "regulatoryAuthority", element.getRegulatoryAuthority(), -1);
16966    }
16967    for (int i = 0; i < element.getSubstitution().size(); i++) {
16968      composeMedicationKnowledgeRegulatorySubstitutionComponent(t, "MedicationKnowledgeRegulatoryComponent", "substitution", element.getSubstitution().get(i), i);
16969    }
16970    for (int i = 0; i < element.getSchedule().size(); i++) {
16971      composeCodeableConcept(t, "MedicationKnowledgeRegulatoryComponent", "schedule", element.getSchedule().get(i), i);
16972    }
16973    if (element.hasMaxDispense()) {
16974      composeMedicationKnowledgeRegulatoryMaxDispenseComponent(t, "MedicationKnowledgeRegulatoryComponent", "maxDispense", element.getMaxDispense(), -1);
16975    }
16976  }
16977
16978  protected void composeMedicationKnowledgeRegulatorySubstitutionComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeRegulatorySubstitutionComponent element, int index) {
16979    if (element == null) 
16980      return;
16981    Complex t;
16982    if (Utilities.noString(parentType))
16983      t = parent;
16984    else {
16985      t = parent.predicate("fhir:"+parentType+'.'+name);
16986    }
16987    composeBackboneElement(t, "substitution", name, element, index);
16988    if (element.hasType()) {
16989      composeCodeableConcept(t, "MedicationKnowledgeRegulatorySubstitutionComponent", "type", element.getType(), -1);
16990    }
16991    if (element.hasAllowedElement()) {
16992      composeBoolean(t, "MedicationKnowledgeRegulatorySubstitutionComponent", "allowed", element.getAllowedElement(), -1);
16993    }
16994  }
16995
16996  protected void composeMedicationKnowledgeRegulatoryMaxDispenseComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeRegulatoryMaxDispenseComponent element, int index) {
16997    if (element == null) 
16998      return;
16999    Complex t;
17000    if (Utilities.noString(parentType))
17001      t = parent;
17002    else {
17003      t = parent.predicate("fhir:"+parentType+'.'+name);
17004    }
17005    composeBackboneElement(t, "maxDispense", name, element, index);
17006    if (element.hasQuantity()) {
17007      composeQuantity(t, "MedicationKnowledgeRegulatoryMaxDispenseComponent", "quantity", element.getQuantity(), -1);
17008    }
17009    if (element.hasPeriod()) {
17010      composeDuration(t, "MedicationKnowledgeRegulatoryMaxDispenseComponent", "period", element.getPeriod(), -1);
17011    }
17012  }
17013
17014  protected void composeMedicationKnowledgeDefinitionalComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeDefinitionalComponent element, int index) {
17015    if (element == null) 
17016      return;
17017    Complex t;
17018    if (Utilities.noString(parentType))
17019      t = parent;
17020    else {
17021      t = parent.predicate("fhir:"+parentType+'.'+name);
17022    }
17023    composeBackboneElement(t, "definitional", name, element, index);
17024    for (int i = 0; i < element.getDefinition().size(); i++) {
17025      composeReference(t, "MedicationKnowledgeDefinitionalComponent", "definition", element.getDefinition().get(i), i);
17026    }
17027    if (element.hasDoseForm()) {
17028      composeCodeableConcept(t, "MedicationKnowledgeDefinitionalComponent", "doseForm", element.getDoseForm(), -1);
17029    }
17030    for (int i = 0; i < element.getIntendedRoute().size(); i++) {
17031      composeCodeableConcept(t, "MedicationKnowledgeDefinitionalComponent", "intendedRoute", element.getIntendedRoute().get(i), i);
17032    }
17033    for (int i = 0; i < element.getIngredient().size(); i++) {
17034      composeMedicationKnowledgeDefinitionalIngredientComponent(t, "MedicationKnowledgeDefinitionalComponent", "ingredient", element.getIngredient().get(i), i);
17035    }
17036    for (int i = 0; i < element.getDrugCharacteristic().size(); i++) {
17037      composeMedicationKnowledgeDefinitionalDrugCharacteristicComponent(t, "MedicationKnowledgeDefinitionalComponent", "drugCharacteristic", element.getDrugCharacteristic().get(i), i);
17038    }
17039  }
17040
17041  protected void composeMedicationKnowledgeDefinitionalIngredientComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeDefinitionalIngredientComponent element, int index) {
17042    if (element == null) 
17043      return;
17044    Complex t;
17045    if (Utilities.noString(parentType))
17046      t = parent;
17047    else {
17048      t = parent.predicate("fhir:"+parentType+'.'+name);
17049    }
17050    composeBackboneElement(t, "ingredient", name, element, index);
17051    if (element.hasItem()) {
17052      composeCodeableReference(t, "MedicationKnowledgeDefinitionalIngredientComponent", "item", element.getItem(), -1);
17053    }
17054    if (element.hasType()) {
17055      composeCodeableConcept(t, "MedicationKnowledgeDefinitionalIngredientComponent", "type", element.getType(), -1);
17056    }
17057    if (element.hasStrength()) {
17058      composeType(t, "MedicationKnowledgeDefinitionalIngredientComponent", "strength", element.getStrength(), -1);
17059    }
17060  }
17061
17062  protected void composeMedicationKnowledgeDefinitionalDrugCharacteristicComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeDefinitionalDrugCharacteristicComponent element, int index) {
17063    if (element == null) 
17064      return;
17065    Complex t;
17066    if (Utilities.noString(parentType))
17067      t = parent;
17068    else {
17069      t = parent.predicate("fhir:"+parentType+'.'+name);
17070    }
17071    composeBackboneElement(t, "drugCharacteristic", name, element, index);
17072    if (element.hasType()) {
17073      composeCodeableConcept(t, "MedicationKnowledgeDefinitionalDrugCharacteristicComponent", "type", element.getType(), -1);
17074    }
17075    if (element.hasValue()) {
17076      composeType(t, "MedicationKnowledgeDefinitionalDrugCharacteristicComponent", "value", element.getValue(), -1);
17077    }
17078  }
17079
17080  protected void composeMedicationRequest(Complex parent, String parentType, String name, MedicationRequest element, int index) {
17081    if (element == null) 
17082      return;
17083    Complex t;
17084    if (Utilities.noString(parentType))
17085      t = parent;
17086    else {
17087      t = parent.predicate("fhir:"+parentType+'.'+name);
17088    }
17089    composeDomainResource(t, "MedicationRequest", name, element, index);
17090    for (int i = 0; i < element.getIdentifier().size(); i++) {
17091      composeIdentifier(t, "MedicationRequest", "identifier", element.getIdentifier().get(i), i);
17092    }
17093    for (int i = 0; i < element.getBasedOn().size(); i++) {
17094      composeReference(t, "MedicationRequest", "basedOn", element.getBasedOn().get(i), i);
17095    }
17096    if (element.hasPriorPrescription()) {
17097      composeReference(t, "MedicationRequest", "priorPrescription", element.getPriorPrescription(), -1);
17098    }
17099    if (element.hasGroupIdentifier()) {
17100      composeIdentifier(t, "MedicationRequest", "groupIdentifier", element.getGroupIdentifier(), -1);
17101    }
17102    if (element.hasStatusElement()) {
17103      composeEnum(t, "MedicationRequest", "status", element.getStatusElement(), -1);
17104    }
17105    if (element.hasStatusReason()) {
17106      composeCodeableConcept(t, "MedicationRequest", "statusReason", element.getStatusReason(), -1);
17107    }
17108    if (element.hasStatusChangedElement()) {
17109      composeDateTime(t, "MedicationRequest", "statusChanged", element.getStatusChangedElement(), -1);
17110    }
17111    if (element.hasIntentElement()) {
17112      composeEnum(t, "MedicationRequest", "intent", element.getIntentElement(), -1);
17113    }
17114    for (int i = 0; i < element.getCategory().size(); i++) {
17115      composeCodeableConcept(t, "MedicationRequest", "category", element.getCategory().get(i), i);
17116    }
17117    if (element.hasPriorityElement()) {
17118      composeEnum(t, "MedicationRequest", "priority", element.getPriorityElement(), -1);
17119    }
17120    if (element.hasDoNotPerformElement()) {
17121      composeBoolean(t, "MedicationRequest", "doNotPerform", element.getDoNotPerformElement(), -1);
17122    }
17123    if (element.hasMedication()) {
17124      composeCodeableReference(t, "MedicationRequest", "medication", element.getMedication(), -1);
17125    }
17126    if (element.hasSubject()) {
17127      composeReference(t, "MedicationRequest", "subject", element.getSubject(), -1);
17128    }
17129    for (int i = 0; i < element.getInformationSource().size(); i++) {
17130      composeReference(t, "MedicationRequest", "informationSource", element.getInformationSource().get(i), i);
17131    }
17132    if (element.hasEncounter()) {
17133      composeReference(t, "MedicationRequest", "encounter", element.getEncounter(), -1);
17134    }
17135    for (int i = 0; i < element.getSupportingInformation().size(); i++) {
17136      composeReference(t, "MedicationRequest", "supportingInformation", element.getSupportingInformation().get(i), i);
17137    }
17138    if (element.hasAuthoredOnElement()) {
17139      composeDateTime(t, "MedicationRequest", "authoredOn", element.getAuthoredOnElement(), -1);
17140    }
17141    if (element.hasRequester()) {
17142      composeReference(t, "MedicationRequest", "requester", element.getRequester(), -1);
17143    }
17144    if (element.hasReportedElement()) {
17145      composeBoolean(t, "MedicationRequest", "reported", element.getReportedElement(), -1);
17146    }
17147    if (element.hasPerformerType()) {
17148      composeCodeableConcept(t, "MedicationRequest", "performerType", element.getPerformerType(), -1);
17149    }
17150    for (int i = 0; i < element.getPerformer().size(); i++) {
17151      composeReference(t, "MedicationRequest", "performer", element.getPerformer().get(i), i);
17152    }
17153    if (element.hasDevice()) {
17154      composeCodeableReference(t, "MedicationRequest", "device", element.getDevice(), -1);
17155    }
17156    if (element.hasRecorder()) {
17157      composeReference(t, "MedicationRequest", "recorder", element.getRecorder(), -1);
17158    }
17159    for (int i = 0; i < element.getReason().size(); i++) {
17160      composeCodeableReference(t, "MedicationRequest", "reason", element.getReason().get(i), i);
17161    }
17162    if (element.hasCourseOfTherapyType()) {
17163      composeCodeableConcept(t, "MedicationRequest", "courseOfTherapyType", element.getCourseOfTherapyType(), -1);
17164    }
17165    for (int i = 0; i < element.getInsurance().size(); i++) {
17166      composeReference(t, "MedicationRequest", "insurance", element.getInsurance().get(i), i);
17167    }
17168    for (int i = 0; i < element.getNote().size(); i++) {
17169      composeAnnotation(t, "MedicationRequest", "note", element.getNote().get(i), i);
17170    }
17171    if (element.hasDose()) {
17172      composeMedicationRequestDoseComponent(t, "MedicationRequest", "dose", element.getDose(), -1);
17173    }
17174    if (element.hasDispenseRequest()) {
17175      composeMedicationRequestDispenseRequestComponent(t, "MedicationRequest", "dispenseRequest", element.getDispenseRequest(), -1);
17176    }
17177    if (element.hasSubstitution()) {
17178      composeMedicationRequestSubstitutionComponent(t, "MedicationRequest", "substitution", element.getSubstitution(), -1);
17179    }
17180    for (int i = 0; i < element.getEventHistory().size(); i++) {
17181      composeReference(t, "MedicationRequest", "eventHistory", element.getEventHistory().get(i), i);
17182    }
17183  }
17184
17185  protected void composeMedicationRequestDoseComponent(Complex parent, String parentType, String name, MedicationRequest.MedicationRequestDoseComponent element, int index) {
17186    if (element == null) 
17187      return;
17188    Complex t;
17189    if (Utilities.noString(parentType))
17190      t = parent;
17191    else {
17192      t = parent.predicate("fhir:"+parentType+'.'+name);
17193    }
17194    composeBackboneElement(t, "dose", name, element, index);
17195    if (element.hasRenderedDosageInstructionElement()) {
17196      composeString(t, "MedicationRequestDoseComponent", "renderedDosageInstruction", element.getRenderedDosageInstructionElement(), -1);
17197    }
17198    if (element.hasEffectiveDosePeriod()) {
17199      composePeriod(t, "MedicationRequestDoseComponent", "effectiveDosePeriod", element.getEffectiveDosePeriod(), -1);
17200    }
17201    for (int i = 0; i < element.getDosageInstruction().size(); i++) {
17202      composeDosage(t, "MedicationRequestDoseComponent", "dosageInstruction", element.getDosageInstruction().get(i), i);
17203    }
17204  }
17205
17206  protected void composeMedicationRequestDispenseRequestComponent(Complex parent, String parentType, String name, MedicationRequest.MedicationRequestDispenseRequestComponent element, int index) {
17207    if (element == null) 
17208      return;
17209    Complex t;
17210    if (Utilities.noString(parentType))
17211      t = parent;
17212    else {
17213      t = parent.predicate("fhir:"+parentType+'.'+name);
17214    }
17215    composeBackboneElement(t, "dispenseRequest", name, element, index);
17216    if (element.hasInitialFill()) {
17217      composeMedicationRequestDispenseRequestInitialFillComponent(t, "MedicationRequestDispenseRequestComponent", "initialFill", element.getInitialFill(), -1);
17218    }
17219    if (element.hasDispenseInterval()) {
17220      composeDuration(t, "MedicationRequestDispenseRequestComponent", "dispenseInterval", element.getDispenseInterval(), -1);
17221    }
17222    if (element.hasValidityPeriod()) {
17223      composePeriod(t, "MedicationRequestDispenseRequestComponent", "validityPeriod", element.getValidityPeriod(), -1);
17224    }
17225    if (element.hasNumberOfRepeatsAllowedElement()) {
17226      composeUnsignedInt(t, "MedicationRequestDispenseRequestComponent", "numberOfRepeatsAllowed", element.getNumberOfRepeatsAllowedElement(), -1);
17227    }
17228    if (element.hasQuantity()) {
17229      composeQuantity(t, "MedicationRequestDispenseRequestComponent", "quantity", element.getQuantity(), -1);
17230    }
17231    if (element.hasExpectedSupplyDuration()) {
17232      composeDuration(t, "MedicationRequestDispenseRequestComponent", "expectedSupplyDuration", element.getExpectedSupplyDuration(), -1);
17233    }
17234    if (element.hasDispenser()) {
17235      composeReference(t, "MedicationRequestDispenseRequestComponent", "dispenser", element.getDispenser(), -1);
17236    }
17237    for (int i = 0; i < element.getDispenserInstruction().size(); i++) {
17238      composeAnnotation(t, "MedicationRequestDispenseRequestComponent", "dispenserInstruction", element.getDispenserInstruction().get(i), i);
17239    }
17240    if (element.hasDoseAdministrationAid()) {
17241      composeCodeableConcept(t, "MedicationRequestDispenseRequestComponent", "doseAdministrationAid", element.getDoseAdministrationAid(), -1);
17242    }
17243  }
17244
17245  protected void composeMedicationRequestDispenseRequestInitialFillComponent(Complex parent, String parentType, String name, MedicationRequest.MedicationRequestDispenseRequestInitialFillComponent element, int index) {
17246    if (element == null) 
17247      return;
17248    Complex t;
17249    if (Utilities.noString(parentType))
17250      t = parent;
17251    else {
17252      t = parent.predicate("fhir:"+parentType+'.'+name);
17253    }
17254    composeBackboneElement(t, "initialFill", name, element, index);
17255    if (element.hasQuantity()) {
17256      composeQuantity(t, "MedicationRequestDispenseRequestInitialFillComponent", "quantity", element.getQuantity(), -1);
17257    }
17258    if (element.hasDuration()) {
17259      composeDuration(t, "MedicationRequestDispenseRequestInitialFillComponent", "duration", element.getDuration(), -1);
17260    }
17261  }
17262
17263  protected void composeMedicationRequestSubstitutionComponent(Complex parent, String parentType, String name, MedicationRequest.MedicationRequestSubstitutionComponent element, int index) {
17264    if (element == null) 
17265      return;
17266    Complex t;
17267    if (Utilities.noString(parentType))
17268      t = parent;
17269    else {
17270      t = parent.predicate("fhir:"+parentType+'.'+name);
17271    }
17272    composeBackboneElement(t, "substitution", name, element, index);
17273    if (element.hasAllowed()) {
17274      composeType(t, "MedicationRequestSubstitutionComponent", "allowed", element.getAllowed(), -1);
17275    }
17276    if (element.hasReason()) {
17277      composeCodeableConcept(t, "MedicationRequestSubstitutionComponent", "reason", element.getReason(), -1);
17278    }
17279  }
17280
17281  protected void composeMedicationUsage(Complex parent, String parentType, String name, MedicationUsage element, int index) {
17282    if (element == null) 
17283      return;
17284    Complex t;
17285    if (Utilities.noString(parentType))
17286      t = parent;
17287    else {
17288      t = parent.predicate("fhir:"+parentType+'.'+name);
17289    }
17290    composeDomainResource(t, "MedicationUsage", name, element, index);
17291    for (int i = 0; i < element.getIdentifier().size(); i++) {
17292      composeIdentifier(t, "MedicationUsage", "identifier", element.getIdentifier().get(i), i);
17293    }
17294    for (int i = 0; i < element.getPartOf().size(); i++) {
17295      composeReference(t, "MedicationUsage", "partOf", element.getPartOf().get(i), i);
17296    }
17297    if (element.hasStatusElement()) {
17298      composeEnum(t, "MedicationUsage", "status", element.getStatusElement(), -1);
17299    }
17300    for (int i = 0; i < element.getCategory().size(); i++) {
17301      composeCodeableConcept(t, "MedicationUsage", "category", element.getCategory().get(i), i);
17302    }
17303    if (element.hasMedication()) {
17304      composeCodeableReference(t, "MedicationUsage", "medication", element.getMedication(), -1);
17305    }
17306    if (element.hasSubject()) {
17307      composeReference(t, "MedicationUsage", "subject", element.getSubject(), -1);
17308    }
17309    if (element.hasEncounter()) {
17310      composeReference(t, "MedicationUsage", "encounter", element.getEncounter(), -1);
17311    }
17312    if (element.hasEffective()) {
17313      composeType(t, "MedicationUsage", "effective", element.getEffective(), -1);
17314    }
17315    if (element.hasDateAssertedElement()) {
17316      composeDateTime(t, "MedicationUsage", "dateAsserted", element.getDateAssertedElement(), -1);
17317    }
17318    for (int i = 0; i < element.getInformationSource().size(); i++) {
17319      composeReference(t, "MedicationUsage", "informationSource", element.getInformationSource().get(i), i);
17320    }
17321    for (int i = 0; i < element.getDerivedFrom().size(); i++) {
17322      composeReference(t, "MedicationUsage", "derivedFrom", element.getDerivedFrom().get(i), i);
17323    }
17324    for (int i = 0; i < element.getReason().size(); i++) {
17325      composeCodeableReference(t, "MedicationUsage", "reason", element.getReason().get(i), i);
17326    }
17327    for (int i = 0; i < element.getNote().size(); i++) {
17328      composeAnnotation(t, "MedicationUsage", "note", element.getNote().get(i), i);
17329    }
17330    for (int i = 0; i < element.getRelatedClinicalInformation().size(); i++) {
17331      composeReference(t, "MedicationUsage", "relatedClinicalInformation", element.getRelatedClinicalInformation().get(i), i);
17332    }
17333    if (element.hasRenderedDosageInstructionElement()) {
17334      composeString(t, "MedicationUsage", "renderedDosageInstruction", element.getRenderedDosageInstructionElement(), -1);
17335    }
17336    for (int i = 0; i < element.getDosage().size(); i++) {
17337      composeDosage(t, "MedicationUsage", "dosage", element.getDosage().get(i), i);
17338    }
17339    if (element.hasAdherence()) {
17340      composeMedicationUsageAdherenceComponent(t, "MedicationUsage", "adherence", element.getAdherence(), -1);
17341    }
17342  }
17343
17344  protected void composeMedicationUsageAdherenceComponent(Complex parent, String parentType, String name, MedicationUsage.MedicationUsageAdherenceComponent element, int index) {
17345    if (element == null) 
17346      return;
17347    Complex t;
17348    if (Utilities.noString(parentType))
17349      t = parent;
17350    else {
17351      t = parent.predicate("fhir:"+parentType+'.'+name);
17352    }
17353    composeBackboneElement(t, "adherence", name, element, index);
17354    if (element.hasCode()) {
17355      composeCodeableConcept(t, "MedicationUsageAdherenceComponent", "code", element.getCode(), -1);
17356    }
17357    if (element.hasReason()) {
17358      composeCodeableConcept(t, "MedicationUsageAdherenceComponent", "reason", element.getReason(), -1);
17359    }
17360  }
17361
17362  protected void composeMedicinalProductDefinition(Complex parent, String parentType, String name, MedicinalProductDefinition element, int index) {
17363    if (element == null) 
17364      return;
17365    Complex t;
17366    if (Utilities.noString(parentType))
17367      t = parent;
17368    else {
17369      t = parent.predicate("fhir:"+parentType+'.'+name);
17370    }
17371    composeDomainResource(t, "MedicinalProductDefinition", name, element, index);
17372    for (int i = 0; i < element.getIdentifier().size(); i++) {
17373      composeIdentifier(t, "MedicinalProductDefinition", "identifier", element.getIdentifier().get(i), i);
17374    }
17375    if (element.hasType()) {
17376      composeCodeableConcept(t, "MedicinalProductDefinition", "type", element.getType(), -1);
17377    }
17378    if (element.hasDomain()) {
17379      composeCodeableConcept(t, "MedicinalProductDefinition", "domain", element.getDomain(), -1);
17380    }
17381    if (element.hasVersionElement()) {
17382      composeString(t, "MedicinalProductDefinition", "version", element.getVersionElement(), -1);
17383    }
17384    if (element.hasStatus()) {
17385      composeCodeableConcept(t, "MedicinalProductDefinition", "status", element.getStatus(), -1);
17386    }
17387    if (element.hasStatusDateElement()) {
17388      composeDateTime(t, "MedicinalProductDefinition", "statusDate", element.getStatusDateElement(), -1);
17389    }
17390    if (element.hasDescriptionElement()) {
17391      composeMarkdown(t, "MedicinalProductDefinition", "description", element.getDescriptionElement(), -1);
17392    }
17393    if (element.hasCombinedPharmaceuticalDoseForm()) {
17394      composeCodeableConcept(t, "MedicinalProductDefinition", "combinedPharmaceuticalDoseForm", element.getCombinedPharmaceuticalDoseForm(), -1);
17395    }
17396    for (int i = 0; i < element.getRoute().size(); i++) {
17397      composeCodeableConcept(t, "MedicinalProductDefinition", "route", element.getRoute().get(i), i);
17398    }
17399    if (element.hasIndicationElement()) {
17400      composeMarkdown(t, "MedicinalProductDefinition", "indication", element.getIndicationElement(), -1);
17401    }
17402    if (element.hasLegalStatusOfSupply()) {
17403      composeCodeableConcept(t, "MedicinalProductDefinition", "legalStatusOfSupply", element.getLegalStatusOfSupply(), -1);
17404    }
17405    if (element.hasAdditionalMonitoringIndicator()) {
17406      composeCodeableConcept(t, "MedicinalProductDefinition", "additionalMonitoringIndicator", element.getAdditionalMonitoringIndicator(), -1);
17407    }
17408    for (int i = 0; i < element.getSpecialMeasures().size(); i++) {
17409      composeCodeableConcept(t, "MedicinalProductDefinition", "specialMeasures", element.getSpecialMeasures().get(i), i);
17410    }
17411    if (element.hasPediatricUseIndicator()) {
17412      composeCodeableConcept(t, "MedicinalProductDefinition", "pediatricUseIndicator", element.getPediatricUseIndicator(), -1);
17413    }
17414    for (int i = 0; i < element.getClassification().size(); i++) {
17415      composeCodeableConcept(t, "MedicinalProductDefinition", "classification", element.getClassification().get(i), i);
17416    }
17417    for (int i = 0; i < element.getMarketingStatus().size(); i++) {
17418      composeMarketingStatus(t, "MedicinalProductDefinition", "marketingStatus", element.getMarketingStatus().get(i), i);
17419    }
17420    for (int i = 0; i < element.getPackagedMedicinalProduct().size(); i++) {
17421      composeCodeableConcept(t, "MedicinalProductDefinition", "packagedMedicinalProduct", element.getPackagedMedicinalProduct().get(i), i);
17422    }
17423    for (int i = 0; i < element.getComprisedOf().size(); i++) {
17424      composeReference(t, "MedicinalProductDefinition", "comprisedOf", element.getComprisedOf().get(i), i);
17425    }
17426    for (int i = 0; i < element.getIngredient().size(); i++) {
17427      composeCodeableConcept(t, "MedicinalProductDefinition", "ingredient", element.getIngredient().get(i), i);
17428    }
17429    for (int i = 0; i < element.getImpurity().size(); i++) {
17430      composeCodeableReference(t, "MedicinalProductDefinition", "impurity", element.getImpurity().get(i), i);
17431    }
17432    for (int i = 0; i < element.getAttachedDocument().size(); i++) {
17433      composeReference(t, "MedicinalProductDefinition", "attachedDocument", element.getAttachedDocument().get(i), i);
17434    }
17435    for (int i = 0; i < element.getMasterFile().size(); i++) {
17436      composeReference(t, "MedicinalProductDefinition", "masterFile", element.getMasterFile().get(i), i);
17437    }
17438    for (int i = 0; i < element.getContact().size(); i++) {
17439      composeMedicinalProductDefinitionContactComponent(t, "MedicinalProductDefinition", "contact", element.getContact().get(i), i);
17440    }
17441    for (int i = 0; i < element.getClinicalTrial().size(); i++) {
17442      composeReference(t, "MedicinalProductDefinition", "clinicalTrial", element.getClinicalTrial().get(i), i);
17443    }
17444    for (int i = 0; i < element.getCode().size(); i++) {
17445      composeCoding(t, "MedicinalProductDefinition", "code", element.getCode().get(i), i);
17446    }
17447    for (int i = 0; i < element.getName().size(); i++) {
17448      composeMedicinalProductDefinitionNameComponent(t, "MedicinalProductDefinition", "name", element.getName().get(i), i);
17449    }
17450    for (int i = 0; i < element.getCrossReference().size(); i++) {
17451      composeMedicinalProductDefinitionCrossReferenceComponent(t, "MedicinalProductDefinition", "crossReference", element.getCrossReference().get(i), i);
17452    }
17453    for (int i = 0; i < element.getOperation().size(); i++) {
17454      composeMedicinalProductDefinitionOperationComponent(t, "MedicinalProductDefinition", "operation", element.getOperation().get(i), i);
17455    }
17456    for (int i = 0; i < element.getCharacteristic().size(); i++) {
17457      composeMedicinalProductDefinitionCharacteristicComponent(t, "MedicinalProductDefinition", "characteristic", element.getCharacteristic().get(i), i);
17458    }
17459  }
17460
17461  protected void composeMedicinalProductDefinitionContactComponent(Complex parent, String parentType, String name, MedicinalProductDefinition.MedicinalProductDefinitionContactComponent element, int index) {
17462    if (element == null) 
17463      return;
17464    Complex t;
17465    if (Utilities.noString(parentType))
17466      t = parent;
17467    else {
17468      t = parent.predicate("fhir:"+parentType+'.'+name);
17469    }
17470    composeBackboneElement(t, "contact", name, element, index);
17471    if (element.hasType()) {
17472      composeCodeableConcept(t, "MedicinalProductDefinitionContactComponent", "type", element.getType(), -1);
17473    }
17474    if (element.hasContact()) {
17475      composeReference(t, "MedicinalProductDefinitionContactComponent", "contact", element.getContact(), -1);
17476    }
17477  }
17478
17479  protected void composeMedicinalProductDefinitionNameComponent(Complex parent, String parentType, String name, MedicinalProductDefinition.MedicinalProductDefinitionNameComponent element, int index) {
17480    if (element == null) 
17481      return;
17482    Complex t;
17483    if (Utilities.noString(parentType))
17484      t = parent;
17485    else {
17486      t = parent.predicate("fhir:"+parentType+'.'+name);
17487    }
17488    composeBackboneElement(t, "name", name, element, index);
17489    if (element.hasProductNameElement()) {
17490      composeString(t, "MedicinalProductDefinitionNameComponent", "productName", element.getProductNameElement(), -1);
17491    }
17492    if (element.hasType()) {
17493      composeCodeableConcept(t, "MedicinalProductDefinitionNameComponent", "type", element.getType(), -1);
17494    }
17495    for (int i = 0; i < element.getPart().size(); i++) {
17496      composeMedicinalProductDefinitionNamePartComponent(t, "MedicinalProductDefinitionNameComponent", "part", element.getPart().get(i), i);
17497    }
17498    for (int i = 0; i < element.getUsage().size(); i++) {
17499      composeMedicinalProductDefinitionNameUsageComponent(t, "MedicinalProductDefinitionNameComponent", "usage", element.getUsage().get(i), i);
17500    }
17501  }
17502
17503  protected void composeMedicinalProductDefinitionNamePartComponent(Complex parent, String parentType, String name, MedicinalProductDefinition.MedicinalProductDefinitionNamePartComponent element, int index) {
17504    if (element == null) 
17505      return;
17506    Complex t;
17507    if (Utilities.noString(parentType))
17508      t = parent;
17509    else {
17510      t = parent.predicate("fhir:"+parentType+'.'+name);
17511    }
17512    composeBackboneElement(t, "part", name, element, index);
17513    if (element.hasPartElement()) {
17514      composeString(t, "MedicinalProductDefinitionNamePartComponent", "part", element.getPartElement(), -1);
17515    }
17516    if (element.hasType()) {
17517      composeCodeableConcept(t, "MedicinalProductDefinitionNamePartComponent", "type", element.getType(), -1);
17518    }
17519  }
17520
17521  protected void composeMedicinalProductDefinitionNameUsageComponent(Complex parent, String parentType, String name, MedicinalProductDefinition.MedicinalProductDefinitionNameUsageComponent element, int index) {
17522    if (element == null) 
17523      return;
17524    Complex t;
17525    if (Utilities.noString(parentType))
17526      t = parent;
17527    else {
17528      t = parent.predicate("fhir:"+parentType+'.'+name);
17529    }
17530    composeBackboneElement(t, "usage", name, element, index);
17531    if (element.hasCountry()) {
17532      composeCodeableConcept(t, "MedicinalProductDefinitionNameUsageComponent", "country", element.getCountry(), -1);
17533    }
17534    if (element.hasJurisdiction()) {
17535      composeCodeableConcept(t, "MedicinalProductDefinitionNameUsageComponent", "jurisdiction", element.getJurisdiction(), -1);
17536    }
17537    if (element.hasLanguage()) {
17538      composeCodeableConcept(t, "MedicinalProductDefinitionNameUsageComponent", "language", element.getLanguage(), -1);
17539    }
17540  }
17541
17542  protected void composeMedicinalProductDefinitionCrossReferenceComponent(Complex parent, String parentType, String name, MedicinalProductDefinition.MedicinalProductDefinitionCrossReferenceComponent element, int index) {
17543    if (element == null) 
17544      return;
17545    Complex t;
17546    if (Utilities.noString(parentType))
17547      t = parent;
17548    else {
17549      t = parent.predicate("fhir:"+parentType+'.'+name);
17550    }
17551    composeBackboneElement(t, "crossReference", name, element, index);
17552    if (element.hasProduct()) {
17553      composeCodeableReference(t, "MedicinalProductDefinitionCrossReferenceComponent", "product", element.getProduct(), -1);
17554    }
17555    if (element.hasType()) {
17556      composeCodeableConcept(t, "MedicinalProductDefinitionCrossReferenceComponent", "type", element.getType(), -1);
17557    }
17558  }
17559
17560  protected void composeMedicinalProductDefinitionOperationComponent(Complex parent, String parentType, String name, MedicinalProductDefinition.MedicinalProductDefinitionOperationComponent element, int index) {
17561    if (element == null) 
17562      return;
17563    Complex t;
17564    if (Utilities.noString(parentType))
17565      t = parent;
17566    else {
17567      t = parent.predicate("fhir:"+parentType+'.'+name);
17568    }
17569    composeBackboneElement(t, "operation", name, element, index);
17570    if (element.hasType()) {
17571      composeCodeableReference(t, "MedicinalProductDefinitionOperationComponent", "type", element.getType(), -1);
17572    }
17573    if (element.hasEffectiveDate()) {
17574      composePeriod(t, "MedicinalProductDefinitionOperationComponent", "effectiveDate", element.getEffectiveDate(), -1);
17575    }
17576    for (int i = 0; i < element.getOrganization().size(); i++) {
17577      composeReference(t, "MedicinalProductDefinitionOperationComponent", "organization", element.getOrganization().get(i), i);
17578    }
17579    if (element.hasConfidentialityIndicator()) {
17580      composeCodeableConcept(t, "MedicinalProductDefinitionOperationComponent", "confidentialityIndicator", element.getConfidentialityIndicator(), -1);
17581    }
17582  }
17583
17584  protected void composeMedicinalProductDefinitionCharacteristicComponent(Complex parent, String parentType, String name, MedicinalProductDefinition.MedicinalProductDefinitionCharacteristicComponent element, int index) {
17585    if (element == null) 
17586      return;
17587    Complex t;
17588    if (Utilities.noString(parentType))
17589      t = parent;
17590    else {
17591      t = parent.predicate("fhir:"+parentType+'.'+name);
17592    }
17593    composeBackboneElement(t, "characteristic", name, element, index);
17594    if (element.hasType()) {
17595      composeCodeableConcept(t, "MedicinalProductDefinitionCharacteristicComponent", "type", element.getType(), -1);
17596    }
17597    if (element.hasValue()) {
17598      composeType(t, "MedicinalProductDefinitionCharacteristicComponent", "value", element.getValue(), -1);
17599    }
17600  }
17601
17602  protected void composeMessageDefinition(Complex parent, String parentType, String name, MessageDefinition element, int index) {
17603    if (element == null) 
17604      return;
17605    Complex t;
17606    if (Utilities.noString(parentType))
17607      t = parent;
17608    else {
17609      t = parent.predicate("fhir:"+parentType+'.'+name);
17610    }
17611    composeCanonicalResource(t, "MessageDefinition", name, element, index);
17612    if (element.hasUrlElement()) {
17613      composeUri(t, "MessageDefinition", "url", element.getUrlElement(), -1);
17614    }
17615    for (int i = 0; i < element.getIdentifier().size(); i++) {
17616      composeIdentifier(t, "MessageDefinition", "identifier", element.getIdentifier().get(i), i);
17617    }
17618    if (element.hasVersionElement()) {
17619      composeString(t, "MessageDefinition", "version", element.getVersionElement(), -1);
17620    }
17621    if (element.hasNameElement()) {
17622      composeString(t, "MessageDefinition", "name", element.getNameElement(), -1);
17623    }
17624    if (element.hasTitleElement()) {
17625      composeString(t, "MessageDefinition", "title", element.getTitleElement(), -1);
17626    }
17627    for (int i = 0; i < element.getReplaces().size(); i++) {
17628      composeCanonical(t, "MessageDefinition", "replaces", element.getReplaces().get(i), i);
17629    }
17630    if (element.hasStatusElement()) {
17631      composeEnum(t, "MessageDefinition", "status", element.getStatusElement(), -1);
17632    }
17633    if (element.hasExperimentalElement()) {
17634      composeBoolean(t, "MessageDefinition", "experimental", element.getExperimentalElement(), -1);
17635    }
17636    if (element.hasDateElement()) {
17637      composeDateTime(t, "MessageDefinition", "date", element.getDateElement(), -1);
17638    }
17639    if (element.hasPublisherElement()) {
17640      composeString(t, "MessageDefinition", "publisher", element.getPublisherElement(), -1);
17641    }
17642    for (int i = 0; i < element.getContact().size(); i++) {
17643      composeContactDetail(t, "MessageDefinition", "contact", element.getContact().get(i), i);
17644    }
17645    if (element.hasDescriptionElement()) {
17646      composeMarkdown(t, "MessageDefinition", "description", element.getDescriptionElement(), -1);
17647    }
17648    for (int i = 0; i < element.getUseContext().size(); i++) {
17649      composeUsageContext(t, "MessageDefinition", "useContext", element.getUseContext().get(i), i);
17650    }
17651    for (int i = 0; i < element.getJurisdiction().size(); i++) {
17652      composeCodeableConcept(t, "MessageDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
17653    }
17654    if (element.hasPurposeElement()) {
17655      composeMarkdown(t, "MessageDefinition", "purpose", element.getPurposeElement(), -1);
17656    }
17657    if (element.hasCopyrightElement()) {
17658      composeMarkdown(t, "MessageDefinition", "copyright", element.getCopyrightElement(), -1);
17659    }
17660    if (element.hasBaseElement()) {
17661      composeCanonical(t, "MessageDefinition", "base", element.getBaseElement(), -1);
17662    }
17663    for (int i = 0; i < element.getParent().size(); i++) {
17664      composeCanonical(t, "MessageDefinition", "parent", element.getParent().get(i), i);
17665    }
17666    if (element.hasEvent()) {
17667      composeType(t, "MessageDefinition", "event", element.getEvent(), -1);
17668    }
17669    if (element.hasCategoryElement()) {
17670      composeEnum(t, "MessageDefinition", "category", element.getCategoryElement(), -1);
17671    }
17672    for (int i = 0; i < element.getFocus().size(); i++) {
17673      composeMessageDefinitionFocusComponent(t, "MessageDefinition", "focus", element.getFocus().get(i), i);
17674    }
17675    if (element.hasResponseRequiredElement()) {
17676      composeEnum(t, "MessageDefinition", "responseRequired", element.getResponseRequiredElement(), -1);
17677    }
17678    for (int i = 0; i < element.getAllowedResponse().size(); i++) {
17679      composeMessageDefinitionAllowedResponseComponent(t, "MessageDefinition", "allowedResponse", element.getAllowedResponse().get(i), i);
17680    }
17681    if (element.hasGraphElement()) {
17682      composeCanonical(t, "MessageDefinition", "graph", element.getGraphElement(), -1);
17683    }
17684  }
17685
17686  protected void composeMessageDefinitionFocusComponent(Complex parent, String parentType, String name, MessageDefinition.MessageDefinitionFocusComponent element, int index) {
17687    if (element == null) 
17688      return;
17689    Complex t;
17690    if (Utilities.noString(parentType))
17691      t = parent;
17692    else {
17693      t = parent.predicate("fhir:"+parentType+'.'+name);
17694    }
17695    composeBackboneElement(t, "focus", name, element, index);
17696    if (element.hasCodeElement()) {
17697      composeCode(t, "MessageDefinitionFocusComponent", "code", element.getCodeElement(), -1);
17698    }
17699    if (element.hasProfileElement()) {
17700      composeCanonical(t, "MessageDefinitionFocusComponent", "profile", element.getProfileElement(), -1);
17701    }
17702    if (element.hasMinElement()) {
17703      composeUnsignedInt(t, "MessageDefinitionFocusComponent", "min", element.getMinElement(), -1);
17704    }
17705    if (element.hasMaxElement()) {
17706      composeString(t, "MessageDefinitionFocusComponent", "max", element.getMaxElement(), -1);
17707    }
17708  }
17709
17710  protected void composeMessageDefinitionAllowedResponseComponent(Complex parent, String parentType, String name, MessageDefinition.MessageDefinitionAllowedResponseComponent element, int index) {
17711    if (element == null) 
17712      return;
17713    Complex t;
17714    if (Utilities.noString(parentType))
17715      t = parent;
17716    else {
17717      t = parent.predicate("fhir:"+parentType+'.'+name);
17718    }
17719    composeBackboneElement(t, "allowedResponse", name, element, index);
17720    if (element.hasMessageElement()) {
17721      composeCanonical(t, "MessageDefinitionAllowedResponseComponent", "message", element.getMessageElement(), -1);
17722    }
17723    if (element.hasSituationElement()) {
17724      composeMarkdown(t, "MessageDefinitionAllowedResponseComponent", "situation", element.getSituationElement(), -1);
17725    }
17726  }
17727
17728  protected void composeMessageHeader(Complex parent, String parentType, String name, MessageHeader element, int index) {
17729    if (element == null) 
17730      return;
17731    Complex t;
17732    if (Utilities.noString(parentType))
17733      t = parent;
17734    else {
17735      t = parent.predicate("fhir:"+parentType+'.'+name);
17736    }
17737    composeDomainResource(t, "MessageHeader", name, element, index);
17738    if (element.hasEvent()) {
17739      composeType(t, "MessageHeader", "event", element.getEvent(), -1);
17740    }
17741    for (int i = 0; i < element.getDestination().size(); i++) {
17742      composeMessageHeaderMessageDestinationComponent(t, "MessageHeader", "destination", element.getDestination().get(i), i);
17743    }
17744    if (element.hasSender()) {
17745      composeReference(t, "MessageHeader", "sender", element.getSender(), -1);
17746    }
17747    if (element.hasEnterer()) {
17748      composeReference(t, "MessageHeader", "enterer", element.getEnterer(), -1);
17749    }
17750    if (element.hasAuthor()) {
17751      composeReference(t, "MessageHeader", "author", element.getAuthor(), -1);
17752    }
17753    if (element.hasSource()) {
17754      composeMessageHeaderMessageSourceComponent(t, "MessageHeader", "source", element.getSource(), -1);
17755    }
17756    if (element.hasResponsible()) {
17757      composeReference(t, "MessageHeader", "responsible", element.getResponsible(), -1);
17758    }
17759    if (element.hasReason()) {
17760      composeCodeableConcept(t, "MessageHeader", "reason", element.getReason(), -1);
17761    }
17762    if (element.hasResponse()) {
17763      composeMessageHeaderResponseComponent(t, "MessageHeader", "response", element.getResponse(), -1);
17764    }
17765    for (int i = 0; i < element.getFocus().size(); i++) {
17766      composeReference(t, "MessageHeader", "focus", element.getFocus().get(i), i);
17767    }
17768    if (element.hasDefinitionElement()) {
17769      composeCanonical(t, "MessageHeader", "definition", element.getDefinitionElement(), -1);
17770    }
17771  }
17772
17773  protected void composeMessageHeaderMessageDestinationComponent(Complex parent, String parentType, String name, MessageHeader.MessageDestinationComponent element, int index) {
17774    if (element == null) 
17775      return;
17776    Complex t;
17777    if (Utilities.noString(parentType))
17778      t = parent;
17779    else {
17780      t = parent.predicate("fhir:"+parentType+'.'+name);
17781    }
17782    composeBackboneElement(t, "destination", name, element, index);
17783    if (element.hasNameElement()) {
17784      composeString(t, "MessageDestinationComponent", "name", element.getNameElement(), -1);
17785    }
17786    if (element.hasTarget()) {
17787      composeReference(t, "MessageDestinationComponent", "target", element.getTarget(), -1);
17788    }
17789    if (element.hasEndpointElement()) {
17790      composeUrl(t, "MessageDestinationComponent", "endpoint", element.getEndpointElement(), -1);
17791    }
17792    if (element.hasReceiver()) {
17793      composeReference(t, "MessageDestinationComponent", "receiver", element.getReceiver(), -1);
17794    }
17795  }
17796
17797  protected void composeMessageHeaderMessageSourceComponent(Complex parent, String parentType, String name, MessageHeader.MessageSourceComponent element, int index) {
17798    if (element == null) 
17799      return;
17800    Complex t;
17801    if (Utilities.noString(parentType))
17802      t = parent;
17803    else {
17804      t = parent.predicate("fhir:"+parentType+'.'+name);
17805    }
17806    composeBackboneElement(t, "source", name, element, index);
17807    if (element.hasNameElement()) {
17808      composeString(t, "MessageSourceComponent", "name", element.getNameElement(), -1);
17809    }
17810    if (element.hasSoftwareElement()) {
17811      composeString(t, "MessageSourceComponent", "software", element.getSoftwareElement(), -1);
17812    }
17813    if (element.hasVersionElement()) {
17814      composeString(t, "MessageSourceComponent", "version", element.getVersionElement(), -1);
17815    }
17816    if (element.hasContact()) {
17817      composeContactPoint(t, "MessageSourceComponent", "contact", element.getContact(), -1);
17818    }
17819    if (element.hasEndpointElement()) {
17820      composeUrl(t, "MessageSourceComponent", "endpoint", element.getEndpointElement(), -1);
17821    }
17822  }
17823
17824  protected void composeMessageHeaderResponseComponent(Complex parent, String parentType, String name, MessageHeader.MessageHeaderResponseComponent element, int index) {
17825    if (element == null) 
17826      return;
17827    Complex t;
17828    if (Utilities.noString(parentType))
17829      t = parent;
17830    else {
17831      t = parent.predicate("fhir:"+parentType+'.'+name);
17832    }
17833    composeBackboneElement(t, "response", name, element, index);
17834    if (element.hasIdentifier()) {
17835      composeIdentifier(t, "MessageHeaderResponseComponent", "identifier", element.getIdentifier(), -1);
17836    }
17837    if (element.hasCodeElement()) {
17838      composeEnum(t, "MessageHeaderResponseComponent", "code", element.getCodeElement(), -1);
17839    }
17840    if (element.hasDetails()) {
17841      composeReference(t, "MessageHeaderResponseComponent", "details", element.getDetails(), -1);
17842    }
17843  }
17844
17845  protected void composeMolecularSequence(Complex parent, String parentType, String name, MolecularSequence element, int index) {
17846    if (element == null) 
17847      return;
17848    Complex t;
17849    if (Utilities.noString(parentType))
17850      t = parent;
17851    else {
17852      t = parent.predicate("fhir:"+parentType+'.'+name);
17853    }
17854    composeDomainResource(t, "MolecularSequence", name, element, index);
17855    for (int i = 0; i < element.getIdentifier().size(); i++) {
17856      composeIdentifier(t, "MolecularSequence", "identifier", element.getIdentifier().get(i), i);
17857    }
17858    if (element.hasTypeElement()) {
17859      composeEnum(t, "MolecularSequence", "type", element.getTypeElement(), -1);
17860    }
17861    if (element.hasSubject()) {
17862      composeReference(t, "MolecularSequence", "subject", element.getSubject(), -1);
17863    }
17864    if (element.hasSpecimen()) {
17865      composeReference(t, "MolecularSequence", "specimen", element.getSpecimen(), -1);
17866    }
17867    if (element.hasDevice()) {
17868      composeReference(t, "MolecularSequence", "device", element.getDevice(), -1);
17869    }
17870    if (element.hasPerformer()) {
17871      composeReference(t, "MolecularSequence", "performer", element.getPerformer(), -1);
17872    }
17873    if (element.hasLiteralElement()) {
17874      composeString(t, "MolecularSequence", "literal", element.getLiteralElement(), -1);
17875    }
17876    for (int i = 0; i < element.getFormatted().size(); i++) {
17877      composeAttachment(t, "MolecularSequence", "formatted", element.getFormatted().get(i), i);
17878    }
17879    for (int i = 0; i < element.getRelative().size(); i++) {
17880      composeMolecularSequenceRelativeComponent(t, "MolecularSequence", "relative", element.getRelative().get(i), i);
17881    }
17882  }
17883
17884  protected void composeMolecularSequenceRelativeComponent(Complex parent, String parentType, String name, MolecularSequence.MolecularSequenceRelativeComponent element, int index) {
17885    if (element == null) 
17886      return;
17887    Complex t;
17888    if (Utilities.noString(parentType))
17889      t = parent;
17890    else {
17891      t = parent.predicate("fhir:"+parentType+'.'+name);
17892    }
17893    composeBackboneElement(t, "relative", name, element, index);
17894    if (element.hasCoordinateSystem()) {
17895      composeCodeableConcept(t, "MolecularSequenceRelativeComponent", "coordinateSystem", element.getCoordinateSystem(), -1);
17896    }
17897    if (element.hasOrdinalPositionElement()) {
17898      composeInteger(t, "MolecularSequenceRelativeComponent", "ordinalPosition", element.getOrdinalPositionElement(), -1);
17899    }
17900    if (element.hasSequenceRange()) {
17901      composeRange(t, "MolecularSequenceRelativeComponent", "sequenceRange", element.getSequenceRange(), -1);
17902    }
17903    if (element.hasStartingSequence()) {
17904      composeMolecularSequenceRelativeStartingSequenceComponent(t, "MolecularSequenceRelativeComponent", "startingSequence", element.getStartingSequence(), -1);
17905    }
17906    for (int i = 0; i < element.getEdit().size(); i++) {
17907      composeMolecularSequenceRelativeEditComponent(t, "MolecularSequenceRelativeComponent", "edit", element.getEdit().get(i), i);
17908    }
17909  }
17910
17911  protected void composeMolecularSequenceRelativeStartingSequenceComponent(Complex parent, String parentType, String name, MolecularSequence.MolecularSequenceRelativeStartingSequenceComponent element, int index) {
17912    if (element == null) 
17913      return;
17914    Complex t;
17915    if (Utilities.noString(parentType))
17916      t = parent;
17917    else {
17918      t = parent.predicate("fhir:"+parentType+'.'+name);
17919    }
17920    composeBackboneElement(t, "startingSequence", name, element, index);
17921    if (element.hasGenomeAssembly()) {
17922      composeCodeableConcept(t, "MolecularSequenceRelativeStartingSequenceComponent", "genomeAssembly", element.getGenomeAssembly(), -1);
17923    }
17924    if (element.hasChromosome()) {
17925      composeCodeableConcept(t, "MolecularSequenceRelativeStartingSequenceComponent", "chromosome", element.getChromosome(), -1);
17926    }
17927    if (element.hasSequence()) {
17928      composeType(t, "MolecularSequenceRelativeStartingSequenceComponent", "sequence", element.getSequence(), -1);
17929    }
17930    if (element.hasWindowStartElement()) {
17931      composeInteger(t, "MolecularSequenceRelativeStartingSequenceComponent", "windowStart", element.getWindowStartElement(), -1);
17932    }
17933    if (element.hasWindowEndElement()) {
17934      composeInteger(t, "MolecularSequenceRelativeStartingSequenceComponent", "windowEnd", element.getWindowEndElement(), -1);
17935    }
17936    if (element.hasOrientationElement()) {
17937      composeEnum(t, "MolecularSequenceRelativeStartingSequenceComponent", "orientation", element.getOrientationElement(), -1);
17938    }
17939    if (element.hasStrandElement()) {
17940      composeEnum(t, "MolecularSequenceRelativeStartingSequenceComponent", "strand", element.getStrandElement(), -1);
17941    }
17942  }
17943
17944  protected void composeMolecularSequenceRelativeEditComponent(Complex parent, String parentType, String name, MolecularSequence.MolecularSequenceRelativeEditComponent element, int index) {
17945    if (element == null) 
17946      return;
17947    Complex t;
17948    if (Utilities.noString(parentType))
17949      t = parent;
17950    else {
17951      t = parent.predicate("fhir:"+parentType+'.'+name);
17952    }
17953    composeBackboneElement(t, "edit", name, element, index);
17954    if (element.hasStartElement()) {
17955      composeInteger(t, "MolecularSequenceRelativeEditComponent", "start", element.getStartElement(), -1);
17956    }
17957    if (element.hasEndElement()) {
17958      composeInteger(t, "MolecularSequenceRelativeEditComponent", "end", element.getEndElement(), -1);
17959    }
17960    if (element.hasReplacementSequenceElement()) {
17961      composeString(t, "MolecularSequenceRelativeEditComponent", "replacementSequence", element.getReplacementSequenceElement(), -1);
17962    }
17963    if (element.hasReplacedSequenceElement()) {
17964      composeString(t, "MolecularSequenceRelativeEditComponent", "replacedSequence", element.getReplacedSequenceElement(), -1);
17965    }
17966  }
17967
17968  protected void composeNamingSystem(Complex parent, String parentType, String name, NamingSystem element, int index) {
17969    if (element == null) 
17970      return;
17971    Complex t;
17972    if (Utilities.noString(parentType))
17973      t = parent;
17974    else {
17975      t = parent.predicate("fhir:"+parentType+'.'+name);
17976    }
17977    composeMetadataResource(t, "NamingSystem", name, element, index);
17978    if (element.hasUrlElement()) {
17979      composeUri(t, "NamingSystem", "url", element.getUrlElement(), -1);
17980    }
17981    for (int i = 0; i < element.getIdentifier().size(); i++) {
17982      composeIdentifier(t, "NamingSystem", "identifier", element.getIdentifier().get(i), i);
17983    }
17984    if (element.hasVersionElement()) {
17985      composeString(t, "NamingSystem", "version", element.getVersionElement(), -1);
17986    }
17987    if (element.hasNameElement()) {
17988      composeString(t, "NamingSystem", "name", element.getNameElement(), -1);
17989    }
17990    if (element.hasTitleElement()) {
17991      composeString(t, "NamingSystem", "title", element.getTitleElement(), -1);
17992    }
17993    if (element.hasStatusElement()) {
17994      composeEnum(t, "NamingSystem", "status", element.getStatusElement(), -1);
17995    }
17996    if (element.hasKindElement()) {
17997      composeEnum(t, "NamingSystem", "kind", element.getKindElement(), -1);
17998    }
17999    if (element.hasExperimentalElement()) {
18000      composeBoolean(t, "NamingSystem", "experimental", element.getExperimentalElement(), -1);
18001    }
18002    if (element.hasDateElement()) {
18003      composeDateTime(t, "NamingSystem", "date", element.getDateElement(), -1);
18004    }
18005    if (element.hasPublisherElement()) {
18006      composeString(t, "NamingSystem", "publisher", element.getPublisherElement(), -1);
18007    }
18008    for (int i = 0; i < element.getContact().size(); i++) {
18009      composeContactDetail(t, "NamingSystem", "contact", element.getContact().get(i), i);
18010    }
18011    if (element.hasResponsibleElement()) {
18012      composeString(t, "NamingSystem", "responsible", element.getResponsibleElement(), -1);
18013    }
18014    if (element.hasType()) {
18015      composeCodeableConcept(t, "NamingSystem", "type", element.getType(), -1);
18016    }
18017    if (element.hasDescriptionElement()) {
18018      composeMarkdown(t, "NamingSystem", "description", element.getDescriptionElement(), -1);
18019    }
18020    for (int i = 0; i < element.getUseContext().size(); i++) {
18021      composeUsageContext(t, "NamingSystem", "useContext", element.getUseContext().get(i), i);
18022    }
18023    for (int i = 0; i < element.getJurisdiction().size(); i++) {
18024      composeCodeableConcept(t, "NamingSystem", "jurisdiction", element.getJurisdiction().get(i), i);
18025    }
18026    if (element.hasPurposeElement()) {
18027      composeMarkdown(t, "NamingSystem", "purpose", element.getPurposeElement(), -1);
18028    }
18029    if (element.hasCopyrightElement()) {
18030      composeMarkdown(t, "NamingSystem", "copyright", element.getCopyrightElement(), -1);
18031    }
18032    if (element.hasApprovalDateElement()) {
18033      composeDate(t, "NamingSystem", "approvalDate", element.getApprovalDateElement(), -1);
18034    }
18035    if (element.hasLastReviewDateElement()) {
18036      composeDate(t, "NamingSystem", "lastReviewDate", element.getLastReviewDateElement(), -1);
18037    }
18038    if (element.hasEffectivePeriod()) {
18039      composePeriod(t, "NamingSystem", "effectivePeriod", element.getEffectivePeriod(), -1);
18040    }
18041    for (int i = 0; i < element.getTopic().size(); i++) {
18042      composeCodeableConcept(t, "NamingSystem", "topic", element.getTopic().get(i), i);
18043    }
18044    for (int i = 0; i < element.getAuthor().size(); i++) {
18045      composeContactDetail(t, "NamingSystem", "author", element.getAuthor().get(i), i);
18046    }
18047    for (int i = 0; i < element.getEditor().size(); i++) {
18048      composeContactDetail(t, "NamingSystem", "editor", element.getEditor().get(i), i);
18049    }
18050    for (int i = 0; i < element.getReviewer().size(); i++) {
18051      composeContactDetail(t, "NamingSystem", "reviewer", element.getReviewer().get(i), i);
18052    }
18053    for (int i = 0; i < element.getEndorser().size(); i++) {
18054      composeContactDetail(t, "NamingSystem", "endorser", element.getEndorser().get(i), i);
18055    }
18056    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
18057      composeRelatedArtifact(t, "NamingSystem", "relatedArtifact", element.getRelatedArtifact().get(i), i);
18058    }
18059    if (element.hasUsageElement()) {
18060      composeString(t, "NamingSystem", "usage", element.getUsageElement(), -1);
18061    }
18062    for (int i = 0; i < element.getUniqueId().size(); i++) {
18063      composeNamingSystemUniqueIdComponent(t, "NamingSystem", "uniqueId", element.getUniqueId().get(i), i);
18064    }
18065  }
18066
18067  protected void composeNamingSystemUniqueIdComponent(Complex parent, String parentType, String name, NamingSystem.NamingSystemUniqueIdComponent element, int index) {
18068    if (element == null) 
18069      return;
18070    Complex t;
18071    if (Utilities.noString(parentType))
18072      t = parent;
18073    else {
18074      t = parent.predicate("fhir:"+parentType+'.'+name);
18075    }
18076    composeBackboneElement(t, "uniqueId", name, element, index);
18077    if (element.hasTypeElement()) {
18078      composeEnum(t, "NamingSystemUniqueIdComponent", "type", element.getTypeElement(), -1);
18079    }
18080    if (element.hasValueElement()) {
18081      composeString(t, "NamingSystemUniqueIdComponent", "value", element.getValueElement(), -1);
18082    }
18083    if (element.hasPreferredElement()) {
18084      composeBoolean(t, "NamingSystemUniqueIdComponent", "preferred", element.getPreferredElement(), -1);
18085    }
18086    if (element.hasCommentElement()) {
18087      composeString(t, "NamingSystemUniqueIdComponent", "comment", element.getCommentElement(), -1);
18088    }
18089    if (element.hasPeriod()) {
18090      composePeriod(t, "NamingSystemUniqueIdComponent", "period", element.getPeriod(), -1);
18091    }
18092    if (element.hasAuthoritativeElement()) {
18093      composeBoolean(t, "NamingSystemUniqueIdComponent", "authoritative", element.getAuthoritativeElement(), -1);
18094    }
18095  }
18096
18097  protected void composeNutritionIntake(Complex parent, String parentType, String name, NutritionIntake element, int index) {
18098    if (element == null) 
18099      return;
18100    Complex t;
18101    if (Utilities.noString(parentType))
18102      t = parent;
18103    else {
18104      t = parent.predicate("fhir:"+parentType+'.'+name);
18105    }
18106    composeDomainResource(t, "NutritionIntake", name, element, index);
18107    for (int i = 0; i < element.getIdentifier().size(); i++) {
18108      composeIdentifier(t, "NutritionIntake", "identifier", element.getIdentifier().get(i), i);
18109    }
18110    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
18111      composeCanonical(t, "NutritionIntake", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
18112    }
18113    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
18114      composeUri(t, "NutritionIntake", "instantiatesUri", element.getInstantiatesUri().get(i), i);
18115    }
18116    for (int i = 0; i < element.getBasedOn().size(); i++) {
18117      composeReference(t, "NutritionIntake", "basedOn", element.getBasedOn().get(i), i);
18118    }
18119    for (int i = 0; i < element.getPartOf().size(); i++) {
18120      composeReference(t, "NutritionIntake", "partOf", element.getPartOf().get(i), i);
18121    }
18122    if (element.hasStatusElement()) {
18123      composeEnum(t, "NutritionIntake", "status", element.getStatusElement(), -1);
18124    }
18125    for (int i = 0; i < element.getStatusReason().size(); i++) {
18126      composeCodeableConcept(t, "NutritionIntake", "statusReason", element.getStatusReason().get(i), i);
18127    }
18128    if (element.hasCode()) {
18129      composeCodeableConcept(t, "NutritionIntake", "code", element.getCode(), -1);
18130    }
18131    if (element.hasSubject()) {
18132      composeReference(t, "NutritionIntake", "subject", element.getSubject(), -1);
18133    }
18134    if (element.hasEncounter()) {
18135      composeReference(t, "NutritionIntake", "encounter", element.getEncounter(), -1);
18136    }
18137    if (element.hasOccurrence()) {
18138      composeType(t, "NutritionIntake", "occurrence", element.getOccurrence(), -1);
18139    }
18140    if (element.hasRecordedElement()) {
18141      composeDateTime(t, "NutritionIntake", "recorded", element.getRecordedElement(), -1);
18142    }
18143    if (element.hasReported()) {
18144      composeType(t, "NutritionIntake", "reported", element.getReported(), -1);
18145    }
18146    for (int i = 0; i < element.getConsumedItem().size(); i++) {
18147      composeNutritionIntakeConsumedItemComponent(t, "NutritionIntake", "consumedItem", element.getConsumedItem().get(i), i);
18148    }
18149    for (int i = 0; i < element.getIngredientLabel().size(); i++) {
18150      composeNutritionIntakeIngredientLabelComponent(t, "NutritionIntake", "ingredientLabel", element.getIngredientLabel().get(i), i);
18151    }
18152    for (int i = 0; i < element.getPerformer().size(); i++) {
18153      composeNutritionIntakePerformerComponent(t, "NutritionIntake", "performer", element.getPerformer().get(i), i);
18154    }
18155    if (element.hasLocation()) {
18156      composeReference(t, "NutritionIntake", "location", element.getLocation(), -1);
18157    }
18158    for (int i = 0; i < element.getDerivedFrom().size(); i++) {
18159      composeReference(t, "NutritionIntake", "derivedFrom", element.getDerivedFrom().get(i), i);
18160    }
18161    for (int i = 0; i < element.getReason().size(); i++) {
18162      composeCodeableReference(t, "NutritionIntake", "reason", element.getReason().get(i), i);
18163    }
18164    for (int i = 0; i < element.getNote().size(); i++) {
18165      composeAnnotation(t, "NutritionIntake", "note", element.getNote().get(i), i);
18166    }
18167  }
18168
18169  protected void composeNutritionIntakeConsumedItemComponent(Complex parent, String parentType, String name, NutritionIntake.NutritionIntakeConsumedItemComponent element, int index) {
18170    if (element == null) 
18171      return;
18172    Complex t;
18173    if (Utilities.noString(parentType))
18174      t = parent;
18175    else {
18176      t = parent.predicate("fhir:"+parentType+'.'+name);
18177    }
18178    composeBackboneElement(t, "consumedItem", name, element, index);
18179    if (element.hasType()) {
18180      composeCodeableConcept(t, "NutritionIntakeConsumedItemComponent", "type", element.getType(), -1);
18181    }
18182    if (element.hasNutritionProduct()) {
18183      composeCodeableReference(t, "NutritionIntakeConsumedItemComponent", "nutritionProduct", element.getNutritionProduct(), -1);
18184    }
18185    if (element.hasSchedule()) {
18186      composeTiming(t, "NutritionIntakeConsumedItemComponent", "schedule", element.getSchedule(), -1);
18187    }
18188    if (element.hasAmount()) {
18189      composeQuantity(t, "NutritionIntakeConsumedItemComponent", "amount", element.getAmount(), -1);
18190    }
18191    if (element.hasRate()) {
18192      composeQuantity(t, "NutritionIntakeConsumedItemComponent", "rate", element.getRate(), -1);
18193    }
18194    if (element.hasNotConsumedElement()) {
18195      composeBoolean(t, "NutritionIntakeConsumedItemComponent", "notConsumed", element.getNotConsumedElement(), -1);
18196    }
18197    if (element.hasNotConsumedReason()) {
18198      composeCodeableConcept(t, "NutritionIntakeConsumedItemComponent", "notConsumedReason", element.getNotConsumedReason(), -1);
18199    }
18200  }
18201
18202  protected void composeNutritionIntakeIngredientLabelComponent(Complex parent, String parentType, String name, NutritionIntake.NutritionIntakeIngredientLabelComponent element, int index) {
18203    if (element == null) 
18204      return;
18205    Complex t;
18206    if (Utilities.noString(parentType))
18207      t = parent;
18208    else {
18209      t = parent.predicate("fhir:"+parentType+'.'+name);
18210    }
18211    composeBackboneElement(t, "ingredientLabel", name, element, index);
18212    if (element.hasNutrient()) {
18213      composeCodeableReference(t, "NutritionIntakeIngredientLabelComponent", "nutrient", element.getNutrient(), -1);
18214    }
18215    if (element.hasAmount()) {
18216      composeQuantity(t, "NutritionIntakeIngredientLabelComponent", "amount", element.getAmount(), -1);
18217    }
18218  }
18219
18220  protected void composeNutritionIntakePerformerComponent(Complex parent, String parentType, String name, NutritionIntake.NutritionIntakePerformerComponent element, int index) {
18221    if (element == null) 
18222      return;
18223    Complex t;
18224    if (Utilities.noString(parentType))
18225      t = parent;
18226    else {
18227      t = parent.predicate("fhir:"+parentType+'.'+name);
18228    }
18229    composeBackboneElement(t, "performer", name, element, index);
18230    if (element.hasFunction()) {
18231      composeCodeableConcept(t, "NutritionIntakePerformerComponent", "function", element.getFunction(), -1);
18232    }
18233    if (element.hasActor()) {
18234      composeReference(t, "NutritionIntakePerformerComponent", "actor", element.getActor(), -1);
18235    }
18236  }
18237
18238  protected void composeNutritionOrder(Complex parent, String parentType, String name, NutritionOrder element, int index) {
18239    if (element == null) 
18240      return;
18241    Complex t;
18242    if (Utilities.noString(parentType))
18243      t = parent;
18244    else {
18245      t = parent.predicate("fhir:"+parentType+'.'+name);
18246    }
18247    composeDomainResource(t, "NutritionOrder", name, element, index);
18248    for (int i = 0; i < element.getIdentifier().size(); i++) {
18249      composeIdentifier(t, "NutritionOrder", "identifier", element.getIdentifier().get(i), i);
18250    }
18251    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
18252      composeCanonical(t, "NutritionOrder", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
18253    }
18254    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
18255      composeUri(t, "NutritionOrder", "instantiatesUri", element.getInstantiatesUri().get(i), i);
18256    }
18257    for (int i = 0; i < element.getInstantiates().size(); i++) {
18258      composeUri(t, "NutritionOrder", "instantiates", element.getInstantiates().get(i), i);
18259    }
18260    for (int i = 0; i < element.getBasedOn().size(); i++) {
18261      composeReference(t, "NutritionOrder", "basedOn", element.getBasedOn().get(i), i);
18262    }
18263    if (element.hasStatusElement()) {
18264      composeEnum(t, "NutritionOrder", "status", element.getStatusElement(), -1);
18265    }
18266    if (element.hasIntentElement()) {
18267      composeEnum(t, "NutritionOrder", "intent", element.getIntentElement(), -1);
18268    }
18269    if (element.hasPriorityElement()) {
18270      composeCode(t, "NutritionOrder", "priority", element.getPriorityElement(), -1);
18271    }
18272    if (element.hasSubject()) {
18273      composeReference(t, "NutritionOrder", "subject", element.getSubject(), -1);
18274    }
18275    if (element.hasEncounter()) {
18276      composeReference(t, "NutritionOrder", "encounter", element.getEncounter(), -1);
18277    }
18278    for (int i = 0; i < element.getSupportingInformation().size(); i++) {
18279      composeReference(t, "NutritionOrder", "supportingInformation", element.getSupportingInformation().get(i), i);
18280    }
18281    if (element.hasDateTimeElement()) {
18282      composeDateTime(t, "NutritionOrder", "dateTime", element.getDateTimeElement(), -1);
18283    }
18284    if (element.hasOrderer()) {
18285      composeReference(t, "NutritionOrder", "orderer", element.getOrderer(), -1);
18286    }
18287    for (int i = 0; i < element.getPerformer().size(); i++) {
18288      composeCodeableReference(t, "NutritionOrder", "performer", element.getPerformer().get(i), i);
18289    }
18290    for (int i = 0; i < element.getAllergyIntolerance().size(); i++) {
18291      composeReference(t, "NutritionOrder", "allergyIntolerance", element.getAllergyIntolerance().get(i), i);
18292    }
18293    for (int i = 0; i < element.getFoodPreferenceModifier().size(); i++) {
18294      composeCodeableConcept(t, "NutritionOrder", "foodPreferenceModifier", element.getFoodPreferenceModifier().get(i), i);
18295    }
18296    for (int i = 0; i < element.getExcludeFoodModifier().size(); i++) {
18297      composeCodeableConcept(t, "NutritionOrder", "excludeFoodModifier", element.getExcludeFoodModifier().get(i), i);
18298    }
18299    if (element.hasOutsideFoodAllowedElement()) {
18300      composeBoolean(t, "NutritionOrder", "outsideFoodAllowed", element.getOutsideFoodAllowedElement(), -1);
18301    }
18302    if (element.hasOralDiet()) {
18303      composeNutritionOrderOralDietComponent(t, "NutritionOrder", "oralDiet", element.getOralDiet(), -1);
18304    }
18305    for (int i = 0; i < element.getSupplement().size(); i++) {
18306      composeNutritionOrderSupplementComponent(t, "NutritionOrder", "supplement", element.getSupplement().get(i), i);
18307    }
18308    if (element.hasEnteralFormula()) {
18309      composeNutritionOrderEnteralFormulaComponent(t, "NutritionOrder", "enteralFormula", element.getEnteralFormula(), -1);
18310    }
18311    for (int i = 0; i < element.getNote().size(); i++) {
18312      composeAnnotation(t, "NutritionOrder", "note", element.getNote().get(i), i);
18313    }
18314  }
18315
18316  protected void composeNutritionOrderOralDietComponent(Complex parent, String parentType, String name, NutritionOrder.NutritionOrderOralDietComponent element, int index) {
18317    if (element == null) 
18318      return;
18319    Complex t;
18320    if (Utilities.noString(parentType))
18321      t = parent;
18322    else {
18323      t = parent.predicate("fhir:"+parentType+'.'+name);
18324    }
18325    composeBackboneElement(t, "oralDiet", name, element, index);
18326    for (int i = 0; i < element.getType().size(); i++) {
18327      composeCodeableConcept(t, "NutritionOrderOralDietComponent", "type", element.getType().get(i), i);
18328    }
18329    if (element.hasSchedule()) {
18330      composeNutritionOrderOralDietScheduleComponent(t, "NutritionOrderOralDietComponent", "schedule", element.getSchedule(), -1);
18331    }
18332    for (int i = 0; i < element.getNutrient().size(); i++) {
18333      composeNutritionOrderOralDietNutrientComponent(t, "NutritionOrderOralDietComponent", "nutrient", element.getNutrient().get(i), i);
18334    }
18335    for (int i = 0; i < element.getTexture().size(); i++) {
18336      composeNutritionOrderOralDietTextureComponent(t, "NutritionOrderOralDietComponent", "texture", element.getTexture().get(i), i);
18337    }
18338    for (int i = 0; i < element.getFluidConsistencyType().size(); i++) {
18339      composeCodeableConcept(t, "NutritionOrderOralDietComponent", "fluidConsistencyType", element.getFluidConsistencyType().get(i), i);
18340    }
18341    if (element.hasInstructionElement()) {
18342      composeString(t, "NutritionOrderOralDietComponent", "instruction", element.getInstructionElement(), -1);
18343    }
18344  }
18345
18346  protected void composeNutritionOrderOralDietScheduleComponent(Complex parent, String parentType, String name, NutritionOrder.OralDietScheduleComponent element, int index) {
18347    if (element == null) 
18348      return;
18349    Complex t;
18350    if (Utilities.noString(parentType))
18351      t = parent;
18352    else {
18353      t = parent.predicate("fhir:"+parentType+'.'+name);
18354    }
18355    composeBackboneElement(t, "schedule", name, element, index);
18356    for (int i = 0; i < element.getTiming().size(); i++) {
18357      composeTiming(t, "OralDietScheduleComponent", "timing", element.getTiming().get(i), i);
18358    }
18359    if (element.hasAsNeededElement()) {
18360      composeBoolean(t, "OralDietScheduleComponent", "asNeeded", element.getAsNeededElement(), -1);
18361    }
18362    if (element.hasAsNeededFor()) {
18363      composeCodeableConcept(t, "OralDietScheduleComponent", "asNeededFor", element.getAsNeededFor(), -1);
18364    }
18365  }
18366
18367  protected void composeNutritionOrderOralDietNutrientComponent(Complex parent, String parentType, String name, NutritionOrder.NutritionOrderOralDietNutrientComponent element, int index) {
18368    if (element == null) 
18369      return;
18370    Complex t;
18371    if (Utilities.noString(parentType))
18372      t = parent;
18373    else {
18374      t = parent.predicate("fhir:"+parentType+'.'+name);
18375    }
18376    composeBackboneElement(t, "nutrient", name, element, index);
18377    if (element.hasModifier()) {
18378      composeCodeableConcept(t, "NutritionOrderOralDietNutrientComponent", "modifier", element.getModifier(), -1);
18379    }
18380    if (element.hasAmount()) {
18381      composeQuantity(t, "NutritionOrderOralDietNutrientComponent", "amount", element.getAmount(), -1);
18382    }
18383  }
18384
18385  protected void composeNutritionOrderOralDietTextureComponent(Complex parent, String parentType, String name, NutritionOrder.NutritionOrderOralDietTextureComponent element, int index) {
18386    if (element == null) 
18387      return;
18388    Complex t;
18389    if (Utilities.noString(parentType))
18390      t = parent;
18391    else {
18392      t = parent.predicate("fhir:"+parentType+'.'+name);
18393    }
18394    composeBackboneElement(t, "texture", name, element, index);
18395    if (element.hasModifier()) {
18396      composeCodeableConcept(t, "NutritionOrderOralDietTextureComponent", "modifier", element.getModifier(), -1);
18397    }
18398    if (element.hasFoodType()) {
18399      composeCodeableConcept(t, "NutritionOrderOralDietTextureComponent", "foodType", element.getFoodType(), -1);
18400    }
18401  }
18402
18403  protected void composeNutritionOrderSupplementComponent(Complex parent, String parentType, String name, NutritionOrder.NutritionOrderSupplementComponent element, int index) {
18404    if (element == null) 
18405      return;
18406    Complex t;
18407    if (Utilities.noString(parentType))
18408      t = parent;
18409    else {
18410      t = parent.predicate("fhir:"+parentType+'.'+name);
18411    }
18412    composeBackboneElement(t, "supplement", name, element, index);
18413    if (element.hasType()) {
18414      composeCodeableReference(t, "NutritionOrderSupplementComponent", "type", element.getType(), -1);
18415    }
18416    if (element.hasProductNameElement()) {
18417      composeString(t, "NutritionOrderSupplementComponent", "productName", element.getProductNameElement(), -1);
18418    }
18419    if (element.hasSchedule()) {
18420      composeNutritionOrderSupplementScheduleComponent(t, "NutritionOrderSupplementComponent", "schedule", element.getSchedule(), -1);
18421    }
18422    if (element.hasQuantity()) {
18423      composeQuantity(t, "NutritionOrderSupplementComponent", "quantity", element.getQuantity(), -1);
18424    }
18425    if (element.hasInstructionElement()) {
18426      composeString(t, "NutritionOrderSupplementComponent", "instruction", element.getInstructionElement(), -1);
18427    }
18428  }
18429
18430  protected void composeNutritionOrderSupplementScheduleComponent(Complex parent, String parentType, String name, NutritionOrder.SupplementScheduleComponent element, int index) {
18431    if (element == null) 
18432      return;
18433    Complex t;
18434    if (Utilities.noString(parentType))
18435      t = parent;
18436    else {
18437      t = parent.predicate("fhir:"+parentType+'.'+name);
18438    }
18439    composeBackboneElement(t, "schedule", name, element, index);
18440    for (int i = 0; i < element.getTiming().size(); i++) {
18441      composeTiming(t, "SupplementScheduleComponent", "timing", element.getTiming().get(i), i);
18442    }
18443    if (element.hasAsNeededElement()) {
18444      composeBoolean(t, "SupplementScheduleComponent", "asNeeded", element.getAsNeededElement(), -1);
18445    }
18446    if (element.hasAsNeededFor()) {
18447      composeCodeableConcept(t, "SupplementScheduleComponent", "asNeededFor", element.getAsNeededFor(), -1);
18448    }
18449  }
18450
18451  protected void composeNutritionOrderEnteralFormulaComponent(Complex parent, String parentType, String name, NutritionOrder.NutritionOrderEnteralFormulaComponent element, int index) {
18452    if (element == null) 
18453      return;
18454    Complex t;
18455    if (Utilities.noString(parentType))
18456      t = parent;
18457    else {
18458      t = parent.predicate("fhir:"+parentType+'.'+name);
18459    }
18460    composeBackboneElement(t, "enteralFormula", name, element, index);
18461    if (element.hasBaseFormulaType()) {
18462      composeCodeableReference(t, "NutritionOrderEnteralFormulaComponent", "baseFormulaType", element.getBaseFormulaType(), -1);
18463    }
18464    if (element.hasBaseFormulaProductNameElement()) {
18465      composeString(t, "NutritionOrderEnteralFormulaComponent", "baseFormulaProductName", element.getBaseFormulaProductNameElement(), -1);
18466    }
18467    for (int i = 0; i < element.getDeliveryDevice().size(); i++) {
18468      composeCodeableReference(t, "NutritionOrderEnteralFormulaComponent", "deliveryDevice", element.getDeliveryDevice().get(i), i);
18469    }
18470    for (int i = 0; i < element.getAdditive().size(); i++) {
18471      composeNutritionOrderEnteralFormulaAdditiveComponent(t, "NutritionOrderEnteralFormulaComponent", "additive", element.getAdditive().get(i), i);
18472    }
18473    if (element.hasCaloricDensity()) {
18474      composeQuantity(t, "NutritionOrderEnteralFormulaComponent", "caloricDensity", element.getCaloricDensity(), -1);
18475    }
18476    if (element.hasRouteOfAdministration()) {
18477      composeCodeableConcept(t, "NutritionOrderEnteralFormulaComponent", "routeOfAdministration", element.getRouteOfAdministration(), -1);
18478    }
18479    for (int i = 0; i < element.getAdministration().size(); i++) {
18480      composeNutritionOrderEnteralFormulaAdministrationComponent(t, "NutritionOrderEnteralFormulaComponent", "administration", element.getAdministration().get(i), i);
18481    }
18482    if (element.hasMaxVolumeToDeliver()) {
18483      composeQuantity(t, "NutritionOrderEnteralFormulaComponent", "maxVolumeToDeliver", element.getMaxVolumeToDeliver(), -1);
18484    }
18485    if (element.hasAdministrationInstructionElement()) {
18486      composeString(t, "NutritionOrderEnteralFormulaComponent", "administrationInstruction", element.getAdministrationInstructionElement(), -1);
18487    }
18488  }
18489
18490  protected void composeNutritionOrderEnteralFormulaAdditiveComponent(Complex parent, String parentType, String name, NutritionOrder.NutritionOrderEnteralFormulaAdditiveComponent element, int index) {
18491    if (element == null) 
18492      return;
18493    Complex t;
18494    if (Utilities.noString(parentType))
18495      t = parent;
18496    else {
18497      t = parent.predicate("fhir:"+parentType+'.'+name);
18498    }
18499    composeBackboneElement(t, "additive", name, element, index);
18500    if (element.hasType()) {
18501      composeCodeableReference(t, "NutritionOrderEnteralFormulaAdditiveComponent", "type", element.getType(), -1);
18502    }
18503    if (element.hasProductNameElement()) {
18504      composeString(t, "NutritionOrderEnteralFormulaAdditiveComponent", "productName", element.getProductNameElement(), -1);
18505    }
18506    if (element.hasQuantity()) {
18507      composeQuantity(t, "NutritionOrderEnteralFormulaAdditiveComponent", "quantity", element.getQuantity(), -1);
18508    }
18509  }
18510
18511  protected void composeNutritionOrderEnteralFormulaAdministrationComponent(Complex parent, String parentType, String name, NutritionOrder.NutritionOrderEnteralFormulaAdministrationComponent element, int index) {
18512    if (element == null) 
18513      return;
18514    Complex t;
18515    if (Utilities.noString(parentType))
18516      t = parent;
18517    else {
18518      t = parent.predicate("fhir:"+parentType+'.'+name);
18519    }
18520    composeBackboneElement(t, "administration", name, element, index);
18521    if (element.hasSchedule()) {
18522      composeNutritionOrderEnteralFormulaScheduleComponent(t, "NutritionOrderEnteralFormulaAdministrationComponent", "schedule", element.getSchedule(), -1);
18523    }
18524    if (element.hasQuantity()) {
18525      composeQuantity(t, "NutritionOrderEnteralFormulaAdministrationComponent", "quantity", element.getQuantity(), -1);
18526    }
18527    if (element.hasRate()) {
18528      composeType(t, "NutritionOrderEnteralFormulaAdministrationComponent", "rate", element.getRate(), -1);
18529    }
18530  }
18531
18532  protected void composeNutritionOrderEnteralFormulaScheduleComponent(Complex parent, String parentType, String name, NutritionOrder.EnteralFormulaScheduleComponent element, int index) {
18533    if (element == null) 
18534      return;
18535    Complex t;
18536    if (Utilities.noString(parentType))
18537      t = parent;
18538    else {
18539      t = parent.predicate("fhir:"+parentType+'.'+name);
18540    }
18541    composeBackboneElement(t, "schedule", name, element, index);
18542    for (int i = 0; i < element.getTiming().size(); i++) {
18543      composeTiming(t, "EnteralFormulaScheduleComponent", "timing", element.getTiming().get(i), i);
18544    }
18545    if (element.hasAsNeededElement()) {
18546      composeBoolean(t, "EnteralFormulaScheduleComponent", "asNeeded", element.getAsNeededElement(), -1);
18547    }
18548    if (element.hasAsNeededFor()) {
18549      composeCodeableConcept(t, "EnteralFormulaScheduleComponent", "asNeededFor", element.getAsNeededFor(), -1);
18550    }
18551  }
18552
18553  protected void composeNutritionProduct(Complex parent, String parentType, String name, NutritionProduct element, int index) {
18554    if (element == null) 
18555      return;
18556    Complex t;
18557    if (Utilities.noString(parentType))
18558      t = parent;
18559    else {
18560      t = parent.predicate("fhir:"+parentType+'.'+name);
18561    }
18562    composeDomainResource(t, "NutritionProduct", name, element, index);
18563    if (element.hasCode()) {
18564      composeCodeableConcept(t, "NutritionProduct", "code", element.getCode(), -1);
18565    }
18566    if (element.hasStatusElement()) {
18567      composeEnum(t, "NutritionProduct", "status", element.getStatusElement(), -1);
18568    }
18569    for (int i = 0; i < element.getCategory().size(); i++) {
18570      composeCodeableConcept(t, "NutritionProduct", "category", element.getCategory().get(i), i);
18571    }
18572    for (int i = 0; i < element.getManufacturer().size(); i++) {
18573      composeReference(t, "NutritionProduct", "manufacturer", element.getManufacturer().get(i), i);
18574    }
18575    for (int i = 0; i < element.getNutrient().size(); i++) {
18576      composeNutritionProductNutrientComponent(t, "NutritionProduct", "nutrient", element.getNutrient().get(i), i);
18577    }
18578    for (int i = 0; i < element.getIngredient().size(); i++) {
18579      composeNutritionProductIngredientComponent(t, "NutritionProduct", "ingredient", element.getIngredient().get(i), i);
18580    }
18581    for (int i = 0; i < element.getKnownAllergen().size(); i++) {
18582      composeCodeableReference(t, "NutritionProduct", "knownAllergen", element.getKnownAllergen().get(i), i);
18583    }
18584    for (int i = 0; i < element.getCharacteristic().size(); i++) {
18585      composeNutritionProductCharacteristicComponent(t, "NutritionProduct", "characteristic", element.getCharacteristic().get(i), i);
18586    }
18587    for (int i = 0; i < element.getInstance().size(); i++) {
18588      composeNutritionProductInstanceComponent(t, "NutritionProduct", "instance", element.getInstance().get(i), i);
18589    }
18590    for (int i = 0; i < element.getNote().size(); i++) {
18591      composeAnnotation(t, "NutritionProduct", "note", element.getNote().get(i), i);
18592    }
18593  }
18594
18595  protected void composeNutritionProductNutrientComponent(Complex parent, String parentType, String name, NutritionProduct.NutritionProductNutrientComponent element, int index) {
18596    if (element == null) 
18597      return;
18598    Complex t;
18599    if (Utilities.noString(parentType))
18600      t = parent;
18601    else {
18602      t = parent.predicate("fhir:"+parentType+'.'+name);
18603    }
18604    composeBackboneElement(t, "nutrient", name, element, index);
18605    if (element.hasItem()) {
18606      composeCodeableReference(t, "NutritionProductNutrientComponent", "item", element.getItem(), -1);
18607    }
18608    for (int i = 0; i < element.getAmount().size(); i++) {
18609      composeRatio(t, "NutritionProductNutrientComponent", "amount", element.getAmount().get(i), i);
18610    }
18611  }
18612
18613  protected void composeNutritionProductIngredientComponent(Complex parent, String parentType, String name, NutritionProduct.NutritionProductIngredientComponent element, int index) {
18614    if (element == null) 
18615      return;
18616    Complex t;
18617    if (Utilities.noString(parentType))
18618      t = parent;
18619    else {
18620      t = parent.predicate("fhir:"+parentType+'.'+name);
18621    }
18622    composeBackboneElement(t, "ingredient", name, element, index);
18623    if (element.hasItem()) {
18624      composeCodeableReference(t, "NutritionProductIngredientComponent", "item", element.getItem(), -1);
18625    }
18626    for (int i = 0; i < element.getAmount().size(); i++) {
18627      composeRatio(t, "NutritionProductIngredientComponent", "amount", element.getAmount().get(i), i);
18628    }
18629  }
18630
18631  protected void composeNutritionProductCharacteristicComponent(Complex parent, String parentType, String name, NutritionProduct.NutritionProductCharacteristicComponent element, int index) {
18632    if (element == null) 
18633      return;
18634    Complex t;
18635    if (Utilities.noString(parentType))
18636      t = parent;
18637    else {
18638      t = parent.predicate("fhir:"+parentType+'.'+name);
18639    }
18640    composeBackboneElement(t, "characteristic", name, element, index);
18641    if (element.hasType()) {
18642      composeCodeableConcept(t, "NutritionProductCharacteristicComponent", "type", element.getType(), -1);
18643    }
18644    if (element.hasValue()) {
18645      composeType(t, "NutritionProductCharacteristicComponent", "value", element.getValue(), -1);
18646    }
18647  }
18648
18649  protected void composeNutritionProductInstanceComponent(Complex parent, String parentType, String name, NutritionProduct.NutritionProductInstanceComponent element, int index) {
18650    if (element == null) 
18651      return;
18652    Complex t;
18653    if (Utilities.noString(parentType))
18654      t = parent;
18655    else {
18656      t = parent.predicate("fhir:"+parentType+'.'+name);
18657    }
18658    composeBackboneElement(t, "instance", name, element, index);
18659    if (element.hasQuantity()) {
18660      composeQuantity(t, "NutritionProductInstanceComponent", "quantity", element.getQuantity(), -1);
18661    }
18662    for (int i = 0; i < element.getIdentifier().size(); i++) {
18663      composeIdentifier(t, "NutritionProductInstanceComponent", "identifier", element.getIdentifier().get(i), i);
18664    }
18665    if (element.hasNameElement()) {
18666      composeString(t, "NutritionProductInstanceComponent", "name", element.getNameElement(), -1);
18667    }
18668    if (element.hasLotNumberElement()) {
18669      composeString(t, "NutritionProductInstanceComponent", "lotNumber", element.getLotNumberElement(), -1);
18670    }
18671    if (element.hasExpiryElement()) {
18672      composeDateTime(t, "NutritionProductInstanceComponent", "expiry", element.getExpiryElement(), -1);
18673    }
18674    if (element.hasUseByElement()) {
18675      composeDateTime(t, "NutritionProductInstanceComponent", "useBy", element.getUseByElement(), -1);
18676    }
18677    if (element.hasBiologicalSourceEvent()) {
18678      composeIdentifier(t, "NutritionProductInstanceComponent", "biologicalSourceEvent", element.getBiologicalSourceEvent(), -1);
18679    }
18680  }
18681
18682  protected void composeObservation(Complex parent, String parentType, String name, Observation element, int index) {
18683    if (element == null) 
18684      return;
18685    Complex t;
18686    if (Utilities.noString(parentType))
18687      t = parent;
18688    else {
18689      t = parent.predicate("fhir:"+parentType+'.'+name);
18690    }
18691    composeDomainResource(t, "Observation", name, element, index);
18692    for (int i = 0; i < element.getIdentifier().size(); i++) {
18693      composeIdentifier(t, "Observation", "identifier", element.getIdentifier().get(i), i);
18694    }
18695    if (element.hasInstantiates()) {
18696      composeType(t, "Observation", "instantiates", element.getInstantiates(), -1);
18697    }
18698    for (int i = 0; i < element.getBasedOn().size(); i++) {
18699      composeReference(t, "Observation", "basedOn", element.getBasedOn().get(i), i);
18700    }
18701    for (int i = 0; i < element.getTriggeredBy().size(); i++) {
18702      composeObservationTriggeredByComponent(t, "Observation", "triggeredBy", element.getTriggeredBy().get(i), i);
18703    }
18704    for (int i = 0; i < element.getPartOf().size(); i++) {
18705      composeReference(t, "Observation", "partOf", element.getPartOf().get(i), i);
18706    }
18707    if (element.hasStatusElement()) {
18708      composeEnum(t, "Observation", "status", element.getStatusElement(), -1);
18709    }
18710    for (int i = 0; i < element.getCategory().size(); i++) {
18711      composeCodeableConcept(t, "Observation", "category", element.getCategory().get(i), i);
18712    }
18713    if (element.hasCode()) {
18714      composeCodeableConcept(t, "Observation", "code", element.getCode(), -1);
18715    }
18716    if (element.hasSubject()) {
18717      composeReference(t, "Observation", "subject", element.getSubject(), -1);
18718    }
18719    for (int i = 0; i < element.getFocus().size(); i++) {
18720      composeReference(t, "Observation", "focus", element.getFocus().get(i), i);
18721    }
18722    if (element.hasEncounter()) {
18723      composeReference(t, "Observation", "encounter", element.getEncounter(), -1);
18724    }
18725    if (element.hasEffective()) {
18726      composeType(t, "Observation", "effective", element.getEffective(), -1);
18727    }
18728    if (element.hasIssuedElement()) {
18729      composeInstant(t, "Observation", "issued", element.getIssuedElement(), -1);
18730    }
18731    for (int i = 0; i < element.getPerformer().size(); i++) {
18732      composeReference(t, "Observation", "performer", element.getPerformer().get(i), i);
18733    }
18734    if (element.hasValue()) {
18735      composeType(t, "Observation", "value", element.getValue(), -1);
18736    }
18737    if (element.hasDataAbsentReason()) {
18738      composeCodeableConcept(t, "Observation", "dataAbsentReason", element.getDataAbsentReason(), -1);
18739    }
18740    for (int i = 0; i < element.getInterpretation().size(); i++) {
18741      composeCodeableConcept(t, "Observation", "interpretation", element.getInterpretation().get(i), i);
18742    }
18743    for (int i = 0; i < element.getNote().size(); i++) {
18744      composeAnnotation(t, "Observation", "note", element.getNote().get(i), i);
18745    }
18746    if (element.hasBodySite()) {
18747      composeCodeableConcept(t, "Observation", "bodySite", element.getBodySite(), -1);
18748    }
18749    if (element.hasBodyStructure()) {
18750      composeReference(t, "Observation", "bodyStructure", element.getBodyStructure(), -1);
18751    }
18752    if (element.hasMethod()) {
18753      composeCodeableConcept(t, "Observation", "method", element.getMethod(), -1);
18754    }
18755    if (element.hasSpecimen()) {
18756      composeReference(t, "Observation", "specimen", element.getSpecimen(), -1);
18757    }
18758    if (element.hasDevice()) {
18759      composeReference(t, "Observation", "device", element.getDevice(), -1);
18760    }
18761    for (int i = 0; i < element.getReferenceRange().size(); i++) {
18762      composeObservationReferenceRangeComponent(t, "Observation", "referenceRange", element.getReferenceRange().get(i), i);
18763    }
18764    for (int i = 0; i < element.getHasMember().size(); i++) {
18765      composeReference(t, "Observation", "hasMember", element.getHasMember().get(i), i);
18766    }
18767    for (int i = 0; i < element.getDerivedFrom().size(); i++) {
18768      composeReference(t, "Observation", "derivedFrom", element.getDerivedFrom().get(i), i);
18769    }
18770    for (int i = 0; i < element.getComponent().size(); i++) {
18771      composeObservationComponentComponent(t, "Observation", "component", element.getComponent().get(i), i);
18772    }
18773  }
18774
18775  protected void composeObservationTriggeredByComponent(Complex parent, String parentType, String name, Observation.ObservationTriggeredByComponent element, int index) {
18776    if (element == null) 
18777      return;
18778    Complex t;
18779    if (Utilities.noString(parentType))
18780      t = parent;
18781    else {
18782      t = parent.predicate("fhir:"+parentType+'.'+name);
18783    }
18784    composeBackboneElement(t, "triggeredBy", name, element, index);
18785    if (element.hasObservation()) {
18786      composeReference(t, "ObservationTriggeredByComponent", "observation", element.getObservation(), -1);
18787    }
18788    if (element.hasTypeElement()) {
18789      composeEnum(t, "ObservationTriggeredByComponent", "type", element.getTypeElement(), -1);
18790    }
18791    if (element.hasReasonElement()) {
18792      composeString(t, "ObservationTriggeredByComponent", "reason", element.getReasonElement(), -1);
18793    }
18794  }
18795
18796  protected void composeObservationReferenceRangeComponent(Complex parent, String parentType, String name, Observation.ObservationReferenceRangeComponent element, int index) {
18797    if (element == null) 
18798      return;
18799    Complex t;
18800    if (Utilities.noString(parentType))
18801      t = parent;
18802    else {
18803      t = parent.predicate("fhir:"+parentType+'.'+name);
18804    }
18805    composeBackboneElement(t, "referenceRange", name, element, index);
18806    if (element.hasLow()) {
18807      composeQuantity(t, "ObservationReferenceRangeComponent", "low", element.getLow(), -1);
18808    }
18809    if (element.hasHigh()) {
18810      composeQuantity(t, "ObservationReferenceRangeComponent", "high", element.getHigh(), -1);
18811    }
18812    if (element.hasNormalValue()) {
18813      composeCodeableConcept(t, "ObservationReferenceRangeComponent", "normalValue", element.getNormalValue(), -1);
18814    }
18815    if (element.hasType()) {
18816      composeCodeableConcept(t, "ObservationReferenceRangeComponent", "type", element.getType(), -1);
18817    }
18818    for (int i = 0; i < element.getAppliesTo().size(); i++) {
18819      composeCodeableConcept(t, "ObservationReferenceRangeComponent", "appliesTo", element.getAppliesTo().get(i), i);
18820    }
18821    if (element.hasAge()) {
18822      composeRange(t, "ObservationReferenceRangeComponent", "age", element.getAge(), -1);
18823    }
18824    if (element.hasTextElement()) {
18825      composeString(t, "ObservationReferenceRangeComponent", "text", element.getTextElement(), -1);
18826    }
18827  }
18828
18829  protected void composeObservationComponentComponent(Complex parent, String parentType, String name, Observation.ObservationComponentComponent element, int index) {
18830    if (element == null) 
18831      return;
18832    Complex t;
18833    if (Utilities.noString(parentType))
18834      t = parent;
18835    else {
18836      t = parent.predicate("fhir:"+parentType+'.'+name);
18837    }
18838    composeBackboneElement(t, "component", name, element, index);
18839    if (element.hasCode()) {
18840      composeCodeableConcept(t, "ObservationComponentComponent", "code", element.getCode(), -1);
18841    }
18842    if (element.hasValue()) {
18843      composeType(t, "ObservationComponentComponent", "value", element.getValue(), -1);
18844    }
18845    if (element.hasDataAbsentReason()) {
18846      composeCodeableConcept(t, "ObservationComponentComponent", "dataAbsentReason", element.getDataAbsentReason(), -1);
18847    }
18848    for (int i = 0; i < element.getInterpretation().size(); i++) {
18849      composeCodeableConcept(t, "ObservationComponentComponent", "interpretation", element.getInterpretation().get(i), i);
18850    }
18851    for (int i = 0; i < element.getReferenceRange().size(); i++) {
18852      composeObservationReferenceRangeComponent(t, "ObservationComponentComponent", "referenceRange", element.getReferenceRange().get(i), i);
18853    }
18854  }
18855
18856  protected void composeObservationDefinition(Complex parent, String parentType, String name, ObservationDefinition element, int index) {
18857    if (element == null) 
18858      return;
18859    Complex t;
18860    if (Utilities.noString(parentType))
18861      t = parent;
18862    else {
18863      t = parent.predicate("fhir:"+parentType+'.'+name);
18864    }
18865    composeDomainResource(t, "ObservationDefinition", name, element, index);
18866    if (element.hasUrlElement()) {
18867      composeUri(t, "ObservationDefinition", "url", element.getUrlElement(), -1);
18868    }
18869    if (element.hasIdentifier()) {
18870      composeIdentifier(t, "ObservationDefinition", "identifier", element.getIdentifier(), -1);
18871    }
18872    if (element.hasVersionElement()) {
18873      composeString(t, "ObservationDefinition", "version", element.getVersionElement(), -1);
18874    }
18875    if (element.hasNameElement()) {
18876      composeString(t, "ObservationDefinition", "name", element.getNameElement(), -1);
18877    }
18878    if (element.hasTitleElement()) {
18879      composeString(t, "ObservationDefinition", "title", element.getTitleElement(), -1);
18880    }
18881    if (element.hasStatusElement()) {
18882      composeEnum(t, "ObservationDefinition", "status", element.getStatusElement(), -1);
18883    }
18884    if (element.hasExperimentalElement()) {
18885      composeBoolean(t, "ObservationDefinition", "experimental", element.getExperimentalElement(), -1);
18886    }
18887    if (element.hasDateElement()) {
18888      composeDateTime(t, "ObservationDefinition", "date", element.getDateElement(), -1);
18889    }
18890    if (element.hasPublisherElement()) {
18891      composeString(t, "ObservationDefinition", "publisher", element.getPublisherElement(), -1);
18892    }
18893    for (int i = 0; i < element.getContact().size(); i++) {
18894      composeContactDetail(t, "ObservationDefinition", "contact", element.getContact().get(i), i);
18895    }
18896    if (element.hasDescriptionElement()) {
18897      composeMarkdown(t, "ObservationDefinition", "description", element.getDescriptionElement(), -1);
18898    }
18899    for (int i = 0; i < element.getUseContext().size(); i++) {
18900      composeUsageContext(t, "ObservationDefinition", "useContext", element.getUseContext().get(i), i);
18901    }
18902    for (int i = 0; i < element.getJurisdiction().size(); i++) {
18903      composeCodeableConcept(t, "ObservationDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
18904    }
18905    if (element.hasPurposeElement()) {
18906      composeMarkdown(t, "ObservationDefinition", "purpose", element.getPurposeElement(), -1);
18907    }
18908    if (element.hasCopyrightElement()) {
18909      composeMarkdown(t, "ObservationDefinition", "copyright", element.getCopyrightElement(), -1);
18910    }
18911    if (element.hasApprovalDateElement()) {
18912      composeDate(t, "ObservationDefinition", "approvalDate", element.getApprovalDateElement(), -1);
18913    }
18914    if (element.hasLastReviewDateElement()) {
18915      composeDate(t, "ObservationDefinition", "lastReviewDate", element.getLastReviewDateElement(), -1);
18916    }
18917    if (element.hasEffectivePeriod()) {
18918      composePeriod(t, "ObservationDefinition", "effectivePeriod", element.getEffectivePeriod(), -1);
18919    }
18920    for (int i = 0; i < element.getDerivedFromCanonical().size(); i++) {
18921      composeCanonical(t, "ObservationDefinition", "derivedFromCanonical", element.getDerivedFromCanonical().get(i), i);
18922    }
18923    for (int i = 0; i < element.getDerivedFromUri().size(); i++) {
18924      composeUri(t, "ObservationDefinition", "derivedFromUri", element.getDerivedFromUri().get(i), i);
18925    }
18926    for (int i = 0; i < element.getSubject().size(); i++) {
18927      composeCodeableConcept(t, "ObservationDefinition", "subject", element.getSubject().get(i), i);
18928    }
18929    if (element.hasPerformerType()) {
18930      composeCodeableConcept(t, "ObservationDefinition", "performerType", element.getPerformerType(), -1);
18931    }
18932    for (int i = 0; i < element.getCategory().size(); i++) {
18933      composeCodeableConcept(t, "ObservationDefinition", "category", element.getCategory().get(i), i);
18934    }
18935    if (element.hasCode()) {
18936      composeCodeableConcept(t, "ObservationDefinition", "code", element.getCode(), -1);
18937    }
18938    for (int i = 0; i < element.getPermittedDataType().size(); i++) {
18939      composeEnum(t, "ObservationDefinition", "permittedDataType", element.getPermittedDataType().get(i), i);
18940    }
18941    if (element.hasMultipleResultsAllowedElement()) {
18942      composeBoolean(t, "ObservationDefinition", "multipleResultsAllowed", element.getMultipleResultsAllowedElement(), -1);
18943    }
18944    if (element.hasBodySite()) {
18945      composeCodeableConcept(t, "ObservationDefinition", "bodySite", element.getBodySite(), -1);
18946    }
18947    if (element.hasMethod()) {
18948      composeCodeableConcept(t, "ObservationDefinition", "method", element.getMethod(), -1);
18949    }
18950    for (int i = 0; i < element.getSpecimen().size(); i++) {
18951      composeReference(t, "ObservationDefinition", "specimen", element.getSpecimen().get(i), i);
18952    }
18953    for (int i = 0; i < element.getDevice().size(); i++) {
18954      composeReference(t, "ObservationDefinition", "device", element.getDevice().get(i), i);
18955    }
18956    if (element.hasPreferredReportNameElement()) {
18957      composeString(t, "ObservationDefinition", "preferredReportName", element.getPreferredReportNameElement(), -1);
18958    }
18959    if (element.hasQuantitativeDetails()) {
18960      composeObservationDefinitionQuantitativeDetailsComponent(t, "ObservationDefinition", "quantitativeDetails", element.getQuantitativeDetails(), -1);
18961    }
18962    for (int i = 0; i < element.getQualifiedValue().size(); i++) {
18963      composeObservationDefinitionQualifiedValueComponent(t, "ObservationDefinition", "qualifiedValue", element.getQualifiedValue().get(i), i);
18964    }
18965    for (int i = 0; i < element.getHasMember().size(); i++) {
18966      composeReference(t, "ObservationDefinition", "hasMember", element.getHasMember().get(i), i);
18967    }
18968    for (int i = 0; i < element.getComponent().size(); i++) {
18969      composeObservationDefinitionComponentComponent(t, "ObservationDefinition", "component", element.getComponent().get(i), i);
18970    }
18971  }
18972
18973  protected void composeObservationDefinitionQuantitativeDetailsComponent(Complex parent, String parentType, String name, ObservationDefinition.ObservationDefinitionQuantitativeDetailsComponent element, int index) {
18974    if (element == null) 
18975      return;
18976    Complex t;
18977    if (Utilities.noString(parentType))
18978      t = parent;
18979    else {
18980      t = parent.predicate("fhir:"+parentType+'.'+name);
18981    }
18982    composeBackboneElement(t, "quantitativeDetails", name, element, index);
18983    if (element.hasUnit()) {
18984      composeCodeableConcept(t, "ObservationDefinitionQuantitativeDetailsComponent", "unit", element.getUnit(), -1);
18985    }
18986    if (element.hasCustomaryUnit()) {
18987      composeCodeableConcept(t, "ObservationDefinitionQuantitativeDetailsComponent", "customaryUnit", element.getCustomaryUnit(), -1);
18988    }
18989    if (element.hasConversionFactorElement()) {
18990      composeDecimal(t, "ObservationDefinitionQuantitativeDetailsComponent", "conversionFactor", element.getConversionFactorElement(), -1);
18991    }
18992    if (element.hasDecimalPrecisionElement()) {
18993      composeInteger(t, "ObservationDefinitionQuantitativeDetailsComponent", "decimalPrecision", element.getDecimalPrecisionElement(), -1);
18994    }
18995  }
18996
18997  protected void composeObservationDefinitionQualifiedValueComponent(Complex parent, String parentType, String name, ObservationDefinition.ObservationDefinitionQualifiedValueComponent element, int index) {
18998    if (element == null) 
18999      return;
19000    Complex t;
19001    if (Utilities.noString(parentType))
19002      t = parent;
19003    else {
19004      t = parent.predicate("fhir:"+parentType+'.'+name);
19005    }
19006    composeBackboneElement(t, "qualifiedValue", name, element, index);
19007    if (element.hasContext()) {
19008      composeCodeableConcept(t, "ObservationDefinitionQualifiedValueComponent", "context", element.getContext(), -1);
19009    }
19010    for (int i = 0; i < element.getAppliesTo().size(); i++) {
19011      composeCodeableConcept(t, "ObservationDefinitionQualifiedValueComponent", "appliesTo", element.getAppliesTo().get(i), i);
19012    }
19013    if (element.hasGenderElement()) {
19014      composeEnum(t, "ObservationDefinitionQualifiedValueComponent", "gender", element.getGenderElement(), -1);
19015    }
19016    if (element.hasAge()) {
19017      composeRange(t, "ObservationDefinitionQualifiedValueComponent", "age", element.getAge(), -1);
19018    }
19019    if (element.hasGestationalAge()) {
19020      composeRange(t, "ObservationDefinitionQualifiedValueComponent", "gestationalAge", element.getGestationalAge(), -1);
19021    }
19022    if (element.hasConditionElement()) {
19023      composeString(t, "ObservationDefinitionQualifiedValueComponent", "condition", element.getConditionElement(), -1);
19024    }
19025    if (element.hasRangeCategoryElement()) {
19026      composeEnum(t, "ObservationDefinitionQualifiedValueComponent", "rangeCategory", element.getRangeCategoryElement(), -1);
19027    }
19028    if (element.hasRange()) {
19029      composeRange(t, "ObservationDefinitionQualifiedValueComponent", "range", element.getRange(), -1);
19030    }
19031    if (element.hasValidCodedValueSetElement()) {
19032      composeCanonical(t, "ObservationDefinitionQualifiedValueComponent", "validCodedValueSet", element.getValidCodedValueSetElement(), -1);
19033    }
19034    if (element.hasNormalCodedValueSetElement()) {
19035      composeCanonical(t, "ObservationDefinitionQualifiedValueComponent", "normalCodedValueSet", element.getNormalCodedValueSetElement(), -1);
19036    }
19037    if (element.hasAbnormalCodedValueSetElement()) {
19038      composeCanonical(t, "ObservationDefinitionQualifiedValueComponent", "abnormalCodedValueSet", element.getAbnormalCodedValueSetElement(), -1);
19039    }
19040    if (element.hasCriticalCodedValueSetElement()) {
19041      composeCanonical(t, "ObservationDefinitionQualifiedValueComponent", "criticalCodedValueSet", element.getCriticalCodedValueSetElement(), -1);
19042    }
19043  }
19044
19045  protected void composeObservationDefinitionComponentComponent(Complex parent, String parentType, String name, ObservationDefinition.ObservationDefinitionComponentComponent element, int index) {
19046    if (element == null) 
19047      return;
19048    Complex t;
19049    if (Utilities.noString(parentType))
19050      t = parent;
19051    else {
19052      t = parent.predicate("fhir:"+parentType+'.'+name);
19053    }
19054    composeBackboneElement(t, "component", name, element, index);
19055    if (element.hasCode()) {
19056      composeCodeableConcept(t, "ObservationDefinitionComponentComponent", "code", element.getCode(), -1);
19057    }
19058    for (int i = 0; i < element.getPermittedDataType().size(); i++) {
19059      composeEnum(t, "ObservationDefinitionComponentComponent", "permittedDataType", element.getPermittedDataType().get(i), i);
19060    }
19061    if (element.hasQuantitativeDetails()) {
19062      composeObservationDefinitionQuantitativeDetailsComponent(t, "ObservationDefinitionComponentComponent", "quantitativeDetails", element.getQuantitativeDetails(), -1);
19063    }
19064    for (int i = 0; i < element.getQualifiedValue().size(); i++) {
19065      composeObservationDefinitionQualifiedValueComponent(t, "ObservationDefinitionComponentComponent", "qualifiedValue", element.getQualifiedValue().get(i), i);
19066    }
19067  }
19068
19069  protected void composeOperationDefinition(Complex parent, String parentType, String name, OperationDefinition element, int index) {
19070    if (element == null) 
19071      return;
19072    Complex t;
19073    if (Utilities.noString(parentType))
19074      t = parent;
19075    else {
19076      t = parent.predicate("fhir:"+parentType+'.'+name);
19077    }
19078    composeCanonicalResource(t, "OperationDefinition", name, element, index);
19079    if (element.hasUrlElement()) {
19080      composeUri(t, "OperationDefinition", "url", element.getUrlElement(), -1);
19081    }
19082    if (element.hasVersionElement()) {
19083      composeString(t, "OperationDefinition", "version", element.getVersionElement(), -1);
19084    }
19085    if (element.hasVersionAlgorithm()) {
19086      composeType(t, "OperationDefinition", "versionAlgorithm", element.getVersionAlgorithm(), -1);
19087    }
19088    if (element.hasNameElement()) {
19089      composeString(t, "OperationDefinition", "name", element.getNameElement(), -1);
19090    }
19091    if (element.hasTitleElement()) {
19092      composeString(t, "OperationDefinition", "title", element.getTitleElement(), -1);
19093    }
19094    if (element.hasStatusElement()) {
19095      composeEnum(t, "OperationDefinition", "status", element.getStatusElement(), -1);
19096    }
19097    if (element.hasKindElement()) {
19098      composeEnum(t, "OperationDefinition", "kind", element.getKindElement(), -1);
19099    }
19100    if (element.hasExperimentalElement()) {
19101      composeBoolean(t, "OperationDefinition", "experimental", element.getExperimentalElement(), -1);
19102    }
19103    if (element.hasDateElement()) {
19104      composeDateTime(t, "OperationDefinition", "date", element.getDateElement(), -1);
19105    }
19106    if (element.hasPublisherElement()) {
19107      composeString(t, "OperationDefinition", "publisher", element.getPublisherElement(), -1);
19108    }
19109    for (int i = 0; i < element.getContact().size(); i++) {
19110      composeContactDetail(t, "OperationDefinition", "contact", element.getContact().get(i), i);
19111    }
19112    if (element.hasDescriptionElement()) {
19113      composeMarkdown(t, "OperationDefinition", "description", element.getDescriptionElement(), -1);
19114    }
19115    for (int i = 0; i < element.getUseContext().size(); i++) {
19116      composeUsageContext(t, "OperationDefinition", "useContext", element.getUseContext().get(i), i);
19117    }
19118    for (int i = 0; i < element.getJurisdiction().size(); i++) {
19119      composeCodeableConcept(t, "OperationDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
19120    }
19121    if (element.hasPurposeElement()) {
19122      composeMarkdown(t, "OperationDefinition", "purpose", element.getPurposeElement(), -1);
19123    }
19124    if (element.hasCopyrightElement()) {
19125      composeMarkdown(t, "OperationDefinition", "copyright", element.getCopyrightElement(), -1);
19126    }
19127    if (element.hasCopyrightLabelElement()) {
19128      composeString(t, "OperationDefinition", "copyrightLabel", element.getCopyrightLabelElement(), -1);
19129    }
19130    if (element.hasAffectsStateElement()) {
19131      composeBoolean(t, "OperationDefinition", "affectsState", element.getAffectsStateElement(), -1);
19132    }
19133    if (element.hasCodeElement()) {
19134      composeCode(t, "OperationDefinition", "code", element.getCodeElement(), -1);
19135    }
19136    if (element.hasCommentElement()) {
19137      composeMarkdown(t, "OperationDefinition", "comment", element.getCommentElement(), -1);
19138    }
19139    if (element.hasBaseElement()) {
19140      composeCanonical(t, "OperationDefinition", "base", element.getBaseElement(), -1);
19141    }
19142    for (int i = 0; i < element.getResource().size(); i++) {
19143      composeCode(t, "OperationDefinition", "resource", element.getResource().get(i), i);
19144    }
19145    if (element.hasSystemElement()) {
19146      composeBoolean(t, "OperationDefinition", "system", element.getSystemElement(), -1);
19147    }
19148    if (element.hasTypeElement()) {
19149      composeBoolean(t, "OperationDefinition", "type", element.getTypeElement(), -1);
19150    }
19151    if (element.hasInstanceElement()) {
19152      composeBoolean(t, "OperationDefinition", "instance", element.getInstanceElement(), -1);
19153    }
19154    if (element.hasInputProfileElement()) {
19155      composeCanonical(t, "OperationDefinition", "inputProfile", element.getInputProfileElement(), -1);
19156    }
19157    if (element.hasOutputProfileElement()) {
19158      composeCanonical(t, "OperationDefinition", "outputProfile", element.getOutputProfileElement(), -1);
19159    }
19160    for (int i = 0; i < element.getParameter().size(); i++) {
19161      composeOperationDefinitionParameterComponent(t, "OperationDefinition", "parameter", element.getParameter().get(i), i);
19162    }
19163    for (int i = 0; i < element.getOverload().size(); i++) {
19164      composeOperationDefinitionOverloadComponent(t, "OperationDefinition", "overload", element.getOverload().get(i), i);
19165    }
19166  }
19167
19168  protected void composeOperationDefinitionParameterComponent(Complex parent, String parentType, String name, OperationDefinition.OperationDefinitionParameterComponent element, int index) {
19169    if (element == null) 
19170      return;
19171    Complex t;
19172    if (Utilities.noString(parentType))
19173      t = parent;
19174    else {
19175      t = parent.predicate("fhir:"+parentType+'.'+name);
19176    }
19177    composeBackboneElement(t, "parameter", name, element, index);
19178    if (element.hasNameElement()) {
19179      composeCode(t, "OperationDefinitionParameterComponent", "name", element.getNameElement(), -1);
19180    }
19181    if (element.hasUseElement()) {
19182      composeEnum(t, "OperationDefinitionParameterComponent", "use", element.getUseElement(), -1);
19183    }
19184    for (int i = 0; i < element.getScope().size(); i++) {
19185      composeEnum(t, "OperationDefinitionParameterComponent", "scope", element.getScope().get(i), i);
19186    }
19187    if (element.hasMinElement()) {
19188      composeInteger(t, "OperationDefinitionParameterComponent", "min", element.getMinElement(), -1);
19189    }
19190    if (element.hasMaxElement()) {
19191      composeString(t, "OperationDefinitionParameterComponent", "max", element.getMaxElement(), -1);
19192    }
19193    if (element.hasDocumentationElement()) {
19194      composeMarkdown(t, "OperationDefinitionParameterComponent", "documentation", element.getDocumentationElement(), -1);
19195    }
19196    if (element.hasTypeElement()) {
19197      composeEnum(t, "OperationDefinitionParameterComponent", "type", element.getTypeElement(), -1);
19198    }
19199    for (int i = 0; i < element.getAllowedType().size(); i++) {
19200      composeEnum(t, "OperationDefinitionParameterComponent", "allowedType", element.getAllowedType().get(i), i);
19201    }
19202    for (int i = 0; i < element.getTargetProfile().size(); i++) {
19203      composeCanonical(t, "OperationDefinitionParameterComponent", "targetProfile", element.getTargetProfile().get(i), i);
19204    }
19205    if (element.hasSearchTypeElement()) {
19206      composeEnum(t, "OperationDefinitionParameterComponent", "searchType", element.getSearchTypeElement(), -1);
19207    }
19208    if (element.hasBinding()) {
19209      composeOperationDefinitionParameterBindingComponent(t, "OperationDefinitionParameterComponent", "binding", element.getBinding(), -1);
19210    }
19211    for (int i = 0; i < element.getReferencedFrom().size(); i++) {
19212      composeOperationDefinitionParameterReferencedFromComponent(t, "OperationDefinitionParameterComponent", "referencedFrom", element.getReferencedFrom().get(i), i);
19213    }
19214    for (int i = 0; i < element.getPart().size(); i++) {
19215      composeOperationDefinitionParameterComponent(t, "OperationDefinitionParameterComponent", "part", element.getPart().get(i), i);
19216    }
19217  }
19218
19219  protected void composeOperationDefinitionParameterBindingComponent(Complex parent, String parentType, String name, OperationDefinition.OperationDefinitionParameterBindingComponent element, int index) {
19220    if (element == null) 
19221      return;
19222    Complex t;
19223    if (Utilities.noString(parentType))
19224      t = parent;
19225    else {
19226      t = parent.predicate("fhir:"+parentType+'.'+name);
19227    }
19228    composeBackboneElement(t, "binding", name, element, index);
19229    if (element.hasStrengthElement()) {
19230      composeEnum(t, "OperationDefinitionParameterBindingComponent", "strength", element.getStrengthElement(), -1);
19231    }
19232    if (element.hasValueSetElement()) {
19233      composeCanonical(t, "OperationDefinitionParameterBindingComponent", "valueSet", element.getValueSetElement(), -1);
19234    }
19235  }
19236
19237  protected void composeOperationDefinitionParameterReferencedFromComponent(Complex parent, String parentType, String name, OperationDefinition.OperationDefinitionParameterReferencedFromComponent element, int index) {
19238    if (element == null) 
19239      return;
19240    Complex t;
19241    if (Utilities.noString(parentType))
19242      t = parent;
19243    else {
19244      t = parent.predicate("fhir:"+parentType+'.'+name);
19245    }
19246    composeBackboneElement(t, "referencedFrom", name, element, index);
19247    if (element.hasSourceElement()) {
19248      composeString(t, "OperationDefinitionParameterReferencedFromComponent", "source", element.getSourceElement(), -1);
19249    }
19250    if (element.hasSourceIdElement()) {
19251      composeString(t, "OperationDefinitionParameterReferencedFromComponent", "sourceId", element.getSourceIdElement(), -1);
19252    }
19253  }
19254
19255  protected void composeOperationDefinitionOverloadComponent(Complex parent, String parentType, String name, OperationDefinition.OperationDefinitionOverloadComponent element, int index) {
19256    if (element == null) 
19257      return;
19258    Complex t;
19259    if (Utilities.noString(parentType))
19260      t = parent;
19261    else {
19262      t = parent.predicate("fhir:"+parentType+'.'+name);
19263    }
19264    composeBackboneElement(t, "overload", name, element, index);
19265    for (int i = 0; i < element.getParameterName().size(); i++) {
19266      composeString(t, "OperationDefinitionOverloadComponent", "parameterName", element.getParameterName().get(i), i);
19267    }
19268    if (element.hasCommentElement()) {
19269      composeString(t, "OperationDefinitionOverloadComponent", "comment", element.getCommentElement(), -1);
19270    }
19271  }
19272
19273  protected void composeOperationOutcome(Complex parent, String parentType, String name, OperationOutcome element, int index) {
19274    if (element == null) 
19275      return;
19276    Complex t;
19277    if (Utilities.noString(parentType))
19278      t = parent;
19279    else {
19280      t = parent.predicate("fhir:"+parentType+'.'+name);
19281    }
19282    composeDomainResource(t, "OperationOutcome", name, element, index);
19283    for (int i = 0; i < element.getIssue().size(); i++) {
19284      composeOperationOutcomeIssueComponent(t, "OperationOutcome", "issue", element.getIssue().get(i), i);
19285    }
19286  }
19287
19288  protected void composeOperationOutcomeIssueComponent(Complex parent, String parentType, String name, OperationOutcome.OperationOutcomeIssueComponent element, int index) {
19289    if (element == null) 
19290      return;
19291    Complex t;
19292    if (Utilities.noString(parentType))
19293      t = parent;
19294    else {
19295      t = parent.predicate("fhir:"+parentType+'.'+name);
19296    }
19297    composeBackboneElement(t, "issue", name, element, index);
19298    if (element.hasSeverityElement()) {
19299      composeEnum(t, "OperationOutcomeIssueComponent", "severity", element.getSeverityElement(), -1);
19300    }
19301    if (element.hasCodeElement()) {
19302      composeEnum(t, "OperationOutcomeIssueComponent", "code", element.getCodeElement(), -1);
19303    }
19304    if (element.hasDetails()) {
19305      composeCodeableConcept(t, "OperationOutcomeIssueComponent", "details", element.getDetails(), -1);
19306    }
19307    if (element.hasDiagnosticsElement()) {
19308      composeString(t, "OperationOutcomeIssueComponent", "diagnostics", element.getDiagnosticsElement(), -1);
19309    }
19310    for (int i = 0; i < element.getLocation().size(); i++) {
19311      composeString(t, "OperationOutcomeIssueComponent", "location", element.getLocation().get(i), i);
19312    }
19313    for (int i = 0; i < element.getExpression().size(); i++) {
19314      composeString(t, "OperationOutcomeIssueComponent", "expression", element.getExpression().get(i), i);
19315    }
19316  }
19317
19318  protected void composeOrganization(Complex parent, String parentType, String name, Organization element, int index) {
19319    if (element == null) 
19320      return;
19321    Complex t;
19322    if (Utilities.noString(parentType))
19323      t = parent;
19324    else {
19325      t = parent.predicate("fhir:"+parentType+'.'+name);
19326    }
19327    composeDomainResource(t, "Organization", name, element, index);
19328    for (int i = 0; i < element.getIdentifier().size(); i++) {
19329      composeIdentifier(t, "Organization", "identifier", element.getIdentifier().get(i), i);
19330    }
19331    if (element.hasActiveElement()) {
19332      composeBoolean(t, "Organization", "active", element.getActiveElement(), -1);
19333    }
19334    for (int i = 0; i < element.getType().size(); i++) {
19335      composeCodeableConcept(t, "Organization", "type", element.getType().get(i), i);
19336    }
19337    if (element.hasNameElement()) {
19338      composeString(t, "Organization", "name", element.getNameElement(), -1);
19339    }
19340    for (int i = 0; i < element.getAlias().size(); i++) {
19341      composeString(t, "Organization", "alias", element.getAlias().get(i), i);
19342    }
19343    if (element.hasDescriptionElement()) {
19344      composeString(t, "Organization", "description", element.getDescriptionElement(), -1);
19345    }
19346    for (int i = 0; i < element.getContact().size(); i++) {
19347      composeExtendedContactDetail(t, "Organization", "contact", element.getContact().get(i), i);
19348    }
19349    if (element.hasPartOf()) {
19350      composeReference(t, "Organization", "partOf", element.getPartOf(), -1);
19351    }
19352    for (int i = 0; i < element.getEndpoint().size(); i++) {
19353      composeReference(t, "Organization", "endpoint", element.getEndpoint().get(i), i);
19354    }
19355    for (int i = 0; i < element.getQualification().size(); i++) {
19356      composeOrganizationQualificationComponent(t, "Organization", "qualification", element.getQualification().get(i), i);
19357    }
19358  }
19359
19360  protected void composeOrganizationQualificationComponent(Complex parent, String parentType, String name, Organization.OrganizationQualificationComponent element, int index) {
19361    if (element == null) 
19362      return;
19363    Complex t;
19364    if (Utilities.noString(parentType))
19365      t = parent;
19366    else {
19367      t = parent.predicate("fhir:"+parentType+'.'+name);
19368    }
19369    composeBackboneElement(t, "qualification", name, element, index);
19370    for (int i = 0; i < element.getIdentifier().size(); i++) {
19371      composeIdentifier(t, "OrganizationQualificationComponent", "identifier", element.getIdentifier().get(i), i);
19372    }
19373    if (element.hasCode()) {
19374      composeCodeableConcept(t, "OrganizationQualificationComponent", "code", element.getCode(), -1);
19375    }
19376    if (element.hasPeriod()) {
19377      composePeriod(t, "OrganizationQualificationComponent", "period", element.getPeriod(), -1);
19378    }
19379    if (element.hasIssuer()) {
19380      composeReference(t, "OrganizationQualificationComponent", "issuer", element.getIssuer(), -1);
19381    }
19382  }
19383
19384  protected void composeOrganizationAffiliation(Complex parent, String parentType, String name, OrganizationAffiliation element, int index) {
19385    if (element == null) 
19386      return;
19387    Complex t;
19388    if (Utilities.noString(parentType))
19389      t = parent;
19390    else {
19391      t = parent.predicate("fhir:"+parentType+'.'+name);
19392    }
19393    composeDomainResource(t, "OrganizationAffiliation", name, element, index);
19394    for (int i = 0; i < element.getIdentifier().size(); i++) {
19395      composeIdentifier(t, "OrganizationAffiliation", "identifier", element.getIdentifier().get(i), i);
19396    }
19397    if (element.hasActiveElement()) {
19398      composeBoolean(t, "OrganizationAffiliation", "active", element.getActiveElement(), -1);
19399    }
19400    if (element.hasPeriod()) {
19401      composePeriod(t, "OrganizationAffiliation", "period", element.getPeriod(), -1);
19402    }
19403    if (element.hasOrganization()) {
19404      composeReference(t, "OrganizationAffiliation", "organization", element.getOrganization(), -1);
19405    }
19406    if (element.hasParticipatingOrganization()) {
19407      composeReference(t, "OrganizationAffiliation", "participatingOrganization", element.getParticipatingOrganization(), -1);
19408    }
19409    for (int i = 0; i < element.getNetwork().size(); i++) {
19410      composeReference(t, "OrganizationAffiliation", "network", element.getNetwork().get(i), i);
19411    }
19412    for (int i = 0; i < element.getCode().size(); i++) {
19413      composeCodeableConcept(t, "OrganizationAffiliation", "code", element.getCode().get(i), i);
19414    }
19415    for (int i = 0; i < element.getSpecialty().size(); i++) {
19416      composeCodeableConcept(t, "OrganizationAffiliation", "specialty", element.getSpecialty().get(i), i);
19417    }
19418    for (int i = 0; i < element.getLocation().size(); i++) {
19419      composeReference(t, "OrganizationAffiliation", "location", element.getLocation().get(i), i);
19420    }
19421    for (int i = 0; i < element.getHealthcareService().size(); i++) {
19422      composeReference(t, "OrganizationAffiliation", "healthcareService", element.getHealthcareService().get(i), i);
19423    }
19424    for (int i = 0; i < element.getContact().size(); i++) {
19425      composeExtendedContactDetail(t, "OrganizationAffiliation", "contact", element.getContact().get(i), i);
19426    }
19427    for (int i = 0; i < element.getEndpoint().size(); i++) {
19428      composeReference(t, "OrganizationAffiliation", "endpoint", element.getEndpoint().get(i), i);
19429    }
19430  }
19431
19432  protected void composePackagedProductDefinition(Complex parent, String parentType, String name, PackagedProductDefinition element, int index) {
19433    if (element == null) 
19434      return;
19435    Complex t;
19436    if (Utilities.noString(parentType))
19437      t = parent;
19438    else {
19439      t = parent.predicate("fhir:"+parentType+'.'+name);
19440    }
19441    composeDomainResource(t, "PackagedProductDefinition", name, element, index);
19442    for (int i = 0; i < element.getIdentifier().size(); i++) {
19443      composeIdentifier(t, "PackagedProductDefinition", "identifier", element.getIdentifier().get(i), i);
19444    }
19445    if (element.hasNameElement()) {
19446      composeString(t, "PackagedProductDefinition", "name", element.getNameElement(), -1);
19447    }
19448    if (element.hasType()) {
19449      composeCodeableConcept(t, "PackagedProductDefinition", "type", element.getType(), -1);
19450    }
19451    for (int i = 0; i < element.getPackageFor().size(); i++) {
19452      composeReference(t, "PackagedProductDefinition", "packageFor", element.getPackageFor().get(i), i);
19453    }
19454    if (element.hasStatus()) {
19455      composeCodeableConcept(t, "PackagedProductDefinition", "status", element.getStatus(), -1);
19456    }
19457    if (element.hasStatusDateElement()) {
19458      composeDateTime(t, "PackagedProductDefinition", "statusDate", element.getStatusDateElement(), -1);
19459    }
19460    for (int i = 0; i < element.getContainedItemQuantity().size(); i++) {
19461      composeQuantity(t, "PackagedProductDefinition", "containedItemQuantity", element.getContainedItemQuantity().get(i), i);
19462    }
19463    if (element.hasDescriptionElement()) {
19464      composeMarkdown(t, "PackagedProductDefinition", "description", element.getDescriptionElement(), -1);
19465    }
19466    for (int i = 0; i < element.getLegalStatusOfSupply().size(); i++) {
19467      composePackagedProductDefinitionLegalStatusOfSupplyComponent(t, "PackagedProductDefinition", "legalStatusOfSupply", element.getLegalStatusOfSupply().get(i), i);
19468    }
19469    for (int i = 0; i < element.getMarketingStatus().size(); i++) {
19470      composeMarketingStatus(t, "PackagedProductDefinition", "marketingStatus", element.getMarketingStatus().get(i), i);
19471    }
19472    if (element.hasCopackagedIndicatorElement()) {
19473      composeBoolean(t, "PackagedProductDefinition", "copackagedIndicator", element.getCopackagedIndicatorElement(), -1);
19474    }
19475    for (int i = 0; i < element.getManufacturer().size(); i++) {
19476      composeReference(t, "PackagedProductDefinition", "manufacturer", element.getManufacturer().get(i), i);
19477    }
19478    for (int i = 0; i < element.getAttachedDocument().size(); i++) {
19479      composeReference(t, "PackagedProductDefinition", "attachedDocument", element.getAttachedDocument().get(i), i);
19480    }
19481    if (element.hasPackaging()) {
19482      composePackagedProductDefinitionPackagingComponent(t, "PackagedProductDefinition", "packaging", element.getPackaging(), -1);
19483    }
19484    for (int i = 0; i < element.getCharacteristic().size(); i++) {
19485      composePackagedProductDefinitionPackagingPropertyComponent(t, "PackagedProductDefinition", "characteristic", element.getCharacteristic().get(i), i);
19486    }
19487  }
19488
19489  protected void composePackagedProductDefinitionLegalStatusOfSupplyComponent(Complex parent, String parentType, String name, PackagedProductDefinition.PackagedProductDefinitionLegalStatusOfSupplyComponent element, int index) {
19490    if (element == null) 
19491      return;
19492    Complex t;
19493    if (Utilities.noString(parentType))
19494      t = parent;
19495    else {
19496      t = parent.predicate("fhir:"+parentType+'.'+name);
19497    }
19498    composeBackboneElement(t, "legalStatusOfSupply", name, element, index);
19499    if (element.hasCode()) {
19500      composeCodeableConcept(t, "PackagedProductDefinitionLegalStatusOfSupplyComponent", "code", element.getCode(), -1);
19501    }
19502    if (element.hasJurisdiction()) {
19503      composeCodeableConcept(t, "PackagedProductDefinitionLegalStatusOfSupplyComponent", "jurisdiction", element.getJurisdiction(), -1);
19504    }
19505  }
19506
19507  protected void composePackagedProductDefinitionPackagingComponent(Complex parent, String parentType, String name, PackagedProductDefinition.PackagedProductDefinitionPackagingComponent element, int index) {
19508    if (element == null) 
19509      return;
19510    Complex t;
19511    if (Utilities.noString(parentType))
19512      t = parent;
19513    else {
19514      t = parent.predicate("fhir:"+parentType+'.'+name);
19515    }
19516    composeBackboneElement(t, "packaging", name, element, index);
19517    for (int i = 0; i < element.getIdentifier().size(); i++) {
19518      composeIdentifier(t, "PackagedProductDefinitionPackagingComponent", "identifier", element.getIdentifier().get(i), i);
19519    }
19520    if (element.hasType()) {
19521      composeCodeableConcept(t, "PackagedProductDefinitionPackagingComponent", "type", element.getType(), -1);
19522    }
19523    if (element.hasComponentPartElement()) {
19524      composeBoolean(t, "PackagedProductDefinitionPackagingComponent", "componentPart", element.getComponentPartElement(), -1);
19525    }
19526    if (element.hasQuantityElement()) {
19527      composeInteger(t, "PackagedProductDefinitionPackagingComponent", "quantity", element.getQuantityElement(), -1);
19528    }
19529    for (int i = 0; i < element.getMaterial().size(); i++) {
19530      composeCodeableConcept(t, "PackagedProductDefinitionPackagingComponent", "material", element.getMaterial().get(i), i);
19531    }
19532    for (int i = 0; i < element.getAlternateMaterial().size(); i++) {
19533      composeCodeableConcept(t, "PackagedProductDefinitionPackagingComponent", "alternateMaterial", element.getAlternateMaterial().get(i), i);
19534    }
19535    for (int i = 0; i < element.getShelfLifeStorage().size(); i++) {
19536      composeProductShelfLife(t, "PackagedProductDefinitionPackagingComponent", "shelfLifeStorage", element.getShelfLifeStorage().get(i), i);
19537    }
19538    for (int i = 0; i < element.getManufacturer().size(); i++) {
19539      composeReference(t, "PackagedProductDefinitionPackagingComponent", "manufacturer", element.getManufacturer().get(i), i);
19540    }
19541    for (int i = 0; i < element.getProperty().size(); i++) {
19542      composePackagedProductDefinitionPackagingPropertyComponent(t, "PackagedProductDefinitionPackagingComponent", "property", element.getProperty().get(i), i);
19543    }
19544    for (int i = 0; i < element.getContainedItem().size(); i++) {
19545      composePackagedProductDefinitionPackagingContainedItemComponent(t, "PackagedProductDefinitionPackagingComponent", "containedItem", element.getContainedItem().get(i), i);
19546    }
19547    for (int i = 0; i < element.getPackaging().size(); i++) {
19548      composePackagedProductDefinitionPackagingComponent(t, "PackagedProductDefinitionPackagingComponent", "packaging", element.getPackaging().get(i), i);
19549    }
19550  }
19551
19552  protected void composePackagedProductDefinitionPackagingPropertyComponent(Complex parent, String parentType, String name, PackagedProductDefinition.PackagedProductDefinitionPackagingPropertyComponent element, int index) {
19553    if (element == null) 
19554      return;
19555    Complex t;
19556    if (Utilities.noString(parentType))
19557      t = parent;
19558    else {
19559      t = parent.predicate("fhir:"+parentType+'.'+name);
19560    }
19561    composeBackboneElement(t, "property", name, element, index);
19562    if (element.hasType()) {
19563      composeCodeableConcept(t, "PackagedProductDefinitionPackagingPropertyComponent", "type", element.getType(), -1);
19564    }
19565    if (element.hasValue()) {
19566      composeType(t, "PackagedProductDefinitionPackagingPropertyComponent", "value", element.getValue(), -1);
19567    }
19568  }
19569
19570  protected void composePackagedProductDefinitionPackagingContainedItemComponent(Complex parent, String parentType, String name, PackagedProductDefinition.PackagedProductDefinitionPackagingContainedItemComponent element, int index) {
19571    if (element == null) 
19572      return;
19573    Complex t;
19574    if (Utilities.noString(parentType))
19575      t = parent;
19576    else {
19577      t = parent.predicate("fhir:"+parentType+'.'+name);
19578    }
19579    composeBackboneElement(t, "containedItem", name, element, index);
19580    if (element.hasItem()) {
19581      composeCodeableReference(t, "PackagedProductDefinitionPackagingContainedItemComponent", "item", element.getItem(), -1);
19582    }
19583    if (element.hasAmount()) {
19584      composeQuantity(t, "PackagedProductDefinitionPackagingContainedItemComponent", "amount", element.getAmount(), -1);
19585    }
19586  }
19587
19588  protected void composeParameters(Complex parent, String parentType, String name, Parameters element, int index) {
19589    if (element == null) 
19590      return;
19591    Complex t;
19592    if (Utilities.noString(parentType))
19593      t = parent;
19594    else {
19595      t = parent.predicate("fhir:"+parentType+'.'+name);
19596    }
19597    composeResource(t, "Parameters", name, element, index);
19598    for (int i = 0; i < element.getParameter().size(); i++) {
19599      composeParametersParameterComponent(t, "Parameters", "parameter", element.getParameter().get(i), i);
19600    }
19601  }
19602
19603  protected void composeParametersParameterComponent(Complex parent, String parentType, String name, Parameters.ParametersParameterComponent element, int index) {
19604    if (element == null) 
19605      return;
19606    Complex t;
19607    if (Utilities.noString(parentType))
19608      t = parent;
19609    else {
19610      t = parent.predicate("fhir:"+parentType+'.'+name);
19611    }
19612    composeBackboneElement(t, "parameter", name, element, index);
19613    if (element.hasNameElement()) {
19614      composeString(t, "ParametersParameterComponent", "name", element.getNameElement(), -1);
19615    }
19616    if (element.hasValue()) {
19617      composeType(t, "ParametersParameterComponent", "value", element.getValue(), -1);
19618    }
19619    if (element.hasResource()) {
19620      composeResource(t, "ParametersParameterComponent", "resource", element.getResource(), -1);
19621    }
19622    for (int i = 0; i < element.getPart().size(); i++) {
19623      composeParametersParameterComponent(t, "ParametersParameterComponent", "part", element.getPart().get(i), i);
19624    }
19625  }
19626
19627  protected void composePatient(Complex parent, String parentType, String name, Patient element, int index) {
19628    if (element == null) 
19629      return;
19630    Complex t;
19631    if (Utilities.noString(parentType))
19632      t = parent;
19633    else {
19634      t = parent.predicate("fhir:"+parentType+'.'+name);
19635    }
19636    composeDomainResource(t, "Patient", name, element, index);
19637    for (int i = 0; i < element.getIdentifier().size(); i++) {
19638      composeIdentifier(t, "Patient", "identifier", element.getIdentifier().get(i), i);
19639    }
19640    if (element.hasActiveElement()) {
19641      composeBoolean(t, "Patient", "active", element.getActiveElement(), -1);
19642    }
19643    for (int i = 0; i < element.getName().size(); i++) {
19644      composeHumanName(t, "Patient", "name", element.getName().get(i), i);
19645    }
19646    for (int i = 0; i < element.getTelecom().size(); i++) {
19647      composeContactPoint(t, "Patient", "telecom", element.getTelecom().get(i), i);
19648    }
19649    if (element.hasGenderElement()) {
19650      composeEnum(t, "Patient", "gender", element.getGenderElement(), -1);
19651    }
19652    if (element.hasBirthDateElement()) {
19653      composeDate(t, "Patient", "birthDate", element.getBirthDateElement(), -1);
19654    }
19655    if (element.hasDeceased()) {
19656      composeType(t, "Patient", "deceased", element.getDeceased(), -1);
19657    }
19658    for (int i = 0; i < element.getAddress().size(); i++) {
19659      composeAddress(t, "Patient", "address", element.getAddress().get(i), i);
19660    }
19661    if (element.hasMaritalStatus()) {
19662      composeCodeableConcept(t, "Patient", "maritalStatus", element.getMaritalStatus(), -1);
19663    }
19664    if (element.hasMultipleBirth()) {
19665      composeType(t, "Patient", "multipleBirth", element.getMultipleBirth(), -1);
19666    }
19667    for (int i = 0; i < element.getPhoto().size(); i++) {
19668      composeAttachment(t, "Patient", "photo", element.getPhoto().get(i), i);
19669    }
19670    for (int i = 0; i < element.getContact().size(); i++) {
19671      composePatientContactComponent(t, "Patient", "contact", element.getContact().get(i), i);
19672    }
19673    for (int i = 0; i < element.getCommunication().size(); i++) {
19674      composePatientCommunicationComponent(t, "Patient", "communication", element.getCommunication().get(i), i);
19675    }
19676    for (int i = 0; i < element.getGeneralPractitioner().size(); i++) {
19677      composeReference(t, "Patient", "generalPractitioner", element.getGeneralPractitioner().get(i), i);
19678    }
19679    if (element.hasManagingOrganization()) {
19680      composeReference(t, "Patient", "managingOrganization", element.getManagingOrganization(), -1);
19681    }
19682    for (int i = 0; i < element.getLink().size(); i++) {
19683      composePatientLinkComponent(t, "Patient", "link", element.getLink().get(i), i);
19684    }
19685  }
19686
19687  protected void composePatientContactComponent(Complex parent, String parentType, String name, Patient.ContactComponent element, int index) {
19688    if (element == null) 
19689      return;
19690    Complex t;
19691    if (Utilities.noString(parentType))
19692      t = parent;
19693    else {
19694      t = parent.predicate("fhir:"+parentType+'.'+name);
19695    }
19696    composeBackboneElement(t, "contact", name, element, index);
19697    for (int i = 0; i < element.getRelationship().size(); i++) {
19698      composeCodeableConcept(t, "ContactComponent", "relationship", element.getRelationship().get(i), i);
19699    }
19700    if (element.hasName()) {
19701      composeHumanName(t, "ContactComponent", "name", element.getName(), -1);
19702    }
19703    for (int i = 0; i < element.getTelecom().size(); i++) {
19704      composeContactPoint(t, "ContactComponent", "telecom", element.getTelecom().get(i), i);
19705    }
19706    if (element.hasAddress()) {
19707      composeAddress(t, "ContactComponent", "address", element.getAddress(), -1);
19708    }
19709    if (element.hasGenderElement()) {
19710      composeEnum(t, "ContactComponent", "gender", element.getGenderElement(), -1);
19711    }
19712    if (element.hasOrganization()) {
19713      composeReference(t, "ContactComponent", "organization", element.getOrganization(), -1);
19714    }
19715    if (element.hasPeriod()) {
19716      composePeriod(t, "ContactComponent", "period", element.getPeriod(), -1);
19717    }
19718  }
19719
19720  protected void composePatientCommunicationComponent(Complex parent, String parentType, String name, Patient.PatientCommunicationComponent element, int index) {
19721    if (element == null) 
19722      return;
19723    Complex t;
19724    if (Utilities.noString(parentType))
19725      t = parent;
19726    else {
19727      t = parent.predicate("fhir:"+parentType+'.'+name);
19728    }
19729    composeBackboneElement(t, "communication", name, element, index);
19730    if (element.hasLanguage()) {
19731      composeCodeableConcept(t, "PatientCommunicationComponent", "language", element.getLanguage(), -1);
19732    }
19733    if (element.hasPreferredElement()) {
19734      composeBoolean(t, "PatientCommunicationComponent", "preferred", element.getPreferredElement(), -1);
19735    }
19736  }
19737
19738  protected void composePatientLinkComponent(Complex parent, String parentType, String name, Patient.PatientLinkComponent element, int index) {
19739    if (element == null) 
19740      return;
19741    Complex t;
19742    if (Utilities.noString(parentType))
19743      t = parent;
19744    else {
19745      t = parent.predicate("fhir:"+parentType+'.'+name);
19746    }
19747    composeBackboneElement(t, "link", name, element, index);
19748    if (element.hasOther()) {
19749      composeReference(t, "PatientLinkComponent", "other", element.getOther(), -1);
19750    }
19751    if (element.hasTypeElement()) {
19752      composeEnum(t, "PatientLinkComponent", "type", element.getTypeElement(), -1);
19753    }
19754  }
19755
19756  protected void composePaymentNotice(Complex parent, String parentType, String name, PaymentNotice element, int index) {
19757    if (element == null) 
19758      return;
19759    Complex t;
19760    if (Utilities.noString(parentType))
19761      t = parent;
19762    else {
19763      t = parent.predicate("fhir:"+parentType+'.'+name);
19764    }
19765    composeDomainResource(t, "PaymentNotice", name, element, index);
19766    for (int i = 0; i < element.getIdentifier().size(); i++) {
19767      composeIdentifier(t, "PaymentNotice", "identifier", element.getIdentifier().get(i), i);
19768    }
19769    if (element.hasStatusElement()) {
19770      composeEnum(t, "PaymentNotice", "status", element.getStatusElement(), -1);
19771    }
19772    if (element.hasRequest()) {
19773      composeReference(t, "PaymentNotice", "request", element.getRequest(), -1);
19774    }
19775    if (element.hasResponse()) {
19776      composeReference(t, "PaymentNotice", "response", element.getResponse(), -1);
19777    }
19778    if (element.hasCreatedElement()) {
19779      composeDateTime(t, "PaymentNotice", "created", element.getCreatedElement(), -1);
19780    }
19781    if (element.hasProvider()) {
19782      composeReference(t, "PaymentNotice", "provider", element.getProvider(), -1);
19783    }
19784    if (element.hasPayment()) {
19785      composeReference(t, "PaymentNotice", "payment", element.getPayment(), -1);
19786    }
19787    if (element.hasPaymentDateElement()) {
19788      composeDate(t, "PaymentNotice", "paymentDate", element.getPaymentDateElement(), -1);
19789    }
19790    if (element.hasPayee()) {
19791      composeReference(t, "PaymentNotice", "payee", element.getPayee(), -1);
19792    }
19793    if (element.hasRecipient()) {
19794      composeReference(t, "PaymentNotice", "recipient", element.getRecipient(), -1);
19795    }
19796    if (element.hasAmount()) {
19797      composeMoney(t, "PaymentNotice", "amount", element.getAmount(), -1);
19798    }
19799    if (element.hasPaymentStatus()) {
19800      composeCodeableConcept(t, "PaymentNotice", "paymentStatus", element.getPaymentStatus(), -1);
19801    }
19802  }
19803
19804  protected void composePaymentReconciliation(Complex parent, String parentType, String name, PaymentReconciliation element, int index) {
19805    if (element == null) 
19806      return;
19807    Complex t;
19808    if (Utilities.noString(parentType))
19809      t = parent;
19810    else {
19811      t = parent.predicate("fhir:"+parentType+'.'+name);
19812    }
19813    composeDomainResource(t, "PaymentReconciliation", name, element, index);
19814    for (int i = 0; i < element.getIdentifier().size(); i++) {
19815      composeIdentifier(t, "PaymentReconciliation", "identifier", element.getIdentifier().get(i), i);
19816    }
19817    if (element.hasType()) {
19818      composeCodeableConcept(t, "PaymentReconciliation", "type", element.getType(), -1);
19819    }
19820    if (element.hasStatusElement()) {
19821      composeEnum(t, "PaymentReconciliation", "status", element.getStatusElement(), -1);
19822    }
19823    if (element.hasKind()) {
19824      composeCodeableConcept(t, "PaymentReconciliation", "kind", element.getKind(), -1);
19825    }
19826    if (element.hasPeriod()) {
19827      composePeriod(t, "PaymentReconciliation", "period", element.getPeriod(), -1);
19828    }
19829    if (element.hasCreatedElement()) {
19830      composeDateTime(t, "PaymentReconciliation", "created", element.getCreatedElement(), -1);
19831    }
19832    if (element.hasEnterer()) {
19833      composeReference(t, "PaymentReconciliation", "enterer", element.getEnterer(), -1);
19834    }
19835    if (element.hasIssuerType()) {
19836      composeCodeableConcept(t, "PaymentReconciliation", "issuerType", element.getIssuerType(), -1);
19837    }
19838    if (element.hasPaymentIssuer()) {
19839      composeReference(t, "PaymentReconciliation", "paymentIssuer", element.getPaymentIssuer(), -1);
19840    }
19841    if (element.hasRequest()) {
19842      composeReference(t, "PaymentReconciliation", "request", element.getRequest(), -1);
19843    }
19844    if (element.hasRequestor()) {
19845      composeReference(t, "PaymentReconciliation", "requestor", element.getRequestor(), -1);
19846    }
19847    if (element.hasOutcomeElement()) {
19848      composeEnum(t, "PaymentReconciliation", "outcome", element.getOutcomeElement(), -1);
19849    }
19850    if (element.hasDispositionElement()) {
19851      composeString(t, "PaymentReconciliation", "disposition", element.getDispositionElement(), -1);
19852    }
19853    if (element.hasDateElement()) {
19854      composeDate(t, "PaymentReconciliation", "date", element.getDateElement(), -1);
19855    }
19856    if (element.hasLocation()) {
19857      composeReference(t, "PaymentReconciliation", "location", element.getLocation(), -1);
19858    }
19859    if (element.hasMethod()) {
19860      composeCodeableConcept(t, "PaymentReconciliation", "method", element.getMethod(), -1);
19861    }
19862    if (element.hasCardBrandElement()) {
19863      composeString(t, "PaymentReconciliation", "cardBrand", element.getCardBrandElement(), -1);
19864    }
19865    if (element.hasAccountNumberElement()) {
19866      composeString(t, "PaymentReconciliation", "accountNumber", element.getAccountNumberElement(), -1);
19867    }
19868    if (element.hasExpirationDateElement()) {
19869      composeDate(t, "PaymentReconciliation", "expirationDate", element.getExpirationDateElement(), -1);
19870    }
19871    if (element.hasProcessorElement()) {
19872      composeString(t, "PaymentReconciliation", "processor", element.getProcessorElement(), -1);
19873    }
19874    if (element.hasReferenceNumberElement()) {
19875      composeString(t, "PaymentReconciliation", "referenceNumber", element.getReferenceNumberElement(), -1);
19876    }
19877    if (element.hasAuthorizationElement()) {
19878      composeString(t, "PaymentReconciliation", "authorization", element.getAuthorizationElement(), -1);
19879    }
19880    if (element.hasTenderedAmount()) {
19881      composeMoney(t, "PaymentReconciliation", "tenderedAmount", element.getTenderedAmount(), -1);
19882    }
19883    if (element.hasReturnedAmount()) {
19884      composeMoney(t, "PaymentReconciliation", "returnedAmount", element.getReturnedAmount(), -1);
19885    }
19886    if (element.hasAmount()) {
19887      composeMoney(t, "PaymentReconciliation", "amount", element.getAmount(), -1);
19888    }
19889    if (element.hasPaymentIdentifier()) {
19890      composeIdentifier(t, "PaymentReconciliation", "paymentIdentifier", element.getPaymentIdentifier(), -1);
19891    }
19892    for (int i = 0; i < element.getAllocation().size(); i++) {
19893      composePaymentReconciliationAllocationComponent(t, "PaymentReconciliation", "allocation", element.getAllocation().get(i), i);
19894    }
19895    if (element.hasFormCode()) {
19896      composeCodeableConcept(t, "PaymentReconciliation", "formCode", element.getFormCode(), -1);
19897    }
19898    for (int i = 0; i < element.getProcessNote().size(); i++) {
19899      composePaymentReconciliationNotesComponent(t, "PaymentReconciliation", "processNote", element.getProcessNote().get(i), i);
19900    }
19901  }
19902
19903  protected void composePaymentReconciliationAllocationComponent(Complex parent, String parentType, String name, PaymentReconciliation.PaymentReconciliationAllocationComponent element, int index) {
19904    if (element == null) 
19905      return;
19906    Complex t;
19907    if (Utilities.noString(parentType))
19908      t = parent;
19909    else {
19910      t = parent.predicate("fhir:"+parentType+'.'+name);
19911    }
19912    composeBackboneElement(t, "allocation", name, element, index);
19913    if (element.hasIdentifier()) {
19914      composeIdentifier(t, "PaymentReconciliationAllocationComponent", "identifier", element.getIdentifier(), -1);
19915    }
19916    if (element.hasPredecessor()) {
19917      composeIdentifier(t, "PaymentReconciliationAllocationComponent", "predecessor", element.getPredecessor(), -1);
19918    }
19919    if (element.hasTarget()) {
19920      composeReference(t, "PaymentReconciliationAllocationComponent", "target", element.getTarget(), -1);
19921    }
19922    if (element.hasTargetItem()) {
19923      composeType(t, "PaymentReconciliationAllocationComponent", "targetItem", element.getTargetItem(), -1);
19924    }
19925    if (element.hasEncounter()) {
19926      composeReference(t, "PaymentReconciliationAllocationComponent", "encounter", element.getEncounter(), -1);
19927    }
19928    if (element.hasAccount()) {
19929      composeReference(t, "PaymentReconciliationAllocationComponent", "account", element.getAccount(), -1);
19930    }
19931    if (element.hasType()) {
19932      composeCodeableConcept(t, "PaymentReconciliationAllocationComponent", "type", element.getType(), -1);
19933    }
19934    if (element.hasSubmitter()) {
19935      composeReference(t, "PaymentReconciliationAllocationComponent", "submitter", element.getSubmitter(), -1);
19936    }
19937    if (element.hasResponse()) {
19938      composeReference(t, "PaymentReconciliationAllocationComponent", "response", element.getResponse(), -1);
19939    }
19940    if (element.hasDateElement()) {
19941      composeDate(t, "PaymentReconciliationAllocationComponent", "date", element.getDateElement(), -1);
19942    }
19943    if (element.hasResponsible()) {
19944      composeReference(t, "PaymentReconciliationAllocationComponent", "responsible", element.getResponsible(), -1);
19945    }
19946    if (element.hasPayee()) {
19947      composeReference(t, "PaymentReconciliationAllocationComponent", "payee", element.getPayee(), -1);
19948    }
19949    if (element.hasAmount()) {
19950      composeMoney(t, "PaymentReconciliationAllocationComponent", "amount", element.getAmount(), -1);
19951    }
19952  }
19953
19954  protected void composePaymentReconciliationNotesComponent(Complex parent, String parentType, String name, PaymentReconciliation.NotesComponent element, int index) {
19955    if (element == null) 
19956      return;
19957    Complex t;
19958    if (Utilities.noString(parentType))
19959      t = parent;
19960    else {
19961      t = parent.predicate("fhir:"+parentType+'.'+name);
19962    }
19963    composeBackboneElement(t, "processNote", name, element, index);
19964    if (element.hasTypeElement()) {
19965      composeEnum(t, "NotesComponent", "type", element.getTypeElement(), -1);
19966    }
19967    if (element.hasTextElement()) {
19968      composeString(t, "NotesComponent", "text", element.getTextElement(), -1);
19969    }
19970  }
19971
19972  protected void composePermission(Complex parent, String parentType, String name, Permission element, int index) {
19973    if (element == null) 
19974      return;
19975    Complex t;
19976    if (Utilities.noString(parentType))
19977      t = parent;
19978    else {
19979      t = parent.predicate("fhir:"+parentType+'.'+name);
19980    }
19981    composeDomainResource(t, "Permission", name, element, index);
19982    if (element.hasStatusElement()) {
19983      composeEnum(t, "Permission", "status", element.getStatusElement(), -1);
19984    }
19985    if (element.hasAsserter()) {
19986      composeReference(t, "Permission", "asserter", element.getAsserter(), -1);
19987    }
19988    for (int i = 0; i < element.getDate().size(); i++) {
19989      composeDateTime(t, "Permission", "date", element.getDate().get(i), i);
19990    }
19991    if (element.hasValidity()) {
19992      composePeriod(t, "Permission", "validity", element.getValidity(), -1);
19993    }
19994    if (element.hasJustification()) {
19995      composePermissionJustificationComponent(t, "Permission", "justification", element.getJustification(), -1);
19996    }
19997    if (element.hasCombiningElement()) {
19998      composeEnum(t, "Permission", "combining", element.getCombiningElement(), -1);
19999    }
20000    for (int i = 0; i < element.getRule().size(); i++) {
20001      composePermissionrRuleComponent(t, "Permission", "rule", element.getRule().get(i), i);
20002    }
20003  }
20004
20005  protected void composePermissionJustificationComponent(Complex parent, String parentType, String name, Permission.PermissionJustificationComponent element, int index) {
20006    if (element == null) 
20007      return;
20008    Complex t;
20009    if (Utilities.noString(parentType))
20010      t = parent;
20011    else {
20012      t = parent.predicate("fhir:"+parentType+'.'+name);
20013    }
20014    composeBackboneElement(t, "justification", name, element, index);
20015    for (int i = 0; i < element.getBasis().size(); i++) {
20016      composeCodeableConcept(t, "PermissionJustificationComponent", "basis", element.getBasis().get(i), i);
20017    }
20018    for (int i = 0; i < element.getEvidence().size(); i++) {
20019      composeReference(t, "PermissionJustificationComponent", "evidence", element.getEvidence().get(i), i);
20020    }
20021  }
20022
20023  protected void composePermissionrRuleComponent(Complex parent, String parentType, String name, Permission.RuleComponent element, int index) {
20024    if (element == null) 
20025      return;
20026    Complex t;
20027    if (Utilities.noString(parentType))
20028      t = parent;
20029    else {
20030      t = parent.predicate("fhir:"+parentType+'.'+name);
20031    }
20032    composeBackboneElement(t, "rule", name, element, index);
20033    if (element.hasTypeElement()) {
20034      composeEnum(t, "RuleComponent", "type", element.getTypeElement(), -1);
20035    }
20036    for (int i = 0; i < element.getData().size(); i++) {
20037      composePermissionrRuleDataComponent(t, "RuleComponent", "data", element.getData().get(i), i);
20038    }
20039    for (int i = 0; i < element.getActivity().size(); i++) {
20040      composePermissionrRuleActivityComponent(t, "RuleComponent", "activity", element.getActivity().get(i), i);
20041    }
20042    for (int i = 0; i < element.getLimit().size(); i++) {
20043      composeCodeableConcept(t, "RuleComponent", "limit", element.getLimit().get(i), i);
20044    }
20045  }
20046
20047  protected void composePermissionrRuleDataComponent(Complex parent, String parentType, String name, Permission.RuleDataComponent element, int index) {
20048    if (element == null) 
20049      return;
20050    Complex t;
20051    if (Utilities.noString(parentType))
20052      t = parent;
20053    else {
20054      t = parent.predicate("fhir:"+parentType+'.'+name);
20055    }
20056    composeBackboneElement(t, "data", name, element, index);
20057    for (int i = 0; i < element.getResource().size(); i++) {
20058      composePermissionrRuleDataResourceComponent(t, "RuleDataComponent", "resource", element.getResource().get(i), i);
20059    }
20060    for (int i = 0; i < element.getSecurity().size(); i++) {
20061      composeCoding(t, "RuleDataComponent", "security", element.getSecurity().get(i), i);
20062    }
20063    for (int i = 0; i < element.getPeriod().size(); i++) {
20064      composePeriod(t, "RuleDataComponent", "period", element.getPeriod().get(i), i);
20065    }
20066    if (element.hasExpression()) {
20067      composeExpression(t, "RuleDataComponent", "expression", element.getExpression(), -1);
20068    }
20069  }
20070
20071  protected void composePermissionrRuleDataResourceComponent(Complex parent, String parentType, String name, Permission.RuleDataResourceComponent element, int index) {
20072    if (element == null) 
20073      return;
20074    Complex t;
20075    if (Utilities.noString(parentType))
20076      t = parent;
20077    else {
20078      t = parent.predicate("fhir:"+parentType+'.'+name);
20079    }
20080    composeBackboneElement(t, "resource", name, element, index);
20081    if (element.hasMeaningElement()) {
20082      composeEnum(t, "RuleDataResourceComponent", "meaning", element.getMeaningElement(), -1);
20083    }
20084    if (element.hasReference()) {
20085      composeReference(t, "RuleDataResourceComponent", "reference", element.getReference(), -1);
20086    }
20087  }
20088
20089  protected void composePermissionrRuleActivityComponent(Complex parent, String parentType, String name, Permission.RuleActivityComponent element, int index) {
20090    if (element == null) 
20091      return;
20092    Complex t;
20093    if (Utilities.noString(parentType))
20094      t = parent;
20095    else {
20096      t = parent.predicate("fhir:"+parentType+'.'+name);
20097    }
20098    composeBackboneElement(t, "activity", name, element, index);
20099    for (int i = 0; i < element.getActor().size(); i++) {
20100      composeReference(t, "RuleActivityComponent", "actor", element.getActor().get(i), i);
20101    }
20102    for (int i = 0; i < element.getAction().size(); i++) {
20103      composeCodeableConcept(t, "RuleActivityComponent", "action", element.getAction().get(i), i);
20104    }
20105    for (int i = 0; i < element.getPurpose().size(); i++) {
20106      composeCodeableConcept(t, "RuleActivityComponent", "purpose", element.getPurpose().get(i), i);
20107    }
20108  }
20109
20110  protected void composePerson(Complex parent, String parentType, String name, Person element, int index) {
20111    if (element == null) 
20112      return;
20113    Complex t;
20114    if (Utilities.noString(parentType))
20115      t = parent;
20116    else {
20117      t = parent.predicate("fhir:"+parentType+'.'+name);
20118    }
20119    composeDomainResource(t, "Person", name, element, index);
20120    for (int i = 0; i < element.getIdentifier().size(); i++) {
20121      composeIdentifier(t, "Person", "identifier", element.getIdentifier().get(i), i);
20122    }
20123    if (element.hasActiveElement()) {
20124      composeBoolean(t, "Person", "active", element.getActiveElement(), -1);
20125    }
20126    for (int i = 0; i < element.getName().size(); i++) {
20127      composeHumanName(t, "Person", "name", element.getName().get(i), i);
20128    }
20129    for (int i = 0; i < element.getTelecom().size(); i++) {
20130      composeContactPoint(t, "Person", "telecom", element.getTelecom().get(i), i);
20131    }
20132    if (element.hasGenderElement()) {
20133      composeEnum(t, "Person", "gender", element.getGenderElement(), -1);
20134    }
20135    if (element.hasBirthDateElement()) {
20136      composeDate(t, "Person", "birthDate", element.getBirthDateElement(), -1);
20137    }
20138    if (element.hasDeceased()) {
20139      composeType(t, "Person", "deceased", element.getDeceased(), -1);
20140    }
20141    for (int i = 0; i < element.getAddress().size(); i++) {
20142      composeAddress(t, "Person", "address", element.getAddress().get(i), i);
20143    }
20144    if (element.hasMaritalStatus()) {
20145      composeCodeableConcept(t, "Person", "maritalStatus", element.getMaritalStatus(), -1);
20146    }
20147    for (int i = 0; i < element.getPhoto().size(); i++) {
20148      composeAttachment(t, "Person", "photo", element.getPhoto().get(i), i);
20149    }
20150    for (int i = 0; i < element.getCommunication().size(); i++) {
20151      composePersonCommunicationComponent(t, "Person", "communication", element.getCommunication().get(i), i);
20152    }
20153    if (element.hasManagingOrganization()) {
20154      composeReference(t, "Person", "managingOrganization", element.getManagingOrganization(), -1);
20155    }
20156    for (int i = 0; i < element.getLink().size(); i++) {
20157      composePersonLinkComponent(t, "Person", "link", element.getLink().get(i), i);
20158    }
20159  }
20160
20161  protected void composePersonCommunicationComponent(Complex parent, String parentType, String name, Person.PersonCommunicationComponent element, int index) {
20162    if (element == null) 
20163      return;
20164    Complex t;
20165    if (Utilities.noString(parentType))
20166      t = parent;
20167    else {
20168      t = parent.predicate("fhir:"+parentType+'.'+name);
20169    }
20170    composeBackboneElement(t, "communication", name, element, index);
20171    if (element.hasLanguage()) {
20172      composeCodeableConcept(t, "PersonCommunicationComponent", "language", element.getLanguage(), -1);
20173    }
20174    if (element.hasPreferredElement()) {
20175      composeBoolean(t, "PersonCommunicationComponent", "preferred", element.getPreferredElement(), -1);
20176    }
20177  }
20178
20179  protected void composePersonLinkComponent(Complex parent, String parentType, String name, Person.PersonLinkComponent element, int index) {
20180    if (element == null) 
20181      return;
20182    Complex t;
20183    if (Utilities.noString(parentType))
20184      t = parent;
20185    else {
20186      t = parent.predicate("fhir:"+parentType+'.'+name);
20187    }
20188    composeBackboneElement(t, "link", name, element, index);
20189    if (element.hasTarget()) {
20190      composeReference(t, "PersonLinkComponent", "target", element.getTarget(), -1);
20191    }
20192    if (element.hasAssuranceElement()) {
20193      composeEnum(t, "PersonLinkComponent", "assurance", element.getAssuranceElement(), -1);
20194    }
20195  }
20196
20197  protected void composePlanDefinition(Complex parent, String parentType, String name, PlanDefinition element, int index) {
20198    if (element == null) 
20199      return;
20200    Complex t;
20201    if (Utilities.noString(parentType))
20202      t = parent;
20203    else {
20204      t = parent.predicate("fhir:"+parentType+'.'+name);
20205    }
20206    composeMetadataResource(t, "PlanDefinition", name, element, index);
20207    if (element.hasUrlElement()) {
20208      composeUri(t, "PlanDefinition", "url", element.getUrlElement(), -1);
20209    }
20210    for (int i = 0; i < element.getIdentifier().size(); i++) {
20211      composeIdentifier(t, "PlanDefinition", "identifier", element.getIdentifier().get(i), i);
20212    }
20213    if (element.hasVersionElement()) {
20214      composeString(t, "PlanDefinition", "version", element.getVersionElement(), -1);
20215    }
20216    if (element.hasNameElement()) {
20217      composeString(t, "PlanDefinition", "name", element.getNameElement(), -1);
20218    }
20219    if (element.hasTitleElement()) {
20220      composeString(t, "PlanDefinition", "title", element.getTitleElement(), -1);
20221    }
20222    if (element.hasSubtitleElement()) {
20223      composeString(t, "PlanDefinition", "subtitle", element.getSubtitleElement(), -1);
20224    }
20225    if (element.hasType()) {
20226      composeCodeableConcept(t, "PlanDefinition", "type", element.getType(), -1);
20227    }
20228    if (element.hasStatusElement()) {
20229      composeEnum(t, "PlanDefinition", "status", element.getStatusElement(), -1);
20230    }
20231    if (element.hasExperimentalElement()) {
20232      composeBoolean(t, "PlanDefinition", "experimental", element.getExperimentalElement(), -1);
20233    }
20234    if (element.hasSubject()) {
20235      composeType(t, "PlanDefinition", "subject", element.getSubject(), -1);
20236    }
20237    if (element.hasDateElement()) {
20238      composeDateTime(t, "PlanDefinition", "date", element.getDateElement(), -1);
20239    }
20240    if (element.hasPublisherElement()) {
20241      composeString(t, "PlanDefinition", "publisher", element.getPublisherElement(), -1);
20242    }
20243    for (int i = 0; i < element.getContact().size(); i++) {
20244      composeContactDetail(t, "PlanDefinition", "contact", element.getContact().get(i), i);
20245    }
20246    if (element.hasDescriptionElement()) {
20247      composeMarkdown(t, "PlanDefinition", "description", element.getDescriptionElement(), -1);
20248    }
20249    for (int i = 0; i < element.getUseContext().size(); i++) {
20250      composeUsageContext(t, "PlanDefinition", "useContext", element.getUseContext().get(i), i);
20251    }
20252    for (int i = 0; i < element.getJurisdiction().size(); i++) {
20253      composeCodeableConcept(t, "PlanDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
20254    }
20255    if (element.hasPurposeElement()) {
20256      composeMarkdown(t, "PlanDefinition", "purpose", element.getPurposeElement(), -1);
20257    }
20258    if (element.hasUsageElement()) {
20259      composeString(t, "PlanDefinition", "usage", element.getUsageElement(), -1);
20260    }
20261    if (element.hasCopyrightElement()) {
20262      composeMarkdown(t, "PlanDefinition", "copyright", element.getCopyrightElement(), -1);
20263    }
20264    if (element.hasApprovalDateElement()) {
20265      composeDate(t, "PlanDefinition", "approvalDate", element.getApprovalDateElement(), -1);
20266    }
20267    if (element.hasLastReviewDateElement()) {
20268      composeDate(t, "PlanDefinition", "lastReviewDate", element.getLastReviewDateElement(), -1);
20269    }
20270    if (element.hasEffectivePeriod()) {
20271      composePeriod(t, "PlanDefinition", "effectivePeriod", element.getEffectivePeriod(), -1);
20272    }
20273    for (int i = 0; i < element.getTopic().size(); i++) {
20274      composeCodeableConcept(t, "PlanDefinition", "topic", element.getTopic().get(i), i);
20275    }
20276    for (int i = 0; i < element.getAuthor().size(); i++) {
20277      composeContactDetail(t, "PlanDefinition", "author", element.getAuthor().get(i), i);
20278    }
20279    for (int i = 0; i < element.getEditor().size(); i++) {
20280      composeContactDetail(t, "PlanDefinition", "editor", element.getEditor().get(i), i);
20281    }
20282    for (int i = 0; i < element.getReviewer().size(); i++) {
20283      composeContactDetail(t, "PlanDefinition", "reviewer", element.getReviewer().get(i), i);
20284    }
20285    for (int i = 0; i < element.getEndorser().size(); i++) {
20286      composeContactDetail(t, "PlanDefinition", "endorser", element.getEndorser().get(i), i);
20287    }
20288    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
20289      composeRelatedArtifact(t, "PlanDefinition", "relatedArtifact", element.getRelatedArtifact().get(i), i);
20290    }
20291    for (int i = 0; i < element.getLibrary().size(); i++) {
20292      composeCanonical(t, "PlanDefinition", "library", element.getLibrary().get(i), i);
20293    }
20294    for (int i = 0; i < element.getGoal().size(); i++) {
20295      composePlanDefinitionGoalComponent(t, "PlanDefinition", "goal", element.getGoal().get(i), i);
20296    }
20297    for (int i = 0; i < element.getActor().size(); i++) {
20298      composePlanDefinitionActorComponent(t, "PlanDefinition", "actor", element.getActor().get(i), i);
20299    }
20300    for (int i = 0; i < element.getAction().size(); i++) {
20301      composePlanDefinitionActionComponent(t, "PlanDefinition", "action", element.getAction().get(i), i);
20302    }
20303    if (element.hasAsNeeded()) {
20304      composeType(t, "PlanDefinition", "asNeeded", element.getAsNeeded(), -1);
20305    }
20306  }
20307
20308  protected void composePlanDefinitionGoalComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionGoalComponent element, int index) {
20309    if (element == null) 
20310      return;
20311    Complex t;
20312    if (Utilities.noString(parentType))
20313      t = parent;
20314    else {
20315      t = parent.predicate("fhir:"+parentType+'.'+name);
20316    }
20317    composeBackboneElement(t, "goal", name, element, index);
20318    if (element.hasCategory()) {
20319      composeCodeableConcept(t, "PlanDefinitionGoalComponent", "category", element.getCategory(), -1);
20320    }
20321    if (element.hasDescription()) {
20322      composeCodeableConcept(t, "PlanDefinitionGoalComponent", "description", element.getDescription(), -1);
20323    }
20324    if (element.hasPriority()) {
20325      composeCodeableConcept(t, "PlanDefinitionGoalComponent", "priority", element.getPriority(), -1);
20326    }
20327    if (element.hasStart()) {
20328      composeCodeableConcept(t, "PlanDefinitionGoalComponent", "start", element.getStart(), -1);
20329    }
20330    for (int i = 0; i < element.getAddresses().size(); i++) {
20331      composeCodeableConcept(t, "PlanDefinitionGoalComponent", "addresses", element.getAddresses().get(i), i);
20332    }
20333    for (int i = 0; i < element.getDocumentation().size(); i++) {
20334      composeRelatedArtifact(t, "PlanDefinitionGoalComponent", "documentation", element.getDocumentation().get(i), i);
20335    }
20336    for (int i = 0; i < element.getTarget().size(); i++) {
20337      composePlanDefinitionGoalTargetComponent(t, "PlanDefinitionGoalComponent", "target", element.getTarget().get(i), i);
20338    }
20339  }
20340
20341  protected void composePlanDefinitionGoalTargetComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionGoalTargetComponent element, int index) {
20342    if (element == null) 
20343      return;
20344    Complex t;
20345    if (Utilities.noString(parentType))
20346      t = parent;
20347    else {
20348      t = parent.predicate("fhir:"+parentType+'.'+name);
20349    }
20350    composeBackboneElement(t, "target", name, element, index);
20351    if (element.hasMeasure()) {
20352      composeCodeableConcept(t, "PlanDefinitionGoalTargetComponent", "measure", element.getMeasure(), -1);
20353    }
20354    if (element.hasDetail()) {
20355      composeType(t, "PlanDefinitionGoalTargetComponent", "detail", element.getDetail(), -1);
20356    }
20357    if (element.hasDue()) {
20358      composeDuration(t, "PlanDefinitionGoalTargetComponent", "due", element.getDue(), -1);
20359    }
20360  }
20361
20362  protected void composePlanDefinitionActorComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionActorComponent element, int index) {
20363    if (element == null) 
20364      return;
20365    Complex t;
20366    if (Utilities.noString(parentType))
20367      t = parent;
20368    else {
20369      t = parent.predicate("fhir:"+parentType+'.'+name);
20370    }
20371    composeBackboneElement(t, "actor", name, element, index);
20372    if (element.hasTitleElement()) {
20373      composeString(t, "PlanDefinitionActorComponent", "title", element.getTitleElement(), -1);
20374    }
20375    if (element.hasDescriptionElement()) {
20376      composeMarkdown(t, "PlanDefinitionActorComponent", "description", element.getDescriptionElement(), -1);
20377    }
20378    for (int i = 0; i < element.getOption().size(); i++) {
20379      composePlanDefinitionActorOptionComponent(t, "PlanDefinitionActorComponent", "option", element.getOption().get(i), i);
20380    }
20381  }
20382
20383  protected void composePlanDefinitionActorOptionComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionActorOptionComponent element, int index) {
20384    if (element == null) 
20385      return;
20386    Complex t;
20387    if (Utilities.noString(parentType))
20388      t = parent;
20389    else {
20390      t = parent.predicate("fhir:"+parentType+'.'+name);
20391    }
20392    composeBackboneElement(t, "option", name, element, index);
20393    if (element.hasTypeElement()) {
20394      composeEnum(t, "PlanDefinitionActorOptionComponent", "type", element.getTypeElement(), -1);
20395    }
20396    if (element.hasTypeCanonicalElement()) {
20397      composeCanonical(t, "PlanDefinitionActorOptionComponent", "typeCanonical", element.getTypeCanonicalElement(), -1);
20398    }
20399    if (element.hasTypeReference()) {
20400      composeReference(t, "PlanDefinitionActorOptionComponent", "typeReference", element.getTypeReference(), -1);
20401    }
20402    if (element.hasRole()) {
20403      composeCodeableConcept(t, "PlanDefinitionActorOptionComponent", "role", element.getRole(), -1);
20404    }
20405  }
20406
20407  protected void composePlanDefinitionActionComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionActionComponent element, int index) {
20408    if (element == null) 
20409      return;
20410    Complex t;
20411    if (Utilities.noString(parentType))
20412      t = parent;
20413    else {
20414      t = parent.predicate("fhir:"+parentType+'.'+name);
20415    }
20416    composeBackboneElement(t, "action", name, element, index);
20417    if (element.hasLinkIdElement()) {
20418      composeString(t, "PlanDefinitionActionComponent", "linkId", element.getLinkIdElement(), -1);
20419    }
20420    if (element.hasPrefixElement()) {
20421      composeString(t, "PlanDefinitionActionComponent", "prefix", element.getPrefixElement(), -1);
20422    }
20423    if (element.hasTitleElement()) {
20424      composeString(t, "PlanDefinitionActionComponent", "title", element.getTitleElement(), -1);
20425    }
20426    if (element.hasDescriptionElement()) {
20427      composeString(t, "PlanDefinitionActionComponent", "description", element.getDescriptionElement(), -1);
20428    }
20429    if (element.hasTextEquivalentElement()) {
20430      composeString(t, "PlanDefinitionActionComponent", "textEquivalent", element.getTextEquivalentElement(), -1);
20431    }
20432    if (element.hasPriorityElement()) {
20433      composeEnum(t, "PlanDefinitionActionComponent", "priority", element.getPriorityElement(), -1);
20434    }
20435    if (element.hasCode()) {
20436      composeCodeableConcept(t, "PlanDefinitionActionComponent", "code", element.getCode(), -1);
20437    }
20438    for (int i = 0; i < element.getReason().size(); i++) {
20439      composeCodeableConcept(t, "PlanDefinitionActionComponent", "reason", element.getReason().get(i), i);
20440    }
20441    for (int i = 0; i < element.getDocumentation().size(); i++) {
20442      composeRelatedArtifact(t, "PlanDefinitionActionComponent", "documentation", element.getDocumentation().get(i), i);
20443    }
20444    for (int i = 0; i < element.getGoalId().size(); i++) {
20445      composeId(t, "PlanDefinitionActionComponent", "goalId", element.getGoalId().get(i), i);
20446    }
20447    if (element.hasSubject()) {
20448      composeType(t, "PlanDefinitionActionComponent", "subject", element.getSubject(), -1);
20449    }
20450    for (int i = 0; i < element.getTrigger().size(); i++) {
20451      composeTriggerDefinition(t, "PlanDefinitionActionComponent", "trigger", element.getTrigger().get(i), i);
20452    }
20453    for (int i = 0; i < element.getCondition().size(); i++) {
20454      composePlanDefinitionActionConditionComponent(t, "PlanDefinitionActionComponent", "condition", element.getCondition().get(i), i);
20455    }
20456    for (int i = 0; i < element.getInput().size(); i++) {
20457      composePlanDefinitionActionInputComponent(t, "PlanDefinitionActionComponent", "input", element.getInput().get(i), i);
20458    }
20459    for (int i = 0; i < element.getOutput().size(); i++) {
20460      composePlanDefinitionActionOutputComponent(t, "PlanDefinitionActionComponent", "output", element.getOutput().get(i), i);
20461    }
20462    for (int i = 0; i < element.getRelatedAction().size(); i++) {
20463      composePlanDefinitionActionRelatedActionComponent(t, "PlanDefinitionActionComponent", "relatedAction", element.getRelatedAction().get(i), i);
20464    }
20465    if (element.hasTiming()) {
20466      composeType(t, "PlanDefinitionActionComponent", "timing", element.getTiming(), -1);
20467    }
20468    if (element.hasLocation()) {
20469      composeCodeableReference(t, "PlanDefinitionActionComponent", "location", element.getLocation(), -1);
20470    }
20471    for (int i = 0; i < element.getParticipant().size(); i++) {
20472      composePlanDefinitionActionParticipantComponent(t, "PlanDefinitionActionComponent", "participant", element.getParticipant().get(i), i);
20473    }
20474    if (element.hasType()) {
20475      composeCodeableConcept(t, "PlanDefinitionActionComponent", "type", element.getType(), -1);
20476    }
20477    if (element.hasGroupingBehaviorElement()) {
20478      composeEnum(t, "PlanDefinitionActionComponent", "groupingBehavior", element.getGroupingBehaviorElement(), -1);
20479    }
20480    if (element.hasSelectionBehaviorElement()) {
20481      composeEnum(t, "PlanDefinitionActionComponent", "selectionBehavior", element.getSelectionBehaviorElement(), -1);
20482    }
20483    if (element.hasRequiredBehaviorElement()) {
20484      composeEnum(t, "PlanDefinitionActionComponent", "requiredBehavior", element.getRequiredBehaviorElement(), -1);
20485    }
20486    if (element.hasPrecheckBehaviorElement()) {
20487      composeEnum(t, "PlanDefinitionActionComponent", "precheckBehavior", element.getPrecheckBehaviorElement(), -1);
20488    }
20489    if (element.hasCardinalityBehaviorElement()) {
20490      composeEnum(t, "PlanDefinitionActionComponent", "cardinalityBehavior", element.getCardinalityBehaviorElement(), -1);
20491    }
20492    if (element.hasDefinition()) {
20493      composeType(t, "PlanDefinitionActionComponent", "definition", element.getDefinition(), -1);
20494    }
20495    if (element.hasTransformElement()) {
20496      composeCanonical(t, "PlanDefinitionActionComponent", "transform", element.getTransformElement(), -1);
20497    }
20498    for (int i = 0; i < element.getDynamicValue().size(); i++) {
20499      composePlanDefinitionActionDynamicValueComponent(t, "PlanDefinitionActionComponent", "dynamicValue", element.getDynamicValue().get(i), i);
20500    }
20501    for (int i = 0; i < element.getAction().size(); i++) {
20502      composePlanDefinitionActionComponent(t, "PlanDefinitionActionComponent", "action", element.getAction().get(i), i);
20503    }
20504  }
20505
20506  protected void composePlanDefinitionActionConditionComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionActionConditionComponent element, int index) {
20507    if (element == null) 
20508      return;
20509    Complex t;
20510    if (Utilities.noString(parentType))
20511      t = parent;
20512    else {
20513      t = parent.predicate("fhir:"+parentType+'.'+name);
20514    }
20515    composeBackboneElement(t, "condition", name, element, index);
20516    if (element.hasKindElement()) {
20517      composeEnum(t, "PlanDefinitionActionConditionComponent", "kind", element.getKindElement(), -1);
20518    }
20519    if (element.hasExpression()) {
20520      composeExpression(t, "PlanDefinitionActionConditionComponent", "expression", element.getExpression(), -1);
20521    }
20522  }
20523
20524  protected void composePlanDefinitionActionInputComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionActionInputComponent element, int index) {
20525    if (element == null) 
20526      return;
20527    Complex t;
20528    if (Utilities.noString(parentType))
20529      t = parent;
20530    else {
20531      t = parent.predicate("fhir:"+parentType+'.'+name);
20532    }
20533    composeBackboneElement(t, "input", name, element, index);
20534    if (element.hasTitleElement()) {
20535      composeString(t, "PlanDefinitionActionInputComponent", "title", element.getTitleElement(), -1);
20536    }
20537    if (element.hasRequirement()) {
20538      composeDataRequirement(t, "PlanDefinitionActionInputComponent", "requirement", element.getRequirement(), -1);
20539    }
20540    if (element.hasRelatedDataElement()) {
20541      composeId(t, "PlanDefinitionActionInputComponent", "relatedData", element.getRelatedDataElement(), -1);
20542    }
20543  }
20544
20545  protected void composePlanDefinitionActionOutputComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionActionOutputComponent element, int index) {
20546    if (element == null) 
20547      return;
20548    Complex t;
20549    if (Utilities.noString(parentType))
20550      t = parent;
20551    else {
20552      t = parent.predicate("fhir:"+parentType+'.'+name);
20553    }
20554    composeBackboneElement(t, "output", name, element, index);
20555    if (element.hasTitleElement()) {
20556      composeString(t, "PlanDefinitionActionOutputComponent", "title", element.getTitleElement(), -1);
20557    }
20558    if (element.hasRequirement()) {
20559      composeDataRequirement(t, "PlanDefinitionActionOutputComponent", "requirement", element.getRequirement(), -1);
20560    }
20561    if (element.hasRelatedDataElement()) {
20562      composeString(t, "PlanDefinitionActionOutputComponent", "relatedData", element.getRelatedDataElement(), -1);
20563    }
20564  }
20565
20566  protected void composePlanDefinitionActionRelatedActionComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionActionRelatedActionComponent element, int index) {
20567    if (element == null) 
20568      return;
20569    Complex t;
20570    if (Utilities.noString(parentType))
20571      t = parent;
20572    else {
20573      t = parent.predicate("fhir:"+parentType+'.'+name);
20574    }
20575    composeBackboneElement(t, "relatedAction", name, element, index);
20576    if (element.hasTargetIdElement()) {
20577      composeId(t, "PlanDefinitionActionRelatedActionComponent", "targetId", element.getTargetIdElement(), -1);
20578    }
20579    if (element.hasRelationshipElement()) {
20580      composeEnum(t, "PlanDefinitionActionRelatedActionComponent", "relationship", element.getRelationshipElement(), -1);
20581    }
20582    if (element.hasOffset()) {
20583      composeType(t, "PlanDefinitionActionRelatedActionComponent", "offset", element.getOffset(), -1);
20584    }
20585  }
20586
20587  protected void composePlanDefinitionActionParticipantComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionActionParticipantComponent element, int index) {
20588    if (element == null) 
20589      return;
20590    Complex t;
20591    if (Utilities.noString(parentType))
20592      t = parent;
20593    else {
20594      t = parent.predicate("fhir:"+parentType+'.'+name);
20595    }
20596    composeBackboneElement(t, "participant", name, element, index);
20597    if (element.hasActorIdElement()) {
20598      composeString(t, "PlanDefinitionActionParticipantComponent", "actorId", element.getActorIdElement(), -1);
20599    }
20600    if (element.hasTypeElement()) {
20601      composeEnum(t, "PlanDefinitionActionParticipantComponent", "type", element.getTypeElement(), -1);
20602    }
20603    if (element.hasTypeCanonicalElement()) {
20604      composeCanonical(t, "PlanDefinitionActionParticipantComponent", "typeCanonical", element.getTypeCanonicalElement(), -1);
20605    }
20606    if (element.hasTypeReference()) {
20607      composeReference(t, "PlanDefinitionActionParticipantComponent", "typeReference", element.getTypeReference(), -1);
20608    }
20609    if (element.hasRole()) {
20610      composeCodeableConcept(t, "PlanDefinitionActionParticipantComponent", "role", element.getRole(), -1);
20611    }
20612    if (element.hasFunction()) {
20613      composeCodeableConcept(t, "PlanDefinitionActionParticipantComponent", "function", element.getFunction(), -1);
20614    }
20615  }
20616
20617  protected void composePlanDefinitionActionDynamicValueComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionActionDynamicValueComponent element, int index) {
20618    if (element == null) 
20619      return;
20620    Complex t;
20621    if (Utilities.noString(parentType))
20622      t = parent;
20623    else {
20624      t = parent.predicate("fhir:"+parentType+'.'+name);
20625    }
20626    composeBackboneElement(t, "dynamicValue", name, element, index);
20627    if (element.hasPathElement()) {
20628      composeString(t, "PlanDefinitionActionDynamicValueComponent", "path", element.getPathElement(), -1);
20629    }
20630    if (element.hasExpression()) {
20631      composeExpression(t, "PlanDefinitionActionDynamicValueComponent", "expression", element.getExpression(), -1);
20632    }
20633  }
20634
20635  protected void composePractitioner(Complex parent, String parentType, String name, Practitioner element, int index) {
20636    if (element == null) 
20637      return;
20638    Complex t;
20639    if (Utilities.noString(parentType))
20640      t = parent;
20641    else {
20642      t = parent.predicate("fhir:"+parentType+'.'+name);
20643    }
20644    composeDomainResource(t, "Practitioner", name, element, index);
20645    for (int i = 0; i < element.getIdentifier().size(); i++) {
20646      composeIdentifier(t, "Practitioner", "identifier", element.getIdentifier().get(i), i);
20647    }
20648    if (element.hasActiveElement()) {
20649      composeBoolean(t, "Practitioner", "active", element.getActiveElement(), -1);
20650    }
20651    for (int i = 0; i < element.getName().size(); i++) {
20652      composeHumanName(t, "Practitioner", "name", element.getName().get(i), i);
20653    }
20654    for (int i = 0; i < element.getTelecom().size(); i++) {
20655      composeContactPoint(t, "Practitioner", "telecom", element.getTelecom().get(i), i);
20656    }
20657    if (element.hasGenderElement()) {
20658      composeEnum(t, "Practitioner", "gender", element.getGenderElement(), -1);
20659    }
20660    if (element.hasBirthDateElement()) {
20661      composeDate(t, "Practitioner", "birthDate", element.getBirthDateElement(), -1);
20662    }
20663    if (element.hasDeceased()) {
20664      composeType(t, "Practitioner", "deceased", element.getDeceased(), -1);
20665    }
20666    for (int i = 0; i < element.getAddress().size(); i++) {
20667      composeAddress(t, "Practitioner", "address", element.getAddress().get(i), i);
20668    }
20669    for (int i = 0; i < element.getPhoto().size(); i++) {
20670      composeAttachment(t, "Practitioner", "photo", element.getPhoto().get(i), i);
20671    }
20672    for (int i = 0; i < element.getQualification().size(); i++) {
20673      composePractitionerQualificationComponent(t, "Practitioner", "qualification", element.getQualification().get(i), i);
20674    }
20675    for (int i = 0; i < element.getCommunication().size(); i++) {
20676      composeCodeableConcept(t, "Practitioner", "communication", element.getCommunication().get(i), i);
20677    }
20678  }
20679
20680  protected void composePractitionerQualificationComponent(Complex parent, String parentType, String name, Practitioner.PractitionerQualificationComponent element, int index) {
20681    if (element == null) 
20682      return;
20683    Complex t;
20684    if (Utilities.noString(parentType))
20685      t = parent;
20686    else {
20687      t = parent.predicate("fhir:"+parentType+'.'+name);
20688    }
20689    composeBackboneElement(t, "qualification", name, element, index);
20690    for (int i = 0; i < element.getIdentifier().size(); i++) {
20691      composeIdentifier(t, "PractitionerQualificationComponent", "identifier", element.getIdentifier().get(i), i);
20692    }
20693    if (element.hasCode()) {
20694      composeCodeableConcept(t, "PractitionerQualificationComponent", "code", element.getCode(), -1);
20695    }
20696    if (element.hasPeriod()) {
20697      composePeriod(t, "PractitionerQualificationComponent", "period", element.getPeriod(), -1);
20698    }
20699    if (element.hasIssuer()) {
20700      composeReference(t, "PractitionerQualificationComponent", "issuer", element.getIssuer(), -1);
20701    }
20702  }
20703
20704  protected void composePractitionerRole(Complex parent, String parentType, String name, PractitionerRole element, int index) {
20705    if (element == null) 
20706      return;
20707    Complex t;
20708    if (Utilities.noString(parentType))
20709      t = parent;
20710    else {
20711      t = parent.predicate("fhir:"+parentType+'.'+name);
20712    }
20713    composeDomainResource(t, "PractitionerRole", name, element, index);
20714    for (int i = 0; i < element.getIdentifier().size(); i++) {
20715      composeIdentifier(t, "PractitionerRole", "identifier", element.getIdentifier().get(i), i);
20716    }
20717    if (element.hasActiveElement()) {
20718      composeBoolean(t, "PractitionerRole", "active", element.getActiveElement(), -1);
20719    }
20720    if (element.hasPeriod()) {
20721      composePeriod(t, "PractitionerRole", "period", element.getPeriod(), -1);
20722    }
20723    if (element.hasPractitioner()) {
20724      composeReference(t, "PractitionerRole", "practitioner", element.getPractitioner(), -1);
20725    }
20726    if (element.hasOrganization()) {
20727      composeReference(t, "PractitionerRole", "organization", element.getOrganization(), -1);
20728    }
20729    for (int i = 0; i < element.getCode().size(); i++) {
20730      composeCodeableConcept(t, "PractitionerRole", "code", element.getCode().get(i), i);
20731    }
20732    for (int i = 0; i < element.getSpecialty().size(); i++) {
20733      composeCodeableConcept(t, "PractitionerRole", "specialty", element.getSpecialty().get(i), i);
20734    }
20735    for (int i = 0; i < element.getLocation().size(); i++) {
20736      composeReference(t, "PractitionerRole", "location", element.getLocation().get(i), i);
20737    }
20738    for (int i = 0; i < element.getHealthcareService().size(); i++) {
20739      composeReference(t, "PractitionerRole", "healthcareService", element.getHealthcareService().get(i), i);
20740    }
20741    for (int i = 0; i < element.getContact().size(); i++) {
20742      composeExtendedContactDetail(t, "PractitionerRole", "contact", element.getContact().get(i), i);
20743    }
20744    for (int i = 0; i < element.getAvailability().size(); i++) {
20745      composeAvailability(t, "PractitionerRole", "availability", element.getAvailability().get(i), i);
20746    }
20747    for (int i = 0; i < element.getEndpoint().size(); i++) {
20748      composeReference(t, "PractitionerRole", "endpoint", element.getEndpoint().get(i), i);
20749    }
20750  }
20751
20752  protected void composeProcedure(Complex parent, String parentType, String name, Procedure element, int index) {
20753    if (element == null) 
20754      return;
20755    Complex t;
20756    if (Utilities.noString(parentType))
20757      t = parent;
20758    else {
20759      t = parent.predicate("fhir:"+parentType+'.'+name);
20760    }
20761    composeDomainResource(t, "Procedure", name, element, index);
20762    for (int i = 0; i < element.getIdentifier().size(); i++) {
20763      composeIdentifier(t, "Procedure", "identifier", element.getIdentifier().get(i), i);
20764    }
20765    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
20766      composeCanonical(t, "Procedure", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
20767    }
20768    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
20769      composeUri(t, "Procedure", "instantiatesUri", element.getInstantiatesUri().get(i), i);
20770    }
20771    for (int i = 0; i < element.getBasedOn().size(); i++) {
20772      composeReference(t, "Procedure", "basedOn", element.getBasedOn().get(i), i);
20773    }
20774    for (int i = 0; i < element.getPartOf().size(); i++) {
20775      composeReference(t, "Procedure", "partOf", element.getPartOf().get(i), i);
20776    }
20777    if (element.hasStatusElement()) {
20778      composeEnum(t, "Procedure", "status", element.getStatusElement(), -1);
20779    }
20780    if (element.hasStatusReason()) {
20781      composeCodeableConcept(t, "Procedure", "statusReason", element.getStatusReason(), -1);
20782    }
20783    for (int i = 0; i < element.getCategory().size(); i++) {
20784      composeCodeableConcept(t, "Procedure", "category", element.getCategory().get(i), i);
20785    }
20786    if (element.hasCode()) {
20787      composeCodeableConcept(t, "Procedure", "code", element.getCode(), -1);
20788    }
20789    if (element.hasSubject()) {
20790      composeReference(t, "Procedure", "subject", element.getSubject(), -1);
20791    }
20792    if (element.hasFocus()) {
20793      composeReference(t, "Procedure", "focus", element.getFocus(), -1);
20794    }
20795    if (element.hasEncounter()) {
20796      composeReference(t, "Procedure", "encounter", element.getEncounter(), -1);
20797    }
20798    if (element.hasOccurrence()) {
20799      composeType(t, "Procedure", "occurrence", element.getOccurrence(), -1);
20800    }
20801    if (element.hasRecordedElement()) {
20802      composeDateTime(t, "Procedure", "recorded", element.getRecordedElement(), -1);
20803    }
20804    if (element.hasRecorder()) {
20805      composeReference(t, "Procedure", "recorder", element.getRecorder(), -1);
20806    }
20807    if (element.hasReported()) {
20808      composeType(t, "Procedure", "reported", element.getReported(), -1);
20809    }
20810    for (int i = 0; i < element.getPerformer().size(); i++) {
20811      composeProcedurePerformerComponent(t, "Procedure", "performer", element.getPerformer().get(i), i);
20812    }
20813    if (element.hasLocation()) {
20814      composeReference(t, "Procedure", "location", element.getLocation(), -1);
20815    }
20816    for (int i = 0; i < element.getReason().size(); i++) {
20817      composeCodeableReference(t, "Procedure", "reason", element.getReason().get(i), i);
20818    }
20819    for (int i = 0; i < element.getBodySite().size(); i++) {
20820      composeCodeableConcept(t, "Procedure", "bodySite", element.getBodySite().get(i), i);
20821    }
20822    if (element.hasOutcome()) {
20823      composeCodeableConcept(t, "Procedure", "outcome", element.getOutcome(), -1);
20824    }
20825    for (int i = 0; i < element.getReport().size(); i++) {
20826      composeReference(t, "Procedure", "report", element.getReport().get(i), i);
20827    }
20828    for (int i = 0; i < element.getComplication().size(); i++) {
20829      composeCodeableReference(t, "Procedure", "complication", element.getComplication().get(i), i);
20830    }
20831    for (int i = 0; i < element.getFollowUp().size(); i++) {
20832      composeCodeableConcept(t, "Procedure", "followUp", element.getFollowUp().get(i), i);
20833    }
20834    for (int i = 0; i < element.getNote().size(); i++) {
20835      composeAnnotation(t, "Procedure", "note", element.getNote().get(i), i);
20836    }
20837    for (int i = 0; i < element.getFocalDevice().size(); i++) {
20838      composeProcedureFocalDeviceComponent(t, "Procedure", "focalDevice", element.getFocalDevice().get(i), i);
20839    }
20840    for (int i = 0; i < element.getUsed().size(); i++) {
20841      composeCodeableReference(t, "Procedure", "used", element.getUsed().get(i), i);
20842    }
20843    for (int i = 0; i < element.getSupportingInfo().size(); i++) {
20844      composeReference(t, "Procedure", "supportingInfo", element.getSupportingInfo().get(i), i);
20845    }
20846  }
20847
20848  protected void composeProcedurePerformerComponent(Complex parent, String parentType, String name, Procedure.ProcedurePerformerComponent element, int index) {
20849    if (element == null) 
20850      return;
20851    Complex t;
20852    if (Utilities.noString(parentType))
20853      t = parent;
20854    else {
20855      t = parent.predicate("fhir:"+parentType+'.'+name);
20856    }
20857    composeBackboneElement(t, "performer", name, element, index);
20858    if (element.hasFunction()) {
20859      composeCodeableConcept(t, "ProcedurePerformerComponent", "function", element.getFunction(), -1);
20860    }
20861    if (element.hasActor()) {
20862      composeReference(t, "ProcedurePerformerComponent", "actor", element.getActor(), -1);
20863    }
20864    if (element.hasOnBehalfOf()) {
20865      composeReference(t, "ProcedurePerformerComponent", "onBehalfOf", element.getOnBehalfOf(), -1);
20866    }
20867    if (element.hasPeriod()) {
20868      composePeriod(t, "ProcedurePerformerComponent", "period", element.getPeriod(), -1);
20869    }
20870  }
20871
20872  protected void composeProcedureFocalDeviceComponent(Complex parent, String parentType, String name, Procedure.ProcedureFocalDeviceComponent element, int index) {
20873    if (element == null) 
20874      return;
20875    Complex t;
20876    if (Utilities.noString(parentType))
20877      t = parent;
20878    else {
20879      t = parent.predicate("fhir:"+parentType+'.'+name);
20880    }
20881    composeBackboneElement(t, "focalDevice", name, element, index);
20882    if (element.hasAction()) {
20883      composeCodeableConcept(t, "ProcedureFocalDeviceComponent", "action", element.getAction(), -1);
20884    }
20885    if (element.hasManipulated()) {
20886      composeReference(t, "ProcedureFocalDeviceComponent", "manipulated", element.getManipulated(), -1);
20887    }
20888  }
20889
20890  protected void composeProvenance(Complex parent, String parentType, String name, Provenance element, int index) {
20891    if (element == null) 
20892      return;
20893    Complex t;
20894    if (Utilities.noString(parentType))
20895      t = parent;
20896    else {
20897      t = parent.predicate("fhir:"+parentType+'.'+name);
20898    }
20899    composeDomainResource(t, "Provenance", name, element, index);
20900    for (int i = 0; i < element.getTarget().size(); i++) {
20901      composeReference(t, "Provenance", "target", element.getTarget().get(i), i);
20902    }
20903    if (element.hasOccurred()) {
20904      composeType(t, "Provenance", "occurred", element.getOccurred(), -1);
20905    }
20906    if (element.hasRecordedElement()) {
20907      composeInstant(t, "Provenance", "recorded", element.getRecordedElement(), -1);
20908    }
20909    for (int i = 0; i < element.getPolicy().size(); i++) {
20910      composeUri(t, "Provenance", "policy", element.getPolicy().get(i), i);
20911    }
20912    if (element.hasLocation()) {
20913      composeReference(t, "Provenance", "location", element.getLocation(), -1);
20914    }
20915    for (int i = 0; i < element.getAuthorization().size(); i++) {
20916      composeCodeableReference(t, "Provenance", "authorization", element.getAuthorization().get(i), i);
20917    }
20918    if (element.hasActivity()) {
20919      composeCodeableConcept(t, "Provenance", "activity", element.getActivity(), -1);
20920    }
20921    for (int i = 0; i < element.getBasedOn().size(); i++) {
20922      composeReference(t, "Provenance", "basedOn", element.getBasedOn().get(i), i);
20923    }
20924    if (element.hasPatient()) {
20925      composeReference(t, "Provenance", "patient", element.getPatient(), -1);
20926    }
20927    if (element.hasEncounter()) {
20928      composeReference(t, "Provenance", "encounter", element.getEncounter(), -1);
20929    }
20930    for (int i = 0; i < element.getAgent().size(); i++) {
20931      composeProvenanceAgentComponent(t, "Provenance", "agent", element.getAgent().get(i), i);
20932    }
20933    for (int i = 0; i < element.getEntity().size(); i++) {
20934      composeProvenanceEntityComponent(t, "Provenance", "entity", element.getEntity().get(i), i);
20935    }
20936    for (int i = 0; i < element.getSignature().size(); i++) {
20937      composeSignature(t, "Provenance", "signature", element.getSignature().get(i), i);
20938    }
20939  }
20940
20941  protected void composeProvenanceAgentComponent(Complex parent, String parentType, String name, Provenance.ProvenanceAgentComponent element, int index) {
20942    if (element == null) 
20943      return;
20944    Complex t;
20945    if (Utilities.noString(parentType))
20946      t = parent;
20947    else {
20948      t = parent.predicate("fhir:"+parentType+'.'+name);
20949    }
20950    composeBackboneElement(t, "agent", name, element, index);
20951    if (element.hasType()) {
20952      composeCodeableConcept(t, "ProvenanceAgentComponent", "type", element.getType(), -1);
20953    }
20954    for (int i = 0; i < element.getRole().size(); i++) {
20955      composeCodeableConcept(t, "ProvenanceAgentComponent", "role", element.getRole().get(i), i);
20956    }
20957    if (element.hasWho()) {
20958      composeReference(t, "ProvenanceAgentComponent", "who", element.getWho(), -1);
20959    }
20960    if (element.hasOnBehalfOf()) {
20961      composeReference(t, "ProvenanceAgentComponent", "onBehalfOf", element.getOnBehalfOf(), -1);
20962    }
20963  }
20964
20965  protected void composeProvenanceEntityComponent(Complex parent, String parentType, String name, Provenance.ProvenanceEntityComponent element, int index) {
20966    if (element == null) 
20967      return;
20968    Complex t;
20969    if (Utilities.noString(parentType))
20970      t = parent;
20971    else {
20972      t = parent.predicate("fhir:"+parentType+'.'+name);
20973    }
20974    composeBackboneElement(t, "entity", name, element, index);
20975    if (element.hasRoleElement()) {
20976      composeEnum(t, "ProvenanceEntityComponent", "role", element.getRoleElement(), -1);
20977    }
20978    if (element.hasWhat()) {
20979      composeReference(t, "ProvenanceEntityComponent", "what", element.getWhat(), -1);
20980    }
20981    for (int i = 0; i < element.getAgent().size(); i++) {
20982      composeProvenanceAgentComponent(t, "ProvenanceEntityComponent", "agent", element.getAgent().get(i), i);
20983    }
20984  }
20985
20986  protected void composeQuestionnaire(Complex parent, String parentType, String name, Questionnaire element, int index) {
20987    if (element == null) 
20988      return;
20989    Complex t;
20990    if (Utilities.noString(parentType))
20991      t = parent;
20992    else {
20993      t = parent.predicate("fhir:"+parentType+'.'+name);
20994    }
20995    composeMetadataResource(t, "Questionnaire", name, element, index);
20996    if (element.hasUrlElement()) {
20997      composeUri(t, "Questionnaire", "url", element.getUrlElement(), -1);
20998    }
20999    for (int i = 0; i < element.getIdentifier().size(); i++) {
21000      composeIdentifier(t, "Questionnaire", "identifier", element.getIdentifier().get(i), i);
21001    }
21002    if (element.hasVersionElement()) {
21003      composeString(t, "Questionnaire", "version", element.getVersionElement(), -1);
21004    }
21005    if (element.hasVersionAlgorithm()) {
21006      composeType(t, "Questionnaire", "versionAlgorithm", element.getVersionAlgorithm(), -1);
21007    }
21008    if (element.hasNameElement()) {
21009      composeString(t, "Questionnaire", "name", element.getNameElement(), -1);
21010    }
21011    if (element.hasTitleElement()) {
21012      composeString(t, "Questionnaire", "title", element.getTitleElement(), -1);
21013    }
21014    for (int i = 0; i < element.getDerivedFrom().size(); i++) {
21015      composeCanonical(t, "Questionnaire", "derivedFrom", element.getDerivedFrom().get(i), i);
21016    }
21017    if (element.hasStatusElement()) {
21018      composeEnum(t, "Questionnaire", "status", element.getStatusElement(), -1);
21019    }
21020    if (element.hasExperimentalElement()) {
21021      composeBoolean(t, "Questionnaire", "experimental", element.getExperimentalElement(), -1);
21022    }
21023    for (int i = 0; i < element.getSubjectType().size(); i++) {
21024      composeCode(t, "Questionnaire", "subjectType", element.getSubjectType().get(i), i);
21025    }
21026    if (element.hasDateElement()) {
21027      composeDateTime(t, "Questionnaire", "date", element.getDateElement(), -1);
21028    }
21029    if (element.hasPublisherElement()) {
21030      composeString(t, "Questionnaire", "publisher", element.getPublisherElement(), -1);
21031    }
21032    for (int i = 0; i < element.getContact().size(); i++) {
21033      composeContactDetail(t, "Questionnaire", "contact", element.getContact().get(i), i);
21034    }
21035    if (element.hasDescriptionElement()) {
21036      composeMarkdown(t, "Questionnaire", "description", element.getDescriptionElement(), -1);
21037    }
21038    for (int i = 0; i < element.getUseContext().size(); i++) {
21039      composeUsageContext(t, "Questionnaire", "useContext", element.getUseContext().get(i), i);
21040    }
21041    for (int i = 0; i < element.getJurisdiction().size(); i++) {
21042      composeCodeableConcept(t, "Questionnaire", "jurisdiction", element.getJurisdiction().get(i), i);
21043    }
21044    if (element.hasPurposeElement()) {
21045      composeMarkdown(t, "Questionnaire", "purpose", element.getPurposeElement(), -1);
21046    }
21047    if (element.hasCopyrightElement()) {
21048      composeMarkdown(t, "Questionnaire", "copyright", element.getCopyrightElement(), -1);
21049    }
21050    if (element.hasCopyrightLabelElement()) {
21051      composeString(t, "Questionnaire", "copyrightLabel", element.getCopyrightLabelElement(), -1);
21052    }
21053    if (element.hasApprovalDateElement()) {
21054      composeDate(t, "Questionnaire", "approvalDate", element.getApprovalDateElement(), -1);
21055    }
21056    if (element.hasLastReviewDateElement()) {
21057      composeDate(t, "Questionnaire", "lastReviewDate", element.getLastReviewDateElement(), -1);
21058    }
21059    if (element.hasEffectivePeriod()) {
21060      composePeriod(t, "Questionnaire", "effectivePeriod", element.getEffectivePeriod(), -1);
21061    }
21062    for (int i = 0; i < element.getCode().size(); i++) {
21063      composeCoding(t, "Questionnaire", "code", element.getCode().get(i), i);
21064    }
21065    for (int i = 0; i < element.getItem().size(); i++) {
21066      composeQuestionnaireItemComponent(t, "Questionnaire", "item", element.getItem().get(i), i);
21067    }
21068  }
21069
21070  protected void composeQuestionnaireItemComponent(Complex parent, String parentType, String name, Questionnaire.QuestionnaireItemComponent element, int index) {
21071    if (element == null) 
21072      return;
21073    Complex t;
21074    if (Utilities.noString(parentType))
21075      t = parent;
21076    else {
21077      t = parent.predicate("fhir:"+parentType+'.'+name);
21078    }
21079    composeBackboneElement(t, "item", name, element, index);
21080    if (element.hasLinkIdElement()) {
21081      composeString(t, "QuestionnaireItemComponent", "linkId", element.getLinkIdElement(), -1);
21082    }
21083    if (element.hasDefinitionElement()) {
21084      composeUri(t, "QuestionnaireItemComponent", "definition", element.getDefinitionElement(), -1);
21085    }
21086    for (int i = 0; i < element.getCode().size(); i++) {
21087      composeCoding(t, "QuestionnaireItemComponent", "code", element.getCode().get(i), i);
21088    }
21089    if (element.hasPrefixElement()) {
21090      composeString(t, "QuestionnaireItemComponent", "prefix", element.getPrefixElement(), -1);
21091    }
21092    if (element.hasTextElement()) {
21093      composeString(t, "QuestionnaireItemComponent", "text", element.getTextElement(), -1);
21094    }
21095    if (element.hasTypeElement()) {
21096      composeEnum(t, "QuestionnaireItemComponent", "type", element.getTypeElement(), -1);
21097    }
21098    for (int i = 0; i < element.getEnableWhen().size(); i++) {
21099      composeQuestionnaireItemEnableWhenComponent(t, "QuestionnaireItemComponent", "enableWhen", element.getEnableWhen().get(i), i);
21100    }
21101    if (element.hasEnableBehaviorElement()) {
21102      composeEnum(t, "QuestionnaireItemComponent", "enableBehavior", element.getEnableBehaviorElement(), -1);
21103    }
21104    if (element.hasDisabledDisplayElement()) {
21105      composeEnum(t, "QuestionnaireItemComponent", "disabledDisplay", element.getDisabledDisplayElement(), -1);
21106    }
21107    if (element.hasRequiredElement()) {
21108      composeBoolean(t, "QuestionnaireItemComponent", "required", element.getRequiredElement(), -1);
21109    }
21110    if (element.hasRepeatsElement()) {
21111      composeBoolean(t, "QuestionnaireItemComponent", "repeats", element.getRepeatsElement(), -1);
21112    }
21113    if (element.hasReadOnlyElement()) {
21114      composeBoolean(t, "QuestionnaireItemComponent", "readOnly", element.getReadOnlyElement(), -1);
21115    }
21116    if (element.hasMaxLengthElement()) {
21117      composeInteger(t, "QuestionnaireItemComponent", "maxLength", element.getMaxLengthElement(), -1);
21118    }
21119    if (element.hasAnswerConstraintElement()) {
21120      composeEnum(t, "QuestionnaireItemComponent", "answerConstraint", element.getAnswerConstraintElement(), -1);
21121    }
21122    if (element.hasAnswerValueSetElement()) {
21123      composeCanonical(t, "QuestionnaireItemComponent", "answerValueSet", element.getAnswerValueSetElement(), -1);
21124    }
21125    for (int i = 0; i < element.getAnswerOption().size(); i++) {
21126      composeQuestionnaireItemAnswerOptionComponent(t, "QuestionnaireItemComponent", "answerOption", element.getAnswerOption().get(i), i);
21127    }
21128    for (int i = 0; i < element.getInitial().size(); i++) {
21129      composeQuestionnaireItemInitialComponent(t, "QuestionnaireItemComponent", "initial", element.getInitial().get(i), i);
21130    }
21131    for (int i = 0; i < element.getItem().size(); i++) {
21132      composeQuestionnaireItemComponent(t, "QuestionnaireItemComponent", "item", element.getItem().get(i), i);
21133    }
21134  }
21135
21136  protected void composeQuestionnaireItemEnableWhenComponent(Complex parent, String parentType, String name, Questionnaire.QuestionnaireItemEnableWhenComponent element, int index) {
21137    if (element == null) 
21138      return;
21139    Complex t;
21140    if (Utilities.noString(parentType))
21141      t = parent;
21142    else {
21143      t = parent.predicate("fhir:"+parentType+'.'+name);
21144    }
21145    composeBackboneElement(t, "enableWhen", name, element, index);
21146    if (element.hasQuestionElement()) {
21147      composeString(t, "QuestionnaireItemEnableWhenComponent", "question", element.getQuestionElement(), -1);
21148    }
21149    if (element.hasOperatorElement()) {
21150      composeEnum(t, "QuestionnaireItemEnableWhenComponent", "operator", element.getOperatorElement(), -1);
21151    }
21152    if (element.hasAnswer()) {
21153      composeType(t, "QuestionnaireItemEnableWhenComponent", "answer", element.getAnswer(), -1);
21154    }
21155  }
21156
21157  protected void composeQuestionnaireItemAnswerOptionComponent(Complex parent, String parentType, String name, Questionnaire.QuestionnaireItemAnswerOptionComponent element, int index) {
21158    if (element == null) 
21159      return;
21160    Complex t;
21161    if (Utilities.noString(parentType))
21162      t = parent;
21163    else {
21164      t = parent.predicate("fhir:"+parentType+'.'+name);
21165    }
21166    composeBackboneElement(t, "answerOption", name, element, index);
21167    if (element.hasValue()) {
21168      composeType(t, "QuestionnaireItemAnswerOptionComponent", "value", element.getValue(), -1);
21169    }
21170    if (element.hasInitialSelectedElement()) {
21171      composeBoolean(t, "QuestionnaireItemAnswerOptionComponent", "initialSelected", element.getInitialSelectedElement(), -1);
21172    }
21173  }
21174
21175  protected void composeQuestionnaireItemInitialComponent(Complex parent, String parentType, String name, Questionnaire.QuestionnaireItemInitialComponent element, int index) {
21176    if (element == null) 
21177      return;
21178    Complex t;
21179    if (Utilities.noString(parentType))
21180      t = parent;
21181    else {
21182      t = parent.predicate("fhir:"+parentType+'.'+name);
21183    }
21184    composeBackboneElement(t, "initial", name, element, index);
21185    if (element.hasValue()) {
21186      composeType(t, "QuestionnaireItemInitialComponent", "value", element.getValue(), -1);
21187    }
21188  }
21189
21190  protected void composeQuestionnaireResponse(Complex parent, String parentType, String name, QuestionnaireResponse element, int index) {
21191    if (element == null) 
21192      return;
21193    Complex t;
21194    if (Utilities.noString(parentType))
21195      t = parent;
21196    else {
21197      t = parent.predicate("fhir:"+parentType+'.'+name);
21198    }
21199    composeDomainResource(t, "QuestionnaireResponse", name, element, index);
21200    for (int i = 0; i < element.getIdentifier().size(); i++) {
21201      composeIdentifier(t, "QuestionnaireResponse", "identifier", element.getIdentifier().get(i), i);
21202    }
21203    for (int i = 0; i < element.getBasedOn().size(); i++) {
21204      composeReference(t, "QuestionnaireResponse", "basedOn", element.getBasedOn().get(i), i);
21205    }
21206    for (int i = 0; i < element.getPartOf().size(); i++) {
21207      composeReference(t, "QuestionnaireResponse", "partOf", element.getPartOf().get(i), i);
21208    }
21209    if (element.hasQuestionnaireElement()) {
21210      composeCanonical(t, "QuestionnaireResponse", "questionnaire", element.getQuestionnaireElement(), -1);
21211    }
21212    if (element.hasStatusElement()) {
21213      composeEnum(t, "QuestionnaireResponse", "status", element.getStatusElement(), -1);
21214    }
21215    if (element.hasSubject()) {
21216      composeReference(t, "QuestionnaireResponse", "subject", element.getSubject(), -1);
21217    }
21218    if (element.hasEncounter()) {
21219      composeReference(t, "QuestionnaireResponse", "encounter", element.getEncounter(), -1);
21220    }
21221    if (element.hasAuthoredElement()) {
21222      composeDateTime(t, "QuestionnaireResponse", "authored", element.getAuthoredElement(), -1);
21223    }
21224    if (element.hasAuthor()) {
21225      composeReference(t, "QuestionnaireResponse", "author", element.getAuthor(), -1);
21226    }
21227    if (element.hasSource()) {
21228      composeReference(t, "QuestionnaireResponse", "source", element.getSource(), -1);
21229    }
21230    for (int i = 0; i < element.getItem().size(); i++) {
21231      composeQuestionnaireResponseItemComponent(t, "QuestionnaireResponse", "item", element.getItem().get(i), i);
21232    }
21233  }
21234
21235  protected void composeQuestionnaireResponseItemComponent(Complex parent, String parentType, String name, QuestionnaireResponse.QuestionnaireResponseItemComponent element, int index) {
21236    if (element == null) 
21237      return;
21238    Complex t;
21239    if (Utilities.noString(parentType))
21240      t = parent;
21241    else {
21242      t = parent.predicate("fhir:"+parentType+'.'+name);
21243    }
21244    composeBackboneElement(t, "item", name, element, index);
21245    if (element.hasLinkIdElement()) {
21246      composeString(t, "QuestionnaireResponseItemComponent", "linkId", element.getLinkIdElement(), -1);
21247    }
21248    if (element.hasDefinitionElement()) {
21249      composeUri(t, "QuestionnaireResponseItemComponent", "definition", element.getDefinitionElement(), -1);
21250    }
21251    if (element.hasTextElement()) {
21252      composeString(t, "QuestionnaireResponseItemComponent", "text", element.getTextElement(), -1);
21253    }
21254    for (int i = 0; i < element.getAnswer().size(); i++) {
21255      composeQuestionnaireResponseItemAnswerComponent(t, "QuestionnaireResponseItemComponent", "answer", element.getAnswer().get(i), i);
21256    }
21257    for (int i = 0; i < element.getItem().size(); i++) {
21258      composeQuestionnaireResponseItemComponent(t, "QuestionnaireResponseItemComponent", "item", element.getItem().get(i), i);
21259    }
21260  }
21261
21262  protected void composeQuestionnaireResponseItemAnswerComponent(Complex parent, String parentType, String name, QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent element, int index) {
21263    if (element == null) 
21264      return;
21265    Complex t;
21266    if (Utilities.noString(parentType))
21267      t = parent;
21268    else {
21269      t = parent.predicate("fhir:"+parentType+'.'+name);
21270    }
21271    composeBackboneElement(t, "answer", name, element, index);
21272    if (element.hasValue()) {
21273      composeType(t, "QuestionnaireResponseItemAnswerComponent", "value", element.getValue(), -1);
21274    }
21275    for (int i = 0; i < element.getItem().size(); i++) {
21276      composeQuestionnaireResponseItemComponent(t, "QuestionnaireResponseItemAnswerComponent", "item", element.getItem().get(i), i);
21277    }
21278  }
21279
21280  protected void composeRegulatedAuthorization(Complex parent, String parentType, String name, RegulatedAuthorization element, int index) {
21281    if (element == null) 
21282      return;
21283    Complex t;
21284    if (Utilities.noString(parentType))
21285      t = parent;
21286    else {
21287      t = parent.predicate("fhir:"+parentType+'.'+name);
21288    }
21289    composeDomainResource(t, "RegulatedAuthorization", name, element, index);
21290    for (int i = 0; i < element.getIdentifier().size(); i++) {
21291      composeIdentifier(t, "RegulatedAuthorization", "identifier", element.getIdentifier().get(i), i);
21292    }
21293    for (int i = 0; i < element.getSubject().size(); i++) {
21294      composeReference(t, "RegulatedAuthorization", "subject", element.getSubject().get(i), i);
21295    }
21296    if (element.hasType()) {
21297      composeCodeableConcept(t, "RegulatedAuthorization", "type", element.getType(), -1);
21298    }
21299    if (element.hasDescriptionElement()) {
21300      composeMarkdown(t, "RegulatedAuthorization", "description", element.getDescriptionElement(), -1);
21301    }
21302    for (int i = 0; i < element.getRegion().size(); i++) {
21303      composeCodeableConcept(t, "RegulatedAuthorization", "region", element.getRegion().get(i), i);
21304    }
21305    if (element.hasStatus()) {
21306      composeCodeableConcept(t, "RegulatedAuthorization", "status", element.getStatus(), -1);
21307    }
21308    if (element.hasStatusDateElement()) {
21309      composeDateTime(t, "RegulatedAuthorization", "statusDate", element.getStatusDateElement(), -1);
21310    }
21311    if (element.hasValidityPeriod()) {
21312      composePeriod(t, "RegulatedAuthorization", "validityPeriod", element.getValidityPeriod(), -1);
21313    }
21314    for (int i = 0; i < element.getIndication().size(); i++) {
21315      composeCodeableReference(t, "RegulatedAuthorization", "indication", element.getIndication().get(i), i);
21316    }
21317    if (element.hasIntendedUse()) {
21318      composeCodeableConcept(t, "RegulatedAuthorization", "intendedUse", element.getIntendedUse(), -1);
21319    }
21320    for (int i = 0; i < element.getBasis().size(); i++) {
21321      composeCodeableConcept(t, "RegulatedAuthorization", "basis", element.getBasis().get(i), i);
21322    }
21323    if (element.hasHolder()) {
21324      composeReference(t, "RegulatedAuthorization", "holder", element.getHolder(), -1);
21325    }
21326    if (element.hasRegulator()) {
21327      composeReference(t, "RegulatedAuthorization", "regulator", element.getRegulator(), -1);
21328    }
21329    for (int i = 0; i < element.getAttachedDocument().size(); i++) {
21330      composeReference(t, "RegulatedAuthorization", "attachedDocument", element.getAttachedDocument().get(i), i);
21331    }
21332    if (element.hasCase()) {
21333      composeRegulatedAuthorizationCaseComponent(t, "RegulatedAuthorization", "case", element.getCase(), -1);
21334    }
21335  }
21336
21337  protected void composeRegulatedAuthorizationCaseComponent(Complex parent, String parentType, String name, RegulatedAuthorization.RegulatedAuthorizationCaseComponent element, int index) {
21338    if (element == null) 
21339      return;
21340    Complex t;
21341    if (Utilities.noString(parentType))
21342      t = parent;
21343    else {
21344      t = parent.predicate("fhir:"+parentType+'.'+name);
21345    }
21346    composeBackboneElement(t, "case", name, element, index);
21347    if (element.hasIdentifier()) {
21348      composeIdentifier(t, "RegulatedAuthorizationCaseComponent", "identifier", element.getIdentifier(), -1);
21349    }
21350    if (element.hasType()) {
21351      composeCodeableConcept(t, "RegulatedAuthorizationCaseComponent", "type", element.getType(), -1);
21352    }
21353    if (element.hasStatus()) {
21354      composeCodeableConcept(t, "RegulatedAuthorizationCaseComponent", "status", element.getStatus(), -1);
21355    }
21356    if (element.hasDate()) {
21357      composeType(t, "RegulatedAuthorizationCaseComponent", "date", element.getDate(), -1);
21358    }
21359    for (int i = 0; i < element.getApplication().size(); i++) {
21360      composeRegulatedAuthorizationCaseComponent(t, "RegulatedAuthorizationCaseComponent", "application", element.getApplication().get(i), i);
21361    }
21362  }
21363
21364  protected void composeRelatedPerson(Complex parent, String parentType, String name, RelatedPerson element, int index) {
21365    if (element == null) 
21366      return;
21367    Complex t;
21368    if (Utilities.noString(parentType))
21369      t = parent;
21370    else {
21371      t = parent.predicate("fhir:"+parentType+'.'+name);
21372    }
21373    composeDomainResource(t, "RelatedPerson", name, element, index);
21374    for (int i = 0; i < element.getIdentifier().size(); i++) {
21375      composeIdentifier(t, "RelatedPerson", "identifier", element.getIdentifier().get(i), i);
21376    }
21377    if (element.hasActiveElement()) {
21378      composeBoolean(t, "RelatedPerson", "active", element.getActiveElement(), -1);
21379    }
21380    if (element.hasPatient()) {
21381      composeReference(t, "RelatedPerson", "patient", element.getPatient(), -1);
21382    }
21383    for (int i = 0; i < element.getRelationship().size(); i++) {
21384      composeCodeableConcept(t, "RelatedPerson", "relationship", element.getRelationship().get(i), i);
21385    }
21386    for (int i = 0; i < element.getName().size(); i++) {
21387      composeHumanName(t, "RelatedPerson", "name", element.getName().get(i), i);
21388    }
21389    for (int i = 0; i < element.getTelecom().size(); i++) {
21390      composeContactPoint(t, "RelatedPerson", "telecom", element.getTelecom().get(i), i);
21391    }
21392    if (element.hasGenderElement()) {
21393      composeEnum(t, "RelatedPerson", "gender", element.getGenderElement(), -1);
21394    }
21395    if (element.hasBirthDateElement()) {
21396      composeDate(t, "RelatedPerson", "birthDate", element.getBirthDateElement(), -1);
21397    }
21398    for (int i = 0; i < element.getAddress().size(); i++) {
21399      composeAddress(t, "RelatedPerson", "address", element.getAddress().get(i), i);
21400    }
21401    for (int i = 0; i < element.getPhoto().size(); i++) {
21402      composeAttachment(t, "RelatedPerson", "photo", element.getPhoto().get(i), i);
21403    }
21404    if (element.hasPeriod()) {
21405      composePeriod(t, "RelatedPerson", "period", element.getPeriod(), -1);
21406    }
21407    for (int i = 0; i < element.getCommunication().size(); i++) {
21408      composeRelatedPersonCommunicationComponent(t, "RelatedPerson", "communication", element.getCommunication().get(i), i);
21409    }
21410  }
21411
21412  protected void composeRelatedPersonCommunicationComponent(Complex parent, String parentType, String name, RelatedPerson.RelatedPersonCommunicationComponent element, int index) {
21413    if (element == null) 
21414      return;
21415    Complex t;
21416    if (Utilities.noString(parentType))
21417      t = parent;
21418    else {
21419      t = parent.predicate("fhir:"+parentType+'.'+name);
21420    }
21421    composeBackboneElement(t, "communication", name, element, index);
21422    if (element.hasLanguage()) {
21423      composeCodeableConcept(t, "RelatedPersonCommunicationComponent", "language", element.getLanguage(), -1);
21424    }
21425    if (element.hasPreferredElement()) {
21426      composeBoolean(t, "RelatedPersonCommunicationComponent", "preferred", element.getPreferredElement(), -1);
21427    }
21428  }
21429
21430  protected void composeRequestOrchestration(Complex parent, String parentType, String name, RequestOrchestration element, int index) {
21431    if (element == null) 
21432      return;
21433    Complex t;
21434    if (Utilities.noString(parentType))
21435      t = parent;
21436    else {
21437      t = parent.predicate("fhir:"+parentType+'.'+name);
21438    }
21439    composeDomainResource(t, "RequestOrchestration", name, element, index);
21440    for (int i = 0; i < element.getIdentifier().size(); i++) {
21441      composeIdentifier(t, "RequestOrchestration", "identifier", element.getIdentifier().get(i), i);
21442    }
21443    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
21444      composeCanonical(t, "RequestOrchestration", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
21445    }
21446    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
21447      composeUri(t, "RequestOrchestration", "instantiatesUri", element.getInstantiatesUri().get(i), i);
21448    }
21449    for (int i = 0; i < element.getBasedOn().size(); i++) {
21450      composeReference(t, "RequestOrchestration", "basedOn", element.getBasedOn().get(i), i);
21451    }
21452    for (int i = 0; i < element.getReplaces().size(); i++) {
21453      composeReference(t, "RequestOrchestration", "replaces", element.getReplaces().get(i), i);
21454    }
21455    if (element.hasGroupIdentifier()) {
21456      composeIdentifier(t, "RequestOrchestration", "groupIdentifier", element.getGroupIdentifier(), -1);
21457    }
21458    if (element.hasStatusElement()) {
21459      composeEnum(t, "RequestOrchestration", "status", element.getStatusElement(), -1);
21460    }
21461    if (element.hasIntentElement()) {
21462      composeEnum(t, "RequestOrchestration", "intent", element.getIntentElement(), -1);
21463    }
21464    if (element.hasPriorityElement()) {
21465      composeEnum(t, "RequestOrchestration", "priority", element.getPriorityElement(), -1);
21466    }
21467    if (element.hasCode()) {
21468      composeCodeableConcept(t, "RequestOrchestration", "code", element.getCode(), -1);
21469    }
21470    if (element.hasSubject()) {
21471      composeReference(t, "RequestOrchestration", "subject", element.getSubject(), -1);
21472    }
21473    if (element.hasEncounter()) {
21474      composeReference(t, "RequestOrchestration", "encounter", element.getEncounter(), -1);
21475    }
21476    if (element.hasAuthoredOnElement()) {
21477      composeDateTime(t, "RequestOrchestration", "authoredOn", element.getAuthoredOnElement(), -1);
21478    }
21479    if (element.hasAuthor()) {
21480      composeReference(t, "RequestOrchestration", "author", element.getAuthor(), -1);
21481    }
21482    for (int i = 0; i < element.getReason().size(); i++) {
21483      composeCodeableReference(t, "RequestOrchestration", "reason", element.getReason().get(i), i);
21484    }
21485    for (int i = 0; i < element.getGoal().size(); i++) {
21486      composeReference(t, "RequestOrchestration", "goal", element.getGoal().get(i), i);
21487    }
21488    for (int i = 0; i < element.getNote().size(); i++) {
21489      composeAnnotation(t, "RequestOrchestration", "note", element.getNote().get(i), i);
21490    }
21491    for (int i = 0; i < element.getAction().size(); i++) {
21492      composeRequestOrchestrationActionComponent(t, "RequestOrchestration", "action", element.getAction().get(i), i);
21493    }
21494  }
21495
21496  protected void composeRequestOrchestrationActionComponent(Complex parent, String parentType, String name, RequestOrchestration.RequestOrchestrationActionComponent element, int index) {
21497    if (element == null) 
21498      return;
21499    Complex t;
21500    if (Utilities.noString(parentType))
21501      t = parent;
21502    else {
21503      t = parent.predicate("fhir:"+parentType+'.'+name);
21504    }
21505    composeBackboneElement(t, "action", name, element, index);
21506    if (element.hasLinkIdElement()) {
21507      composeString(t, "RequestOrchestrationActionComponent", "linkId", element.getLinkIdElement(), -1);
21508    }
21509    if (element.hasPrefixElement()) {
21510      composeString(t, "RequestOrchestrationActionComponent", "prefix", element.getPrefixElement(), -1);
21511    }
21512    if (element.hasTitleElement()) {
21513      composeString(t, "RequestOrchestrationActionComponent", "title", element.getTitleElement(), -1);
21514    }
21515    if (element.hasDescriptionElement()) {
21516      composeString(t, "RequestOrchestrationActionComponent", "description", element.getDescriptionElement(), -1);
21517    }
21518    if (element.hasTextEquivalentElement()) {
21519      composeString(t, "RequestOrchestrationActionComponent", "textEquivalent", element.getTextEquivalentElement(), -1);
21520    }
21521    if (element.hasPriorityElement()) {
21522      composeEnum(t, "RequestOrchestrationActionComponent", "priority", element.getPriorityElement(), -1);
21523    }
21524    for (int i = 0; i < element.getCode().size(); i++) {
21525      composeCodeableConcept(t, "RequestOrchestrationActionComponent", "code", element.getCode().get(i), i);
21526    }
21527    for (int i = 0; i < element.getDocumentation().size(); i++) {
21528      composeRelatedArtifact(t, "RequestOrchestrationActionComponent", "documentation", element.getDocumentation().get(i), i);
21529    }
21530    for (int i = 0; i < element.getGoal().size(); i++) {
21531      composeReference(t, "RequestOrchestrationActionComponent", "goal", element.getGoal().get(i), i);
21532    }
21533    for (int i = 0; i < element.getCondition().size(); i++) {
21534      composeRequestOrchestrationActionConditionComponent(t, "RequestOrchestrationActionComponent", "condition", element.getCondition().get(i), i);
21535    }
21536    for (int i = 0; i < element.getInput().size(); i++) {
21537      composeRequestOrchestrationActionInputComponent(t, "RequestOrchestrationActionComponent", "input", element.getInput().get(i), i);
21538    }
21539    for (int i = 0; i < element.getOutput().size(); i++) {
21540      composeRequestOrchestrationActionOutputComponent(t, "RequestOrchestrationActionComponent", "output", element.getOutput().get(i), i);
21541    }
21542    for (int i = 0; i < element.getRelatedAction().size(); i++) {
21543      composeRequestOrchestrationActionRelatedActionComponent(t, "RequestOrchestrationActionComponent", "relatedAction", element.getRelatedAction().get(i), i);
21544    }
21545    if (element.hasTiming()) {
21546      composeType(t, "RequestOrchestrationActionComponent", "timing", element.getTiming(), -1);
21547    }
21548    if (element.hasLocation()) {
21549      composeCodeableReference(t, "RequestOrchestrationActionComponent", "location", element.getLocation(), -1);
21550    }
21551    for (int i = 0; i < element.getParticipant().size(); i++) {
21552      composeRequestOrchestrationActionParticipantComponent(t, "RequestOrchestrationActionComponent", "participant", element.getParticipant().get(i), i);
21553    }
21554    if (element.hasType()) {
21555      composeCodeableConcept(t, "RequestOrchestrationActionComponent", "type", element.getType(), -1);
21556    }
21557    if (element.hasGroupingBehaviorElement()) {
21558      composeEnum(t, "RequestOrchestrationActionComponent", "groupingBehavior", element.getGroupingBehaviorElement(), -1);
21559    }
21560    if (element.hasSelectionBehaviorElement()) {
21561      composeEnum(t, "RequestOrchestrationActionComponent", "selectionBehavior", element.getSelectionBehaviorElement(), -1);
21562    }
21563    if (element.hasRequiredBehaviorElement()) {
21564      composeEnum(t, "RequestOrchestrationActionComponent", "requiredBehavior", element.getRequiredBehaviorElement(), -1);
21565    }
21566    if (element.hasPrecheckBehaviorElement()) {
21567      composeEnum(t, "RequestOrchestrationActionComponent", "precheckBehavior", element.getPrecheckBehaviorElement(), -1);
21568    }
21569    if (element.hasCardinalityBehaviorElement()) {
21570      composeEnum(t, "RequestOrchestrationActionComponent", "cardinalityBehavior", element.getCardinalityBehaviorElement(), -1);
21571    }
21572    if (element.hasResource()) {
21573      composeReference(t, "RequestOrchestrationActionComponent", "resource", element.getResource(), -1);
21574    }
21575    if (element.hasDefinition()) {
21576      composeType(t, "RequestOrchestrationActionComponent", "definition", element.getDefinition(), -1);
21577    }
21578    if (element.hasTransformElement()) {
21579      composeCanonical(t, "RequestOrchestrationActionComponent", "transform", element.getTransformElement(), -1);
21580    }
21581    for (int i = 0; i < element.getDynamicValue().size(); i++) {
21582      composeRequestOrchestrationActionDynamicValueComponent(t, "RequestOrchestrationActionComponent", "dynamicValue", element.getDynamicValue().get(i), i);
21583    }
21584    for (int i = 0; i < element.getAction().size(); i++) {
21585      composeRequestOrchestrationActionComponent(t, "RequestOrchestrationActionComponent", "action", element.getAction().get(i), i);
21586    }
21587  }
21588
21589  protected void composeRequestOrchestrationActionConditionComponent(Complex parent, String parentType, String name, RequestOrchestration.RequestOrchestrationActionConditionComponent element, int index) {
21590    if (element == null) 
21591      return;
21592    Complex t;
21593    if (Utilities.noString(parentType))
21594      t = parent;
21595    else {
21596      t = parent.predicate("fhir:"+parentType+'.'+name);
21597    }
21598    composeBackboneElement(t, "condition", name, element, index);
21599    if (element.hasKindElement()) {
21600      composeEnum(t, "RequestOrchestrationActionConditionComponent", "kind", element.getKindElement(), -1);
21601    }
21602    if (element.hasExpression()) {
21603      composeExpression(t, "RequestOrchestrationActionConditionComponent", "expression", element.getExpression(), -1);
21604    }
21605  }
21606
21607  protected void composeRequestOrchestrationActionInputComponent(Complex parent, String parentType, String name, RequestOrchestration.RequestOrchestrationActionInputComponent element, int index) {
21608    if (element == null) 
21609      return;
21610    Complex t;
21611    if (Utilities.noString(parentType))
21612      t = parent;
21613    else {
21614      t = parent.predicate("fhir:"+parentType+'.'+name);
21615    }
21616    composeBackboneElement(t, "input", name, element, index);
21617    if (element.hasTitleElement()) {
21618      composeString(t, "RequestOrchestrationActionInputComponent", "title", element.getTitleElement(), -1);
21619    }
21620    if (element.hasRequirement()) {
21621      composeDataRequirement(t, "RequestOrchestrationActionInputComponent", "requirement", element.getRequirement(), -1);
21622    }
21623    if (element.hasRelatedDataElement()) {
21624      composeId(t, "RequestOrchestrationActionInputComponent", "relatedData", element.getRelatedDataElement(), -1);
21625    }
21626  }
21627
21628  protected void composeRequestOrchestrationActionOutputComponent(Complex parent, String parentType, String name, RequestOrchestration.RequestOrchestrationActionOutputComponent element, int index) {
21629    if (element == null) 
21630      return;
21631    Complex t;
21632    if (Utilities.noString(parentType))
21633      t = parent;
21634    else {
21635      t = parent.predicate("fhir:"+parentType+'.'+name);
21636    }
21637    composeBackboneElement(t, "output", name, element, index);
21638    if (element.hasTitleElement()) {
21639      composeString(t, "RequestOrchestrationActionOutputComponent", "title", element.getTitleElement(), -1);
21640    }
21641    if (element.hasRequirement()) {
21642      composeDataRequirement(t, "RequestOrchestrationActionOutputComponent", "requirement", element.getRequirement(), -1);
21643    }
21644    if (element.hasRelatedDataElement()) {
21645      composeString(t, "RequestOrchestrationActionOutputComponent", "relatedData", element.getRelatedDataElement(), -1);
21646    }
21647  }
21648
21649  protected void composeRequestOrchestrationActionRelatedActionComponent(Complex parent, String parentType, String name, RequestOrchestration.RequestOrchestrationActionRelatedActionComponent element, int index) {
21650    if (element == null) 
21651      return;
21652    Complex t;
21653    if (Utilities.noString(parentType))
21654      t = parent;
21655    else {
21656      t = parent.predicate("fhir:"+parentType+'.'+name);
21657    }
21658    composeBackboneElement(t, "relatedAction", name, element, index);
21659    if (element.hasTargetIdElement()) {
21660      composeId(t, "RequestOrchestrationActionRelatedActionComponent", "targetId", element.getTargetIdElement(), -1);
21661    }
21662    if (element.hasRelationshipElement()) {
21663      composeEnum(t, "RequestOrchestrationActionRelatedActionComponent", "relationship", element.getRelationshipElement(), -1);
21664    }
21665    if (element.hasOffset()) {
21666      composeType(t, "RequestOrchestrationActionRelatedActionComponent", "offset", element.getOffset(), -1);
21667    }
21668  }
21669
21670  protected void composeRequestOrchestrationActionParticipantComponent(Complex parent, String parentType, String name, RequestOrchestration.RequestOrchestrationActionParticipantComponent element, int index) {
21671    if (element == null) 
21672      return;
21673    Complex t;
21674    if (Utilities.noString(parentType))
21675      t = parent;
21676    else {
21677      t = parent.predicate("fhir:"+parentType+'.'+name);
21678    }
21679    composeBackboneElement(t, "participant", name, element, index);
21680    if (element.hasTypeElement()) {
21681      composeEnum(t, "RequestOrchestrationActionParticipantComponent", "type", element.getTypeElement(), -1);
21682    }
21683    if (element.hasTypeCanonicalElement()) {
21684      composeCanonical(t, "RequestOrchestrationActionParticipantComponent", "typeCanonical", element.getTypeCanonicalElement(), -1);
21685    }
21686    if (element.hasTypeReference()) {
21687      composeReference(t, "RequestOrchestrationActionParticipantComponent", "typeReference", element.getTypeReference(), -1);
21688    }
21689    if (element.hasRole()) {
21690      composeCodeableConcept(t, "RequestOrchestrationActionParticipantComponent", "role", element.getRole(), -1);
21691    }
21692    if (element.hasFunction()) {
21693      composeCodeableConcept(t, "RequestOrchestrationActionParticipantComponent", "function", element.getFunction(), -1);
21694    }
21695    if (element.hasActor()) {
21696      composeType(t, "RequestOrchestrationActionParticipantComponent", "actor", element.getActor(), -1);
21697    }
21698  }
21699
21700  protected void composeRequestOrchestrationActionDynamicValueComponent(Complex parent, String parentType, String name, RequestOrchestration.RequestOrchestrationActionDynamicValueComponent element, int index) {
21701    if (element == null) 
21702      return;
21703    Complex t;
21704    if (Utilities.noString(parentType))
21705      t = parent;
21706    else {
21707      t = parent.predicate("fhir:"+parentType+'.'+name);
21708    }
21709    composeBackboneElement(t, "dynamicValue", name, element, index);
21710    if (element.hasPathElement()) {
21711      composeString(t, "RequestOrchestrationActionDynamicValueComponent", "path", element.getPathElement(), -1);
21712    }
21713    if (element.hasExpression()) {
21714      composeExpression(t, "RequestOrchestrationActionDynamicValueComponent", "expression", element.getExpression(), -1);
21715    }
21716  }
21717
21718  protected void composeRequirements(Complex parent, String parentType, String name, Requirements element, int index) {
21719    if (element == null) 
21720      return;
21721    Complex t;
21722    if (Utilities.noString(parentType))
21723      t = parent;
21724    else {
21725      t = parent.predicate("fhir:"+parentType+'.'+name);
21726    }
21727    composeCanonicalResource(t, "Requirements", name, element, index);
21728    if (element.hasUrlElement()) {
21729      composeUri(t, "Requirements", "url", element.getUrlElement(), -1);
21730    }
21731    for (int i = 0; i < element.getIdentifier().size(); i++) {
21732      composeIdentifier(t, "Requirements", "identifier", element.getIdentifier().get(i), i);
21733    }
21734    if (element.hasVersionElement()) {
21735      composeString(t, "Requirements", "version", element.getVersionElement(), -1);
21736    }
21737    if (element.hasNameElement()) {
21738      composeString(t, "Requirements", "name", element.getNameElement(), -1);
21739    }
21740    if (element.hasTitleElement()) {
21741      composeString(t, "Requirements", "title", element.getTitleElement(), -1);
21742    }
21743    if (element.hasStatusElement()) {
21744      composeEnum(t, "Requirements", "status", element.getStatusElement(), -1);
21745    }
21746    if (element.hasExperimentalElement()) {
21747      composeBoolean(t, "Requirements", "experimental", element.getExperimentalElement(), -1);
21748    }
21749    if (element.hasDateElement()) {
21750      composeDateTime(t, "Requirements", "date", element.getDateElement(), -1);
21751    }
21752    if (element.hasPublisherElement()) {
21753      composeString(t, "Requirements", "publisher", element.getPublisherElement(), -1);
21754    }
21755    for (int i = 0; i < element.getContact().size(); i++) {
21756      composeContactDetail(t, "Requirements", "contact", element.getContact().get(i), i);
21757    }
21758    if (element.hasDescriptionElement()) {
21759      composeMarkdown(t, "Requirements", "description", element.getDescriptionElement(), -1);
21760    }
21761    for (int i = 0; i < element.getUseContext().size(); i++) {
21762      composeUsageContext(t, "Requirements", "useContext", element.getUseContext().get(i), i);
21763    }
21764    for (int i = 0; i < element.getJurisdiction().size(); i++) {
21765      composeCodeableConcept(t, "Requirements", "jurisdiction", element.getJurisdiction().get(i), i);
21766    }
21767    if (element.hasPurposeElement()) {
21768      composeMarkdown(t, "Requirements", "purpose", element.getPurposeElement(), -1);
21769    }
21770    if (element.hasCopyrightElement()) {
21771      composeMarkdown(t, "Requirements", "copyright", element.getCopyrightElement(), -1);
21772    }
21773    if (element.hasCopyrightLabelElement()) {
21774      composeString(t, "Requirements", "copyrightLabel", element.getCopyrightLabelElement(), -1);
21775    }
21776    for (int i = 0; i < element.getDerivedFrom().size(); i++) {
21777      composeCanonical(t, "Requirements", "derivedFrom", element.getDerivedFrom().get(i), i);
21778    }
21779    for (int i = 0; i < element.getActor().size(); i++) {
21780      composeCanonical(t, "Requirements", "actor", element.getActor().get(i), i);
21781    }
21782    for (int i = 0; i < element.getStatement().size(); i++) {
21783      composeRequirementsStatementComponent(t, "Requirements", "statement", element.getStatement().get(i), i);
21784    }
21785  }
21786
21787  protected void composeRequirementsStatementComponent(Complex parent, String parentType, String name, Requirements.RequirementsStatementComponent element, int index) {
21788    if (element == null) 
21789      return;
21790    Complex t;
21791    if (Utilities.noString(parentType))
21792      t = parent;
21793    else {
21794      t = parent.predicate("fhir:"+parentType+'.'+name);
21795    }
21796    composeBackboneElement(t, "statement", name, element, index);
21797    if (element.hasKeyElement()) {
21798      composeId(t, "RequirementsStatementComponent", "key", element.getKeyElement(), -1);
21799    }
21800    if (element.hasLabelElement()) {
21801      composeString(t, "RequirementsStatementComponent", "label", element.getLabelElement(), -1);
21802    }
21803    for (int i = 0; i < element.getConformance().size(); i++) {
21804      composeEnum(t, "RequirementsStatementComponent", "conformance", element.getConformance().get(i), i);
21805    }
21806    if (element.hasConditionalityElement()) {
21807      composeBoolean(t, "RequirementsStatementComponent", "conditionality", element.getConditionalityElement(), -1);
21808    }
21809    if (element.hasRequirementElement()) {
21810      composeMarkdown(t, "RequirementsStatementComponent", "requirement", element.getRequirementElement(), -1);
21811    }
21812    if (element.hasDerivedFromElement()) {
21813      composeString(t, "RequirementsStatementComponent", "derivedFrom", element.getDerivedFromElement(), -1);
21814    }
21815    if (element.hasParentElement()) {
21816      composeString(t, "RequirementsStatementComponent", "parent", element.getParentElement(), -1);
21817    }
21818    for (int i = 0; i < element.getSatisfiedBy().size(); i++) {
21819      composeUrl(t, "RequirementsStatementComponent", "satisfiedBy", element.getSatisfiedBy().get(i), i);
21820    }
21821    for (int i = 0; i < element.getReference().size(); i++) {
21822      composeUrl(t, "RequirementsStatementComponent", "reference", element.getReference().get(i), i);
21823    }
21824    for (int i = 0; i < element.getSource().size(); i++) {
21825      composeReference(t, "RequirementsStatementComponent", "source", element.getSource().get(i), i);
21826    }
21827  }
21828
21829  protected void composeResearchStudy(Complex parent, String parentType, String name, ResearchStudy element, int index) {
21830    if (element == null) 
21831      return;
21832    Complex t;
21833    if (Utilities.noString(parentType))
21834      t = parent;
21835    else {
21836      t = parent.predicate("fhir:"+parentType+'.'+name);
21837    }
21838    composeDomainResource(t, "ResearchStudy", name, element, index);
21839    if (element.hasUrlElement()) {
21840      composeUri(t, "ResearchStudy", "url", element.getUrlElement(), -1);
21841    }
21842    for (int i = 0; i < element.getIdentifier().size(); i++) {
21843      composeIdentifier(t, "ResearchStudy", "identifier", element.getIdentifier().get(i), i);
21844    }
21845    if (element.hasVersionElement()) {
21846      composeString(t, "ResearchStudy", "version", element.getVersionElement(), -1);
21847    }
21848    if (element.hasNameElement()) {
21849      composeString(t, "ResearchStudy", "name", element.getNameElement(), -1);
21850    }
21851    if (element.hasTitleElement()) {
21852      composeString(t, "ResearchStudy", "title", element.getTitleElement(), -1);
21853    }
21854    for (int i = 0; i < element.getLabel().size(); i++) {
21855      composeResearchStudyLabelComponent(t, "ResearchStudy", "label", element.getLabel().get(i), i);
21856    }
21857    for (int i = 0; i < element.getProtocol().size(); i++) {
21858      composeReference(t, "ResearchStudy", "protocol", element.getProtocol().get(i), i);
21859    }
21860    for (int i = 0; i < element.getPartOf().size(); i++) {
21861      composeReference(t, "ResearchStudy", "partOf", element.getPartOf().get(i), i);
21862    }
21863    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
21864      composeRelatedArtifact(t, "ResearchStudy", "relatedArtifact", element.getRelatedArtifact().get(i), i);
21865    }
21866    if (element.hasDateElement()) {
21867      composeDateTime(t, "ResearchStudy", "date", element.getDateElement(), -1);
21868    }
21869    if (element.hasStatusElement()) {
21870      composeEnum(t, "ResearchStudy", "status", element.getStatusElement(), -1);
21871    }
21872    if (element.hasPrimaryPurposeType()) {
21873      composeCodeableConcept(t, "ResearchStudy", "primaryPurposeType", element.getPrimaryPurposeType(), -1);
21874    }
21875    if (element.hasPhase()) {
21876      composeCodeableConcept(t, "ResearchStudy", "phase", element.getPhase(), -1);
21877    }
21878    for (int i = 0; i < element.getStudyDesign().size(); i++) {
21879      composeCodeableConcept(t, "ResearchStudy", "studyDesign", element.getStudyDesign().get(i), i);
21880    }
21881    for (int i = 0; i < element.getFocus().size(); i++) {
21882      composeCodeableReference(t, "ResearchStudy", "focus", element.getFocus().get(i), i);
21883    }
21884    for (int i = 0; i < element.getCondition().size(); i++) {
21885      composeCodeableConcept(t, "ResearchStudy", "condition", element.getCondition().get(i), i);
21886    }
21887    for (int i = 0; i < element.getKeyword().size(); i++) {
21888      composeCodeableConcept(t, "ResearchStudy", "keyword", element.getKeyword().get(i), i);
21889    }
21890    for (int i = 0; i < element.getRegion().size(); i++) {
21891      composeCodeableConcept(t, "ResearchStudy", "region", element.getRegion().get(i), i);
21892    }
21893    if (element.hasDescriptionSummaryElement()) {
21894      composeMarkdown(t, "ResearchStudy", "descriptionSummary", element.getDescriptionSummaryElement(), -1);
21895    }
21896    if (element.hasDescriptionElement()) {
21897      composeMarkdown(t, "ResearchStudy", "description", element.getDescriptionElement(), -1);
21898    }
21899    if (element.hasPeriod()) {
21900      composePeriod(t, "ResearchStudy", "period", element.getPeriod(), -1);
21901    }
21902    for (int i = 0; i < element.getSite().size(); i++) {
21903      composeReference(t, "ResearchStudy", "site", element.getSite().get(i), i);
21904    }
21905    for (int i = 0; i < element.getNote().size(); i++) {
21906      composeAnnotation(t, "ResearchStudy", "note", element.getNote().get(i), i);
21907    }
21908    for (int i = 0; i < element.getClassifier().size(); i++) {
21909      composeCodeableConcept(t, "ResearchStudy", "classifier", element.getClassifier().get(i), i);
21910    }
21911    for (int i = 0; i < element.getAssociatedParty().size(); i++) {
21912      composeResearchStudyAssociatedPartyComponent(t, "ResearchStudy", "associatedParty", element.getAssociatedParty().get(i), i);
21913    }
21914    for (int i = 0; i < element.getProgressStatus().size(); i++) {
21915      composeResearchStudyProgressStatusComponent(t, "ResearchStudy", "progressStatus", element.getProgressStatus().get(i), i);
21916    }
21917    if (element.hasWhyStopped()) {
21918      composeCodeableConcept(t, "ResearchStudy", "whyStopped", element.getWhyStopped(), -1);
21919    }
21920    if (element.hasRecruitment()) {
21921      composeResearchStudyRecruitmentComponent(t, "ResearchStudy", "recruitment", element.getRecruitment(), -1);
21922    }
21923    for (int i = 0; i < element.getComparisonGroup().size(); i++) {
21924      composeResearchStudyComparisonGroupComponent(t, "ResearchStudy", "comparisonGroup", element.getComparisonGroup().get(i), i);
21925    }
21926    for (int i = 0; i < element.getObjective().size(); i++) {
21927      composeResearchStudyObjectiveComponent(t, "ResearchStudy", "objective", element.getObjective().get(i), i);
21928    }
21929    for (int i = 0; i < element.getOutcomeMeasure().size(); i++) {
21930      composeResearchStudyOutcomeMeasureComponent(t, "ResearchStudy", "outcomeMeasure", element.getOutcomeMeasure().get(i), i);
21931    }
21932    for (int i = 0; i < element.getResult().size(); i++) {
21933      composeReference(t, "ResearchStudy", "result", element.getResult().get(i), i);
21934    }
21935  }
21936
21937  protected void composeResearchStudyLabelComponent(Complex parent, String parentType, String name, ResearchStudy.ResearchStudyLabelComponent element, int index) {
21938    if (element == null) 
21939      return;
21940    Complex t;
21941    if (Utilities.noString(parentType))
21942      t = parent;
21943    else {
21944      t = parent.predicate("fhir:"+parentType+'.'+name);
21945    }
21946    composeBackboneElement(t, "label", name, element, index);
21947    if (element.hasType()) {
21948      composeCodeableConcept(t, "ResearchStudyLabelComponent", "type", element.getType(), -1);
21949    }
21950    if (element.hasValueElement()) {
21951      composeString(t, "ResearchStudyLabelComponent", "value", element.getValueElement(), -1);
21952    }
21953  }
21954
21955  protected void composeResearchStudyAssociatedPartyComponent(Complex parent, String parentType, String name, ResearchStudy.ResearchStudyAssociatedPartyComponent element, int index) {
21956    if (element == null) 
21957      return;
21958    Complex t;
21959    if (Utilities.noString(parentType))
21960      t = parent;
21961    else {
21962      t = parent.predicate("fhir:"+parentType+'.'+name);
21963    }
21964    composeBackboneElement(t, "associatedParty", name, element, index);
21965    if (element.hasNameElement()) {
21966      composeString(t, "ResearchStudyAssociatedPartyComponent", "name", element.getNameElement(), -1);
21967    }
21968    if (element.hasRole()) {
21969      composeCodeableConcept(t, "ResearchStudyAssociatedPartyComponent", "role", element.getRole(), -1);
21970    }
21971    for (int i = 0; i < element.getPeriod().size(); i++) {
21972      composePeriod(t, "ResearchStudyAssociatedPartyComponent", "period", element.getPeriod().get(i), i);
21973    }
21974    for (int i = 0; i < element.getClassifier().size(); i++) {
21975      composeCodeableConcept(t, "ResearchStudyAssociatedPartyComponent", "classifier", element.getClassifier().get(i), i);
21976    }
21977    if (element.hasParty()) {
21978      composeReference(t, "ResearchStudyAssociatedPartyComponent", "party", element.getParty(), -1);
21979    }
21980  }
21981
21982  protected void composeResearchStudyProgressStatusComponent(Complex parent, String parentType, String name, ResearchStudy.ResearchStudyProgressStatusComponent element, int index) {
21983    if (element == null) 
21984      return;
21985    Complex t;
21986    if (Utilities.noString(parentType))
21987      t = parent;
21988    else {
21989      t = parent.predicate("fhir:"+parentType+'.'+name);
21990    }
21991    composeBackboneElement(t, "progressStatus", name, element, index);
21992    if (element.hasState()) {
21993      composeCodeableConcept(t, "ResearchStudyProgressStatusComponent", "state", element.getState(), -1);
21994    }
21995    if (element.hasActualElement()) {
21996      composeBoolean(t, "ResearchStudyProgressStatusComponent", "actual", element.getActualElement(), -1);
21997    }
21998    if (element.hasPeriod()) {
21999      composePeriod(t, "ResearchStudyProgressStatusComponent", "period", element.getPeriod(), -1);
22000    }
22001  }
22002
22003  protected void composeResearchStudyRecruitmentComponent(Complex parent, String parentType, String name, ResearchStudy.ResearchStudyRecruitmentComponent element, int index) {
22004    if (element == null) 
22005      return;
22006    Complex t;
22007    if (Utilities.noString(parentType))
22008      t = parent;
22009    else {
22010      t = parent.predicate("fhir:"+parentType+'.'+name);
22011    }
22012    composeBackboneElement(t, "recruitment", name, element, index);
22013    if (element.hasTargetNumberElement()) {
22014      composeUnsignedInt(t, "ResearchStudyRecruitmentComponent", "targetNumber", element.getTargetNumberElement(), -1);
22015    }
22016    if (element.hasActualNumberElement()) {
22017      composeUnsignedInt(t, "ResearchStudyRecruitmentComponent", "actualNumber", element.getActualNumberElement(), -1);
22018    }
22019    if (element.hasEligibility()) {
22020      composeReference(t, "ResearchStudyRecruitmentComponent", "eligibility", element.getEligibility(), -1);
22021    }
22022    if (element.hasActualGroup()) {
22023      composeReference(t, "ResearchStudyRecruitmentComponent", "actualGroup", element.getActualGroup(), -1);
22024    }
22025  }
22026
22027  protected void composeResearchStudyComparisonGroupComponent(Complex parent, String parentType, String name, ResearchStudy.ResearchStudyComparisonGroupComponent element, int index) {
22028    if (element == null) 
22029      return;
22030    Complex t;
22031    if (Utilities.noString(parentType))
22032      t = parent;
22033    else {
22034      t = parent.predicate("fhir:"+parentType+'.'+name);
22035    }
22036    composeBackboneElement(t, "comparisonGroup", name, element, index);
22037    for (int i = 0; i < element.getIdentifier().size(); i++) {
22038      composeIdentifier(t, "ResearchStudyComparisonGroupComponent", "identifier", element.getIdentifier().get(i), i);
22039    }
22040    if (element.hasNameElement()) {
22041      composeString(t, "ResearchStudyComparisonGroupComponent", "name", element.getNameElement(), -1);
22042    }
22043    if (element.hasType()) {
22044      composeCodeableConcept(t, "ResearchStudyComparisonGroupComponent", "type", element.getType(), -1);
22045    }
22046    if (element.hasDescriptionElement()) {
22047      composeMarkdown(t, "ResearchStudyComparisonGroupComponent", "description", element.getDescriptionElement(), -1);
22048    }
22049    for (int i = 0; i < element.getIntendedExposure().size(); i++) {
22050      composeReference(t, "ResearchStudyComparisonGroupComponent", "intendedExposure", element.getIntendedExposure().get(i), i);
22051    }
22052    if (element.hasObservedGroup()) {
22053      composeReference(t, "ResearchStudyComparisonGroupComponent", "observedGroup", element.getObservedGroup(), -1);
22054    }
22055  }
22056
22057  protected void composeResearchStudyObjectiveComponent(Complex parent, String parentType, String name, ResearchStudy.ResearchStudyObjectiveComponent element, int index) {
22058    if (element == null) 
22059      return;
22060    Complex t;
22061    if (Utilities.noString(parentType))
22062      t = parent;
22063    else {
22064      t = parent.predicate("fhir:"+parentType+'.'+name);
22065    }
22066    composeBackboneElement(t, "objective", name, element, index);
22067    if (element.hasNameElement()) {
22068      composeString(t, "ResearchStudyObjectiveComponent", "name", element.getNameElement(), -1);
22069    }
22070    if (element.hasType()) {
22071      composeCodeableConcept(t, "ResearchStudyObjectiveComponent", "type", element.getType(), -1);
22072    }
22073    if (element.hasDescriptionElement()) {
22074      composeMarkdown(t, "ResearchStudyObjectiveComponent", "description", element.getDescriptionElement(), -1);
22075    }
22076  }
22077
22078  protected void composeResearchStudyOutcomeMeasureComponent(Complex parent, String parentType, String name, ResearchStudy.ResearchStudyOutcomeMeasureComponent element, int index) {
22079    if (element == null) 
22080      return;
22081    Complex t;
22082    if (Utilities.noString(parentType))
22083      t = parent;
22084    else {
22085      t = parent.predicate("fhir:"+parentType+'.'+name);
22086    }
22087    composeBackboneElement(t, "outcomeMeasure", name, element, index);
22088    if (element.hasNameElement()) {
22089      composeString(t, "ResearchStudyOutcomeMeasureComponent", "name", element.getNameElement(), -1);
22090    }
22091    for (int i = 0; i < element.getType().size(); i++) {
22092      composeCodeableConcept(t, "ResearchStudyOutcomeMeasureComponent", "type", element.getType().get(i), i);
22093    }
22094    if (element.hasDescriptionElement()) {
22095      composeMarkdown(t, "ResearchStudyOutcomeMeasureComponent", "description", element.getDescriptionElement(), -1);
22096    }
22097    if (element.hasReference()) {
22098      composeReference(t, "ResearchStudyOutcomeMeasureComponent", "reference", element.getReference(), -1);
22099    }
22100  }
22101
22102  protected void composeResearchSubject(Complex parent, String parentType, String name, ResearchSubject element, int index) {
22103    if (element == null) 
22104      return;
22105    Complex t;
22106    if (Utilities.noString(parentType))
22107      t = parent;
22108    else {
22109      t = parent.predicate("fhir:"+parentType+'.'+name);
22110    }
22111    composeDomainResource(t, "ResearchSubject", name, element, index);
22112    for (int i = 0; i < element.getIdentifier().size(); i++) {
22113      composeIdentifier(t, "ResearchSubject", "identifier", element.getIdentifier().get(i), i);
22114    }
22115    if (element.hasStatusElement()) {
22116      composeEnum(t, "ResearchSubject", "status", element.getStatusElement(), -1);
22117    }
22118    for (int i = 0; i < element.getProgress().size(); i++) {
22119      composeResearchSubjectProgressComponent(t, "ResearchSubject", "progress", element.getProgress().get(i), i);
22120    }
22121    if (element.hasPeriod()) {
22122      composePeriod(t, "ResearchSubject", "period", element.getPeriod(), -1);
22123    }
22124    if (element.hasStudy()) {
22125      composeReference(t, "ResearchSubject", "study", element.getStudy(), -1);
22126    }
22127    if (element.hasSubject()) {
22128      composeReference(t, "ResearchSubject", "subject", element.getSubject(), -1);
22129    }
22130    if (element.hasAssignedArmElement()) {
22131      composeString(t, "ResearchSubject", "assignedArm", element.getAssignedArmElement(), -1);
22132    }
22133    if (element.hasActualArmElement()) {
22134      composeString(t, "ResearchSubject", "actualArm", element.getActualArmElement(), -1);
22135    }
22136    if (element.hasConsent()) {
22137      composeReference(t, "ResearchSubject", "consent", element.getConsent(), -1);
22138    }
22139  }
22140
22141  protected void composeResearchSubjectProgressComponent(Complex parent, String parentType, String name, ResearchSubject.ResearchSubjectProgressComponent element, int index) {
22142    if (element == null) 
22143      return;
22144    Complex t;
22145    if (Utilities.noString(parentType))
22146      t = parent;
22147    else {
22148      t = parent.predicate("fhir:"+parentType+'.'+name);
22149    }
22150    composeBackboneElement(t, "progress", name, element, index);
22151    if (element.hasType()) {
22152      composeCodeableConcept(t, "ResearchSubjectProgressComponent", "type", element.getType(), -1);
22153    }
22154    if (element.hasSubjectState()) {
22155      composeCodeableConcept(t, "ResearchSubjectProgressComponent", "subjectState", element.getSubjectState(), -1);
22156    }
22157    if (element.hasMilestone()) {
22158      composeCodeableConcept(t, "ResearchSubjectProgressComponent", "milestone", element.getMilestone(), -1);
22159    }
22160    if (element.hasReason()) {
22161      composeCodeableConcept(t, "ResearchSubjectProgressComponent", "reason", element.getReason(), -1);
22162    }
22163    if (element.hasStartDateElement()) {
22164      composeDateTime(t, "ResearchSubjectProgressComponent", "startDate", element.getStartDateElement(), -1);
22165    }
22166    if (element.hasEndDateElement()) {
22167      composeDateTime(t, "ResearchSubjectProgressComponent", "endDate", element.getEndDateElement(), -1);
22168    }
22169  }
22170
22171  protected void composeRiskAssessment(Complex parent, String parentType, String name, RiskAssessment element, int index) {
22172    if (element == null) 
22173      return;
22174    Complex t;
22175    if (Utilities.noString(parentType))
22176      t = parent;
22177    else {
22178      t = parent.predicate("fhir:"+parentType+'.'+name);
22179    }
22180    composeDomainResource(t, "RiskAssessment", name, element, index);
22181    for (int i = 0; i < element.getIdentifier().size(); i++) {
22182      composeIdentifier(t, "RiskAssessment", "identifier", element.getIdentifier().get(i), i);
22183    }
22184    if (element.hasBasedOn()) {
22185      composeReference(t, "RiskAssessment", "basedOn", element.getBasedOn(), -1);
22186    }
22187    if (element.hasParent()) {
22188      composeReference(t, "RiskAssessment", "parent", element.getParent(), -1);
22189    }
22190    if (element.hasStatusElement()) {
22191      composeEnum(t, "RiskAssessment", "status", element.getStatusElement(), -1);
22192    }
22193    if (element.hasMethod()) {
22194      composeCodeableConcept(t, "RiskAssessment", "method", element.getMethod(), -1);
22195    }
22196    if (element.hasCode()) {
22197      composeCodeableConcept(t, "RiskAssessment", "code", element.getCode(), -1);
22198    }
22199    if (element.hasSubject()) {
22200      composeReference(t, "RiskAssessment", "subject", element.getSubject(), -1);
22201    }
22202    if (element.hasEncounter()) {
22203      composeReference(t, "RiskAssessment", "encounter", element.getEncounter(), -1);
22204    }
22205    if (element.hasOccurrence()) {
22206      composeType(t, "RiskAssessment", "occurrence", element.getOccurrence(), -1);
22207    }
22208    if (element.hasCondition()) {
22209      composeReference(t, "RiskAssessment", "condition", element.getCondition(), -1);
22210    }
22211    if (element.hasPerformer()) {
22212      composeReference(t, "RiskAssessment", "performer", element.getPerformer(), -1);
22213    }
22214    for (int i = 0; i < element.getReason().size(); i++) {
22215      composeCodeableReference(t, "RiskAssessment", "reason", element.getReason().get(i), i);
22216    }
22217    for (int i = 0; i < element.getBasis().size(); i++) {
22218      composeReference(t, "RiskAssessment", "basis", element.getBasis().get(i), i);
22219    }
22220    for (int i = 0; i < element.getPrediction().size(); i++) {
22221      composeRiskAssessmentPredictionComponent(t, "RiskAssessment", "prediction", element.getPrediction().get(i), i);
22222    }
22223    if (element.hasMitigationElement()) {
22224      composeString(t, "RiskAssessment", "mitigation", element.getMitigationElement(), -1);
22225    }
22226    for (int i = 0; i < element.getNote().size(); i++) {
22227      composeAnnotation(t, "RiskAssessment", "note", element.getNote().get(i), i);
22228    }
22229  }
22230
22231  protected void composeRiskAssessmentPredictionComponent(Complex parent, String parentType, String name, RiskAssessment.RiskAssessmentPredictionComponent element, int index) {
22232    if (element == null) 
22233      return;
22234    Complex t;
22235    if (Utilities.noString(parentType))
22236      t = parent;
22237    else {
22238      t = parent.predicate("fhir:"+parentType+'.'+name);
22239    }
22240    composeBackboneElement(t, "prediction", name, element, index);
22241    if (element.hasOutcome()) {
22242      composeCodeableConcept(t, "RiskAssessmentPredictionComponent", "outcome", element.getOutcome(), -1);
22243    }
22244    if (element.hasProbability()) {
22245      composeType(t, "RiskAssessmentPredictionComponent", "probability", element.getProbability(), -1);
22246    }
22247    if (element.hasQualitativeRisk()) {
22248      composeCodeableConcept(t, "RiskAssessmentPredictionComponent", "qualitativeRisk", element.getQualitativeRisk(), -1);
22249    }
22250    if (element.hasRelativeRiskElement()) {
22251      composeDecimal(t, "RiskAssessmentPredictionComponent", "relativeRisk", element.getRelativeRiskElement(), -1);
22252    }
22253    if (element.hasWhen()) {
22254      composeType(t, "RiskAssessmentPredictionComponent", "when", element.getWhen(), -1);
22255    }
22256    if (element.hasRationaleElement()) {
22257      composeString(t, "RiskAssessmentPredictionComponent", "rationale", element.getRationaleElement(), -1);
22258    }
22259  }
22260
22261  protected void composeSchedule(Complex parent, String parentType, String name, Schedule element, int index) {
22262    if (element == null) 
22263      return;
22264    Complex t;
22265    if (Utilities.noString(parentType))
22266      t = parent;
22267    else {
22268      t = parent.predicate("fhir:"+parentType+'.'+name);
22269    }
22270    composeDomainResource(t, "Schedule", name, element, index);
22271    for (int i = 0; i < element.getIdentifier().size(); i++) {
22272      composeIdentifier(t, "Schedule", "identifier", element.getIdentifier().get(i), i);
22273    }
22274    if (element.hasActiveElement()) {
22275      composeBoolean(t, "Schedule", "active", element.getActiveElement(), -1);
22276    }
22277    for (int i = 0; i < element.getServiceCategory().size(); i++) {
22278      composeCodeableConcept(t, "Schedule", "serviceCategory", element.getServiceCategory().get(i), i);
22279    }
22280    for (int i = 0; i < element.getServiceType().size(); i++) {
22281      composeCodeableReference(t, "Schedule", "serviceType", element.getServiceType().get(i), i);
22282    }
22283    for (int i = 0; i < element.getSpecialty().size(); i++) {
22284      composeCodeableConcept(t, "Schedule", "specialty", element.getSpecialty().get(i), i);
22285    }
22286    if (element.hasNameElement()) {
22287      composeString(t, "Schedule", "name", element.getNameElement(), -1);
22288    }
22289    for (int i = 0; i < element.getActor().size(); i++) {
22290      composeReference(t, "Schedule", "actor", element.getActor().get(i), i);
22291    }
22292    if (element.hasPlanningHorizon()) {
22293      composePeriod(t, "Schedule", "planningHorizon", element.getPlanningHorizon(), -1);
22294    }
22295    if (element.hasCommentElement()) {
22296      composeString(t, "Schedule", "comment", element.getCommentElement(), -1);
22297    }
22298  }
22299
22300  protected void composeSearchParameter(Complex parent, String parentType, String name, SearchParameter element, int index) {
22301    if (element == null) 
22302      return;
22303    Complex t;
22304    if (Utilities.noString(parentType))
22305      t = parent;
22306    else {
22307      t = parent.predicate("fhir:"+parentType+'.'+name);
22308    }
22309    composeCanonicalResource(t, "SearchParameter", name, element, index);
22310    if (element.hasUrlElement()) {
22311      composeUri(t, "SearchParameter", "url", element.getUrlElement(), -1);
22312    }
22313    if (element.hasVersionElement()) {
22314      composeString(t, "SearchParameter", "version", element.getVersionElement(), -1);
22315    }
22316    if (element.hasVersionAlgorithm()) {
22317      composeType(t, "SearchParameter", "versionAlgorithm", element.getVersionAlgorithm(), -1);
22318    }
22319    if (element.hasNameElement()) {
22320      composeString(t, "SearchParameter", "name", element.getNameElement(), -1);
22321    }
22322    if (element.hasTitleElement()) {
22323      composeString(t, "SearchParameter", "title", element.getTitleElement(), -1);
22324    }
22325    if (element.hasDerivedFromElement()) {
22326      composeCanonical(t, "SearchParameter", "derivedFrom", element.getDerivedFromElement(), -1);
22327    }
22328    if (element.hasStatusElement()) {
22329      composeEnum(t, "SearchParameter", "status", element.getStatusElement(), -1);
22330    }
22331    if (element.hasExperimentalElement()) {
22332      composeBoolean(t, "SearchParameter", "experimental", element.getExperimentalElement(), -1);
22333    }
22334    if (element.hasDateElement()) {
22335      composeDateTime(t, "SearchParameter", "date", element.getDateElement(), -1);
22336    }
22337    if (element.hasPublisherElement()) {
22338      composeString(t, "SearchParameter", "publisher", element.getPublisherElement(), -1);
22339    }
22340    for (int i = 0; i < element.getContact().size(); i++) {
22341      composeContactDetail(t, "SearchParameter", "contact", element.getContact().get(i), i);
22342    }
22343    if (element.hasDescriptionElement()) {
22344      composeMarkdown(t, "SearchParameter", "description", element.getDescriptionElement(), -1);
22345    }
22346    for (int i = 0; i < element.getUseContext().size(); i++) {
22347      composeUsageContext(t, "SearchParameter", "useContext", element.getUseContext().get(i), i);
22348    }
22349    for (int i = 0; i < element.getJurisdiction().size(); i++) {
22350      composeCodeableConcept(t, "SearchParameter", "jurisdiction", element.getJurisdiction().get(i), i);
22351    }
22352    if (element.hasPurposeElement()) {
22353      composeMarkdown(t, "SearchParameter", "purpose", element.getPurposeElement(), -1);
22354    }
22355    if (element.hasCodeElement()) {
22356      composeCode(t, "SearchParameter", "code", element.getCodeElement(), -1);
22357    }
22358    for (int i = 0; i < element.getBase().size(); i++) {
22359      composeCode(t, "SearchParameter", "base", element.getBase().get(i), i);
22360    }
22361    if (element.hasTypeElement()) {
22362      composeEnum(t, "SearchParameter", "type", element.getTypeElement(), -1);
22363    }
22364    if (element.hasExpressionElement()) {
22365      composeString(t, "SearchParameter", "expression", element.getExpressionElement(), -1);
22366    }
22367    if (element.hasProcessingModeElement()) {
22368      composeEnum(t, "SearchParameter", "processingMode", element.getProcessingModeElement(), -1);
22369    }
22370    if (element.hasConstraintElement()) {
22371      composeString(t, "SearchParameter", "constraint", element.getConstraintElement(), -1);
22372    }
22373    for (int i = 0; i < element.getTarget().size(); i++) {
22374      composeCode(t, "SearchParameter", "target", element.getTarget().get(i), i);
22375    }
22376    if (element.hasMultipleOrElement()) {
22377      composeBoolean(t, "SearchParameter", "multipleOr", element.getMultipleOrElement(), -1);
22378    }
22379    if (element.hasMultipleAndElement()) {
22380      composeBoolean(t, "SearchParameter", "multipleAnd", element.getMultipleAndElement(), -1);
22381    }
22382    for (int i = 0; i < element.getComparator().size(); i++) {
22383      composeEnum(t, "SearchParameter", "comparator", element.getComparator().get(i), i);
22384    }
22385    for (int i = 0; i < element.getModifier().size(); i++) {
22386      composeEnum(t, "SearchParameter", "modifier", element.getModifier().get(i), i);
22387    }
22388    for (int i = 0; i < element.getChain().size(); i++) {
22389      composeString(t, "SearchParameter", "chain", element.getChain().get(i), i);
22390    }
22391    for (int i = 0; i < element.getComponent().size(); i++) {
22392      composeSearchParameterComponentComponent(t, "SearchParameter", "component", element.getComponent().get(i), i);
22393    }
22394  }
22395
22396  protected void composeSearchParameterComponentComponent(Complex parent, String parentType, String name, SearchParameter.SearchParameterComponentComponent element, int index) {
22397    if (element == null) 
22398      return;
22399    Complex t;
22400    if (Utilities.noString(parentType))
22401      t = parent;
22402    else {
22403      t = parent.predicate("fhir:"+parentType+'.'+name);
22404    }
22405    composeBackboneElement(t, "component", name, element, index);
22406    if (element.hasDefinitionElement()) {
22407      composeCanonical(t, "SearchParameterComponentComponent", "definition", element.getDefinitionElement(), -1);
22408    }
22409    if (element.hasExpressionElement()) {
22410      composeString(t, "SearchParameterComponentComponent", "expression", element.getExpressionElement(), -1);
22411    }
22412  }
22413
22414  protected void composeServiceRequest(Complex parent, String parentType, String name, ServiceRequest element, int index) {
22415    if (element == null) 
22416      return;
22417    Complex t;
22418    if (Utilities.noString(parentType))
22419      t = parent;
22420    else {
22421      t = parent.predicate("fhir:"+parentType+'.'+name);
22422    }
22423    composeDomainResource(t, "ServiceRequest", name, element, index);
22424    for (int i = 0; i < element.getIdentifier().size(); i++) {
22425      composeIdentifier(t, "ServiceRequest", "identifier", element.getIdentifier().get(i), i);
22426    }
22427    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
22428      composeCanonical(t, "ServiceRequest", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
22429    }
22430    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
22431      composeUri(t, "ServiceRequest", "instantiatesUri", element.getInstantiatesUri().get(i), i);
22432    }
22433    for (int i = 0; i < element.getBasedOn().size(); i++) {
22434      composeReference(t, "ServiceRequest", "basedOn", element.getBasedOn().get(i), i);
22435    }
22436    for (int i = 0; i < element.getReplaces().size(); i++) {
22437      composeReference(t, "ServiceRequest", "replaces", element.getReplaces().get(i), i);
22438    }
22439    if (element.hasRequisition()) {
22440      composeIdentifier(t, "ServiceRequest", "requisition", element.getRequisition(), -1);
22441    }
22442    if (element.hasStatusElement()) {
22443      composeEnum(t, "ServiceRequest", "status", element.getStatusElement(), -1);
22444    }
22445    if (element.hasIntentElement()) {
22446      composeEnum(t, "ServiceRequest", "intent", element.getIntentElement(), -1);
22447    }
22448    for (int i = 0; i < element.getCategory().size(); i++) {
22449      composeCodeableConcept(t, "ServiceRequest", "category", element.getCategory().get(i), i);
22450    }
22451    if (element.hasPriorityElement()) {
22452      composeEnum(t, "ServiceRequest", "priority", element.getPriorityElement(), -1);
22453    }
22454    if (element.hasDoNotPerformElement()) {
22455      composeBoolean(t, "ServiceRequest", "doNotPerform", element.getDoNotPerformElement(), -1);
22456    }
22457    if (element.hasCode()) {
22458      composeCodeableReference(t, "ServiceRequest", "code", element.getCode(), -1);
22459    }
22460    for (int i = 0; i < element.getOrderDetail().size(); i++) {
22461      composeCodeableConcept(t, "ServiceRequest", "orderDetail", element.getOrderDetail().get(i), i);
22462    }
22463    if (element.hasQuantity()) {
22464      composeType(t, "ServiceRequest", "quantity", element.getQuantity(), -1);
22465    }
22466    if (element.hasSubject()) {
22467      composeReference(t, "ServiceRequest", "subject", element.getSubject(), -1);
22468    }
22469    for (int i = 0; i < element.getFocus().size(); i++) {
22470      composeReference(t, "ServiceRequest", "focus", element.getFocus().get(i), i);
22471    }
22472    if (element.hasEncounter()) {
22473      composeReference(t, "ServiceRequest", "encounter", element.getEncounter(), -1);
22474    }
22475    if (element.hasOccurrence()) {
22476      composeType(t, "ServiceRequest", "occurrence", element.getOccurrence(), -1);
22477    }
22478    if (element.hasAsNeeded()) {
22479      composeType(t, "ServiceRequest", "asNeeded", element.getAsNeeded(), -1);
22480    }
22481    if (element.hasAuthoredOnElement()) {
22482      composeDateTime(t, "ServiceRequest", "authoredOn", element.getAuthoredOnElement(), -1);
22483    }
22484    if (element.hasRequester()) {
22485      composeReference(t, "ServiceRequest", "requester", element.getRequester(), -1);
22486    }
22487    if (element.hasPerformerType()) {
22488      composeCodeableConcept(t, "ServiceRequest", "performerType", element.getPerformerType(), -1);
22489    }
22490    for (int i = 0; i < element.getPerformer().size(); i++) {
22491      composeReference(t, "ServiceRequest", "performer", element.getPerformer().get(i), i);
22492    }
22493    for (int i = 0; i < element.getLocation().size(); i++) {
22494      composeCodeableReference(t, "ServiceRequest", "location", element.getLocation().get(i), i);
22495    }
22496    for (int i = 0; i < element.getReason().size(); i++) {
22497      composeCodeableReference(t, "ServiceRequest", "reason", element.getReason().get(i), i);
22498    }
22499    for (int i = 0; i < element.getInsurance().size(); i++) {
22500      composeReference(t, "ServiceRequest", "insurance", element.getInsurance().get(i), i);
22501    }
22502    for (int i = 0; i < element.getSupportingInfo().size(); i++) {
22503      composeReference(t, "ServiceRequest", "supportingInfo", element.getSupportingInfo().get(i), i);
22504    }
22505    for (int i = 0; i < element.getSpecimen().size(); i++) {
22506      composeReference(t, "ServiceRequest", "specimen", element.getSpecimen().get(i), i);
22507    }
22508    for (int i = 0; i < element.getBodySite().size(); i++) {
22509      composeCodeableConcept(t, "ServiceRequest", "bodySite", element.getBodySite().get(i), i);
22510    }
22511    if (element.hasBodyStructure()) {
22512      composeReference(t, "ServiceRequest", "bodyStructure", element.getBodyStructure(), -1);
22513    }
22514    for (int i = 0; i < element.getNote().size(); i++) {
22515      composeAnnotation(t, "ServiceRequest", "note", element.getNote().get(i), i);
22516    }
22517    if (element.hasPatientInstructionElement()) {
22518      composeString(t, "ServiceRequest", "patientInstruction", element.getPatientInstructionElement(), -1);
22519    }
22520    for (int i = 0; i < element.getRelevantHistory().size(); i++) {
22521      composeReference(t, "ServiceRequest", "relevantHistory", element.getRelevantHistory().get(i), i);
22522    }
22523  }
22524
22525  protected void composeSlot(Complex parent, String parentType, String name, Slot element, int index) {
22526    if (element == null) 
22527      return;
22528    Complex t;
22529    if (Utilities.noString(parentType))
22530      t = parent;
22531    else {
22532      t = parent.predicate("fhir:"+parentType+'.'+name);
22533    }
22534    composeDomainResource(t, "Slot", name, element, index);
22535    for (int i = 0; i < element.getIdentifier().size(); i++) {
22536      composeIdentifier(t, "Slot", "identifier", element.getIdentifier().get(i), i);
22537    }
22538    for (int i = 0; i < element.getServiceCategory().size(); i++) {
22539      composeCodeableConcept(t, "Slot", "serviceCategory", element.getServiceCategory().get(i), i);
22540    }
22541    for (int i = 0; i < element.getServiceType().size(); i++) {
22542      composeCodeableReference(t, "Slot", "serviceType", element.getServiceType().get(i), i);
22543    }
22544    for (int i = 0; i < element.getSpecialty().size(); i++) {
22545      composeCodeableConcept(t, "Slot", "specialty", element.getSpecialty().get(i), i);
22546    }
22547    for (int i = 0; i < element.getAppointmentType().size(); i++) {
22548      composeCodeableConcept(t, "Slot", "appointmentType", element.getAppointmentType().get(i), i);
22549    }
22550    if (element.hasSchedule()) {
22551      composeReference(t, "Slot", "schedule", element.getSchedule(), -1);
22552    }
22553    if (element.hasStatusElement()) {
22554      composeEnum(t, "Slot", "status", element.getStatusElement(), -1);
22555    }
22556    if (element.hasStartElement()) {
22557      composeInstant(t, "Slot", "start", element.getStartElement(), -1);
22558    }
22559    if (element.hasEndElement()) {
22560      composeInstant(t, "Slot", "end", element.getEndElement(), -1);
22561    }
22562    if (element.hasOverbookedElement()) {
22563      composeBoolean(t, "Slot", "overbooked", element.getOverbookedElement(), -1);
22564    }
22565    if (element.hasCommentElement()) {
22566      composeString(t, "Slot", "comment", element.getCommentElement(), -1);
22567    }
22568  }
22569
22570  protected void composeSpecimen(Complex parent, String parentType, String name, Specimen element, int index) {
22571    if (element == null) 
22572      return;
22573    Complex t;
22574    if (Utilities.noString(parentType))
22575      t = parent;
22576    else {
22577      t = parent.predicate("fhir:"+parentType+'.'+name);
22578    }
22579    composeDomainResource(t, "Specimen", name, element, index);
22580    for (int i = 0; i < element.getIdentifier().size(); i++) {
22581      composeIdentifier(t, "Specimen", "identifier", element.getIdentifier().get(i), i);
22582    }
22583    if (element.hasAccessionIdentifier()) {
22584      composeIdentifier(t, "Specimen", "accessionIdentifier", element.getAccessionIdentifier(), -1);
22585    }
22586    if (element.hasStatusElement()) {
22587      composeEnum(t, "Specimen", "status", element.getStatusElement(), -1);
22588    }
22589    if (element.hasType()) {
22590      composeCodeableConcept(t, "Specimen", "type", element.getType(), -1);
22591    }
22592    if (element.hasSubject()) {
22593      composeReference(t, "Specimen", "subject", element.getSubject(), -1);
22594    }
22595    if (element.hasReceivedTimeElement()) {
22596      composeDateTime(t, "Specimen", "receivedTime", element.getReceivedTimeElement(), -1);
22597    }
22598    for (int i = 0; i < element.getParent().size(); i++) {
22599      composeReference(t, "Specimen", "parent", element.getParent().get(i), i);
22600    }
22601    for (int i = 0; i < element.getRequest().size(); i++) {
22602      composeReference(t, "Specimen", "request", element.getRequest().get(i), i);
22603    }
22604    if (element.hasCombinedElement()) {
22605      composeEnum(t, "Specimen", "combined", element.getCombinedElement(), -1);
22606    }
22607    for (int i = 0; i < element.getRole().size(); i++) {
22608      composeCodeableConcept(t, "Specimen", "role", element.getRole().get(i), i);
22609    }
22610    for (int i = 0; i < element.getFeature().size(); i++) {
22611      composeSpecimenFeatureComponent(t, "Specimen", "feature", element.getFeature().get(i), i);
22612    }
22613    if (element.hasCollection()) {
22614      composeSpecimenCollectionComponent(t, "Specimen", "collection", element.getCollection(), -1);
22615    }
22616    for (int i = 0; i < element.getProcessing().size(); i++) {
22617      composeSpecimenProcessingComponent(t, "Specimen", "processing", element.getProcessing().get(i), i);
22618    }
22619    for (int i = 0; i < element.getContainer().size(); i++) {
22620      composeSpecimenContainerComponent(t, "Specimen", "container", element.getContainer().get(i), i);
22621    }
22622    for (int i = 0; i < element.getCondition().size(); i++) {
22623      composeCodeableConcept(t, "Specimen", "condition", element.getCondition().get(i), i);
22624    }
22625    for (int i = 0; i < element.getNote().size(); i++) {
22626      composeAnnotation(t, "Specimen", "note", element.getNote().get(i), i);
22627    }
22628  }
22629
22630  protected void composeSpecimenFeatureComponent(Complex parent, String parentType, String name, Specimen.SpecimenFeatureComponent element, int index) {
22631    if (element == null) 
22632      return;
22633    Complex t;
22634    if (Utilities.noString(parentType))
22635      t = parent;
22636    else {
22637      t = parent.predicate("fhir:"+parentType+'.'+name);
22638    }
22639    composeBackboneElement(t, "feature", name, element, index);
22640    if (element.hasType()) {
22641      composeCodeableConcept(t, "SpecimenFeatureComponent", "type", element.getType(), -1);
22642    }
22643    if (element.hasDescriptionElement()) {
22644      composeString(t, "SpecimenFeatureComponent", "description", element.getDescriptionElement(), -1);
22645    }
22646  }
22647
22648  protected void composeSpecimenCollectionComponent(Complex parent, String parentType, String name, Specimen.SpecimenCollectionComponent element, int index) {
22649    if (element == null) 
22650      return;
22651    Complex t;
22652    if (Utilities.noString(parentType))
22653      t = parent;
22654    else {
22655      t = parent.predicate("fhir:"+parentType+'.'+name);
22656    }
22657    composeBackboneElement(t, "collection", name, element, index);
22658    if (element.hasCollector()) {
22659      composeReference(t, "SpecimenCollectionComponent", "collector", element.getCollector(), -1);
22660    }
22661    if (element.hasCollected()) {
22662      composeType(t, "SpecimenCollectionComponent", "collected", element.getCollected(), -1);
22663    }
22664    if (element.hasDuration()) {
22665      composeDuration(t, "SpecimenCollectionComponent", "duration", element.getDuration(), -1);
22666    }
22667    if (element.hasQuantity()) {
22668      composeQuantity(t, "SpecimenCollectionComponent", "quantity", element.getQuantity(), -1);
22669    }
22670    if (element.hasMethod()) {
22671      composeCodeableConcept(t, "SpecimenCollectionComponent", "method", element.getMethod(), -1);
22672    }
22673    if (element.hasDevice()) {
22674      composeCodeableReference(t, "SpecimenCollectionComponent", "device", element.getDevice(), -1);
22675    }
22676    if (element.hasProcedure()) {
22677      composeReference(t, "SpecimenCollectionComponent", "procedure", element.getProcedure(), -1);
22678    }
22679    if (element.hasBodySite()) {
22680      composeCodeableReference(t, "SpecimenCollectionComponent", "bodySite", element.getBodySite(), -1);
22681    }
22682    if (element.hasFastingStatus()) {
22683      composeType(t, "SpecimenCollectionComponent", "fastingStatus", element.getFastingStatus(), -1);
22684    }
22685  }
22686
22687  protected void composeSpecimenProcessingComponent(Complex parent, String parentType, String name, Specimen.SpecimenProcessingComponent element, int index) {
22688    if (element == null) 
22689      return;
22690    Complex t;
22691    if (Utilities.noString(parentType))
22692      t = parent;
22693    else {
22694      t = parent.predicate("fhir:"+parentType+'.'+name);
22695    }
22696    composeBackboneElement(t, "processing", name, element, index);
22697    if (element.hasDescriptionElement()) {
22698      composeString(t, "SpecimenProcessingComponent", "description", element.getDescriptionElement(), -1);
22699    }
22700    if (element.hasMethod()) {
22701      composeCodeableConcept(t, "SpecimenProcessingComponent", "method", element.getMethod(), -1);
22702    }
22703    for (int i = 0; i < element.getAdditive().size(); i++) {
22704      composeReference(t, "SpecimenProcessingComponent", "additive", element.getAdditive().get(i), i);
22705    }
22706    if (element.hasTime()) {
22707      composeType(t, "SpecimenProcessingComponent", "time", element.getTime(), -1);
22708    }
22709  }
22710
22711  protected void composeSpecimenContainerComponent(Complex parent, String parentType, String name, Specimen.SpecimenContainerComponent element, int index) {
22712    if (element == null) 
22713      return;
22714    Complex t;
22715    if (Utilities.noString(parentType))
22716      t = parent;
22717    else {
22718      t = parent.predicate("fhir:"+parentType+'.'+name);
22719    }
22720    composeBackboneElement(t, "container", name, element, index);
22721    if (element.hasDevice()) {
22722      composeReference(t, "SpecimenContainerComponent", "device", element.getDevice(), -1);
22723    }
22724    if (element.hasLocation()) {
22725      composeReference(t, "SpecimenContainerComponent", "location", element.getLocation(), -1);
22726    }
22727    if (element.hasSpecimenQuantity()) {
22728      composeQuantity(t, "SpecimenContainerComponent", "specimenQuantity", element.getSpecimenQuantity(), -1);
22729    }
22730  }
22731
22732  protected void composeSpecimenDefinition(Complex parent, String parentType, String name, SpecimenDefinition element, int index) {
22733    if (element == null) 
22734      return;
22735    Complex t;
22736    if (Utilities.noString(parentType))
22737      t = parent;
22738    else {
22739      t = parent.predicate("fhir:"+parentType+'.'+name);
22740    }
22741    composeDomainResource(t, "SpecimenDefinition", name, element, index);
22742    if (element.hasUrlElement()) {
22743      composeUri(t, "SpecimenDefinition", "url", element.getUrlElement(), -1);
22744    }
22745    if (element.hasIdentifier()) {
22746      composeIdentifier(t, "SpecimenDefinition", "identifier", element.getIdentifier(), -1);
22747    }
22748    if (element.hasVersionElement()) {
22749      composeString(t, "SpecimenDefinition", "version", element.getVersionElement(), -1);
22750    }
22751    if (element.hasTitleElement()) {
22752      composeString(t, "SpecimenDefinition", "title", element.getTitleElement(), -1);
22753    }
22754    for (int i = 0; i < element.getDerivedFromCanonical().size(); i++) {
22755      composeCanonical(t, "SpecimenDefinition", "derivedFromCanonical", element.getDerivedFromCanonical().get(i), i);
22756    }
22757    for (int i = 0; i < element.getDerivedFromUri().size(); i++) {
22758      composeUri(t, "SpecimenDefinition", "derivedFromUri", element.getDerivedFromUri().get(i), i);
22759    }
22760    if (element.hasStatusElement()) {
22761      composeEnum(t, "SpecimenDefinition", "status", element.getStatusElement(), -1);
22762    }
22763    if (element.hasExperimentalElement()) {
22764      composeBoolean(t, "SpecimenDefinition", "experimental", element.getExperimentalElement(), -1);
22765    }
22766    if (element.hasSubject()) {
22767      composeType(t, "SpecimenDefinition", "subject", element.getSubject(), -1);
22768    }
22769    if (element.hasDateElement()) {
22770      composeDateTime(t, "SpecimenDefinition", "date", element.getDateElement(), -1);
22771    }
22772    if (element.hasPublisherElement()) {
22773      composeString(t, "SpecimenDefinition", "publisher", element.getPublisherElement(), -1);
22774    }
22775    for (int i = 0; i < element.getContact().size(); i++) {
22776      composeContactDetail(t, "SpecimenDefinition", "contact", element.getContact().get(i), i);
22777    }
22778    if (element.hasDescriptionElement()) {
22779      composeMarkdown(t, "SpecimenDefinition", "description", element.getDescriptionElement(), -1);
22780    }
22781    for (int i = 0; i < element.getUseContext().size(); i++) {
22782      composeUsageContext(t, "SpecimenDefinition", "useContext", element.getUseContext().get(i), i);
22783    }
22784    for (int i = 0; i < element.getJurisdiction().size(); i++) {
22785      composeCodeableConcept(t, "SpecimenDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
22786    }
22787    if (element.hasPurposeElement()) {
22788      composeMarkdown(t, "SpecimenDefinition", "purpose", element.getPurposeElement(), -1);
22789    }
22790    if (element.hasCopyrightElement()) {
22791      composeMarkdown(t, "SpecimenDefinition", "copyright", element.getCopyrightElement(), -1);
22792    }
22793    if (element.hasApprovalDateElement()) {
22794      composeDate(t, "SpecimenDefinition", "approvalDate", element.getApprovalDateElement(), -1);
22795    }
22796    if (element.hasLastReviewDateElement()) {
22797      composeDate(t, "SpecimenDefinition", "lastReviewDate", element.getLastReviewDateElement(), -1);
22798    }
22799    if (element.hasEffectivePeriod()) {
22800      composePeriod(t, "SpecimenDefinition", "effectivePeriod", element.getEffectivePeriod(), -1);
22801    }
22802    if (element.hasTypeCollected()) {
22803      composeCodeableConcept(t, "SpecimenDefinition", "typeCollected", element.getTypeCollected(), -1);
22804    }
22805    for (int i = 0; i < element.getPatientPreparation().size(); i++) {
22806      composeCodeableConcept(t, "SpecimenDefinition", "patientPreparation", element.getPatientPreparation().get(i), i);
22807    }
22808    if (element.hasTimeAspectElement()) {
22809      composeString(t, "SpecimenDefinition", "timeAspect", element.getTimeAspectElement(), -1);
22810    }
22811    for (int i = 0; i < element.getCollection().size(); i++) {
22812      composeCodeableConcept(t, "SpecimenDefinition", "collection", element.getCollection().get(i), i);
22813    }
22814    for (int i = 0; i < element.getTypeTested().size(); i++) {
22815      composeSpecimenDefinitionTypeTestedComponent(t, "SpecimenDefinition", "typeTested", element.getTypeTested().get(i), i);
22816    }
22817  }
22818
22819  protected void composeSpecimenDefinitionTypeTestedComponent(Complex parent, String parentType, String name, SpecimenDefinition.SpecimenDefinitionTypeTestedComponent element, int index) {
22820    if (element == null) 
22821      return;
22822    Complex t;
22823    if (Utilities.noString(parentType))
22824      t = parent;
22825    else {
22826      t = parent.predicate("fhir:"+parentType+'.'+name);
22827    }
22828    composeBackboneElement(t, "typeTested", name, element, index);
22829    if (element.hasIsDerivedElement()) {
22830      composeBoolean(t, "SpecimenDefinitionTypeTestedComponent", "isDerived", element.getIsDerivedElement(), -1);
22831    }
22832    if (element.hasType()) {
22833      composeCodeableConcept(t, "SpecimenDefinitionTypeTestedComponent", "type", element.getType(), -1);
22834    }
22835    if (element.hasPreferenceElement()) {
22836      composeEnum(t, "SpecimenDefinitionTypeTestedComponent", "preference", element.getPreferenceElement(), -1);
22837    }
22838    if (element.hasContainer()) {
22839      composeSpecimenDefinitionTypeTestedContainerComponent(t, "SpecimenDefinitionTypeTestedComponent", "container", element.getContainer(), -1);
22840    }
22841    if (element.hasRequirementElement()) {
22842      composeString(t, "SpecimenDefinitionTypeTestedComponent", "requirement", element.getRequirementElement(), -1);
22843    }
22844    if (element.hasRetentionTime()) {
22845      composeDuration(t, "SpecimenDefinitionTypeTestedComponent", "retentionTime", element.getRetentionTime(), -1);
22846    }
22847    if (element.hasSingleUseElement()) {
22848      composeBoolean(t, "SpecimenDefinitionTypeTestedComponent", "singleUse", element.getSingleUseElement(), -1);
22849    }
22850    for (int i = 0; i < element.getRejectionCriterion().size(); i++) {
22851      composeCodeableConcept(t, "SpecimenDefinitionTypeTestedComponent", "rejectionCriterion", element.getRejectionCriterion().get(i), i);
22852    }
22853    for (int i = 0; i < element.getHandling().size(); i++) {
22854      composeSpecimenDefinitionTypeTestedHandlingComponent(t, "SpecimenDefinitionTypeTestedComponent", "handling", element.getHandling().get(i), i);
22855    }
22856    for (int i = 0; i < element.getTestingDestination().size(); i++) {
22857      composeCodeableConcept(t, "SpecimenDefinitionTypeTestedComponent", "testingDestination", element.getTestingDestination().get(i), i);
22858    }
22859  }
22860
22861  protected void composeSpecimenDefinitionTypeTestedContainerComponent(Complex parent, String parentType, String name, SpecimenDefinition.SpecimenDefinitionTypeTestedContainerComponent element, int index) {
22862    if (element == null) 
22863      return;
22864    Complex t;
22865    if (Utilities.noString(parentType))
22866      t = parent;
22867    else {
22868      t = parent.predicate("fhir:"+parentType+'.'+name);
22869    }
22870    composeBackboneElement(t, "container", name, element, index);
22871    if (element.hasMaterial()) {
22872      composeCodeableConcept(t, "SpecimenDefinitionTypeTestedContainerComponent", "material", element.getMaterial(), -1);
22873    }
22874    if (element.hasType()) {
22875      composeCodeableConcept(t, "SpecimenDefinitionTypeTestedContainerComponent", "type", element.getType(), -1);
22876    }
22877    if (element.hasCap()) {
22878      composeCodeableConcept(t, "SpecimenDefinitionTypeTestedContainerComponent", "cap", element.getCap(), -1);
22879    }
22880    if (element.hasDescriptionElement()) {
22881      composeString(t, "SpecimenDefinitionTypeTestedContainerComponent", "description", element.getDescriptionElement(), -1);
22882    }
22883    if (element.hasCapacity()) {
22884      composeQuantity(t, "SpecimenDefinitionTypeTestedContainerComponent", "capacity", element.getCapacity(), -1);
22885    }
22886    if (element.hasMinimumVolume()) {
22887      composeType(t, "SpecimenDefinitionTypeTestedContainerComponent", "minimumVolume", element.getMinimumVolume(), -1);
22888    }
22889    for (int i = 0; i < element.getAdditive().size(); i++) {
22890      composeSpecimenDefinitionTypeTestedContainerAdditiveComponent(t, "SpecimenDefinitionTypeTestedContainerComponent", "additive", element.getAdditive().get(i), i);
22891    }
22892    if (element.hasPreparationElement()) {
22893      composeString(t, "SpecimenDefinitionTypeTestedContainerComponent", "preparation", element.getPreparationElement(), -1);
22894    }
22895  }
22896
22897  protected void composeSpecimenDefinitionTypeTestedContainerAdditiveComponent(Complex parent, String parentType, String name, SpecimenDefinition.SpecimenDefinitionTypeTestedContainerAdditiveComponent element, int index) {
22898    if (element == null) 
22899      return;
22900    Complex t;
22901    if (Utilities.noString(parentType))
22902      t = parent;
22903    else {
22904      t = parent.predicate("fhir:"+parentType+'.'+name);
22905    }
22906    composeBackboneElement(t, "additive", name, element, index);
22907    if (element.hasAdditive()) {
22908      composeType(t, "SpecimenDefinitionTypeTestedContainerAdditiveComponent", "additive", element.getAdditive(), -1);
22909    }
22910  }
22911
22912  protected void composeSpecimenDefinitionTypeTestedHandlingComponent(Complex parent, String parentType, String name, SpecimenDefinition.SpecimenDefinitionTypeTestedHandlingComponent element, int index) {
22913    if (element == null) 
22914      return;
22915    Complex t;
22916    if (Utilities.noString(parentType))
22917      t = parent;
22918    else {
22919      t = parent.predicate("fhir:"+parentType+'.'+name);
22920    }
22921    composeBackboneElement(t, "handling", name, element, index);
22922    if (element.hasTemperatureQualifier()) {
22923      composeCodeableConcept(t, "SpecimenDefinitionTypeTestedHandlingComponent", "temperatureQualifier", element.getTemperatureQualifier(), -1);
22924    }
22925    if (element.hasTemperatureRange()) {
22926      composeRange(t, "SpecimenDefinitionTypeTestedHandlingComponent", "temperatureRange", element.getTemperatureRange(), -1);
22927    }
22928    if (element.hasMaxDuration()) {
22929      composeDuration(t, "SpecimenDefinitionTypeTestedHandlingComponent", "maxDuration", element.getMaxDuration(), -1);
22930    }
22931    if (element.hasInstructionElement()) {
22932      composeString(t, "SpecimenDefinitionTypeTestedHandlingComponent", "instruction", element.getInstructionElement(), -1);
22933    }
22934  }
22935
22936  protected void composeStructureDefinition(Complex parent, String parentType, String name, StructureDefinition element, int index) {
22937    if (element == null) 
22938      return;
22939    Complex t;
22940    if (Utilities.noString(parentType))
22941      t = parent;
22942    else {
22943      t = parent.predicate("fhir:"+parentType+'.'+name);
22944    }
22945    composeCanonicalResource(t, "StructureDefinition", name, element, index);
22946    if (element.hasUrlElement()) {
22947      composeUri(t, "StructureDefinition", "url", element.getUrlElement(), -1);
22948    }
22949    for (int i = 0; i < element.getIdentifier().size(); i++) {
22950      composeIdentifier(t, "StructureDefinition", "identifier", element.getIdentifier().get(i), i);
22951    }
22952    if (element.hasVersionElement()) {
22953      composeString(t, "StructureDefinition", "version", element.getVersionElement(), -1);
22954    }
22955    if (element.hasVersionAlgorithm()) {
22956      composeType(t, "StructureDefinition", "versionAlgorithm", element.getVersionAlgorithm(), -1);
22957    }
22958    if (element.hasNameElement()) {
22959      composeString(t, "StructureDefinition", "name", element.getNameElement(), -1);
22960    }
22961    if (element.hasTitleElement()) {
22962      composeString(t, "StructureDefinition", "title", element.getTitleElement(), -1);
22963    }
22964    if (element.hasStatusElement()) {
22965      composeEnum(t, "StructureDefinition", "status", element.getStatusElement(), -1);
22966    }
22967    if (element.hasExperimentalElement()) {
22968      composeBoolean(t, "StructureDefinition", "experimental", element.getExperimentalElement(), -1);
22969    }
22970    if (element.hasDateElement()) {
22971      composeDateTime(t, "StructureDefinition", "date", element.getDateElement(), -1);
22972    }
22973    if (element.hasPublisherElement()) {
22974      composeString(t, "StructureDefinition", "publisher", element.getPublisherElement(), -1);
22975    }
22976    for (int i = 0; i < element.getContact().size(); i++) {
22977      composeContactDetail(t, "StructureDefinition", "contact", element.getContact().get(i), i);
22978    }
22979    if (element.hasDescriptionElement()) {
22980      composeMarkdown(t, "StructureDefinition", "description", element.getDescriptionElement(), -1);
22981    }
22982    for (int i = 0; i < element.getUseContext().size(); i++) {
22983      composeUsageContext(t, "StructureDefinition", "useContext", element.getUseContext().get(i), i);
22984    }
22985    for (int i = 0; i < element.getJurisdiction().size(); i++) {
22986      composeCodeableConcept(t, "StructureDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
22987    }
22988    if (element.hasPurposeElement()) {
22989      composeMarkdown(t, "StructureDefinition", "purpose", element.getPurposeElement(), -1);
22990    }
22991    if (element.hasCopyrightElement()) {
22992      composeMarkdown(t, "StructureDefinition", "copyright", element.getCopyrightElement(), -1);
22993    }
22994    if (element.hasCopyrightLabelElement()) {
22995      composeString(t, "StructureDefinition", "copyrightLabel", element.getCopyrightLabelElement(), -1);
22996    }
22997    for (int i = 0; i < element.getKeyword().size(); i++) {
22998      composeCoding(t, "StructureDefinition", "keyword", element.getKeyword().get(i), i);
22999    }
23000    if (element.hasFhirVersionElement()) {
23001      composeEnum(t, "StructureDefinition", "fhirVersion", element.getFhirVersionElement(), -1);
23002    }
23003    for (int i = 0; i < element.getMapping().size(); i++) {
23004      composeStructureDefinitionMappingComponent(t, "StructureDefinition", "mapping", element.getMapping().get(i), i);
23005    }
23006    if (element.hasKindElement()) {
23007      composeEnum(t, "StructureDefinition", "kind", element.getKindElement(), -1);
23008    }
23009    if (element.hasAbstractElement()) {
23010      composeBoolean(t, "StructureDefinition", "abstract", element.getAbstractElement(), -1);
23011    }
23012    for (int i = 0; i < element.getContext().size(); i++) {
23013      composeStructureDefinitionContextComponent(t, "StructureDefinition", "context", element.getContext().get(i), i);
23014    }
23015    for (int i = 0; i < element.getContextInvariant().size(); i++) {
23016      composeString(t, "StructureDefinition", "contextInvariant", element.getContextInvariant().get(i), i);
23017    }
23018    if (element.hasTypeElement()) {
23019      composeUri(t, "StructureDefinition", "type", element.getTypeElement(), -1);
23020    }
23021    if (element.hasBaseDefinitionElement()) {
23022      composeCanonical(t, "StructureDefinition", "baseDefinition", element.getBaseDefinitionElement(), -1);
23023    }
23024    if (element.hasDerivationElement()) {
23025      composeEnum(t, "StructureDefinition", "derivation", element.getDerivationElement(), -1);
23026    }
23027    if (element.hasSnapshot()) {
23028      composeStructureDefinitionSnapshotComponent(t, "StructureDefinition", "snapshot", element.getSnapshot(), -1);
23029    }
23030    if (element.hasDifferential()) {
23031      composeStructureDefinitionDifferentialComponent(t, "StructureDefinition", "differential", element.getDifferential(), -1);
23032    }
23033  }
23034
23035  protected void composeStructureDefinitionMappingComponent(Complex parent, String parentType, String name, StructureDefinition.StructureDefinitionMappingComponent element, int index) {
23036    if (element == null) 
23037      return;
23038    Complex t;
23039    if (Utilities.noString(parentType))
23040      t = parent;
23041    else {
23042      t = parent.predicate("fhir:"+parentType+'.'+name);
23043    }
23044    composeBackboneElement(t, "mapping", name, element, index);
23045    if (element.hasIdentityElement()) {
23046      composeId(t, "StructureDefinitionMappingComponent", "identity", element.getIdentityElement(), -1);
23047    }
23048    if (element.hasUriElement()) {
23049      composeUri(t, "StructureDefinitionMappingComponent", "uri", element.getUriElement(), -1);
23050    }
23051    if (element.hasNameElement()) {
23052      composeString(t, "StructureDefinitionMappingComponent", "name", element.getNameElement(), -1);
23053    }
23054    if (element.hasCommentElement()) {
23055      composeString(t, "StructureDefinitionMappingComponent", "comment", element.getCommentElement(), -1);
23056    }
23057  }
23058
23059  protected void composeStructureDefinitionContextComponent(Complex parent, String parentType, String name, StructureDefinition.StructureDefinitionContextComponent element, int index) {
23060    if (element == null) 
23061      return;
23062    Complex t;
23063    if (Utilities.noString(parentType))
23064      t = parent;
23065    else {
23066      t = parent.predicate("fhir:"+parentType+'.'+name);
23067    }
23068    composeBackboneElement(t, "context", name, element, index);
23069    if (element.hasTypeElement()) {
23070      composeEnum(t, "StructureDefinitionContextComponent", "type", element.getTypeElement(), -1);
23071    }
23072    if (element.hasExpressionElement()) {
23073      composeString(t, "StructureDefinitionContextComponent", "expression", element.getExpressionElement(), -1);
23074    }
23075  }
23076
23077  protected void composeStructureDefinitionSnapshotComponent(Complex parent, String parentType, String name, StructureDefinition.StructureDefinitionSnapshotComponent element, int index) {
23078    if (element == null) 
23079      return;
23080    Complex t;
23081    if (Utilities.noString(parentType))
23082      t = parent;
23083    else {
23084      t = parent.predicate("fhir:"+parentType+'.'+name);
23085    }
23086    composeBackboneElement(t, "snapshot", name, element, index);
23087    for (int i = 0; i < element.getElement().size(); i++) {
23088      composeElementDefinition(t, "StructureDefinitionSnapshotComponent", "element", element.getElement().get(i), i);
23089    }
23090  }
23091
23092  protected void composeStructureDefinitionDifferentialComponent(Complex parent, String parentType, String name, StructureDefinition.StructureDefinitionDifferentialComponent element, int index) {
23093    if (element == null) 
23094      return;
23095    Complex t;
23096    if (Utilities.noString(parentType))
23097      t = parent;
23098    else {
23099      t = parent.predicate("fhir:"+parentType+'.'+name);
23100    }
23101    composeBackboneElement(t, "differential", name, element, index);
23102    for (int i = 0; i < element.getElement().size(); i++) {
23103      composeElementDefinition(t, "StructureDefinitionDifferentialComponent", "element", element.getElement().get(i), i);
23104    }
23105  }
23106
23107  protected void composeStructureMap(Complex parent, String parentType, String name, StructureMap element, int index) {
23108    if (element == null) 
23109      return;
23110    Complex t;
23111    if (Utilities.noString(parentType))
23112      t = parent;
23113    else {
23114      t = parent.predicate("fhir:"+parentType+'.'+name);
23115    }
23116    composeCanonicalResource(t, "StructureMap", name, element, index);
23117    if (element.hasUrlElement()) {
23118      composeUri(t, "StructureMap", "url", element.getUrlElement(), -1);
23119    }
23120    for (int i = 0; i < element.getIdentifier().size(); i++) {
23121      composeIdentifier(t, "StructureMap", "identifier", element.getIdentifier().get(i), i);
23122    }
23123    if (element.hasVersionElement()) {
23124      composeString(t, "StructureMap", "version", element.getVersionElement(), -1);
23125    }
23126    if (element.hasVersionAlgorithm()) {
23127      composeType(t, "StructureMap", "versionAlgorithm", element.getVersionAlgorithm(), -1);
23128    }
23129    if (element.hasNameElement()) {
23130      composeString(t, "StructureMap", "name", element.getNameElement(), -1);
23131    }
23132    if (element.hasTitleElement()) {
23133      composeString(t, "StructureMap", "title", element.getTitleElement(), -1);
23134    }
23135    if (element.hasStatusElement()) {
23136      composeEnum(t, "StructureMap", "status", element.getStatusElement(), -1);
23137    }
23138    if (element.hasExperimentalElement()) {
23139      composeBoolean(t, "StructureMap", "experimental", element.getExperimentalElement(), -1);
23140    }
23141    if (element.hasDateElement()) {
23142      composeDateTime(t, "StructureMap", "date", element.getDateElement(), -1);
23143    }
23144    if (element.hasPublisherElement()) {
23145      composeString(t, "StructureMap", "publisher", element.getPublisherElement(), -1);
23146    }
23147    for (int i = 0; i < element.getContact().size(); i++) {
23148      composeContactDetail(t, "StructureMap", "contact", element.getContact().get(i), i);
23149    }
23150    if (element.hasDescriptionElement()) {
23151      composeMarkdown(t, "StructureMap", "description", element.getDescriptionElement(), -1);
23152    }
23153    for (int i = 0; i < element.getUseContext().size(); i++) {
23154      composeUsageContext(t, "StructureMap", "useContext", element.getUseContext().get(i), i);
23155    }
23156    for (int i = 0; i < element.getJurisdiction().size(); i++) {
23157      composeCodeableConcept(t, "StructureMap", "jurisdiction", element.getJurisdiction().get(i), i);
23158    }
23159    if (element.hasPurposeElement()) {
23160      composeMarkdown(t, "StructureMap", "purpose", element.getPurposeElement(), -1);
23161    }
23162    if (element.hasCopyrightElement()) {
23163      composeMarkdown(t, "StructureMap", "copyright", element.getCopyrightElement(), -1);
23164    }
23165    if (element.hasCopyrightLabelElement()) {
23166      composeString(t, "StructureMap", "copyrightLabel", element.getCopyrightLabelElement(), -1);
23167    }
23168    for (int i = 0; i < element.getStructure().size(); i++) {
23169      composeStructureMapStructureComponent(t, "StructureMap", "structure", element.getStructure().get(i), i);
23170    }
23171    for (int i = 0; i < element.getImport().size(); i++) {
23172      composeCanonical(t, "StructureMap", "import", element.getImport().get(i), i);
23173    }
23174    for (int i = 0; i < element.getGroup().size(); i++) {
23175      composeStructureMapGroupComponent(t, "StructureMap", "group", element.getGroup().get(i), i);
23176    }
23177  }
23178
23179  protected void composeStructureMapStructureComponent(Complex parent, String parentType, String name, StructureMap.StructureMapStructureComponent element, int index) {
23180    if (element == null) 
23181      return;
23182    Complex t;
23183    if (Utilities.noString(parentType))
23184      t = parent;
23185    else {
23186      t = parent.predicate("fhir:"+parentType+'.'+name);
23187    }
23188    composeBackboneElement(t, "structure", name, element, index);
23189    if (element.hasUrlElement()) {
23190      composeCanonical(t, "StructureMapStructureComponent", "url", element.getUrlElement(), -1);
23191    }
23192    if (element.hasModeElement()) {
23193      composeEnum(t, "StructureMapStructureComponent", "mode", element.getModeElement(), -1);
23194    }
23195    if (element.hasAliasElement()) {
23196      composeString(t, "StructureMapStructureComponent", "alias", element.getAliasElement(), -1);
23197    }
23198    if (element.hasDocumentationElement()) {
23199      composeString(t, "StructureMapStructureComponent", "documentation", element.getDocumentationElement(), -1);
23200    }
23201  }
23202
23203  protected void composeStructureMapGroupComponent(Complex parent, String parentType, String name, StructureMap.StructureMapGroupComponent element, int index) {
23204    if (element == null) 
23205      return;
23206    Complex t;
23207    if (Utilities.noString(parentType))
23208      t = parent;
23209    else {
23210      t = parent.predicate("fhir:"+parentType+'.'+name);
23211    }
23212    composeBackboneElement(t, "group", name, element, index);
23213    if (element.hasNameElement()) {
23214      composeId(t, "StructureMapGroupComponent", "name", element.getNameElement(), -1);
23215    }
23216    if (element.hasExtendsElement()) {
23217      composeId(t, "StructureMapGroupComponent", "extends", element.getExtendsElement(), -1);
23218    }
23219    if (element.hasTypeModeElement()) {
23220      composeEnum(t, "StructureMapGroupComponent", "typeMode", element.getTypeModeElement(), -1);
23221    }
23222    if (element.hasDocumentationElement()) {
23223      composeString(t, "StructureMapGroupComponent", "documentation", element.getDocumentationElement(), -1);
23224    }
23225    for (int i = 0; i < element.getInput().size(); i++) {
23226      composeStructureMapGroupInputComponent(t, "StructureMapGroupComponent", "input", element.getInput().get(i), i);
23227    }
23228    for (int i = 0; i < element.getRule().size(); i++) {
23229      composeStructureMapGroupRuleComponent(t, "StructureMapGroupComponent", "rule", element.getRule().get(i), i);
23230    }
23231  }
23232
23233  protected void composeStructureMapGroupInputComponent(Complex parent, String parentType, String name, StructureMap.StructureMapGroupInputComponent element, int index) {
23234    if (element == null) 
23235      return;
23236    Complex t;
23237    if (Utilities.noString(parentType))
23238      t = parent;
23239    else {
23240      t = parent.predicate("fhir:"+parentType+'.'+name);
23241    }
23242    composeBackboneElement(t, "input", name, element, index);
23243    if (element.hasNameElement()) {
23244      composeId(t, "StructureMapGroupInputComponent", "name", element.getNameElement(), -1);
23245    }
23246    if (element.hasTypeElement()) {
23247      composeString(t, "StructureMapGroupInputComponent", "type", element.getTypeElement(), -1);
23248    }
23249    if (element.hasModeElement()) {
23250      composeEnum(t, "StructureMapGroupInputComponent", "mode", element.getModeElement(), -1);
23251    }
23252    if (element.hasDocumentationElement()) {
23253      composeString(t, "StructureMapGroupInputComponent", "documentation", element.getDocumentationElement(), -1);
23254    }
23255  }
23256
23257  protected void composeStructureMapGroupRuleComponent(Complex parent, String parentType, String name, StructureMap.StructureMapGroupRuleComponent element, int index) {
23258    if (element == null) 
23259      return;
23260    Complex t;
23261    if (Utilities.noString(parentType))
23262      t = parent;
23263    else {
23264      t = parent.predicate("fhir:"+parentType+'.'+name);
23265    }
23266    composeBackboneElement(t, "rule", name, element, index);
23267    if (element.hasNameElement()) {
23268      composeId(t, "StructureMapGroupRuleComponent", "name", element.getNameElement(), -1);
23269    }
23270    for (int i = 0; i < element.getSource().size(); i++) {
23271      composeStructureMapGroupRuleSourceComponent(t, "StructureMapGroupRuleComponent", "source", element.getSource().get(i), i);
23272    }
23273    for (int i = 0; i < element.getTarget().size(); i++) {
23274      composeStructureMapGroupRuleTargetComponent(t, "StructureMapGroupRuleComponent", "target", element.getTarget().get(i), i);
23275    }
23276    for (int i = 0; i < element.getRule().size(); i++) {
23277      composeStructureMapGroupRuleComponent(t, "StructureMapGroupRuleComponent", "rule", element.getRule().get(i), i);
23278    }
23279    for (int i = 0; i < element.getDependent().size(); i++) {
23280      composeStructureMapGroupRuleDependentComponent(t, "StructureMapGroupRuleComponent", "dependent", element.getDependent().get(i), i);
23281    }
23282    if (element.hasDocumentationElement()) {
23283      composeString(t, "StructureMapGroupRuleComponent", "documentation", element.getDocumentationElement(), -1);
23284    }
23285  }
23286
23287  protected void composeStructureMapGroupRuleSourceComponent(Complex parent, String parentType, String name, StructureMap.StructureMapGroupRuleSourceComponent element, int index) {
23288    if (element == null) 
23289      return;
23290    Complex t;
23291    if (Utilities.noString(parentType))
23292      t = parent;
23293    else {
23294      t = parent.predicate("fhir:"+parentType+'.'+name);
23295    }
23296    composeBackboneElement(t, "source", name, element, index);
23297    if (element.hasContextElement()) {
23298      composeId(t, "StructureMapGroupRuleSourceComponent", "context", element.getContextElement(), -1);
23299    }
23300    if (element.hasMinElement()) {
23301      composeInteger(t, "StructureMapGroupRuleSourceComponent", "min", element.getMinElement(), -1);
23302    }
23303    if (element.hasMaxElement()) {
23304      composeString(t, "StructureMapGroupRuleSourceComponent", "max", element.getMaxElement(), -1);
23305    }
23306    if (element.hasTypeElement()) {
23307      composeString(t, "StructureMapGroupRuleSourceComponent", "type", element.getTypeElement(), -1);
23308    }
23309    if (element.hasDefaultValueElement()) {
23310      composeString(t, "StructureMapGroupRuleSourceComponent", "defaultValue", element.getDefaultValueElement(), -1);
23311    }
23312    if (element.hasElementElement()) {
23313      composeString(t, "StructureMapGroupRuleSourceComponent", "element", element.getElementElement(), -1);
23314    }
23315    if (element.hasListModeElement()) {
23316      composeEnum(t, "StructureMapGroupRuleSourceComponent", "listMode", element.getListModeElement(), -1);
23317    }
23318    if (element.hasVariableElement()) {
23319      composeId(t, "StructureMapGroupRuleSourceComponent", "variable", element.getVariableElement(), -1);
23320    }
23321    if (element.hasConditionElement()) {
23322      composeString(t, "StructureMapGroupRuleSourceComponent", "condition", element.getConditionElement(), -1);
23323    }
23324    if (element.hasCheckElement()) {
23325      composeString(t, "StructureMapGroupRuleSourceComponent", "check", element.getCheckElement(), -1);
23326    }
23327    if (element.hasLogMessageElement()) {
23328      composeString(t, "StructureMapGroupRuleSourceComponent", "logMessage", element.getLogMessageElement(), -1);
23329    }
23330  }
23331
23332  protected void composeStructureMapGroupRuleTargetComponent(Complex parent, String parentType, String name, StructureMap.StructureMapGroupRuleTargetComponent element, int index) {
23333    if (element == null) 
23334      return;
23335    Complex t;
23336    if (Utilities.noString(parentType))
23337      t = parent;
23338    else {
23339      t = parent.predicate("fhir:"+parentType+'.'+name);
23340    }
23341    composeBackboneElement(t, "target", name, element, index);
23342    if (element.hasContextElement()) {
23343      composeId(t, "StructureMapGroupRuleTargetComponent", "context", element.getContextElement(), -1);
23344    }
23345    if (element.hasElementElement()) {
23346      composeString(t, "StructureMapGroupRuleTargetComponent", "element", element.getElementElement(), -1);
23347    }
23348    if (element.hasVariableElement()) {
23349      composeId(t, "StructureMapGroupRuleTargetComponent", "variable", element.getVariableElement(), -1);
23350    }
23351    for (int i = 0; i < element.getListMode().size(); i++) {
23352      composeEnum(t, "StructureMapGroupRuleTargetComponent", "listMode", element.getListMode().get(i), i);
23353    }
23354    if (element.hasListRuleIdElement()) {
23355      composeId(t, "StructureMapGroupRuleTargetComponent", "listRuleId", element.getListRuleIdElement(), -1);
23356    }
23357    if (element.hasTransformElement()) {
23358      composeEnum(t, "StructureMapGroupRuleTargetComponent", "transform", element.getTransformElement(), -1);
23359    }
23360    for (int i = 0; i < element.getParameter().size(); i++) {
23361      composeStructureMapGroupRuleTargetParameterComponent(t, "StructureMapGroupRuleTargetComponent", "parameter", element.getParameter().get(i), i);
23362    }
23363  }
23364
23365  protected void composeStructureMapGroupRuleTargetParameterComponent(Complex parent, String parentType, String name, StructureMap.StructureMapGroupRuleTargetParameterComponent element, int index) {
23366    if (element == null) 
23367      return;
23368    Complex t;
23369    if (Utilities.noString(parentType))
23370      t = parent;
23371    else {
23372      t = parent.predicate("fhir:"+parentType+'.'+name);
23373    }
23374    composeBackboneElement(t, "parameter", name, element, index);
23375    if (element.hasValue()) {
23376      composeType(t, "StructureMapGroupRuleTargetParameterComponent", "value", element.getValue(), -1);
23377    }
23378  }
23379
23380  protected void composeStructureMapGroupRuleDependentComponent(Complex parent, String parentType, String name, StructureMap.StructureMapGroupRuleDependentComponent element, int index) {
23381    if (element == null) 
23382      return;
23383    Complex t;
23384    if (Utilities.noString(parentType))
23385      t = parent;
23386    else {
23387      t = parent.predicate("fhir:"+parentType+'.'+name);
23388    }
23389    composeBackboneElement(t, "dependent", name, element, index);
23390    if (element.hasNameElement()) {
23391      composeId(t, "StructureMapGroupRuleDependentComponent", "name", element.getNameElement(), -1);
23392    }
23393    for (int i = 0; i < element.getParameter().size(); i++) {
23394      composeStructureMapGroupRuleTargetParameterComponent(t, "StructureMapGroupRuleDependentComponent", "parameter", element.getParameter().get(i), i);
23395    }
23396  }
23397
23398  protected void composeSubscription(Complex parent, String parentType, String name, Subscription element, int index) {
23399    if (element == null) 
23400      return;
23401    Complex t;
23402    if (Utilities.noString(parentType))
23403      t = parent;
23404    else {
23405      t = parent.predicate("fhir:"+parentType+'.'+name);
23406    }
23407    composeDomainResource(t, "Subscription", name, element, index);
23408    for (int i = 0; i < element.getIdentifier().size(); i++) {
23409      composeIdentifier(t, "Subscription", "identifier", element.getIdentifier().get(i), i);
23410    }
23411    if (element.hasNameElement()) {
23412      composeString(t, "Subscription", "name", element.getNameElement(), -1);
23413    }
23414    if (element.hasStatusElement()) {
23415      composeEnum(t, "Subscription", "status", element.getStatusElement(), -1);
23416    }
23417    if (element.hasTopicElement()) {
23418      composeCanonical(t, "Subscription", "topic", element.getTopicElement(), -1);
23419    }
23420    for (int i = 0; i < element.getContact().size(); i++) {
23421      composeContactPoint(t, "Subscription", "contact", element.getContact().get(i), i);
23422    }
23423    if (element.hasEndElement()) {
23424      composeInstant(t, "Subscription", "end", element.getEndElement(), -1);
23425    }
23426    if (element.hasManagingEntity()) {
23427      composeReference(t, "Subscription", "managingEntity", element.getManagingEntity(), -1);
23428    }
23429    if (element.hasReasonElement()) {
23430      composeString(t, "Subscription", "reason", element.getReasonElement(), -1);
23431    }
23432    for (int i = 0; i < element.getFilterBy().size(); i++) {
23433      composeSubscriptionFilterByComponent(t, "Subscription", "filterBy", element.getFilterBy().get(i), i);
23434    }
23435    if (element.hasChannelType()) {
23436      composeCoding(t, "Subscription", "channelType", element.getChannelType(), -1);
23437    }
23438    if (element.hasEndpointElement()) {
23439      composeUrl(t, "Subscription", "endpoint", element.getEndpointElement(), -1);
23440    }
23441    for (int i = 0; i < element.getHeader().size(); i++) {
23442      composeString(t, "Subscription", "header", element.getHeader().get(i), i);
23443    }
23444    if (element.hasHeartbeatPeriodElement()) {
23445      composeUnsignedInt(t, "Subscription", "heartbeatPeriod", element.getHeartbeatPeriodElement(), -1);
23446    }
23447    if (element.hasTimeoutElement()) {
23448      composeUnsignedInt(t, "Subscription", "timeout", element.getTimeoutElement(), -1);
23449    }
23450    if (element.hasContentTypeElement()) {
23451      composeCode(t, "Subscription", "contentType", element.getContentTypeElement(), -1);
23452    }
23453    if (element.hasContentElement()) {
23454      composeEnum(t, "Subscription", "content", element.getContentElement(), -1);
23455    }
23456    if (element.hasMaxCountElement()) {
23457      composePositiveInt(t, "Subscription", "maxCount", element.getMaxCountElement(), -1);
23458    }
23459  }
23460
23461  protected void composeSubscriptionFilterByComponent(Complex parent, String parentType, String name, Subscription.SubscriptionFilterByComponent element, int index) {
23462    if (element == null) 
23463      return;
23464    Complex t;
23465    if (Utilities.noString(parentType))
23466      t = parent;
23467    else {
23468      t = parent.predicate("fhir:"+parentType+'.'+name);
23469    }
23470    composeBackboneElement(t, "filterBy", name, element, index);
23471    if (element.hasResourceTypeElement()) {
23472      composeUri(t, "SubscriptionFilterByComponent", "resourceType", element.getResourceTypeElement(), -1);
23473    }
23474    if (element.hasFilterParameterElement()) {
23475      composeString(t, "SubscriptionFilterByComponent", "filterParameter", element.getFilterParameterElement(), -1);
23476    }
23477    if (element.hasModifierElement()) {
23478      composeEnum(t, "SubscriptionFilterByComponent", "modifier", element.getModifierElement(), -1);
23479    }
23480    if (element.hasValueElement()) {
23481      composeString(t, "SubscriptionFilterByComponent", "value", element.getValueElement(), -1);
23482    }
23483  }
23484
23485  protected void composeSubscriptionStatus(Complex parent, String parentType, String name, SubscriptionStatus element, int index) {
23486    if (element == null) 
23487      return;
23488    Complex t;
23489    if (Utilities.noString(parentType))
23490      t = parent;
23491    else {
23492      t = parent.predicate("fhir:"+parentType+'.'+name);
23493    }
23494    composeDomainResource(t, "SubscriptionStatus", name, element, index);
23495    if (element.hasStatusElement()) {
23496      composeEnum(t, "SubscriptionStatus", "status", element.getStatusElement(), -1);
23497    }
23498    if (element.hasTypeElement()) {
23499      composeEnum(t, "SubscriptionStatus", "type", element.getTypeElement(), -1);
23500    }
23501    if (element.hasEventsSinceSubscriptionStartElement()) {
23502      composeInteger64(t, "SubscriptionStatus", "eventsSinceSubscriptionStart", element.getEventsSinceSubscriptionStartElement(), -1);
23503    }
23504    for (int i = 0; i < element.getNotificationEvent().size(); i++) {
23505      composeSubscriptionStatusNotificationEventComponent(t, "SubscriptionStatus", "notificationEvent", element.getNotificationEvent().get(i), i);
23506    }
23507    if (element.hasSubscription()) {
23508      composeReference(t, "SubscriptionStatus", "subscription", element.getSubscription(), -1);
23509    }
23510    if (element.hasTopicElement()) {
23511      composeCanonical(t, "SubscriptionStatus", "topic", element.getTopicElement(), -1);
23512    }
23513    for (int i = 0; i < element.getError().size(); i++) {
23514      composeCodeableConcept(t, "SubscriptionStatus", "error", element.getError().get(i), i);
23515    }
23516  }
23517
23518  protected void composeSubscriptionStatusNotificationEventComponent(Complex parent, String parentType, String name, SubscriptionStatus.SubscriptionStatusNotificationEventComponent element, int index) {
23519    if (element == null) 
23520      return;
23521    Complex t;
23522    if (Utilities.noString(parentType))
23523      t = parent;
23524    else {
23525      t = parent.predicate("fhir:"+parentType+'.'+name);
23526    }
23527    composeBackboneElement(t, "notificationEvent", name, element, index);
23528    if (element.hasEventNumberElement()) {
23529      composeInteger64(t, "SubscriptionStatusNotificationEventComponent", "eventNumber", element.getEventNumberElement(), -1);
23530    }
23531    if (element.hasTimestampElement()) {
23532      composeInstant(t, "SubscriptionStatusNotificationEventComponent", "timestamp", element.getTimestampElement(), -1);
23533    }
23534    if (element.hasFocus()) {
23535      composeReference(t, "SubscriptionStatusNotificationEventComponent", "focus", element.getFocus(), -1);
23536    }
23537    for (int i = 0; i < element.getAdditionalContext().size(); i++) {
23538      composeReference(t, "SubscriptionStatusNotificationEventComponent", "additionalContext", element.getAdditionalContext().get(i), i);
23539    }
23540  }
23541
23542  protected void composeSubscriptionTopic(Complex parent, String parentType, String name, SubscriptionTopic element, int index) {
23543    if (element == null) 
23544      return;
23545    Complex t;
23546    if (Utilities.noString(parentType))
23547      t = parent;
23548    else {
23549      t = parent.predicate("fhir:"+parentType+'.'+name);
23550    }
23551    composeCanonicalResource(t, "SubscriptionTopic", name, element, index);
23552    if (element.hasUrlElement()) {
23553      composeUri(t, "SubscriptionTopic", "url", element.getUrlElement(), -1);
23554    }
23555    for (int i = 0; i < element.getIdentifier().size(); i++) {
23556      composeIdentifier(t, "SubscriptionTopic", "identifier", element.getIdentifier().get(i), i);
23557    }
23558    if (element.hasVersionElement()) {
23559      composeString(t, "SubscriptionTopic", "version", element.getVersionElement(), -1);
23560    }
23561    if (element.hasTitleElement()) {
23562      composeString(t, "SubscriptionTopic", "title", element.getTitleElement(), -1);
23563    }
23564    for (int i = 0; i < element.getDerivedFrom().size(); i++) {
23565      composeCanonical(t, "SubscriptionTopic", "derivedFrom", element.getDerivedFrom().get(i), i);
23566    }
23567    if (element.hasStatusElement()) {
23568      composeEnum(t, "SubscriptionTopic", "status", element.getStatusElement(), -1);
23569    }
23570    if (element.hasExperimentalElement()) {
23571      composeBoolean(t, "SubscriptionTopic", "experimental", element.getExperimentalElement(), -1);
23572    }
23573    if (element.hasDateElement()) {
23574      composeDateTime(t, "SubscriptionTopic", "date", element.getDateElement(), -1);
23575    }
23576    if (element.hasPublisherElement()) {
23577      composeString(t, "SubscriptionTopic", "publisher", element.getPublisherElement(), -1);
23578    }
23579    for (int i = 0; i < element.getContact().size(); i++) {
23580      composeContactDetail(t, "SubscriptionTopic", "contact", element.getContact().get(i), i);
23581    }
23582    if (element.hasDescriptionElement()) {
23583      composeMarkdown(t, "SubscriptionTopic", "description", element.getDescriptionElement(), -1);
23584    }
23585    for (int i = 0; i < element.getUseContext().size(); i++) {
23586      composeUsageContext(t, "SubscriptionTopic", "useContext", element.getUseContext().get(i), i);
23587    }
23588    for (int i = 0; i < element.getJurisdiction().size(); i++) {
23589      composeCodeableConcept(t, "SubscriptionTopic", "jurisdiction", element.getJurisdiction().get(i), i);
23590    }
23591    if (element.hasPurposeElement()) {
23592      composeMarkdown(t, "SubscriptionTopic", "purpose", element.getPurposeElement(), -1);
23593    }
23594    if (element.hasCopyrightElement()) {
23595      composeMarkdown(t, "SubscriptionTopic", "copyright", element.getCopyrightElement(), -1);
23596    }
23597    if (element.hasCopyrightLabelElement()) {
23598      composeString(t, "SubscriptionTopic", "copyrightLabel", element.getCopyrightLabelElement(), -1);
23599    }
23600    if (element.hasApprovalDateElement()) {
23601      composeDate(t, "SubscriptionTopic", "approvalDate", element.getApprovalDateElement(), -1);
23602    }
23603    if (element.hasLastReviewDateElement()) {
23604      composeDate(t, "SubscriptionTopic", "lastReviewDate", element.getLastReviewDateElement(), -1);
23605    }
23606    if (element.hasEffectivePeriod()) {
23607      composePeriod(t, "SubscriptionTopic", "effectivePeriod", element.getEffectivePeriod(), -1);
23608    }
23609    for (int i = 0; i < element.getResourceTrigger().size(); i++) {
23610      composeSubscriptionTopicResourceTriggerComponent(t, "SubscriptionTopic", "resourceTrigger", element.getResourceTrigger().get(i), i);
23611    }
23612    for (int i = 0; i < element.getEventTrigger().size(); i++) {
23613      composeSubscriptionTopicEventTriggerComponent(t, "SubscriptionTopic", "eventTrigger", element.getEventTrigger().get(i), i);
23614    }
23615    for (int i = 0; i < element.getCanFilterBy().size(); i++) {
23616      composeSubscriptionTopicCanFilterByComponent(t, "SubscriptionTopic", "canFilterBy", element.getCanFilterBy().get(i), i);
23617    }
23618    for (int i = 0; i < element.getNotificationShape().size(); i++) {
23619      composeSubscriptionTopicNotificationShapeComponent(t, "SubscriptionTopic", "notificationShape", element.getNotificationShape().get(i), i);
23620    }
23621  }
23622
23623  protected void composeSubscriptionTopicResourceTriggerComponent(Complex parent, String parentType, String name, SubscriptionTopic.SubscriptionTopicResourceTriggerComponent element, int index) {
23624    if (element == null) 
23625      return;
23626    Complex t;
23627    if (Utilities.noString(parentType))
23628      t = parent;
23629    else {
23630      t = parent.predicate("fhir:"+parentType+'.'+name);
23631    }
23632    composeBackboneElement(t, "resourceTrigger", name, element, index);
23633    if (element.hasDescriptionElement()) {
23634      composeMarkdown(t, "SubscriptionTopicResourceTriggerComponent", "description", element.getDescriptionElement(), -1);
23635    }
23636    if (element.hasResourceElement()) {
23637      composeUri(t, "SubscriptionTopicResourceTriggerComponent", "resource", element.getResourceElement(), -1);
23638    }
23639    for (int i = 0; i < element.getSupportedInteraction().size(); i++) {
23640      composeEnum(t, "SubscriptionTopicResourceTriggerComponent", "supportedInteraction", element.getSupportedInteraction().get(i), i);
23641    }
23642    if (element.hasQueryCriteria()) {
23643      composeSubscriptionTopicResourceTriggerQueryCriteriaComponent(t, "SubscriptionTopicResourceTriggerComponent", "queryCriteria", element.getQueryCriteria(), -1);
23644    }
23645    if (element.hasFhirPathCriteriaElement()) {
23646      composeString(t, "SubscriptionTopicResourceTriggerComponent", "fhirPathCriteria", element.getFhirPathCriteriaElement(), -1);
23647    }
23648  }
23649
23650  protected void composeSubscriptionTopicResourceTriggerQueryCriteriaComponent(Complex parent, String parentType, String name, SubscriptionTopic.SubscriptionTopicResourceTriggerQueryCriteriaComponent element, int index) {
23651    if (element == null) 
23652      return;
23653    Complex t;
23654    if (Utilities.noString(parentType))
23655      t = parent;
23656    else {
23657      t = parent.predicate("fhir:"+parentType+'.'+name);
23658    }
23659    composeBackboneElement(t, "queryCriteria", name, element, index);
23660    if (element.hasPreviousElement()) {
23661      composeString(t, "SubscriptionTopicResourceTriggerQueryCriteriaComponent", "previous", element.getPreviousElement(), -1);
23662    }
23663    if (element.hasResultForCreateElement()) {
23664      composeEnum(t, "SubscriptionTopicResourceTriggerQueryCriteriaComponent", "resultForCreate", element.getResultForCreateElement(), -1);
23665    }
23666    if (element.hasCurrentElement()) {
23667      composeString(t, "SubscriptionTopicResourceTriggerQueryCriteriaComponent", "current", element.getCurrentElement(), -1);
23668    }
23669    if (element.hasResultForDeleteElement()) {
23670      composeEnum(t, "SubscriptionTopicResourceTriggerQueryCriteriaComponent", "resultForDelete", element.getResultForDeleteElement(), -1);
23671    }
23672    if (element.hasRequireBothElement()) {
23673      composeBoolean(t, "SubscriptionTopicResourceTriggerQueryCriteriaComponent", "requireBoth", element.getRequireBothElement(), -1);
23674    }
23675  }
23676
23677  protected void composeSubscriptionTopicEventTriggerComponent(Complex parent, String parentType, String name, SubscriptionTopic.SubscriptionTopicEventTriggerComponent element, int index) {
23678    if (element == null) 
23679      return;
23680    Complex t;
23681    if (Utilities.noString(parentType))
23682      t = parent;
23683    else {
23684      t = parent.predicate("fhir:"+parentType+'.'+name);
23685    }
23686    composeBackboneElement(t, "eventTrigger", name, element, index);
23687    if (element.hasDescriptionElement()) {
23688      composeMarkdown(t, "SubscriptionTopicEventTriggerComponent", "description", element.getDescriptionElement(), -1);
23689    }
23690    if (element.hasEvent()) {
23691      composeCodeableConcept(t, "SubscriptionTopicEventTriggerComponent", "event", element.getEvent(), -1);
23692    }
23693    if (element.hasResourceElement()) {
23694      composeUri(t, "SubscriptionTopicEventTriggerComponent", "resource", element.getResourceElement(), -1);
23695    }
23696  }
23697
23698  protected void composeSubscriptionTopicCanFilterByComponent(Complex parent, String parentType, String name, SubscriptionTopic.SubscriptionTopicCanFilterByComponent element, int index) {
23699    if (element == null) 
23700      return;
23701    Complex t;
23702    if (Utilities.noString(parentType))
23703      t = parent;
23704    else {
23705      t = parent.predicate("fhir:"+parentType+'.'+name);
23706    }
23707    composeBackboneElement(t, "canFilterBy", name, element, index);
23708    if (element.hasDescriptionElement()) {
23709      composeMarkdown(t, "SubscriptionTopicCanFilterByComponent", "description", element.getDescriptionElement(), -1);
23710    }
23711    if (element.hasResourceElement()) {
23712      composeUri(t, "SubscriptionTopicCanFilterByComponent", "resource", element.getResourceElement(), -1);
23713    }
23714    if (element.hasFilterParameterElement()) {
23715      composeString(t, "SubscriptionTopicCanFilterByComponent", "filterParameter", element.getFilterParameterElement(), -1);
23716    }
23717    if (element.hasFilterDefinitionElement()) {
23718      composeUri(t, "SubscriptionTopicCanFilterByComponent", "filterDefinition", element.getFilterDefinitionElement(), -1);
23719    }
23720    for (int i = 0; i < element.getModifier().size(); i++) {
23721      composeEnum(t, "SubscriptionTopicCanFilterByComponent", "modifier", element.getModifier().get(i), i);
23722    }
23723  }
23724
23725  protected void composeSubscriptionTopicNotificationShapeComponent(Complex parent, String parentType, String name, SubscriptionTopic.SubscriptionTopicNotificationShapeComponent element, int index) {
23726    if (element == null) 
23727      return;
23728    Complex t;
23729    if (Utilities.noString(parentType))
23730      t = parent;
23731    else {
23732      t = parent.predicate("fhir:"+parentType+'.'+name);
23733    }
23734    composeBackboneElement(t, "notificationShape", name, element, index);
23735    if (element.hasResourceElement()) {
23736      composeUri(t, "SubscriptionTopicNotificationShapeComponent", "resource", element.getResourceElement(), -1);
23737    }
23738    for (int i = 0; i < element.getInclude().size(); i++) {
23739      composeString(t, "SubscriptionTopicNotificationShapeComponent", "include", element.getInclude().get(i), i);
23740    }
23741    for (int i = 0; i < element.getRevInclude().size(); i++) {
23742      composeString(t, "SubscriptionTopicNotificationShapeComponent", "revInclude", element.getRevInclude().get(i), i);
23743    }
23744  }
23745
23746  protected void composeSubstance(Complex parent, String parentType, String name, Substance element, int index) {
23747    if (element == null) 
23748      return;
23749    Complex t;
23750    if (Utilities.noString(parentType))
23751      t = parent;
23752    else {
23753      t = parent.predicate("fhir:"+parentType+'.'+name);
23754    }
23755    composeDomainResource(t, "Substance", name, element, index);
23756    for (int i = 0; i < element.getIdentifier().size(); i++) {
23757      composeIdentifier(t, "Substance", "identifier", element.getIdentifier().get(i), i);
23758    }
23759    if (element.hasInstanceElement()) {
23760      composeBoolean(t, "Substance", "instance", element.getInstanceElement(), -1);
23761    }
23762    if (element.hasStatusElement()) {
23763      composeEnum(t, "Substance", "status", element.getStatusElement(), -1);
23764    }
23765    for (int i = 0; i < element.getCategory().size(); i++) {
23766      composeCodeableConcept(t, "Substance", "category", element.getCategory().get(i), i);
23767    }
23768    if (element.hasCode()) {
23769      composeCodeableReference(t, "Substance", "code", element.getCode(), -1);
23770    }
23771    if (element.hasDescriptionElement()) {
23772      composeString(t, "Substance", "description", element.getDescriptionElement(), -1);
23773    }
23774    if (element.hasExpiryElement()) {
23775      composeDateTime(t, "Substance", "expiry", element.getExpiryElement(), -1);
23776    }
23777    if (element.hasQuantity()) {
23778      composeQuantity(t, "Substance", "quantity", element.getQuantity(), -1);
23779    }
23780    for (int i = 0; i < element.getIngredient().size(); i++) {
23781      composeSubstanceIngredientComponent(t, "Substance", "ingredient", element.getIngredient().get(i), i);
23782    }
23783  }
23784
23785  protected void composeSubstanceIngredientComponent(Complex parent, String parentType, String name, Substance.SubstanceIngredientComponent element, int index) {
23786    if (element == null) 
23787      return;
23788    Complex t;
23789    if (Utilities.noString(parentType))
23790      t = parent;
23791    else {
23792      t = parent.predicate("fhir:"+parentType+'.'+name);
23793    }
23794    composeBackboneElement(t, "ingredient", name, element, index);
23795    if (element.hasQuantity()) {
23796      composeRatio(t, "SubstanceIngredientComponent", "quantity", element.getQuantity(), -1);
23797    }
23798    if (element.hasSubstance()) {
23799      composeType(t, "SubstanceIngredientComponent", "substance", element.getSubstance(), -1);
23800    }
23801  }
23802
23803  protected void composeSubstanceDefinition(Complex parent, String parentType, String name, SubstanceDefinition element, int index) {
23804    if (element == null) 
23805      return;
23806    Complex t;
23807    if (Utilities.noString(parentType))
23808      t = parent;
23809    else {
23810      t = parent.predicate("fhir:"+parentType+'.'+name);
23811    }
23812    composeDomainResource(t, "SubstanceDefinition", name, element, index);
23813    for (int i = 0; i < element.getIdentifier().size(); i++) {
23814      composeIdentifier(t, "SubstanceDefinition", "identifier", element.getIdentifier().get(i), i);
23815    }
23816    if (element.hasVersionElement()) {
23817      composeString(t, "SubstanceDefinition", "version", element.getVersionElement(), -1);
23818    }
23819    if (element.hasStatus()) {
23820      composeCodeableConcept(t, "SubstanceDefinition", "status", element.getStatus(), -1);
23821    }
23822    for (int i = 0; i < element.getClassification().size(); i++) {
23823      composeCodeableConcept(t, "SubstanceDefinition", "classification", element.getClassification().get(i), i);
23824    }
23825    if (element.hasDomain()) {
23826      composeCodeableConcept(t, "SubstanceDefinition", "domain", element.getDomain(), -1);
23827    }
23828    for (int i = 0; i < element.getGrade().size(); i++) {
23829      composeCodeableConcept(t, "SubstanceDefinition", "grade", element.getGrade().get(i), i);
23830    }
23831    if (element.hasDescriptionElement()) {
23832      composeMarkdown(t, "SubstanceDefinition", "description", element.getDescriptionElement(), -1);
23833    }
23834    for (int i = 0; i < element.getInformationSource().size(); i++) {
23835      composeReference(t, "SubstanceDefinition", "informationSource", element.getInformationSource().get(i), i);
23836    }
23837    for (int i = 0; i < element.getNote().size(); i++) {
23838      composeAnnotation(t, "SubstanceDefinition", "note", element.getNote().get(i), i);
23839    }
23840    for (int i = 0; i < element.getManufacturer().size(); i++) {
23841      composeReference(t, "SubstanceDefinition", "manufacturer", element.getManufacturer().get(i), i);
23842    }
23843    for (int i = 0; i < element.getSupplier().size(); i++) {
23844      composeReference(t, "SubstanceDefinition", "supplier", element.getSupplier().get(i), i);
23845    }
23846    for (int i = 0; i < element.getMoiety().size(); i++) {
23847      composeSubstanceDefinitionMoietyComponent(t, "SubstanceDefinition", "moiety", element.getMoiety().get(i), i);
23848    }
23849    for (int i = 0; i < element.getCharacterization().size(); i++) {
23850      composeSubstanceDefinitionCharacterizationComponent(t, "SubstanceDefinition", "characterization", element.getCharacterization().get(i), i);
23851    }
23852    for (int i = 0; i < element.getProperty().size(); i++) {
23853      composeSubstanceDefinitionPropertyComponent(t, "SubstanceDefinition", "property", element.getProperty().get(i), i);
23854    }
23855    if (element.hasReferenceInformation()) {
23856      composeReference(t, "SubstanceDefinition", "referenceInformation", element.getReferenceInformation(), -1);
23857    }
23858    for (int i = 0; i < element.getMolecularWeight().size(); i++) {
23859      composeSubstanceDefinitionMolecularWeightComponent(t, "SubstanceDefinition", "molecularWeight", element.getMolecularWeight().get(i), i);
23860    }
23861    if (element.hasStructure()) {
23862      composeSubstanceDefinitionStructureComponent(t, "SubstanceDefinition", "structure", element.getStructure(), -1);
23863    }
23864    for (int i = 0; i < element.getCode().size(); i++) {
23865      composeSubstanceDefinitionCodeComponent(t, "SubstanceDefinition", "code", element.getCode().get(i), i);
23866    }
23867    for (int i = 0; i < element.getName().size(); i++) {
23868      composeSubstanceDefinitionNameComponent(t, "SubstanceDefinition", "name", element.getName().get(i), i);
23869    }
23870    for (int i = 0; i < element.getRelationship().size(); i++) {
23871      composeSubstanceDefinitionRelationshipComponent(t, "SubstanceDefinition", "relationship", element.getRelationship().get(i), i);
23872    }
23873    if (element.hasNucleicAcid()) {
23874      composeReference(t, "SubstanceDefinition", "nucleicAcid", element.getNucleicAcid(), -1);
23875    }
23876    if (element.hasPolymer()) {
23877      composeReference(t, "SubstanceDefinition", "polymer", element.getPolymer(), -1);
23878    }
23879    if (element.hasProtein()) {
23880      composeReference(t, "SubstanceDefinition", "protein", element.getProtein(), -1);
23881    }
23882    if (element.hasSourceMaterial()) {
23883      composeSubstanceDefinitionSourceMaterialComponent(t, "SubstanceDefinition", "sourceMaterial", element.getSourceMaterial(), -1);
23884    }
23885  }
23886
23887  protected void composeSubstanceDefinitionMoietyComponent(Complex parent, String parentType, String name, SubstanceDefinition.SubstanceDefinitionMoietyComponent element, int index) {
23888    if (element == null) 
23889      return;
23890    Complex t;
23891    if (Utilities.noString(parentType))
23892      t = parent;
23893    else {
23894      t = parent.predicate("fhir:"+parentType+'.'+name);
23895    }
23896    composeBackboneElement(t, "moiety", name, element, index);
23897    if (element.hasRole()) {
23898      composeCodeableConcept(t, "SubstanceDefinitionMoietyComponent", "role", element.getRole(), -1);
23899    }
23900    if (element.hasIdentifier()) {
23901      composeIdentifier(t, "SubstanceDefinitionMoietyComponent", "identifier", element.getIdentifier(), -1);
23902    }
23903    if (element.hasNameElement()) {
23904      composeString(t, "SubstanceDefinitionMoietyComponent", "name", element.getNameElement(), -1);
23905    }
23906    if (element.hasStereochemistry()) {
23907      composeCodeableConcept(t, "SubstanceDefinitionMoietyComponent", "stereochemistry", element.getStereochemistry(), -1);
23908    }
23909    if (element.hasOpticalActivity()) {
23910      composeCodeableConcept(t, "SubstanceDefinitionMoietyComponent", "opticalActivity", element.getOpticalActivity(), -1);
23911    }
23912    if (element.hasMolecularFormulaElement()) {
23913      composeString(t, "SubstanceDefinitionMoietyComponent", "molecularFormula", element.getMolecularFormulaElement(), -1);
23914    }
23915    if (element.hasAmount()) {
23916      composeType(t, "SubstanceDefinitionMoietyComponent", "amount", element.getAmount(), -1);
23917    }
23918    if (element.hasMeasurementType()) {
23919      composeCodeableConcept(t, "SubstanceDefinitionMoietyComponent", "measurementType", element.getMeasurementType(), -1);
23920    }
23921  }
23922
23923  protected void composeSubstanceDefinitionCharacterizationComponent(Complex parent, String parentType, String name, SubstanceDefinition.SubstanceDefinitionCharacterizationComponent element, int index) {
23924    if (element == null) 
23925      return;
23926    Complex t;
23927    if (Utilities.noString(parentType))
23928      t = parent;
23929    else {
23930      t = parent.predicate("fhir:"+parentType+'.'+name);
23931    }
23932    composeBackboneElement(t, "characterization", name, element, index);
23933    if (element.hasTechnique()) {
23934      composeCodeableConcept(t, "SubstanceDefinitionCharacterizationComponent", "technique", element.getTechnique(), -1);
23935    }
23936    if (element.hasForm()) {
23937      composeCodeableConcept(t, "SubstanceDefinitionCharacterizationComponent", "form", element.getForm(), -1);
23938    }
23939    if (element.hasDescriptionElement()) {
23940      composeMarkdown(t, "SubstanceDefinitionCharacterizationComponent", "description", element.getDescriptionElement(), -1);
23941    }
23942    for (int i = 0; i < element.getFile().size(); i++) {
23943      composeAttachment(t, "SubstanceDefinitionCharacterizationComponent", "file", element.getFile().get(i), i);
23944    }
23945  }
23946
23947  protected void composeSubstanceDefinitionPropertyComponent(Complex parent, String parentType, String name, SubstanceDefinition.SubstanceDefinitionPropertyComponent element, int index) {
23948    if (element == null) 
23949      return;
23950    Complex t;
23951    if (Utilities.noString(parentType))
23952      t = parent;
23953    else {
23954      t = parent.predicate("fhir:"+parentType+'.'+name);
23955    }
23956    composeBackboneElement(t, "property", name, element, index);
23957    if (element.hasType()) {
23958      composeCodeableConcept(t, "SubstanceDefinitionPropertyComponent", "type", element.getType(), -1);
23959    }
23960    if (element.hasValue()) {
23961      composeType(t, "SubstanceDefinitionPropertyComponent", "value", element.getValue(), -1);
23962    }
23963  }
23964
23965  protected void composeSubstanceDefinitionMolecularWeightComponent(Complex parent, String parentType, String name, SubstanceDefinition.SubstanceDefinitionMolecularWeightComponent element, int index) {
23966    if (element == null) 
23967      return;
23968    Complex t;
23969    if (Utilities.noString(parentType))
23970      t = parent;
23971    else {
23972      t = parent.predicate("fhir:"+parentType+'.'+name);
23973    }
23974    composeBackboneElement(t, "molecularWeight", name, element, index);
23975    if (element.hasMethod()) {
23976      composeCodeableConcept(t, "SubstanceDefinitionMolecularWeightComponent", "method", element.getMethod(), -1);
23977    }
23978    if (element.hasType()) {
23979      composeCodeableConcept(t, "SubstanceDefinitionMolecularWeightComponent", "type", element.getType(), -1);
23980    }
23981    if (element.hasAmount()) {
23982      composeQuantity(t, "SubstanceDefinitionMolecularWeightComponent", "amount", element.getAmount(), -1);
23983    }
23984  }
23985
23986  protected void composeSubstanceDefinitionStructureComponent(Complex parent, String parentType, String name, SubstanceDefinition.SubstanceDefinitionStructureComponent element, int index) {
23987    if (element == null) 
23988      return;
23989    Complex t;
23990    if (Utilities.noString(parentType))
23991      t = parent;
23992    else {
23993      t = parent.predicate("fhir:"+parentType+'.'+name);
23994    }
23995    composeBackboneElement(t, "structure", name, element, index);
23996    if (element.hasStereochemistry()) {
23997      composeCodeableConcept(t, "SubstanceDefinitionStructureComponent", "stereochemistry", element.getStereochemistry(), -1);
23998    }
23999    if (element.hasOpticalActivity()) {
24000      composeCodeableConcept(t, "SubstanceDefinitionStructureComponent", "opticalActivity", element.getOpticalActivity(), -1);
24001    }
24002    if (element.hasMolecularFormulaElement()) {
24003      composeString(t, "SubstanceDefinitionStructureComponent", "molecularFormula", element.getMolecularFormulaElement(), -1);
24004    }
24005    if (element.hasMolecularFormulaByMoietyElement()) {
24006      composeString(t, "SubstanceDefinitionStructureComponent", "molecularFormulaByMoiety", element.getMolecularFormulaByMoietyElement(), -1);
24007    }
24008    if (element.hasMolecularWeight()) {
24009      composeSubstanceDefinitionMolecularWeightComponent(t, "SubstanceDefinitionStructureComponent", "molecularWeight", element.getMolecularWeight(), -1);
24010    }
24011    for (int i = 0; i < element.getTechnique().size(); i++) {
24012      composeCodeableConcept(t, "SubstanceDefinitionStructureComponent", "technique", element.getTechnique().get(i), i);
24013    }
24014    for (int i = 0; i < element.getSourceDocument().size(); i++) {
24015      composeReference(t, "SubstanceDefinitionStructureComponent", "sourceDocument", element.getSourceDocument().get(i), i);
24016    }
24017    for (int i = 0; i < element.getRepresentation().size(); i++) {
24018      composeSubstanceDefinitionStructureRepresentationComponent(t, "SubstanceDefinitionStructureComponent", "representation", element.getRepresentation().get(i), i);
24019    }
24020  }
24021
24022  protected void composeSubstanceDefinitionStructureRepresentationComponent(Complex parent, String parentType, String name, SubstanceDefinition.SubstanceDefinitionStructureRepresentationComponent element, int index) {
24023    if (element == null) 
24024      return;
24025    Complex t;
24026    if (Utilities.noString(parentType))
24027      t = parent;
24028    else {
24029      t = parent.predicate("fhir:"+parentType+'.'+name);
24030    }
24031    composeBackboneElement(t, "representation", name, element, index);
24032    if (element.hasType()) {
24033      composeCodeableConcept(t, "SubstanceDefinitionStructureRepresentationComponent", "type", element.getType(), -1);
24034    }
24035    if (element.hasRepresentationElement()) {
24036      composeString(t, "SubstanceDefinitionStructureRepresentationComponent", "representation", element.getRepresentationElement(), -1);
24037    }
24038    if (element.hasFormat()) {
24039      composeCodeableConcept(t, "SubstanceDefinitionStructureRepresentationComponent", "format", element.getFormat(), -1);
24040    }
24041    if (element.hasDocument()) {
24042      composeReference(t, "SubstanceDefinitionStructureRepresentationComponent", "document", element.getDocument(), -1);
24043    }
24044  }
24045
24046  protected void composeSubstanceDefinitionCodeComponent(Complex parent, String parentType, String name, SubstanceDefinition.SubstanceDefinitionCodeComponent element, int index) {
24047    if (element == null) 
24048      return;
24049    Complex t;
24050    if (Utilities.noString(parentType))
24051      t = parent;
24052    else {
24053      t = parent.predicate("fhir:"+parentType+'.'+name);
24054    }
24055    composeBackboneElement(t, "code", name, element, index);
24056    if (element.hasCode()) {
24057      composeCodeableConcept(t, "SubstanceDefinitionCodeComponent", "code", element.getCode(), -1);
24058    }
24059    if (element.hasStatus()) {
24060      composeCodeableConcept(t, "SubstanceDefinitionCodeComponent", "status", element.getStatus(), -1);
24061    }
24062    if (element.hasStatusDateElement()) {
24063      composeDateTime(t, "SubstanceDefinitionCodeComponent", "statusDate", element.getStatusDateElement(), -1);
24064    }
24065    for (int i = 0; i < element.getNote().size(); i++) {
24066      composeAnnotation(t, "SubstanceDefinitionCodeComponent", "note", element.getNote().get(i), i);
24067    }
24068    for (int i = 0; i < element.getSource().size(); i++) {
24069      composeReference(t, "SubstanceDefinitionCodeComponent", "source", element.getSource().get(i), i);
24070    }
24071  }
24072
24073  protected void composeSubstanceDefinitionNameComponent(Complex parent, String parentType, String name, SubstanceDefinition.SubstanceDefinitionNameComponent element, int index) {
24074    if (element == null) 
24075      return;
24076    Complex t;
24077    if (Utilities.noString(parentType))
24078      t = parent;
24079    else {
24080      t = parent.predicate("fhir:"+parentType+'.'+name);
24081    }
24082    composeBackboneElement(t, "name", name, element, index);
24083    if (element.hasNameElement()) {
24084      composeString(t, "SubstanceDefinitionNameComponent", "name", element.getNameElement(), -1);
24085    }
24086    if (element.hasType()) {
24087      composeCodeableConcept(t, "SubstanceDefinitionNameComponent", "type", element.getType(), -1);
24088    }
24089    if (element.hasStatus()) {
24090      composeCodeableConcept(t, "SubstanceDefinitionNameComponent", "status", element.getStatus(), -1);
24091    }
24092    if (element.hasPreferredElement()) {
24093      composeBoolean(t, "SubstanceDefinitionNameComponent", "preferred", element.getPreferredElement(), -1);
24094    }
24095    for (int i = 0; i < element.getLanguage().size(); i++) {
24096      composeCodeableConcept(t, "SubstanceDefinitionNameComponent", "language", element.getLanguage().get(i), i);
24097    }
24098    for (int i = 0; i < element.getDomain().size(); i++) {
24099      composeCodeableConcept(t, "SubstanceDefinitionNameComponent", "domain", element.getDomain().get(i), i);
24100    }
24101    for (int i = 0; i < element.getJurisdiction().size(); i++) {
24102      composeCodeableConcept(t, "SubstanceDefinitionNameComponent", "jurisdiction", element.getJurisdiction().get(i), i);
24103    }
24104    for (int i = 0; i < element.getSynonym().size(); i++) {
24105      composeSubstanceDefinitionNameComponent(t, "SubstanceDefinitionNameComponent", "synonym", element.getSynonym().get(i), i);
24106    }
24107    for (int i = 0; i < element.getTranslation().size(); i++) {
24108      composeSubstanceDefinitionNameComponent(t, "SubstanceDefinitionNameComponent", "translation", element.getTranslation().get(i), i);
24109    }
24110    for (int i = 0; i < element.getOfficial().size(); i++) {
24111      composeSubstanceDefinitionNameOfficialComponent(t, "SubstanceDefinitionNameComponent", "official", element.getOfficial().get(i), i);
24112    }
24113    for (int i = 0; i < element.getSource().size(); i++) {
24114      composeReference(t, "SubstanceDefinitionNameComponent", "source", element.getSource().get(i), i);
24115    }
24116  }
24117
24118  protected void composeSubstanceDefinitionNameOfficialComponent(Complex parent, String parentType, String name, SubstanceDefinition.SubstanceDefinitionNameOfficialComponent element, int index) {
24119    if (element == null) 
24120      return;
24121    Complex t;
24122    if (Utilities.noString(parentType))
24123      t = parent;
24124    else {
24125      t = parent.predicate("fhir:"+parentType+'.'+name);
24126    }
24127    composeBackboneElement(t, "official", name, element, index);
24128    if (element.hasAuthority()) {
24129      composeCodeableConcept(t, "SubstanceDefinitionNameOfficialComponent", "authority", element.getAuthority(), -1);
24130    }
24131    if (element.hasStatus()) {
24132      composeCodeableConcept(t, "SubstanceDefinitionNameOfficialComponent", "status", element.getStatus(), -1);
24133    }
24134    if (element.hasDateElement()) {
24135      composeDateTime(t, "SubstanceDefinitionNameOfficialComponent", "date", element.getDateElement(), -1);
24136    }
24137  }
24138
24139  protected void composeSubstanceDefinitionRelationshipComponent(Complex parent, String parentType, String name, SubstanceDefinition.SubstanceDefinitionRelationshipComponent element, int index) {
24140    if (element == null) 
24141      return;
24142    Complex t;
24143    if (Utilities.noString(parentType))
24144      t = parent;
24145    else {
24146      t = parent.predicate("fhir:"+parentType+'.'+name);
24147    }
24148    composeBackboneElement(t, "relationship", name, element, index);
24149    if (element.hasSubstanceDefinition()) {
24150      composeType(t, "SubstanceDefinitionRelationshipComponent", "substanceDefinition", element.getSubstanceDefinition(), -1);
24151    }
24152    if (element.hasType()) {
24153      composeCodeableConcept(t, "SubstanceDefinitionRelationshipComponent", "type", element.getType(), -1);
24154    }
24155    if (element.hasIsDefiningElement()) {
24156      composeBoolean(t, "SubstanceDefinitionRelationshipComponent", "isDefining", element.getIsDefiningElement(), -1);
24157    }
24158    if (element.hasAmount()) {
24159      composeType(t, "SubstanceDefinitionRelationshipComponent", "amount", element.getAmount(), -1);
24160    }
24161    if (element.hasRatioHighLimitAmount()) {
24162      composeRatio(t, "SubstanceDefinitionRelationshipComponent", "ratioHighLimitAmount", element.getRatioHighLimitAmount(), -1);
24163    }
24164    if (element.hasComparator()) {
24165      composeCodeableConcept(t, "SubstanceDefinitionRelationshipComponent", "comparator", element.getComparator(), -1);
24166    }
24167    for (int i = 0; i < element.getSource().size(); i++) {
24168      composeReference(t, "SubstanceDefinitionRelationshipComponent", "source", element.getSource().get(i), i);
24169    }
24170  }
24171
24172  protected void composeSubstanceDefinitionSourceMaterialComponent(Complex parent, String parentType, String name, SubstanceDefinition.SubstanceDefinitionSourceMaterialComponent element, int index) {
24173    if (element == null) 
24174      return;
24175    Complex t;
24176    if (Utilities.noString(parentType))
24177      t = parent;
24178    else {
24179      t = parent.predicate("fhir:"+parentType+'.'+name);
24180    }
24181    composeBackboneElement(t, "sourceMaterial", name, element, index);
24182    if (element.hasType()) {
24183      composeCodeableConcept(t, "SubstanceDefinitionSourceMaterialComponent", "type", element.getType(), -1);
24184    }
24185    if (element.hasGenus()) {
24186      composeCodeableConcept(t, "SubstanceDefinitionSourceMaterialComponent", "genus", element.getGenus(), -1);
24187    }
24188    if (element.hasSpecies()) {
24189      composeCodeableConcept(t, "SubstanceDefinitionSourceMaterialComponent", "species", element.getSpecies(), -1);
24190    }
24191    if (element.hasPart()) {
24192      composeCodeableConcept(t, "SubstanceDefinitionSourceMaterialComponent", "part", element.getPart(), -1);
24193    }
24194    for (int i = 0; i < element.getCountryOfOrigin().size(); i++) {
24195      composeCodeableConcept(t, "SubstanceDefinitionSourceMaterialComponent", "countryOfOrigin", element.getCountryOfOrigin().get(i), i);
24196    }
24197  }
24198
24199  protected void composeSubstanceNucleicAcid(Complex parent, String parentType, String name, SubstanceNucleicAcid element, int index) {
24200    if (element == null) 
24201      return;
24202    Complex t;
24203    if (Utilities.noString(parentType))
24204      t = parent;
24205    else {
24206      t = parent.predicate("fhir:"+parentType+'.'+name);
24207    }
24208    composeDomainResource(t, "SubstanceNucleicAcid", name, element, index);
24209    if (element.hasSequenceType()) {
24210      composeCodeableConcept(t, "SubstanceNucleicAcid", "sequenceType", element.getSequenceType(), -1);
24211    }
24212    if (element.hasNumberOfSubunitsElement()) {
24213      composeInteger(t, "SubstanceNucleicAcid", "numberOfSubunits", element.getNumberOfSubunitsElement(), -1);
24214    }
24215    if (element.hasAreaOfHybridisationElement()) {
24216      composeString(t, "SubstanceNucleicAcid", "areaOfHybridisation", element.getAreaOfHybridisationElement(), -1);
24217    }
24218    if (element.hasOligoNucleotideType()) {
24219      composeCodeableConcept(t, "SubstanceNucleicAcid", "oligoNucleotideType", element.getOligoNucleotideType(), -1);
24220    }
24221    for (int i = 0; i < element.getSubunit().size(); i++) {
24222      composeSubstanceNucleicAcidSubunitComponent(t, "SubstanceNucleicAcid", "subunit", element.getSubunit().get(i), i);
24223    }
24224  }
24225
24226  protected void composeSubstanceNucleicAcidSubunitComponent(Complex parent, String parentType, String name, SubstanceNucleicAcid.SubstanceNucleicAcidSubunitComponent element, int index) {
24227    if (element == null) 
24228      return;
24229    Complex t;
24230    if (Utilities.noString(parentType))
24231      t = parent;
24232    else {
24233      t = parent.predicate("fhir:"+parentType+'.'+name);
24234    }
24235    composeBackboneElement(t, "subunit", name, element, index);
24236    if (element.hasSubunitElement()) {
24237      composeInteger(t, "SubstanceNucleicAcidSubunitComponent", "subunit", element.getSubunitElement(), -1);
24238    }
24239    if (element.hasSequenceElement()) {
24240      composeString(t, "SubstanceNucleicAcidSubunitComponent", "sequence", element.getSequenceElement(), -1);
24241    }
24242    if (element.hasLengthElement()) {
24243      composeInteger(t, "SubstanceNucleicAcidSubunitComponent", "length", element.getLengthElement(), -1);
24244    }
24245    if (element.hasSequenceAttachment()) {
24246      composeAttachment(t, "SubstanceNucleicAcidSubunitComponent", "sequenceAttachment", element.getSequenceAttachment(), -1);
24247    }
24248    if (element.hasFivePrime()) {
24249      composeCodeableConcept(t, "SubstanceNucleicAcidSubunitComponent", "fivePrime", element.getFivePrime(), -1);
24250    }
24251    if (element.hasThreePrime()) {
24252      composeCodeableConcept(t, "SubstanceNucleicAcidSubunitComponent", "threePrime", element.getThreePrime(), -1);
24253    }
24254    for (int i = 0; i < element.getLinkage().size(); i++) {
24255      composeSubstanceNucleicAcidSubunitLinkageComponent(t, "SubstanceNucleicAcidSubunitComponent", "linkage", element.getLinkage().get(i), i);
24256    }
24257    for (int i = 0; i < element.getSugar().size(); i++) {
24258      composeSubstanceNucleicAcidSubunitSugarComponent(t, "SubstanceNucleicAcidSubunitComponent", "sugar", element.getSugar().get(i), i);
24259    }
24260  }
24261
24262  protected void composeSubstanceNucleicAcidSubunitLinkageComponent(Complex parent, String parentType, String name, SubstanceNucleicAcid.SubstanceNucleicAcidSubunitLinkageComponent element, int index) {
24263    if (element == null) 
24264      return;
24265    Complex t;
24266    if (Utilities.noString(parentType))
24267      t = parent;
24268    else {
24269      t = parent.predicate("fhir:"+parentType+'.'+name);
24270    }
24271    composeBackboneElement(t, "linkage", name, element, index);
24272    if (element.hasConnectivityElement()) {
24273      composeString(t, "SubstanceNucleicAcidSubunitLinkageComponent", "connectivity", element.getConnectivityElement(), -1);
24274    }
24275    if (element.hasIdentifier()) {
24276      composeIdentifier(t, "SubstanceNucleicAcidSubunitLinkageComponent", "identifier", element.getIdentifier(), -1);
24277    }
24278    if (element.hasNameElement()) {
24279      composeString(t, "SubstanceNucleicAcidSubunitLinkageComponent", "name", element.getNameElement(), -1);
24280    }
24281    if (element.hasResidueSiteElement()) {
24282      composeString(t, "SubstanceNucleicAcidSubunitLinkageComponent", "residueSite", element.getResidueSiteElement(), -1);
24283    }
24284  }
24285
24286  protected void composeSubstanceNucleicAcidSubunitSugarComponent(Complex parent, String parentType, String name, SubstanceNucleicAcid.SubstanceNucleicAcidSubunitSugarComponent element, int index) {
24287    if (element == null) 
24288      return;
24289    Complex t;
24290    if (Utilities.noString(parentType))
24291      t = parent;
24292    else {
24293      t = parent.predicate("fhir:"+parentType+'.'+name);
24294    }
24295    composeBackboneElement(t, "sugar", name, element, index);
24296    if (element.hasIdentifier()) {
24297      composeIdentifier(t, "SubstanceNucleicAcidSubunitSugarComponent", "identifier", element.getIdentifier(), -1);
24298    }
24299    if (element.hasNameElement()) {
24300      composeString(t, "SubstanceNucleicAcidSubunitSugarComponent", "name", element.getNameElement(), -1);
24301    }
24302    if (element.hasResidueSiteElement()) {
24303      composeString(t, "SubstanceNucleicAcidSubunitSugarComponent", "residueSite", element.getResidueSiteElement(), -1);
24304    }
24305  }
24306
24307  protected void composeSubstancePolymer(Complex parent, String parentType, String name, SubstancePolymer element, int index) {
24308    if (element == null) 
24309      return;
24310    Complex t;
24311    if (Utilities.noString(parentType))
24312      t = parent;
24313    else {
24314      t = parent.predicate("fhir:"+parentType+'.'+name);
24315    }
24316    composeDomainResource(t, "SubstancePolymer", name, element, index);
24317    if (element.hasIdentifier()) {
24318      composeIdentifier(t, "SubstancePolymer", "identifier", element.getIdentifier(), -1);
24319    }
24320    if (element.hasClass_()) {
24321      composeCodeableConcept(t, "SubstancePolymer", "class", element.getClass_(), -1);
24322    }
24323    if (element.hasGeometry()) {
24324      composeCodeableConcept(t, "SubstancePolymer", "geometry", element.getGeometry(), -1);
24325    }
24326    for (int i = 0; i < element.getCopolymerConnectivity().size(); i++) {
24327      composeCodeableConcept(t, "SubstancePolymer", "copolymerConnectivity", element.getCopolymerConnectivity().get(i), i);
24328    }
24329    if (element.hasModificationElement()) {
24330      composeString(t, "SubstancePolymer", "modification", element.getModificationElement(), -1);
24331    }
24332    for (int i = 0; i < element.getMonomerSet().size(); i++) {
24333      composeSubstancePolymerMonomerSetComponent(t, "SubstancePolymer", "monomerSet", element.getMonomerSet().get(i), i);
24334    }
24335    for (int i = 0; i < element.getRepeat().size(); i++) {
24336      composeSubstancePolymerRepeatComponent(t, "SubstancePolymer", "repeat", element.getRepeat().get(i), i);
24337    }
24338  }
24339
24340  protected void composeSubstancePolymerMonomerSetComponent(Complex parent, String parentType, String name, SubstancePolymer.SubstancePolymerMonomerSetComponent element, int index) {
24341    if (element == null) 
24342      return;
24343    Complex t;
24344    if (Utilities.noString(parentType))
24345      t = parent;
24346    else {
24347      t = parent.predicate("fhir:"+parentType+'.'+name);
24348    }
24349    composeBackboneElement(t, "monomerSet", name, element, index);
24350    if (element.hasRatioType()) {
24351      composeCodeableConcept(t, "SubstancePolymerMonomerSetComponent", "ratioType", element.getRatioType(), -1);
24352    }
24353    for (int i = 0; i < element.getStartingMaterial().size(); i++) {
24354      composeSubstancePolymerMonomerSetStartingMaterialComponent(t, "SubstancePolymerMonomerSetComponent", "startingMaterial", element.getStartingMaterial().get(i), i);
24355    }
24356  }
24357
24358  protected void composeSubstancePolymerMonomerSetStartingMaterialComponent(Complex parent, String parentType, String name, SubstancePolymer.SubstancePolymerMonomerSetStartingMaterialComponent element, int index) {
24359    if (element == null) 
24360      return;
24361    Complex t;
24362    if (Utilities.noString(parentType))
24363      t = parent;
24364    else {
24365      t = parent.predicate("fhir:"+parentType+'.'+name);
24366    }
24367    composeBackboneElement(t, "startingMaterial", name, element, index);
24368    if (element.hasCode()) {
24369      composeCodeableConcept(t, "SubstancePolymerMonomerSetStartingMaterialComponent", "code", element.getCode(), -1);
24370    }
24371    if (element.hasCategory()) {
24372      composeCodeableConcept(t, "SubstancePolymerMonomerSetStartingMaterialComponent", "category", element.getCategory(), -1);
24373    }
24374    if (element.hasIsDefiningElement()) {
24375      composeBoolean(t, "SubstancePolymerMonomerSetStartingMaterialComponent", "isDefining", element.getIsDefiningElement(), -1);
24376    }
24377    if (element.hasAmount()) {
24378      composeQuantity(t, "SubstancePolymerMonomerSetStartingMaterialComponent", "amount", element.getAmount(), -1);
24379    }
24380  }
24381
24382  protected void composeSubstancePolymerRepeatComponent(Complex parent, String parentType, String name, SubstancePolymer.SubstancePolymerRepeatComponent element, int index) {
24383    if (element == null) 
24384      return;
24385    Complex t;
24386    if (Utilities.noString(parentType))
24387      t = parent;
24388    else {
24389      t = parent.predicate("fhir:"+parentType+'.'+name);
24390    }
24391    composeBackboneElement(t, "repeat", name, element, index);
24392    if (element.hasAverageMolecularFormulaElement()) {
24393      composeString(t, "SubstancePolymerRepeatComponent", "averageMolecularFormula", element.getAverageMolecularFormulaElement(), -1);
24394    }
24395    if (element.hasRepeatUnitAmountType()) {
24396      composeCodeableConcept(t, "SubstancePolymerRepeatComponent", "repeatUnitAmountType", element.getRepeatUnitAmountType(), -1);
24397    }
24398    for (int i = 0; i < element.getRepeatUnit().size(); i++) {
24399      composeSubstancePolymerRepeatRepeatUnitComponent(t, "SubstancePolymerRepeatComponent", "repeatUnit", element.getRepeatUnit().get(i), i);
24400    }
24401  }
24402
24403  protected void composeSubstancePolymerRepeatRepeatUnitComponent(Complex parent, String parentType, String name, SubstancePolymer.SubstancePolymerRepeatRepeatUnitComponent element, int index) {
24404    if (element == null) 
24405      return;
24406    Complex t;
24407    if (Utilities.noString(parentType))
24408      t = parent;
24409    else {
24410      t = parent.predicate("fhir:"+parentType+'.'+name);
24411    }
24412    composeBackboneElement(t, "repeatUnit", name, element, index);
24413    if (element.hasUnitElement()) {
24414      composeString(t, "SubstancePolymerRepeatRepeatUnitComponent", "unit", element.getUnitElement(), -1);
24415    }
24416    if (element.hasOrientation()) {
24417      composeCodeableConcept(t, "SubstancePolymerRepeatRepeatUnitComponent", "orientation", element.getOrientation(), -1);
24418    }
24419    if (element.hasAmountElement()) {
24420      composeInteger(t, "SubstancePolymerRepeatRepeatUnitComponent", "amount", element.getAmountElement(), -1);
24421    }
24422    for (int i = 0; i < element.getDegreeOfPolymerisation().size(); i++) {
24423      composeSubstancePolymerRepeatRepeatUnitDegreeOfPolymerisationComponent(t, "SubstancePolymerRepeatRepeatUnitComponent", "degreeOfPolymerisation", element.getDegreeOfPolymerisation().get(i), i);
24424    }
24425    for (int i = 0; i < element.getStructuralRepresentation().size(); i++) {
24426      composeSubstancePolymerRepeatRepeatUnitStructuralRepresentationComponent(t, "SubstancePolymerRepeatRepeatUnitComponent", "structuralRepresentation", element.getStructuralRepresentation().get(i), i);
24427    }
24428  }
24429
24430  protected void composeSubstancePolymerRepeatRepeatUnitDegreeOfPolymerisationComponent(Complex parent, String parentType, String name, SubstancePolymer.SubstancePolymerRepeatRepeatUnitDegreeOfPolymerisationComponent element, int index) {
24431    if (element == null) 
24432      return;
24433    Complex t;
24434    if (Utilities.noString(parentType))
24435      t = parent;
24436    else {
24437      t = parent.predicate("fhir:"+parentType+'.'+name);
24438    }
24439    composeBackboneElement(t, "degreeOfPolymerisation", name, element, index);
24440    if (element.hasType()) {
24441      composeCodeableConcept(t, "SubstancePolymerRepeatRepeatUnitDegreeOfPolymerisationComponent", "type", element.getType(), -1);
24442    }
24443    if (element.hasAverageElement()) {
24444      composeInteger(t, "SubstancePolymerRepeatRepeatUnitDegreeOfPolymerisationComponent", "average", element.getAverageElement(), -1);
24445    }
24446    if (element.hasLowElement()) {
24447      composeInteger(t, "SubstancePolymerRepeatRepeatUnitDegreeOfPolymerisationComponent", "low", element.getLowElement(), -1);
24448    }
24449    if (element.hasHighElement()) {
24450      composeInteger(t, "SubstancePolymerRepeatRepeatUnitDegreeOfPolymerisationComponent", "high", element.getHighElement(), -1);
24451    }
24452  }
24453
24454  protected void composeSubstancePolymerRepeatRepeatUnitStructuralRepresentationComponent(Complex parent, String parentType, String name, SubstancePolymer.SubstancePolymerRepeatRepeatUnitStructuralRepresentationComponent element, int index) {
24455    if (element == null) 
24456      return;
24457    Complex t;
24458    if (Utilities.noString(parentType))
24459      t = parent;
24460    else {
24461      t = parent.predicate("fhir:"+parentType+'.'+name);
24462    }
24463    composeBackboneElement(t, "structuralRepresentation", name, element, index);
24464    if (element.hasType()) {
24465      composeCodeableConcept(t, "SubstancePolymerRepeatRepeatUnitStructuralRepresentationComponent", "type", element.getType(), -1);
24466    }
24467    if (element.hasRepresentationElement()) {
24468      composeString(t, "SubstancePolymerRepeatRepeatUnitStructuralRepresentationComponent", "representation", element.getRepresentationElement(), -1);
24469    }
24470    if (element.hasFormat()) {
24471      composeCodeableConcept(t, "SubstancePolymerRepeatRepeatUnitStructuralRepresentationComponent", "format", element.getFormat(), -1);
24472    }
24473    if (element.hasAttachment()) {
24474      composeAttachment(t, "SubstancePolymerRepeatRepeatUnitStructuralRepresentationComponent", "attachment", element.getAttachment(), -1);
24475    }
24476  }
24477
24478  protected void composeSubstanceProtein(Complex parent, String parentType, String name, SubstanceProtein element, int index) {
24479    if (element == null) 
24480      return;
24481    Complex t;
24482    if (Utilities.noString(parentType))
24483      t = parent;
24484    else {
24485      t = parent.predicate("fhir:"+parentType+'.'+name);
24486    }
24487    composeDomainResource(t, "SubstanceProtein", name, element, index);
24488    if (element.hasSequenceType()) {
24489      composeCodeableConcept(t, "SubstanceProtein", "sequenceType", element.getSequenceType(), -1);
24490    }
24491    if (element.hasNumberOfSubunitsElement()) {
24492      composeInteger(t, "SubstanceProtein", "numberOfSubunits", element.getNumberOfSubunitsElement(), -1);
24493    }
24494    for (int i = 0; i < element.getDisulfideLinkage().size(); i++) {
24495      composeString(t, "SubstanceProtein", "disulfideLinkage", element.getDisulfideLinkage().get(i), i);
24496    }
24497    for (int i = 0; i < element.getSubunit().size(); i++) {
24498      composeSubstanceProteinSubunitComponent(t, "SubstanceProtein", "subunit", element.getSubunit().get(i), i);
24499    }
24500  }
24501
24502  protected void composeSubstanceProteinSubunitComponent(Complex parent, String parentType, String name, SubstanceProtein.SubstanceProteinSubunitComponent element, int index) {
24503    if (element == null) 
24504      return;
24505    Complex t;
24506    if (Utilities.noString(parentType))
24507      t = parent;
24508    else {
24509      t = parent.predicate("fhir:"+parentType+'.'+name);
24510    }
24511    composeBackboneElement(t, "subunit", name, element, index);
24512    if (element.hasSubunitElement()) {
24513      composeInteger(t, "SubstanceProteinSubunitComponent", "subunit", element.getSubunitElement(), -1);
24514    }
24515    if (element.hasSequenceElement()) {
24516      composeString(t, "SubstanceProteinSubunitComponent", "sequence", element.getSequenceElement(), -1);
24517    }
24518    if (element.hasLengthElement()) {
24519      composeInteger(t, "SubstanceProteinSubunitComponent", "length", element.getLengthElement(), -1);
24520    }
24521    if (element.hasSequenceAttachment()) {
24522      composeAttachment(t, "SubstanceProteinSubunitComponent", "sequenceAttachment", element.getSequenceAttachment(), -1);
24523    }
24524    if (element.hasNTerminalModificationId()) {
24525      composeIdentifier(t, "SubstanceProteinSubunitComponent", "nTerminalModificationId", element.getNTerminalModificationId(), -1);
24526    }
24527    if (element.hasNTerminalModificationElement()) {
24528      composeString(t, "SubstanceProteinSubunitComponent", "nTerminalModification", element.getNTerminalModificationElement(), -1);
24529    }
24530    if (element.hasCTerminalModificationId()) {
24531      composeIdentifier(t, "SubstanceProteinSubunitComponent", "cTerminalModificationId", element.getCTerminalModificationId(), -1);
24532    }
24533    if (element.hasCTerminalModificationElement()) {
24534      composeString(t, "SubstanceProteinSubunitComponent", "cTerminalModification", element.getCTerminalModificationElement(), -1);
24535    }
24536  }
24537
24538  protected void composeSubstanceReferenceInformation(Complex parent, String parentType, String name, SubstanceReferenceInformation element, int index) {
24539    if (element == null) 
24540      return;
24541    Complex t;
24542    if (Utilities.noString(parentType))
24543      t = parent;
24544    else {
24545      t = parent.predicate("fhir:"+parentType+'.'+name);
24546    }
24547    composeDomainResource(t, "SubstanceReferenceInformation", name, element, index);
24548    if (element.hasCommentElement()) {
24549      composeString(t, "SubstanceReferenceInformation", "comment", element.getCommentElement(), -1);
24550    }
24551    for (int i = 0; i < element.getGene().size(); i++) {
24552      composeSubstanceReferenceInformationGeneComponent(t, "SubstanceReferenceInformation", "gene", element.getGene().get(i), i);
24553    }
24554    for (int i = 0; i < element.getGeneElement().size(); i++) {
24555      composeSubstanceReferenceInformationGeneElementComponent(t, "SubstanceReferenceInformation", "geneElement", element.getGeneElement().get(i), i);
24556    }
24557    for (int i = 0; i < element.getTarget().size(); i++) {
24558      composeSubstanceReferenceInformationTargetComponent(t, "SubstanceReferenceInformation", "target", element.getTarget().get(i), i);
24559    }
24560  }
24561
24562  protected void composeSubstanceReferenceInformationGeneComponent(Complex parent, String parentType, String name, SubstanceReferenceInformation.SubstanceReferenceInformationGeneComponent element, int index) {
24563    if (element == null) 
24564      return;
24565    Complex t;
24566    if (Utilities.noString(parentType))
24567      t = parent;
24568    else {
24569      t = parent.predicate("fhir:"+parentType+'.'+name);
24570    }
24571    composeBackboneElement(t, "gene", name, element, index);
24572    if (element.hasGeneSequenceOrigin()) {
24573      composeCodeableConcept(t, "SubstanceReferenceInformationGeneComponent", "geneSequenceOrigin", element.getGeneSequenceOrigin(), -1);
24574    }
24575    if (element.hasGene()) {
24576      composeCodeableConcept(t, "SubstanceReferenceInformationGeneComponent", "gene", element.getGene(), -1);
24577    }
24578    for (int i = 0; i < element.getSource().size(); i++) {
24579      composeReference(t, "SubstanceReferenceInformationGeneComponent", "source", element.getSource().get(i), i);
24580    }
24581  }
24582
24583  protected void composeSubstanceReferenceInformationGeneElementComponent(Complex parent, String parentType, String name, SubstanceReferenceInformation.SubstanceReferenceInformationGeneElementComponent element, int index) {
24584    if (element == null) 
24585      return;
24586    Complex t;
24587    if (Utilities.noString(parentType))
24588      t = parent;
24589    else {
24590      t = parent.predicate("fhir:"+parentType+'.'+name);
24591    }
24592    composeBackboneElement(t, "geneElement", name, element, index);
24593    if (element.hasType()) {
24594      composeCodeableConcept(t, "SubstanceReferenceInformationGeneElementComponent", "type", element.getType(), -1);
24595    }
24596    if (element.hasElement()) {
24597      composeIdentifier(t, "SubstanceReferenceInformationGeneElementComponent", "element", element.getElement(), -1);
24598    }
24599    for (int i = 0; i < element.getSource().size(); i++) {
24600      composeReference(t, "SubstanceReferenceInformationGeneElementComponent", "source", element.getSource().get(i), i);
24601    }
24602  }
24603
24604  protected void composeSubstanceReferenceInformationTargetComponent(Complex parent, String parentType, String name, SubstanceReferenceInformation.SubstanceReferenceInformationTargetComponent element, int index) {
24605    if (element == null) 
24606      return;
24607    Complex t;
24608    if (Utilities.noString(parentType))
24609      t = parent;
24610    else {
24611      t = parent.predicate("fhir:"+parentType+'.'+name);
24612    }
24613    composeBackboneElement(t, "target", name, element, index);
24614    if (element.hasTarget()) {
24615      composeIdentifier(t, "SubstanceReferenceInformationTargetComponent", "target", element.getTarget(), -1);
24616    }
24617    if (element.hasType()) {
24618      composeCodeableConcept(t, "SubstanceReferenceInformationTargetComponent", "type", element.getType(), -1);
24619    }
24620    if (element.hasInteraction()) {
24621      composeCodeableConcept(t, "SubstanceReferenceInformationTargetComponent", "interaction", element.getInteraction(), -1);
24622    }
24623    if (element.hasOrganism()) {
24624      composeCodeableConcept(t, "SubstanceReferenceInformationTargetComponent", "organism", element.getOrganism(), -1);
24625    }
24626    if (element.hasOrganismType()) {
24627      composeCodeableConcept(t, "SubstanceReferenceInformationTargetComponent", "organismType", element.getOrganismType(), -1);
24628    }
24629    if (element.hasAmount()) {
24630      composeType(t, "SubstanceReferenceInformationTargetComponent", "amount", element.getAmount(), -1);
24631    }
24632    if (element.hasAmountType()) {
24633      composeCodeableConcept(t, "SubstanceReferenceInformationTargetComponent", "amountType", element.getAmountType(), -1);
24634    }
24635    for (int i = 0; i < element.getSource().size(); i++) {
24636      composeReference(t, "SubstanceReferenceInformationTargetComponent", "source", element.getSource().get(i), i);
24637    }
24638  }
24639
24640  protected void composeSubstanceSourceMaterial(Complex parent, String parentType, String name, SubstanceSourceMaterial element, int index) {
24641    if (element == null) 
24642      return;
24643    Complex t;
24644    if (Utilities.noString(parentType))
24645      t = parent;
24646    else {
24647      t = parent.predicate("fhir:"+parentType+'.'+name);
24648    }
24649    composeDomainResource(t, "SubstanceSourceMaterial", name, element, index);
24650    if (element.hasSourceMaterialClass()) {
24651      composeCodeableConcept(t, "SubstanceSourceMaterial", "sourceMaterialClass", element.getSourceMaterialClass(), -1);
24652    }
24653    if (element.hasSourceMaterialType()) {
24654      composeCodeableConcept(t, "SubstanceSourceMaterial", "sourceMaterialType", element.getSourceMaterialType(), -1);
24655    }
24656    if (element.hasSourceMaterialState()) {
24657      composeCodeableConcept(t, "SubstanceSourceMaterial", "sourceMaterialState", element.getSourceMaterialState(), -1);
24658    }
24659    if (element.hasOrganismId()) {
24660      composeIdentifier(t, "SubstanceSourceMaterial", "organismId", element.getOrganismId(), -1);
24661    }
24662    if (element.hasOrganismNameElement()) {
24663      composeString(t, "SubstanceSourceMaterial", "organismName", element.getOrganismNameElement(), -1);
24664    }
24665    for (int i = 0; i < element.getParentSubstanceId().size(); i++) {
24666      composeIdentifier(t, "SubstanceSourceMaterial", "parentSubstanceId", element.getParentSubstanceId().get(i), i);
24667    }
24668    for (int i = 0; i < element.getParentSubstanceName().size(); i++) {
24669      composeString(t, "SubstanceSourceMaterial", "parentSubstanceName", element.getParentSubstanceName().get(i), i);
24670    }
24671    for (int i = 0; i < element.getCountryOfOrigin().size(); i++) {
24672      composeCodeableConcept(t, "SubstanceSourceMaterial", "countryOfOrigin", element.getCountryOfOrigin().get(i), i);
24673    }
24674    for (int i = 0; i < element.getGeographicalLocation().size(); i++) {
24675      composeString(t, "SubstanceSourceMaterial", "geographicalLocation", element.getGeographicalLocation().get(i), i);
24676    }
24677    if (element.hasDevelopmentStage()) {
24678      composeCodeableConcept(t, "SubstanceSourceMaterial", "developmentStage", element.getDevelopmentStage(), -1);
24679    }
24680    for (int i = 0; i < element.getFractionDescription().size(); i++) {
24681      composeSubstanceSourceMaterialFractionDescriptionComponent(t, "SubstanceSourceMaterial", "fractionDescription", element.getFractionDescription().get(i), i);
24682    }
24683    if (element.hasOrganism()) {
24684      composeSubstanceSourceMaterialOrganismComponent(t, "SubstanceSourceMaterial", "organism", element.getOrganism(), -1);
24685    }
24686    for (int i = 0; i < element.getPartDescription().size(); i++) {
24687      composeSubstanceSourceMaterialPartDescriptionComponent(t, "SubstanceSourceMaterial", "partDescription", element.getPartDescription().get(i), i);
24688    }
24689  }
24690
24691  protected void composeSubstanceSourceMaterialFractionDescriptionComponent(Complex parent, String parentType, String name, SubstanceSourceMaterial.SubstanceSourceMaterialFractionDescriptionComponent element, int index) {
24692    if (element == null) 
24693      return;
24694    Complex t;
24695    if (Utilities.noString(parentType))
24696      t = parent;
24697    else {
24698      t = parent.predicate("fhir:"+parentType+'.'+name);
24699    }
24700    composeBackboneElement(t, "fractionDescription", name, element, index);
24701    if (element.hasFractionElement()) {
24702      composeString(t, "SubstanceSourceMaterialFractionDescriptionComponent", "fraction", element.getFractionElement(), -1);
24703    }
24704    if (element.hasMaterialType()) {
24705      composeCodeableConcept(t, "SubstanceSourceMaterialFractionDescriptionComponent", "materialType", element.getMaterialType(), -1);
24706    }
24707  }
24708
24709  protected void composeSubstanceSourceMaterialOrganismComponent(Complex parent, String parentType, String name, SubstanceSourceMaterial.SubstanceSourceMaterialOrganismComponent element, int index) {
24710    if (element == null) 
24711      return;
24712    Complex t;
24713    if (Utilities.noString(parentType))
24714      t = parent;
24715    else {
24716      t = parent.predicate("fhir:"+parentType+'.'+name);
24717    }
24718    composeBackboneElement(t, "organism", name, element, index);
24719    if (element.hasFamily()) {
24720      composeCodeableConcept(t, "SubstanceSourceMaterialOrganismComponent", "family", element.getFamily(), -1);
24721    }
24722    if (element.hasGenus()) {
24723      composeCodeableConcept(t, "SubstanceSourceMaterialOrganismComponent", "genus", element.getGenus(), -1);
24724    }
24725    if (element.hasSpecies()) {
24726      composeCodeableConcept(t, "SubstanceSourceMaterialOrganismComponent", "species", element.getSpecies(), -1);
24727    }
24728    if (element.hasIntraspecificType()) {
24729      composeCodeableConcept(t, "SubstanceSourceMaterialOrganismComponent", "intraspecificType", element.getIntraspecificType(), -1);
24730    }
24731    if (element.hasIntraspecificDescriptionElement()) {
24732      composeString(t, "SubstanceSourceMaterialOrganismComponent", "intraspecificDescription", element.getIntraspecificDescriptionElement(), -1);
24733    }
24734    for (int i = 0; i < element.getAuthor().size(); i++) {
24735      composeSubstanceSourceMaterialOrganismAuthorComponent(t, "SubstanceSourceMaterialOrganismComponent", "author", element.getAuthor().get(i), i);
24736    }
24737    if (element.hasHybrid()) {
24738      composeSubstanceSourceMaterialOrganismHybridComponent(t, "SubstanceSourceMaterialOrganismComponent", "hybrid", element.getHybrid(), -1);
24739    }
24740    if (element.hasOrganismGeneral()) {
24741      composeSubstanceSourceMaterialOrganismOrganismGeneralComponent(t, "SubstanceSourceMaterialOrganismComponent", "organismGeneral", element.getOrganismGeneral(), -1);
24742    }
24743  }
24744
24745  protected void composeSubstanceSourceMaterialOrganismAuthorComponent(Complex parent, String parentType, String name, SubstanceSourceMaterial.SubstanceSourceMaterialOrganismAuthorComponent element, int index) {
24746    if (element == null) 
24747      return;
24748    Complex t;
24749    if (Utilities.noString(parentType))
24750      t = parent;
24751    else {
24752      t = parent.predicate("fhir:"+parentType+'.'+name);
24753    }
24754    composeBackboneElement(t, "author", name, element, index);
24755    if (element.hasAuthorType()) {
24756      composeCodeableConcept(t, "SubstanceSourceMaterialOrganismAuthorComponent", "authorType", element.getAuthorType(), -1);
24757    }
24758    if (element.hasAuthorDescriptionElement()) {
24759      composeString(t, "SubstanceSourceMaterialOrganismAuthorComponent", "authorDescription", element.getAuthorDescriptionElement(), -1);
24760    }
24761  }
24762
24763  protected void composeSubstanceSourceMaterialOrganismHybridComponent(Complex parent, String parentType, String name, SubstanceSourceMaterial.SubstanceSourceMaterialOrganismHybridComponent element, int index) {
24764    if (element == null) 
24765      return;
24766    Complex t;
24767    if (Utilities.noString(parentType))
24768      t = parent;
24769    else {
24770      t = parent.predicate("fhir:"+parentType+'.'+name);
24771    }
24772    composeBackboneElement(t, "hybrid", name, element, index);
24773    if (element.hasMaternalOrganismIdElement()) {
24774      composeString(t, "SubstanceSourceMaterialOrganismHybridComponent", "maternalOrganismId", element.getMaternalOrganismIdElement(), -1);
24775    }
24776    if (element.hasMaternalOrganismNameElement()) {
24777      composeString(t, "SubstanceSourceMaterialOrganismHybridComponent", "maternalOrganismName", element.getMaternalOrganismNameElement(), -1);
24778    }
24779    if (element.hasPaternalOrganismIdElement()) {
24780      composeString(t, "SubstanceSourceMaterialOrganismHybridComponent", "paternalOrganismId", element.getPaternalOrganismIdElement(), -1);
24781    }
24782    if (element.hasPaternalOrganismNameElement()) {
24783      composeString(t, "SubstanceSourceMaterialOrganismHybridComponent", "paternalOrganismName", element.getPaternalOrganismNameElement(), -1);
24784    }
24785    if (element.hasHybridType()) {
24786      composeCodeableConcept(t, "SubstanceSourceMaterialOrganismHybridComponent", "hybridType", element.getHybridType(), -1);
24787    }
24788  }
24789
24790  protected void composeSubstanceSourceMaterialOrganismOrganismGeneralComponent(Complex parent, String parentType, String name, SubstanceSourceMaterial.SubstanceSourceMaterialOrganismOrganismGeneralComponent element, int index) {
24791    if (element == null) 
24792      return;
24793    Complex t;
24794    if (Utilities.noString(parentType))
24795      t = parent;
24796    else {
24797      t = parent.predicate("fhir:"+parentType+'.'+name);
24798    }
24799    composeBackboneElement(t, "organismGeneral", name, element, index);
24800    if (element.hasKingdom()) {
24801      composeCodeableConcept(t, "SubstanceSourceMaterialOrganismOrganismGeneralComponent", "kingdom", element.getKingdom(), -1);
24802    }
24803    if (element.hasPhylum()) {
24804      composeCodeableConcept(t, "SubstanceSourceMaterialOrganismOrganismGeneralComponent", "phylum", element.getPhylum(), -1);
24805    }
24806    if (element.hasClass_()) {
24807      composeCodeableConcept(t, "SubstanceSourceMaterialOrganismOrganismGeneralComponent", "class", element.getClass_(), -1);
24808    }
24809    if (element.hasOrder()) {
24810      composeCodeableConcept(t, "SubstanceSourceMaterialOrganismOrganismGeneralComponent", "order", element.getOrder(), -1);
24811    }
24812  }
24813
24814  protected void composeSubstanceSourceMaterialPartDescriptionComponent(Complex parent, String parentType, String name, SubstanceSourceMaterial.SubstanceSourceMaterialPartDescriptionComponent element, int index) {
24815    if (element == null) 
24816      return;
24817    Complex t;
24818    if (Utilities.noString(parentType))
24819      t = parent;
24820    else {
24821      t = parent.predicate("fhir:"+parentType+'.'+name);
24822    }
24823    composeBackboneElement(t, "partDescription", name, element, index);
24824    if (element.hasPart()) {
24825      composeCodeableConcept(t, "SubstanceSourceMaterialPartDescriptionComponent", "part", element.getPart(), -1);
24826    }
24827    if (element.hasPartLocation()) {
24828      composeCodeableConcept(t, "SubstanceSourceMaterialPartDescriptionComponent", "partLocation", element.getPartLocation(), -1);
24829    }
24830  }
24831
24832  protected void composeSupplyDelivery(Complex parent, String parentType, String name, SupplyDelivery element, int index) {
24833    if (element == null) 
24834      return;
24835    Complex t;
24836    if (Utilities.noString(parentType))
24837      t = parent;
24838    else {
24839      t = parent.predicate("fhir:"+parentType+'.'+name);
24840    }
24841    composeDomainResource(t, "SupplyDelivery", name, element, index);
24842    for (int i = 0; i < element.getIdentifier().size(); i++) {
24843      composeIdentifier(t, "SupplyDelivery", "identifier", element.getIdentifier().get(i), i);
24844    }
24845    for (int i = 0; i < element.getBasedOn().size(); i++) {
24846      composeReference(t, "SupplyDelivery", "basedOn", element.getBasedOn().get(i), i);
24847    }
24848    for (int i = 0; i < element.getPartOf().size(); i++) {
24849      composeReference(t, "SupplyDelivery", "partOf", element.getPartOf().get(i), i);
24850    }
24851    if (element.hasStatusElement()) {
24852      composeEnum(t, "SupplyDelivery", "status", element.getStatusElement(), -1);
24853    }
24854    if (element.hasPatient()) {
24855      composeReference(t, "SupplyDelivery", "patient", element.getPatient(), -1);
24856    }
24857    if (element.hasType()) {
24858      composeCodeableConcept(t, "SupplyDelivery", "type", element.getType(), -1);
24859    }
24860    for (int i = 0; i < element.getSuppliedItem().size(); i++) {
24861      composeSupplyDeliverySuppliedItemComponent(t, "SupplyDelivery", "suppliedItem", element.getSuppliedItem().get(i), i);
24862    }
24863    if (element.hasOccurrence()) {
24864      composeType(t, "SupplyDelivery", "occurrence", element.getOccurrence(), -1);
24865    }
24866    if (element.hasSupplier()) {
24867      composeReference(t, "SupplyDelivery", "supplier", element.getSupplier(), -1);
24868    }
24869    if (element.hasDestination()) {
24870      composeReference(t, "SupplyDelivery", "destination", element.getDestination(), -1);
24871    }
24872    for (int i = 0; i < element.getReceiver().size(); i++) {
24873      composeReference(t, "SupplyDelivery", "receiver", element.getReceiver().get(i), i);
24874    }
24875  }
24876
24877  protected void composeSupplyDeliverySuppliedItemComponent(Complex parent, String parentType, String name, SupplyDelivery.SupplyDeliverySuppliedItemComponent element, int index) {
24878    if (element == null) 
24879      return;
24880    Complex t;
24881    if (Utilities.noString(parentType))
24882      t = parent;
24883    else {
24884      t = parent.predicate("fhir:"+parentType+'.'+name);
24885    }
24886    composeBackboneElement(t, "suppliedItem", name, element, index);
24887    if (element.hasQuantity()) {
24888      composeQuantity(t, "SupplyDeliverySuppliedItemComponent", "quantity", element.getQuantity(), -1);
24889    }
24890    if (element.hasItem()) {
24891      composeType(t, "SupplyDeliverySuppliedItemComponent", "item", element.getItem(), -1);
24892    }
24893  }
24894
24895  protected void composeSupplyRequest(Complex parent, String parentType, String name, SupplyRequest element, int index) {
24896    if (element == null) 
24897      return;
24898    Complex t;
24899    if (Utilities.noString(parentType))
24900      t = parent;
24901    else {
24902      t = parent.predicate("fhir:"+parentType+'.'+name);
24903    }
24904    composeDomainResource(t, "SupplyRequest", name, element, index);
24905    for (int i = 0; i < element.getIdentifier().size(); i++) {
24906      composeIdentifier(t, "SupplyRequest", "identifier", element.getIdentifier().get(i), i);
24907    }
24908    if (element.hasStatusElement()) {
24909      composeEnum(t, "SupplyRequest", "status", element.getStatusElement(), -1);
24910    }
24911    for (int i = 0; i < element.getBasedOn().size(); i++) {
24912      composeReference(t, "SupplyRequest", "basedOn", element.getBasedOn().get(i), i);
24913    }
24914    if (element.hasCategory()) {
24915      composeCodeableConcept(t, "SupplyRequest", "category", element.getCategory(), -1);
24916    }
24917    if (element.hasPriorityElement()) {
24918      composeEnum(t, "SupplyRequest", "priority", element.getPriorityElement(), -1);
24919    }
24920    if (element.hasDeliverFor()) {
24921      composeReference(t, "SupplyRequest", "deliverFor", element.getDeliverFor(), -1);
24922    }
24923    if (element.hasItem()) {
24924      composeCodeableReference(t, "SupplyRequest", "item", element.getItem(), -1);
24925    }
24926    if (element.hasQuantity()) {
24927      composeQuantity(t, "SupplyRequest", "quantity", element.getQuantity(), -1);
24928    }
24929    for (int i = 0; i < element.getParameter().size(); i++) {
24930      composeSupplyRequestParameterComponent(t, "SupplyRequest", "parameter", element.getParameter().get(i), i);
24931    }
24932    if (element.hasOccurrence()) {
24933      composeType(t, "SupplyRequest", "occurrence", element.getOccurrence(), -1);
24934    }
24935    if (element.hasAuthoredOnElement()) {
24936      composeDateTime(t, "SupplyRequest", "authoredOn", element.getAuthoredOnElement(), -1);
24937    }
24938    if (element.hasRequester()) {
24939      composeReference(t, "SupplyRequest", "requester", element.getRequester(), -1);
24940    }
24941    for (int i = 0; i < element.getSupplier().size(); i++) {
24942      composeReference(t, "SupplyRequest", "supplier", element.getSupplier().get(i), i);
24943    }
24944    for (int i = 0; i < element.getReason().size(); i++) {
24945      composeCodeableReference(t, "SupplyRequest", "reason", element.getReason().get(i), i);
24946    }
24947    if (element.hasDeliverFrom()) {
24948      composeReference(t, "SupplyRequest", "deliverFrom", element.getDeliverFrom(), -1);
24949    }
24950    if (element.hasDeliverTo()) {
24951      composeReference(t, "SupplyRequest", "deliverTo", element.getDeliverTo(), -1);
24952    }
24953  }
24954
24955  protected void composeSupplyRequestParameterComponent(Complex parent, String parentType, String name, SupplyRequest.SupplyRequestParameterComponent element, int index) {
24956    if (element == null) 
24957      return;
24958    Complex t;
24959    if (Utilities.noString(parentType))
24960      t = parent;
24961    else {
24962      t = parent.predicate("fhir:"+parentType+'.'+name);
24963    }
24964    composeBackboneElement(t, "parameter", name, element, index);
24965    if (element.hasCode()) {
24966      composeCodeableConcept(t, "SupplyRequestParameterComponent", "code", element.getCode(), -1);
24967    }
24968    if (element.hasValue()) {
24969      composeType(t, "SupplyRequestParameterComponent", "value", element.getValue(), -1);
24970    }
24971  }
24972
24973  protected void composeTask(Complex parent, String parentType, String name, Task element, int index) {
24974    if (element == null) 
24975      return;
24976    Complex t;
24977    if (Utilities.noString(parentType))
24978      t = parent;
24979    else {
24980      t = parent.predicate("fhir:"+parentType+'.'+name);
24981    }
24982    composeDomainResource(t, "Task", name, element, index);
24983    for (int i = 0; i < element.getIdentifier().size(); i++) {
24984      composeIdentifier(t, "Task", "identifier", element.getIdentifier().get(i), i);
24985    }
24986    if (element.hasInstantiatesCanonicalElement()) {
24987      composeCanonical(t, "Task", "instantiatesCanonical", element.getInstantiatesCanonicalElement(), -1);
24988    }
24989    if (element.hasInstantiatesUriElement()) {
24990      composeUri(t, "Task", "instantiatesUri", element.getInstantiatesUriElement(), -1);
24991    }
24992    for (int i = 0; i < element.getBasedOn().size(); i++) {
24993      composeReference(t, "Task", "basedOn", element.getBasedOn().get(i), i);
24994    }
24995    if (element.hasGroupIdentifier()) {
24996      composeIdentifier(t, "Task", "groupIdentifier", element.getGroupIdentifier(), -1);
24997    }
24998    for (int i = 0; i < element.getPartOf().size(); i++) {
24999      composeReference(t, "Task", "partOf", element.getPartOf().get(i), i);
25000    }
25001    if (element.hasStatusElement()) {
25002      composeEnum(t, "Task", "status", element.getStatusElement(), -1);
25003    }
25004    if (element.hasStatusReason()) {
25005      composeCodeableReference(t, "Task", "statusReason", element.getStatusReason(), -1);
25006    }
25007    if (element.hasBusinessStatus()) {
25008      composeCodeableConcept(t, "Task", "businessStatus", element.getBusinessStatus(), -1);
25009    }
25010    if (element.hasIntentElement()) {
25011      composeEnum(t, "Task", "intent", element.getIntentElement(), -1);
25012    }
25013    if (element.hasPriorityElement()) {
25014      composeEnum(t, "Task", "priority", element.getPriorityElement(), -1);
25015    }
25016    if (element.hasDoNotPerformElement()) {
25017      composeBoolean(t, "Task", "doNotPerform", element.getDoNotPerformElement(), -1);
25018    }
25019    if (element.hasCode()) {
25020      composeCodeableConcept(t, "Task", "code", element.getCode(), -1);
25021    }
25022    if (element.hasDescriptionElement()) {
25023      composeString(t, "Task", "description", element.getDescriptionElement(), -1);
25024    }
25025    if (element.hasFocus()) {
25026      composeReference(t, "Task", "focus", element.getFocus(), -1);
25027    }
25028    if (element.hasFor()) {
25029      composeReference(t, "Task", "for", element.getFor(), -1);
25030    }
25031    if (element.hasEncounter()) {
25032      composeReference(t, "Task", "encounter", element.getEncounter(), -1);
25033    }
25034    if (element.hasRequestedPeriod()) {
25035      composePeriod(t, "Task", "requestedPeriod", element.getRequestedPeriod(), -1);
25036    }
25037    if (element.hasExecutionPeriod()) {
25038      composePeriod(t, "Task", "executionPeriod", element.getExecutionPeriod(), -1);
25039    }
25040    if (element.hasAuthoredOnElement()) {
25041      composeDateTime(t, "Task", "authoredOn", element.getAuthoredOnElement(), -1);
25042    }
25043    if (element.hasLastModifiedElement()) {
25044      composeDateTime(t, "Task", "lastModified", element.getLastModifiedElement(), -1);
25045    }
25046    if (element.hasRequester()) {
25047      composeReference(t, "Task", "requester", element.getRequester(), -1);
25048    }
25049    for (int i = 0; i < element.getRequestedPerformer().size(); i++) {
25050      composeCodeableReference(t, "Task", "requestedPerformer", element.getRequestedPerformer().get(i), i);
25051    }
25052    if (element.hasOwner()) {
25053      composeReference(t, "Task", "owner", element.getOwner(), -1);
25054    }
25055    if (element.hasLocation()) {
25056      composeReference(t, "Task", "location", element.getLocation(), -1);
25057    }
25058    for (int i = 0; i < element.getReason().size(); i++) {
25059      composeCodeableReference(t, "Task", "reason", element.getReason().get(i), i);
25060    }
25061    for (int i = 0; i < element.getInsurance().size(); i++) {
25062      composeReference(t, "Task", "insurance", element.getInsurance().get(i), i);
25063    }
25064    for (int i = 0; i < element.getNote().size(); i++) {
25065      composeAnnotation(t, "Task", "note", element.getNote().get(i), i);
25066    }
25067    for (int i = 0; i < element.getRelevantHistory().size(); i++) {
25068      composeReference(t, "Task", "relevantHistory", element.getRelevantHistory().get(i), i);
25069    }
25070    if (element.hasRestriction()) {
25071      composeTaskRestrictionComponent(t, "Task", "restriction", element.getRestriction(), -1);
25072    }
25073    for (int i = 0; i < element.getInput().size(); i++) {
25074      composeTaskInputComponent(t, "Task", "input", element.getInput().get(i), i);
25075    }
25076    for (int i = 0; i < element.getOutput().size(); i++) {
25077      composeTaskOutputComponent(t, "Task", "output", element.getOutput().get(i), i);
25078    }
25079  }
25080
25081  protected void composeTaskRestrictionComponent(Complex parent, String parentType, String name, Task.TaskRestrictionComponent element, int index) {
25082    if (element == null) 
25083      return;
25084    Complex t;
25085    if (Utilities.noString(parentType))
25086      t = parent;
25087    else {
25088      t = parent.predicate("fhir:"+parentType+'.'+name);
25089    }
25090    composeBackboneElement(t, "restriction", name, element, index);
25091    if (element.hasRepetitionsElement()) {
25092      composePositiveInt(t, "TaskRestrictionComponent", "repetitions", element.getRepetitionsElement(), -1);
25093    }
25094    if (element.hasPeriod()) {
25095      composePeriod(t, "TaskRestrictionComponent", "period", element.getPeriod(), -1);
25096    }
25097    for (int i = 0; i < element.getRecipient().size(); i++) {
25098      composeReference(t, "TaskRestrictionComponent", "recipient", element.getRecipient().get(i), i);
25099    }
25100  }
25101
25102  protected void composeTaskInputComponent(Complex parent, String parentType, String name, Task.TaskInputComponent element, int index) {
25103    if (element == null) 
25104      return;
25105    Complex t;
25106    if (Utilities.noString(parentType))
25107      t = parent;
25108    else {
25109      t = parent.predicate("fhir:"+parentType+'.'+name);
25110    }
25111    composeBackboneElement(t, "input", name, element, index);
25112    if (element.hasType()) {
25113      composeCodeableConcept(t, "TaskInputComponent", "type", element.getType(), -1);
25114    }
25115    if (element.hasValue()) {
25116      composeType(t, "TaskInputComponent", "value", element.getValue(), -1);
25117    }
25118  }
25119
25120  protected void composeTaskOutputComponent(Complex parent, String parentType, String name, Task.TaskOutputComponent element, int index) {
25121    if (element == null) 
25122      return;
25123    Complex t;
25124    if (Utilities.noString(parentType))
25125      t = parent;
25126    else {
25127      t = parent.predicate("fhir:"+parentType+'.'+name);
25128    }
25129    composeBackboneElement(t, "output", name, element, index);
25130    if (element.hasType()) {
25131      composeCodeableConcept(t, "TaskOutputComponent", "type", element.getType(), -1);
25132    }
25133    if (element.hasValue()) {
25134      composeType(t, "TaskOutputComponent", "value", element.getValue(), -1);
25135    }
25136  }
25137
25138  protected void composeTerminologyCapabilities(Complex parent, String parentType, String name, TerminologyCapabilities element, int index) {
25139    if (element == null) 
25140      return;
25141    Complex t;
25142    if (Utilities.noString(parentType))
25143      t = parent;
25144    else {
25145      t = parent.predicate("fhir:"+parentType+'.'+name);
25146    }
25147    composeCanonicalResource(t, "TerminologyCapabilities", name, element, index);
25148    if (element.hasUrlElement()) {
25149      composeUri(t, "TerminologyCapabilities", "url", element.getUrlElement(), -1);
25150    }
25151    for (int i = 0; i < element.getIdentifier().size(); i++) {
25152      composeIdentifier(t, "TerminologyCapabilities", "identifier", element.getIdentifier().get(i), i);
25153    }
25154    if (element.hasVersionElement()) {
25155      composeString(t, "TerminologyCapabilities", "version", element.getVersionElement(), -1);
25156    }
25157    if (element.hasNameElement()) {
25158      composeString(t, "TerminologyCapabilities", "name", element.getNameElement(), -1);
25159    }
25160    if (element.hasTitleElement()) {
25161      composeString(t, "TerminologyCapabilities", "title", element.getTitleElement(), -1);
25162    }
25163    if (element.hasStatusElement()) {
25164      composeEnum(t, "TerminologyCapabilities", "status", element.getStatusElement(), -1);
25165    }
25166    if (element.hasExperimentalElement()) {
25167      composeBoolean(t, "TerminologyCapabilities", "experimental", element.getExperimentalElement(), -1);
25168    }
25169    if (element.hasDateElement()) {
25170      composeDateTime(t, "TerminologyCapabilities", "date", element.getDateElement(), -1);
25171    }
25172    if (element.hasPublisherElement()) {
25173      composeString(t, "TerminologyCapabilities", "publisher", element.getPublisherElement(), -1);
25174    }
25175    for (int i = 0; i < element.getContact().size(); i++) {
25176      composeContactDetail(t, "TerminologyCapabilities", "contact", element.getContact().get(i), i);
25177    }
25178    if (element.hasDescriptionElement()) {
25179      composeMarkdown(t, "TerminologyCapabilities", "description", element.getDescriptionElement(), -1);
25180    }
25181    for (int i = 0; i < element.getUseContext().size(); i++) {
25182      composeUsageContext(t, "TerminologyCapabilities", "useContext", element.getUseContext().get(i), i);
25183    }
25184    for (int i = 0; i < element.getJurisdiction().size(); i++) {
25185      composeCodeableConcept(t, "TerminologyCapabilities", "jurisdiction", element.getJurisdiction().get(i), i);
25186    }
25187    if (element.hasPurposeElement()) {
25188      composeMarkdown(t, "TerminologyCapabilities", "purpose", element.getPurposeElement(), -1);
25189    }
25190    if (element.hasCopyrightElement()) {
25191      composeMarkdown(t, "TerminologyCapabilities", "copyright", element.getCopyrightElement(), -1);
25192    }
25193    if (element.hasKindElement()) {
25194      composeEnum(t, "TerminologyCapabilities", "kind", element.getKindElement(), -1);
25195    }
25196    if (element.hasSoftware()) {
25197      composeTerminologyCapabilitiesSoftwareComponent(t, "TerminologyCapabilities", "software", element.getSoftware(), -1);
25198    }
25199    if (element.hasImplementation()) {
25200      composeTerminologyCapabilitiesImplementationComponent(t, "TerminologyCapabilities", "implementation", element.getImplementation(), -1);
25201    }
25202    if (element.hasLockedDateElement()) {
25203      composeBoolean(t, "TerminologyCapabilities", "lockedDate", element.getLockedDateElement(), -1);
25204    }
25205    for (int i = 0; i < element.getCodeSystem().size(); i++) {
25206      composeTerminologyCapabilitiesCodeSystemComponent(t, "TerminologyCapabilities", "codeSystem", element.getCodeSystem().get(i), i);
25207    }
25208    if (element.hasExpansion()) {
25209      composeTerminologyCapabilitiesExpansionComponent(t, "TerminologyCapabilities", "expansion", element.getExpansion(), -1);
25210    }
25211    if (element.hasCodeSearchElement()) {
25212      composeEnum(t, "TerminologyCapabilities", "codeSearch", element.getCodeSearchElement(), -1);
25213    }
25214    if (element.hasValidateCode()) {
25215      composeTerminologyCapabilitiesValidateCodeComponent(t, "TerminologyCapabilities", "validateCode", element.getValidateCode(), -1);
25216    }
25217    if (element.hasTranslation()) {
25218      composeTerminologyCapabilitiesTranslationComponent(t, "TerminologyCapabilities", "translation", element.getTranslation(), -1);
25219    }
25220    if (element.hasClosure()) {
25221      composeTerminologyCapabilitiesClosureComponent(t, "TerminologyCapabilities", "closure", element.getClosure(), -1);
25222    }
25223  }
25224
25225  protected void composeTerminologyCapabilitiesSoftwareComponent(Complex parent, String parentType, String name, TerminologyCapabilities.TerminologyCapabilitiesSoftwareComponent element, int index) {
25226    if (element == null) 
25227      return;
25228    Complex t;
25229    if (Utilities.noString(parentType))
25230      t = parent;
25231    else {
25232      t = parent.predicate("fhir:"+parentType+'.'+name);
25233    }
25234    composeBackboneElement(t, "software", name, element, index);
25235    if (element.hasNameElement()) {
25236      composeString(t, "TerminologyCapabilitiesSoftwareComponent", "name", element.getNameElement(), -1);
25237    }
25238    if (element.hasVersionElement()) {
25239      composeString(t, "TerminologyCapabilitiesSoftwareComponent", "version", element.getVersionElement(), -1);
25240    }
25241  }
25242
25243  protected void composeTerminologyCapabilitiesImplementationComponent(Complex parent, String parentType, String name, TerminologyCapabilities.TerminologyCapabilitiesImplementationComponent element, int index) {
25244    if (element == null) 
25245      return;
25246    Complex t;
25247    if (Utilities.noString(parentType))
25248      t = parent;
25249    else {
25250      t = parent.predicate("fhir:"+parentType+'.'+name);
25251    }
25252    composeBackboneElement(t, "implementation", name, element, index);
25253    if (element.hasDescriptionElement()) {
25254      composeString(t, "TerminologyCapabilitiesImplementationComponent", "description", element.getDescriptionElement(), -1);
25255    }
25256    if (element.hasUrlElement()) {
25257      composeUrl(t, "TerminologyCapabilitiesImplementationComponent", "url", element.getUrlElement(), -1);
25258    }
25259  }
25260
25261  protected void composeTerminologyCapabilitiesCodeSystemComponent(Complex parent, String parentType, String name, TerminologyCapabilities.TerminologyCapabilitiesCodeSystemComponent element, int index) {
25262    if (element == null) 
25263      return;
25264    Complex t;
25265    if (Utilities.noString(parentType))
25266      t = parent;
25267    else {
25268      t = parent.predicate("fhir:"+parentType+'.'+name);
25269    }
25270    composeBackboneElement(t, "codeSystem", name, element, index);
25271    if (element.hasUriElement()) {
25272      composeCanonical(t, "TerminologyCapabilitiesCodeSystemComponent", "uri", element.getUriElement(), -1);
25273    }
25274    for (int i = 0; i < element.getVersion().size(); i++) {
25275      composeTerminologyCapabilitiesCodeSystemVersionComponent(t, "TerminologyCapabilitiesCodeSystemComponent", "version", element.getVersion().get(i), i);
25276    }
25277    if (element.hasContentElement()) {
25278      composeCode(t, "TerminologyCapabilitiesCodeSystemComponent", "content", element.getContentElement(), -1);
25279    }
25280    if (element.hasSubsumptionElement()) {
25281      composeBoolean(t, "TerminologyCapabilitiesCodeSystemComponent", "subsumption", element.getSubsumptionElement(), -1);
25282    }
25283  }
25284
25285  protected void composeTerminologyCapabilitiesCodeSystemVersionComponent(Complex parent, String parentType, String name, TerminologyCapabilities.TerminologyCapabilitiesCodeSystemVersionComponent element, int index) {
25286    if (element == null) 
25287      return;
25288    Complex t;
25289    if (Utilities.noString(parentType))
25290      t = parent;
25291    else {
25292      t = parent.predicate("fhir:"+parentType+'.'+name);
25293    }
25294    composeBackboneElement(t, "version", name, element, index);
25295    if (element.hasCodeElement()) {
25296      composeString(t, "TerminologyCapabilitiesCodeSystemVersionComponent", "code", element.getCodeElement(), -1);
25297    }
25298    if (element.hasIsDefaultElement()) {
25299      composeBoolean(t, "TerminologyCapabilitiesCodeSystemVersionComponent", "isDefault", element.getIsDefaultElement(), -1);
25300    }
25301    if (element.hasCompositionalElement()) {
25302      composeBoolean(t, "TerminologyCapabilitiesCodeSystemVersionComponent", "compositional", element.getCompositionalElement(), -1);
25303    }
25304    for (int i = 0; i < element.getLanguage().size(); i++) {
25305      composeEnum(t, "TerminologyCapabilitiesCodeSystemVersionComponent", "language", element.getLanguage().get(i), i);
25306    }
25307    for (int i = 0; i < element.getFilter().size(); i++) {
25308      composeTerminologyCapabilitiesCodeSystemVersionFilterComponent(t, "TerminologyCapabilitiesCodeSystemVersionComponent", "filter", element.getFilter().get(i), i);
25309    }
25310    for (int i = 0; i < element.getProperty().size(); i++) {
25311      composeCode(t, "TerminologyCapabilitiesCodeSystemVersionComponent", "property", element.getProperty().get(i), i);
25312    }
25313  }
25314
25315  protected void composeTerminologyCapabilitiesCodeSystemVersionFilterComponent(Complex parent, String parentType, String name, TerminologyCapabilities.TerminologyCapabilitiesCodeSystemVersionFilterComponent element, int index) {
25316    if (element == null) 
25317      return;
25318    Complex t;
25319    if (Utilities.noString(parentType))
25320      t = parent;
25321    else {
25322      t = parent.predicate("fhir:"+parentType+'.'+name);
25323    }
25324    composeBackboneElement(t, "filter", name, element, index);
25325    if (element.hasCodeElement()) {
25326      composeCode(t, "TerminologyCapabilitiesCodeSystemVersionFilterComponent", "code", element.getCodeElement(), -1);
25327    }
25328    for (int i = 0; i < element.getOp().size(); i++) {
25329      composeCode(t, "TerminologyCapabilitiesCodeSystemVersionFilterComponent", "op", element.getOp().get(i), i);
25330    }
25331  }
25332
25333  protected void composeTerminologyCapabilitiesExpansionComponent(Complex parent, String parentType, String name, TerminologyCapabilities.TerminologyCapabilitiesExpansionComponent element, int index) {
25334    if (element == null) 
25335      return;
25336    Complex t;
25337    if (Utilities.noString(parentType))
25338      t = parent;
25339    else {
25340      t = parent.predicate("fhir:"+parentType+'.'+name);
25341    }
25342    composeBackboneElement(t, "expansion", name, element, index);
25343    if (element.hasHierarchicalElement()) {
25344      composeBoolean(t, "TerminologyCapabilitiesExpansionComponent", "hierarchical", element.getHierarchicalElement(), -1);
25345    }
25346    if (element.hasPagingElement()) {
25347      composeBoolean(t, "TerminologyCapabilitiesExpansionComponent", "paging", element.getPagingElement(), -1);
25348    }
25349    if (element.hasIncompleteElement()) {
25350      composeBoolean(t, "TerminologyCapabilitiesExpansionComponent", "incomplete", element.getIncompleteElement(), -1);
25351    }
25352    for (int i = 0; i < element.getParameter().size(); i++) {
25353      composeTerminologyCapabilitiesExpansionParameterComponent(t, "TerminologyCapabilitiesExpansionComponent", "parameter", element.getParameter().get(i), i);
25354    }
25355    if (element.hasTextFilterElement()) {
25356      composeMarkdown(t, "TerminologyCapabilitiesExpansionComponent", "textFilter", element.getTextFilterElement(), -1);
25357    }
25358  }
25359
25360  protected void composeTerminologyCapabilitiesExpansionParameterComponent(Complex parent, String parentType, String name, TerminologyCapabilities.TerminologyCapabilitiesExpansionParameterComponent element, int index) {
25361    if (element == null) 
25362      return;
25363    Complex t;
25364    if (Utilities.noString(parentType))
25365      t = parent;
25366    else {
25367      t = parent.predicate("fhir:"+parentType+'.'+name);
25368    }
25369    composeBackboneElement(t, "parameter", name, element, index);
25370    if (element.hasNameElement()) {
25371      composeCode(t, "TerminologyCapabilitiesExpansionParameterComponent", "name", element.getNameElement(), -1);
25372    }
25373    if (element.hasDocumentationElement()) {
25374      composeString(t, "TerminologyCapabilitiesExpansionParameterComponent", "documentation", element.getDocumentationElement(), -1);
25375    }
25376  }
25377
25378  protected void composeTerminologyCapabilitiesValidateCodeComponent(Complex parent, String parentType, String name, TerminologyCapabilities.TerminologyCapabilitiesValidateCodeComponent element, int index) {
25379    if (element == null) 
25380      return;
25381    Complex t;
25382    if (Utilities.noString(parentType))
25383      t = parent;
25384    else {
25385      t = parent.predicate("fhir:"+parentType+'.'+name);
25386    }
25387    composeBackboneElement(t, "validateCode", name, element, index);
25388    if (element.hasTranslationsElement()) {
25389      composeBoolean(t, "TerminologyCapabilitiesValidateCodeComponent", "translations", element.getTranslationsElement(), -1);
25390    }
25391  }
25392
25393  protected void composeTerminologyCapabilitiesTranslationComponent(Complex parent, String parentType, String name, TerminologyCapabilities.TerminologyCapabilitiesTranslationComponent element, int index) {
25394    if (element == null) 
25395      return;
25396    Complex t;
25397    if (Utilities.noString(parentType))
25398      t = parent;
25399    else {
25400      t = parent.predicate("fhir:"+parentType+'.'+name);
25401    }
25402    composeBackboneElement(t, "translation", name, element, index);
25403    if (element.hasNeedsMapElement()) {
25404      composeBoolean(t, "TerminologyCapabilitiesTranslationComponent", "needsMap", element.getNeedsMapElement(), -1);
25405    }
25406  }
25407
25408  protected void composeTerminologyCapabilitiesClosureComponent(Complex parent, String parentType, String name, TerminologyCapabilities.TerminologyCapabilitiesClosureComponent element, int index) {
25409    if (element == null) 
25410      return;
25411    Complex t;
25412    if (Utilities.noString(parentType))
25413      t = parent;
25414    else {
25415      t = parent.predicate("fhir:"+parentType+'.'+name);
25416    }
25417    composeBackboneElement(t, "closure", name, element, index);
25418    if (element.hasTranslationElement()) {
25419      composeBoolean(t, "TerminologyCapabilitiesClosureComponent", "translation", element.getTranslationElement(), -1);
25420    }
25421  }
25422
25423  protected void composeTestReport(Complex parent, String parentType, String name, TestReport element, int index) {
25424    if (element == null) 
25425      return;
25426    Complex t;
25427    if (Utilities.noString(parentType))
25428      t = parent;
25429    else {
25430      t = parent.predicate("fhir:"+parentType+'.'+name);
25431    }
25432    composeDomainResource(t, "TestReport", name, element, index);
25433    if (element.hasIdentifier()) {
25434      composeIdentifier(t, "TestReport", "identifier", element.getIdentifier(), -1);
25435    }
25436    if (element.hasNameElement()) {
25437      composeString(t, "TestReport", "name", element.getNameElement(), -1);
25438    }
25439    if (element.hasStatusElement()) {
25440      composeEnum(t, "TestReport", "status", element.getStatusElement(), -1);
25441    }
25442    if (element.hasTestScriptElement()) {
25443      composeCanonical(t, "TestReport", "testScript", element.getTestScriptElement(), -1);
25444    }
25445    if (element.hasResultElement()) {
25446      composeEnum(t, "TestReport", "result", element.getResultElement(), -1);
25447    }
25448    if (element.hasScoreElement()) {
25449      composeDecimal(t, "TestReport", "score", element.getScoreElement(), -1);
25450    }
25451    if (element.hasTesterElement()) {
25452      composeString(t, "TestReport", "tester", element.getTesterElement(), -1);
25453    }
25454    if (element.hasIssuedElement()) {
25455      composeDateTime(t, "TestReport", "issued", element.getIssuedElement(), -1);
25456    }
25457    for (int i = 0; i < element.getParticipant().size(); i++) {
25458      composeTestReportParticipantComponent(t, "TestReport", "participant", element.getParticipant().get(i), i);
25459    }
25460    if (element.hasSetup()) {
25461      composeTestReportSetupComponent(t, "TestReport", "setup", element.getSetup(), -1);
25462    }
25463    for (int i = 0; i < element.getTest().size(); i++) {
25464      composeTestReportTestComponent(t, "TestReport", "test", element.getTest().get(i), i);
25465    }
25466    if (element.hasTeardown()) {
25467      composeTestReportTeardownComponent(t, "TestReport", "teardown", element.getTeardown(), -1);
25468    }
25469  }
25470
25471  protected void composeTestReportParticipantComponent(Complex parent, String parentType, String name, TestReport.TestReportParticipantComponent element, int index) {
25472    if (element == null) 
25473      return;
25474    Complex t;
25475    if (Utilities.noString(parentType))
25476      t = parent;
25477    else {
25478      t = parent.predicate("fhir:"+parentType+'.'+name);
25479    }
25480    composeBackboneElement(t, "participant", name, element, index);
25481    if (element.hasTypeElement()) {
25482      composeEnum(t, "TestReportParticipantComponent", "type", element.getTypeElement(), -1);
25483    }
25484    if (element.hasUriElement()) {
25485      composeUri(t, "TestReportParticipantComponent", "uri", element.getUriElement(), -1);
25486    }
25487    if (element.hasDisplayElement()) {
25488      composeString(t, "TestReportParticipantComponent", "display", element.getDisplayElement(), -1);
25489    }
25490  }
25491
25492  protected void composeTestReportSetupComponent(Complex parent, String parentType, String name, TestReport.TestReportSetupComponent element, int index) {
25493    if (element == null) 
25494      return;
25495    Complex t;
25496    if (Utilities.noString(parentType))
25497      t = parent;
25498    else {
25499      t = parent.predicate("fhir:"+parentType+'.'+name);
25500    }
25501    composeBackboneElement(t, "setup", name, element, index);
25502    for (int i = 0; i < element.getAction().size(); i++) {
25503      composeTestReportSetupActionComponent(t, "TestReportSetupComponent", "action", element.getAction().get(i), i);
25504    }
25505  }
25506
25507  protected void composeTestReportSetupActionComponent(Complex parent, String parentType, String name, TestReport.SetupActionComponent element, int index) {
25508    if (element == null) 
25509      return;
25510    Complex t;
25511    if (Utilities.noString(parentType))
25512      t = parent;
25513    else {
25514      t = parent.predicate("fhir:"+parentType+'.'+name);
25515    }
25516    composeBackboneElement(t, "action", name, element, index);
25517    if (element.hasOperation()) {
25518      composeTestReportSetupActionOperationComponent(t, "SetupActionComponent", "operation", element.getOperation(), -1);
25519    }
25520    if (element.hasAssert()) {
25521      composeTestReportSetupActionAssertComponent(t, "SetupActionComponent", "assert", element.getAssert(), -1);
25522    }
25523  }
25524
25525  protected void composeTestReportSetupActionOperationComponent(Complex parent, String parentType, String name, TestReport.SetupActionOperationComponent element, int index) {
25526    if (element == null) 
25527      return;
25528    Complex t;
25529    if (Utilities.noString(parentType))
25530      t = parent;
25531    else {
25532      t = parent.predicate("fhir:"+parentType+'.'+name);
25533    }
25534    composeBackboneElement(t, "operation", name, element, index);
25535    if (element.hasResultElement()) {
25536      composeEnum(t, "SetupActionOperationComponent", "result", element.getResultElement(), -1);
25537    }
25538    if (element.hasMessageElement()) {
25539      composeMarkdown(t, "SetupActionOperationComponent", "message", element.getMessageElement(), -1);
25540    }
25541    if (element.hasDetailElement()) {
25542      composeUri(t, "SetupActionOperationComponent", "detail", element.getDetailElement(), -1);
25543    }
25544  }
25545
25546  protected void composeTestReportSetupActionAssertComponent(Complex parent, String parentType, String name, TestReport.SetupActionAssertComponent element, int index) {
25547    if (element == null) 
25548      return;
25549    Complex t;
25550    if (Utilities.noString(parentType))
25551      t = parent;
25552    else {
25553      t = parent.predicate("fhir:"+parentType+'.'+name);
25554    }
25555    composeBackboneElement(t, "assert", name, element, index);
25556    if (element.hasResultElement()) {
25557      composeEnum(t, "SetupActionAssertComponent", "result", element.getResultElement(), -1);
25558    }
25559    if (element.hasMessageElement()) {
25560      composeMarkdown(t, "SetupActionAssertComponent", "message", element.getMessageElement(), -1);
25561    }
25562    if (element.hasDetailElement()) {
25563      composeString(t, "SetupActionAssertComponent", "detail", element.getDetailElement(), -1);
25564    }
25565  }
25566
25567  protected void composeTestReportTestComponent(Complex parent, String parentType, String name, TestReport.TestReportTestComponent element, int index) {
25568    if (element == null) 
25569      return;
25570    Complex t;
25571    if (Utilities.noString(parentType))
25572      t = parent;
25573    else {
25574      t = parent.predicate("fhir:"+parentType+'.'+name);
25575    }
25576    composeBackboneElement(t, "test", name, element, index);
25577    if (element.hasNameElement()) {
25578      composeString(t, "TestReportTestComponent", "name", element.getNameElement(), -1);
25579    }
25580    if (element.hasDescriptionElement()) {
25581      composeString(t, "TestReportTestComponent", "description", element.getDescriptionElement(), -1);
25582    }
25583    for (int i = 0; i < element.getAction().size(); i++) {
25584      composeTestReportTestActionComponent(t, "TestReportTestComponent", "action", element.getAction().get(i), i);
25585    }
25586  }
25587
25588  protected void composeTestReportTestActionComponent(Complex parent, String parentType, String name, TestReport.TestActionComponent element, int index) {
25589    if (element == null) 
25590      return;
25591    Complex t;
25592    if (Utilities.noString(parentType))
25593      t = parent;
25594    else {
25595      t = parent.predicate("fhir:"+parentType+'.'+name);
25596    }
25597    composeBackboneElement(t, "action", name, element, index);
25598    if (element.hasOperation()) {
25599      composeTestReportSetupActionOperationComponent(t, "TestActionComponent", "operation", element.getOperation(), -1);
25600    }
25601    if (element.hasAssert()) {
25602      composeTestReportSetupActionAssertComponent(t, "TestActionComponent", "assert", element.getAssert(), -1);
25603    }
25604  }
25605
25606  protected void composeTestReportTeardownComponent(Complex parent, String parentType, String name, TestReport.TestReportTeardownComponent element, int index) {
25607    if (element == null) 
25608      return;
25609    Complex t;
25610    if (Utilities.noString(parentType))
25611      t = parent;
25612    else {
25613      t = parent.predicate("fhir:"+parentType+'.'+name);
25614    }
25615    composeBackboneElement(t, "teardown", name, element, index);
25616    for (int i = 0; i < element.getAction().size(); i++) {
25617      composeTestReportTeardownActionComponent(t, "TestReportTeardownComponent", "action", element.getAction().get(i), i);
25618    }
25619  }
25620
25621  protected void composeTestReportTeardownActionComponent(Complex parent, String parentType, String name, TestReport.TeardownActionComponent element, int index) {
25622    if (element == null) 
25623      return;
25624    Complex t;
25625    if (Utilities.noString(parentType))
25626      t = parent;
25627    else {
25628      t = parent.predicate("fhir:"+parentType+'.'+name);
25629    }
25630    composeBackboneElement(t, "action", name, element, index);
25631    if (element.hasOperation()) {
25632      composeTestReportSetupActionOperationComponent(t, "TeardownActionComponent", "operation", element.getOperation(), -1);
25633    }
25634  }
25635
25636  protected void composeTestScript(Complex parent, String parentType, String name, TestScript element, int index) {
25637    if (element == null) 
25638      return;
25639    Complex t;
25640    if (Utilities.noString(parentType))
25641      t = parent;
25642    else {
25643      t = parent.predicate("fhir:"+parentType+'.'+name);
25644    }
25645    composeCanonicalResource(t, "TestScript", name, element, index);
25646    if (element.hasUrlElement()) {
25647      composeUri(t, "TestScript", "url", element.getUrlElement(), -1);
25648    }
25649    for (int i = 0; i < element.getIdentifier().size(); i++) {
25650      composeIdentifier(t, "TestScript", "identifier", element.getIdentifier().get(i), i);
25651    }
25652    if (element.hasVersionElement()) {
25653      composeString(t, "TestScript", "version", element.getVersionElement(), -1);
25654    }
25655    if (element.hasVersionAlgorithm()) {
25656      composeType(t, "TestScript", "versionAlgorithm", element.getVersionAlgorithm(), -1);
25657    }
25658    if (element.hasNameElement()) {
25659      composeString(t, "TestScript", "name", element.getNameElement(), -1);
25660    }
25661    if (element.hasTitleElement()) {
25662      composeString(t, "TestScript", "title", element.getTitleElement(), -1);
25663    }
25664    if (element.hasStatusElement()) {
25665      composeEnum(t, "TestScript", "status", element.getStatusElement(), -1);
25666    }
25667    if (element.hasExperimentalElement()) {
25668      composeBoolean(t, "TestScript", "experimental", element.getExperimentalElement(), -1);
25669    }
25670    if (element.hasDateElement()) {
25671      composeDateTime(t, "TestScript", "date", element.getDateElement(), -1);
25672    }
25673    if (element.hasPublisherElement()) {
25674      composeString(t, "TestScript", "publisher", element.getPublisherElement(), -1);
25675    }
25676    for (int i = 0; i < element.getContact().size(); i++) {
25677      composeContactDetail(t, "TestScript", "contact", element.getContact().get(i), i);
25678    }
25679    if (element.hasDescriptionElement()) {
25680      composeMarkdown(t, "TestScript", "description", element.getDescriptionElement(), -1);
25681    }
25682    for (int i = 0; i < element.getUseContext().size(); i++) {
25683      composeUsageContext(t, "TestScript", "useContext", element.getUseContext().get(i), i);
25684    }
25685    for (int i = 0; i < element.getJurisdiction().size(); i++) {
25686      composeCodeableConcept(t, "TestScript", "jurisdiction", element.getJurisdiction().get(i), i);
25687    }
25688    if (element.hasPurposeElement()) {
25689      composeMarkdown(t, "TestScript", "purpose", element.getPurposeElement(), -1);
25690    }
25691    if (element.hasCopyrightElement()) {
25692      composeMarkdown(t, "TestScript", "copyright", element.getCopyrightElement(), -1);
25693    }
25694    if (element.hasCopyrightLabelElement()) {
25695      composeString(t, "TestScript", "copyrightLabel", element.getCopyrightLabelElement(), -1);
25696    }
25697    for (int i = 0; i < element.getOrigin().size(); i++) {
25698      composeTestScriptOriginComponent(t, "TestScript", "origin", element.getOrigin().get(i), i);
25699    }
25700    for (int i = 0; i < element.getDestination().size(); i++) {
25701      composeTestScriptDestinationComponent(t, "TestScript", "destination", element.getDestination().get(i), i);
25702    }
25703    if (element.hasMetadata()) {
25704      composeTestScriptMetadataComponent(t, "TestScript", "metadata", element.getMetadata(), -1);
25705    }
25706    for (int i = 0; i < element.getScope().size(); i++) {
25707      composeTestScriptScopeComponent(t, "TestScript", "scope", element.getScope().get(i), i);
25708    }
25709    for (int i = 0; i < element.getFixture().size(); i++) {
25710      composeTestScriptFixtureComponent(t, "TestScript", "fixture", element.getFixture().get(i), i);
25711    }
25712    for (int i = 0; i < element.getProfile().size(); i++) {
25713      composeCanonical(t, "TestScript", "profile", element.getProfile().get(i), i);
25714    }
25715    for (int i = 0; i < element.getVariable().size(); i++) {
25716      composeTestScriptVariableComponent(t, "TestScript", "variable", element.getVariable().get(i), i);
25717    }
25718    if (element.hasSetup()) {
25719      composeTestScriptSetupComponent(t, "TestScript", "setup", element.getSetup(), -1);
25720    }
25721    for (int i = 0; i < element.getTest().size(); i++) {
25722      composeTestScriptTestComponent(t, "TestScript", "test", element.getTest().get(i), i);
25723    }
25724    if (element.hasTeardown()) {
25725      composeTestScriptTeardownComponent(t, "TestScript", "teardown", element.getTeardown(), -1);
25726    }
25727  }
25728
25729  protected void composeTestScriptOriginComponent(Complex parent, String parentType, String name, TestScript.TestScriptOriginComponent element, int index) {
25730    if (element == null) 
25731      return;
25732    Complex t;
25733    if (Utilities.noString(parentType))
25734      t = parent;
25735    else {
25736      t = parent.predicate("fhir:"+parentType+'.'+name);
25737    }
25738    composeBackboneElement(t, "origin", name, element, index);
25739    if (element.hasIndexElement()) {
25740      composeInteger(t, "TestScriptOriginComponent", "index", element.getIndexElement(), -1);
25741    }
25742    if (element.hasProfile()) {
25743      composeCoding(t, "TestScriptOriginComponent", "profile", element.getProfile(), -1);
25744    }
25745    if (element.hasUrlElement()) {
25746      composeUrl(t, "TestScriptOriginComponent", "url", element.getUrlElement(), -1);
25747    }
25748  }
25749
25750  protected void composeTestScriptDestinationComponent(Complex parent, String parentType, String name, TestScript.TestScriptDestinationComponent element, int index) {
25751    if (element == null) 
25752      return;
25753    Complex t;
25754    if (Utilities.noString(parentType))
25755      t = parent;
25756    else {
25757      t = parent.predicate("fhir:"+parentType+'.'+name);
25758    }
25759    composeBackboneElement(t, "destination", name, element, index);
25760    if (element.hasIndexElement()) {
25761      composeInteger(t, "TestScriptDestinationComponent", "index", element.getIndexElement(), -1);
25762    }
25763    if (element.hasProfile()) {
25764      composeCoding(t, "TestScriptDestinationComponent", "profile", element.getProfile(), -1);
25765    }
25766    if (element.hasUrlElement()) {
25767      composeUrl(t, "TestScriptDestinationComponent", "url", element.getUrlElement(), -1);
25768    }
25769  }
25770
25771  protected void composeTestScriptMetadataComponent(Complex parent, String parentType, String name, TestScript.TestScriptMetadataComponent element, int index) {
25772    if (element == null) 
25773      return;
25774    Complex t;
25775    if (Utilities.noString(parentType))
25776      t = parent;
25777    else {
25778      t = parent.predicate("fhir:"+parentType+'.'+name);
25779    }
25780    composeBackboneElement(t, "metadata", name, element, index);
25781    for (int i = 0; i < element.getLink().size(); i++) {
25782      composeTestScriptMetadataLinkComponent(t, "TestScriptMetadataComponent", "link", element.getLink().get(i), i);
25783    }
25784    for (int i = 0; i < element.getCapability().size(); i++) {
25785      composeTestScriptMetadataCapabilityComponent(t, "TestScriptMetadataComponent", "capability", element.getCapability().get(i), i);
25786    }
25787  }
25788
25789  protected void composeTestScriptMetadataLinkComponent(Complex parent, String parentType, String name, TestScript.TestScriptMetadataLinkComponent element, int index) {
25790    if (element == null) 
25791      return;
25792    Complex t;
25793    if (Utilities.noString(parentType))
25794      t = parent;
25795    else {
25796      t = parent.predicate("fhir:"+parentType+'.'+name);
25797    }
25798    composeBackboneElement(t, "link", name, element, index);
25799    if (element.hasUrlElement()) {
25800      composeUri(t, "TestScriptMetadataLinkComponent", "url", element.getUrlElement(), -1);
25801    }
25802    if (element.hasDescriptionElement()) {
25803      composeString(t, "TestScriptMetadataLinkComponent", "description", element.getDescriptionElement(), -1);
25804    }
25805  }
25806
25807  protected void composeTestScriptMetadataCapabilityComponent(Complex parent, String parentType, String name, TestScript.TestScriptMetadataCapabilityComponent element, int index) {
25808    if (element == null) 
25809      return;
25810    Complex t;
25811    if (Utilities.noString(parentType))
25812      t = parent;
25813    else {
25814      t = parent.predicate("fhir:"+parentType+'.'+name);
25815    }
25816    composeBackboneElement(t, "capability", name, element, index);
25817    if (element.hasRequiredElement()) {
25818      composeBoolean(t, "TestScriptMetadataCapabilityComponent", "required", element.getRequiredElement(), -1);
25819    }
25820    if (element.hasValidatedElement()) {
25821      composeBoolean(t, "TestScriptMetadataCapabilityComponent", "validated", element.getValidatedElement(), -1);
25822    }
25823    if (element.hasDescriptionElement()) {
25824      composeString(t, "TestScriptMetadataCapabilityComponent", "description", element.getDescriptionElement(), -1);
25825    }
25826    for (int i = 0; i < element.getOrigin().size(); i++) {
25827      composeInteger(t, "TestScriptMetadataCapabilityComponent", "origin", element.getOrigin().get(i), i);
25828    }
25829    if (element.hasDestinationElement()) {
25830      composeInteger(t, "TestScriptMetadataCapabilityComponent", "destination", element.getDestinationElement(), -1);
25831    }
25832    for (int i = 0; i < element.getLink().size(); i++) {
25833      composeUri(t, "TestScriptMetadataCapabilityComponent", "link", element.getLink().get(i), i);
25834    }
25835    if (element.hasCapabilitiesElement()) {
25836      composeCanonical(t, "TestScriptMetadataCapabilityComponent", "capabilities", element.getCapabilitiesElement(), -1);
25837    }
25838  }
25839
25840  protected void composeTestScriptScopeComponent(Complex parent, String parentType, String name, TestScript.TestScriptScopeComponent element, int index) {
25841    if (element == null) 
25842      return;
25843    Complex t;
25844    if (Utilities.noString(parentType))
25845      t = parent;
25846    else {
25847      t = parent.predicate("fhir:"+parentType+'.'+name);
25848    }
25849    composeBackboneElement(t, "scope", name, element, index);
25850    if (element.hasArtifactElement()) {
25851      composeCanonical(t, "TestScriptScopeComponent", "artifact", element.getArtifactElement(), -1);
25852    }
25853    if (element.hasConformance()) {
25854      composeCodeableConcept(t, "TestScriptScopeComponent", "conformance", element.getConformance(), -1);
25855    }
25856    if (element.hasPhase()) {
25857      composeCodeableConcept(t, "TestScriptScopeComponent", "phase", element.getPhase(), -1);
25858    }
25859  }
25860
25861  protected void composeTestScriptFixtureComponent(Complex parent, String parentType, String name, TestScript.TestScriptFixtureComponent element, int index) {
25862    if (element == null) 
25863      return;
25864    Complex t;
25865    if (Utilities.noString(parentType))
25866      t = parent;
25867    else {
25868      t = parent.predicate("fhir:"+parentType+'.'+name);
25869    }
25870    composeBackboneElement(t, "fixture", name, element, index);
25871    if (element.hasAutocreateElement()) {
25872      composeBoolean(t, "TestScriptFixtureComponent", "autocreate", element.getAutocreateElement(), -1);
25873    }
25874    if (element.hasAutodeleteElement()) {
25875      composeBoolean(t, "TestScriptFixtureComponent", "autodelete", element.getAutodeleteElement(), -1);
25876    }
25877    if (element.hasResource()) {
25878      composeReference(t, "TestScriptFixtureComponent", "resource", element.getResource(), -1);
25879    }
25880  }
25881
25882  protected void composeTestScriptVariableComponent(Complex parent, String parentType, String name, TestScript.TestScriptVariableComponent element, int index) {
25883    if (element == null) 
25884      return;
25885    Complex t;
25886    if (Utilities.noString(parentType))
25887      t = parent;
25888    else {
25889      t = parent.predicate("fhir:"+parentType+'.'+name);
25890    }
25891    composeBackboneElement(t, "variable", name, element, index);
25892    if (element.hasNameElement()) {
25893      composeString(t, "TestScriptVariableComponent", "name", element.getNameElement(), -1);
25894    }
25895    if (element.hasDefaultValueElement()) {
25896      composeString(t, "TestScriptVariableComponent", "defaultValue", element.getDefaultValueElement(), -1);
25897    }
25898    if (element.hasDescriptionElement()) {
25899      composeString(t, "TestScriptVariableComponent", "description", element.getDescriptionElement(), -1);
25900    }
25901    if (element.hasExpressionElement()) {
25902      composeString(t, "TestScriptVariableComponent", "expression", element.getExpressionElement(), -1);
25903    }
25904    if (element.hasHeaderFieldElement()) {
25905      composeString(t, "TestScriptVariableComponent", "headerField", element.getHeaderFieldElement(), -1);
25906    }
25907    if (element.hasHintElement()) {
25908      composeString(t, "TestScriptVariableComponent", "hint", element.getHintElement(), -1);
25909    }
25910    if (element.hasPathElement()) {
25911      composeString(t, "TestScriptVariableComponent", "path", element.getPathElement(), -1);
25912    }
25913    if (element.hasSourceIdElement()) {
25914      composeId(t, "TestScriptVariableComponent", "sourceId", element.getSourceIdElement(), -1);
25915    }
25916  }
25917
25918  protected void composeTestScriptSetupComponent(Complex parent, String parentType, String name, TestScript.TestScriptSetupComponent element, int index) {
25919    if (element == null) 
25920      return;
25921    Complex t;
25922    if (Utilities.noString(parentType))
25923      t = parent;
25924    else {
25925      t = parent.predicate("fhir:"+parentType+'.'+name);
25926    }
25927    composeBackboneElement(t, "setup", name, element, index);
25928    for (int i = 0; i < element.getAction().size(); i++) {
25929      composeTestScriptSetupActionComponent(t, "TestScriptSetupComponent", "action", element.getAction().get(i), i);
25930    }
25931  }
25932
25933  protected void composeTestScriptSetupActionComponent(Complex parent, String parentType, String name, TestScript.SetupActionComponent element, int index) {
25934    if (element == null) 
25935      return;
25936    Complex t;
25937    if (Utilities.noString(parentType))
25938      t = parent;
25939    else {
25940      t = parent.predicate("fhir:"+parentType+'.'+name);
25941    }
25942    composeBackboneElement(t, "action", name, element, index);
25943    if (element.hasOperation()) {
25944      composeTestScriptSetupActionOperationComponent(t, "SetupActionComponent", "operation", element.getOperation(), -1);
25945    }
25946    if (element.hasAssert()) {
25947      composeTestScriptSetupActionAssertComponent(t, "SetupActionComponent", "assert", element.getAssert(), -1);
25948    }
25949  }
25950
25951  protected void composeTestScriptSetupActionOperationComponent(Complex parent, String parentType, String name, TestScript.SetupActionOperationComponent element, int index) {
25952    if (element == null) 
25953      return;
25954    Complex t;
25955    if (Utilities.noString(parentType))
25956      t = parent;
25957    else {
25958      t = parent.predicate("fhir:"+parentType+'.'+name);
25959    }
25960    composeBackboneElement(t, "operation", name, element, index);
25961    if (element.hasType()) {
25962      composeCoding(t, "SetupActionOperationComponent", "type", element.getType(), -1);
25963    }
25964    if (element.hasResourceElement()) {
25965      composeUri(t, "SetupActionOperationComponent", "resource", element.getResourceElement(), -1);
25966    }
25967    if (element.hasLabelElement()) {
25968      composeString(t, "SetupActionOperationComponent", "label", element.getLabelElement(), -1);
25969    }
25970    if (element.hasDescriptionElement()) {
25971      composeString(t, "SetupActionOperationComponent", "description", element.getDescriptionElement(), -1);
25972    }
25973    if (element.hasAcceptElement()) {
25974      composeCode(t, "SetupActionOperationComponent", "accept", element.getAcceptElement(), -1);
25975    }
25976    if (element.hasContentTypeElement()) {
25977      composeCode(t, "SetupActionOperationComponent", "contentType", element.getContentTypeElement(), -1);
25978    }
25979    if (element.hasDestinationElement()) {
25980      composeInteger(t, "SetupActionOperationComponent", "destination", element.getDestinationElement(), -1);
25981    }
25982    if (element.hasEncodeRequestUrlElement()) {
25983      composeBoolean(t, "SetupActionOperationComponent", "encodeRequestUrl", element.getEncodeRequestUrlElement(), -1);
25984    }
25985    if (element.hasMethodElement()) {
25986      composeEnum(t, "SetupActionOperationComponent", "method", element.getMethodElement(), -1);
25987    }
25988    if (element.hasOriginElement()) {
25989      composeInteger(t, "SetupActionOperationComponent", "origin", element.getOriginElement(), -1);
25990    }
25991    if (element.hasParamsElement()) {
25992      composeString(t, "SetupActionOperationComponent", "params", element.getParamsElement(), -1);
25993    }
25994    for (int i = 0; i < element.getRequestHeader().size(); i++) {
25995      composeTestScriptSetupActionOperationRequestHeaderComponent(t, "SetupActionOperationComponent", "requestHeader", element.getRequestHeader().get(i), i);
25996    }
25997    if (element.hasRequestIdElement()) {
25998      composeId(t, "SetupActionOperationComponent", "requestId", element.getRequestIdElement(), -1);
25999    }
26000    if (element.hasResponseIdElement()) {
26001      composeId(t, "SetupActionOperationComponent", "responseId", element.getResponseIdElement(), -1);
26002    }
26003    if (element.hasSourceIdElement()) {
26004      composeId(t, "SetupActionOperationComponent", "sourceId", element.getSourceIdElement(), -1);
26005    }
26006    if (element.hasTargetIdElement()) {
26007      composeId(t, "SetupActionOperationComponent", "targetId", element.getTargetIdElement(), -1);
26008    }
26009    if (element.hasUrlElement()) {
26010      composeString(t, "SetupActionOperationComponent", "url", element.getUrlElement(), -1);
26011    }
26012  }
26013
26014  protected void composeTestScriptSetupActionOperationRequestHeaderComponent(Complex parent, String parentType, String name, TestScript.SetupActionOperationRequestHeaderComponent element, int index) {
26015    if (element == null) 
26016      return;
26017    Complex t;
26018    if (Utilities.noString(parentType))
26019      t = parent;
26020    else {
26021      t = parent.predicate("fhir:"+parentType+'.'+name);
26022    }
26023    composeBackboneElement(t, "requestHeader", name, element, index);
26024    if (element.hasFieldElement()) {
26025      composeString(t, "SetupActionOperationRequestHeaderComponent", "field", element.getFieldElement(), -1);
26026    }
26027    if (element.hasValueElement()) {
26028      composeString(t, "SetupActionOperationRequestHeaderComponent", "value", element.getValueElement(), -1);
26029    }
26030  }
26031
26032  protected void composeTestScriptSetupActionAssertComponent(Complex parent, String parentType, String name, TestScript.SetupActionAssertComponent element, int index) {
26033    if (element == null) 
26034      return;
26035    Complex t;
26036    if (Utilities.noString(parentType))
26037      t = parent;
26038    else {
26039      t = parent.predicate("fhir:"+parentType+'.'+name);
26040    }
26041    composeBackboneElement(t, "assert", name, element, index);
26042    if (element.hasLabelElement()) {
26043      composeString(t, "SetupActionAssertComponent", "label", element.getLabelElement(), -1);
26044    }
26045    if (element.hasDescriptionElement()) {
26046      composeString(t, "SetupActionAssertComponent", "description", element.getDescriptionElement(), -1);
26047    }
26048    if (element.hasDirectionElement()) {
26049      composeEnum(t, "SetupActionAssertComponent", "direction", element.getDirectionElement(), -1);
26050    }
26051    if (element.hasCompareToSourceIdElement()) {
26052      composeString(t, "SetupActionAssertComponent", "compareToSourceId", element.getCompareToSourceIdElement(), -1);
26053    }
26054    if (element.hasCompareToSourceExpressionElement()) {
26055      composeString(t, "SetupActionAssertComponent", "compareToSourceExpression", element.getCompareToSourceExpressionElement(), -1);
26056    }
26057    if (element.hasCompareToSourcePathElement()) {
26058      composeString(t, "SetupActionAssertComponent", "compareToSourcePath", element.getCompareToSourcePathElement(), -1);
26059    }
26060    if (element.hasContentTypeElement()) {
26061      composeCode(t, "SetupActionAssertComponent", "contentType", element.getContentTypeElement(), -1);
26062    }
26063    if (element.hasExpressionElement()) {
26064      composeString(t, "SetupActionAssertComponent", "expression", element.getExpressionElement(), -1);
26065    }
26066    if (element.hasHeaderFieldElement()) {
26067      composeString(t, "SetupActionAssertComponent", "headerField", element.getHeaderFieldElement(), -1);
26068    }
26069    if (element.hasMinimumIdElement()) {
26070      composeString(t, "SetupActionAssertComponent", "minimumId", element.getMinimumIdElement(), -1);
26071    }
26072    if (element.hasNavigationLinksElement()) {
26073      composeBoolean(t, "SetupActionAssertComponent", "navigationLinks", element.getNavigationLinksElement(), -1);
26074    }
26075    if (element.hasOperatorElement()) {
26076      composeEnum(t, "SetupActionAssertComponent", "operator", element.getOperatorElement(), -1);
26077    }
26078    if (element.hasPathElement()) {
26079      composeString(t, "SetupActionAssertComponent", "path", element.getPathElement(), -1);
26080    }
26081    if (element.hasRequestMethodElement()) {
26082      composeEnum(t, "SetupActionAssertComponent", "requestMethod", element.getRequestMethodElement(), -1);
26083    }
26084    if (element.hasRequestURLElement()) {
26085      composeString(t, "SetupActionAssertComponent", "requestURL", element.getRequestURLElement(), -1);
26086    }
26087    if (element.hasResourceElement()) {
26088      composeUri(t, "SetupActionAssertComponent", "resource", element.getResourceElement(), -1);
26089    }
26090    if (element.hasResponseElement()) {
26091      composeEnum(t, "SetupActionAssertComponent", "response", element.getResponseElement(), -1);
26092    }
26093    if (element.hasResponseCodeElement()) {
26094      composeString(t, "SetupActionAssertComponent", "responseCode", element.getResponseCodeElement(), -1);
26095    }
26096    if (element.hasSourceIdElement()) {
26097      composeId(t, "SetupActionAssertComponent", "sourceId", element.getSourceIdElement(), -1);
26098    }
26099    if (element.hasStopTestOnFailElement()) {
26100      composeBoolean(t, "SetupActionAssertComponent", "stopTestOnFail", element.getStopTestOnFailElement(), -1);
26101    }
26102    if (element.hasValidateProfileIdElement()) {
26103      composeId(t, "SetupActionAssertComponent", "validateProfileId", element.getValidateProfileIdElement(), -1);
26104    }
26105    if (element.hasValueElement()) {
26106      composeString(t, "SetupActionAssertComponent", "value", element.getValueElement(), -1);
26107    }
26108    if (element.hasWarningOnlyElement()) {
26109      composeBoolean(t, "SetupActionAssertComponent", "warningOnly", element.getWarningOnlyElement(), -1);
26110    }
26111  }
26112
26113  protected void composeTestScriptTestComponent(Complex parent, String parentType, String name, TestScript.TestScriptTestComponent element, int index) {
26114    if (element == null) 
26115      return;
26116    Complex t;
26117    if (Utilities.noString(parentType))
26118      t = parent;
26119    else {
26120      t = parent.predicate("fhir:"+parentType+'.'+name);
26121    }
26122    composeBackboneElement(t, "test", name, element, index);
26123    if (element.hasNameElement()) {
26124      composeString(t, "TestScriptTestComponent", "name", element.getNameElement(), -1);
26125    }
26126    if (element.hasDescriptionElement()) {
26127      composeString(t, "TestScriptTestComponent", "description", element.getDescriptionElement(), -1);
26128    }
26129    for (int i = 0; i < element.getAction().size(); i++) {
26130      composeTestScriptTestActionComponent(t, "TestScriptTestComponent", "action", element.getAction().get(i), i);
26131    }
26132  }
26133
26134  protected void composeTestScriptTestActionComponent(Complex parent, String parentType, String name, TestScript.TestActionComponent element, int index) {
26135    if (element == null) 
26136      return;
26137    Complex t;
26138    if (Utilities.noString(parentType))
26139      t = parent;
26140    else {
26141      t = parent.predicate("fhir:"+parentType+'.'+name);
26142    }
26143    composeBackboneElement(t, "action", name, element, index);
26144    if (element.hasOperation()) {
26145      composeTestScriptSetupActionOperationComponent(t, "TestActionComponent", "operation", element.getOperation(), -1);
26146    }
26147    if (element.hasAssert()) {
26148      composeTestScriptSetupActionAssertComponent(t, "TestActionComponent", "assert", element.getAssert(), -1);
26149    }
26150  }
26151
26152  protected void composeTestScriptTeardownComponent(Complex parent, String parentType, String name, TestScript.TestScriptTeardownComponent element, int index) {
26153    if (element == null) 
26154      return;
26155    Complex t;
26156    if (Utilities.noString(parentType))
26157      t = parent;
26158    else {
26159      t = parent.predicate("fhir:"+parentType+'.'+name);
26160    }
26161    composeBackboneElement(t, "teardown", name, element, index);
26162    for (int i = 0; i < element.getAction().size(); i++) {
26163      composeTestScriptTeardownActionComponent(t, "TestScriptTeardownComponent", "action", element.getAction().get(i), i);
26164    }
26165  }
26166
26167  protected void composeTestScriptTeardownActionComponent(Complex parent, String parentType, String name, TestScript.TeardownActionComponent element, int index) {
26168    if (element == null) 
26169      return;
26170    Complex t;
26171    if (Utilities.noString(parentType))
26172      t = parent;
26173    else {
26174      t = parent.predicate("fhir:"+parentType+'.'+name);
26175    }
26176    composeBackboneElement(t, "action", name, element, index);
26177    if (element.hasOperation()) {
26178      composeTestScriptSetupActionOperationComponent(t, "TeardownActionComponent", "operation", element.getOperation(), -1);
26179    }
26180  }
26181
26182  protected void composeTransport(Complex parent, String parentType, String name, Transport element, int index) {
26183    if (element == null) 
26184      return;
26185    Complex t;
26186    if (Utilities.noString(parentType))
26187      t = parent;
26188    else {
26189      t = parent.predicate("fhir:"+parentType+'.'+name);
26190    }
26191    composeDomainResource(t, "Transport", name, element, index);
26192    for (int i = 0; i < element.getIdentifier().size(); i++) {
26193      composeIdentifier(t, "Transport", "identifier", element.getIdentifier().get(i), i);
26194    }
26195    if (element.hasInstantiatesCanonicalElement()) {
26196      composeCanonical(t, "Transport", "instantiatesCanonical", element.getInstantiatesCanonicalElement(), -1);
26197    }
26198    if (element.hasInstantiatesUriElement()) {
26199      composeUri(t, "Transport", "instantiatesUri", element.getInstantiatesUriElement(), -1);
26200    }
26201    for (int i = 0; i < element.getBasedOn().size(); i++) {
26202      composeReference(t, "Transport", "basedOn", element.getBasedOn().get(i), i);
26203    }
26204    if (element.hasGroupIdentifier()) {
26205      composeIdentifier(t, "Transport", "groupIdentifier", element.getGroupIdentifier(), -1);
26206    }
26207    for (int i = 0; i < element.getPartOf().size(); i++) {
26208      composeReference(t, "Transport", "partOf", element.getPartOf().get(i), i);
26209    }
26210    if (element.hasStatusElement()) {
26211      composeEnum(t, "Transport", "status", element.getStatusElement(), -1);
26212    }
26213    if (element.hasStatusReason()) {
26214      composeCodeableConcept(t, "Transport", "statusReason", element.getStatusReason(), -1);
26215    }
26216    if (element.hasIntentElement()) {
26217      composeEnum(t, "Transport", "intent", element.getIntentElement(), -1);
26218    }
26219    if (element.hasPriorityElement()) {
26220      composeEnum(t, "Transport", "priority", element.getPriorityElement(), -1);
26221    }
26222    if (element.hasCode()) {
26223      composeCodeableConcept(t, "Transport", "code", element.getCode(), -1);
26224    }
26225    if (element.hasDescriptionElement()) {
26226      composeString(t, "Transport", "description", element.getDescriptionElement(), -1);
26227    }
26228    if (element.hasFocus()) {
26229      composeReference(t, "Transport", "focus", element.getFocus(), -1);
26230    }
26231    if (element.hasFor()) {
26232      composeReference(t, "Transport", "for", element.getFor(), -1);
26233    }
26234    if (element.hasEncounter()) {
26235      composeReference(t, "Transport", "encounter", element.getEncounter(), -1);
26236    }
26237    if (element.hasCompletionTimeElement()) {
26238      composeDateTime(t, "Transport", "completionTime", element.getCompletionTimeElement(), -1);
26239    }
26240    if (element.hasAuthoredOnElement()) {
26241      composeDateTime(t, "Transport", "authoredOn", element.getAuthoredOnElement(), -1);
26242    }
26243    if (element.hasLastModifiedElement()) {
26244      composeDateTime(t, "Transport", "lastModified", element.getLastModifiedElement(), -1);
26245    }
26246    if (element.hasRequester()) {
26247      composeReference(t, "Transport", "requester", element.getRequester(), -1);
26248    }
26249    for (int i = 0; i < element.getPerformerType().size(); i++) {
26250      composeCodeableConcept(t, "Transport", "performerType", element.getPerformerType().get(i), i);
26251    }
26252    if (element.hasOwner()) {
26253      composeReference(t, "Transport", "owner", element.getOwner(), -1);
26254    }
26255    if (element.hasLocation()) {
26256      composeReference(t, "Transport", "location", element.getLocation(), -1);
26257    }
26258    for (int i = 0; i < element.getInsurance().size(); i++) {
26259      composeReference(t, "Transport", "insurance", element.getInsurance().get(i), i);
26260    }
26261    for (int i = 0; i < element.getNote().size(); i++) {
26262      composeAnnotation(t, "Transport", "note", element.getNote().get(i), i);
26263    }
26264    for (int i = 0; i < element.getRelevantHistory().size(); i++) {
26265      composeReference(t, "Transport", "relevantHistory", element.getRelevantHistory().get(i), i);
26266    }
26267    if (element.hasRestriction()) {
26268      composeTransportRestrictionComponent(t, "Transport", "restriction", element.getRestriction(), -1);
26269    }
26270    for (int i = 0; i < element.getInput().size(); i++) {
26271      composeTransportParameterComponent(t, "Transport", "input", element.getInput().get(i), i);
26272    }
26273    for (int i = 0; i < element.getOutput().size(); i++) {
26274      composeTransportOutputComponent(t, "Transport", "output", element.getOutput().get(i), i);
26275    }
26276    if (element.hasRequestedLocation()) {
26277      composeReference(t, "Transport", "requestedLocation", element.getRequestedLocation(), -1);
26278    }
26279    if (element.hasCurrentLocation()) {
26280      composeReference(t, "Transport", "currentLocation", element.getCurrentLocation(), -1);
26281    }
26282    if (element.hasReasonCode()) {
26283      composeCodeableConcept(t, "Transport", "reasonCode", element.getReasonCode(), -1);
26284    }
26285    if (element.hasReasonReference()) {
26286      composeReference(t, "Transport", "reasonReference", element.getReasonReference(), -1);
26287    }
26288    if (element.hasHistory()) {
26289      composeReference(t, "Transport", "history", element.getHistory(), -1);
26290    }
26291  }
26292
26293  protected void composeTransportRestrictionComponent(Complex parent, String parentType, String name, Transport.TransportRestrictionComponent element, int index) {
26294    if (element == null) 
26295      return;
26296    Complex t;
26297    if (Utilities.noString(parentType))
26298      t = parent;
26299    else {
26300      t = parent.predicate("fhir:"+parentType+'.'+name);
26301    }
26302    composeBackboneElement(t, "restriction", name, element, index);
26303    if (element.hasRepetitionsElement()) {
26304      composePositiveInt(t, "TransportRestrictionComponent", "repetitions", element.getRepetitionsElement(), -1);
26305    }
26306    if (element.hasPeriod()) {
26307      composePeriod(t, "TransportRestrictionComponent", "period", element.getPeriod(), -1);
26308    }
26309    for (int i = 0; i < element.getRecipient().size(); i++) {
26310      composeReference(t, "TransportRestrictionComponent", "recipient", element.getRecipient().get(i), i);
26311    }
26312  }
26313
26314  protected void composeTransportParameterComponent(Complex parent, String parentType, String name, Transport.ParameterComponent element, int index) {
26315    if (element == null) 
26316      return;
26317    Complex t;
26318    if (Utilities.noString(parentType))
26319      t = parent;
26320    else {
26321      t = parent.predicate("fhir:"+parentType+'.'+name);
26322    }
26323    composeBackboneElement(t, "input", name, element, index);
26324    if (element.hasType()) {
26325      composeCodeableConcept(t, "ParameterComponent", "type", element.getType(), -1);
26326    }
26327    if (element.hasValue()) {
26328      composeType(t, "ParameterComponent", "value", element.getValue(), -1);
26329    }
26330  }
26331
26332  protected void composeTransportOutputComponent(Complex parent, String parentType, String name, Transport.TransportOutputComponent element, int index) {
26333    if (element == null) 
26334      return;
26335    Complex t;
26336    if (Utilities.noString(parentType))
26337      t = parent;
26338    else {
26339      t = parent.predicate("fhir:"+parentType+'.'+name);
26340    }
26341    composeBackboneElement(t, "output", name, element, index);
26342    if (element.hasType()) {
26343      composeCodeableConcept(t, "TransportOutputComponent", "type", element.getType(), -1);
26344    }
26345    if (element.hasValue()) {
26346      composeType(t, "TransportOutputComponent", "value", element.getValue(), -1);
26347    }
26348  }
26349
26350  protected void composeValueSet(Complex parent, String parentType, String name, ValueSet element, int index) {
26351    if (element == null) 
26352      return;
26353    Complex t;
26354    if (Utilities.noString(parentType))
26355      t = parent;
26356    else {
26357      t = parent.predicate("fhir:"+parentType+'.'+name);
26358    }
26359    composeMetadataResource(t, "ValueSet", name, element, index);
26360    if (element.hasUrlElement()) {
26361      composeUri(t, "ValueSet", "url", element.getUrlElement(), -1);
26362    }
26363    for (int i = 0; i < element.getIdentifier().size(); i++) {
26364      composeIdentifier(t, "ValueSet", "identifier", element.getIdentifier().get(i), i);
26365    }
26366    if (element.hasVersionElement()) {
26367      composeString(t, "ValueSet", "version", element.getVersionElement(), -1);
26368    }
26369    if (element.hasNameElement()) {
26370      composeString(t, "ValueSet", "name", element.getNameElement(), -1);
26371    }
26372    if (element.hasTitleElement()) {
26373      composeString(t, "ValueSet", "title", element.getTitleElement(), -1);
26374    }
26375    if (element.hasStatusElement()) {
26376      composeEnum(t, "ValueSet", "status", element.getStatusElement(), -1);
26377    }
26378    if (element.hasExperimentalElement()) {
26379      composeBoolean(t, "ValueSet", "experimental", element.getExperimentalElement(), -1);
26380    }
26381    if (element.hasDateElement()) {
26382      composeDateTime(t, "ValueSet", "date", element.getDateElement(), -1);
26383    }
26384    if (element.hasPublisherElement()) {
26385      composeString(t, "ValueSet", "publisher", element.getPublisherElement(), -1);
26386    }
26387    for (int i = 0; i < element.getContact().size(); i++) {
26388      composeContactDetail(t, "ValueSet", "contact", element.getContact().get(i), i);
26389    }
26390    if (element.hasDescriptionElement()) {
26391      composeMarkdown(t, "ValueSet", "description", element.getDescriptionElement(), -1);
26392    }
26393    for (int i = 0; i < element.getUseContext().size(); i++) {
26394      composeUsageContext(t, "ValueSet", "useContext", element.getUseContext().get(i), i);
26395    }
26396    for (int i = 0; i < element.getJurisdiction().size(); i++) {
26397      composeCodeableConcept(t, "ValueSet", "jurisdiction", element.getJurisdiction().get(i), i);
26398    }
26399    if (element.hasImmutableElement()) {
26400      composeBoolean(t, "ValueSet", "immutable", element.getImmutableElement(), -1);
26401    }
26402    if (element.hasPurposeElement()) {
26403      composeMarkdown(t, "ValueSet", "purpose", element.getPurposeElement(), -1);
26404    }
26405    if (element.hasCopyrightElement()) {
26406      composeMarkdown(t, "ValueSet", "copyright", element.getCopyrightElement(), -1);
26407    }
26408    if (element.hasApprovalDateElement()) {
26409      composeDate(t, "ValueSet", "approvalDate", element.getApprovalDateElement(), -1);
26410    }
26411    if (element.hasLastReviewDateElement()) {
26412      composeDate(t, "ValueSet", "lastReviewDate", element.getLastReviewDateElement(), -1);
26413    }
26414    if (element.hasEffectivePeriod()) {
26415      composePeriod(t, "ValueSet", "effectivePeriod", element.getEffectivePeriod(), -1);
26416    }
26417    for (int i = 0; i < element.getTopic().size(); i++) {
26418      composeCodeableConcept(t, "ValueSet", "topic", element.getTopic().get(i), i);
26419    }
26420    for (int i = 0; i < element.getAuthor().size(); i++) {
26421      composeContactDetail(t, "ValueSet", "author", element.getAuthor().get(i), i);
26422    }
26423    for (int i = 0; i < element.getEditor().size(); i++) {
26424      composeContactDetail(t, "ValueSet", "editor", element.getEditor().get(i), i);
26425    }
26426    for (int i = 0; i < element.getReviewer().size(); i++) {
26427      composeContactDetail(t, "ValueSet", "reviewer", element.getReviewer().get(i), i);
26428    }
26429    for (int i = 0; i < element.getEndorser().size(); i++) {
26430      composeContactDetail(t, "ValueSet", "endorser", element.getEndorser().get(i), i);
26431    }
26432    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
26433      composeRelatedArtifact(t, "ValueSet", "relatedArtifact", element.getRelatedArtifact().get(i), i);
26434    }
26435    if (element.hasCompose()) {
26436      composeValueSetComposeComponent(t, "ValueSet", "compose", element.getCompose(), -1);
26437    }
26438    if (element.hasExpansion()) {
26439      composeValueSetExpansionComponent(t, "ValueSet", "expansion", element.getExpansion(), -1);
26440    }
26441    if (element.hasScope()) {
26442      composeValueSetScopeComponent(t, "ValueSet", "scope", element.getScope(), -1);
26443    }
26444  }
26445
26446  protected void composeValueSetComposeComponent(Complex parent, String parentType, String name, ValueSet.ValueSetComposeComponent element, int index) {
26447    if (element == null) 
26448      return;
26449    Complex t;
26450    if (Utilities.noString(parentType))
26451      t = parent;
26452    else {
26453      t = parent.predicate("fhir:"+parentType+'.'+name);
26454    }
26455    composeBackboneElement(t, "compose", name, element, index);
26456    if (element.hasLockedDateElement()) {
26457      composeDate(t, "ValueSetComposeComponent", "lockedDate", element.getLockedDateElement(), -1);
26458    }
26459    if (element.hasInactiveElement()) {
26460      composeBoolean(t, "ValueSetComposeComponent", "inactive", element.getInactiveElement(), -1);
26461    }
26462    for (int i = 0; i < element.getInclude().size(); i++) {
26463      composeValueSetConceptSetComponent(t, "ValueSetComposeComponent", "include", element.getInclude().get(i), i);
26464    }
26465    for (int i = 0; i < element.getExclude().size(); i++) {
26466      composeValueSetConceptSetComponent(t, "ValueSetComposeComponent", "exclude", element.getExclude().get(i), i);
26467    }
26468    for (int i = 0; i < element.getProperty().size(); i++) {
26469      composeString(t, "ValueSetComposeComponent", "property", element.getProperty().get(i), i);
26470    }
26471  }
26472
26473  protected void composeValueSetConceptSetComponent(Complex parent, String parentType, String name, ValueSet.ConceptSetComponent element, int index) {
26474    if (element == null) 
26475      return;
26476    Complex t;
26477    if (Utilities.noString(parentType))
26478      t = parent;
26479    else {
26480      t = parent.predicate("fhir:"+parentType+'.'+name);
26481    }
26482    composeBackboneElement(t, "include", name, element, index);
26483    if (element.hasSystemElement()) {
26484      composeUri(t, "ConceptSetComponent", "system", element.getSystemElement(), -1);
26485    }
26486    if (element.hasVersionElement()) {
26487      composeString(t, "ConceptSetComponent", "version", element.getVersionElement(), -1);
26488    }
26489    for (int i = 0; i < element.getConcept().size(); i++) {
26490      composeValueSetConceptReferenceComponent(t, "ConceptSetComponent", "concept", element.getConcept().get(i), i);
26491    }
26492    for (int i = 0; i < element.getFilter().size(); i++) {
26493      composeValueSetConceptSetFilterComponent(t, "ConceptSetComponent", "filter", element.getFilter().get(i), i);
26494    }
26495    for (int i = 0; i < element.getValueSet().size(); i++) {
26496      composeCanonical(t, "ConceptSetComponent", "valueSet", element.getValueSet().get(i), i);
26497    }
26498    if (element.hasCopyrightElement()) {
26499      composeString(t, "ConceptSetComponent", "copyright", element.getCopyrightElement(), -1);
26500    }
26501  }
26502
26503  protected void composeValueSetConceptReferenceComponent(Complex parent, String parentType, String name, ValueSet.ConceptReferenceComponent element, int index) {
26504    if (element == null) 
26505      return;
26506    Complex t;
26507    if (Utilities.noString(parentType))
26508      t = parent;
26509    else {
26510      t = parent.predicate("fhir:"+parentType+'.'+name);
26511    }
26512    composeBackboneElement(t, "concept", name, element, index);
26513    if (element.hasCodeElement()) {
26514      composeCode(t, "ConceptReferenceComponent", "code", element.getCodeElement(), -1);
26515    }
26516    if (element.hasDisplayElement()) {
26517      composeString(t, "ConceptReferenceComponent", "display", element.getDisplayElement(), -1);
26518    }
26519    for (int i = 0; i < element.getDesignation().size(); i++) {
26520      composeValueSetConceptReferenceDesignationComponent(t, "ConceptReferenceComponent", "designation", element.getDesignation().get(i), i);
26521    }
26522  }
26523
26524  protected void composeValueSetConceptReferenceDesignationComponent(Complex parent, String parentType, String name, ValueSet.ConceptReferenceDesignationComponent element, int index) {
26525    if (element == null) 
26526      return;
26527    Complex t;
26528    if (Utilities.noString(parentType))
26529      t = parent;
26530    else {
26531      t = parent.predicate("fhir:"+parentType+'.'+name);
26532    }
26533    composeBackboneElement(t, "designation", name, element, index);
26534    if (element.hasLanguageElement()) {
26535      composeCode(t, "ConceptReferenceDesignationComponent", "language", element.getLanguageElement(), -1);
26536    }
26537    if (element.hasUse()) {
26538      composeCoding(t, "ConceptReferenceDesignationComponent", "use", element.getUse(), -1);
26539    }
26540    for (int i = 0; i < element.getAdditionalUse().size(); i++) {
26541      composeCoding(t, "ConceptReferenceDesignationComponent", "additionalUse", element.getAdditionalUse().get(i), i);
26542    }
26543    if (element.hasValueElement()) {
26544      composeString(t, "ConceptReferenceDesignationComponent", "value", element.getValueElement(), -1);
26545    }
26546  }
26547
26548  protected void composeValueSetConceptSetFilterComponent(Complex parent, String parentType, String name, ValueSet.ConceptSetFilterComponent element, int index) {
26549    if (element == null) 
26550      return;
26551    Complex t;
26552    if (Utilities.noString(parentType))
26553      t = parent;
26554    else {
26555      t = parent.predicate("fhir:"+parentType+'.'+name);
26556    }
26557    composeBackboneElement(t, "filter", name, element, index);
26558    if (element.hasPropertyElement()) {
26559      composeCode(t, "ConceptSetFilterComponent", "property", element.getPropertyElement(), -1);
26560    }
26561    if (element.hasOpElement()) {
26562      composeEnum(t, "ConceptSetFilterComponent", "op", element.getOpElement(), -1);
26563    }
26564    if (element.hasValueElement()) {
26565      composeString(t, "ConceptSetFilterComponent", "value", element.getValueElement(), -1);
26566    }
26567  }
26568
26569  protected void composeValueSetExpansionComponent(Complex parent, String parentType, String name, ValueSet.ValueSetExpansionComponent element, int index) {
26570    if (element == null) 
26571      return;
26572    Complex t;
26573    if (Utilities.noString(parentType))
26574      t = parent;
26575    else {
26576      t = parent.predicate("fhir:"+parentType+'.'+name);
26577    }
26578    composeBackboneElement(t, "expansion", name, element, index);
26579    if (element.hasIdentifierElement()) {
26580      composeUri(t, "ValueSetExpansionComponent", "identifier", element.getIdentifierElement(), -1);
26581    }
26582    if (element.hasNextElement()) {
26583      composeUri(t, "ValueSetExpansionComponent", "next", element.getNextElement(), -1);
26584    }
26585    if (element.hasTimestampElement()) {
26586      composeDateTime(t, "ValueSetExpansionComponent", "timestamp", element.getTimestampElement(), -1);
26587    }
26588    if (element.hasTotalElement()) {
26589      composeInteger(t, "ValueSetExpansionComponent", "total", element.getTotalElement(), -1);
26590    }
26591    if (element.hasOffsetElement()) {
26592      composeInteger(t, "ValueSetExpansionComponent", "offset", element.getOffsetElement(), -1);
26593    }
26594    for (int i = 0; i < element.getParameter().size(); i++) {
26595      composeValueSetExpansionParameterComponent(t, "ValueSetExpansionComponent", "parameter", element.getParameter().get(i), i);
26596    }
26597    for (int i = 0; i < element.getProperty().size(); i++) {
26598      composeValueSetExpansionPropertyComponent(t, "ValueSetExpansionComponent", "property", element.getProperty().get(i), i);
26599    }
26600    for (int i = 0; i < element.getContains().size(); i++) {
26601      composeValueSetExpansionContainsComponent(t, "ValueSetExpansionComponent", "contains", element.getContains().get(i), i);
26602    }
26603  }
26604
26605  protected void composeValueSetExpansionParameterComponent(Complex parent, String parentType, String name, ValueSet.ValueSetExpansionParameterComponent element, int index) {
26606    if (element == null) 
26607      return;
26608    Complex t;
26609    if (Utilities.noString(parentType))
26610      t = parent;
26611    else {
26612      t = parent.predicate("fhir:"+parentType+'.'+name);
26613    }
26614    composeBackboneElement(t, "parameter", name, element, index);
26615    if (element.hasNameElement()) {
26616      composeString(t, "ValueSetExpansionParameterComponent", "name", element.getNameElement(), -1);
26617    }
26618    if (element.hasValue()) {
26619      composeType(t, "ValueSetExpansionParameterComponent", "value", element.getValue(), -1);
26620    }
26621  }
26622
26623  protected void composeValueSetExpansionPropertyComponent(Complex parent, String parentType, String name, ValueSet.ValueSetExpansionPropertyComponent element, int index) {
26624    if (element == null) 
26625      return;
26626    Complex t;
26627    if (Utilities.noString(parentType))
26628      t = parent;
26629    else {
26630      t = parent.predicate("fhir:"+parentType+'.'+name);
26631    }
26632    composeBackboneElement(t, "property", name, element, index);
26633    if (element.hasCodeElement()) {
26634      composeCode(t, "ValueSetExpansionPropertyComponent", "code", element.getCodeElement(), -1);
26635    }
26636    if (element.hasUriElement()) {
26637      composeUri(t, "ValueSetExpansionPropertyComponent", "uri", element.getUriElement(), -1);
26638    }
26639  }
26640
26641  protected void composeValueSetExpansionContainsComponent(Complex parent, String parentType, String name, ValueSet.ValueSetExpansionContainsComponent element, int index) {
26642    if (element == null) 
26643      return;
26644    Complex t;
26645    if (Utilities.noString(parentType))
26646      t = parent;
26647    else {
26648      t = parent.predicate("fhir:"+parentType+'.'+name);
26649    }
26650    composeBackboneElement(t, "contains", name, element, index);
26651    if (element.hasSystemElement()) {
26652      composeUri(t, "ValueSetExpansionContainsComponent", "system", element.getSystemElement(), -1);
26653    }
26654    if (element.hasAbstractElement()) {
26655      composeBoolean(t, "ValueSetExpansionContainsComponent", "abstract", element.getAbstractElement(), -1);
26656    }
26657    if (element.hasInactiveElement()) {
26658      composeBoolean(t, "ValueSetExpansionContainsComponent", "inactive", element.getInactiveElement(), -1);
26659    }
26660    if (element.hasVersionElement()) {
26661      composeString(t, "ValueSetExpansionContainsComponent", "version", element.getVersionElement(), -1);
26662    }
26663    if (element.hasCodeElement()) {
26664      composeCode(t, "ValueSetExpansionContainsComponent", "code", element.getCodeElement(), -1);
26665    }
26666    if (element.hasDisplayElement()) {
26667      composeString(t, "ValueSetExpansionContainsComponent", "display", element.getDisplayElement(), -1);
26668    }
26669    for (int i = 0; i < element.getDesignation().size(); i++) {
26670      composeValueSetConceptReferenceDesignationComponent(t, "ValueSetExpansionContainsComponent", "designation", element.getDesignation().get(i), i);
26671    }
26672    for (int i = 0; i < element.getProperty().size(); i++) {
26673      composeValueSetConceptPropertyComponent(t, "ValueSetExpansionContainsComponent", "property", element.getProperty().get(i), i);
26674    }
26675    for (int i = 0; i < element.getContains().size(); i++) {
26676      composeValueSetExpansionContainsComponent(t, "ValueSetExpansionContainsComponent", "contains", element.getContains().get(i), i);
26677    }
26678  }
26679
26680  protected void composeValueSetConceptPropertyComponent(Complex parent, String parentType, String name, ValueSet.ConceptPropertyComponent element, int index) {
26681    if (element == null) 
26682      return;
26683    Complex t;
26684    if (Utilities.noString(parentType))
26685      t = parent;
26686    else {
26687      t = parent.predicate("fhir:"+parentType+'.'+name);
26688    }
26689    composeBackboneElement(t, "property", name, element, index);
26690    if (element.hasCodeElement()) {
26691      composeCode(t, "ConceptPropertyComponent", "code", element.getCodeElement(), -1);
26692    }
26693    if (element.hasValue()) {
26694      composeType(t, "ConceptPropertyComponent", "value", element.getValue(), -1);
26695    }
26696    for (int i = 0; i < element.getSubProperty().size(); i++) {
26697      composeValueSetConceptSubPropertyComponent(t, "ConceptPropertyComponent", "subProperty", element.getSubProperty().get(i), i);
26698    }
26699  }
26700
26701  protected void composeValueSetConceptSubPropertyComponent(Complex parent, String parentType, String name, ValueSet.ConceptSubPropertyComponent element, int index) {
26702    if (element == null) 
26703      return;
26704    Complex t;
26705    if (Utilities.noString(parentType))
26706      t = parent;
26707    else {
26708      t = parent.predicate("fhir:"+parentType+'.'+name);
26709    }
26710    composeBackboneElement(t, "subProperty", name, element, index);
26711    if (element.hasCodeElement()) {
26712      composeCode(t, "ConceptSubPropertyComponent", "code", element.getCodeElement(), -1);
26713    }
26714    if (element.hasValue()) {
26715      composeType(t, "ConceptSubPropertyComponent", "value", element.getValue(), -1);
26716    }
26717  }
26718
26719  protected void composeValueSetScopeComponent(Complex parent, String parentType, String name, ValueSet.ValueSetScopeComponent element, int index) {
26720    if (element == null) 
26721      return;
26722    Complex t;
26723    if (Utilities.noString(parentType))
26724      t = parent;
26725    else {
26726      t = parent.predicate("fhir:"+parentType+'.'+name);
26727    }
26728    composeBackboneElement(t, "scope", name, element, index);
26729    if (element.hasInclusionCriteriaElement()) {
26730      composeString(t, "ValueSetScopeComponent", "inclusionCriteria", element.getInclusionCriteriaElement(), -1);
26731    }
26732    if (element.hasExclusionCriteriaElement()) {
26733      composeString(t, "ValueSetScopeComponent", "exclusionCriteria", element.getExclusionCriteriaElement(), -1);
26734    }
26735  }
26736
26737  protected void composeVerificationResult(Complex parent, String parentType, String name, VerificationResult element, int index) {
26738    if (element == null) 
26739      return;
26740    Complex t;
26741    if (Utilities.noString(parentType))
26742      t = parent;
26743    else {
26744      t = parent.predicate("fhir:"+parentType+'.'+name);
26745    }
26746    composeDomainResource(t, "VerificationResult", name, element, index);
26747    for (int i = 0; i < element.getTarget().size(); i++) {
26748      composeReference(t, "VerificationResult", "target", element.getTarget().get(i), i);
26749    }
26750    for (int i = 0; i < element.getTargetLocation().size(); i++) {
26751      composeString(t, "VerificationResult", "targetLocation", element.getTargetLocation().get(i), i);
26752    }
26753    if (element.hasNeed()) {
26754      composeCodeableConcept(t, "VerificationResult", "need", element.getNeed(), -1);
26755    }
26756    if (element.hasStatusElement()) {
26757      composeEnum(t, "VerificationResult", "status", element.getStatusElement(), -1);
26758    }
26759    if (element.hasStatusDateElement()) {
26760      composeDateTime(t, "VerificationResult", "statusDate", element.getStatusDateElement(), -1);
26761    }
26762    if (element.hasValidationType()) {
26763      composeCodeableConcept(t, "VerificationResult", "validationType", element.getValidationType(), -1);
26764    }
26765    for (int i = 0; i < element.getValidationProcess().size(); i++) {
26766      composeCodeableConcept(t, "VerificationResult", "validationProcess", element.getValidationProcess().get(i), i);
26767    }
26768    if (element.hasFrequency()) {
26769      composeTiming(t, "VerificationResult", "frequency", element.getFrequency(), -1);
26770    }
26771    if (element.hasLastPerformedElement()) {
26772      composeDateTime(t, "VerificationResult", "lastPerformed", element.getLastPerformedElement(), -1);
26773    }
26774    if (element.hasNextScheduledElement()) {
26775      composeDate(t, "VerificationResult", "nextScheduled", element.getNextScheduledElement(), -1);
26776    }
26777    if (element.hasFailureAction()) {
26778      composeCodeableConcept(t, "VerificationResult", "failureAction", element.getFailureAction(), -1);
26779    }
26780    for (int i = 0; i < element.getPrimarySource().size(); i++) {
26781      composeVerificationResultPrimarySourceComponent(t, "VerificationResult", "primarySource", element.getPrimarySource().get(i), i);
26782    }
26783    if (element.hasAttestation()) {
26784      composeVerificationResultAttestationComponent(t, "VerificationResult", "attestation", element.getAttestation(), -1);
26785    }
26786    for (int i = 0; i < element.getValidator().size(); i++) {
26787      composeVerificationResultValidatorComponent(t, "VerificationResult", "validator", element.getValidator().get(i), i);
26788    }
26789  }
26790
26791  protected void composeVerificationResultPrimarySourceComponent(Complex parent, String parentType, String name, VerificationResult.VerificationResultPrimarySourceComponent element, int index) {
26792    if (element == null) 
26793      return;
26794    Complex t;
26795    if (Utilities.noString(parentType))
26796      t = parent;
26797    else {
26798      t = parent.predicate("fhir:"+parentType+'.'+name);
26799    }
26800    composeBackboneElement(t, "primarySource", name, element, index);
26801    if (element.hasWho()) {
26802      composeReference(t, "VerificationResultPrimarySourceComponent", "who", element.getWho(), -1);
26803    }
26804    for (int i = 0; i < element.getType().size(); i++) {
26805      composeCodeableConcept(t, "VerificationResultPrimarySourceComponent", "type", element.getType().get(i), i);
26806    }
26807    for (int i = 0; i < element.getCommunicationMethod().size(); i++) {
26808      composeCodeableConcept(t, "VerificationResultPrimarySourceComponent", "communicationMethod", element.getCommunicationMethod().get(i), i);
26809    }
26810    if (element.hasValidationStatus()) {
26811      composeCodeableConcept(t, "VerificationResultPrimarySourceComponent", "validationStatus", element.getValidationStatus(), -1);
26812    }
26813    if (element.hasValidationDateElement()) {
26814      composeDateTime(t, "VerificationResultPrimarySourceComponent", "validationDate", element.getValidationDateElement(), -1);
26815    }
26816    if (element.hasCanPushUpdates()) {
26817      composeCodeableConcept(t, "VerificationResultPrimarySourceComponent", "canPushUpdates", element.getCanPushUpdates(), -1);
26818    }
26819    for (int i = 0; i < element.getPushTypeAvailable().size(); i++) {
26820      composeCodeableConcept(t, "VerificationResultPrimarySourceComponent", "pushTypeAvailable", element.getPushTypeAvailable().get(i), i);
26821    }
26822  }
26823
26824  protected void composeVerificationResultAttestationComponent(Complex parent, String parentType, String name, VerificationResult.VerificationResultAttestationComponent element, int index) {
26825    if (element == null) 
26826      return;
26827    Complex t;
26828    if (Utilities.noString(parentType))
26829      t = parent;
26830    else {
26831      t = parent.predicate("fhir:"+parentType+'.'+name);
26832    }
26833    composeBackboneElement(t, "attestation", name, element, index);
26834    if (element.hasWho()) {
26835      composeReference(t, "VerificationResultAttestationComponent", "who", element.getWho(), -1);
26836    }
26837    if (element.hasOnBehalfOf()) {
26838      composeReference(t, "VerificationResultAttestationComponent", "onBehalfOf", element.getOnBehalfOf(), -1);
26839    }
26840    if (element.hasCommunicationMethod()) {
26841      composeCodeableConcept(t, "VerificationResultAttestationComponent", "communicationMethod", element.getCommunicationMethod(), -1);
26842    }
26843    if (element.hasDateElement()) {
26844      composeDate(t, "VerificationResultAttestationComponent", "date", element.getDateElement(), -1);
26845    }
26846    if (element.hasSourceIdentityCertificateElement()) {
26847      composeString(t, "VerificationResultAttestationComponent", "sourceIdentityCertificate", element.getSourceIdentityCertificateElement(), -1);
26848    }
26849    if (element.hasProxyIdentityCertificateElement()) {
26850      composeString(t, "VerificationResultAttestationComponent", "proxyIdentityCertificate", element.getProxyIdentityCertificateElement(), -1);
26851    }
26852    if (element.hasProxySignature()) {
26853      composeSignature(t, "VerificationResultAttestationComponent", "proxySignature", element.getProxySignature(), -1);
26854    }
26855    if (element.hasSourceSignature()) {
26856      composeSignature(t, "VerificationResultAttestationComponent", "sourceSignature", element.getSourceSignature(), -1);
26857    }
26858  }
26859
26860  protected void composeVerificationResultValidatorComponent(Complex parent, String parentType, String name, VerificationResult.VerificationResultValidatorComponent element, int index) {
26861    if (element == null) 
26862      return;
26863    Complex t;
26864    if (Utilities.noString(parentType))
26865      t = parent;
26866    else {
26867      t = parent.predicate("fhir:"+parentType+'.'+name);
26868    }
26869    composeBackboneElement(t, "validator", name, element, index);
26870    if (element.hasOrganization()) {
26871      composeReference(t, "VerificationResultValidatorComponent", "organization", element.getOrganization(), -1);
26872    }
26873    if (element.hasIdentityCertificateElement()) {
26874      composeString(t, "VerificationResultValidatorComponent", "identityCertificate", element.getIdentityCertificateElement(), -1);
26875    }
26876    if (element.hasAttestationSignature()) {
26877      composeSignature(t, "VerificationResultValidatorComponent", "attestationSignature", element.getAttestationSignature(), -1);
26878    }
26879  }
26880
26881  protected void composeVisionPrescription(Complex parent, String parentType, String name, VisionPrescription element, int index) {
26882    if (element == null) 
26883      return;
26884    Complex t;
26885    if (Utilities.noString(parentType))
26886      t = parent;
26887    else {
26888      t = parent.predicate("fhir:"+parentType+'.'+name);
26889    }
26890    composeDomainResource(t, "VisionPrescription", name, element, index);
26891    for (int i = 0; i < element.getIdentifier().size(); i++) {
26892      composeIdentifier(t, "VisionPrescription", "identifier", element.getIdentifier().get(i), i);
26893    }
26894    if (element.hasStatusElement()) {
26895      composeEnum(t, "VisionPrescription", "status", element.getStatusElement(), -1);
26896    }
26897    if (element.hasCreatedElement()) {
26898      composeDateTime(t, "VisionPrescription", "created", element.getCreatedElement(), -1);
26899    }
26900    if (element.hasPatient()) {
26901      composeReference(t, "VisionPrescription", "patient", element.getPatient(), -1);
26902    }
26903    if (element.hasEncounter()) {
26904      composeReference(t, "VisionPrescription", "encounter", element.getEncounter(), -1);
26905    }
26906    if (element.hasDateWrittenElement()) {
26907      composeDateTime(t, "VisionPrescription", "dateWritten", element.getDateWrittenElement(), -1);
26908    }
26909    if (element.hasPrescriber()) {
26910      composeReference(t, "VisionPrescription", "prescriber", element.getPrescriber(), -1);
26911    }
26912    for (int i = 0; i < element.getLensSpecification().size(); i++) {
26913      composeVisionPrescriptionLensSpecificationComponent(t, "VisionPrescription", "lensSpecification", element.getLensSpecification().get(i), i);
26914    }
26915  }
26916
26917  protected void composeVisionPrescriptionLensSpecificationComponent(Complex parent, String parentType, String name, VisionPrescription.VisionPrescriptionLensSpecificationComponent element, int index) {
26918    if (element == null) 
26919      return;
26920    Complex t;
26921    if (Utilities.noString(parentType))
26922      t = parent;
26923    else {
26924      t = parent.predicate("fhir:"+parentType+'.'+name);
26925    }
26926    composeBackboneElement(t, "lensSpecification", name, element, index);
26927    if (element.hasProduct()) {
26928      composeCodeableConcept(t, "VisionPrescriptionLensSpecificationComponent", "product", element.getProduct(), -1);
26929    }
26930    if (element.hasEyeElement()) {
26931      composeEnum(t, "VisionPrescriptionLensSpecificationComponent", "eye", element.getEyeElement(), -1);
26932    }
26933    if (element.hasSphereElement()) {
26934      composeDecimal(t, "VisionPrescriptionLensSpecificationComponent", "sphere", element.getSphereElement(), -1);
26935    }
26936    if (element.hasCylinderElement()) {
26937      composeDecimal(t, "VisionPrescriptionLensSpecificationComponent", "cylinder", element.getCylinderElement(), -1);
26938    }
26939    if (element.hasAxisElement()) {
26940      composeInteger(t, "VisionPrescriptionLensSpecificationComponent", "axis", element.getAxisElement(), -1);
26941    }
26942    for (int i = 0; i < element.getPrism().size(); i++) {
26943      composeVisionPrescriptionPrismComponent(t, "VisionPrescriptionLensSpecificationComponent", "prism", element.getPrism().get(i), i);
26944    }
26945    if (element.hasAddElement()) {
26946      composeDecimal(t, "VisionPrescriptionLensSpecificationComponent", "add", element.getAddElement(), -1);
26947    }
26948    if (element.hasPowerElement()) {
26949      composeDecimal(t, "VisionPrescriptionLensSpecificationComponent", "power", element.getPowerElement(), -1);
26950    }
26951    if (element.hasBackCurveElement()) {
26952      composeDecimal(t, "VisionPrescriptionLensSpecificationComponent", "backCurve", element.getBackCurveElement(), -1);
26953    }
26954    if (element.hasDiameterElement()) {
26955      composeDecimal(t, "VisionPrescriptionLensSpecificationComponent", "diameter", element.getDiameterElement(), -1);
26956    }
26957    if (element.hasDuration()) {
26958      composeQuantity(t, "VisionPrescriptionLensSpecificationComponent", "duration", element.getDuration(), -1);
26959    }
26960    if (element.hasColorElement()) {
26961      composeString(t, "VisionPrescriptionLensSpecificationComponent", "color", element.getColorElement(), -1);
26962    }
26963    if (element.hasBrandElement()) {
26964      composeString(t, "VisionPrescriptionLensSpecificationComponent", "brand", element.getBrandElement(), -1);
26965    }
26966    for (int i = 0; i < element.getNote().size(); i++) {
26967      composeAnnotation(t, "VisionPrescriptionLensSpecificationComponent", "note", element.getNote().get(i), i);
26968    }
26969  }
26970
26971  protected void composeVisionPrescriptionPrismComponent(Complex parent, String parentType, String name, VisionPrescription.PrismComponent element, int index) {
26972    if (element == null) 
26973      return;
26974    Complex t;
26975    if (Utilities.noString(parentType))
26976      t = parent;
26977    else {
26978      t = parent.predicate("fhir:"+parentType+'.'+name);
26979    }
26980    composeBackboneElement(t, "prism", name, element, index);
26981    if (element.hasAmountElement()) {
26982      composeDecimal(t, "PrismComponent", "amount", element.getAmountElement(), -1);
26983    }
26984    if (element.hasBaseElement()) {
26985      composeEnum(t, "PrismComponent", "base", element.getBaseElement(), -1);
26986    }
26987  }
26988
26989
26990
26991
26992  @Override
26993  protected void composeResource(Complex parent, Resource resource) {
26994    if (parent == null) {
26995      throw new Error("parent == null");
26996    } else if (resource == null) {
26997      throw new Error("resource == null");
26998    } else if (resource instanceof Account) {
26999      composeAccount(parent, null, "Account", (Account)resource, -1);
27000    } else if (resource instanceof ActivityDefinition) {
27001      composeActivityDefinition(parent, null, "ActivityDefinition", (ActivityDefinition)resource, -1);
27002    } else if (resource instanceof ActorDefinition) {
27003      composeActorDefinition(parent, null, "ActorDefinition", (ActorDefinition)resource, -1);
27004    } else if (resource instanceof AdministrableProductDefinition) {
27005      composeAdministrableProductDefinition(parent, null, "AdministrableProductDefinition", (AdministrableProductDefinition)resource, -1);
27006    } else if (resource instanceof AdverseEvent) {
27007      composeAdverseEvent(parent, null, "AdverseEvent", (AdverseEvent)resource, -1);
27008    } else if (resource instanceof AllergyIntolerance) {
27009      composeAllergyIntolerance(parent, null, "AllergyIntolerance", (AllergyIntolerance)resource, -1);
27010    } else if (resource instanceof Appointment) {
27011      composeAppointment(parent, null, "Appointment", (Appointment)resource, -1);
27012    } else if (resource instanceof AppointmentResponse) {
27013      composeAppointmentResponse(parent, null, "AppointmentResponse", (AppointmentResponse)resource, -1);
27014    } else if (resource instanceof ArtifactAssessment) {
27015      composeArtifactAssessment(parent, null, "ArtifactAssessment", (ArtifactAssessment)resource, -1);
27016    } else if (resource instanceof AuditEvent) {
27017      composeAuditEvent(parent, null, "AuditEvent", (AuditEvent)resource, -1);
27018    } else if (resource instanceof Basic) {
27019      composeBasic(parent, null, "Basic", (Basic)resource, -1);
27020    } else if (resource instanceof Binary) {
27021      composeBinary(parent, null, "Binary", (Binary)resource, -1);
27022    } else if (resource instanceof BiologicallyDerivedProduct) {
27023      composeBiologicallyDerivedProduct(parent, null, "BiologicallyDerivedProduct", (BiologicallyDerivedProduct)resource, -1);
27024    } else if (resource instanceof BodyStructure) {
27025      composeBodyStructure(parent, null, "BodyStructure", (BodyStructure)resource, -1);
27026    } else if (resource instanceof Bundle) {
27027      composeBundle(parent, null, "Bundle", (Bundle)resource, -1);
27028    } else if (resource instanceof CapabilityStatement) {
27029      composeCapabilityStatement(parent, null, "CapabilityStatement", (CapabilityStatement)resource, -1);
27030    } else if (resource instanceof CarePlan) {
27031      composeCarePlan(parent, null, "CarePlan", (CarePlan)resource, -1);
27032    } else if (resource instanceof CareTeam) {
27033      composeCareTeam(parent, null, "CareTeam", (CareTeam)resource, -1);
27034    } else if (resource instanceof ChargeItem) {
27035      composeChargeItem(parent, null, "ChargeItem", (ChargeItem)resource, -1);
27036    } else if (resource instanceof ChargeItemDefinition) {
27037      composeChargeItemDefinition(parent, null, "ChargeItemDefinition", (ChargeItemDefinition)resource, -1);
27038    } else if (resource instanceof Citation) {
27039      composeCitation(parent, null, "Citation", (Citation)resource, -1);
27040    } else if (resource instanceof Claim) {
27041      composeClaim(parent, null, "Claim", (Claim)resource, -1);
27042    } else if (resource instanceof ClaimResponse) {
27043      composeClaimResponse(parent, null, "ClaimResponse", (ClaimResponse)resource, -1);
27044    } else if (resource instanceof ClinicalImpression) {
27045      composeClinicalImpression(parent, null, "ClinicalImpression", (ClinicalImpression)resource, -1);
27046    } else if (resource instanceof ClinicalUseDefinition) {
27047      composeClinicalUseDefinition(parent, null, "ClinicalUseDefinition", (ClinicalUseDefinition)resource, -1);
27048    } else if (resource instanceof CodeSystem) {
27049      composeCodeSystem(parent, null, "CodeSystem", (CodeSystem)resource, -1);
27050    } else if (resource instanceof Communication) {
27051      composeCommunication(parent, null, "Communication", (Communication)resource, -1);
27052    } else if (resource instanceof CommunicationRequest) {
27053      composeCommunicationRequest(parent, null, "CommunicationRequest", (CommunicationRequest)resource, -1);
27054    } else if (resource instanceof CompartmentDefinition) {
27055      composeCompartmentDefinition(parent, null, "CompartmentDefinition", (CompartmentDefinition)resource, -1);
27056    } else if (resource instanceof Composition) {
27057      composeComposition(parent, null, "Composition", (Composition)resource, -1);
27058    } else if (resource instanceof ConceptMap) {
27059      composeConceptMap(parent, null, "ConceptMap", (ConceptMap)resource, -1);
27060    } else if (resource instanceof Condition) {
27061      composeCondition(parent, null, "Condition", (Condition)resource, -1);
27062    } else if (resource instanceof ConditionDefinition) {
27063      composeConditionDefinition(parent, null, "ConditionDefinition", (ConditionDefinition)resource, -1);
27064    } else if (resource instanceof Consent) {
27065      composeConsent(parent, null, "Consent", (Consent)resource, -1);
27066    } else if (resource instanceof Contract) {
27067      composeContract(parent, null, "Contract", (Contract)resource, -1);
27068    } else if (resource instanceof Coverage) {
27069      composeCoverage(parent, null, "Coverage", (Coverage)resource, -1);
27070    } else if (resource instanceof CoverageEligibilityRequest) {
27071      composeCoverageEligibilityRequest(parent, null, "CoverageEligibilityRequest", (CoverageEligibilityRequest)resource, -1);
27072    } else if (resource instanceof CoverageEligibilityResponse) {
27073      composeCoverageEligibilityResponse(parent, null, "CoverageEligibilityResponse", (CoverageEligibilityResponse)resource, -1);
27074    } else if (resource instanceof DetectedIssue) {
27075      composeDetectedIssue(parent, null, "DetectedIssue", (DetectedIssue)resource, -1);
27076    } else if (resource instanceof Device) {
27077      composeDevice(parent, null, "Device", (Device)resource, -1);
27078    } else if (resource instanceof DeviceDefinition) {
27079      composeDeviceDefinition(parent, null, "DeviceDefinition", (DeviceDefinition)resource, -1);
27080    } else if (resource instanceof DeviceDispense) {
27081      composeDeviceDispense(parent, null, "DeviceDispense", (DeviceDispense)resource, -1);
27082    } else if (resource instanceof DeviceMetric) {
27083      composeDeviceMetric(parent, null, "DeviceMetric", (DeviceMetric)resource, -1);
27084    } else if (resource instanceof DeviceRequest) {
27085      composeDeviceRequest(parent, null, "DeviceRequest", (DeviceRequest)resource, -1);
27086    } else if (resource instanceof DeviceUsage) {
27087      composeDeviceUsage(parent, null, "DeviceUsage", (DeviceUsage)resource, -1);
27088    } else if (resource instanceof DiagnosticReport) {
27089      composeDiagnosticReport(parent, null, "DiagnosticReport", (DiagnosticReport)resource, -1);
27090    } else if (resource instanceof DocumentManifest) {
27091      composeDocumentManifest(parent, null, "DocumentManifest", (DocumentManifest)resource, -1);
27092    } else if (resource instanceof DocumentReference) {
27093      composeDocumentReference(parent, null, "DocumentReference", (DocumentReference)resource, -1);
27094    } else if (resource instanceof Encounter) {
27095      composeEncounter(parent, null, "Encounter", (Encounter)resource, -1);
27096    } else if (resource instanceof Endpoint) {
27097      composeEndpoint(parent, null, "Endpoint", (Endpoint)resource, -1);
27098    } else if (resource instanceof EnrollmentRequest) {
27099      composeEnrollmentRequest(parent, null, "EnrollmentRequest", (EnrollmentRequest)resource, -1);
27100    } else if (resource instanceof EnrollmentResponse) {
27101      composeEnrollmentResponse(parent, null, "EnrollmentResponse", (EnrollmentResponse)resource, -1);
27102    } else if (resource instanceof EpisodeOfCare) {
27103      composeEpisodeOfCare(parent, null, "EpisodeOfCare", (EpisodeOfCare)resource, -1);
27104    } else if (resource instanceof EventDefinition) {
27105      composeEventDefinition(parent, null, "EventDefinition", (EventDefinition)resource, -1);
27106    } else if (resource instanceof Evidence) {
27107      composeEvidence(parent, null, "Evidence", (Evidence)resource, -1);
27108    } else if (resource instanceof EvidenceReport) {
27109      composeEvidenceReport(parent, null, "EvidenceReport", (EvidenceReport)resource, -1);
27110    } else if (resource instanceof EvidenceVariable) {
27111      composeEvidenceVariable(parent, null, "EvidenceVariable", (EvidenceVariable)resource, -1);
27112    } else if (resource instanceof ExampleScenario) {
27113      composeExampleScenario(parent, null, "ExampleScenario", (ExampleScenario)resource, -1);
27114    } else if (resource instanceof ExplanationOfBenefit) {
27115      composeExplanationOfBenefit(parent, null, "ExplanationOfBenefit", (ExplanationOfBenefit)resource, -1);
27116    } else if (resource instanceof FamilyMemberHistory) {
27117      composeFamilyMemberHistory(parent, null, "FamilyMemberHistory", (FamilyMemberHistory)resource, -1);
27118    } else if (resource instanceof Flag) {
27119      composeFlag(parent, null, "Flag", (Flag)resource, -1);
27120    } else if (resource instanceof FormularyItem) {
27121      composeFormularyItem(parent, null, "FormularyItem", (FormularyItem)resource, -1);
27122    } else if (resource instanceof GenomicStudy) {
27123      composeGenomicStudy(parent, null, "GenomicStudy", (GenomicStudy)resource, -1);
27124    } else if (resource instanceof Goal) {
27125      composeGoal(parent, null, "Goal", (Goal)resource, -1);
27126    } else if (resource instanceof GraphDefinition) {
27127      composeGraphDefinition(parent, null, "GraphDefinition", (GraphDefinition)resource, -1);
27128    } else if (resource instanceof Group) {
27129      composeGroup(parent, null, "Group", (Group)resource, -1);
27130    } else if (resource instanceof GuidanceResponse) {
27131      composeGuidanceResponse(parent, null, "GuidanceResponse", (GuidanceResponse)resource, -1);
27132    } else if (resource instanceof HealthcareService) {
27133      composeHealthcareService(parent, null, "HealthcareService", (HealthcareService)resource, -1);
27134    } else if (resource instanceof ImagingSelection) {
27135      composeImagingSelection(parent, null, "ImagingSelection", (ImagingSelection)resource, -1);
27136    } else if (resource instanceof ImagingStudy) {
27137      composeImagingStudy(parent, null, "ImagingStudy", (ImagingStudy)resource, -1);
27138    } else if (resource instanceof Immunization) {
27139      composeImmunization(parent, null, "Immunization", (Immunization)resource, -1);
27140    } else if (resource instanceof ImmunizationEvaluation) {
27141      composeImmunizationEvaluation(parent, null, "ImmunizationEvaluation", (ImmunizationEvaluation)resource, -1);
27142    } else if (resource instanceof ImmunizationRecommendation) {
27143      composeImmunizationRecommendation(parent, null, "ImmunizationRecommendation", (ImmunizationRecommendation)resource, -1);
27144    } else if (resource instanceof ImplementationGuide) {
27145      composeImplementationGuide(parent, null, "ImplementationGuide", (ImplementationGuide)resource, -1);
27146    } else if (resource instanceof Ingredient) {
27147      composeIngredient(parent, null, "Ingredient", (Ingredient)resource, -1);
27148    } else if (resource instanceof InsurancePlan) {
27149      composeInsurancePlan(parent, null, "InsurancePlan", (InsurancePlan)resource, -1);
27150    } else if (resource instanceof InventoryReport) {
27151      composeInventoryReport(parent, null, "InventoryReport", (InventoryReport)resource, -1);
27152    } else if (resource instanceof Invoice) {
27153      composeInvoice(parent, null, "Invoice", (Invoice)resource, -1);
27154    } else if (resource instanceof Library) {
27155      composeLibrary(parent, null, "Library", (Library)resource, -1);
27156    } else if (resource instanceof Linkage) {
27157      composeLinkage(parent, null, "Linkage", (Linkage)resource, -1);
27158    } else if (resource instanceof ListResource) {
27159      composeListResource(parent, null, "List", (ListResource)resource, -1);
27160    } else if (resource instanceof Location) {
27161      composeLocation(parent, null, "Location", (Location)resource, -1);
27162    } else if (resource instanceof ManufacturedItemDefinition) {
27163      composeManufacturedItemDefinition(parent, null, "ManufacturedItemDefinition", (ManufacturedItemDefinition)resource, -1);
27164    } else if (resource instanceof Measure) {
27165      composeMeasure(parent, null, "Measure", (Measure)resource, -1);
27166    } else if (resource instanceof MeasureReport) {
27167      composeMeasureReport(parent, null, "MeasureReport", (MeasureReport)resource, -1);
27168    } else if (resource instanceof Medication) {
27169      composeMedication(parent, null, "Medication", (Medication)resource, -1);
27170    } else if (resource instanceof MedicationAdministration) {
27171      composeMedicationAdministration(parent, null, "MedicationAdministration", (MedicationAdministration)resource, -1);
27172    } else if (resource instanceof MedicationDispense) {
27173      composeMedicationDispense(parent, null, "MedicationDispense", (MedicationDispense)resource, -1);
27174    } else if (resource instanceof MedicationKnowledge) {
27175      composeMedicationKnowledge(parent, null, "MedicationKnowledge", (MedicationKnowledge)resource, -1);
27176    } else if (resource instanceof MedicationRequest) {
27177      composeMedicationRequest(parent, null, "MedicationRequest", (MedicationRequest)resource, -1);
27178    } else if (resource instanceof MedicationUsage) {
27179      composeMedicationUsage(parent, null, "MedicationUsage", (MedicationUsage)resource, -1);
27180    } else if (resource instanceof MedicinalProductDefinition) {
27181      composeMedicinalProductDefinition(parent, null, "MedicinalProductDefinition", (MedicinalProductDefinition)resource, -1);
27182    } else if (resource instanceof MessageDefinition) {
27183      composeMessageDefinition(parent, null, "MessageDefinition", (MessageDefinition)resource, -1);
27184    } else if (resource instanceof MessageHeader) {
27185      composeMessageHeader(parent, null, "MessageHeader", (MessageHeader)resource, -1);
27186    } else if (resource instanceof MolecularSequence) {
27187      composeMolecularSequence(parent, null, "MolecularSequence", (MolecularSequence)resource, -1);
27188    } else if (resource instanceof NamingSystem) {
27189      composeNamingSystem(parent, null, "NamingSystem", (NamingSystem)resource, -1);
27190    } else if (resource instanceof NutritionIntake) {
27191      composeNutritionIntake(parent, null, "NutritionIntake", (NutritionIntake)resource, -1);
27192    } else if (resource instanceof NutritionOrder) {
27193      composeNutritionOrder(parent, null, "NutritionOrder", (NutritionOrder)resource, -1);
27194    } else if (resource instanceof NutritionProduct) {
27195      composeNutritionProduct(parent, null, "NutritionProduct", (NutritionProduct)resource, -1);
27196    } else if (resource instanceof Observation) {
27197      composeObservation(parent, null, "Observation", (Observation)resource, -1);
27198    } else if (resource instanceof ObservationDefinition) {
27199      composeObservationDefinition(parent, null, "ObservationDefinition", (ObservationDefinition)resource, -1);
27200    } else if (resource instanceof OperationDefinition) {
27201      composeOperationDefinition(parent, null, "OperationDefinition", (OperationDefinition)resource, -1);
27202    } else if (resource instanceof OperationOutcome) {
27203      composeOperationOutcome(parent, null, "OperationOutcome", (OperationOutcome)resource, -1);
27204    } else if (resource instanceof Organization) {
27205      composeOrganization(parent, null, "Organization", (Organization)resource, -1);
27206    } else if (resource instanceof OrganizationAffiliation) {
27207      composeOrganizationAffiliation(parent, null, "OrganizationAffiliation", (OrganizationAffiliation)resource, -1);
27208    } else if (resource instanceof PackagedProductDefinition) {
27209      composePackagedProductDefinition(parent, null, "PackagedProductDefinition", (PackagedProductDefinition)resource, -1);
27210    } else if (resource instanceof Parameters) {
27211      composeParameters(parent, null, "Parameters", (Parameters)resource, -1);
27212    } else if (resource instanceof Patient) {
27213      composePatient(parent, null, "Patient", (Patient)resource, -1);
27214    } else if (resource instanceof PaymentNotice) {
27215      composePaymentNotice(parent, null, "PaymentNotice", (PaymentNotice)resource, -1);
27216    } else if (resource instanceof PaymentReconciliation) {
27217      composePaymentReconciliation(parent, null, "PaymentReconciliation", (PaymentReconciliation)resource, -1);
27218    } else if (resource instanceof Permission) {
27219      composePermission(parent, null, "Permission", (Permission)resource, -1);
27220    } else if (resource instanceof Person) {
27221      composePerson(parent, null, "Person", (Person)resource, -1);
27222    } else if (resource instanceof PlanDefinition) {
27223      composePlanDefinition(parent, null, "PlanDefinition", (PlanDefinition)resource, -1);
27224    } else if (resource instanceof Practitioner) {
27225      composePractitioner(parent, null, "Practitioner", (Practitioner)resource, -1);
27226    } else if (resource instanceof PractitionerRole) {
27227      composePractitionerRole(parent, null, "PractitionerRole", (PractitionerRole)resource, -1);
27228    } else if (resource instanceof Procedure) {
27229      composeProcedure(parent, null, "Procedure", (Procedure)resource, -1);
27230    } else if (resource instanceof Provenance) {
27231      composeProvenance(parent, null, "Provenance", (Provenance)resource, -1);
27232    } else if (resource instanceof Questionnaire) {
27233      composeQuestionnaire(parent, null, "Questionnaire", (Questionnaire)resource, -1);
27234    } else if (resource instanceof QuestionnaireResponse) {
27235      composeQuestionnaireResponse(parent, null, "QuestionnaireResponse", (QuestionnaireResponse)resource, -1);
27236    } else if (resource instanceof RegulatedAuthorization) {
27237      composeRegulatedAuthorization(parent, null, "RegulatedAuthorization", (RegulatedAuthorization)resource, -1);
27238    } else if (resource instanceof RelatedPerson) {
27239      composeRelatedPerson(parent, null, "RelatedPerson", (RelatedPerson)resource, -1);
27240    } else if (resource instanceof RequestOrchestration) {
27241      composeRequestOrchestration(parent, null, "RequestOrchestration", (RequestOrchestration)resource, -1);
27242    } else if (resource instanceof Requirements) {
27243      composeRequirements(parent, null, "Requirements", (Requirements)resource, -1);
27244    } else if (resource instanceof ResearchStudy) {
27245      composeResearchStudy(parent, null, "ResearchStudy", (ResearchStudy)resource, -1);
27246    } else if (resource instanceof ResearchSubject) {
27247      composeResearchSubject(parent, null, "ResearchSubject", (ResearchSubject)resource, -1);
27248    } else if (resource instanceof RiskAssessment) {
27249      composeRiskAssessment(parent, null, "RiskAssessment", (RiskAssessment)resource, -1);
27250    } else if (resource instanceof Schedule) {
27251      composeSchedule(parent, null, "Schedule", (Schedule)resource, -1);
27252    } else if (resource instanceof SearchParameter) {
27253      composeSearchParameter(parent, null, "SearchParameter", (SearchParameter)resource, -1);
27254    } else if (resource instanceof ServiceRequest) {
27255      composeServiceRequest(parent, null, "ServiceRequest", (ServiceRequest)resource, -1);
27256    } else if (resource instanceof Slot) {
27257      composeSlot(parent, null, "Slot", (Slot)resource, -1);
27258    } else if (resource instanceof Specimen) {
27259      composeSpecimen(parent, null, "Specimen", (Specimen)resource, -1);
27260    } else if (resource instanceof SpecimenDefinition) {
27261      composeSpecimenDefinition(parent, null, "SpecimenDefinition", (SpecimenDefinition)resource, -1);
27262    } else if (resource instanceof StructureDefinition) {
27263      composeStructureDefinition(parent, null, "StructureDefinition", (StructureDefinition)resource, -1);
27264    } else if (resource instanceof StructureMap) {
27265      composeStructureMap(parent, null, "StructureMap", (StructureMap)resource, -1);
27266    } else if (resource instanceof Subscription) {
27267      composeSubscription(parent, null, "Subscription", (Subscription)resource, -1);
27268    } else if (resource instanceof SubscriptionStatus) {
27269      composeSubscriptionStatus(parent, null, "SubscriptionStatus", (SubscriptionStatus)resource, -1);
27270    } else if (resource instanceof SubscriptionTopic) {
27271      composeSubscriptionTopic(parent, null, "SubscriptionTopic", (SubscriptionTopic)resource, -1);
27272    } else if (resource instanceof Substance) {
27273      composeSubstance(parent, null, "Substance", (Substance)resource, -1);
27274    } else if (resource instanceof SubstanceDefinition) {
27275      composeSubstanceDefinition(parent, null, "SubstanceDefinition", (SubstanceDefinition)resource, -1);
27276    } else if (resource instanceof SubstanceNucleicAcid) {
27277      composeSubstanceNucleicAcid(parent, null, "SubstanceNucleicAcid", (SubstanceNucleicAcid)resource, -1);
27278    } else if (resource instanceof SubstancePolymer) {
27279      composeSubstancePolymer(parent, null, "SubstancePolymer", (SubstancePolymer)resource, -1);
27280    } else if (resource instanceof SubstanceProtein) {
27281      composeSubstanceProtein(parent, null, "SubstanceProtein", (SubstanceProtein)resource, -1);
27282    } else if (resource instanceof SubstanceReferenceInformation) {
27283      composeSubstanceReferenceInformation(parent, null, "SubstanceReferenceInformation", (SubstanceReferenceInformation)resource, -1);
27284    } else if (resource instanceof SubstanceSourceMaterial) {
27285      composeSubstanceSourceMaterial(parent, null, "SubstanceSourceMaterial", (SubstanceSourceMaterial)resource, -1);
27286    } else if (resource instanceof SupplyDelivery) {
27287      composeSupplyDelivery(parent, null, "SupplyDelivery", (SupplyDelivery)resource, -1);
27288    } else if (resource instanceof SupplyRequest) {
27289      composeSupplyRequest(parent, null, "SupplyRequest", (SupplyRequest)resource, -1);
27290    } else if (resource instanceof Task) {
27291      composeTask(parent, null, "Task", (Task)resource, -1);
27292    } else if (resource instanceof TerminologyCapabilities) {
27293      composeTerminologyCapabilities(parent, null, "TerminologyCapabilities", (TerminologyCapabilities)resource, -1);
27294    } else if (resource instanceof TestReport) {
27295      composeTestReport(parent, null, "TestReport", (TestReport)resource, -1);
27296    } else if (resource instanceof TestScript) {
27297      composeTestScript(parent, null, "TestScript", (TestScript)resource, -1);
27298    } else if (resource instanceof Transport) {
27299      composeTransport(parent, null, "Transport", (Transport)resource, -1);
27300    } else if (resource instanceof ValueSet) {
27301      composeValueSet(parent, null, "ValueSet", (ValueSet)resource, -1);
27302    } else if (resource instanceof VerificationResult) {
27303      composeVerificationResult(parent, null, "VerificationResult", (VerificationResult)resource, -1);
27304    } else if (resource instanceof VisionPrescription) {
27305      composeVisionPrescription(parent, null, "VisionPrescription", (VisionPrescription)resource, -1);
27306      
27307    } else {
27308      throw new Error("Unhandled resource type "+resource.getClass().getName());
27309    }
27310  }
27311
27312  protected void composeType(Complex parent, String parentType, String name, DataType value, int index) {
27313    if (parent == null) {
27314      throw new Error("parent == null");
27315    } else if (parentType == null) {
27316      throw new Error("parentType == null");
27317    } else if (name == null) {
27318      throw new Error("name == null");
27319    } else if (value == null) {
27320      throw new Error("value == null");
27321    } else if (value instanceof DateType) {
27322      composeDate(parent, parentType, name, (DateType)value, index);
27323    } else if (value instanceof DateTimeType) {
27324      composeDateTime(parent, parentType, name, (DateTimeType)value, index);
27325    } else if (value instanceof CodeType) {
27326      composeCode(parent, parentType, name, (CodeType)value, index);
27327    } else if (value instanceof StringType) {
27328      composeString(parent, parentType, name, (StringType)value, index);
27329    } else if (value instanceof IntegerType) {
27330      composeInteger(parent, parentType, name, (IntegerType)value, index);
27331    } else if (value instanceof Integer64Type) {
27332      composeInteger64(parent, parentType, name, (Integer64Type)value, index);
27333    } else if (value instanceof OidType) {
27334      composeOid(parent, parentType, name, (OidType)value, index);
27335    } else if (value instanceof CanonicalType) {
27336      composeCanonical(parent, parentType, name, (CanonicalType)value, index);
27337    } else if (value instanceof UriType) {
27338      composeUri(parent, parentType, name, (UriType)value, index);
27339    } else if (value instanceof UuidType) {
27340      composeUuid(parent, parentType, name, (UuidType)value, index);
27341    } else if (value instanceof UrlType) {
27342      composeUrl(parent, parentType, name, (UrlType)value, index);
27343    } else if (value instanceof InstantType) {
27344      composeInstant(parent, parentType, name, (InstantType)value, index);
27345    } else if (value instanceof BooleanType) {
27346      composeBoolean(parent, parentType, name, (BooleanType)value, index);
27347    } else if (value instanceof Base64BinaryType) {
27348      composeBase64Binary(parent, parentType, name, (Base64BinaryType)value, index);
27349    } else if (value instanceof UnsignedIntType) {
27350      composeUnsignedInt(parent, parentType, name, (UnsignedIntType)value, index);
27351    } else if (value instanceof MarkdownType) {
27352      composeMarkdown(parent, parentType, name, (MarkdownType)value, index);
27353    } else if (value instanceof TimeType) {
27354      composeTime(parent, parentType, name, (TimeType)value, index);
27355    } else if (value instanceof IdType) {
27356      composeId(parent, parentType, name, (IdType)value, index);
27357    } else if (value instanceof PositiveIntType) {
27358      composePositiveInt(parent, parentType, name, (PositiveIntType)value, index);
27359    } else if (value instanceof DecimalType) {
27360      composeDecimal(parent, parentType, name, (DecimalType)value, index);
27361    } else if (value instanceof Address) {
27362      composeAddress(parent, parentType, name, (Address)value, index);
27363    } else if (value instanceof Age) {
27364      composeAge(parent, parentType, name, (Age)value, index);
27365    } else if (value instanceof Annotation) {
27366      composeAnnotation(parent, parentType, name, (Annotation)value, index);
27367    } else if (value instanceof Attachment) {
27368      composeAttachment(parent, parentType, name, (Attachment)value, index);
27369    } else if (value instanceof Availability) {
27370      composeAvailability(parent, parentType, name, (Availability)value, index);
27371    } else if (value instanceof CodeableConcept) {
27372      composeCodeableConcept(parent, parentType, name, (CodeableConcept)value, index);
27373    } else if (value instanceof CodeableReference) {
27374      composeCodeableReference(parent, parentType, name, (CodeableReference)value, index);
27375    } else if (value instanceof Coding) {
27376      composeCoding(parent, parentType, name, (Coding)value, index);
27377    } else if (value instanceof ContactDetail) {
27378      composeContactDetail(parent, parentType, name, (ContactDetail)value, index);
27379    } else if (value instanceof ContactPoint) {
27380      composeContactPoint(parent, parentType, name, (ContactPoint)value, index);
27381    } else if (value instanceof Contributor) {
27382      composeContributor(parent, parentType, name, (Contributor)value, index);
27383    } else if (value instanceof Count) {
27384      composeCount(parent, parentType, name, (Count)value, index);
27385    } else if (value instanceof DataRequirement) {
27386      composeDataRequirement(parent, parentType, name, (DataRequirement)value, index);
27387    } else if (value instanceof Distance) {
27388      composeDistance(parent, parentType, name, (Distance)value, index);
27389    } else if (value instanceof Dosage) {
27390      composeDosage(parent, parentType, name, (Dosage)value, index);
27391    } else if (value instanceof Duration) {
27392      composeDuration(parent, parentType, name, (Duration)value, index);
27393    } else if (value instanceof ElementDefinition) {
27394      composeElementDefinition(parent, parentType, name, (ElementDefinition)value, index);
27395    } else if (value instanceof Expression) {
27396      composeExpression(parent, parentType, name, (Expression)value, index);
27397    } else if (value instanceof ExtendedContactDetail) {
27398      composeExtendedContactDetail(parent, parentType, name, (ExtendedContactDetail)value, index);
27399    } else if (value instanceof Extension) {
27400      composeExtension(parent, parentType, name, (Extension)value, index);
27401    } else if (value instanceof HumanName) {
27402      composeHumanName(parent, parentType, name, (HumanName)value, index);
27403    } else if (value instanceof Identifier) {
27404      composeIdentifier(parent, parentType, name, (Identifier)value, index);
27405    } else if (value instanceof MarketingStatus) {
27406      composeMarketingStatus(parent, parentType, name, (MarketingStatus)value, index);
27407    } else if (value instanceof Meta) {
27408      composeMeta(parent, parentType, name, (Meta)value, index);
27409    } else if (value instanceof MonetaryComponent) {
27410      composeMonetaryComponent(parent, parentType, name, (MonetaryComponent)value, index);
27411    } else if (value instanceof Money) {
27412      composeMoney(parent, parentType, name, (Money)value, index);
27413    } else if (value instanceof Narrative) {
27414      composeNarrative(parent, parentType, name, (Narrative)value, index);
27415    } else if (value instanceof ParameterDefinition) {
27416      composeParameterDefinition(parent, parentType, name, (ParameterDefinition)value, index);
27417    } else if (value instanceof Period) {
27418      composePeriod(parent, parentType, name, (Period)value, index);
27419    } else if (value instanceof Population) {
27420      composePopulation(parent, parentType, name, (Population)value, index);
27421    } else if (value instanceof ProductShelfLife) {
27422      composeProductShelfLife(parent, parentType, name, (ProductShelfLife)value, index);
27423    } else if (value instanceof Quantity) {
27424      composeQuantity(parent, parentType, name, (Quantity)value, index);
27425    } else if (value instanceof Range) {
27426      composeRange(parent, parentType, name, (Range)value, index);
27427    } else if (value instanceof Ratio) {
27428      composeRatio(parent, parentType, name, (Ratio)value, index);
27429    } else if (value instanceof RatioRange) {
27430      composeRatioRange(parent, parentType, name, (RatioRange)value, index);
27431    } else if (value instanceof Reference) {
27432      composeReference(parent, parentType, name, (Reference)value, index);
27433    } else if (value instanceof RelatedArtifact) {
27434      composeRelatedArtifact(parent, parentType, name, (RelatedArtifact)value, index);
27435    } else if (value instanceof SampledData) {
27436      composeSampledData(parent, parentType, name, (SampledData)value, index);
27437    } else if (value instanceof Signature) {
27438      composeSignature(parent, parentType, name, (Signature)value, index);
27439    } else if (value instanceof Timing) {
27440      composeTiming(parent, parentType, name, (Timing)value, index);
27441    } else if (value instanceof TriggerDefinition) {
27442      composeTriggerDefinition(parent, parentType, name, (TriggerDefinition)value, index);
27443    } else if (value instanceof UsageContext) {
27444      composeUsageContext(parent, parentType, name, (UsageContext)value, index);
27445    } else if (value instanceof VirtualServiceDetail) {
27446      composeVirtualServiceDetail(parent, parentType, name, (VirtualServiceDetail)value, index);
27447      
27448    } else {
27449      throw new Error("Unhandled type");
27450    }
27451  }
27452
27453}