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 Thu, Mar 23, 2023 19:59+1100 for FHIR v5.0.0
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:"+name, index > -1);
061    t.predicate("fhir:v", ttlLiteral(value.asStringValue()), false);
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:"+name, index > -1);
071    t.predicate("fhir:v", ttlLiteral(value.asStringValue()), false);
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:"+name, index > -1);
079    t.predicate("fhir:v", ttlLiteral(value.asStringValue()), false);
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:"+name, index > -1);
087    t.predicate("fhir:v", ttlLiteral(value.asStringValue()), false);
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:"+name, index > -1);
096    t.predicate("fhir:v", ttlLiteral(value.asStringValue()), false);
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:"+name, index > -1);
104    t.predicate("fhir:v", ttlLiteral(value.asStringValue()), false);
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:"+name, index > -1);
112    t.predicate("fhir:v", ttlLiteral(value.asStringValue()), false);
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:"+name, index > -1);
120    t.predicate("fhir:v", ttlLiteral(value.asStringValue()), false);
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:"+name, index > -1);
128    t.predicate("fhir:v", ttlLiteral(value.asStringValue()), false);
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:"+name, index > -1);
136    t.predicate("fhir:v", ttlLiteral(value.asStringValue()), false);
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:"+name, index > -1);
144    t.predicate("fhir:v", ttlLiteral(value.asStringValue()), false);
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:"+name, index > -1);
152    t.predicate("fhir:v", ttlLiteral(value.asStringValue()), false);
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:"+name, index > -1);
160    t.predicate("fhir:v", ttlLiteral(value.asStringValue()), false);
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:"+name, index > -1);
168    t.predicate("fhir:v", ttlLiteral(value.asStringValue()), false);
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:"+name, index > -1);
176    t.predicate("fhir:v", ttlLiteral(value.asStringValue()), false);
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:"+name, index > -1);
184    t.predicate("fhir:v", ttlLiteral(value.asStringValue()), false);
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:"+name, index > -1);
192    t.predicate("fhir:v", ttlLiteral(value.asStringValue()), false);
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:"+name, index > -1);
200    t.predicate("fhir:v", ttlLiteral(value.asStringValue()), false);
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:"+name, index > -1);
208    t.predicate("fhir:v", ttlLiteral(value.asStringValue()), false);
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:"+name, index > -1);
216    t.predicate("fhir:v", ttlLiteral(value.asStringValue()), false);
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:"+name, index > -1);
224    t.predicate("fhir:v", ttlLiteral(value.asStringValue()), false);
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:"+name,index > -1);
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:"+name,index > -1);
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:"+name,index > -1);
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:"+name,index > -1);
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:"+name,index > -1);
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:"+name,index > -1);
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:"+name,index > -1);
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:"+name,index > -1);
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:"+name,index > -1);
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:"+name,index > -1);
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:"+name,index > -1);
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:"+name,index > -1);
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:"+name,index > -1);
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:"+name,index > -1);
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:"+name,index > -1);
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:"+name,index > -1);
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:"+name,index > -1);
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:"+name,index > -1);
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:"+name,index > -1);
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:"+name,index > -1);
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:"+name,index > -1);
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:"+name,index > -1);
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:"+name,index > -1);
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:"+name,index > -1);
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    if (element.hasIsModifierElement()) {
914      composeBoolean(t, "ElementDefinition", "isModifier", element.getIsModifierElement(), -1);
915    }
916    if (element.hasIsModifierReasonElement()) {
917      composeString(t, "ElementDefinition", "isModifierReason", element.getIsModifierReasonElement(), -1);
918    }
919    if (element.hasIsSummaryElement()) {
920      composeBoolean(t, "ElementDefinition", "isSummary", element.getIsSummaryElement(), -1);
921    }
922    if (element.hasBinding()) {
923      composeElementDefinitionBindingComponent(t, "ElementDefinition", "binding", element.getBinding(), -1);
924    }
925    for (int i = 0; i < element.getMapping().size(); i++) {
926      composeElementDefinitionMappingComponent(t, "ElementDefinition", "mapping", element.getMapping().get(i), i);
927    }
928  }
929
930  protected void composeElementDefinitionSlicingComponent(Complex parent, String parentType, String name, ElementDefinition.ElementDefinitionSlicingComponent element, int index) {
931    if (element == null) 
932      return;
933    Complex t;
934    if (Utilities.noString(parentType))
935      t = parent;
936    else {
937      t = parent.predicate("fhir:"+name,index > -1);
938    }
939    composeElement(t, "slicing", name, element, index);
940    for (int i = 0; i < element.getDiscriminator().size(); i++) {
941      composeElementDefinitionSlicingDiscriminatorComponent(t, "ElementDefinitionSlicingComponent", "discriminator", element.getDiscriminator().get(i), i);
942    }
943    if (element.hasDescriptionElement()) {
944      composeString(t, "ElementDefinitionSlicingComponent", "description", element.getDescriptionElement(), -1);
945    }
946    if (element.hasOrderedElement()) {
947      composeBoolean(t, "ElementDefinitionSlicingComponent", "ordered", element.getOrderedElement(), -1);
948    }
949    if (element.hasRulesElement()) {
950      composeEnum(t, "ElementDefinitionSlicingComponent", "rules", element.getRulesElement(), -1);
951    }
952  }
953
954  protected void composeElementDefinitionSlicingDiscriminatorComponent(Complex parent, String parentType, String name, ElementDefinition.ElementDefinitionSlicingDiscriminatorComponent element, int index) {
955    if (element == null) 
956      return;
957    Complex t;
958    if (Utilities.noString(parentType))
959      t = parent;
960    else {
961      t = parent.predicate("fhir:"+name,index > -1);
962    }
963    composeElement(t, "discriminator", name, element, index);
964    if (element.hasTypeElement()) {
965      composeEnum(t, "ElementDefinitionSlicingDiscriminatorComponent", "type", element.getTypeElement(), -1);
966    }
967    if (element.hasPathElement()) {
968      composeString(t, "ElementDefinitionSlicingDiscriminatorComponent", "path", element.getPathElement(), -1);
969    }
970  }
971
972  protected void composeElementDefinitionBaseComponent(Complex parent, String parentType, String name, ElementDefinition.ElementDefinitionBaseComponent element, int index) {
973    if (element == null) 
974      return;
975    Complex t;
976    if (Utilities.noString(parentType))
977      t = parent;
978    else {
979      t = parent.predicate("fhir:"+name,index > -1);
980    }
981    composeElement(t, "base", name, element, index);
982    if (element.hasPathElement()) {
983      composeString(t, "ElementDefinitionBaseComponent", "path", element.getPathElement(), -1);
984    }
985    if (element.hasMinElement()) {
986      composeUnsignedInt(t, "ElementDefinitionBaseComponent", "min", element.getMinElement(), -1);
987    }
988    if (element.hasMaxElement()) {
989      composeString(t, "ElementDefinitionBaseComponent", "max", element.getMaxElement(), -1);
990    }
991  }
992
993  protected void composeElementDefinitionTypeRefComponent(Complex parent, String parentType, String name, ElementDefinition.TypeRefComponent element, int index) {
994    if (element == null) 
995      return;
996    Complex t;
997    if (Utilities.noString(parentType))
998      t = parent;
999    else {
1000      t = parent.predicate("fhir:"+name,index > -1);
1001    }
1002    composeElement(t, "type", name, element, index);
1003    if (element.hasCodeElement()) {
1004      composeUri(t, "TypeRefComponent", "code", element.getCodeElement(), -1);
1005    }
1006    for (int i = 0; i < element.getProfile().size(); i++) {
1007      composeCanonical(t, "TypeRefComponent", "profile", element.getProfile().get(i), i);
1008    }
1009    for (int i = 0; i < element.getTargetProfile().size(); i++) {
1010      composeCanonical(t, "TypeRefComponent", "targetProfile", element.getTargetProfile().get(i), i);
1011    }
1012    for (int i = 0; i < element.getAggregation().size(); i++) {
1013      composeEnum(t, "TypeRefComponent", "aggregation", element.getAggregation().get(i), i);
1014    }
1015    if (element.hasVersioningElement()) {
1016      composeEnum(t, "TypeRefComponent", "versioning", element.getVersioningElement(), -1);
1017    }
1018  }
1019
1020  protected void composeElementDefinitionExampleComponent(Complex parent, String parentType, String name, ElementDefinition.ElementDefinitionExampleComponent element, int index) {
1021    if (element == null) 
1022      return;
1023    Complex t;
1024    if (Utilities.noString(parentType))
1025      t = parent;
1026    else {
1027      t = parent.predicate("fhir:"+name,index > -1);
1028    }
1029    composeElement(t, "example", name, element, index);
1030    if (element.hasLabelElement()) {
1031      composeString(t, "ElementDefinitionExampleComponent", "label", element.getLabelElement(), -1);
1032    }
1033    if (element.hasValue()) {
1034      composeType(t, "ElementDefinitionExampleComponent", "value", element.getValue(), -1);
1035    }
1036  }
1037
1038  protected void composeElementDefinitionConstraintComponent(Complex parent, String parentType, String name, ElementDefinition.ElementDefinitionConstraintComponent element, int index) {
1039    if (element == null) 
1040      return;
1041    Complex t;
1042    if (Utilities.noString(parentType))
1043      t = parent;
1044    else {
1045      t = parent.predicate("fhir:"+name,index > -1);
1046    }
1047    composeElement(t, "constraint", name, element, index);
1048    if (element.hasKeyElement()) {
1049      composeId(t, "ElementDefinitionConstraintComponent", "key", element.getKeyElement(), -1);
1050    }
1051    if (element.hasRequirementsElement()) {
1052      composeMarkdown(t, "ElementDefinitionConstraintComponent", "requirements", element.getRequirementsElement(), -1);
1053    }
1054    if (element.hasSeverityElement()) {
1055      composeEnum(t, "ElementDefinitionConstraintComponent", "severity", element.getSeverityElement(), -1);
1056    }
1057    if (element.hasSuppressElement()) {
1058      composeBoolean(t, "ElementDefinitionConstraintComponent", "suppress", element.getSuppressElement(), -1);
1059    }
1060    if (element.hasHumanElement()) {
1061      composeString(t, "ElementDefinitionConstraintComponent", "human", element.getHumanElement(), -1);
1062    }
1063    if (element.hasExpressionElement()) {
1064      composeString(t, "ElementDefinitionConstraintComponent", "expression", element.getExpressionElement(), -1);
1065    }
1066    if (element.hasSourceElement()) {
1067      composeCanonical(t, "ElementDefinitionConstraintComponent", "source", element.getSourceElement(), -1);
1068    }
1069  }
1070
1071  protected void composeElementDefinitionBindingComponent(Complex parent, String parentType, String name, ElementDefinition.ElementDefinitionBindingComponent element, int index) {
1072    if (element == null) 
1073      return;
1074    Complex t;
1075    if (Utilities.noString(parentType))
1076      t = parent;
1077    else {
1078      t = parent.predicate("fhir:"+name,index > -1);
1079    }
1080    composeElement(t, "binding", name, element, index);
1081    if (element.hasStrengthElement()) {
1082      composeEnum(t, "ElementDefinitionBindingComponent", "strength", element.getStrengthElement(), -1);
1083    }
1084    if (element.hasDescriptionElement()) {
1085      composeMarkdown(t, "ElementDefinitionBindingComponent", "description", element.getDescriptionElement(), -1);
1086    }
1087    if (element.hasValueSetElement()) {
1088      composeCanonical(t, "ElementDefinitionBindingComponent", "valueSet", element.getValueSetElement(), -1);
1089    }
1090    for (int i = 0; i < element.getAdditional().size(); i++) {
1091      composeElementDefinitionBindingAdditionalComponent(t, "ElementDefinitionBindingComponent", "additional", element.getAdditional().get(i), i);
1092    }
1093  }
1094
1095  protected void composeElementDefinitionBindingAdditionalComponent(Complex parent, String parentType, String name, ElementDefinition.ElementDefinitionBindingAdditionalComponent element, int index) {
1096    if (element == null) 
1097      return;
1098    Complex t;
1099    if (Utilities.noString(parentType))
1100      t = parent;
1101    else {
1102      t = parent.predicate("fhir:"+name,index > -1);
1103    }
1104    composeElement(t, "additional", name, element, index);
1105    if (element.hasPurposeElement()) {
1106      composeEnum(t, "ElementDefinitionBindingAdditionalComponent", "purpose", element.getPurposeElement(), -1);
1107    }
1108    if (element.hasValueSetElement()) {
1109      composeCanonical(t, "ElementDefinitionBindingAdditionalComponent", "valueSet", element.getValueSetElement(), -1);
1110    }
1111    if (element.hasDocumentationElement()) {
1112      composeMarkdown(t, "ElementDefinitionBindingAdditionalComponent", "documentation", element.getDocumentationElement(), -1);
1113    }
1114    if (element.hasShortDocoElement()) {
1115      composeString(t, "ElementDefinitionBindingAdditionalComponent", "shortDoco", element.getShortDocoElement(), -1);
1116    }
1117    for (int i = 0; i < element.getUsage().size(); i++) {
1118      composeUsageContext(t, "ElementDefinitionBindingAdditionalComponent", "usage", element.getUsage().get(i), i);
1119    }
1120    if (element.hasAnyElement()) {
1121      composeBoolean(t, "ElementDefinitionBindingAdditionalComponent", "any", element.getAnyElement(), -1);
1122    }
1123  }
1124
1125  protected void composeElementDefinitionMappingComponent(Complex parent, String parentType, String name, ElementDefinition.ElementDefinitionMappingComponent element, int index) {
1126    if (element == null) 
1127      return;
1128    Complex t;
1129    if (Utilities.noString(parentType))
1130      t = parent;
1131    else {
1132      t = parent.predicate("fhir:"+name,index > -1);
1133    }
1134    composeElement(t, "mapping", name, element, index);
1135    if (element.hasIdentityElement()) {
1136      composeId(t, "ElementDefinitionMappingComponent", "identity", element.getIdentityElement(), -1);
1137    }
1138    if (element.hasLanguageElement()) {
1139      composeCode(t, "ElementDefinitionMappingComponent", "language", element.getLanguageElement(), -1);
1140    }
1141    if (element.hasMapElement()) {
1142      composeString(t, "ElementDefinitionMappingComponent", "map", element.getMapElement(), -1);
1143    }
1144    if (element.hasCommentElement()) {
1145      composeMarkdown(t, "ElementDefinitionMappingComponent", "comment", element.getCommentElement(), -1);
1146    }
1147  }
1148
1149  protected void composeExpression(Complex parent, String parentType, String name, Expression element, int index) {
1150    if (element == null) 
1151      return;
1152    Complex t;
1153    if (Utilities.noString(parentType))
1154      t = parent;
1155    else {
1156      t = parent.predicate("fhir:"+name,index > -1);
1157    }
1158    composeDataType(t, "Expression", name, element, index);
1159    if (element.hasDescriptionElement()) {
1160      composeString(t, "Expression", "description", element.getDescriptionElement(), -1);
1161    }
1162    if (element.hasNameElement()) {
1163      composeCode(t, "Expression", "name", element.getNameElement(), -1);
1164    }
1165    if (element.hasLanguageElement()) {
1166      composeCode(t, "Expression", "language", element.getLanguageElement(), -1);
1167    }
1168    if (element.hasExpressionElement()) {
1169      composeString(t, "Expression", "expression", element.getExpressionElement(), -1);
1170    }
1171    if (element.hasReferenceElement()) {
1172      composeUri(t, "Expression", "reference", element.getReferenceElement(), -1);
1173    }
1174  }
1175
1176  protected void composeExtendedContactDetail(Complex parent, String parentType, String name, ExtendedContactDetail element, int index) {
1177    if (element == null) 
1178      return;
1179    Complex t;
1180    if (Utilities.noString(parentType))
1181      t = parent;
1182    else {
1183      t = parent.predicate("fhir:"+name,index > -1);
1184    }
1185    composeDataType(t, "ExtendedContactDetail", name, element, index);
1186    if (element.hasPurpose()) {
1187      composeCodeableConcept(t, "ExtendedContactDetail", "purpose", element.getPurpose(), -1);
1188    }
1189    for (int i = 0; i < element.getName().size(); i++) {
1190      composeHumanName(t, "ExtendedContactDetail", "name", element.getName().get(i), i);
1191    }
1192    for (int i = 0; i < element.getTelecom().size(); i++) {
1193      composeContactPoint(t, "ExtendedContactDetail", "telecom", element.getTelecom().get(i), i);
1194    }
1195    if (element.hasAddress()) {
1196      composeAddress(t, "ExtendedContactDetail", "address", element.getAddress(), -1);
1197    }
1198    if (element.hasOrganization()) {
1199      composeReference(t, "ExtendedContactDetail", "organization", element.getOrganization(), -1);
1200    }
1201    if (element.hasPeriod()) {
1202      composePeriod(t, "ExtendedContactDetail", "period", element.getPeriod(), -1);
1203    }
1204  }
1205
1206  protected void composeExtension(Complex parent, String parentType, String name, Extension element, int index) {
1207    if (element == null) 
1208      return;
1209    Complex t;
1210    if (Utilities.noString(parentType))
1211      t = parent;
1212    else {
1213      t = parent.predicate("fhir:"+name,index > -1);
1214    }
1215    composeDataType(t, "Extension", name, element, index);
1216    if (element.hasUrlElement()) {
1217      composeUri(t, "Extension", "url", element.getUrlElement(), -1);
1218    }
1219    if (element.hasValue()) {
1220      composeType(t, "Extension", "value", element.getValue(), -1);
1221    }
1222  }
1223
1224  protected void composeHumanName(Complex parent, String parentType, String name, HumanName element, int index) {
1225    if (element == null) 
1226      return;
1227    Complex t;
1228    if (Utilities.noString(parentType))
1229      t = parent;
1230    else {
1231      t = parent.predicate("fhir:"+name,index > -1);
1232    }
1233    composeDataType(t, "HumanName", name, element, index);
1234    if (element.hasUseElement()) {
1235      composeEnum(t, "HumanName", "use", element.getUseElement(), -1);
1236    }
1237    if (element.hasTextElement()) {
1238      composeString(t, "HumanName", "text", element.getTextElement(), -1);
1239    }
1240    if (element.hasFamilyElement()) {
1241      composeString(t, "HumanName", "family", element.getFamilyElement(), -1);
1242    }
1243    for (int i = 0; i < element.getGiven().size(); i++) {
1244      composeString(t, "HumanName", "given", element.getGiven().get(i), i);
1245    }
1246    for (int i = 0; i < element.getPrefix().size(); i++) {
1247      composeString(t, "HumanName", "prefix", element.getPrefix().get(i), i);
1248    }
1249    for (int i = 0; i < element.getSuffix().size(); i++) {
1250      composeString(t, "HumanName", "suffix", element.getSuffix().get(i), i);
1251    }
1252    if (element.hasPeriod()) {
1253      composePeriod(t, "HumanName", "period", element.getPeriod(), -1);
1254    }
1255  }
1256
1257  protected void composeIdentifier(Complex parent, String parentType, String name, Identifier element, int index) {
1258    if (element == null) 
1259      return;
1260    Complex t;
1261    if (Utilities.noString(parentType))
1262      t = parent;
1263    else {
1264      t = parent.predicate("fhir:"+name,index > -1);
1265    }
1266    composeDataType(t, "Identifier", name, element, index);
1267    if (element.hasUseElement()) {
1268      composeEnum(t, "Identifier", "use", element.getUseElement(), -1);
1269    }
1270    if (element.hasType()) {
1271      composeCodeableConcept(t, "Identifier", "type", element.getType(), -1);
1272    }
1273    if (element.hasSystemElement()) {
1274      composeUri(t, "Identifier", "system", element.getSystemElement(), -1);
1275    }
1276    if (element.hasValueElement()) {
1277      composeString(t, "Identifier", "value", element.getValueElement(), -1);
1278    }
1279    if (element.hasPeriod()) {
1280      composePeriod(t, "Identifier", "period", element.getPeriod(), -1);
1281    }
1282    if (element.hasAssigner()) {
1283      composeReference(t, "Identifier", "assigner", element.getAssigner(), -1);
1284    }
1285  }
1286
1287  protected void composeMarketingStatus(Complex parent, String parentType, String name, MarketingStatus element, int index) {
1288    if (element == null) 
1289      return;
1290    Complex t;
1291    if (Utilities.noString(parentType))
1292      t = parent;
1293    else {
1294      t = parent.predicate("fhir:"+name,index > -1);
1295    }
1296    composeBackboneType(t, "MarketingStatus", name, element, index);
1297    if (element.hasCountry()) {
1298      composeCodeableConcept(t, "MarketingStatus", "country", element.getCountry(), -1);
1299    }
1300    if (element.hasJurisdiction()) {
1301      composeCodeableConcept(t, "MarketingStatus", "jurisdiction", element.getJurisdiction(), -1);
1302    }
1303    if (element.hasStatus()) {
1304      composeCodeableConcept(t, "MarketingStatus", "status", element.getStatus(), -1);
1305    }
1306    if (element.hasDateRange()) {
1307      composePeriod(t, "MarketingStatus", "dateRange", element.getDateRange(), -1);
1308    }
1309    if (element.hasRestoreDateElement()) {
1310      composeDateTime(t, "MarketingStatus", "restoreDate", element.getRestoreDateElement(), -1);
1311    }
1312  }
1313
1314  protected void composeMeta(Complex parent, String parentType, String name, Meta element, int index) {
1315    if (element == null) 
1316      return;
1317    Complex t;
1318    if (Utilities.noString(parentType))
1319      t = parent;
1320    else {
1321      t = parent.predicate("fhir:"+name,index > -1);
1322    }
1323    composeDataType(t, "Meta", name, element, index);
1324    if (element.hasVersionIdElement()) {
1325      composeId(t, "Meta", "versionId", element.getVersionIdElement(), -1);
1326    }
1327    if (element.hasLastUpdatedElement()) {
1328      composeInstant(t, "Meta", "lastUpdated", element.getLastUpdatedElement(), -1);
1329    }
1330    if (element.hasSourceElement()) {
1331      composeUri(t, "Meta", "source", element.getSourceElement(), -1);
1332    }
1333    for (int i = 0; i < element.getProfile().size(); i++) {
1334      composeCanonical(t, "Meta", "profile", element.getProfile().get(i), i);
1335    }
1336    for (int i = 0; i < element.getSecurity().size(); i++) {
1337      composeCoding(t, "Meta", "security", element.getSecurity().get(i), i);
1338    }
1339    for (int i = 0; i < element.getTag().size(); i++) {
1340      composeCoding(t, "Meta", "tag", element.getTag().get(i), i);
1341    }
1342  }
1343
1344  protected void composeMonetaryComponent(Complex parent, String parentType, String name, MonetaryComponent element, int index) {
1345    if (element == null) 
1346      return;
1347    Complex t;
1348    if (Utilities.noString(parentType))
1349      t = parent;
1350    else {
1351      t = parent.predicate("fhir:"+name,index > -1);
1352    }
1353    composeDataType(t, "MonetaryComponent", name, element, index);
1354    if (element.hasTypeElement()) {
1355      composeEnum(t, "MonetaryComponent", "type", element.getTypeElement(), -1);
1356    }
1357    if (element.hasCode()) {
1358      composeCodeableConcept(t, "MonetaryComponent", "code", element.getCode(), -1);
1359    }
1360    if (element.hasFactorElement()) {
1361      composeDecimal(t, "MonetaryComponent", "factor", element.getFactorElement(), -1);
1362    }
1363    if (element.hasAmount()) {
1364      composeMoney(t, "MonetaryComponent", "amount", element.getAmount(), -1);
1365    }
1366  }
1367
1368  protected void composeMoney(Complex parent, String parentType, String name, Money element, int index) {
1369    if (element == null) 
1370      return;
1371    Complex t;
1372    if (Utilities.noString(parentType))
1373      t = parent;
1374    else {
1375      t = parent.predicate("fhir:"+name,index > -1);
1376    }
1377    composeDataType(t, "Money", name, element, index);
1378    if (element.hasValueElement()) {
1379      composeDecimal(t, "Money", "value", element.getValueElement(), -1);
1380    }
1381    if (element.hasCurrencyElement()) {
1382      composeCode(t, "Money", "currency", element.getCurrencyElement(), -1);
1383    }
1384  }
1385
1386  protected void composeNarrative(Complex parent, String parentType, String name, Narrative element, int index) {
1387    if (element == null) 
1388      return;
1389    Complex t;
1390    if (Utilities.noString(parentType))
1391      t = parent;
1392    else {
1393      t = parent.predicate("fhir:"+name,index > -1);
1394    }
1395    composeDataType(t, "Narrative", name, element, index);
1396    if (element.hasStatusElement()) {
1397      composeEnum(t, "Narrative", "status", element.getStatusElement(), -1);
1398    }
1399    if (element.hasDiv()) {
1400      composeXhtmlNode(t, "Narrative", "div", element.getDiv(), -1);
1401    }
1402  }
1403
1404  protected void composeParameterDefinition(Complex parent, String parentType, String name, ParameterDefinition 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:"+name,index > -1);
1412    }
1413    composeDataType(t, "ParameterDefinition", name, element, index);
1414    if (element.hasNameElement()) {
1415      composeCode(t, "ParameterDefinition", "name", element.getNameElement(), -1);
1416    }
1417    if (element.hasUseElement()) {
1418      composeEnum(t, "ParameterDefinition", "use", element.getUseElement(), -1);
1419    }
1420    if (element.hasMinElement()) {
1421      composeInteger(t, "ParameterDefinition", "min", element.getMinElement(), -1);
1422    }
1423    if (element.hasMaxElement()) {
1424      composeString(t, "ParameterDefinition", "max", element.getMaxElement(), -1);
1425    }
1426    if (element.hasDocumentationElement()) {
1427      composeString(t, "ParameterDefinition", "documentation", element.getDocumentationElement(), -1);
1428    }
1429    if (element.hasTypeElement()) {
1430      composeEnum(t, "ParameterDefinition", "type", element.getTypeElement(), -1);
1431    }
1432    if (element.hasProfileElement()) {
1433      composeCanonical(t, "ParameterDefinition", "profile", element.getProfileElement(), -1);
1434    }
1435  }
1436
1437  protected void composePeriod(Complex parent, String parentType, String name, Period element, int index) {
1438    if (element == null) 
1439      return;
1440    Complex t;
1441    if (Utilities.noString(parentType))
1442      t = parent;
1443    else {
1444      t = parent.predicate("fhir:"+name,index > -1);
1445    }
1446    composeDataType(t, "Period", name, element, index);
1447    if (element.hasStartElement()) {
1448      composeDateTime(t, "Period", "start", element.getStartElement(), -1);
1449    }
1450    if (element.hasEndElement()) {
1451      composeDateTime(t, "Period", "end", element.getEndElement(), -1);
1452    }
1453  }
1454
1455  protected void composeProductShelfLife(Complex parent, String parentType, String name, ProductShelfLife element, int index) {
1456    if (element == null) 
1457      return;
1458    Complex t;
1459    if (Utilities.noString(parentType))
1460      t = parent;
1461    else {
1462      t = parent.predicate("fhir:"+name,index > -1);
1463    }
1464    composeBackboneType(t, "ProductShelfLife", name, element, index);
1465    if (element.hasType()) {
1466      composeCodeableConcept(t, "ProductShelfLife", "type", element.getType(), -1);
1467    }
1468    if (element.hasPeriod()) {
1469      composeType(t, "ProductShelfLife", "period", element.getPeriod(), -1);
1470    }
1471    for (int i = 0; i < element.getSpecialPrecautionsForStorage().size(); i++) {
1472      composeCodeableConcept(t, "ProductShelfLife", "specialPrecautionsForStorage", element.getSpecialPrecautionsForStorage().get(i), i);
1473    }
1474  }
1475
1476  protected void composeQuantity(Complex parent, String parentType, String name, Quantity element, int index) {
1477    if (element == null) 
1478      return;
1479    Complex t;
1480    if (Utilities.noString(parentType))
1481      t = parent;
1482    else {
1483      t = parent.predicate("fhir:"+name,index > -1);
1484    }
1485    composeDataType(t, "Quantity", name, element, index);
1486    if (element.hasValueElement()) {
1487      composeDecimal(t, "Quantity", "value", element.getValueElement(), -1);
1488    }
1489    if (element.hasComparatorElement()) {
1490      composeEnum(t, "Quantity", "comparator", element.getComparatorElement(), -1);
1491    }
1492    if (element.hasUnitElement()) {
1493      composeString(t, "Quantity", "unit", element.getUnitElement(), -1);
1494    }
1495    if (element.hasSystemElement()) {
1496      composeUri(t, "Quantity", "system", element.getSystemElement(), -1);
1497    }
1498    if (element.hasCodeElement()) {
1499      composeCode(t, "Quantity", "code", element.getCodeElement(), -1);
1500    }
1501  }
1502
1503  protected void composeRange(Complex parent, String parentType, String name, Range element, int index) {
1504    if (element == null) 
1505      return;
1506    Complex t;
1507    if (Utilities.noString(parentType))
1508      t = parent;
1509    else {
1510      t = parent.predicate("fhir:"+name,index > -1);
1511    }
1512    composeDataType(t, "Range", name, element, index);
1513    if (element.hasLow()) {
1514      composeQuantity(t, "Range", "low", element.getLow(), -1);
1515    }
1516    if (element.hasHigh()) {
1517      composeQuantity(t, "Range", "high", element.getHigh(), -1);
1518    }
1519  }
1520
1521  protected void composeRatio(Complex parent, String parentType, String name, Ratio element, int index) {
1522    if (element == null) 
1523      return;
1524    Complex t;
1525    if (Utilities.noString(parentType))
1526      t = parent;
1527    else {
1528      t = parent.predicate("fhir:"+name,index > -1);
1529    }
1530    composeDataType(t, "Ratio", name, element, index);
1531    if (element.hasNumerator()) {
1532      composeQuantity(t, "Ratio", "numerator", element.getNumerator(), -1);
1533    }
1534    if (element.hasDenominator()) {
1535      composeQuantity(t, "Ratio", "denominator", element.getDenominator(), -1);
1536    }
1537  }
1538
1539  protected void composeRatioRange(Complex parent, String parentType, String name, RatioRange element, int index) {
1540    if (element == null) 
1541      return;
1542    Complex t;
1543    if (Utilities.noString(parentType))
1544      t = parent;
1545    else {
1546      t = parent.predicate("fhir:"+name,index > -1);
1547    }
1548    composeDataType(t, "RatioRange", name, element, index);
1549    if (element.hasLowNumerator()) {
1550      composeQuantity(t, "RatioRange", "lowNumerator", element.getLowNumerator(), -1);
1551    }
1552    if (element.hasHighNumerator()) {
1553      composeQuantity(t, "RatioRange", "highNumerator", element.getHighNumerator(), -1);
1554    }
1555    if (element.hasDenominator()) {
1556      composeQuantity(t, "RatioRange", "denominator", element.getDenominator(), -1);
1557    }
1558  }
1559
1560  protected void composeReference(Complex parent, String parentType, String name, Reference element, int index) {
1561    if (element == null) 
1562      return;
1563    Complex t;
1564    if (Utilities.noString(parentType))
1565      t = parent;
1566    else {
1567      t = parent.predicate("fhir:"+name,index > -1);
1568    }
1569    composeDataType(t, "Reference", name, element, index);
1570    if (element.hasReferenceElement()) {
1571      composeString(t, "Reference", "reference", element.getReferenceElement_(), -1);
1572    }
1573    if (element.hasTypeElement()) {
1574      composeUri(t, "Reference", "type", element.getTypeElement(), -1);
1575    }
1576    if (element.hasIdentifier()) {
1577      composeIdentifier(t, "Reference", "identifier", element.getIdentifier(), -1);
1578    }
1579    if (element.hasDisplayElement()) {
1580      composeString(t, "Reference", "display", element.getDisplayElement(), -1);
1581    }
1582  }
1583
1584  protected void composeRelatedArtifact(Complex parent, String parentType, String name, RelatedArtifact element, int index) {
1585    if (element == null) 
1586      return;
1587    Complex t;
1588    if (Utilities.noString(parentType))
1589      t = parent;
1590    else {
1591      t = parent.predicate("fhir:"+name,index > -1);
1592    }
1593    composeDataType(t, "RelatedArtifact", name, element, index);
1594    if (element.hasTypeElement()) {
1595      composeEnum(t, "RelatedArtifact", "type", element.getTypeElement(), -1);
1596    }
1597    for (int i = 0; i < element.getClassifier().size(); i++) {
1598      composeCodeableConcept(t, "RelatedArtifact", "classifier", element.getClassifier().get(i), i);
1599    }
1600    if (element.hasLabelElement()) {
1601      composeString(t, "RelatedArtifact", "label", element.getLabelElement(), -1);
1602    }
1603    if (element.hasDisplayElement()) {
1604      composeString(t, "RelatedArtifact", "display", element.getDisplayElement(), -1);
1605    }
1606    if (element.hasCitationElement()) {
1607      composeMarkdown(t, "RelatedArtifact", "citation", element.getCitationElement(), -1);
1608    }
1609    if (element.hasDocument()) {
1610      composeAttachment(t, "RelatedArtifact", "document", element.getDocument(), -1);
1611    }
1612    if (element.hasResourceElement()) {
1613      composeCanonical(t, "RelatedArtifact", "resource", element.getResourceElement(), -1);
1614    }
1615    if (element.hasResourceReference()) {
1616      composeReference(t, "RelatedArtifact", "resourceReference", element.getResourceReference(), -1);
1617    }
1618    if (element.hasPublicationStatusElement()) {
1619      composeEnum(t, "RelatedArtifact", "publicationStatus", element.getPublicationStatusElement(), -1);
1620    }
1621    if (element.hasPublicationDateElement()) {
1622      composeDate(t, "RelatedArtifact", "publicationDate", element.getPublicationDateElement(), -1);
1623    }
1624  }
1625
1626  protected void composeSampledData(Complex parent, String parentType, String name, SampledData element, int index) {
1627    if (element == null) 
1628      return;
1629    Complex t;
1630    if (Utilities.noString(parentType))
1631      t = parent;
1632    else {
1633      t = parent.predicate("fhir:"+name,index > -1);
1634    }
1635    composeDataType(t, "SampledData", name, element, index);
1636    if (element.hasOrigin()) {
1637      composeQuantity(t, "SampledData", "origin", element.getOrigin(), -1);
1638    }
1639    if (element.hasIntervalElement()) {
1640      composeDecimal(t, "SampledData", "interval", element.getIntervalElement(), -1);
1641    }
1642    if (element.hasIntervalUnitElement()) {
1643      composeCode(t, "SampledData", "intervalUnit", element.getIntervalUnitElement(), -1);
1644    }
1645    if (element.hasFactorElement()) {
1646      composeDecimal(t, "SampledData", "factor", element.getFactorElement(), -1);
1647    }
1648    if (element.hasLowerLimitElement()) {
1649      composeDecimal(t, "SampledData", "lowerLimit", element.getLowerLimitElement(), -1);
1650    }
1651    if (element.hasUpperLimitElement()) {
1652      composeDecimal(t, "SampledData", "upperLimit", element.getUpperLimitElement(), -1);
1653    }
1654    if (element.hasDimensionsElement()) {
1655      composePositiveInt(t, "SampledData", "dimensions", element.getDimensionsElement(), -1);
1656    }
1657    if (element.hasCodeMapElement()) {
1658      composeCanonical(t, "SampledData", "codeMap", element.getCodeMapElement(), -1);
1659    }
1660    if (element.hasOffsetsElement()) {
1661      composeString(t, "SampledData", "offsets", element.getOffsetsElement(), -1);
1662    }
1663    if (element.hasDataElement()) {
1664      composeString(t, "SampledData", "data", element.getDataElement(), -1);
1665    }
1666  }
1667
1668  protected void composeSignature(Complex parent, String parentType, String name, Signature element, int index) {
1669    if (element == null) 
1670      return;
1671    Complex t;
1672    if (Utilities.noString(parentType))
1673      t = parent;
1674    else {
1675      t = parent.predicate("fhir:"+name,index > -1);
1676    }
1677    composeDataType(t, "Signature", name, element, index);
1678    for (int i = 0; i < element.getType().size(); i++) {
1679      composeCoding(t, "Signature", "type", element.getType().get(i), i);
1680    }
1681    if (element.hasWhenElement()) {
1682      composeInstant(t, "Signature", "when", element.getWhenElement(), -1);
1683    }
1684    if (element.hasWho()) {
1685      composeReference(t, "Signature", "who", element.getWho(), -1);
1686    }
1687    if (element.hasOnBehalfOf()) {
1688      composeReference(t, "Signature", "onBehalfOf", element.getOnBehalfOf(), -1);
1689    }
1690    if (element.hasTargetFormatElement()) {
1691      composeCode(t, "Signature", "targetFormat", element.getTargetFormatElement(), -1);
1692    }
1693    if (element.hasSigFormatElement()) {
1694      composeCode(t, "Signature", "sigFormat", element.getSigFormatElement(), -1);
1695    }
1696    if (element.hasDataElement()) {
1697      composeBase64Binary(t, "Signature", "data", element.getDataElement(), -1);
1698    }
1699  }
1700
1701  protected void composeTiming(Complex parent, String parentType, String name, Timing element, int index) {
1702    if (element == null) 
1703      return;
1704    Complex t;
1705    if (Utilities.noString(parentType))
1706      t = parent;
1707    else {
1708      t = parent.predicate("fhir:"+name,index > -1);
1709    }
1710    composeBackboneType(t, "Timing", name, element, index);
1711    for (int i = 0; i < element.getEvent().size(); i++) {
1712      composeDateTime(t, "Timing", "event", element.getEvent().get(i), i);
1713    }
1714    if (element.hasRepeat()) {
1715      composeTimingRepeatComponent(t, "Timing", "repeat", element.getRepeat(), -1);
1716    }
1717    if (element.hasCode()) {
1718      composeCodeableConcept(t, "Timing", "code", element.getCode(), -1);
1719    }
1720  }
1721
1722  protected void composeTimingRepeatComponent(Complex parent, String parentType, String name, Timing.TimingRepeatComponent 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:"+name,index > -1);
1730    }
1731    composeElement(t, "repeat", name, element, index);
1732    if (element.hasBounds()) {
1733      composeType(t, "TimingRepeatComponent", "bounds", element.getBounds(), -1);
1734    }
1735    if (element.hasCountElement()) {
1736      composePositiveInt(t, "TimingRepeatComponent", "count", element.getCountElement(), -1);
1737    }
1738    if (element.hasCountMaxElement()) {
1739      composePositiveInt(t, "TimingRepeatComponent", "countMax", element.getCountMaxElement(), -1);
1740    }
1741    if (element.hasDurationElement()) {
1742      composeDecimal(t, "TimingRepeatComponent", "duration", element.getDurationElement(), -1);
1743    }
1744    if (element.hasDurationMaxElement()) {
1745      composeDecimal(t, "TimingRepeatComponent", "durationMax", element.getDurationMaxElement(), -1);
1746    }
1747    if (element.hasDurationUnitElement()) {
1748      composeEnum(t, "TimingRepeatComponent", "durationUnit", element.getDurationUnitElement(), -1);
1749    }
1750    if (element.hasFrequencyElement()) {
1751      composePositiveInt(t, "TimingRepeatComponent", "frequency", element.getFrequencyElement(), -1);
1752    }
1753    if (element.hasFrequencyMaxElement()) {
1754      composePositiveInt(t, "TimingRepeatComponent", "frequencyMax", element.getFrequencyMaxElement(), -1);
1755    }
1756    if (element.hasPeriodElement()) {
1757      composeDecimal(t, "TimingRepeatComponent", "period", element.getPeriodElement(), -1);
1758    }
1759    if (element.hasPeriodMaxElement()) {
1760      composeDecimal(t, "TimingRepeatComponent", "periodMax", element.getPeriodMaxElement(), -1);
1761    }
1762    if (element.hasPeriodUnitElement()) {
1763      composeEnum(t, "TimingRepeatComponent", "periodUnit", element.getPeriodUnitElement(), -1);
1764    }
1765    for (int i = 0; i < element.getDayOfWeek().size(); i++) {
1766      composeEnum(t, "TimingRepeatComponent", "dayOfWeek", element.getDayOfWeek().get(i), i);
1767    }
1768    for (int i = 0; i < element.getTimeOfDay().size(); i++) {
1769      composeTime(t, "TimingRepeatComponent", "timeOfDay", element.getTimeOfDay().get(i), i);
1770    }
1771    for (int i = 0; i < element.getWhen().size(); i++) {
1772      composeEnum(t, "TimingRepeatComponent", "when", element.getWhen().get(i), i);
1773    }
1774    if (element.hasOffsetElement()) {
1775      composeUnsignedInt(t, "TimingRepeatComponent", "offset", element.getOffsetElement(), -1);
1776    }
1777  }
1778
1779  protected void composeTriggerDefinition(Complex parent, String parentType, String name, TriggerDefinition element, int index) {
1780    if (element == null) 
1781      return;
1782    Complex t;
1783    if (Utilities.noString(parentType))
1784      t = parent;
1785    else {
1786      t = parent.predicate("fhir:"+name,index > -1);
1787    }
1788    composeDataType(t, "TriggerDefinition", name, element, index);
1789    if (element.hasTypeElement()) {
1790      composeEnum(t, "TriggerDefinition", "type", element.getTypeElement(), -1);
1791    }
1792    if (element.hasNameElement()) {
1793      composeString(t, "TriggerDefinition", "name", element.getNameElement(), -1);
1794    }
1795    if (element.hasCode()) {
1796      composeCodeableConcept(t, "TriggerDefinition", "code", element.getCode(), -1);
1797    }
1798    if (element.hasSubscriptionTopicElement()) {
1799      composeCanonical(t, "TriggerDefinition", "subscriptionTopic", element.getSubscriptionTopicElement(), -1);
1800    }
1801    if (element.hasTiming()) {
1802      composeType(t, "TriggerDefinition", "timing", element.getTiming(), -1);
1803    }
1804    for (int i = 0; i < element.getData().size(); i++) {
1805      composeDataRequirement(t, "TriggerDefinition", "data", element.getData().get(i), i);
1806    }
1807    if (element.hasCondition()) {
1808      composeExpression(t, "TriggerDefinition", "condition", element.getCondition(), -1);
1809    }
1810  }
1811
1812  protected void composeUsageContext(Complex parent, String parentType, String name, UsageContext element, int index) {
1813    if (element == null) 
1814      return;
1815    Complex t;
1816    if (Utilities.noString(parentType))
1817      t = parent;
1818    else {
1819      t = parent.predicate("fhir:"+name,index > -1);
1820    }
1821    composeDataType(t, "UsageContext", name, element, index);
1822    if (element.hasCode()) {
1823      composeCoding(t, "UsageContext", "code", element.getCode(), -1);
1824    }
1825    if (element.hasValue()) {
1826      composeType(t, "UsageContext", "value", element.getValue(), -1);
1827    }
1828  }
1829
1830  protected void composeVirtualServiceDetail(Complex parent, String parentType, String name, VirtualServiceDetail element, int index) {
1831    if (element == null) 
1832      return;
1833    Complex t;
1834    if (Utilities.noString(parentType))
1835      t = parent;
1836    else {
1837      t = parent.predicate("fhir:"+name,index > -1);
1838    }
1839    composeDataType(t, "VirtualServiceDetail", name, element, index);
1840    if (element.hasChannelType()) {
1841      composeCoding(t, "VirtualServiceDetail", "channelType", element.getChannelType(), -1);
1842    }
1843    if (element.hasAddress()) {
1844      composeType(t, "VirtualServiceDetail", "address", element.getAddress(), -1);
1845    }
1846    for (int i = 0; i < element.getAdditionalInfo().size(); i++) {
1847      composeUrl(t, "VirtualServiceDetail", "additionalInfo", element.getAdditionalInfo().get(i), i);
1848    }
1849    if (element.hasMaxParticipantsElement()) {
1850      composePositiveInt(t, "VirtualServiceDetail", "maxParticipants", element.getMaxParticipantsElement(), -1);
1851    }
1852    if (element.hasSessionKeyElement()) {
1853      composeString(t, "VirtualServiceDetail", "sessionKey", element.getSessionKeyElement(), -1);
1854    }
1855  }
1856
1857  protected void composeCanonicalResource(Complex t, String parentType, String name, CanonicalResource element, int index) {
1858    composeDomainResource(t, parentType, name, element, index);
1859    if (element.hasUrlElement()) {
1860      composeUri(t, "CanonicalResource", "url", element.getUrlElement(), -1);
1861    }
1862    for (int i = 0; i < element.getIdentifier().size(); i++) {
1863      composeIdentifier(t, "CanonicalResource", "identifier", element.getIdentifier().get(i), i);
1864    }
1865    if (element.hasVersionElement()) {
1866      composeString(t, "CanonicalResource", "version", element.getVersionElement(), -1);
1867    }
1868    if (element.hasVersionAlgorithm()) {
1869      composeType(t, "CanonicalResource", "versionAlgorithm", element.getVersionAlgorithm(), -1);
1870    }
1871    if (element.hasNameElement()) {
1872      composeString(t, "CanonicalResource", "name", element.getNameElement(), -1);
1873    }
1874    if (element.hasTitleElement()) {
1875      composeString(t, "CanonicalResource", "title", element.getTitleElement(), -1);
1876    }
1877    if (element.hasStatusElement()) {
1878      composeEnum(t, "CanonicalResource", "status", element.getStatusElement(), -1);
1879    }
1880    if (element.hasExperimentalElement()) {
1881      composeBoolean(t, "CanonicalResource", "experimental", element.getExperimentalElement(), -1);
1882    }
1883    if (element.hasDateElement()) {
1884      composeDateTime(t, "CanonicalResource", "date", element.getDateElement(), -1);
1885    }
1886    if (element.hasPublisherElement()) {
1887      composeString(t, "CanonicalResource", "publisher", element.getPublisherElement(), -1);
1888    }
1889    for (int i = 0; i < element.getContact().size(); i++) {
1890      composeContactDetail(t, "CanonicalResource", "contact", element.getContact().get(i), i);
1891    }
1892    if (element.hasDescriptionElement()) {
1893      composeMarkdown(t, "CanonicalResource", "description", element.getDescriptionElement(), -1);
1894    }
1895    for (int i = 0; i < element.getUseContext().size(); i++) {
1896      composeUsageContext(t, "CanonicalResource", "useContext", element.getUseContext().get(i), i);
1897    }
1898    for (int i = 0; i < element.getJurisdiction().size(); i++) {
1899      composeCodeableConcept(t, "CanonicalResource", "jurisdiction", element.getJurisdiction().get(i), i);
1900    }
1901    if (element.hasPurposeElement()) {
1902      composeMarkdown(t, "CanonicalResource", "purpose", element.getPurposeElement(), -1);
1903    }
1904    if (element.hasCopyrightElement()) {
1905      composeMarkdown(t, "CanonicalResource", "copyright", element.getCopyrightElement(), -1);
1906    }
1907    if (element.hasCopyrightLabelElement()) {
1908      composeString(t, "CanonicalResource", "copyrightLabel", element.getCopyrightLabelElement(), -1);
1909    }
1910  }
1911
1912  protected void composeDomainResource(Complex t, String parentType, String name, DomainResource element, int index) {
1913    composeResource(t, parentType, name, element, index);
1914    if (element.hasText()) {
1915      composeNarrative(t, "DomainResource", "text", element.getText(), -1);
1916    }
1917    for (int i = 0; i < element.getContained().size(); i++) {
1918      composeResource(t, "DomainResource", "contained", element.getContained().get(i), i);
1919    }
1920    for (int i = 0; i < element.getExtension().size(); i++) {
1921      composeExtension(t, "DomainResource", "extension", element.getExtension().get(i), i);
1922    }
1923    for (int i = 0; i < element.getModifierExtension().size(); i++) {
1924      composeExtension(t, "DomainResource", "modifierExtension", element.getModifierExtension().get(i), i);
1925    }
1926  }
1927
1928  protected void composeMetadataResource(Complex t, String parentType, String name, MetadataResource element, int index) {
1929    composeCanonicalResource(t, parentType, name, element, index);
1930    if (element.hasApprovalDateElement()) {
1931      composeDate(t, "MetadataResource", "approvalDate", element.getApprovalDateElement(), -1);
1932    }
1933    if (element.hasLastReviewDateElement()) {
1934      composeDate(t, "MetadataResource", "lastReviewDate", element.getLastReviewDateElement(), -1);
1935    }
1936    if (element.hasEffectivePeriod()) {
1937      composePeriod(t, "MetadataResource", "effectivePeriod", element.getEffectivePeriod(), -1);
1938    }
1939    for (int i = 0; i < element.getTopic().size(); i++) {
1940      composeCodeableConcept(t, "MetadataResource", "topic", element.getTopic().get(i), i);
1941    }
1942    for (int i = 0; i < element.getAuthor().size(); i++) {
1943      composeContactDetail(t, "MetadataResource", "author", element.getAuthor().get(i), i);
1944    }
1945    for (int i = 0; i < element.getEditor().size(); i++) {
1946      composeContactDetail(t, "MetadataResource", "editor", element.getEditor().get(i), i);
1947    }
1948    for (int i = 0; i < element.getReviewer().size(); i++) {
1949      composeContactDetail(t, "MetadataResource", "reviewer", element.getReviewer().get(i), i);
1950    }
1951    for (int i = 0; i < element.getEndorser().size(); i++) {
1952      composeContactDetail(t, "MetadataResource", "endorser", element.getEndorser().get(i), i);
1953    }
1954    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
1955      composeRelatedArtifact(t, "MetadataResource", "relatedArtifact", element.getRelatedArtifact().get(i), i);
1956    }
1957  }
1958
1959  protected void composeResource(Complex t, String parentType, String name, Resource element, int index) {
1960    composeBase(t, parentType, name, element, index);
1961    if (element.hasIdElement()) {
1962      composeId(t, "Resource", "id", element.getIdElement(), -1);
1963    }
1964    if (element.hasMeta()) {
1965      composeMeta(t, "Resource", "meta", element.getMeta(), -1);
1966    }
1967    if (element.hasImplicitRulesElement()) {
1968      composeUri(t, "Resource", "implicitRules", element.getImplicitRulesElement(), -1);
1969    }
1970    if (element.hasLanguageElement()) {
1971      composeCode(t, "Resource", "language", element.getLanguageElement(), -1);
1972    }
1973  }
1974
1975  protected void composeAccount(Complex parent, String parentType, String name, Account element, int index) {
1976    if (element == null) 
1977      return;
1978    Complex t;
1979    if (Utilities.noString(parentType))
1980      t = parent;
1981    else {
1982      t = parent.predicate("fhir:"+name,index > -1);
1983    }
1984    composeDomainResource(t, "Account", name, element, index);
1985    for (int i = 0; i < element.getIdentifier().size(); i++) {
1986      composeIdentifier(t, "Account", "identifier", element.getIdentifier().get(i), i);
1987    }
1988    if (element.hasStatusElement()) {
1989      composeEnum(t, "Account", "status", element.getStatusElement(), -1);
1990    }
1991    if (element.hasBillingStatus()) {
1992      composeCodeableConcept(t, "Account", "billingStatus", element.getBillingStatus(), -1);
1993    }
1994    if (element.hasType()) {
1995      composeCodeableConcept(t, "Account", "type", element.getType(), -1);
1996    }
1997    if (element.hasNameElement()) {
1998      composeString(t, "Account", "name", element.getNameElement(), -1);
1999    }
2000    for (int i = 0; i < element.getSubject().size(); i++) {
2001      composeReference(t, "Account", "subject", element.getSubject().get(i), i);
2002    }
2003    if (element.hasServicePeriod()) {
2004      composePeriod(t, "Account", "servicePeriod", element.getServicePeriod(), -1);
2005    }
2006    for (int i = 0; i < element.getCoverage().size(); i++) {
2007      composeAccountCoverageComponent(t, "Account", "coverage", element.getCoverage().get(i), i);
2008    }
2009    if (element.hasOwner()) {
2010      composeReference(t, "Account", "owner", element.getOwner(), -1);
2011    }
2012    if (element.hasDescriptionElement()) {
2013      composeMarkdown(t, "Account", "description", element.getDescriptionElement(), -1);
2014    }
2015    for (int i = 0; i < element.getGuarantor().size(); i++) {
2016      composeAccountGuarantorComponent(t, "Account", "guarantor", element.getGuarantor().get(i), i);
2017    }
2018    for (int i = 0; i < element.getDiagnosis().size(); i++) {
2019      composeAccountDiagnosisComponent(t, "Account", "diagnosis", element.getDiagnosis().get(i), i);
2020    }
2021    for (int i = 0; i < element.getProcedure().size(); i++) {
2022      composeAccountProcedureComponent(t, "Account", "procedure", element.getProcedure().get(i), i);
2023    }
2024    for (int i = 0; i < element.getRelatedAccount().size(); i++) {
2025      composeAccountRelatedAccountComponent(t, "Account", "relatedAccount", element.getRelatedAccount().get(i), i);
2026    }
2027    if (element.hasCurrency()) {
2028      composeCodeableConcept(t, "Account", "currency", element.getCurrency(), -1);
2029    }
2030    for (int i = 0; i < element.getBalance().size(); i++) {
2031      composeAccountBalanceComponent(t, "Account", "balance", element.getBalance().get(i), i);
2032    }
2033    if (element.hasCalculatedAtElement()) {
2034      composeInstant(t, "Account", "calculatedAt", element.getCalculatedAtElement(), -1);
2035    }
2036  }
2037
2038  protected void composeAccountCoverageComponent(Complex parent, String parentType, String name, Account.CoverageComponent element, int index) {
2039    if (element == null) 
2040      return;
2041    Complex t;
2042    if (Utilities.noString(parentType))
2043      t = parent;
2044    else {
2045      t = parent.predicate("fhir:"+name,index > -1);
2046    }
2047    composeBackboneElement(t, "coverage", name, element, index);
2048    if (element.hasCoverage()) {
2049      composeReference(t, "CoverageComponent", "coverage", element.getCoverage(), -1);
2050    }
2051    if (element.hasPriorityElement()) {
2052      composePositiveInt(t, "CoverageComponent", "priority", element.getPriorityElement(), -1);
2053    }
2054  }
2055
2056  protected void composeAccountGuarantorComponent(Complex parent, String parentType, String name, Account.GuarantorComponent element, int index) {
2057    if (element == null) 
2058      return;
2059    Complex t;
2060    if (Utilities.noString(parentType))
2061      t = parent;
2062    else {
2063      t = parent.predicate("fhir:"+name,index > -1);
2064    }
2065    composeBackboneElement(t, "guarantor", name, element, index);
2066    if (element.hasParty()) {
2067      composeReference(t, "GuarantorComponent", "party", element.getParty(), -1);
2068    }
2069    if (element.hasOnHoldElement()) {
2070      composeBoolean(t, "GuarantorComponent", "onHold", element.getOnHoldElement(), -1);
2071    }
2072    if (element.hasPeriod()) {
2073      composePeriod(t, "GuarantorComponent", "period", element.getPeriod(), -1);
2074    }
2075  }
2076
2077  protected void composeAccountDiagnosisComponent(Complex parent, String parentType, String name, Account.AccountDiagnosisComponent element, int index) {
2078    if (element == null) 
2079      return;
2080    Complex t;
2081    if (Utilities.noString(parentType))
2082      t = parent;
2083    else {
2084      t = parent.predicate("fhir:"+name,index > -1);
2085    }
2086    composeBackboneElement(t, "diagnosis", name, element, index);
2087    if (element.hasSequenceElement()) {
2088      composePositiveInt(t, "AccountDiagnosisComponent", "sequence", element.getSequenceElement(), -1);
2089    }
2090    if (element.hasCondition()) {
2091      composeCodeableReference(t, "AccountDiagnosisComponent", "condition", element.getCondition(), -1);
2092    }
2093    if (element.hasDateOfDiagnosisElement()) {
2094      composeDateTime(t, "AccountDiagnosisComponent", "dateOfDiagnosis", element.getDateOfDiagnosisElement(), -1);
2095    }
2096    for (int i = 0; i < element.getType().size(); i++) {
2097      composeCodeableConcept(t, "AccountDiagnosisComponent", "type", element.getType().get(i), i);
2098    }
2099    if (element.hasOnAdmissionElement()) {
2100      composeBoolean(t, "AccountDiagnosisComponent", "onAdmission", element.getOnAdmissionElement(), -1);
2101    }
2102    for (int i = 0; i < element.getPackageCode().size(); i++) {
2103      composeCodeableConcept(t, "AccountDiagnosisComponent", "packageCode", element.getPackageCode().get(i), i);
2104    }
2105  }
2106
2107  protected void composeAccountProcedureComponent(Complex parent, String parentType, String name, Account.AccountProcedureComponent element, int index) {
2108    if (element == null) 
2109      return;
2110    Complex t;
2111    if (Utilities.noString(parentType))
2112      t = parent;
2113    else {
2114      t = parent.predicate("fhir:"+name,index > -1);
2115    }
2116    composeBackboneElement(t, "procedure", name, element, index);
2117    if (element.hasSequenceElement()) {
2118      composePositiveInt(t, "AccountProcedureComponent", "sequence", element.getSequenceElement(), -1);
2119    }
2120    if (element.hasCode()) {
2121      composeCodeableReference(t, "AccountProcedureComponent", "code", element.getCode(), -1);
2122    }
2123    if (element.hasDateOfServiceElement()) {
2124      composeDateTime(t, "AccountProcedureComponent", "dateOfService", element.getDateOfServiceElement(), -1);
2125    }
2126    for (int i = 0; i < element.getType().size(); i++) {
2127      composeCodeableConcept(t, "AccountProcedureComponent", "type", element.getType().get(i), i);
2128    }
2129    for (int i = 0; i < element.getPackageCode().size(); i++) {
2130      composeCodeableConcept(t, "AccountProcedureComponent", "packageCode", element.getPackageCode().get(i), i);
2131    }
2132    for (int i = 0; i < element.getDevice().size(); i++) {
2133      composeReference(t, "AccountProcedureComponent", "device", element.getDevice().get(i), i);
2134    }
2135  }
2136
2137  protected void composeAccountRelatedAccountComponent(Complex parent, String parentType, String name, Account.AccountRelatedAccountComponent element, int index) {
2138    if (element == null) 
2139      return;
2140    Complex t;
2141    if (Utilities.noString(parentType))
2142      t = parent;
2143    else {
2144      t = parent.predicate("fhir:"+name,index > -1);
2145    }
2146    composeBackboneElement(t, "relatedAccount", name, element, index);
2147    if (element.hasRelationship()) {
2148      composeCodeableConcept(t, "AccountRelatedAccountComponent", "relationship", element.getRelationship(), -1);
2149    }
2150    if (element.hasAccount()) {
2151      composeReference(t, "AccountRelatedAccountComponent", "account", element.getAccount(), -1);
2152    }
2153  }
2154
2155  protected void composeAccountBalanceComponent(Complex parent, String parentType, String name, Account.AccountBalanceComponent element, int index) {
2156    if (element == null) 
2157      return;
2158    Complex t;
2159    if (Utilities.noString(parentType))
2160      t = parent;
2161    else {
2162      t = parent.predicate("fhir:"+name,index > -1);
2163    }
2164    composeBackboneElement(t, "balance", name, element, index);
2165    if (element.hasAggregate()) {
2166      composeCodeableConcept(t, "AccountBalanceComponent", "aggregate", element.getAggregate(), -1);
2167    }
2168    if (element.hasTerm()) {
2169      composeCodeableConcept(t, "AccountBalanceComponent", "term", element.getTerm(), -1);
2170    }
2171    if (element.hasEstimateElement()) {
2172      composeBoolean(t, "AccountBalanceComponent", "estimate", element.getEstimateElement(), -1);
2173    }
2174    if (element.hasAmount()) {
2175      composeMoney(t, "AccountBalanceComponent", "amount", element.getAmount(), -1);
2176    }
2177  }
2178
2179  protected void composeActivityDefinition(Complex parent, String parentType, String name, ActivityDefinition element, int index) {
2180    if (element == null) 
2181      return;
2182    Complex t;
2183    if (Utilities.noString(parentType))
2184      t = parent;
2185    else {
2186      t = parent.predicate("fhir:"+name,index > -1);
2187    }
2188    composeMetadataResource(t, "ActivityDefinition", name, element, index);
2189    if (element.hasUrlElement()) {
2190      composeUri(t, "ActivityDefinition", "url", element.getUrlElement(), -1);
2191    }
2192    for (int i = 0; i < element.getIdentifier().size(); i++) {
2193      composeIdentifier(t, "ActivityDefinition", "identifier", element.getIdentifier().get(i), i);
2194    }
2195    if (element.hasVersionElement()) {
2196      composeString(t, "ActivityDefinition", "version", element.getVersionElement(), -1);
2197    }
2198    if (element.hasVersionAlgorithm()) {
2199      composeType(t, "ActivityDefinition", "versionAlgorithm", element.getVersionAlgorithm(), -1);
2200    }
2201    if (element.hasNameElement()) {
2202      composeString(t, "ActivityDefinition", "name", element.getNameElement(), -1);
2203    }
2204    if (element.hasTitleElement()) {
2205      composeString(t, "ActivityDefinition", "title", element.getTitleElement(), -1);
2206    }
2207    if (element.hasSubtitleElement()) {
2208      composeString(t, "ActivityDefinition", "subtitle", element.getSubtitleElement(), -1);
2209    }
2210    if (element.hasStatusElement()) {
2211      composeEnum(t, "ActivityDefinition", "status", element.getStatusElement(), -1);
2212    }
2213    if (element.hasExperimentalElement()) {
2214      composeBoolean(t, "ActivityDefinition", "experimental", element.getExperimentalElement(), -1);
2215    }
2216    if (element.hasSubject()) {
2217      composeType(t, "ActivityDefinition", "subject", element.getSubject(), -1);
2218    }
2219    if (element.hasDateElement()) {
2220      composeDateTime(t, "ActivityDefinition", "date", element.getDateElement(), -1);
2221    }
2222    if (element.hasPublisherElement()) {
2223      composeString(t, "ActivityDefinition", "publisher", element.getPublisherElement(), -1);
2224    }
2225    for (int i = 0; i < element.getContact().size(); i++) {
2226      composeContactDetail(t, "ActivityDefinition", "contact", element.getContact().get(i), i);
2227    }
2228    if (element.hasDescriptionElement()) {
2229      composeMarkdown(t, "ActivityDefinition", "description", element.getDescriptionElement(), -1);
2230    }
2231    for (int i = 0; i < element.getUseContext().size(); i++) {
2232      composeUsageContext(t, "ActivityDefinition", "useContext", element.getUseContext().get(i), i);
2233    }
2234    for (int i = 0; i < element.getJurisdiction().size(); i++) {
2235      composeCodeableConcept(t, "ActivityDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
2236    }
2237    if (element.hasPurposeElement()) {
2238      composeMarkdown(t, "ActivityDefinition", "purpose", element.getPurposeElement(), -1);
2239    }
2240    if (element.hasUsageElement()) {
2241      composeMarkdown(t, "ActivityDefinition", "usage", element.getUsageElement(), -1);
2242    }
2243    if (element.hasCopyrightElement()) {
2244      composeMarkdown(t, "ActivityDefinition", "copyright", element.getCopyrightElement(), -1);
2245    }
2246    if (element.hasCopyrightLabelElement()) {
2247      composeString(t, "ActivityDefinition", "copyrightLabel", element.getCopyrightLabelElement(), -1);
2248    }
2249    if (element.hasApprovalDateElement()) {
2250      composeDate(t, "ActivityDefinition", "approvalDate", element.getApprovalDateElement(), -1);
2251    }
2252    if (element.hasLastReviewDateElement()) {
2253      composeDate(t, "ActivityDefinition", "lastReviewDate", element.getLastReviewDateElement(), -1);
2254    }
2255    if (element.hasEffectivePeriod()) {
2256      composePeriod(t, "ActivityDefinition", "effectivePeriod", element.getEffectivePeriod(), -1);
2257    }
2258    for (int i = 0; i < element.getTopic().size(); i++) {
2259      composeCodeableConcept(t, "ActivityDefinition", "topic", element.getTopic().get(i), i);
2260    }
2261    for (int i = 0; i < element.getAuthor().size(); i++) {
2262      composeContactDetail(t, "ActivityDefinition", "author", element.getAuthor().get(i), i);
2263    }
2264    for (int i = 0; i < element.getEditor().size(); i++) {
2265      composeContactDetail(t, "ActivityDefinition", "editor", element.getEditor().get(i), i);
2266    }
2267    for (int i = 0; i < element.getReviewer().size(); i++) {
2268      composeContactDetail(t, "ActivityDefinition", "reviewer", element.getReviewer().get(i), i);
2269    }
2270    for (int i = 0; i < element.getEndorser().size(); i++) {
2271      composeContactDetail(t, "ActivityDefinition", "endorser", element.getEndorser().get(i), i);
2272    }
2273    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
2274      composeRelatedArtifact(t, "ActivityDefinition", "relatedArtifact", element.getRelatedArtifact().get(i), i);
2275    }
2276    for (int i = 0; i < element.getLibrary().size(); i++) {
2277      composeCanonical(t, "ActivityDefinition", "library", element.getLibrary().get(i), i);
2278    }
2279    if (element.hasKindElement()) {
2280      composeEnum(t, "ActivityDefinition", "kind", element.getKindElement(), -1);
2281    }
2282    if (element.hasProfileElement()) {
2283      composeCanonical(t, "ActivityDefinition", "profile", element.getProfileElement(), -1);
2284    }
2285    if (element.hasCode()) {
2286      composeCodeableConcept(t, "ActivityDefinition", "code", element.getCode(), -1);
2287    }
2288    if (element.hasIntentElement()) {
2289      composeEnum(t, "ActivityDefinition", "intent", element.getIntentElement(), -1);
2290    }
2291    if (element.hasPriorityElement()) {
2292      composeEnum(t, "ActivityDefinition", "priority", element.getPriorityElement(), -1);
2293    }
2294    if (element.hasDoNotPerformElement()) {
2295      composeBoolean(t, "ActivityDefinition", "doNotPerform", element.getDoNotPerformElement(), -1);
2296    }
2297    if (element.hasTiming()) {
2298      composeType(t, "ActivityDefinition", "timing", element.getTiming(), -1);
2299    }
2300    if (element.hasAsNeeded()) {
2301      composeType(t, "ActivityDefinition", "asNeeded", element.getAsNeeded(), -1);
2302    }
2303    if (element.hasLocation()) {
2304      composeCodeableReference(t, "ActivityDefinition", "location", element.getLocation(), -1);
2305    }
2306    for (int i = 0; i < element.getParticipant().size(); i++) {
2307      composeActivityDefinitionParticipantComponent(t, "ActivityDefinition", "participant", element.getParticipant().get(i), i);
2308    }
2309    if (element.hasProduct()) {
2310      composeType(t, "ActivityDefinition", "product", element.getProduct(), -1);
2311    }
2312    if (element.hasQuantity()) {
2313      composeQuantity(t, "ActivityDefinition", "quantity", element.getQuantity(), -1);
2314    }
2315    for (int i = 0; i < element.getDosage().size(); i++) {
2316      composeDosage(t, "ActivityDefinition", "dosage", element.getDosage().get(i), i);
2317    }
2318    for (int i = 0; i < element.getBodySite().size(); i++) {
2319      composeCodeableConcept(t, "ActivityDefinition", "bodySite", element.getBodySite().get(i), i);
2320    }
2321    for (int i = 0; i < element.getSpecimenRequirement().size(); i++) {
2322      composeCanonical(t, "ActivityDefinition", "specimenRequirement", element.getSpecimenRequirement().get(i), i);
2323    }
2324    for (int i = 0; i < element.getObservationRequirement().size(); i++) {
2325      composeCanonical(t, "ActivityDefinition", "observationRequirement", element.getObservationRequirement().get(i), i);
2326    }
2327    for (int i = 0; i < element.getObservationResultRequirement().size(); i++) {
2328      composeCanonical(t, "ActivityDefinition", "observationResultRequirement", element.getObservationResultRequirement().get(i), i);
2329    }
2330    if (element.hasTransformElement()) {
2331      composeCanonical(t, "ActivityDefinition", "transform", element.getTransformElement(), -1);
2332    }
2333    for (int i = 0; i < element.getDynamicValue().size(); i++) {
2334      composeActivityDefinitionDynamicValueComponent(t, "ActivityDefinition", "dynamicValue", element.getDynamicValue().get(i), i);
2335    }
2336  }
2337
2338  protected void composeActivityDefinitionParticipantComponent(Complex parent, String parentType, String name, ActivityDefinition.ActivityDefinitionParticipantComponent element, int index) {
2339    if (element == null) 
2340      return;
2341    Complex t;
2342    if (Utilities.noString(parentType))
2343      t = parent;
2344    else {
2345      t = parent.predicate("fhir:"+name,index > -1);
2346    }
2347    composeBackboneElement(t, "participant", name, element, index);
2348    if (element.hasTypeElement()) {
2349      composeEnum(t, "ActivityDefinitionParticipantComponent", "type", element.getTypeElement(), -1);
2350    }
2351    if (element.hasTypeCanonicalElement()) {
2352      composeCanonical(t, "ActivityDefinitionParticipantComponent", "typeCanonical", element.getTypeCanonicalElement(), -1);
2353    }
2354    if (element.hasTypeReference()) {
2355      composeReference(t, "ActivityDefinitionParticipantComponent", "typeReference", element.getTypeReference(), -1);
2356    }
2357    if (element.hasRole()) {
2358      composeCodeableConcept(t, "ActivityDefinitionParticipantComponent", "role", element.getRole(), -1);
2359    }
2360    if (element.hasFunction()) {
2361      composeCodeableConcept(t, "ActivityDefinitionParticipantComponent", "function", element.getFunction(), -1);
2362    }
2363  }
2364
2365  protected void composeActivityDefinitionDynamicValueComponent(Complex parent, String parentType, String name, ActivityDefinition.ActivityDefinitionDynamicValueComponent 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:"+name,index > -1);
2373    }
2374    composeBackboneElement(t, "dynamicValue", name, element, index);
2375    if (element.hasPathElement()) {
2376      composeString(t, "ActivityDefinitionDynamicValueComponent", "path", element.getPathElement(), -1);
2377    }
2378    if (element.hasExpression()) {
2379      composeExpression(t, "ActivityDefinitionDynamicValueComponent", "expression", element.getExpression(), -1);
2380    }
2381  }
2382
2383  protected void composeActorDefinition(Complex parent, String parentType, String name, ActorDefinition element, int index) {
2384    if (element == null) 
2385      return;
2386    Complex t;
2387    if (Utilities.noString(parentType))
2388      t = parent;
2389    else {
2390      t = parent.predicate("fhir:"+name,index > -1);
2391    }
2392    composeCanonicalResource(t, "ActorDefinition", name, element, index);
2393    if (element.hasUrlElement()) {
2394      composeUri(t, "ActorDefinition", "url", element.getUrlElement(), -1);
2395    }
2396    for (int i = 0; i < element.getIdentifier().size(); i++) {
2397      composeIdentifier(t, "ActorDefinition", "identifier", element.getIdentifier().get(i), i);
2398    }
2399    if (element.hasVersionElement()) {
2400      composeString(t, "ActorDefinition", "version", element.getVersionElement(), -1);
2401    }
2402    if (element.hasVersionAlgorithm()) {
2403      composeType(t, "ActorDefinition", "versionAlgorithm", element.getVersionAlgorithm(), -1);
2404    }
2405    if (element.hasNameElement()) {
2406      composeString(t, "ActorDefinition", "name", element.getNameElement(), -1);
2407    }
2408    if (element.hasTitleElement()) {
2409      composeString(t, "ActorDefinition", "title", element.getTitleElement(), -1);
2410    }
2411    if (element.hasStatusElement()) {
2412      composeEnum(t, "ActorDefinition", "status", element.getStatusElement(), -1);
2413    }
2414    if (element.hasExperimentalElement()) {
2415      composeBoolean(t, "ActorDefinition", "experimental", element.getExperimentalElement(), -1);
2416    }
2417    if (element.hasDateElement()) {
2418      composeDateTime(t, "ActorDefinition", "date", element.getDateElement(), -1);
2419    }
2420    if (element.hasPublisherElement()) {
2421      composeString(t, "ActorDefinition", "publisher", element.getPublisherElement(), -1);
2422    }
2423    for (int i = 0; i < element.getContact().size(); i++) {
2424      composeContactDetail(t, "ActorDefinition", "contact", element.getContact().get(i), i);
2425    }
2426    if (element.hasDescriptionElement()) {
2427      composeMarkdown(t, "ActorDefinition", "description", element.getDescriptionElement(), -1);
2428    }
2429    for (int i = 0; i < element.getUseContext().size(); i++) {
2430      composeUsageContext(t, "ActorDefinition", "useContext", element.getUseContext().get(i), i);
2431    }
2432    for (int i = 0; i < element.getJurisdiction().size(); i++) {
2433      composeCodeableConcept(t, "ActorDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
2434    }
2435    if (element.hasPurposeElement()) {
2436      composeMarkdown(t, "ActorDefinition", "purpose", element.getPurposeElement(), -1);
2437    }
2438    if (element.hasCopyrightElement()) {
2439      composeMarkdown(t, "ActorDefinition", "copyright", element.getCopyrightElement(), -1);
2440    }
2441    if (element.hasCopyrightLabelElement()) {
2442      composeString(t, "ActorDefinition", "copyrightLabel", element.getCopyrightLabelElement(), -1);
2443    }
2444    if (element.hasTypeElement()) {
2445      composeEnum(t, "ActorDefinition", "type", element.getTypeElement(), -1);
2446    }
2447    if (element.hasDocumentationElement()) {
2448      composeMarkdown(t, "ActorDefinition", "documentation", element.getDocumentationElement(), -1);
2449    }
2450    for (int i = 0; i < element.getReference().size(); i++) {
2451      composeUrl(t, "ActorDefinition", "reference", element.getReference().get(i), i);
2452    }
2453    if (element.hasCapabilitiesElement()) {
2454      composeCanonical(t, "ActorDefinition", "capabilities", element.getCapabilitiesElement(), -1);
2455    }
2456    for (int i = 0; i < element.getDerivedFrom().size(); i++) {
2457      composeCanonical(t, "ActorDefinition", "derivedFrom", element.getDerivedFrom().get(i), i);
2458    }
2459  }
2460
2461  protected void composeAdministrableProductDefinition(Complex parent, String parentType, String name, AdministrableProductDefinition element, int index) {
2462    if (element == null) 
2463      return;
2464    Complex t;
2465    if (Utilities.noString(parentType))
2466      t = parent;
2467    else {
2468      t = parent.predicate("fhir:"+name,index > -1);
2469    }
2470    composeDomainResource(t, "AdministrableProductDefinition", name, element, index);
2471    for (int i = 0; i < element.getIdentifier().size(); i++) {
2472      composeIdentifier(t, "AdministrableProductDefinition", "identifier", element.getIdentifier().get(i), i);
2473    }
2474    if (element.hasStatusElement()) {
2475      composeEnum(t, "AdministrableProductDefinition", "status", element.getStatusElement(), -1);
2476    }
2477    for (int i = 0; i < element.getFormOf().size(); i++) {
2478      composeReference(t, "AdministrableProductDefinition", "formOf", element.getFormOf().get(i), i);
2479    }
2480    if (element.hasAdministrableDoseForm()) {
2481      composeCodeableConcept(t, "AdministrableProductDefinition", "administrableDoseForm", element.getAdministrableDoseForm(), -1);
2482    }
2483    if (element.hasUnitOfPresentation()) {
2484      composeCodeableConcept(t, "AdministrableProductDefinition", "unitOfPresentation", element.getUnitOfPresentation(), -1);
2485    }
2486    for (int i = 0; i < element.getProducedFrom().size(); i++) {
2487      composeReference(t, "AdministrableProductDefinition", "producedFrom", element.getProducedFrom().get(i), i);
2488    }
2489    for (int i = 0; i < element.getIngredient().size(); i++) {
2490      composeCodeableConcept(t, "AdministrableProductDefinition", "ingredient", element.getIngredient().get(i), i);
2491    }
2492    if (element.hasDevice()) {
2493      composeReference(t, "AdministrableProductDefinition", "device", element.getDevice(), -1);
2494    }
2495    if (element.hasDescriptionElement()) {
2496      composeMarkdown(t, "AdministrableProductDefinition", "description", element.getDescriptionElement(), -1);
2497    }
2498    for (int i = 0; i < element.getProperty().size(); i++) {
2499      composeAdministrableProductDefinitionPropertyComponent(t, "AdministrableProductDefinition", "property", element.getProperty().get(i), i);
2500    }
2501    for (int i = 0; i < element.getRouteOfAdministration().size(); i++) {
2502      composeAdministrableProductDefinitionRouteOfAdministrationComponent(t, "AdministrableProductDefinition", "routeOfAdministration", element.getRouteOfAdministration().get(i), i);
2503    }
2504  }
2505
2506  protected void composeAdministrableProductDefinitionPropertyComponent(Complex parent, String parentType, String name, AdministrableProductDefinition.AdministrableProductDefinitionPropertyComponent element, int index) {
2507    if (element == null) 
2508      return;
2509    Complex t;
2510    if (Utilities.noString(parentType))
2511      t = parent;
2512    else {
2513      t = parent.predicate("fhir:"+name,index > -1);
2514    }
2515    composeBackboneElement(t, "property", name, element, index);
2516    if (element.hasType()) {
2517      composeCodeableConcept(t, "AdministrableProductDefinitionPropertyComponent", "type", element.getType(), -1);
2518    }
2519    if (element.hasValue()) {
2520      composeType(t, "AdministrableProductDefinitionPropertyComponent", "value", element.getValue(), -1);
2521    }
2522    if (element.hasStatus()) {
2523      composeCodeableConcept(t, "AdministrableProductDefinitionPropertyComponent", "status", element.getStatus(), -1);
2524    }
2525  }
2526
2527  protected void composeAdministrableProductDefinitionRouteOfAdministrationComponent(Complex parent, String parentType, String name, AdministrableProductDefinition.AdministrableProductDefinitionRouteOfAdministrationComponent element, int index) {
2528    if (element == null) 
2529      return;
2530    Complex t;
2531    if (Utilities.noString(parentType))
2532      t = parent;
2533    else {
2534      t = parent.predicate("fhir:"+name,index > -1);
2535    }
2536    composeBackboneElement(t, "routeOfAdministration", name, element, index);
2537    if (element.hasCode()) {
2538      composeCodeableConcept(t, "AdministrableProductDefinitionRouteOfAdministrationComponent", "code", element.getCode(), -1);
2539    }
2540    if (element.hasFirstDose()) {
2541      composeQuantity(t, "AdministrableProductDefinitionRouteOfAdministrationComponent", "firstDose", element.getFirstDose(), -1);
2542    }
2543    if (element.hasMaxSingleDose()) {
2544      composeQuantity(t, "AdministrableProductDefinitionRouteOfAdministrationComponent", "maxSingleDose", element.getMaxSingleDose(), -1);
2545    }
2546    if (element.hasMaxDosePerDay()) {
2547      composeQuantity(t, "AdministrableProductDefinitionRouteOfAdministrationComponent", "maxDosePerDay", element.getMaxDosePerDay(), -1);
2548    }
2549    if (element.hasMaxDosePerTreatmentPeriod()) {
2550      composeRatio(t, "AdministrableProductDefinitionRouteOfAdministrationComponent", "maxDosePerTreatmentPeriod", element.getMaxDosePerTreatmentPeriod(), -1);
2551    }
2552    if (element.hasMaxTreatmentPeriod()) {
2553      composeDuration(t, "AdministrableProductDefinitionRouteOfAdministrationComponent", "maxTreatmentPeriod", element.getMaxTreatmentPeriod(), -1);
2554    }
2555    for (int i = 0; i < element.getTargetSpecies().size(); i++) {
2556      composeAdministrableProductDefinitionRouteOfAdministrationTargetSpeciesComponent(t, "AdministrableProductDefinitionRouteOfAdministrationComponent", "targetSpecies", element.getTargetSpecies().get(i), i);
2557    }
2558  }
2559
2560  protected void composeAdministrableProductDefinitionRouteOfAdministrationTargetSpeciesComponent(Complex parent, String parentType, String name, AdministrableProductDefinition.AdministrableProductDefinitionRouteOfAdministrationTargetSpeciesComponent element, int index) {
2561    if (element == null) 
2562      return;
2563    Complex t;
2564    if (Utilities.noString(parentType))
2565      t = parent;
2566    else {
2567      t = parent.predicate("fhir:"+name,index > -1);
2568    }
2569    composeBackboneElement(t, "targetSpecies", name, element, index);
2570    if (element.hasCode()) {
2571      composeCodeableConcept(t, "AdministrableProductDefinitionRouteOfAdministrationTargetSpeciesComponent", "code", element.getCode(), -1);
2572    }
2573    for (int i = 0; i < element.getWithdrawalPeriod().size(); i++) {
2574      composeAdministrableProductDefinitionRouteOfAdministrationTargetSpeciesWithdrawalPeriodComponent(t, "AdministrableProductDefinitionRouteOfAdministrationTargetSpeciesComponent", "withdrawalPeriod", element.getWithdrawalPeriod().get(i), i);
2575    }
2576  }
2577
2578  protected void composeAdministrableProductDefinitionRouteOfAdministrationTargetSpeciesWithdrawalPeriodComponent(Complex parent, String parentType, String name, AdministrableProductDefinition.AdministrableProductDefinitionRouteOfAdministrationTargetSpeciesWithdrawalPeriodComponent element, int index) {
2579    if (element == null) 
2580      return;
2581    Complex t;
2582    if (Utilities.noString(parentType))
2583      t = parent;
2584    else {
2585      t = parent.predicate("fhir:"+name,index > -1);
2586    }
2587    composeBackboneElement(t, "withdrawalPeriod", name, element, index);
2588    if (element.hasTissue()) {
2589      composeCodeableConcept(t, "AdministrableProductDefinitionRouteOfAdministrationTargetSpeciesWithdrawalPeriodComponent", "tissue", element.getTissue(), -1);
2590    }
2591    if (element.hasValue()) {
2592      composeQuantity(t, "AdministrableProductDefinitionRouteOfAdministrationTargetSpeciesWithdrawalPeriodComponent", "value", element.getValue(), -1);
2593    }
2594    if (element.hasSupportingInformationElement()) {
2595      composeString(t, "AdministrableProductDefinitionRouteOfAdministrationTargetSpeciesWithdrawalPeriodComponent", "supportingInformation", element.getSupportingInformationElement(), -1);
2596    }
2597  }
2598
2599  protected void composeAdverseEvent(Complex parent, String parentType, String name, AdverseEvent element, int index) {
2600    if (element == null) 
2601      return;
2602    Complex t;
2603    if (Utilities.noString(parentType))
2604      t = parent;
2605    else {
2606      t = parent.predicate("fhir:"+name,index > -1);
2607    }
2608    composeDomainResource(t, "AdverseEvent", name, element, index);
2609    for (int i = 0; i < element.getIdentifier().size(); i++) {
2610      composeIdentifier(t, "AdverseEvent", "identifier", element.getIdentifier().get(i), i);
2611    }
2612    if (element.hasStatusElement()) {
2613      composeEnum(t, "AdverseEvent", "status", element.getStatusElement(), -1);
2614    }
2615    if (element.hasActualityElement()) {
2616      composeEnum(t, "AdverseEvent", "actuality", element.getActualityElement(), -1);
2617    }
2618    for (int i = 0; i < element.getCategory().size(); i++) {
2619      composeCodeableConcept(t, "AdverseEvent", "category", element.getCategory().get(i), i);
2620    }
2621    if (element.hasCode()) {
2622      composeCodeableConcept(t, "AdverseEvent", "code", element.getCode(), -1);
2623    }
2624    if (element.hasSubject()) {
2625      composeReference(t, "AdverseEvent", "subject", element.getSubject(), -1);
2626    }
2627    if (element.hasEncounter()) {
2628      composeReference(t, "AdverseEvent", "encounter", element.getEncounter(), -1);
2629    }
2630    if (element.hasOccurrence()) {
2631      composeType(t, "AdverseEvent", "occurrence", element.getOccurrence(), -1);
2632    }
2633    if (element.hasDetectedElement()) {
2634      composeDateTime(t, "AdverseEvent", "detected", element.getDetectedElement(), -1);
2635    }
2636    if (element.hasRecordedDateElement()) {
2637      composeDateTime(t, "AdverseEvent", "recordedDate", element.getRecordedDateElement(), -1);
2638    }
2639    for (int i = 0; i < element.getResultingEffect().size(); i++) {
2640      composeReference(t, "AdverseEvent", "resultingEffect", element.getResultingEffect().get(i), i);
2641    }
2642    if (element.hasLocation()) {
2643      composeReference(t, "AdverseEvent", "location", element.getLocation(), -1);
2644    }
2645    if (element.hasSeriousness()) {
2646      composeCodeableConcept(t, "AdverseEvent", "seriousness", element.getSeriousness(), -1);
2647    }
2648    for (int i = 0; i < element.getOutcome().size(); i++) {
2649      composeCodeableConcept(t, "AdverseEvent", "outcome", element.getOutcome().get(i), i);
2650    }
2651    if (element.hasRecorder()) {
2652      composeReference(t, "AdverseEvent", "recorder", element.getRecorder(), -1);
2653    }
2654    for (int i = 0; i < element.getParticipant().size(); i++) {
2655      composeAdverseEventParticipantComponent(t, "AdverseEvent", "participant", element.getParticipant().get(i), i);
2656    }
2657    for (int i = 0; i < element.getStudy().size(); i++) {
2658      composeReference(t, "AdverseEvent", "study", element.getStudy().get(i), i);
2659    }
2660    if (element.hasExpectedInResearchStudyElement()) {
2661      composeBoolean(t, "AdverseEvent", "expectedInResearchStudy", element.getExpectedInResearchStudyElement(), -1);
2662    }
2663    for (int i = 0; i < element.getSuspectEntity().size(); i++) {
2664      composeAdverseEventSuspectEntityComponent(t, "AdverseEvent", "suspectEntity", element.getSuspectEntity().get(i), i);
2665    }
2666    for (int i = 0; i < element.getContributingFactor().size(); i++) {
2667      composeAdverseEventContributingFactorComponent(t, "AdverseEvent", "contributingFactor", element.getContributingFactor().get(i), i);
2668    }
2669    for (int i = 0; i < element.getPreventiveAction().size(); i++) {
2670      composeAdverseEventPreventiveActionComponent(t, "AdverseEvent", "preventiveAction", element.getPreventiveAction().get(i), i);
2671    }
2672    for (int i = 0; i < element.getMitigatingAction().size(); i++) {
2673      composeAdverseEventMitigatingActionComponent(t, "AdverseEvent", "mitigatingAction", element.getMitigatingAction().get(i), i);
2674    }
2675    for (int i = 0; i < element.getSupportingInfo().size(); i++) {
2676      composeAdverseEventSupportingInfoComponent(t, "AdverseEvent", "supportingInfo", element.getSupportingInfo().get(i), i);
2677    }
2678    for (int i = 0; i < element.getNote().size(); i++) {
2679      composeAnnotation(t, "AdverseEvent", "note", element.getNote().get(i), i);
2680    }
2681  }
2682
2683  protected void composeAdverseEventParticipantComponent(Complex parent, String parentType, String name, AdverseEvent.AdverseEventParticipantComponent element, int index) {
2684    if (element == null) 
2685      return;
2686    Complex t;
2687    if (Utilities.noString(parentType))
2688      t = parent;
2689    else {
2690      t = parent.predicate("fhir:"+name,index > -1);
2691    }
2692    composeBackboneElement(t, "participant", name, element, index);
2693    if (element.hasFunction()) {
2694      composeCodeableConcept(t, "AdverseEventParticipantComponent", "function", element.getFunction(), -1);
2695    }
2696    if (element.hasActor()) {
2697      composeReference(t, "AdverseEventParticipantComponent", "actor", element.getActor(), -1);
2698    }
2699  }
2700
2701  protected void composeAdverseEventSuspectEntityComponent(Complex parent, String parentType, String name, AdverseEvent.AdverseEventSuspectEntityComponent element, int index) {
2702    if (element == null) 
2703      return;
2704    Complex t;
2705    if (Utilities.noString(parentType))
2706      t = parent;
2707    else {
2708      t = parent.predicate("fhir:"+name,index > -1);
2709    }
2710    composeBackboneElement(t, "suspectEntity", name, element, index);
2711    if (element.hasInstance()) {
2712      composeType(t, "AdverseEventSuspectEntityComponent", "instance", element.getInstance(), -1);
2713    }
2714    if (element.hasCausality()) {
2715      composeAdverseEventSuspectEntityCausalityComponent(t, "AdverseEventSuspectEntityComponent", "causality", element.getCausality(), -1);
2716    }
2717  }
2718
2719  protected void composeAdverseEventSuspectEntityCausalityComponent(Complex parent, String parentType, String name, AdverseEvent.AdverseEventSuspectEntityCausalityComponent element, int index) {
2720    if (element == null) 
2721      return;
2722    Complex t;
2723    if (Utilities.noString(parentType))
2724      t = parent;
2725    else {
2726      t = parent.predicate("fhir:"+name,index > -1);
2727    }
2728    composeBackboneElement(t, "causality", name, element, index);
2729    if (element.hasAssessmentMethod()) {
2730      composeCodeableConcept(t, "AdverseEventSuspectEntityCausalityComponent", "assessmentMethod", element.getAssessmentMethod(), -1);
2731    }
2732    if (element.hasEntityRelatedness()) {
2733      composeCodeableConcept(t, "AdverseEventSuspectEntityCausalityComponent", "entityRelatedness", element.getEntityRelatedness(), -1);
2734    }
2735    if (element.hasAuthor()) {
2736      composeReference(t, "AdverseEventSuspectEntityCausalityComponent", "author", element.getAuthor(), -1);
2737    }
2738  }
2739
2740  protected void composeAdverseEventContributingFactorComponent(Complex parent, String parentType, String name, AdverseEvent.AdverseEventContributingFactorComponent element, int index) {
2741    if (element == null) 
2742      return;
2743    Complex t;
2744    if (Utilities.noString(parentType))
2745      t = parent;
2746    else {
2747      t = parent.predicate("fhir:"+name,index > -1);
2748    }
2749    composeBackboneElement(t, "contributingFactor", name, element, index);
2750    if (element.hasItem()) {
2751      composeType(t, "AdverseEventContributingFactorComponent", "item", element.getItem(), -1);
2752    }
2753  }
2754
2755  protected void composeAdverseEventPreventiveActionComponent(Complex parent, String parentType, String name, AdverseEvent.AdverseEventPreventiveActionComponent element, int index) {
2756    if (element == null) 
2757      return;
2758    Complex t;
2759    if (Utilities.noString(parentType))
2760      t = parent;
2761    else {
2762      t = parent.predicate("fhir:"+name,index > -1);
2763    }
2764    composeBackboneElement(t, "preventiveAction", name, element, index);
2765    if (element.hasItem()) {
2766      composeType(t, "AdverseEventPreventiveActionComponent", "item", element.getItem(), -1);
2767    }
2768  }
2769
2770  protected void composeAdverseEventMitigatingActionComponent(Complex parent, String parentType, String name, AdverseEvent.AdverseEventMitigatingActionComponent element, int index) {
2771    if (element == null) 
2772      return;
2773    Complex t;
2774    if (Utilities.noString(parentType))
2775      t = parent;
2776    else {
2777      t = parent.predicate("fhir:"+name,index > -1);
2778    }
2779    composeBackboneElement(t, "mitigatingAction", name, element, index);
2780    if (element.hasItem()) {
2781      composeType(t, "AdverseEventMitigatingActionComponent", "item", element.getItem(), -1);
2782    }
2783  }
2784
2785  protected void composeAdverseEventSupportingInfoComponent(Complex parent, String parentType, String name, AdverseEvent.AdverseEventSupportingInfoComponent element, int index) {
2786    if (element == null) 
2787      return;
2788    Complex t;
2789    if (Utilities.noString(parentType))
2790      t = parent;
2791    else {
2792      t = parent.predicate("fhir:"+name,index > -1);
2793    }
2794    composeBackboneElement(t, "supportingInfo", name, element, index);
2795    if (element.hasItem()) {
2796      composeType(t, "AdverseEventSupportingInfoComponent", "item", element.getItem(), -1);
2797    }
2798  }
2799
2800  protected void composeAllergyIntolerance(Complex parent, String parentType, String name, AllergyIntolerance element, int index) {
2801    if (element == null) 
2802      return;
2803    Complex t;
2804    if (Utilities.noString(parentType))
2805      t = parent;
2806    else {
2807      t = parent.predicate("fhir:"+name,index > -1);
2808    }
2809    composeDomainResource(t, "AllergyIntolerance", name, element, index);
2810    for (int i = 0; i < element.getIdentifier().size(); i++) {
2811      composeIdentifier(t, "AllergyIntolerance", "identifier", element.getIdentifier().get(i), i);
2812    }
2813    if (element.hasClinicalStatus()) {
2814      composeCodeableConcept(t, "AllergyIntolerance", "clinicalStatus", element.getClinicalStatus(), -1);
2815    }
2816    if (element.hasVerificationStatus()) {
2817      composeCodeableConcept(t, "AllergyIntolerance", "verificationStatus", element.getVerificationStatus(), -1);
2818    }
2819    if (element.hasType()) {
2820      composeCodeableConcept(t, "AllergyIntolerance", "type", element.getType(), -1);
2821    }
2822    for (int i = 0; i < element.getCategory().size(); i++) {
2823      composeEnum(t, "AllergyIntolerance", "category", element.getCategory().get(i), i);
2824    }
2825    if (element.hasCriticalityElement()) {
2826      composeEnum(t, "AllergyIntolerance", "criticality", element.getCriticalityElement(), -1);
2827    }
2828    if (element.hasCode()) {
2829      composeCodeableConcept(t, "AllergyIntolerance", "code", element.getCode(), -1);
2830    }
2831    if (element.hasPatient()) {
2832      composeReference(t, "AllergyIntolerance", "patient", element.getPatient(), -1);
2833    }
2834    if (element.hasEncounter()) {
2835      composeReference(t, "AllergyIntolerance", "encounter", element.getEncounter(), -1);
2836    }
2837    if (element.hasOnset()) {
2838      composeType(t, "AllergyIntolerance", "onset", element.getOnset(), -1);
2839    }
2840    if (element.hasRecordedDateElement()) {
2841      composeDateTime(t, "AllergyIntolerance", "recordedDate", element.getRecordedDateElement(), -1);
2842    }
2843    for (int i = 0; i < element.getParticipant().size(); i++) {
2844      composeAllergyIntoleranceParticipantComponent(t, "AllergyIntolerance", "participant", element.getParticipant().get(i), i);
2845    }
2846    if (element.hasLastOccurrenceElement()) {
2847      composeDateTime(t, "AllergyIntolerance", "lastOccurrence", element.getLastOccurrenceElement(), -1);
2848    }
2849    for (int i = 0; i < element.getNote().size(); i++) {
2850      composeAnnotation(t, "AllergyIntolerance", "note", element.getNote().get(i), i);
2851    }
2852    for (int i = 0; i < element.getReaction().size(); i++) {
2853      composeAllergyIntoleranceReactionComponent(t, "AllergyIntolerance", "reaction", element.getReaction().get(i), i);
2854    }
2855  }
2856
2857  protected void composeAllergyIntoleranceParticipantComponent(Complex parent, String parentType, String name, AllergyIntolerance.AllergyIntoleranceParticipantComponent element, int index) {
2858    if (element == null) 
2859      return;
2860    Complex t;
2861    if (Utilities.noString(parentType))
2862      t = parent;
2863    else {
2864      t = parent.predicate("fhir:"+name,index > -1);
2865    }
2866    composeBackboneElement(t, "participant", name, element, index);
2867    if (element.hasFunction()) {
2868      composeCodeableConcept(t, "AllergyIntoleranceParticipantComponent", "function", element.getFunction(), -1);
2869    }
2870    if (element.hasActor()) {
2871      composeReference(t, "AllergyIntoleranceParticipantComponent", "actor", element.getActor(), -1);
2872    }
2873  }
2874
2875  protected void composeAllergyIntoleranceReactionComponent(Complex parent, String parentType, String name, AllergyIntolerance.AllergyIntoleranceReactionComponent element, int index) {
2876    if (element == null) 
2877      return;
2878    Complex t;
2879    if (Utilities.noString(parentType))
2880      t = parent;
2881    else {
2882      t = parent.predicate("fhir:"+name,index > -1);
2883    }
2884    composeBackboneElement(t, "reaction", name, element, index);
2885    if (element.hasSubstance()) {
2886      composeCodeableConcept(t, "AllergyIntoleranceReactionComponent", "substance", element.getSubstance(), -1);
2887    }
2888    for (int i = 0; i < element.getManifestation().size(); i++) {
2889      composeCodeableReference(t, "AllergyIntoleranceReactionComponent", "manifestation", element.getManifestation().get(i), i);
2890    }
2891    if (element.hasDescriptionElement()) {
2892      composeString(t, "AllergyIntoleranceReactionComponent", "description", element.getDescriptionElement(), -1);
2893    }
2894    if (element.hasOnsetElement()) {
2895      composeDateTime(t, "AllergyIntoleranceReactionComponent", "onset", element.getOnsetElement(), -1);
2896    }
2897    if (element.hasSeverityElement()) {
2898      composeEnum(t, "AllergyIntoleranceReactionComponent", "severity", element.getSeverityElement(), -1);
2899    }
2900    if (element.hasExposureRoute()) {
2901      composeCodeableConcept(t, "AllergyIntoleranceReactionComponent", "exposureRoute", element.getExposureRoute(), -1);
2902    }
2903    for (int i = 0; i < element.getNote().size(); i++) {
2904      composeAnnotation(t, "AllergyIntoleranceReactionComponent", "note", element.getNote().get(i), i);
2905    }
2906  }
2907
2908  protected void composeAppointment(Complex parent, String parentType, String name, Appointment element, int index) {
2909    if (element == null) 
2910      return;
2911    Complex t;
2912    if (Utilities.noString(parentType))
2913      t = parent;
2914    else {
2915      t = parent.predicate("fhir:"+name,index > -1);
2916    }
2917    composeDomainResource(t, "Appointment", name, element, index);
2918    for (int i = 0; i < element.getIdentifier().size(); i++) {
2919      composeIdentifier(t, "Appointment", "identifier", element.getIdentifier().get(i), i);
2920    }
2921    if (element.hasStatusElement()) {
2922      composeEnum(t, "Appointment", "status", element.getStatusElement(), -1);
2923    }
2924    if (element.hasCancellationReason()) {
2925      composeCodeableConcept(t, "Appointment", "cancellationReason", element.getCancellationReason(), -1);
2926    }
2927    for (int i = 0; i < element.getClass_().size(); i++) {
2928      composeCodeableConcept(t, "Appointment", "class", element.getClass_().get(i), i);
2929    }
2930    for (int i = 0; i < element.getServiceCategory().size(); i++) {
2931      composeCodeableConcept(t, "Appointment", "serviceCategory", element.getServiceCategory().get(i), i);
2932    }
2933    for (int i = 0; i < element.getServiceType().size(); i++) {
2934      composeCodeableReference(t, "Appointment", "serviceType", element.getServiceType().get(i), i);
2935    }
2936    for (int i = 0; i < element.getSpecialty().size(); i++) {
2937      composeCodeableConcept(t, "Appointment", "specialty", element.getSpecialty().get(i), i);
2938    }
2939    if (element.hasAppointmentType()) {
2940      composeCodeableConcept(t, "Appointment", "appointmentType", element.getAppointmentType(), -1);
2941    }
2942    for (int i = 0; i < element.getReason().size(); i++) {
2943      composeCodeableReference(t, "Appointment", "reason", element.getReason().get(i), i);
2944    }
2945    if (element.hasPriority()) {
2946      composeCodeableConcept(t, "Appointment", "priority", element.getPriority(), -1);
2947    }
2948    if (element.hasDescriptionElement()) {
2949      composeString(t, "Appointment", "description", element.getDescriptionElement(), -1);
2950    }
2951    for (int i = 0; i < element.getReplaces().size(); i++) {
2952      composeReference(t, "Appointment", "replaces", element.getReplaces().get(i), i);
2953    }
2954    for (int i = 0; i < element.getVirtualService().size(); i++) {
2955      composeVirtualServiceDetail(t, "Appointment", "virtualService", element.getVirtualService().get(i), i);
2956    }
2957    for (int i = 0; i < element.getSupportingInformation().size(); i++) {
2958      composeReference(t, "Appointment", "supportingInformation", element.getSupportingInformation().get(i), i);
2959    }
2960    if (element.hasPreviousAppointment()) {
2961      composeReference(t, "Appointment", "previousAppointment", element.getPreviousAppointment(), -1);
2962    }
2963    if (element.hasOriginatingAppointment()) {
2964      composeReference(t, "Appointment", "originatingAppointment", element.getOriginatingAppointment(), -1);
2965    }
2966    if (element.hasStartElement()) {
2967      composeInstant(t, "Appointment", "start", element.getStartElement(), -1);
2968    }
2969    if (element.hasEndElement()) {
2970      composeInstant(t, "Appointment", "end", element.getEndElement(), -1);
2971    }
2972    if (element.hasMinutesDurationElement()) {
2973      composePositiveInt(t, "Appointment", "minutesDuration", element.getMinutesDurationElement(), -1);
2974    }
2975    for (int i = 0; i < element.getRequestedPeriod().size(); i++) {
2976      composePeriod(t, "Appointment", "requestedPeriod", element.getRequestedPeriod().get(i), i);
2977    }
2978    for (int i = 0; i < element.getSlot().size(); i++) {
2979      composeReference(t, "Appointment", "slot", element.getSlot().get(i), i);
2980    }
2981    for (int i = 0; i < element.getAccount().size(); i++) {
2982      composeReference(t, "Appointment", "account", element.getAccount().get(i), i);
2983    }
2984    if (element.hasCreatedElement()) {
2985      composeDateTime(t, "Appointment", "created", element.getCreatedElement(), -1);
2986    }
2987    if (element.hasCancellationDateElement()) {
2988      composeDateTime(t, "Appointment", "cancellationDate", element.getCancellationDateElement(), -1);
2989    }
2990    for (int i = 0; i < element.getNote().size(); i++) {
2991      composeAnnotation(t, "Appointment", "note", element.getNote().get(i), i);
2992    }
2993    for (int i = 0; i < element.getPatientInstruction().size(); i++) {
2994      composeCodeableReference(t, "Appointment", "patientInstruction", element.getPatientInstruction().get(i), i);
2995    }
2996    for (int i = 0; i < element.getBasedOn().size(); i++) {
2997      composeReference(t, "Appointment", "basedOn", element.getBasedOn().get(i), i);
2998    }
2999    if (element.hasSubject()) {
3000      composeReference(t, "Appointment", "subject", element.getSubject(), -1);
3001    }
3002    for (int i = 0; i < element.getParticipant().size(); i++) {
3003      composeAppointmentParticipantComponent(t, "Appointment", "participant", element.getParticipant().get(i), i);
3004    }
3005    if (element.hasRecurrenceIdElement()) {
3006      composePositiveInt(t, "Appointment", "recurrenceId", element.getRecurrenceIdElement(), -1);
3007    }
3008    if (element.hasOccurrenceChangedElement()) {
3009      composeBoolean(t, "Appointment", "occurrenceChanged", element.getOccurrenceChangedElement(), -1);
3010    }
3011    for (int i = 0; i < element.getRecurrenceTemplate().size(); i++) {
3012      composeAppointmentRecurrenceTemplateComponent(t, "Appointment", "recurrenceTemplate", element.getRecurrenceTemplate().get(i), i);
3013    }
3014  }
3015
3016  protected void composeAppointmentParticipantComponent(Complex parent, String parentType, String name, Appointment.AppointmentParticipantComponent 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:"+name,index > -1);
3024    }
3025    composeBackboneElement(t, "participant", name, element, index);
3026    for (int i = 0; i < element.getType().size(); i++) {
3027      composeCodeableConcept(t, "AppointmentParticipantComponent", "type", element.getType().get(i), i);
3028    }
3029    if (element.hasPeriod()) {
3030      composePeriod(t, "AppointmentParticipantComponent", "period", element.getPeriod(), -1);
3031    }
3032    if (element.hasActor()) {
3033      composeReference(t, "AppointmentParticipantComponent", "actor", element.getActor(), -1);
3034    }
3035    if (element.hasRequiredElement()) {
3036      composeBoolean(t, "AppointmentParticipantComponent", "required", element.getRequiredElement(), -1);
3037    }
3038    if (element.hasStatusElement()) {
3039      composeEnum(t, "AppointmentParticipantComponent", "status", element.getStatusElement(), -1);
3040    }
3041  }
3042
3043  protected void composeAppointmentRecurrenceTemplateComponent(Complex parent, String parentType, String name, Appointment.AppointmentRecurrenceTemplateComponent element, int index) {
3044    if (element == null) 
3045      return;
3046    Complex t;
3047    if (Utilities.noString(parentType))
3048      t = parent;
3049    else {
3050      t = parent.predicate("fhir:"+name,index > -1);
3051    }
3052    composeBackboneElement(t, "recurrenceTemplate", name, element, index);
3053    if (element.hasTimezone()) {
3054      composeCodeableConcept(t, "AppointmentRecurrenceTemplateComponent", "timezone", element.getTimezone(), -1);
3055    }
3056    if (element.hasRecurrenceType()) {
3057      composeCodeableConcept(t, "AppointmentRecurrenceTemplateComponent", "recurrenceType", element.getRecurrenceType(), -1);
3058    }
3059    if (element.hasLastOccurrenceDateElement()) {
3060      composeDate(t, "AppointmentRecurrenceTemplateComponent", "lastOccurrenceDate", element.getLastOccurrenceDateElement(), -1);
3061    }
3062    if (element.hasOccurrenceCountElement()) {
3063      composePositiveInt(t, "AppointmentRecurrenceTemplateComponent", "occurrenceCount", element.getOccurrenceCountElement(), -1);
3064    }
3065    for (int i = 0; i < element.getOccurrenceDate().size(); i++) {
3066      composeDate(t, "AppointmentRecurrenceTemplateComponent", "occurrenceDate", element.getOccurrenceDate().get(i), i);
3067    }
3068    if (element.hasWeeklyTemplate()) {
3069      composeAppointmentRecurrenceTemplateWeeklyTemplateComponent(t, "AppointmentRecurrenceTemplateComponent", "weeklyTemplate", element.getWeeklyTemplate(), -1);
3070    }
3071    if (element.hasMonthlyTemplate()) {
3072      composeAppointmentRecurrenceTemplateMonthlyTemplateComponent(t, "AppointmentRecurrenceTemplateComponent", "monthlyTemplate", element.getMonthlyTemplate(), -1);
3073    }
3074    if (element.hasYearlyTemplate()) {
3075      composeAppointmentRecurrenceTemplateYearlyTemplateComponent(t, "AppointmentRecurrenceTemplateComponent", "yearlyTemplate", element.getYearlyTemplate(), -1);
3076    }
3077    for (int i = 0; i < element.getExcludingDate().size(); i++) {
3078      composeDate(t, "AppointmentRecurrenceTemplateComponent", "excludingDate", element.getExcludingDate().get(i), i);
3079    }
3080    for (int i = 0; i < element.getExcludingRecurrenceId().size(); i++) {
3081      composePositiveInt(t, "AppointmentRecurrenceTemplateComponent", "excludingRecurrenceId", element.getExcludingRecurrenceId().get(i), i);
3082    }
3083  }
3084
3085  protected void composeAppointmentRecurrenceTemplateWeeklyTemplateComponent(Complex parent, String parentType, String name, Appointment.AppointmentRecurrenceTemplateWeeklyTemplateComponent element, int index) {
3086    if (element == null) 
3087      return;
3088    Complex t;
3089    if (Utilities.noString(parentType))
3090      t = parent;
3091    else {
3092      t = parent.predicate("fhir:"+name,index > -1);
3093    }
3094    composeBackboneElement(t, "weeklyTemplate", name, element, index);
3095    if (element.hasMondayElement()) {
3096      composeBoolean(t, "AppointmentRecurrenceTemplateWeeklyTemplateComponent", "monday", element.getMondayElement(), -1);
3097    }
3098    if (element.hasTuesdayElement()) {
3099      composeBoolean(t, "AppointmentRecurrenceTemplateWeeklyTemplateComponent", "tuesday", element.getTuesdayElement(), -1);
3100    }
3101    if (element.hasWednesdayElement()) {
3102      composeBoolean(t, "AppointmentRecurrenceTemplateWeeklyTemplateComponent", "wednesday", element.getWednesdayElement(), -1);
3103    }
3104    if (element.hasThursdayElement()) {
3105      composeBoolean(t, "AppointmentRecurrenceTemplateWeeklyTemplateComponent", "thursday", element.getThursdayElement(), -1);
3106    }
3107    if (element.hasFridayElement()) {
3108      composeBoolean(t, "AppointmentRecurrenceTemplateWeeklyTemplateComponent", "friday", element.getFridayElement(), -1);
3109    }
3110    if (element.hasSaturdayElement()) {
3111      composeBoolean(t, "AppointmentRecurrenceTemplateWeeklyTemplateComponent", "saturday", element.getSaturdayElement(), -1);
3112    }
3113    if (element.hasSundayElement()) {
3114      composeBoolean(t, "AppointmentRecurrenceTemplateWeeklyTemplateComponent", "sunday", element.getSundayElement(), -1);
3115    }
3116    if (element.hasWeekIntervalElement()) {
3117      composePositiveInt(t, "AppointmentRecurrenceTemplateWeeklyTemplateComponent", "weekInterval", element.getWeekIntervalElement(), -1);
3118    }
3119  }
3120
3121  protected void composeAppointmentRecurrenceTemplateMonthlyTemplateComponent(Complex parent, String parentType, String name, Appointment.AppointmentRecurrenceTemplateMonthlyTemplateComponent element, int index) {
3122    if (element == null) 
3123      return;
3124    Complex t;
3125    if (Utilities.noString(parentType))
3126      t = parent;
3127    else {
3128      t = parent.predicate("fhir:"+name,index > -1);
3129    }
3130    composeBackboneElement(t, "monthlyTemplate", name, element, index);
3131    if (element.hasDayOfMonthElement()) {
3132      composePositiveInt(t, "AppointmentRecurrenceTemplateMonthlyTemplateComponent", "dayOfMonth", element.getDayOfMonthElement(), -1);
3133    }
3134    if (element.hasNthWeekOfMonth()) {
3135      composeCoding(t, "AppointmentRecurrenceTemplateMonthlyTemplateComponent", "nthWeekOfMonth", element.getNthWeekOfMonth(), -1);
3136    }
3137    if (element.hasDayOfWeek()) {
3138      composeCoding(t, "AppointmentRecurrenceTemplateMonthlyTemplateComponent", "dayOfWeek", element.getDayOfWeek(), -1);
3139    }
3140    if (element.hasMonthIntervalElement()) {
3141      composePositiveInt(t, "AppointmentRecurrenceTemplateMonthlyTemplateComponent", "monthInterval", element.getMonthIntervalElement(), -1);
3142    }
3143  }
3144
3145  protected void composeAppointmentRecurrenceTemplateYearlyTemplateComponent(Complex parent, String parentType, String name, Appointment.AppointmentRecurrenceTemplateYearlyTemplateComponent element, int index) {
3146    if (element == null) 
3147      return;
3148    Complex t;
3149    if (Utilities.noString(parentType))
3150      t = parent;
3151    else {
3152      t = parent.predicate("fhir:"+name,index > -1);
3153    }
3154    composeBackboneElement(t, "yearlyTemplate", name, element, index);
3155    if (element.hasYearIntervalElement()) {
3156      composePositiveInt(t, "AppointmentRecurrenceTemplateYearlyTemplateComponent", "yearInterval", element.getYearIntervalElement(), -1);
3157    }
3158  }
3159
3160  protected void composeAppointmentResponse(Complex parent, String parentType, String name, AppointmentResponse element, int index) {
3161    if (element == null) 
3162      return;
3163    Complex t;
3164    if (Utilities.noString(parentType))
3165      t = parent;
3166    else {
3167      t = parent.predicate("fhir:"+name,index > -1);
3168    }
3169    composeDomainResource(t, "AppointmentResponse", name, element, index);
3170    for (int i = 0; i < element.getIdentifier().size(); i++) {
3171      composeIdentifier(t, "AppointmentResponse", "identifier", element.getIdentifier().get(i), i);
3172    }
3173    if (element.hasAppointment()) {
3174      composeReference(t, "AppointmentResponse", "appointment", element.getAppointment(), -1);
3175    }
3176    if (element.hasProposedNewTimeElement()) {
3177      composeBoolean(t, "AppointmentResponse", "proposedNewTime", element.getProposedNewTimeElement(), -1);
3178    }
3179    if (element.hasStartElement()) {
3180      composeInstant(t, "AppointmentResponse", "start", element.getStartElement(), -1);
3181    }
3182    if (element.hasEndElement()) {
3183      composeInstant(t, "AppointmentResponse", "end", element.getEndElement(), -1);
3184    }
3185    for (int i = 0; i < element.getParticipantType().size(); i++) {
3186      composeCodeableConcept(t, "AppointmentResponse", "participantType", element.getParticipantType().get(i), i);
3187    }
3188    if (element.hasActor()) {
3189      composeReference(t, "AppointmentResponse", "actor", element.getActor(), -1);
3190    }
3191    if (element.hasParticipantStatusElement()) {
3192      composeEnum(t, "AppointmentResponse", "participantStatus", element.getParticipantStatusElement(), -1);
3193    }
3194    if (element.hasCommentElement()) {
3195      composeMarkdown(t, "AppointmentResponse", "comment", element.getCommentElement(), -1);
3196    }
3197    if (element.hasRecurringElement()) {
3198      composeBoolean(t, "AppointmentResponse", "recurring", element.getRecurringElement(), -1);
3199    }
3200    if (element.hasOccurrenceDateElement()) {
3201      composeDate(t, "AppointmentResponse", "occurrenceDate", element.getOccurrenceDateElement(), -1);
3202    }
3203    if (element.hasRecurrenceIdElement()) {
3204      composePositiveInt(t, "AppointmentResponse", "recurrenceId", element.getRecurrenceIdElement(), -1);
3205    }
3206  }
3207
3208  protected void composeArtifactAssessment(Complex parent, String parentType, String name, ArtifactAssessment element, int index) {
3209    if (element == null) 
3210      return;
3211    Complex t;
3212    if (Utilities.noString(parentType))
3213      t = parent;
3214    else {
3215      t = parent.predicate("fhir:"+name,index > -1);
3216    }
3217    composeDomainResource(t, "ArtifactAssessment", name, element, index);
3218    for (int i = 0; i < element.getIdentifier().size(); i++) {
3219      composeIdentifier(t, "ArtifactAssessment", "identifier", element.getIdentifier().get(i), i);
3220    }
3221    if (element.hasTitleElement()) {
3222      composeString(t, "ArtifactAssessment", "title", element.getTitleElement(), -1);
3223    }
3224    if (element.hasCiteAs()) {
3225      composeType(t, "ArtifactAssessment", "citeAs", element.getCiteAs(), -1);
3226    }
3227    if (element.hasDateElement()) {
3228      composeDateTime(t, "ArtifactAssessment", "date", element.getDateElement(), -1);
3229    }
3230    if (element.hasCopyrightElement()) {
3231      composeMarkdown(t, "ArtifactAssessment", "copyright", element.getCopyrightElement(), -1);
3232    }
3233    if (element.hasApprovalDateElement()) {
3234      composeDate(t, "ArtifactAssessment", "approvalDate", element.getApprovalDateElement(), -1);
3235    }
3236    if (element.hasLastReviewDateElement()) {
3237      composeDate(t, "ArtifactAssessment", "lastReviewDate", element.getLastReviewDateElement(), -1);
3238    }
3239    if (element.hasArtifact()) {
3240      composeType(t, "ArtifactAssessment", "artifact", element.getArtifact(), -1);
3241    }
3242    for (int i = 0; i < element.getContent().size(); i++) {
3243      composeArtifactAssessmentContentComponent(t, "ArtifactAssessment", "content", element.getContent().get(i), i);
3244    }
3245    if (element.hasWorkflowStatusElement()) {
3246      composeEnum(t, "ArtifactAssessment", "workflowStatus", element.getWorkflowStatusElement(), -1);
3247    }
3248    if (element.hasDispositionElement()) {
3249      composeEnum(t, "ArtifactAssessment", "disposition", element.getDispositionElement(), -1);
3250    }
3251  }
3252
3253  protected void composeArtifactAssessmentContentComponent(Complex parent, String parentType, String name, ArtifactAssessment.ArtifactAssessmentContentComponent element, int index) {
3254    if (element == null) 
3255      return;
3256    Complex t;
3257    if (Utilities.noString(parentType))
3258      t = parent;
3259    else {
3260      t = parent.predicate("fhir:"+name,index > -1);
3261    }
3262    composeBackboneElement(t, "content", name, element, index);
3263    if (element.hasInformationTypeElement()) {
3264      composeEnum(t, "ArtifactAssessmentContentComponent", "informationType", element.getInformationTypeElement(), -1);
3265    }
3266    if (element.hasSummaryElement()) {
3267      composeMarkdown(t, "ArtifactAssessmentContentComponent", "summary", element.getSummaryElement(), -1);
3268    }
3269    if (element.hasType()) {
3270      composeCodeableConcept(t, "ArtifactAssessmentContentComponent", "type", element.getType(), -1);
3271    }
3272    for (int i = 0; i < element.getClassifier().size(); i++) {
3273      composeCodeableConcept(t, "ArtifactAssessmentContentComponent", "classifier", element.getClassifier().get(i), i);
3274    }
3275    if (element.hasQuantity()) {
3276      composeQuantity(t, "ArtifactAssessmentContentComponent", "quantity", element.getQuantity(), -1);
3277    }
3278    if (element.hasAuthor()) {
3279      composeReference(t, "ArtifactAssessmentContentComponent", "author", element.getAuthor(), -1);
3280    }
3281    for (int i = 0; i < element.getPath().size(); i++) {
3282      composeUri(t, "ArtifactAssessmentContentComponent", "path", element.getPath().get(i), i);
3283    }
3284    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
3285      composeRelatedArtifact(t, "ArtifactAssessmentContentComponent", "relatedArtifact", element.getRelatedArtifact().get(i), i);
3286    }
3287    if (element.hasFreeToShareElement()) {
3288      composeBoolean(t, "ArtifactAssessmentContentComponent", "freeToShare", element.getFreeToShareElement(), -1);
3289    }
3290    for (int i = 0; i < element.getComponent().size(); i++) {
3291      composeArtifactAssessmentContentComponent(t, "ArtifactAssessmentContentComponent", "component", element.getComponent().get(i), i);
3292    }
3293  }
3294
3295  protected void composeAuditEvent(Complex parent, String parentType, String name, AuditEvent element, int index) {
3296    if (element == null) 
3297      return;
3298    Complex t;
3299    if (Utilities.noString(parentType))
3300      t = parent;
3301    else {
3302      t = parent.predicate("fhir:"+name,index > -1);
3303    }
3304    composeDomainResource(t, "AuditEvent", name, element, index);
3305    for (int i = 0; i < element.getCategory().size(); i++) {
3306      composeCodeableConcept(t, "AuditEvent", "category", element.getCategory().get(i), i);
3307    }
3308    if (element.hasCode()) {
3309      composeCodeableConcept(t, "AuditEvent", "code", element.getCode(), -1);
3310    }
3311    if (element.hasActionElement()) {
3312      composeEnum(t, "AuditEvent", "action", element.getActionElement(), -1);
3313    }
3314    if (element.hasSeverityElement()) {
3315      composeEnum(t, "AuditEvent", "severity", element.getSeverityElement(), -1);
3316    }
3317    if (element.hasOccurred()) {
3318      composeType(t, "AuditEvent", "occurred", element.getOccurred(), -1);
3319    }
3320    if (element.hasRecordedElement()) {
3321      composeInstant(t, "AuditEvent", "recorded", element.getRecordedElement(), -1);
3322    }
3323    if (element.hasOutcome()) {
3324      composeAuditEventOutcomeComponent(t, "AuditEvent", "outcome", element.getOutcome(), -1);
3325    }
3326    for (int i = 0; i < element.getAuthorization().size(); i++) {
3327      composeCodeableConcept(t, "AuditEvent", "authorization", element.getAuthorization().get(i), i);
3328    }
3329    for (int i = 0; i < element.getBasedOn().size(); i++) {
3330      composeReference(t, "AuditEvent", "basedOn", element.getBasedOn().get(i), i);
3331    }
3332    if (element.hasPatient()) {
3333      composeReference(t, "AuditEvent", "patient", element.getPatient(), -1);
3334    }
3335    if (element.hasEncounter()) {
3336      composeReference(t, "AuditEvent", "encounter", element.getEncounter(), -1);
3337    }
3338    for (int i = 0; i < element.getAgent().size(); i++) {
3339      composeAuditEventAgentComponent(t, "AuditEvent", "agent", element.getAgent().get(i), i);
3340    }
3341    if (element.hasSource()) {
3342      composeAuditEventSourceComponent(t, "AuditEvent", "source", element.getSource(), -1);
3343    }
3344    for (int i = 0; i < element.getEntity().size(); i++) {
3345      composeAuditEventEntityComponent(t, "AuditEvent", "entity", element.getEntity().get(i), i);
3346    }
3347  }
3348
3349  protected void composeAuditEventOutcomeComponent(Complex parent, String parentType, String name, AuditEvent.AuditEventOutcomeComponent element, int index) {
3350    if (element == null) 
3351      return;
3352    Complex t;
3353    if (Utilities.noString(parentType))
3354      t = parent;
3355    else {
3356      t = parent.predicate("fhir:"+name,index > -1);
3357    }
3358    composeBackboneElement(t, "outcome", name, element, index);
3359    if (element.hasCode()) {
3360      composeCoding(t, "AuditEventOutcomeComponent", "code", element.getCode(), -1);
3361    }
3362    for (int i = 0; i < element.getDetail().size(); i++) {
3363      composeCodeableConcept(t, "AuditEventOutcomeComponent", "detail", element.getDetail().get(i), i);
3364    }
3365  }
3366
3367  protected void composeAuditEventAgentComponent(Complex parent, String parentType, String name, AuditEvent.AuditEventAgentComponent element, int index) {
3368    if (element == null) 
3369      return;
3370    Complex t;
3371    if (Utilities.noString(parentType))
3372      t = parent;
3373    else {
3374      t = parent.predicate("fhir:"+name,index > -1);
3375    }
3376    composeBackboneElement(t, "agent", name, element, index);
3377    if (element.hasType()) {
3378      composeCodeableConcept(t, "AuditEventAgentComponent", "type", element.getType(), -1);
3379    }
3380    for (int i = 0; i < element.getRole().size(); i++) {
3381      composeCodeableConcept(t, "AuditEventAgentComponent", "role", element.getRole().get(i), i);
3382    }
3383    if (element.hasWho()) {
3384      composeReference(t, "AuditEventAgentComponent", "who", element.getWho(), -1);
3385    }
3386    if (element.hasRequestorElement()) {
3387      composeBoolean(t, "AuditEventAgentComponent", "requestor", element.getRequestorElement(), -1);
3388    }
3389    if (element.hasLocation()) {
3390      composeReference(t, "AuditEventAgentComponent", "location", element.getLocation(), -1);
3391    }
3392    for (int i = 0; i < element.getPolicy().size(); i++) {
3393      composeUri(t, "AuditEventAgentComponent", "policy", element.getPolicy().get(i), i);
3394    }
3395    if (element.hasNetwork()) {
3396      composeType(t, "AuditEventAgentComponent", "network", element.getNetwork(), -1);
3397    }
3398    for (int i = 0; i < element.getAuthorization().size(); i++) {
3399      composeCodeableConcept(t, "AuditEventAgentComponent", "authorization", element.getAuthorization().get(i), i);
3400    }
3401  }
3402
3403  protected void composeAuditEventSourceComponent(Complex parent, String parentType, String name, AuditEvent.AuditEventSourceComponent element, int index) {
3404    if (element == null) 
3405      return;
3406    Complex t;
3407    if (Utilities.noString(parentType))
3408      t = parent;
3409    else {
3410      t = parent.predicate("fhir:"+name,index > -1);
3411    }
3412    composeBackboneElement(t, "source", name, element, index);
3413    if (element.hasSite()) {
3414      composeReference(t, "AuditEventSourceComponent", "site", element.getSite(), -1);
3415    }
3416    if (element.hasObserver()) {
3417      composeReference(t, "AuditEventSourceComponent", "observer", element.getObserver(), -1);
3418    }
3419    for (int i = 0; i < element.getType().size(); i++) {
3420      composeCodeableConcept(t, "AuditEventSourceComponent", "type", element.getType().get(i), i);
3421    }
3422  }
3423
3424  protected void composeAuditEventEntityComponent(Complex parent, String parentType, String name, AuditEvent.AuditEventEntityComponent element, int index) {
3425    if (element == null) 
3426      return;
3427    Complex t;
3428    if (Utilities.noString(parentType))
3429      t = parent;
3430    else {
3431      t = parent.predicate("fhir:"+name,index > -1);
3432    }
3433    composeBackboneElement(t, "entity", name, element, index);
3434    if (element.hasWhat()) {
3435      composeReference(t, "AuditEventEntityComponent", "what", element.getWhat(), -1);
3436    }
3437    if (element.hasRole()) {
3438      composeCodeableConcept(t, "AuditEventEntityComponent", "role", element.getRole(), -1);
3439    }
3440    for (int i = 0; i < element.getSecurityLabel().size(); i++) {
3441      composeCodeableConcept(t, "AuditEventEntityComponent", "securityLabel", element.getSecurityLabel().get(i), i);
3442    }
3443    if (element.hasQueryElement()) {
3444      composeBase64Binary(t, "AuditEventEntityComponent", "query", element.getQueryElement(), -1);
3445    }
3446    for (int i = 0; i < element.getDetail().size(); i++) {
3447      composeAuditEventEntityDetailComponent(t, "AuditEventEntityComponent", "detail", element.getDetail().get(i), i);
3448    }
3449    for (int i = 0; i < element.getAgent().size(); i++) {
3450      composeAuditEventAgentComponent(t, "AuditEventEntityComponent", "agent", element.getAgent().get(i), i);
3451    }
3452  }
3453
3454  protected void composeAuditEventEntityDetailComponent(Complex parent, String parentType, String name, AuditEvent.AuditEventEntityDetailComponent element, int index) {
3455    if (element == null) 
3456      return;
3457    Complex t;
3458    if (Utilities.noString(parentType))
3459      t = parent;
3460    else {
3461      t = parent.predicate("fhir:"+name,index > -1);
3462    }
3463    composeBackboneElement(t, "detail", name, element, index);
3464    if (element.hasType()) {
3465      composeCodeableConcept(t, "AuditEventEntityDetailComponent", "type", element.getType(), -1);
3466    }
3467    if (element.hasValue()) {
3468      composeType(t, "AuditEventEntityDetailComponent", "value", element.getValue(), -1);
3469    }
3470  }
3471
3472  protected void composeBasic(Complex parent, String parentType, String name, Basic element, int index) {
3473    if (element == null) 
3474      return;
3475    Complex t;
3476    if (Utilities.noString(parentType))
3477      t = parent;
3478    else {
3479      t = parent.predicate("fhir:"+name,index > -1);
3480    }
3481    composeDomainResource(t, "Basic", name, element, index);
3482    for (int i = 0; i < element.getIdentifier().size(); i++) {
3483      composeIdentifier(t, "Basic", "identifier", element.getIdentifier().get(i), i);
3484    }
3485    if (element.hasCode()) {
3486      composeCodeableConcept(t, "Basic", "code", element.getCode(), -1);
3487    }
3488    if (element.hasSubject()) {
3489      composeReference(t, "Basic", "subject", element.getSubject(), -1);
3490    }
3491    if (element.hasCreatedElement()) {
3492      composeDateTime(t, "Basic", "created", element.getCreatedElement(), -1);
3493    }
3494    if (element.hasAuthor()) {
3495      composeReference(t, "Basic", "author", element.getAuthor(), -1);
3496    }
3497  }
3498
3499  protected void composeBinary(Complex parent, String parentType, String name, Binary element, int index) {
3500    if (element == null) 
3501      return;
3502    Complex t;
3503    if (Utilities.noString(parentType))
3504      t = parent;
3505    else {
3506      t = parent.predicate("fhir:"+name,index > -1);
3507    }
3508    composeResource(t, "Binary", name, element, index);
3509    if (element.hasContentTypeElement()) {
3510      composeCode(t, "Binary", "contentType", element.getContentTypeElement(), -1);
3511    }
3512    if (element.hasSecurityContext()) {
3513      composeReference(t, "Binary", "securityContext", element.getSecurityContext(), -1);
3514    }
3515    if (element.hasDataElement()) {
3516      composeBase64Binary(t, "Binary", "data", element.getDataElement(), -1);
3517    }
3518  }
3519
3520  protected void composeBiologicallyDerivedProduct(Complex parent, String parentType, String name, BiologicallyDerivedProduct element, int index) {
3521    if (element == null) 
3522      return;
3523    Complex t;
3524    if (Utilities.noString(parentType))
3525      t = parent;
3526    else {
3527      t = parent.predicate("fhir:"+name,index > -1);
3528    }
3529    composeDomainResource(t, "BiologicallyDerivedProduct", name, element, index);
3530    if (element.hasProductCategory()) {
3531      composeCoding(t, "BiologicallyDerivedProduct", "productCategory", element.getProductCategory(), -1);
3532    }
3533    if (element.hasProductCode()) {
3534      composeCodeableConcept(t, "BiologicallyDerivedProduct", "productCode", element.getProductCode(), -1);
3535    }
3536    for (int i = 0; i < element.getParent().size(); i++) {
3537      composeReference(t, "BiologicallyDerivedProduct", "parent", element.getParent().get(i), i);
3538    }
3539    for (int i = 0; i < element.getRequest().size(); i++) {
3540      composeReference(t, "BiologicallyDerivedProduct", "request", element.getRequest().get(i), i);
3541    }
3542    for (int i = 0; i < element.getIdentifier().size(); i++) {
3543      composeIdentifier(t, "BiologicallyDerivedProduct", "identifier", element.getIdentifier().get(i), i);
3544    }
3545    if (element.hasBiologicalSourceEvent()) {
3546      composeIdentifier(t, "BiologicallyDerivedProduct", "biologicalSourceEvent", element.getBiologicalSourceEvent(), -1);
3547    }
3548    for (int i = 0; i < element.getProcessingFacility().size(); i++) {
3549      composeReference(t, "BiologicallyDerivedProduct", "processingFacility", element.getProcessingFacility().get(i), i);
3550    }
3551    if (element.hasDivisionElement()) {
3552      composeString(t, "BiologicallyDerivedProduct", "division", element.getDivisionElement(), -1);
3553    }
3554    if (element.hasProductStatus()) {
3555      composeCoding(t, "BiologicallyDerivedProduct", "productStatus", element.getProductStatus(), -1);
3556    }
3557    if (element.hasExpirationDateElement()) {
3558      composeDateTime(t, "BiologicallyDerivedProduct", "expirationDate", element.getExpirationDateElement(), -1);
3559    }
3560    if (element.hasCollection()) {
3561      composeBiologicallyDerivedProductCollectionComponent(t, "BiologicallyDerivedProduct", "collection", element.getCollection(), -1);
3562    }
3563    if (element.hasStorageTempRequirements()) {
3564      composeRange(t, "BiologicallyDerivedProduct", "storageTempRequirements", element.getStorageTempRequirements(), -1);
3565    }
3566    for (int i = 0; i < element.getProperty().size(); i++) {
3567      composeBiologicallyDerivedProductPropertyComponent(t, "BiologicallyDerivedProduct", "property", element.getProperty().get(i), i);
3568    }
3569  }
3570
3571  protected void composeBiologicallyDerivedProductCollectionComponent(Complex parent, String parentType, String name, BiologicallyDerivedProduct.BiologicallyDerivedProductCollectionComponent element, int index) {
3572    if (element == null) 
3573      return;
3574    Complex t;
3575    if (Utilities.noString(parentType))
3576      t = parent;
3577    else {
3578      t = parent.predicate("fhir:"+name,index > -1);
3579    }
3580    composeBackboneElement(t, "collection", name, element, index);
3581    if (element.hasCollector()) {
3582      composeReference(t, "BiologicallyDerivedProductCollectionComponent", "collector", element.getCollector(), -1);
3583    }
3584    if (element.hasSource()) {
3585      composeReference(t, "BiologicallyDerivedProductCollectionComponent", "source", element.getSource(), -1);
3586    }
3587    if (element.hasCollected()) {
3588      composeType(t, "BiologicallyDerivedProductCollectionComponent", "collected", element.getCollected(), -1);
3589    }
3590  }
3591
3592  protected void composeBiologicallyDerivedProductPropertyComponent(Complex parent, String parentType, String name, BiologicallyDerivedProduct.BiologicallyDerivedProductPropertyComponent element, int index) {
3593    if (element == null) 
3594      return;
3595    Complex t;
3596    if (Utilities.noString(parentType))
3597      t = parent;
3598    else {
3599      t = parent.predicate("fhir:"+name,index > -1);
3600    }
3601    composeBackboneElement(t, "property", name, element, index);
3602    if (element.hasType()) {
3603      composeCodeableConcept(t, "BiologicallyDerivedProductPropertyComponent", "type", element.getType(), -1);
3604    }
3605    if (element.hasValue()) {
3606      composeType(t, "BiologicallyDerivedProductPropertyComponent", "value", element.getValue(), -1);
3607    }
3608  }
3609
3610  protected void composeBiologicallyDerivedProductDispense(Complex parent, String parentType, String name, BiologicallyDerivedProductDispense element, int index) {
3611    if (element == null) 
3612      return;
3613    Complex t;
3614    if (Utilities.noString(parentType))
3615      t = parent;
3616    else {
3617      t = parent.predicate("fhir:"+name,index > -1);
3618    }
3619    composeDomainResource(t, "BiologicallyDerivedProductDispense", name, element, index);
3620    for (int i = 0; i < element.getIdentifier().size(); i++) {
3621      composeIdentifier(t, "BiologicallyDerivedProductDispense", "identifier", element.getIdentifier().get(i), i);
3622    }
3623    for (int i = 0; i < element.getBasedOn().size(); i++) {
3624      composeReference(t, "BiologicallyDerivedProductDispense", "basedOn", element.getBasedOn().get(i), i);
3625    }
3626    for (int i = 0; i < element.getPartOf().size(); i++) {
3627      composeReference(t, "BiologicallyDerivedProductDispense", "partOf", element.getPartOf().get(i), i);
3628    }
3629    if (element.hasStatusElement()) {
3630      composeEnum(t, "BiologicallyDerivedProductDispense", "status", element.getStatusElement(), -1);
3631    }
3632    if (element.hasOriginRelationshipType()) {
3633      composeCodeableConcept(t, "BiologicallyDerivedProductDispense", "originRelationshipType", element.getOriginRelationshipType(), -1);
3634    }
3635    if (element.hasProduct()) {
3636      composeReference(t, "BiologicallyDerivedProductDispense", "product", element.getProduct(), -1);
3637    }
3638    if (element.hasPatient()) {
3639      composeReference(t, "BiologicallyDerivedProductDispense", "patient", element.getPatient(), -1);
3640    }
3641    if (element.hasMatchStatus()) {
3642      composeCodeableConcept(t, "BiologicallyDerivedProductDispense", "matchStatus", element.getMatchStatus(), -1);
3643    }
3644    for (int i = 0; i < element.getPerformer().size(); i++) {
3645      composeBiologicallyDerivedProductDispensePerformerComponent(t, "BiologicallyDerivedProductDispense", "performer", element.getPerformer().get(i), i);
3646    }
3647    if (element.hasLocation()) {
3648      composeReference(t, "BiologicallyDerivedProductDispense", "location", element.getLocation(), -1);
3649    }
3650    if (element.hasQuantity()) {
3651      composeQuantity(t, "BiologicallyDerivedProductDispense", "quantity", element.getQuantity(), -1);
3652    }
3653    if (element.hasPreparedDateElement()) {
3654      composeDateTime(t, "BiologicallyDerivedProductDispense", "preparedDate", element.getPreparedDateElement(), -1);
3655    }
3656    if (element.hasWhenHandedOverElement()) {
3657      composeDateTime(t, "BiologicallyDerivedProductDispense", "whenHandedOver", element.getWhenHandedOverElement(), -1);
3658    }
3659    if (element.hasDestination()) {
3660      composeReference(t, "BiologicallyDerivedProductDispense", "destination", element.getDestination(), -1);
3661    }
3662    for (int i = 0; i < element.getNote().size(); i++) {
3663      composeAnnotation(t, "BiologicallyDerivedProductDispense", "note", element.getNote().get(i), i);
3664    }
3665    if (element.hasUsageInstructionElement()) {
3666      composeString(t, "BiologicallyDerivedProductDispense", "usageInstruction", element.getUsageInstructionElement(), -1);
3667    }
3668  }
3669
3670  protected void composeBiologicallyDerivedProductDispensePerformerComponent(Complex parent, String parentType, String name, BiologicallyDerivedProductDispense.BiologicallyDerivedProductDispensePerformerComponent element, int index) {
3671    if (element == null) 
3672      return;
3673    Complex t;
3674    if (Utilities.noString(parentType))
3675      t = parent;
3676    else {
3677      t = parent.predicate("fhir:"+name,index > -1);
3678    }
3679    composeBackboneElement(t, "performer", name, element, index);
3680    if (element.hasFunction()) {
3681      composeCodeableConcept(t, "BiologicallyDerivedProductDispensePerformerComponent", "function", element.getFunction(), -1);
3682    }
3683    if (element.hasActor()) {
3684      composeReference(t, "BiologicallyDerivedProductDispensePerformerComponent", "actor", element.getActor(), -1);
3685    }
3686  }
3687
3688  protected void composeBodyStructure(Complex parent, String parentType, String name, BodyStructure element, int index) {
3689    if (element == null) 
3690      return;
3691    Complex t;
3692    if (Utilities.noString(parentType))
3693      t = parent;
3694    else {
3695      t = parent.predicate("fhir:"+name,index > -1);
3696    }
3697    composeDomainResource(t, "BodyStructure", name, element, index);
3698    for (int i = 0; i < element.getIdentifier().size(); i++) {
3699      composeIdentifier(t, "BodyStructure", "identifier", element.getIdentifier().get(i), i);
3700    }
3701    if (element.hasActiveElement()) {
3702      composeBoolean(t, "BodyStructure", "active", element.getActiveElement(), -1);
3703    }
3704    if (element.hasMorphology()) {
3705      composeCodeableConcept(t, "BodyStructure", "morphology", element.getMorphology(), -1);
3706    }
3707    for (int i = 0; i < element.getIncludedStructure().size(); i++) {
3708      composeBodyStructureIncludedStructureComponent(t, "BodyStructure", "includedStructure", element.getIncludedStructure().get(i), i);
3709    }
3710    for (int i = 0; i < element.getExcludedStructure().size(); i++) {
3711      composeBodyStructureIncludedStructureComponent(t, "BodyStructure", "excludedStructure", element.getExcludedStructure().get(i), i);
3712    }
3713    if (element.hasDescriptionElement()) {
3714      composeMarkdown(t, "BodyStructure", "description", element.getDescriptionElement(), -1);
3715    }
3716    for (int i = 0; i < element.getImage().size(); i++) {
3717      composeAttachment(t, "BodyStructure", "image", element.getImage().get(i), i);
3718    }
3719    if (element.hasPatient()) {
3720      composeReference(t, "BodyStructure", "patient", element.getPatient(), -1);
3721    }
3722  }
3723
3724  protected void composeBodyStructureIncludedStructureComponent(Complex parent, String parentType, String name, BodyStructure.BodyStructureIncludedStructureComponent element, int index) {
3725    if (element == null) 
3726      return;
3727    Complex t;
3728    if (Utilities.noString(parentType))
3729      t = parent;
3730    else {
3731      t = parent.predicate("fhir:"+name,index > -1);
3732    }
3733    composeBackboneElement(t, "includedStructure", name, element, index);
3734    if (element.hasStructure()) {
3735      composeCodeableConcept(t, "BodyStructureIncludedStructureComponent", "structure", element.getStructure(), -1);
3736    }
3737    if (element.hasLaterality()) {
3738      composeCodeableConcept(t, "BodyStructureIncludedStructureComponent", "laterality", element.getLaterality(), -1);
3739    }
3740    for (int i = 0; i < element.getBodyLandmarkOrientation().size(); i++) {
3741      composeBodyStructureIncludedStructureBodyLandmarkOrientationComponent(t, "BodyStructureIncludedStructureComponent", "bodyLandmarkOrientation", element.getBodyLandmarkOrientation().get(i), i);
3742    }
3743    for (int i = 0; i < element.getSpatialReference().size(); i++) {
3744      composeReference(t, "BodyStructureIncludedStructureComponent", "spatialReference", element.getSpatialReference().get(i), i);
3745    }
3746    for (int i = 0; i < element.getQualifier().size(); i++) {
3747      composeCodeableConcept(t, "BodyStructureIncludedStructureComponent", "qualifier", element.getQualifier().get(i), i);
3748    }
3749  }
3750
3751  protected void composeBodyStructureIncludedStructureBodyLandmarkOrientationComponent(Complex parent, String parentType, String name, BodyStructure.BodyStructureIncludedStructureBodyLandmarkOrientationComponent element, int index) {
3752    if (element == null) 
3753      return;
3754    Complex t;
3755    if (Utilities.noString(parentType))
3756      t = parent;
3757    else {
3758      t = parent.predicate("fhir:"+name,index > -1);
3759    }
3760    composeBackboneElement(t, "bodyLandmarkOrientation", name, element, index);
3761    for (int i = 0; i < element.getLandmarkDescription().size(); i++) {
3762      composeCodeableConcept(t, "BodyStructureIncludedStructureBodyLandmarkOrientationComponent", "landmarkDescription", element.getLandmarkDescription().get(i), i);
3763    }
3764    for (int i = 0; i < element.getClockFacePosition().size(); i++) {
3765      composeCodeableConcept(t, "BodyStructureIncludedStructureBodyLandmarkOrientationComponent", "clockFacePosition", element.getClockFacePosition().get(i), i);
3766    }
3767    for (int i = 0; i < element.getDistanceFromLandmark().size(); i++) {
3768      composeBodyStructureIncludedStructureBodyLandmarkOrientationDistanceFromLandmarkComponent(t, "BodyStructureIncludedStructureBodyLandmarkOrientationComponent", "distanceFromLandmark", element.getDistanceFromLandmark().get(i), i);
3769    }
3770    for (int i = 0; i < element.getSurfaceOrientation().size(); i++) {
3771      composeCodeableConcept(t, "BodyStructureIncludedStructureBodyLandmarkOrientationComponent", "surfaceOrientation", element.getSurfaceOrientation().get(i), i);
3772    }
3773  }
3774
3775  protected void composeBodyStructureIncludedStructureBodyLandmarkOrientationDistanceFromLandmarkComponent(Complex parent, String parentType, String name, BodyStructure.BodyStructureIncludedStructureBodyLandmarkOrientationDistanceFromLandmarkComponent element, int index) {
3776    if (element == null) 
3777      return;
3778    Complex t;
3779    if (Utilities.noString(parentType))
3780      t = parent;
3781    else {
3782      t = parent.predicate("fhir:"+name,index > -1);
3783    }
3784    composeBackboneElement(t, "distanceFromLandmark", name, element, index);
3785    for (int i = 0; i < element.getDevice().size(); i++) {
3786      composeCodeableReference(t, "BodyStructureIncludedStructureBodyLandmarkOrientationDistanceFromLandmarkComponent", "device", element.getDevice().get(i), i);
3787    }
3788    for (int i = 0; i < element.getValue().size(); i++) {
3789      composeQuantity(t, "BodyStructureIncludedStructureBodyLandmarkOrientationDistanceFromLandmarkComponent", "value", element.getValue().get(i), i);
3790    }
3791  }
3792
3793  protected void composeBundle(Complex parent, String parentType, String name, Bundle element, int index) {
3794    if (element == null) 
3795      return;
3796    Complex t;
3797    if (Utilities.noString(parentType))
3798      t = parent;
3799    else {
3800      t = parent.predicate("fhir:"+name,index > -1);
3801    }
3802    composeResource(t, "Bundle", name, element, index);
3803    if (element.hasIdentifier()) {
3804      composeIdentifier(t, "Bundle", "identifier", element.getIdentifier(), -1);
3805    }
3806    if (element.hasTypeElement()) {
3807      composeEnum(t, "Bundle", "type", element.getTypeElement(), -1);
3808    }
3809    if (element.hasTimestampElement()) {
3810      composeInstant(t, "Bundle", "timestamp", element.getTimestampElement(), -1);
3811    }
3812    if (element.hasTotalElement()) {
3813      composeUnsignedInt(t, "Bundle", "total", element.getTotalElement(), -1);
3814    }
3815    for (int i = 0; i < element.getLink().size(); i++) {
3816      composeBundleLinkComponent(t, "Bundle", "link", element.getLink().get(i), i);
3817    }
3818    for (int i = 0; i < element.getEntry().size(); i++) {
3819      composeBundleEntryComponent(t, "Bundle", "entry", element.getEntry().get(i), i);
3820    }
3821    if (element.hasSignature()) {
3822      composeSignature(t, "Bundle", "signature", element.getSignature(), -1);
3823    }
3824    if (element.hasIssues()) {
3825      composeResource(t, "Bundle", "issues", element.getIssues(), -1);
3826    }
3827  }
3828
3829  protected void composeBundleLinkComponent(Complex parent, String parentType, String name, Bundle.BundleLinkComponent element, int index) {
3830    if (element == null) 
3831      return;
3832    Complex t;
3833    if (Utilities.noString(parentType))
3834      t = parent;
3835    else {
3836      t = parent.predicate("fhir:"+name,index > -1);
3837    }
3838    composeBackboneElement(t, "link", name, element, index);
3839    if (element.hasRelationElement()) {
3840      composeEnum(t, "BundleLinkComponent", "relation", element.getRelationElement(), -1);
3841    }
3842    if (element.hasUrlElement()) {
3843      composeUri(t, "BundleLinkComponent", "url", element.getUrlElement(), -1);
3844    }
3845  }
3846
3847  protected void composeBundleEntryComponent(Complex parent, String parentType, String name, Bundle.BundleEntryComponent element, int index) {
3848    if (element == null) 
3849      return;
3850    Complex t;
3851    if (Utilities.noString(parentType))
3852      t = parent;
3853    else {
3854      t = parent.predicate("fhir:"+name,index > -1);
3855    }
3856    composeBackboneElement(t, "entry", name, element, index);
3857    for (int i = 0; i < element.getLink().size(); i++) {
3858      composeBundleLinkComponent(t, "BundleEntryComponent", "link", element.getLink().get(i), i);
3859    }
3860    if (element.hasFullUrlElement()) {
3861      composeUri(t, "BundleEntryComponent", "fullUrl", element.getFullUrlElement(), -1);
3862    }
3863    if (element.hasResource()) {
3864      composeResource(t, "BundleEntryComponent", "resource", element.getResource(), -1);
3865    }
3866    if (element.hasSearch()) {
3867      composeBundleEntrySearchComponent(t, "BundleEntryComponent", "search", element.getSearch(), -1);
3868    }
3869    if (element.hasRequest()) {
3870      composeBundleEntryRequestComponent(t, "BundleEntryComponent", "request", element.getRequest(), -1);
3871    }
3872    if (element.hasResponse()) {
3873      composeBundleEntryResponseComponent(t, "BundleEntryComponent", "response", element.getResponse(), -1);
3874    }
3875  }
3876
3877  protected void composeBundleEntrySearchComponent(Complex parent, String parentType, String name, Bundle.BundleEntrySearchComponent element, int index) {
3878    if (element == null) 
3879      return;
3880    Complex t;
3881    if (Utilities.noString(parentType))
3882      t = parent;
3883    else {
3884      t = parent.predicate("fhir:"+name,index > -1);
3885    }
3886    composeBackboneElement(t, "search", name, element, index);
3887    if (element.hasModeElement()) {
3888      composeEnum(t, "BundleEntrySearchComponent", "mode", element.getModeElement(), -1);
3889    }
3890    if (element.hasScoreElement()) {
3891      composeDecimal(t, "BundleEntrySearchComponent", "score", element.getScoreElement(), -1);
3892    }
3893  }
3894
3895  protected void composeBundleEntryRequestComponent(Complex parent, String parentType, String name, Bundle.BundleEntryRequestComponent element, int index) {
3896    if (element == null) 
3897      return;
3898    Complex t;
3899    if (Utilities.noString(parentType))
3900      t = parent;
3901    else {
3902      t = parent.predicate("fhir:"+name,index > -1);
3903    }
3904    composeBackboneElement(t, "request", name, element, index);
3905    if (element.hasMethodElement()) {
3906      composeEnum(t, "BundleEntryRequestComponent", "method", element.getMethodElement(), -1);
3907    }
3908    if (element.hasUrlElement()) {
3909      composeUri(t, "BundleEntryRequestComponent", "url", element.getUrlElement(), -1);
3910    }
3911    if (element.hasIfNoneMatchElement()) {
3912      composeString(t, "BundleEntryRequestComponent", "ifNoneMatch", element.getIfNoneMatchElement(), -1);
3913    }
3914    if (element.hasIfModifiedSinceElement()) {
3915      composeInstant(t, "BundleEntryRequestComponent", "ifModifiedSince", element.getIfModifiedSinceElement(), -1);
3916    }
3917    if (element.hasIfMatchElement()) {
3918      composeString(t, "BundleEntryRequestComponent", "ifMatch", element.getIfMatchElement(), -1);
3919    }
3920    if (element.hasIfNoneExistElement()) {
3921      composeString(t, "BundleEntryRequestComponent", "ifNoneExist", element.getIfNoneExistElement(), -1);
3922    }
3923  }
3924
3925  protected void composeBundleEntryResponseComponent(Complex parent, String parentType, String name, Bundle.BundleEntryResponseComponent element, int index) {
3926    if (element == null) 
3927      return;
3928    Complex t;
3929    if (Utilities.noString(parentType))
3930      t = parent;
3931    else {
3932      t = parent.predicate("fhir:"+name,index > -1);
3933    }
3934    composeBackboneElement(t, "response", name, element, index);
3935    if (element.hasStatusElement()) {
3936      composeString(t, "BundleEntryResponseComponent", "status", element.getStatusElement(), -1);
3937    }
3938    if (element.hasLocationElement()) {
3939      composeUri(t, "BundleEntryResponseComponent", "location", element.getLocationElement(), -1);
3940    }
3941    if (element.hasEtagElement()) {
3942      composeString(t, "BundleEntryResponseComponent", "etag", element.getEtagElement(), -1);
3943    }
3944    if (element.hasLastModifiedElement()) {
3945      composeInstant(t, "BundleEntryResponseComponent", "lastModified", element.getLastModifiedElement(), -1);
3946    }
3947    if (element.hasOutcome()) {
3948      composeResource(t, "BundleEntryResponseComponent", "outcome", element.getOutcome(), -1);
3949    }
3950  }
3951
3952  protected void composeCapabilityStatement(Complex parent, String parentType, String name, CapabilityStatement element, int index) {
3953    if (element == null) 
3954      return;
3955    Complex t;
3956    if (Utilities.noString(parentType))
3957      t = parent;
3958    else {
3959      t = parent.predicate("fhir:"+name,index > -1);
3960    }
3961    composeCanonicalResource(t, "CapabilityStatement", name, element, index);
3962    if (element.hasUrlElement()) {
3963      composeUri(t, "CapabilityStatement", "url", element.getUrlElement(), -1);
3964    }
3965    for (int i = 0; i < element.getIdentifier().size(); i++) {
3966      composeIdentifier(t, "CapabilityStatement", "identifier", element.getIdentifier().get(i), i);
3967    }
3968    if (element.hasVersionElement()) {
3969      composeString(t, "CapabilityStatement", "version", element.getVersionElement(), -1);
3970    }
3971    if (element.hasVersionAlgorithm()) {
3972      composeType(t, "CapabilityStatement", "versionAlgorithm", element.getVersionAlgorithm(), -1);
3973    }
3974    if (element.hasNameElement()) {
3975      composeString(t, "CapabilityStatement", "name", element.getNameElement(), -1);
3976    }
3977    if (element.hasTitleElement()) {
3978      composeString(t, "CapabilityStatement", "title", element.getTitleElement(), -1);
3979    }
3980    if (element.hasStatusElement()) {
3981      composeEnum(t, "CapabilityStatement", "status", element.getStatusElement(), -1);
3982    }
3983    if (element.hasExperimentalElement()) {
3984      composeBoolean(t, "CapabilityStatement", "experimental", element.getExperimentalElement(), -1);
3985    }
3986    if (element.hasDateElement()) {
3987      composeDateTime(t, "CapabilityStatement", "date", element.getDateElement(), -1);
3988    }
3989    if (element.hasPublisherElement()) {
3990      composeString(t, "CapabilityStatement", "publisher", element.getPublisherElement(), -1);
3991    }
3992    for (int i = 0; i < element.getContact().size(); i++) {
3993      composeContactDetail(t, "CapabilityStatement", "contact", element.getContact().get(i), i);
3994    }
3995    if (element.hasDescriptionElement()) {
3996      composeMarkdown(t, "CapabilityStatement", "description", element.getDescriptionElement(), -1);
3997    }
3998    for (int i = 0; i < element.getUseContext().size(); i++) {
3999      composeUsageContext(t, "CapabilityStatement", "useContext", element.getUseContext().get(i), i);
4000    }
4001    for (int i = 0; i < element.getJurisdiction().size(); i++) {
4002      composeCodeableConcept(t, "CapabilityStatement", "jurisdiction", element.getJurisdiction().get(i), i);
4003    }
4004    if (element.hasPurposeElement()) {
4005      composeMarkdown(t, "CapabilityStatement", "purpose", element.getPurposeElement(), -1);
4006    }
4007    if (element.hasCopyrightElement()) {
4008      composeMarkdown(t, "CapabilityStatement", "copyright", element.getCopyrightElement(), -1);
4009    }
4010    if (element.hasCopyrightLabelElement()) {
4011      composeString(t, "CapabilityStatement", "copyrightLabel", element.getCopyrightLabelElement(), -1);
4012    }
4013    if (element.hasKindElement()) {
4014      composeEnum(t, "CapabilityStatement", "kind", element.getKindElement(), -1);
4015    }
4016    for (int i = 0; i < element.getInstantiates().size(); i++) {
4017      composeCanonical(t, "CapabilityStatement", "instantiates", element.getInstantiates().get(i), i);
4018    }
4019    for (int i = 0; i < element.getImports().size(); i++) {
4020      composeCanonical(t, "CapabilityStatement", "imports", element.getImports().get(i), i);
4021    }
4022    if (element.hasSoftware()) {
4023      composeCapabilityStatementSoftwareComponent(t, "CapabilityStatement", "software", element.getSoftware(), -1);
4024    }
4025    if (element.hasImplementation()) {
4026      composeCapabilityStatementImplementationComponent(t, "CapabilityStatement", "implementation", element.getImplementation(), -1);
4027    }
4028    if (element.hasFhirVersionElement()) {
4029      composeEnum(t, "CapabilityStatement", "fhirVersion", element.getFhirVersionElement(), -1);
4030    }
4031    for (int i = 0; i < element.getFormat().size(); i++) {
4032      composeCode(t, "CapabilityStatement", "format", element.getFormat().get(i), i);
4033    }
4034    for (int i = 0; i < element.getPatchFormat().size(); i++) {
4035      composeCode(t, "CapabilityStatement", "patchFormat", element.getPatchFormat().get(i), i);
4036    }
4037    for (int i = 0; i < element.getAcceptLanguage().size(); i++) {
4038      composeCode(t, "CapabilityStatement", "acceptLanguage", element.getAcceptLanguage().get(i), i);
4039    }
4040    for (int i = 0; i < element.getImplementationGuide().size(); i++) {
4041      composeCanonical(t, "CapabilityStatement", "implementationGuide", element.getImplementationGuide().get(i), i);
4042    }
4043    for (int i = 0; i < element.getRest().size(); i++) {
4044      composeCapabilityStatementRestComponent(t, "CapabilityStatement", "rest", element.getRest().get(i), i);
4045    }
4046    for (int i = 0; i < element.getMessaging().size(); i++) {
4047      composeCapabilityStatementMessagingComponent(t, "CapabilityStatement", "messaging", element.getMessaging().get(i), i);
4048    }
4049    for (int i = 0; i < element.getDocument().size(); i++) {
4050      composeCapabilityStatementDocumentComponent(t, "CapabilityStatement", "document", element.getDocument().get(i), i);
4051    }
4052  }
4053
4054  protected void composeCapabilityStatementSoftwareComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementSoftwareComponent element, int index) {
4055    if (element == null) 
4056      return;
4057    Complex t;
4058    if (Utilities.noString(parentType))
4059      t = parent;
4060    else {
4061      t = parent.predicate("fhir:"+name,index > -1);
4062    }
4063    composeBackboneElement(t, "software", name, element, index);
4064    if (element.hasNameElement()) {
4065      composeString(t, "CapabilityStatementSoftwareComponent", "name", element.getNameElement(), -1);
4066    }
4067    if (element.hasVersionElement()) {
4068      composeString(t, "CapabilityStatementSoftwareComponent", "version", element.getVersionElement(), -1);
4069    }
4070    if (element.hasReleaseDateElement()) {
4071      composeDateTime(t, "CapabilityStatementSoftwareComponent", "releaseDate", element.getReleaseDateElement(), -1);
4072    }
4073  }
4074
4075  protected void composeCapabilityStatementImplementationComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementImplementationComponent element, int index) {
4076    if (element == null) 
4077      return;
4078    Complex t;
4079    if (Utilities.noString(parentType))
4080      t = parent;
4081    else {
4082      t = parent.predicate("fhir:"+name,index > -1);
4083    }
4084    composeBackboneElement(t, "implementation", name, element, index);
4085    if (element.hasDescriptionElement()) {
4086      composeMarkdown(t, "CapabilityStatementImplementationComponent", "description", element.getDescriptionElement(), -1);
4087    }
4088    if (element.hasUrlElement()) {
4089      composeUrl(t, "CapabilityStatementImplementationComponent", "url", element.getUrlElement(), -1);
4090    }
4091    if (element.hasCustodian()) {
4092      composeReference(t, "CapabilityStatementImplementationComponent", "custodian", element.getCustodian(), -1);
4093    }
4094  }
4095
4096  protected void composeCapabilityStatementRestComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementRestComponent 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:"+name,index > -1);
4104    }
4105    composeBackboneElement(t, "rest", name, element, index);
4106    if (element.hasModeElement()) {
4107      composeEnum(t, "CapabilityStatementRestComponent", "mode", element.getModeElement(), -1);
4108    }
4109    if (element.hasDocumentationElement()) {
4110      composeMarkdown(t, "CapabilityStatementRestComponent", "documentation", element.getDocumentationElement(), -1);
4111    }
4112    if (element.hasSecurity()) {
4113      composeCapabilityStatementRestSecurityComponent(t, "CapabilityStatementRestComponent", "security", element.getSecurity(), -1);
4114    }
4115    for (int i = 0; i < element.getResource().size(); i++) {
4116      composeCapabilityStatementRestResourceComponent(t, "CapabilityStatementRestComponent", "resource", element.getResource().get(i), i);
4117    }
4118    for (int i = 0; i < element.getInteraction().size(); i++) {
4119      composeCapabilityStatementSystemInteractionComponent(t, "CapabilityStatementRestComponent", "interaction", element.getInteraction().get(i), i);
4120    }
4121    for (int i = 0; i < element.getSearchParam().size(); i++) {
4122      composeCapabilityStatementRestResourceSearchParamComponent(t, "CapabilityStatementRestComponent", "searchParam", element.getSearchParam().get(i), i);
4123    }
4124    for (int i = 0; i < element.getOperation().size(); i++) {
4125      composeCapabilityStatementRestResourceOperationComponent(t, "CapabilityStatementRestComponent", "operation", element.getOperation().get(i), i);
4126    }
4127    for (int i = 0; i < element.getCompartment().size(); i++) {
4128      composeCanonical(t, "CapabilityStatementRestComponent", "compartment", element.getCompartment().get(i), i);
4129    }
4130  }
4131
4132  protected void composeCapabilityStatementRestSecurityComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementRestSecurityComponent element, int index) {
4133    if (element == null) 
4134      return;
4135    Complex t;
4136    if (Utilities.noString(parentType))
4137      t = parent;
4138    else {
4139      t = parent.predicate("fhir:"+name,index > -1);
4140    }
4141    composeBackboneElement(t, "security", name, element, index);
4142    if (element.hasCorsElement()) {
4143      composeBoolean(t, "CapabilityStatementRestSecurityComponent", "cors", element.getCorsElement(), -1);
4144    }
4145    for (int i = 0; i < element.getService().size(); i++) {
4146      composeCodeableConcept(t, "CapabilityStatementRestSecurityComponent", "service", element.getService().get(i), i);
4147    }
4148    if (element.hasDescriptionElement()) {
4149      composeMarkdown(t, "CapabilityStatementRestSecurityComponent", "description", element.getDescriptionElement(), -1);
4150    }
4151  }
4152
4153  protected void composeCapabilityStatementRestResourceComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementRestResourceComponent element, int index) {
4154    if (element == null) 
4155      return;
4156    Complex t;
4157    if (Utilities.noString(parentType))
4158      t = parent;
4159    else {
4160      t = parent.predicate("fhir:"+name,index > -1);
4161    }
4162    composeBackboneElement(t, "resource", name, element, index);
4163    if (element.hasTypeElement()) {
4164      composeCode(t, "CapabilityStatementRestResourceComponent", "type", element.getTypeElement(), -1);
4165    }
4166    if (element.hasProfileElement()) {
4167      composeCanonical(t, "CapabilityStatementRestResourceComponent", "profile", element.getProfileElement(), -1);
4168    }
4169    for (int i = 0; i < element.getSupportedProfile().size(); i++) {
4170      composeCanonical(t, "CapabilityStatementRestResourceComponent", "supportedProfile", element.getSupportedProfile().get(i), i);
4171    }
4172    if (element.hasDocumentationElement()) {
4173      composeMarkdown(t, "CapabilityStatementRestResourceComponent", "documentation", element.getDocumentationElement(), -1);
4174    }
4175    for (int i = 0; i < element.getInteraction().size(); i++) {
4176      composeCapabilityStatementResourceInteractionComponent(t, "CapabilityStatementRestResourceComponent", "interaction", element.getInteraction().get(i), i);
4177    }
4178    if (element.hasVersioningElement()) {
4179      composeEnum(t, "CapabilityStatementRestResourceComponent", "versioning", element.getVersioningElement(), -1);
4180    }
4181    if (element.hasReadHistoryElement()) {
4182      composeBoolean(t, "CapabilityStatementRestResourceComponent", "readHistory", element.getReadHistoryElement(), -1);
4183    }
4184    if (element.hasUpdateCreateElement()) {
4185      composeBoolean(t, "CapabilityStatementRestResourceComponent", "updateCreate", element.getUpdateCreateElement(), -1);
4186    }
4187    if (element.hasConditionalCreateElement()) {
4188      composeBoolean(t, "CapabilityStatementRestResourceComponent", "conditionalCreate", element.getConditionalCreateElement(), -1);
4189    }
4190    if (element.hasConditionalReadElement()) {
4191      composeEnum(t, "CapabilityStatementRestResourceComponent", "conditionalRead", element.getConditionalReadElement(), -1);
4192    }
4193    if (element.hasConditionalUpdateElement()) {
4194      composeBoolean(t, "CapabilityStatementRestResourceComponent", "conditionalUpdate", element.getConditionalUpdateElement(), -1);
4195    }
4196    if (element.hasConditionalPatchElement()) {
4197      composeBoolean(t, "CapabilityStatementRestResourceComponent", "conditionalPatch", element.getConditionalPatchElement(), -1);
4198    }
4199    if (element.hasConditionalDeleteElement()) {
4200      composeEnum(t, "CapabilityStatementRestResourceComponent", "conditionalDelete", element.getConditionalDeleteElement(), -1);
4201    }
4202    for (int i = 0; i < element.getReferencePolicy().size(); i++) {
4203      composeEnum(t, "CapabilityStatementRestResourceComponent", "referencePolicy", element.getReferencePolicy().get(i), i);
4204    }
4205    for (int i = 0; i < element.getSearchInclude().size(); i++) {
4206      composeString(t, "CapabilityStatementRestResourceComponent", "searchInclude", element.getSearchInclude().get(i), i);
4207    }
4208    for (int i = 0; i < element.getSearchRevInclude().size(); i++) {
4209      composeString(t, "CapabilityStatementRestResourceComponent", "searchRevInclude", element.getSearchRevInclude().get(i), i);
4210    }
4211    for (int i = 0; i < element.getSearchParam().size(); i++) {
4212      composeCapabilityStatementRestResourceSearchParamComponent(t, "CapabilityStatementRestResourceComponent", "searchParam", element.getSearchParam().get(i), i);
4213    }
4214    for (int i = 0; i < element.getOperation().size(); i++) {
4215      composeCapabilityStatementRestResourceOperationComponent(t, "CapabilityStatementRestResourceComponent", "operation", element.getOperation().get(i), i);
4216    }
4217  }
4218
4219  protected void composeCapabilityStatementResourceInteractionComponent(Complex parent, String parentType, String name, CapabilityStatement.ResourceInteractionComponent 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:"+name,index > -1);
4227    }
4228    composeBackboneElement(t, "interaction", name, element, index);
4229    if (element.hasCodeElement()) {
4230      composeEnum(t, "ResourceInteractionComponent", "code", element.getCodeElement(), -1);
4231    }
4232    if (element.hasDocumentationElement()) {
4233      composeMarkdown(t, "ResourceInteractionComponent", "documentation", element.getDocumentationElement(), -1);
4234    }
4235  }
4236
4237  protected void composeCapabilityStatementRestResourceSearchParamComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementRestResourceSearchParamComponent element, int index) {
4238    if (element == null) 
4239      return;
4240    Complex t;
4241    if (Utilities.noString(parentType))
4242      t = parent;
4243    else {
4244      t = parent.predicate("fhir:"+name,index > -1);
4245    }
4246    composeBackboneElement(t, "searchParam", name, element, index);
4247    if (element.hasNameElement()) {
4248      composeString(t, "CapabilityStatementRestResourceSearchParamComponent", "name", element.getNameElement(), -1);
4249    }
4250    if (element.hasDefinitionElement()) {
4251      composeCanonical(t, "CapabilityStatementRestResourceSearchParamComponent", "definition", element.getDefinitionElement(), -1);
4252    }
4253    if (element.hasTypeElement()) {
4254      composeEnum(t, "CapabilityStatementRestResourceSearchParamComponent", "type", element.getTypeElement(), -1);
4255    }
4256    if (element.hasDocumentationElement()) {
4257      composeMarkdown(t, "CapabilityStatementRestResourceSearchParamComponent", "documentation", element.getDocumentationElement(), -1);
4258    }
4259  }
4260
4261  protected void composeCapabilityStatementRestResourceOperationComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementRestResourceOperationComponent element, int index) {
4262    if (element == null) 
4263      return;
4264    Complex t;
4265    if (Utilities.noString(parentType))
4266      t = parent;
4267    else {
4268      t = parent.predicate("fhir:"+name,index > -1);
4269    }
4270    composeBackboneElement(t, "operation", name, element, index);
4271    if (element.hasNameElement()) {
4272      composeString(t, "CapabilityStatementRestResourceOperationComponent", "name", element.getNameElement(), -1);
4273    }
4274    if (element.hasDefinitionElement()) {
4275      composeCanonical(t, "CapabilityStatementRestResourceOperationComponent", "definition", element.getDefinitionElement(), -1);
4276    }
4277    if (element.hasDocumentationElement()) {
4278      composeMarkdown(t, "CapabilityStatementRestResourceOperationComponent", "documentation", element.getDocumentationElement(), -1);
4279    }
4280  }
4281
4282  protected void composeCapabilityStatementSystemInteractionComponent(Complex parent, String parentType, String name, CapabilityStatement.SystemInteractionComponent element, int index) {
4283    if (element == null) 
4284      return;
4285    Complex t;
4286    if (Utilities.noString(parentType))
4287      t = parent;
4288    else {
4289      t = parent.predicate("fhir:"+name,index > -1);
4290    }
4291    composeBackboneElement(t, "interaction", name, element, index);
4292    if (element.hasCodeElement()) {
4293      composeEnum(t, "SystemInteractionComponent", "code", element.getCodeElement(), -1);
4294    }
4295    if (element.hasDocumentationElement()) {
4296      composeMarkdown(t, "SystemInteractionComponent", "documentation", element.getDocumentationElement(), -1);
4297    }
4298  }
4299
4300  protected void composeCapabilityStatementMessagingComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementMessagingComponent element, int index) {
4301    if (element == null) 
4302      return;
4303    Complex t;
4304    if (Utilities.noString(parentType))
4305      t = parent;
4306    else {
4307      t = parent.predicate("fhir:"+name,index > -1);
4308    }
4309    composeBackboneElement(t, "messaging", name, element, index);
4310    for (int i = 0; i < element.getEndpoint().size(); i++) {
4311      composeCapabilityStatementMessagingEndpointComponent(t, "CapabilityStatementMessagingComponent", "endpoint", element.getEndpoint().get(i), i);
4312    }
4313    if (element.hasReliableCacheElement()) {
4314      composeUnsignedInt(t, "CapabilityStatementMessagingComponent", "reliableCache", element.getReliableCacheElement(), -1);
4315    }
4316    if (element.hasDocumentationElement()) {
4317      composeMarkdown(t, "CapabilityStatementMessagingComponent", "documentation", element.getDocumentationElement(), -1);
4318    }
4319    for (int i = 0; i < element.getSupportedMessage().size(); i++) {
4320      composeCapabilityStatementMessagingSupportedMessageComponent(t, "CapabilityStatementMessagingComponent", "supportedMessage", element.getSupportedMessage().get(i), i);
4321    }
4322  }
4323
4324  protected void composeCapabilityStatementMessagingEndpointComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementMessagingEndpointComponent element, int index) {
4325    if (element == null) 
4326      return;
4327    Complex t;
4328    if (Utilities.noString(parentType))
4329      t = parent;
4330    else {
4331      t = parent.predicate("fhir:"+name,index > -1);
4332    }
4333    composeBackboneElement(t, "endpoint", name, element, index);
4334    if (element.hasProtocol()) {
4335      composeCoding(t, "CapabilityStatementMessagingEndpointComponent", "protocol", element.getProtocol(), -1);
4336    }
4337    if (element.hasAddressElement()) {
4338      composeUrl(t, "CapabilityStatementMessagingEndpointComponent", "address", element.getAddressElement(), -1);
4339    }
4340  }
4341
4342  protected void composeCapabilityStatementMessagingSupportedMessageComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementMessagingSupportedMessageComponent element, int index) {
4343    if (element == null) 
4344      return;
4345    Complex t;
4346    if (Utilities.noString(parentType))
4347      t = parent;
4348    else {
4349      t = parent.predicate("fhir:"+name,index > -1);
4350    }
4351    composeBackboneElement(t, "supportedMessage", name, element, index);
4352    if (element.hasModeElement()) {
4353      composeEnum(t, "CapabilityStatementMessagingSupportedMessageComponent", "mode", element.getModeElement(), -1);
4354    }
4355    if (element.hasDefinitionElement()) {
4356      composeCanonical(t, "CapabilityStatementMessagingSupportedMessageComponent", "definition", element.getDefinitionElement(), -1);
4357    }
4358  }
4359
4360  protected void composeCapabilityStatementDocumentComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementDocumentComponent element, int index) {
4361    if (element == null) 
4362      return;
4363    Complex t;
4364    if (Utilities.noString(parentType))
4365      t = parent;
4366    else {
4367      t = parent.predicate("fhir:"+name,index > -1);
4368    }
4369    composeBackboneElement(t, "document", name, element, index);
4370    if (element.hasModeElement()) {
4371      composeEnum(t, "CapabilityStatementDocumentComponent", "mode", element.getModeElement(), -1);
4372    }
4373    if (element.hasDocumentationElement()) {
4374      composeMarkdown(t, "CapabilityStatementDocumentComponent", "documentation", element.getDocumentationElement(), -1);
4375    }
4376    if (element.hasProfileElement()) {
4377      composeCanonical(t, "CapabilityStatementDocumentComponent", "profile", element.getProfileElement(), -1);
4378    }
4379  }
4380
4381  protected void composeCarePlan(Complex parent, String parentType, String name, CarePlan element, int index) {
4382    if (element == null) 
4383      return;
4384    Complex t;
4385    if (Utilities.noString(parentType))
4386      t = parent;
4387    else {
4388      t = parent.predicate("fhir:"+name,index > -1);
4389    }
4390    composeDomainResource(t, "CarePlan", name, element, index);
4391    for (int i = 0; i < element.getIdentifier().size(); i++) {
4392      composeIdentifier(t, "CarePlan", "identifier", element.getIdentifier().get(i), i);
4393    }
4394    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
4395      composeCanonical(t, "CarePlan", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
4396    }
4397    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
4398      composeUri(t, "CarePlan", "instantiatesUri", element.getInstantiatesUri().get(i), i);
4399    }
4400    for (int i = 0; i < element.getBasedOn().size(); i++) {
4401      composeReference(t, "CarePlan", "basedOn", element.getBasedOn().get(i), i);
4402    }
4403    for (int i = 0; i < element.getReplaces().size(); i++) {
4404      composeReference(t, "CarePlan", "replaces", element.getReplaces().get(i), i);
4405    }
4406    for (int i = 0; i < element.getPartOf().size(); i++) {
4407      composeReference(t, "CarePlan", "partOf", element.getPartOf().get(i), i);
4408    }
4409    if (element.hasStatusElement()) {
4410      composeEnum(t, "CarePlan", "status", element.getStatusElement(), -1);
4411    }
4412    if (element.hasIntentElement()) {
4413      composeEnum(t, "CarePlan", "intent", element.getIntentElement(), -1);
4414    }
4415    for (int i = 0; i < element.getCategory().size(); i++) {
4416      composeCodeableConcept(t, "CarePlan", "category", element.getCategory().get(i), i);
4417    }
4418    if (element.hasTitleElement()) {
4419      composeString(t, "CarePlan", "title", element.getTitleElement(), -1);
4420    }
4421    if (element.hasDescriptionElement()) {
4422      composeString(t, "CarePlan", "description", element.getDescriptionElement(), -1);
4423    }
4424    if (element.hasSubject()) {
4425      composeReference(t, "CarePlan", "subject", element.getSubject(), -1);
4426    }
4427    if (element.hasEncounter()) {
4428      composeReference(t, "CarePlan", "encounter", element.getEncounter(), -1);
4429    }
4430    if (element.hasPeriod()) {
4431      composePeriod(t, "CarePlan", "period", element.getPeriod(), -1);
4432    }
4433    if (element.hasCreatedElement()) {
4434      composeDateTime(t, "CarePlan", "created", element.getCreatedElement(), -1);
4435    }
4436    if (element.hasCustodian()) {
4437      composeReference(t, "CarePlan", "custodian", element.getCustodian(), -1);
4438    }
4439    for (int i = 0; i < element.getContributor().size(); i++) {
4440      composeReference(t, "CarePlan", "contributor", element.getContributor().get(i), i);
4441    }
4442    for (int i = 0; i < element.getCareTeam().size(); i++) {
4443      composeReference(t, "CarePlan", "careTeam", element.getCareTeam().get(i), i);
4444    }
4445    for (int i = 0; i < element.getAddresses().size(); i++) {
4446      composeCodeableReference(t, "CarePlan", "addresses", element.getAddresses().get(i), i);
4447    }
4448    for (int i = 0; i < element.getSupportingInfo().size(); i++) {
4449      composeReference(t, "CarePlan", "supportingInfo", element.getSupportingInfo().get(i), i);
4450    }
4451    for (int i = 0; i < element.getGoal().size(); i++) {
4452      composeReference(t, "CarePlan", "goal", element.getGoal().get(i), i);
4453    }
4454    for (int i = 0; i < element.getActivity().size(); i++) {
4455      composeCarePlanActivityComponent(t, "CarePlan", "activity", element.getActivity().get(i), i);
4456    }
4457    for (int i = 0; i < element.getNote().size(); i++) {
4458      composeAnnotation(t, "CarePlan", "note", element.getNote().get(i), i);
4459    }
4460  }
4461
4462  protected void composeCarePlanActivityComponent(Complex parent, String parentType, String name, CarePlan.CarePlanActivityComponent element, int index) {
4463    if (element == null) 
4464      return;
4465    Complex t;
4466    if (Utilities.noString(parentType))
4467      t = parent;
4468    else {
4469      t = parent.predicate("fhir:"+name,index > -1);
4470    }
4471    composeBackboneElement(t, "activity", name, element, index);
4472    for (int i = 0; i < element.getPerformedActivity().size(); i++) {
4473      composeCodeableReference(t, "CarePlanActivityComponent", "performedActivity", element.getPerformedActivity().get(i), i);
4474    }
4475    for (int i = 0; i < element.getProgress().size(); i++) {
4476      composeAnnotation(t, "CarePlanActivityComponent", "progress", element.getProgress().get(i), i);
4477    }
4478    if (element.hasPlannedActivityReference()) {
4479      composeReference(t, "CarePlanActivityComponent", "plannedActivityReference", element.getPlannedActivityReference(), -1);
4480    }
4481  }
4482
4483  protected void composeCareTeam(Complex parent, String parentType, String name, CareTeam element, int index) {
4484    if (element == null) 
4485      return;
4486    Complex t;
4487    if (Utilities.noString(parentType))
4488      t = parent;
4489    else {
4490      t = parent.predicate("fhir:"+name,index > -1);
4491    }
4492    composeDomainResource(t, "CareTeam", name, element, index);
4493    for (int i = 0; i < element.getIdentifier().size(); i++) {
4494      composeIdentifier(t, "CareTeam", "identifier", element.getIdentifier().get(i), i);
4495    }
4496    if (element.hasStatusElement()) {
4497      composeEnum(t, "CareTeam", "status", element.getStatusElement(), -1);
4498    }
4499    for (int i = 0; i < element.getCategory().size(); i++) {
4500      composeCodeableConcept(t, "CareTeam", "category", element.getCategory().get(i), i);
4501    }
4502    if (element.hasNameElement()) {
4503      composeString(t, "CareTeam", "name", element.getNameElement(), -1);
4504    }
4505    if (element.hasSubject()) {
4506      composeReference(t, "CareTeam", "subject", element.getSubject(), -1);
4507    }
4508    if (element.hasPeriod()) {
4509      composePeriod(t, "CareTeam", "period", element.getPeriod(), -1);
4510    }
4511    for (int i = 0; i < element.getParticipant().size(); i++) {
4512      composeCareTeamParticipantComponent(t, "CareTeam", "participant", element.getParticipant().get(i), i);
4513    }
4514    for (int i = 0; i < element.getReason().size(); i++) {
4515      composeCodeableReference(t, "CareTeam", "reason", element.getReason().get(i), i);
4516    }
4517    for (int i = 0; i < element.getManagingOrganization().size(); i++) {
4518      composeReference(t, "CareTeam", "managingOrganization", element.getManagingOrganization().get(i), i);
4519    }
4520    for (int i = 0; i < element.getTelecom().size(); i++) {
4521      composeContactPoint(t, "CareTeam", "telecom", element.getTelecom().get(i), i);
4522    }
4523    for (int i = 0; i < element.getNote().size(); i++) {
4524      composeAnnotation(t, "CareTeam", "note", element.getNote().get(i), i);
4525    }
4526  }
4527
4528  protected void composeCareTeamParticipantComponent(Complex parent, String parentType, String name, CareTeam.CareTeamParticipantComponent element, int index) {
4529    if (element == null) 
4530      return;
4531    Complex t;
4532    if (Utilities.noString(parentType))
4533      t = parent;
4534    else {
4535      t = parent.predicate("fhir:"+name,index > -1);
4536    }
4537    composeBackboneElement(t, "participant", name, element, index);
4538    if (element.hasRole()) {
4539      composeCodeableConcept(t, "CareTeamParticipantComponent", "role", element.getRole(), -1);
4540    }
4541    if (element.hasMember()) {
4542      composeReference(t, "CareTeamParticipantComponent", "member", element.getMember(), -1);
4543    }
4544    if (element.hasOnBehalfOf()) {
4545      composeReference(t, "CareTeamParticipantComponent", "onBehalfOf", element.getOnBehalfOf(), -1);
4546    }
4547    if (element.hasCoverage()) {
4548      composeType(t, "CareTeamParticipantComponent", "coverage", element.getCoverage(), -1);
4549    }
4550  }
4551
4552  protected void composeChargeItem(Complex parent, String parentType, String name, ChargeItem element, int index) {
4553    if (element == null) 
4554      return;
4555    Complex t;
4556    if (Utilities.noString(parentType))
4557      t = parent;
4558    else {
4559      t = parent.predicate("fhir:"+name,index > -1);
4560    }
4561    composeDomainResource(t, "ChargeItem", name, element, index);
4562    for (int i = 0; i < element.getIdentifier().size(); i++) {
4563      composeIdentifier(t, "ChargeItem", "identifier", element.getIdentifier().get(i), i);
4564    }
4565    for (int i = 0; i < element.getDefinitionUri().size(); i++) {
4566      composeUri(t, "ChargeItem", "definitionUri", element.getDefinitionUri().get(i), i);
4567    }
4568    for (int i = 0; i < element.getDefinitionCanonical().size(); i++) {
4569      composeCanonical(t, "ChargeItem", "definitionCanonical", element.getDefinitionCanonical().get(i), i);
4570    }
4571    if (element.hasStatusElement()) {
4572      composeEnum(t, "ChargeItem", "status", element.getStatusElement(), -1);
4573    }
4574    for (int i = 0; i < element.getPartOf().size(); i++) {
4575      composeReference(t, "ChargeItem", "partOf", element.getPartOf().get(i), i);
4576    }
4577    if (element.hasCode()) {
4578      composeCodeableConcept(t, "ChargeItem", "code", element.getCode(), -1);
4579    }
4580    if (element.hasSubject()) {
4581      composeReference(t, "ChargeItem", "subject", element.getSubject(), -1);
4582    }
4583    if (element.hasEncounter()) {
4584      composeReference(t, "ChargeItem", "encounter", element.getEncounter(), -1);
4585    }
4586    if (element.hasOccurrence()) {
4587      composeType(t, "ChargeItem", "occurrence", element.getOccurrence(), -1);
4588    }
4589    for (int i = 0; i < element.getPerformer().size(); i++) {
4590      composeChargeItemPerformerComponent(t, "ChargeItem", "performer", element.getPerformer().get(i), i);
4591    }
4592    if (element.hasPerformingOrganization()) {
4593      composeReference(t, "ChargeItem", "performingOrganization", element.getPerformingOrganization(), -1);
4594    }
4595    if (element.hasRequestingOrganization()) {
4596      composeReference(t, "ChargeItem", "requestingOrganization", element.getRequestingOrganization(), -1);
4597    }
4598    if (element.hasCostCenter()) {
4599      composeReference(t, "ChargeItem", "costCenter", element.getCostCenter(), -1);
4600    }
4601    if (element.hasQuantity()) {
4602      composeQuantity(t, "ChargeItem", "quantity", element.getQuantity(), -1);
4603    }
4604    for (int i = 0; i < element.getBodysite().size(); i++) {
4605      composeCodeableConcept(t, "ChargeItem", "bodysite", element.getBodysite().get(i), i);
4606    }
4607    if (element.hasUnitPriceComponent()) {
4608      composeMonetaryComponent(t, "ChargeItem", "unitPriceComponent", element.getUnitPriceComponent(), -1);
4609    }
4610    if (element.hasTotalPriceComponent()) {
4611      composeMonetaryComponent(t, "ChargeItem", "totalPriceComponent", element.getTotalPriceComponent(), -1);
4612    }
4613    if (element.hasOverrideReason()) {
4614      composeCodeableConcept(t, "ChargeItem", "overrideReason", element.getOverrideReason(), -1);
4615    }
4616    if (element.hasEnterer()) {
4617      composeReference(t, "ChargeItem", "enterer", element.getEnterer(), -1);
4618    }
4619    if (element.hasEnteredDateElement()) {
4620      composeDateTime(t, "ChargeItem", "enteredDate", element.getEnteredDateElement(), -1);
4621    }
4622    for (int i = 0; i < element.getReason().size(); i++) {
4623      composeCodeableConcept(t, "ChargeItem", "reason", element.getReason().get(i), i);
4624    }
4625    for (int i = 0; i < element.getService().size(); i++) {
4626      composeCodeableReference(t, "ChargeItem", "service", element.getService().get(i), i);
4627    }
4628    for (int i = 0; i < element.getProduct().size(); i++) {
4629      composeCodeableReference(t, "ChargeItem", "product", element.getProduct().get(i), i);
4630    }
4631    for (int i = 0; i < element.getAccount().size(); i++) {
4632      composeReference(t, "ChargeItem", "account", element.getAccount().get(i), i);
4633    }
4634    for (int i = 0; i < element.getNote().size(); i++) {
4635      composeAnnotation(t, "ChargeItem", "note", element.getNote().get(i), i);
4636    }
4637    for (int i = 0; i < element.getSupportingInformation().size(); i++) {
4638      composeReference(t, "ChargeItem", "supportingInformation", element.getSupportingInformation().get(i), i);
4639    }
4640  }
4641
4642  protected void composeChargeItemPerformerComponent(Complex parent, String parentType, String name, ChargeItem.ChargeItemPerformerComponent element, int index) {
4643    if (element == null) 
4644      return;
4645    Complex t;
4646    if (Utilities.noString(parentType))
4647      t = parent;
4648    else {
4649      t = parent.predicate("fhir:"+name,index > -1);
4650    }
4651    composeBackboneElement(t, "performer", name, element, index);
4652    if (element.hasFunction()) {
4653      composeCodeableConcept(t, "ChargeItemPerformerComponent", "function", element.getFunction(), -1);
4654    }
4655    if (element.hasActor()) {
4656      composeReference(t, "ChargeItemPerformerComponent", "actor", element.getActor(), -1);
4657    }
4658  }
4659
4660  protected void composeChargeItemDefinition(Complex parent, String parentType, String name, ChargeItemDefinition element, int index) {
4661    if (element == null) 
4662      return;
4663    Complex t;
4664    if (Utilities.noString(parentType))
4665      t = parent;
4666    else {
4667      t = parent.predicate("fhir:"+name,index > -1);
4668    }
4669    composeMetadataResource(t, "ChargeItemDefinition", name, element, index);
4670    if (element.hasUrlElement()) {
4671      composeUri(t, "ChargeItemDefinition", "url", element.getUrlElement(), -1);
4672    }
4673    for (int i = 0; i < element.getIdentifier().size(); i++) {
4674      composeIdentifier(t, "ChargeItemDefinition", "identifier", element.getIdentifier().get(i), i);
4675    }
4676    if (element.hasVersionElement()) {
4677      composeString(t, "ChargeItemDefinition", "version", element.getVersionElement(), -1);
4678    }
4679    if (element.hasVersionAlgorithm()) {
4680      composeType(t, "ChargeItemDefinition", "versionAlgorithm", element.getVersionAlgorithm(), -1);
4681    }
4682    if (element.hasNameElement()) {
4683      composeString(t, "ChargeItemDefinition", "name", element.getNameElement(), -1);
4684    }
4685    if (element.hasTitleElement()) {
4686      composeString(t, "ChargeItemDefinition", "title", element.getTitleElement(), -1);
4687    }
4688    for (int i = 0; i < element.getDerivedFromUri().size(); i++) {
4689      composeUri(t, "ChargeItemDefinition", "derivedFromUri", element.getDerivedFromUri().get(i), i);
4690    }
4691    for (int i = 0; i < element.getPartOf().size(); i++) {
4692      composeCanonical(t, "ChargeItemDefinition", "partOf", element.getPartOf().get(i), i);
4693    }
4694    for (int i = 0; i < element.getReplaces().size(); i++) {
4695      composeCanonical(t, "ChargeItemDefinition", "replaces", element.getReplaces().get(i), i);
4696    }
4697    if (element.hasStatusElement()) {
4698      composeEnum(t, "ChargeItemDefinition", "status", element.getStatusElement(), -1);
4699    }
4700    if (element.hasExperimentalElement()) {
4701      composeBoolean(t, "ChargeItemDefinition", "experimental", element.getExperimentalElement(), -1);
4702    }
4703    if (element.hasDateElement()) {
4704      composeDateTime(t, "ChargeItemDefinition", "date", element.getDateElement(), -1);
4705    }
4706    if (element.hasPublisherElement()) {
4707      composeString(t, "ChargeItemDefinition", "publisher", element.getPublisherElement(), -1);
4708    }
4709    for (int i = 0; i < element.getContact().size(); i++) {
4710      composeContactDetail(t, "ChargeItemDefinition", "contact", element.getContact().get(i), i);
4711    }
4712    if (element.hasDescriptionElement()) {
4713      composeMarkdown(t, "ChargeItemDefinition", "description", element.getDescriptionElement(), -1);
4714    }
4715    for (int i = 0; i < element.getUseContext().size(); i++) {
4716      composeUsageContext(t, "ChargeItemDefinition", "useContext", element.getUseContext().get(i), i);
4717    }
4718    for (int i = 0; i < element.getJurisdiction().size(); i++) {
4719      composeCodeableConcept(t, "ChargeItemDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
4720    }
4721    if (element.hasPurposeElement()) {
4722      composeMarkdown(t, "ChargeItemDefinition", "purpose", element.getPurposeElement(), -1);
4723    }
4724    if (element.hasCopyrightElement()) {
4725      composeMarkdown(t, "ChargeItemDefinition", "copyright", element.getCopyrightElement(), -1);
4726    }
4727    if (element.hasCopyrightLabelElement()) {
4728      composeString(t, "ChargeItemDefinition", "copyrightLabel", element.getCopyrightLabelElement(), -1);
4729    }
4730    if (element.hasApprovalDateElement()) {
4731      composeDate(t, "ChargeItemDefinition", "approvalDate", element.getApprovalDateElement(), -1);
4732    }
4733    if (element.hasLastReviewDateElement()) {
4734      composeDate(t, "ChargeItemDefinition", "lastReviewDate", element.getLastReviewDateElement(), -1);
4735    }
4736    if (element.hasCode()) {
4737      composeCodeableConcept(t, "ChargeItemDefinition", "code", element.getCode(), -1);
4738    }
4739    for (int i = 0; i < element.getInstance().size(); i++) {
4740      composeReference(t, "ChargeItemDefinition", "instance", element.getInstance().get(i), i);
4741    }
4742    for (int i = 0; i < element.getApplicability().size(); i++) {
4743      composeChargeItemDefinitionApplicabilityComponent(t, "ChargeItemDefinition", "applicability", element.getApplicability().get(i), i);
4744    }
4745    for (int i = 0; i < element.getPropertyGroup().size(); i++) {
4746      composeChargeItemDefinitionPropertyGroupComponent(t, "ChargeItemDefinition", "propertyGroup", element.getPropertyGroup().get(i), i);
4747    }
4748  }
4749
4750  protected void composeChargeItemDefinitionApplicabilityComponent(Complex parent, String parentType, String name, ChargeItemDefinition.ChargeItemDefinitionApplicabilityComponent element, int index) {
4751    if (element == null) 
4752      return;
4753    Complex t;
4754    if (Utilities.noString(parentType))
4755      t = parent;
4756    else {
4757      t = parent.predicate("fhir:"+name,index > -1);
4758    }
4759    composeBackboneElement(t, "applicability", name, element, index);
4760    if (element.hasCondition()) {
4761      composeExpression(t, "ChargeItemDefinitionApplicabilityComponent", "condition", element.getCondition(), -1);
4762    }
4763    if (element.hasEffectivePeriod()) {
4764      composePeriod(t, "ChargeItemDefinitionApplicabilityComponent", "effectivePeriod", element.getEffectivePeriod(), -1);
4765    }
4766    if (element.hasRelatedArtifact()) {
4767      composeRelatedArtifact(t, "ChargeItemDefinitionApplicabilityComponent", "relatedArtifact", element.getRelatedArtifact(), -1);
4768    }
4769  }
4770
4771  protected void composeChargeItemDefinitionPropertyGroupComponent(Complex parent, String parentType, String name, ChargeItemDefinition.ChargeItemDefinitionPropertyGroupComponent element, int index) {
4772    if (element == null) 
4773      return;
4774    Complex t;
4775    if (Utilities.noString(parentType))
4776      t = parent;
4777    else {
4778      t = parent.predicate("fhir:"+name,index > -1);
4779    }
4780    composeBackboneElement(t, "propertyGroup", name, element, index);
4781    for (int i = 0; i < element.getApplicability().size(); i++) {
4782      composeChargeItemDefinitionApplicabilityComponent(t, "ChargeItemDefinitionPropertyGroupComponent", "applicability", element.getApplicability().get(i), i);
4783    }
4784    for (int i = 0; i < element.getPriceComponent().size(); i++) {
4785      composeMonetaryComponent(t, "ChargeItemDefinitionPropertyGroupComponent", "priceComponent", element.getPriceComponent().get(i), i);
4786    }
4787  }
4788
4789  protected void composeCitation(Complex parent, String parentType, String name, Citation element, int index) {
4790    if (element == null) 
4791      return;
4792    Complex t;
4793    if (Utilities.noString(parentType))
4794      t = parent;
4795    else {
4796      t = parent.predicate("fhir:"+name,index > -1);
4797    }
4798    composeMetadataResource(t, "Citation", name, element, index);
4799    if (element.hasUrlElement()) {
4800      composeUri(t, "Citation", "url", element.getUrlElement(), -1);
4801    }
4802    for (int i = 0; i < element.getIdentifier().size(); i++) {
4803      composeIdentifier(t, "Citation", "identifier", element.getIdentifier().get(i), i);
4804    }
4805    if (element.hasVersionElement()) {
4806      composeString(t, "Citation", "version", element.getVersionElement(), -1);
4807    }
4808    if (element.hasVersionAlgorithm()) {
4809      composeType(t, "Citation", "versionAlgorithm", element.getVersionAlgorithm(), -1);
4810    }
4811    if (element.hasNameElement()) {
4812      composeString(t, "Citation", "name", element.getNameElement(), -1);
4813    }
4814    if (element.hasTitleElement()) {
4815      composeString(t, "Citation", "title", element.getTitleElement(), -1);
4816    }
4817    if (element.hasStatusElement()) {
4818      composeEnum(t, "Citation", "status", element.getStatusElement(), -1);
4819    }
4820    if (element.hasExperimentalElement()) {
4821      composeBoolean(t, "Citation", "experimental", element.getExperimentalElement(), -1);
4822    }
4823    if (element.hasDateElement()) {
4824      composeDateTime(t, "Citation", "date", element.getDateElement(), -1);
4825    }
4826    if (element.hasPublisherElement()) {
4827      composeString(t, "Citation", "publisher", element.getPublisherElement(), -1);
4828    }
4829    for (int i = 0; i < element.getContact().size(); i++) {
4830      composeContactDetail(t, "Citation", "contact", element.getContact().get(i), i);
4831    }
4832    if (element.hasDescriptionElement()) {
4833      composeMarkdown(t, "Citation", "description", element.getDescriptionElement(), -1);
4834    }
4835    for (int i = 0; i < element.getUseContext().size(); i++) {
4836      composeUsageContext(t, "Citation", "useContext", element.getUseContext().get(i), i);
4837    }
4838    for (int i = 0; i < element.getJurisdiction().size(); i++) {
4839      composeCodeableConcept(t, "Citation", "jurisdiction", element.getJurisdiction().get(i), i);
4840    }
4841    if (element.hasPurposeElement()) {
4842      composeMarkdown(t, "Citation", "purpose", element.getPurposeElement(), -1);
4843    }
4844    if (element.hasCopyrightElement()) {
4845      composeMarkdown(t, "Citation", "copyright", element.getCopyrightElement(), -1);
4846    }
4847    if (element.hasCopyrightLabelElement()) {
4848      composeString(t, "Citation", "copyrightLabel", element.getCopyrightLabelElement(), -1);
4849    }
4850    if (element.hasApprovalDateElement()) {
4851      composeDate(t, "Citation", "approvalDate", element.getApprovalDateElement(), -1);
4852    }
4853    if (element.hasLastReviewDateElement()) {
4854      composeDate(t, "Citation", "lastReviewDate", element.getLastReviewDateElement(), -1);
4855    }
4856    if (element.hasEffectivePeriod()) {
4857      composePeriod(t, "Citation", "effectivePeriod", element.getEffectivePeriod(), -1);
4858    }
4859    for (int i = 0; i < element.getAuthor().size(); i++) {
4860      composeContactDetail(t, "Citation", "author", element.getAuthor().get(i), i);
4861    }
4862    for (int i = 0; i < element.getEditor().size(); i++) {
4863      composeContactDetail(t, "Citation", "editor", element.getEditor().get(i), i);
4864    }
4865    for (int i = 0; i < element.getReviewer().size(); i++) {
4866      composeContactDetail(t, "Citation", "reviewer", element.getReviewer().get(i), i);
4867    }
4868    for (int i = 0; i < element.getEndorser().size(); i++) {
4869      composeContactDetail(t, "Citation", "endorser", element.getEndorser().get(i), i);
4870    }
4871    for (int i = 0; i < element.getSummary().size(); i++) {
4872      composeCitationSummaryComponent(t, "Citation", "summary", element.getSummary().get(i), i);
4873    }
4874    for (int i = 0; i < element.getClassification().size(); i++) {
4875      composeCitationClassificationComponent(t, "Citation", "classification", element.getClassification().get(i), i);
4876    }
4877    for (int i = 0; i < element.getNote().size(); i++) {
4878      composeAnnotation(t, "Citation", "note", element.getNote().get(i), i);
4879    }
4880    for (int i = 0; i < element.getCurrentState().size(); i++) {
4881      composeCodeableConcept(t, "Citation", "currentState", element.getCurrentState().get(i), i);
4882    }
4883    for (int i = 0; i < element.getStatusDate().size(); i++) {
4884      composeCitationStatusDateComponent(t, "Citation", "statusDate", element.getStatusDate().get(i), i);
4885    }
4886    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
4887      composeRelatedArtifact(t, "Citation", "relatedArtifact", element.getRelatedArtifact().get(i), i);
4888    }
4889    if (element.hasCitedArtifact()) {
4890      composeCitationCitedArtifactComponent(t, "Citation", "citedArtifact", element.getCitedArtifact(), -1);
4891    }
4892  }
4893
4894  protected void composeCitationSummaryComponent(Complex parent, String parentType, String name, Citation.CitationSummaryComponent element, int index) {
4895    if (element == null) 
4896      return;
4897    Complex t;
4898    if (Utilities.noString(parentType))
4899      t = parent;
4900    else {
4901      t = parent.predicate("fhir:"+name,index > -1);
4902    }
4903    composeBackboneElement(t, "summary", name, element, index);
4904    if (element.hasStyle()) {
4905      composeCodeableConcept(t, "CitationSummaryComponent", "style", element.getStyle(), -1);
4906    }
4907    if (element.hasTextElement()) {
4908      composeMarkdown(t, "CitationSummaryComponent", "text", element.getTextElement(), -1);
4909    }
4910  }
4911
4912  protected void composeCitationClassificationComponent(Complex parent, String parentType, String name, Citation.CitationClassificationComponent element, int index) {
4913    if (element == null) 
4914      return;
4915    Complex t;
4916    if (Utilities.noString(parentType))
4917      t = parent;
4918    else {
4919      t = parent.predicate("fhir:"+name,index > -1);
4920    }
4921    composeBackboneElement(t, "classification", name, element, index);
4922    if (element.hasType()) {
4923      composeCodeableConcept(t, "CitationClassificationComponent", "type", element.getType(), -1);
4924    }
4925    for (int i = 0; i < element.getClassifier().size(); i++) {
4926      composeCodeableConcept(t, "CitationClassificationComponent", "classifier", element.getClassifier().get(i), i);
4927    }
4928  }
4929
4930  protected void composeCitationStatusDateComponent(Complex parent, String parentType, String name, Citation.CitationStatusDateComponent element, int index) {
4931    if (element == null) 
4932      return;
4933    Complex t;
4934    if (Utilities.noString(parentType))
4935      t = parent;
4936    else {
4937      t = parent.predicate("fhir:"+name,index > -1);
4938    }
4939    composeBackboneElement(t, "statusDate", name, element, index);
4940    if (element.hasActivity()) {
4941      composeCodeableConcept(t, "CitationStatusDateComponent", "activity", element.getActivity(), -1);
4942    }
4943    if (element.hasActualElement()) {
4944      composeBoolean(t, "CitationStatusDateComponent", "actual", element.getActualElement(), -1);
4945    }
4946    if (element.hasPeriod()) {
4947      composePeriod(t, "CitationStatusDateComponent", "period", element.getPeriod(), -1);
4948    }
4949  }
4950
4951  protected void composeCitationCitedArtifactComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactComponent element, int index) {
4952    if (element == null) 
4953      return;
4954    Complex t;
4955    if (Utilities.noString(parentType))
4956      t = parent;
4957    else {
4958      t = parent.predicate("fhir:"+name,index > -1);
4959    }
4960    composeBackboneElement(t, "citedArtifact", name, element, index);
4961    for (int i = 0; i < element.getIdentifier().size(); i++) {
4962      composeIdentifier(t, "CitationCitedArtifactComponent", "identifier", element.getIdentifier().get(i), i);
4963    }
4964    for (int i = 0; i < element.getRelatedIdentifier().size(); i++) {
4965      composeIdentifier(t, "CitationCitedArtifactComponent", "relatedIdentifier", element.getRelatedIdentifier().get(i), i);
4966    }
4967    if (element.hasDateAccessedElement()) {
4968      composeDateTime(t, "CitationCitedArtifactComponent", "dateAccessed", element.getDateAccessedElement(), -1);
4969    }
4970    if (element.hasVersion()) {
4971      composeCitationCitedArtifactVersionComponent(t, "CitationCitedArtifactComponent", "version", element.getVersion(), -1);
4972    }
4973    for (int i = 0; i < element.getCurrentState().size(); i++) {
4974      composeCodeableConcept(t, "CitationCitedArtifactComponent", "currentState", element.getCurrentState().get(i), i);
4975    }
4976    for (int i = 0; i < element.getStatusDate().size(); i++) {
4977      composeCitationCitedArtifactStatusDateComponent(t, "CitationCitedArtifactComponent", "statusDate", element.getStatusDate().get(i), i);
4978    }
4979    for (int i = 0; i < element.getTitle().size(); i++) {
4980      composeCitationCitedArtifactTitleComponent(t, "CitationCitedArtifactComponent", "title", element.getTitle().get(i), i);
4981    }
4982    for (int i = 0; i < element.getAbstract().size(); i++) {
4983      composeCitationCitedArtifactAbstractComponent(t, "CitationCitedArtifactComponent", "abstract", element.getAbstract().get(i), i);
4984    }
4985    if (element.hasPart()) {
4986      composeCitationCitedArtifactPartComponent(t, "CitationCitedArtifactComponent", "part", element.getPart(), -1);
4987    }
4988    for (int i = 0; i < element.getRelatesTo().size(); i++) {
4989      composeCitationCitedArtifactRelatesToComponent(t, "CitationCitedArtifactComponent", "relatesTo", element.getRelatesTo().get(i), i);
4990    }
4991    for (int i = 0; i < element.getPublicationForm().size(); i++) {
4992      composeCitationCitedArtifactPublicationFormComponent(t, "CitationCitedArtifactComponent", "publicationForm", element.getPublicationForm().get(i), i);
4993    }
4994    for (int i = 0; i < element.getWebLocation().size(); i++) {
4995      composeCitationCitedArtifactWebLocationComponent(t, "CitationCitedArtifactComponent", "webLocation", element.getWebLocation().get(i), i);
4996    }
4997    for (int i = 0; i < element.getClassification().size(); i++) {
4998      composeCitationCitedArtifactClassificationComponent(t, "CitationCitedArtifactComponent", "classification", element.getClassification().get(i), i);
4999    }
5000    if (element.hasContributorship()) {
5001      composeCitationCitedArtifactContributorshipComponent(t, "CitationCitedArtifactComponent", "contributorship", element.getContributorship(), -1);
5002    }
5003    for (int i = 0; i < element.getNote().size(); i++) {
5004      composeAnnotation(t, "CitationCitedArtifactComponent", "note", element.getNote().get(i), i);
5005    }
5006  }
5007
5008  protected void composeCitationCitedArtifactVersionComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactVersionComponent element, int index) {
5009    if (element == null) 
5010      return;
5011    Complex t;
5012    if (Utilities.noString(parentType))
5013      t = parent;
5014    else {
5015      t = parent.predicate("fhir:"+name,index > -1);
5016    }
5017    composeBackboneElement(t, "version", name, element, index);
5018    if (element.hasValueElement()) {
5019      composeString(t, "CitationCitedArtifactVersionComponent", "value", element.getValueElement(), -1);
5020    }
5021    if (element.hasBaseCitation()) {
5022      composeReference(t, "CitationCitedArtifactVersionComponent", "baseCitation", element.getBaseCitation(), -1);
5023    }
5024  }
5025
5026  protected void composeCitationCitedArtifactStatusDateComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactStatusDateComponent 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:"+name,index > -1);
5034    }
5035    composeBackboneElement(t, "statusDate", name, element, index);
5036    if (element.hasActivity()) {
5037      composeCodeableConcept(t, "CitationCitedArtifactStatusDateComponent", "activity", element.getActivity(), -1);
5038    }
5039    if (element.hasActualElement()) {
5040      composeBoolean(t, "CitationCitedArtifactStatusDateComponent", "actual", element.getActualElement(), -1);
5041    }
5042    if (element.hasPeriod()) {
5043      composePeriod(t, "CitationCitedArtifactStatusDateComponent", "period", element.getPeriod(), -1);
5044    }
5045  }
5046
5047  protected void composeCitationCitedArtifactTitleComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactTitleComponent element, int index) {
5048    if (element == null) 
5049      return;
5050    Complex t;
5051    if (Utilities.noString(parentType))
5052      t = parent;
5053    else {
5054      t = parent.predicate("fhir:"+name,index > -1);
5055    }
5056    composeBackboneElement(t, "title", name, element, index);
5057    for (int i = 0; i < element.getType().size(); i++) {
5058      composeCodeableConcept(t, "CitationCitedArtifactTitleComponent", "type", element.getType().get(i), i);
5059    }
5060    if (element.hasLanguage()) {
5061      composeCodeableConcept(t, "CitationCitedArtifactTitleComponent", "language", element.getLanguage(), -1);
5062    }
5063    if (element.hasTextElement()) {
5064      composeMarkdown(t, "CitationCitedArtifactTitleComponent", "text", element.getTextElement(), -1);
5065    }
5066  }
5067
5068  protected void composeCitationCitedArtifactAbstractComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactAbstractComponent element, int index) {
5069    if (element == null) 
5070      return;
5071    Complex t;
5072    if (Utilities.noString(parentType))
5073      t = parent;
5074    else {
5075      t = parent.predicate("fhir:"+name,index > -1);
5076    }
5077    composeBackboneElement(t, "abstract", name, element, index);
5078    if (element.hasType()) {
5079      composeCodeableConcept(t, "CitationCitedArtifactAbstractComponent", "type", element.getType(), -1);
5080    }
5081    if (element.hasLanguage()) {
5082      composeCodeableConcept(t, "CitationCitedArtifactAbstractComponent", "language", element.getLanguage(), -1);
5083    }
5084    if (element.hasTextElement()) {
5085      composeMarkdown(t, "CitationCitedArtifactAbstractComponent", "text", element.getTextElement(), -1);
5086    }
5087    if (element.hasCopyrightElement()) {
5088      composeMarkdown(t, "CitationCitedArtifactAbstractComponent", "copyright", element.getCopyrightElement(), -1);
5089    }
5090  }
5091
5092  protected void composeCitationCitedArtifactPartComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactPartComponent element, int index) {
5093    if (element == null) 
5094      return;
5095    Complex t;
5096    if (Utilities.noString(parentType))
5097      t = parent;
5098    else {
5099      t = parent.predicate("fhir:"+name,index > -1);
5100    }
5101    composeBackboneElement(t, "part", name, element, index);
5102    if (element.hasType()) {
5103      composeCodeableConcept(t, "CitationCitedArtifactPartComponent", "type", element.getType(), -1);
5104    }
5105    if (element.hasValueElement()) {
5106      composeString(t, "CitationCitedArtifactPartComponent", "value", element.getValueElement(), -1);
5107    }
5108    if (element.hasBaseCitation()) {
5109      composeReference(t, "CitationCitedArtifactPartComponent", "baseCitation", element.getBaseCitation(), -1);
5110    }
5111  }
5112
5113  protected void composeCitationCitedArtifactRelatesToComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactRelatesToComponent element, int index) {
5114    if (element == null) 
5115      return;
5116    Complex t;
5117    if (Utilities.noString(parentType))
5118      t = parent;
5119    else {
5120      t = parent.predicate("fhir:"+name,index > -1);
5121    }
5122    composeBackboneElement(t, "relatesTo", name, element, index);
5123    if (element.hasTypeElement()) {
5124      composeEnum(t, "CitationCitedArtifactRelatesToComponent", "type", element.getTypeElement(), -1);
5125    }
5126    for (int i = 0; i < element.getClassifier().size(); i++) {
5127      composeCodeableConcept(t, "CitationCitedArtifactRelatesToComponent", "classifier", element.getClassifier().get(i), i);
5128    }
5129    if (element.hasLabelElement()) {
5130      composeString(t, "CitationCitedArtifactRelatesToComponent", "label", element.getLabelElement(), -1);
5131    }
5132    if (element.hasDisplayElement()) {
5133      composeString(t, "CitationCitedArtifactRelatesToComponent", "display", element.getDisplayElement(), -1);
5134    }
5135    if (element.hasCitationElement()) {
5136      composeMarkdown(t, "CitationCitedArtifactRelatesToComponent", "citation", element.getCitationElement(), -1);
5137    }
5138    if (element.hasDocument()) {
5139      composeAttachment(t, "CitationCitedArtifactRelatesToComponent", "document", element.getDocument(), -1);
5140    }
5141    if (element.hasResourceElement()) {
5142      composeCanonical(t, "CitationCitedArtifactRelatesToComponent", "resource", element.getResourceElement(), -1);
5143    }
5144    if (element.hasResourceReference()) {
5145      composeReference(t, "CitationCitedArtifactRelatesToComponent", "resourceReference", element.getResourceReference(), -1);
5146    }
5147  }
5148
5149  protected void composeCitationCitedArtifactPublicationFormComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactPublicationFormComponent element, int index) {
5150    if (element == null) 
5151      return;
5152    Complex t;
5153    if (Utilities.noString(parentType))
5154      t = parent;
5155    else {
5156      t = parent.predicate("fhir:"+name,index > -1);
5157    }
5158    composeBackboneElement(t, "publicationForm", name, element, index);
5159    if (element.hasPublishedIn()) {
5160      composeCitationCitedArtifactPublicationFormPublishedInComponent(t, "CitationCitedArtifactPublicationFormComponent", "publishedIn", element.getPublishedIn(), -1);
5161    }
5162    if (element.hasCitedMedium()) {
5163      composeCodeableConcept(t, "CitationCitedArtifactPublicationFormComponent", "citedMedium", element.getCitedMedium(), -1);
5164    }
5165    if (element.hasVolumeElement()) {
5166      composeString(t, "CitationCitedArtifactPublicationFormComponent", "volume", element.getVolumeElement(), -1);
5167    }
5168    if (element.hasIssueElement()) {
5169      composeString(t, "CitationCitedArtifactPublicationFormComponent", "issue", element.getIssueElement(), -1);
5170    }
5171    if (element.hasArticleDateElement()) {
5172      composeDateTime(t, "CitationCitedArtifactPublicationFormComponent", "articleDate", element.getArticleDateElement(), -1);
5173    }
5174    if (element.hasPublicationDateTextElement()) {
5175      composeString(t, "CitationCitedArtifactPublicationFormComponent", "publicationDateText", element.getPublicationDateTextElement(), -1);
5176    }
5177    if (element.hasPublicationDateSeasonElement()) {
5178      composeString(t, "CitationCitedArtifactPublicationFormComponent", "publicationDateSeason", element.getPublicationDateSeasonElement(), -1);
5179    }
5180    if (element.hasLastRevisionDateElement()) {
5181      composeDateTime(t, "CitationCitedArtifactPublicationFormComponent", "lastRevisionDate", element.getLastRevisionDateElement(), -1);
5182    }
5183    for (int i = 0; i < element.getLanguage().size(); i++) {
5184      composeCodeableConcept(t, "CitationCitedArtifactPublicationFormComponent", "language", element.getLanguage().get(i), i);
5185    }
5186    if (element.hasAccessionNumberElement()) {
5187      composeString(t, "CitationCitedArtifactPublicationFormComponent", "accessionNumber", element.getAccessionNumberElement(), -1);
5188    }
5189    if (element.hasPageStringElement()) {
5190      composeString(t, "CitationCitedArtifactPublicationFormComponent", "pageString", element.getPageStringElement(), -1);
5191    }
5192    if (element.hasFirstPageElement()) {
5193      composeString(t, "CitationCitedArtifactPublicationFormComponent", "firstPage", element.getFirstPageElement(), -1);
5194    }
5195    if (element.hasLastPageElement()) {
5196      composeString(t, "CitationCitedArtifactPublicationFormComponent", "lastPage", element.getLastPageElement(), -1);
5197    }
5198    if (element.hasPageCountElement()) {
5199      composeString(t, "CitationCitedArtifactPublicationFormComponent", "pageCount", element.getPageCountElement(), -1);
5200    }
5201    if (element.hasCopyrightElement()) {
5202      composeMarkdown(t, "CitationCitedArtifactPublicationFormComponent", "copyright", element.getCopyrightElement(), -1);
5203    }
5204  }
5205
5206  protected void composeCitationCitedArtifactPublicationFormPublishedInComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactPublicationFormPublishedInComponent element, int index) {
5207    if (element == null) 
5208      return;
5209    Complex t;
5210    if (Utilities.noString(parentType))
5211      t = parent;
5212    else {
5213      t = parent.predicate("fhir:"+name,index > -1);
5214    }
5215    composeBackboneElement(t, "publishedIn", name, element, index);
5216    if (element.hasType()) {
5217      composeCodeableConcept(t, "CitationCitedArtifactPublicationFormPublishedInComponent", "type", element.getType(), -1);
5218    }
5219    for (int i = 0; i < element.getIdentifier().size(); i++) {
5220      composeIdentifier(t, "CitationCitedArtifactPublicationFormPublishedInComponent", "identifier", element.getIdentifier().get(i), i);
5221    }
5222    if (element.hasTitleElement()) {
5223      composeString(t, "CitationCitedArtifactPublicationFormPublishedInComponent", "title", element.getTitleElement(), -1);
5224    }
5225    if (element.hasPublisher()) {
5226      composeReference(t, "CitationCitedArtifactPublicationFormPublishedInComponent", "publisher", element.getPublisher(), -1);
5227    }
5228    if (element.hasPublisherLocationElement()) {
5229      composeString(t, "CitationCitedArtifactPublicationFormPublishedInComponent", "publisherLocation", element.getPublisherLocationElement(), -1);
5230    }
5231  }
5232
5233  protected void composeCitationCitedArtifactWebLocationComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactWebLocationComponent element, int index) {
5234    if (element == null) 
5235      return;
5236    Complex t;
5237    if (Utilities.noString(parentType))
5238      t = parent;
5239    else {
5240      t = parent.predicate("fhir:"+name,index > -1);
5241    }
5242    composeBackboneElement(t, "webLocation", name, element, index);
5243    for (int i = 0; i < element.getClassifier().size(); i++) {
5244      composeCodeableConcept(t, "CitationCitedArtifactWebLocationComponent", "classifier", element.getClassifier().get(i), i);
5245    }
5246    if (element.hasUrlElement()) {
5247      composeUri(t, "CitationCitedArtifactWebLocationComponent", "url", element.getUrlElement(), -1);
5248    }
5249  }
5250
5251  protected void composeCitationCitedArtifactClassificationComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactClassificationComponent 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:"+name,index > -1);
5259    }
5260    composeBackboneElement(t, "classification", name, element, index);
5261    if (element.hasType()) {
5262      composeCodeableConcept(t, "CitationCitedArtifactClassificationComponent", "type", element.getType(), -1);
5263    }
5264    for (int i = 0; i < element.getClassifier().size(); i++) {
5265      composeCodeableConcept(t, "CitationCitedArtifactClassificationComponent", "classifier", element.getClassifier().get(i), i);
5266    }
5267    for (int i = 0; i < element.getArtifactAssessment().size(); i++) {
5268      composeReference(t, "CitationCitedArtifactClassificationComponent", "artifactAssessment", element.getArtifactAssessment().get(i), i);
5269    }
5270  }
5271
5272  protected void composeCitationCitedArtifactContributorshipComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactContributorshipComponent element, int index) {
5273    if (element == null) 
5274      return;
5275    Complex t;
5276    if (Utilities.noString(parentType))
5277      t = parent;
5278    else {
5279      t = parent.predicate("fhir:"+name,index > -1);
5280    }
5281    composeBackboneElement(t, "contributorship", name, element, index);
5282    if (element.hasCompleteElement()) {
5283      composeBoolean(t, "CitationCitedArtifactContributorshipComponent", "complete", element.getCompleteElement(), -1);
5284    }
5285    for (int i = 0; i < element.getEntry().size(); i++) {
5286      composeCitationCitedArtifactContributorshipEntryComponent(t, "CitationCitedArtifactContributorshipComponent", "entry", element.getEntry().get(i), i);
5287    }
5288    for (int i = 0; i < element.getSummary().size(); i++) {
5289      composeCitationContributorshipSummaryComponent(t, "CitationCitedArtifactContributorshipComponent", "summary", element.getSummary().get(i), i);
5290    }
5291  }
5292
5293  protected void composeCitationCitedArtifactContributorshipEntryComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactContributorshipEntryComponent 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:"+name,index > -1);
5301    }
5302    composeBackboneElement(t, "entry", name, element, index);
5303    if (element.hasContributor()) {
5304      composeReference(t, "CitationCitedArtifactContributorshipEntryComponent", "contributor", element.getContributor(), -1);
5305    }
5306    if (element.hasForenameInitialsElement()) {
5307      composeString(t, "CitationCitedArtifactContributorshipEntryComponent", "forenameInitials", element.getForenameInitialsElement(), -1);
5308    }
5309    for (int i = 0; i < element.getAffiliation().size(); i++) {
5310      composeReference(t, "CitationCitedArtifactContributorshipEntryComponent", "affiliation", element.getAffiliation().get(i), i);
5311    }
5312    for (int i = 0; i < element.getContributionType().size(); i++) {
5313      composeCodeableConcept(t, "CitationCitedArtifactContributorshipEntryComponent", "contributionType", element.getContributionType().get(i), i);
5314    }
5315    if (element.hasRole()) {
5316      composeCodeableConcept(t, "CitationCitedArtifactContributorshipEntryComponent", "role", element.getRole(), -1);
5317    }
5318    for (int i = 0; i < element.getContributionInstance().size(); i++) {
5319      composeCitationCitedArtifactContributorshipEntryContributionInstanceComponent(t, "CitationCitedArtifactContributorshipEntryComponent", "contributionInstance", element.getContributionInstance().get(i), i);
5320    }
5321    if (element.hasCorrespondingContactElement()) {
5322      composeBoolean(t, "CitationCitedArtifactContributorshipEntryComponent", "correspondingContact", element.getCorrespondingContactElement(), -1);
5323    }
5324    if (element.hasRankingOrderElement()) {
5325      composePositiveInt(t, "CitationCitedArtifactContributorshipEntryComponent", "rankingOrder", element.getRankingOrderElement(), -1);
5326    }
5327  }
5328
5329  protected void composeCitationCitedArtifactContributorshipEntryContributionInstanceComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactContributorshipEntryContributionInstanceComponent element, int index) {
5330    if (element == null) 
5331      return;
5332    Complex t;
5333    if (Utilities.noString(parentType))
5334      t = parent;
5335    else {
5336      t = parent.predicate("fhir:"+name,index > -1);
5337    }
5338    composeBackboneElement(t, "contributionInstance", name, element, index);
5339    if (element.hasType()) {
5340      composeCodeableConcept(t, "CitationCitedArtifactContributorshipEntryContributionInstanceComponent", "type", element.getType(), -1);
5341    }
5342    if (element.hasTimeElement()) {
5343      composeDateTime(t, "CitationCitedArtifactContributorshipEntryContributionInstanceComponent", "time", element.getTimeElement(), -1);
5344    }
5345  }
5346
5347  protected void composeCitationContributorshipSummaryComponent(Complex parent, String parentType, String name, Citation.ContributorshipSummaryComponent element, int index) {
5348    if (element == null) 
5349      return;
5350    Complex t;
5351    if (Utilities.noString(parentType))
5352      t = parent;
5353    else {
5354      t = parent.predicate("fhir:"+name,index > -1);
5355    }
5356    composeBackboneElement(t, "summary", name, element, index);
5357    if (element.hasType()) {
5358      composeCodeableConcept(t, "ContributorshipSummaryComponent", "type", element.getType(), -1);
5359    }
5360    if (element.hasStyle()) {
5361      composeCodeableConcept(t, "ContributorshipSummaryComponent", "style", element.getStyle(), -1);
5362    }
5363    if (element.hasSource()) {
5364      composeCodeableConcept(t, "ContributorshipSummaryComponent", "source", element.getSource(), -1);
5365    }
5366    if (element.hasValueElement()) {
5367      composeMarkdown(t, "ContributorshipSummaryComponent", "value", element.getValueElement(), -1);
5368    }
5369  }
5370
5371  protected void composeClaim(Complex parent, String parentType, String name, Claim element, int index) {
5372    if (element == null) 
5373      return;
5374    Complex t;
5375    if (Utilities.noString(parentType))
5376      t = parent;
5377    else {
5378      t = parent.predicate("fhir:"+name,index > -1);
5379    }
5380    composeDomainResource(t, "Claim", name, element, index);
5381    for (int i = 0; i < element.getIdentifier().size(); i++) {
5382      composeIdentifier(t, "Claim", "identifier", element.getIdentifier().get(i), i);
5383    }
5384    for (int i = 0; i < element.getTraceNumber().size(); i++) {
5385      composeIdentifier(t, "Claim", "traceNumber", element.getTraceNumber().get(i), i);
5386    }
5387    if (element.hasStatusElement()) {
5388      composeEnum(t, "Claim", "status", element.getStatusElement(), -1);
5389    }
5390    if (element.hasType()) {
5391      composeCodeableConcept(t, "Claim", "type", element.getType(), -1);
5392    }
5393    if (element.hasSubType()) {
5394      composeCodeableConcept(t, "Claim", "subType", element.getSubType(), -1);
5395    }
5396    if (element.hasUseElement()) {
5397      composeEnum(t, "Claim", "use", element.getUseElement(), -1);
5398    }
5399    if (element.hasPatient()) {
5400      composeReference(t, "Claim", "patient", element.getPatient(), -1);
5401    }
5402    if (element.hasBillablePeriod()) {
5403      composePeriod(t, "Claim", "billablePeriod", element.getBillablePeriod(), -1);
5404    }
5405    if (element.hasCreatedElement()) {
5406      composeDateTime(t, "Claim", "created", element.getCreatedElement(), -1);
5407    }
5408    if (element.hasEnterer()) {
5409      composeReference(t, "Claim", "enterer", element.getEnterer(), -1);
5410    }
5411    if (element.hasInsurer()) {
5412      composeReference(t, "Claim", "insurer", element.getInsurer(), -1);
5413    }
5414    if (element.hasProvider()) {
5415      composeReference(t, "Claim", "provider", element.getProvider(), -1);
5416    }
5417    if (element.hasPriority()) {
5418      composeCodeableConcept(t, "Claim", "priority", element.getPriority(), -1);
5419    }
5420    if (element.hasFundsReserve()) {
5421      composeCodeableConcept(t, "Claim", "fundsReserve", element.getFundsReserve(), -1);
5422    }
5423    for (int i = 0; i < element.getRelated().size(); i++) {
5424      composeClaimRelatedClaimComponent(t, "Claim", "related", element.getRelated().get(i), i);
5425    }
5426    if (element.hasPrescription()) {
5427      composeReference(t, "Claim", "prescription", element.getPrescription(), -1);
5428    }
5429    if (element.hasOriginalPrescription()) {
5430      composeReference(t, "Claim", "originalPrescription", element.getOriginalPrescription(), -1);
5431    }
5432    if (element.hasPayee()) {
5433      composeClaimPayeeComponent(t, "Claim", "payee", element.getPayee(), -1);
5434    }
5435    if (element.hasReferral()) {
5436      composeReference(t, "Claim", "referral", element.getReferral(), -1);
5437    }
5438    for (int i = 0; i < element.getEncounter().size(); i++) {
5439      composeReference(t, "Claim", "encounter", element.getEncounter().get(i), i);
5440    }
5441    if (element.hasFacility()) {
5442      composeReference(t, "Claim", "facility", element.getFacility(), -1);
5443    }
5444    if (element.hasDiagnosisRelatedGroup()) {
5445      composeCodeableConcept(t, "Claim", "diagnosisRelatedGroup", element.getDiagnosisRelatedGroup(), -1);
5446    }
5447    for (int i = 0; i < element.getEvent().size(); i++) {
5448      composeClaimEventComponent(t, "Claim", "event", element.getEvent().get(i), i);
5449    }
5450    for (int i = 0; i < element.getCareTeam().size(); i++) {
5451      composeClaimCareTeamComponent(t, "Claim", "careTeam", element.getCareTeam().get(i), i);
5452    }
5453    for (int i = 0; i < element.getSupportingInfo().size(); i++) {
5454      composeClaimSupportingInformationComponent(t, "Claim", "supportingInfo", element.getSupportingInfo().get(i), i);
5455    }
5456    for (int i = 0; i < element.getDiagnosis().size(); i++) {
5457      composeClaimDiagnosisComponent(t, "Claim", "diagnosis", element.getDiagnosis().get(i), i);
5458    }
5459    for (int i = 0; i < element.getProcedure().size(); i++) {
5460      composeClaimProcedureComponent(t, "Claim", "procedure", element.getProcedure().get(i), i);
5461    }
5462    for (int i = 0; i < element.getInsurance().size(); i++) {
5463      composeClaimInsuranceComponent(t, "Claim", "insurance", element.getInsurance().get(i), i);
5464    }
5465    if (element.hasAccident()) {
5466      composeClaimAccidentComponent(t, "Claim", "accident", element.getAccident(), -1);
5467    }
5468    if (element.hasPatientPaid()) {
5469      composeMoney(t, "Claim", "patientPaid", element.getPatientPaid(), -1);
5470    }
5471    for (int i = 0; i < element.getItem().size(); i++) {
5472      composeClaimItemComponent(t, "Claim", "item", element.getItem().get(i), i);
5473    }
5474    if (element.hasTotal()) {
5475      composeMoney(t, "Claim", "total", element.getTotal(), -1);
5476    }
5477  }
5478
5479  protected void composeClaimRelatedClaimComponent(Complex parent, String parentType, String name, Claim.RelatedClaimComponent element, int index) {
5480    if (element == null) 
5481      return;
5482    Complex t;
5483    if (Utilities.noString(parentType))
5484      t = parent;
5485    else {
5486      t = parent.predicate("fhir:"+name,index > -1);
5487    }
5488    composeBackboneElement(t, "related", name, element, index);
5489    if (element.hasClaim()) {
5490      composeReference(t, "RelatedClaimComponent", "claim", element.getClaim(), -1);
5491    }
5492    if (element.hasRelationship()) {
5493      composeCodeableConcept(t, "RelatedClaimComponent", "relationship", element.getRelationship(), -1);
5494    }
5495    if (element.hasReference()) {
5496      composeIdentifier(t, "RelatedClaimComponent", "reference", element.getReference(), -1);
5497    }
5498  }
5499
5500  protected void composeClaimPayeeComponent(Complex parent, String parentType, String name, Claim.PayeeComponent element, int index) {
5501    if (element == null) 
5502      return;
5503    Complex t;
5504    if (Utilities.noString(parentType))
5505      t = parent;
5506    else {
5507      t = parent.predicate("fhir:"+name,index > -1);
5508    }
5509    composeBackboneElement(t, "payee", name, element, index);
5510    if (element.hasType()) {
5511      composeCodeableConcept(t, "PayeeComponent", "type", element.getType(), -1);
5512    }
5513    if (element.hasParty()) {
5514      composeReference(t, "PayeeComponent", "party", element.getParty(), -1);
5515    }
5516  }
5517
5518  protected void composeClaimEventComponent(Complex parent, String parentType, String name, Claim.ClaimEventComponent element, int index) {
5519    if (element == null) 
5520      return;
5521    Complex t;
5522    if (Utilities.noString(parentType))
5523      t = parent;
5524    else {
5525      t = parent.predicate("fhir:"+name,index > -1);
5526    }
5527    composeBackboneElement(t, "event", name, element, index);
5528    if (element.hasType()) {
5529      composeCodeableConcept(t, "ClaimEventComponent", "type", element.getType(), -1);
5530    }
5531    if (element.hasWhen()) {
5532      composeType(t, "ClaimEventComponent", "when", element.getWhen(), -1);
5533    }
5534  }
5535
5536  protected void composeClaimCareTeamComponent(Complex parent, String parentType, String name, Claim.CareTeamComponent element, int index) {
5537    if (element == null) 
5538      return;
5539    Complex t;
5540    if (Utilities.noString(parentType))
5541      t = parent;
5542    else {
5543      t = parent.predicate("fhir:"+name,index > -1);
5544    }
5545    composeBackboneElement(t, "careTeam", name, element, index);
5546    if (element.hasSequenceElement()) {
5547      composePositiveInt(t, "CareTeamComponent", "sequence", element.getSequenceElement(), -1);
5548    }
5549    if (element.hasProvider()) {
5550      composeReference(t, "CareTeamComponent", "provider", element.getProvider(), -1);
5551    }
5552    if (element.hasResponsibleElement()) {
5553      composeBoolean(t, "CareTeamComponent", "responsible", element.getResponsibleElement(), -1);
5554    }
5555    if (element.hasRole()) {
5556      composeCodeableConcept(t, "CareTeamComponent", "role", element.getRole(), -1);
5557    }
5558    if (element.hasSpecialty()) {
5559      composeCodeableConcept(t, "CareTeamComponent", "specialty", element.getSpecialty(), -1);
5560    }
5561  }
5562
5563  protected void composeClaimSupportingInformationComponent(Complex parent, String parentType, String name, Claim.SupportingInformationComponent element, int index) {
5564    if (element == null) 
5565      return;
5566    Complex t;
5567    if (Utilities.noString(parentType))
5568      t = parent;
5569    else {
5570      t = parent.predicate("fhir:"+name,index > -1);
5571    }
5572    composeBackboneElement(t, "supportingInfo", name, element, index);
5573    if (element.hasSequenceElement()) {
5574      composePositiveInt(t, "SupportingInformationComponent", "sequence", element.getSequenceElement(), -1);
5575    }
5576    if (element.hasCategory()) {
5577      composeCodeableConcept(t, "SupportingInformationComponent", "category", element.getCategory(), -1);
5578    }
5579    if (element.hasCode()) {
5580      composeCodeableConcept(t, "SupportingInformationComponent", "code", element.getCode(), -1);
5581    }
5582    if (element.hasTiming()) {
5583      composeType(t, "SupportingInformationComponent", "timing", element.getTiming(), -1);
5584    }
5585    if (element.hasValue()) {
5586      composeType(t, "SupportingInformationComponent", "value", element.getValue(), -1);
5587    }
5588    if (element.hasReason()) {
5589      composeCodeableConcept(t, "SupportingInformationComponent", "reason", element.getReason(), -1);
5590    }
5591  }
5592
5593  protected void composeClaimDiagnosisComponent(Complex parent, String parentType, String name, Claim.DiagnosisComponent element, int index) {
5594    if (element == null) 
5595      return;
5596    Complex t;
5597    if (Utilities.noString(parentType))
5598      t = parent;
5599    else {
5600      t = parent.predicate("fhir:"+name,index > -1);
5601    }
5602    composeBackboneElement(t, "diagnosis", name, element, index);
5603    if (element.hasSequenceElement()) {
5604      composePositiveInt(t, "DiagnosisComponent", "sequence", element.getSequenceElement(), -1);
5605    }
5606    if (element.hasDiagnosis()) {
5607      composeType(t, "DiagnosisComponent", "diagnosis", element.getDiagnosis(), -1);
5608    }
5609    for (int i = 0; i < element.getType().size(); i++) {
5610      composeCodeableConcept(t, "DiagnosisComponent", "type", element.getType().get(i), i);
5611    }
5612    if (element.hasOnAdmission()) {
5613      composeCodeableConcept(t, "DiagnosisComponent", "onAdmission", element.getOnAdmission(), -1);
5614    }
5615  }
5616
5617  protected void composeClaimProcedureComponent(Complex parent, String parentType, String name, Claim.ProcedureComponent element, int index) {
5618    if (element == null) 
5619      return;
5620    Complex t;
5621    if (Utilities.noString(parentType))
5622      t = parent;
5623    else {
5624      t = parent.predicate("fhir:"+name,index > -1);
5625    }
5626    composeBackboneElement(t, "procedure", name, element, index);
5627    if (element.hasSequenceElement()) {
5628      composePositiveInt(t, "ProcedureComponent", "sequence", element.getSequenceElement(), -1);
5629    }
5630    for (int i = 0; i < element.getType().size(); i++) {
5631      composeCodeableConcept(t, "ProcedureComponent", "type", element.getType().get(i), i);
5632    }
5633    if (element.hasDateElement()) {
5634      composeDateTime(t, "ProcedureComponent", "date", element.getDateElement(), -1);
5635    }
5636    if (element.hasProcedure()) {
5637      composeType(t, "ProcedureComponent", "procedure", element.getProcedure(), -1);
5638    }
5639    for (int i = 0; i < element.getUdi().size(); i++) {
5640      composeReference(t, "ProcedureComponent", "udi", element.getUdi().get(i), i);
5641    }
5642  }
5643
5644  protected void composeClaimInsuranceComponent(Complex parent, String parentType, String name, Claim.InsuranceComponent element, int index) {
5645    if (element == null) 
5646      return;
5647    Complex t;
5648    if (Utilities.noString(parentType))
5649      t = parent;
5650    else {
5651      t = parent.predicate("fhir:"+name,index > -1);
5652    }
5653    composeBackboneElement(t, "insurance", name, element, index);
5654    if (element.hasSequenceElement()) {
5655      composePositiveInt(t, "InsuranceComponent", "sequence", element.getSequenceElement(), -1);
5656    }
5657    if (element.hasFocalElement()) {
5658      composeBoolean(t, "InsuranceComponent", "focal", element.getFocalElement(), -1);
5659    }
5660    if (element.hasIdentifier()) {
5661      composeIdentifier(t, "InsuranceComponent", "identifier", element.getIdentifier(), -1);
5662    }
5663    if (element.hasCoverage()) {
5664      composeReference(t, "InsuranceComponent", "coverage", element.getCoverage(), -1);
5665    }
5666    if (element.hasBusinessArrangementElement()) {
5667      composeString(t, "InsuranceComponent", "businessArrangement", element.getBusinessArrangementElement(), -1);
5668    }
5669    for (int i = 0; i < element.getPreAuthRef().size(); i++) {
5670      composeString(t, "InsuranceComponent", "preAuthRef", element.getPreAuthRef().get(i), i);
5671    }
5672    if (element.hasClaimResponse()) {
5673      composeReference(t, "InsuranceComponent", "claimResponse", element.getClaimResponse(), -1);
5674    }
5675  }
5676
5677  protected void composeClaimAccidentComponent(Complex parent, String parentType, String name, Claim.AccidentComponent 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:"+name,index > -1);
5685    }
5686    composeBackboneElement(t, "accident", name, element, index);
5687    if (element.hasDateElement()) {
5688      composeDate(t, "AccidentComponent", "date", element.getDateElement(), -1);
5689    }
5690    if (element.hasType()) {
5691      composeCodeableConcept(t, "AccidentComponent", "type", element.getType(), -1);
5692    }
5693    if (element.hasLocation()) {
5694      composeType(t, "AccidentComponent", "location", element.getLocation(), -1);
5695    }
5696  }
5697
5698  protected void composeClaimItemComponent(Complex parent, String parentType, String name, Claim.ItemComponent element, int index) {
5699    if (element == null) 
5700      return;
5701    Complex t;
5702    if (Utilities.noString(parentType))
5703      t = parent;
5704    else {
5705      t = parent.predicate("fhir:"+name,index > -1);
5706    }
5707    composeBackboneElement(t, "item", name, element, index);
5708    if (element.hasSequenceElement()) {
5709      composePositiveInt(t, "ItemComponent", "sequence", element.getSequenceElement(), -1);
5710    }
5711    for (int i = 0; i < element.getTraceNumber().size(); i++) {
5712      composeIdentifier(t, "ItemComponent", "traceNumber", element.getTraceNumber().get(i), i);
5713    }
5714    for (int i = 0; i < element.getCareTeamSequence().size(); i++) {
5715      composePositiveInt(t, "ItemComponent", "careTeamSequence", element.getCareTeamSequence().get(i), i);
5716    }
5717    for (int i = 0; i < element.getDiagnosisSequence().size(); i++) {
5718      composePositiveInt(t, "ItemComponent", "diagnosisSequence", element.getDiagnosisSequence().get(i), i);
5719    }
5720    for (int i = 0; i < element.getProcedureSequence().size(); i++) {
5721      composePositiveInt(t, "ItemComponent", "procedureSequence", element.getProcedureSequence().get(i), i);
5722    }
5723    for (int i = 0; i < element.getInformationSequence().size(); i++) {
5724      composePositiveInt(t, "ItemComponent", "informationSequence", element.getInformationSequence().get(i), i);
5725    }
5726    if (element.hasRevenue()) {
5727      composeCodeableConcept(t, "ItemComponent", "revenue", element.getRevenue(), -1);
5728    }
5729    if (element.hasCategory()) {
5730      composeCodeableConcept(t, "ItemComponent", "category", element.getCategory(), -1);
5731    }
5732    if (element.hasProductOrService()) {
5733      composeCodeableConcept(t, "ItemComponent", "productOrService", element.getProductOrService(), -1);
5734    }
5735    if (element.hasProductOrServiceEnd()) {
5736      composeCodeableConcept(t, "ItemComponent", "productOrServiceEnd", element.getProductOrServiceEnd(), -1);
5737    }
5738    for (int i = 0; i < element.getRequest().size(); i++) {
5739      composeReference(t, "ItemComponent", "request", element.getRequest().get(i), i);
5740    }
5741    for (int i = 0; i < element.getModifier().size(); i++) {
5742      composeCodeableConcept(t, "ItemComponent", "modifier", element.getModifier().get(i), i);
5743    }
5744    for (int i = 0; i < element.getProgramCode().size(); i++) {
5745      composeCodeableConcept(t, "ItemComponent", "programCode", element.getProgramCode().get(i), i);
5746    }
5747    if (element.hasServiced()) {
5748      composeType(t, "ItemComponent", "serviced", element.getServiced(), -1);
5749    }
5750    if (element.hasLocation()) {
5751      composeType(t, "ItemComponent", "location", element.getLocation(), -1);
5752    }
5753    if (element.hasPatientPaid()) {
5754      composeMoney(t, "ItemComponent", "patientPaid", element.getPatientPaid(), -1);
5755    }
5756    if (element.hasQuantity()) {
5757      composeQuantity(t, "ItemComponent", "quantity", element.getQuantity(), -1);
5758    }
5759    if (element.hasUnitPrice()) {
5760      composeMoney(t, "ItemComponent", "unitPrice", element.getUnitPrice(), -1);
5761    }
5762    if (element.hasFactorElement()) {
5763      composeDecimal(t, "ItemComponent", "factor", element.getFactorElement(), -1);
5764    }
5765    if (element.hasTax()) {
5766      composeMoney(t, "ItemComponent", "tax", element.getTax(), -1);
5767    }
5768    if (element.hasNet()) {
5769      composeMoney(t, "ItemComponent", "net", element.getNet(), -1);
5770    }
5771    for (int i = 0; i < element.getUdi().size(); i++) {
5772      composeReference(t, "ItemComponent", "udi", element.getUdi().get(i), i);
5773    }
5774    for (int i = 0; i < element.getBodySite().size(); i++) {
5775      composeClaimBodySiteComponent(t, "ItemComponent", "bodySite", element.getBodySite().get(i), i);
5776    }
5777    for (int i = 0; i < element.getEncounter().size(); i++) {
5778      composeReference(t, "ItemComponent", "encounter", element.getEncounter().get(i), i);
5779    }
5780    for (int i = 0; i < element.getDetail().size(); i++) {
5781      composeClaimDetailComponent(t, "ItemComponent", "detail", element.getDetail().get(i), i);
5782    }
5783  }
5784
5785  protected void composeClaimBodySiteComponent(Complex parent, String parentType, String name, Claim.BodySiteComponent element, int index) {
5786    if (element == null) 
5787      return;
5788    Complex t;
5789    if (Utilities.noString(parentType))
5790      t = parent;
5791    else {
5792      t = parent.predicate("fhir:"+name,index > -1);
5793    }
5794    composeBackboneElement(t, "bodySite", name, element, index);
5795    for (int i = 0; i < element.getSite().size(); i++) {
5796      composeCodeableReference(t, "BodySiteComponent", "site", element.getSite().get(i), i);
5797    }
5798    for (int i = 0; i < element.getSubSite().size(); i++) {
5799      composeCodeableConcept(t, "BodySiteComponent", "subSite", element.getSubSite().get(i), i);
5800    }
5801  }
5802
5803  protected void composeClaimDetailComponent(Complex parent, String parentType, String name, Claim.DetailComponent element, int index) {
5804    if (element == null) 
5805      return;
5806    Complex t;
5807    if (Utilities.noString(parentType))
5808      t = parent;
5809    else {
5810      t = parent.predicate("fhir:"+name,index > -1);
5811    }
5812    composeBackboneElement(t, "detail", name, element, index);
5813    if (element.hasSequenceElement()) {
5814      composePositiveInt(t, "DetailComponent", "sequence", element.getSequenceElement(), -1);
5815    }
5816    for (int i = 0; i < element.getTraceNumber().size(); i++) {
5817      composeIdentifier(t, "DetailComponent", "traceNumber", element.getTraceNumber().get(i), i);
5818    }
5819    if (element.hasRevenue()) {
5820      composeCodeableConcept(t, "DetailComponent", "revenue", element.getRevenue(), -1);
5821    }
5822    if (element.hasCategory()) {
5823      composeCodeableConcept(t, "DetailComponent", "category", element.getCategory(), -1);
5824    }
5825    if (element.hasProductOrService()) {
5826      composeCodeableConcept(t, "DetailComponent", "productOrService", element.getProductOrService(), -1);
5827    }
5828    if (element.hasProductOrServiceEnd()) {
5829      composeCodeableConcept(t, "DetailComponent", "productOrServiceEnd", element.getProductOrServiceEnd(), -1);
5830    }
5831    for (int i = 0; i < element.getModifier().size(); i++) {
5832      composeCodeableConcept(t, "DetailComponent", "modifier", element.getModifier().get(i), i);
5833    }
5834    for (int i = 0; i < element.getProgramCode().size(); i++) {
5835      composeCodeableConcept(t, "DetailComponent", "programCode", element.getProgramCode().get(i), i);
5836    }
5837    if (element.hasPatientPaid()) {
5838      composeMoney(t, "DetailComponent", "patientPaid", element.getPatientPaid(), -1);
5839    }
5840    if (element.hasQuantity()) {
5841      composeQuantity(t, "DetailComponent", "quantity", element.getQuantity(), -1);
5842    }
5843    if (element.hasUnitPrice()) {
5844      composeMoney(t, "DetailComponent", "unitPrice", element.getUnitPrice(), -1);
5845    }
5846    if (element.hasFactorElement()) {
5847      composeDecimal(t, "DetailComponent", "factor", element.getFactorElement(), -1);
5848    }
5849    if (element.hasTax()) {
5850      composeMoney(t, "DetailComponent", "tax", element.getTax(), -1);
5851    }
5852    if (element.hasNet()) {
5853      composeMoney(t, "DetailComponent", "net", element.getNet(), -1);
5854    }
5855    for (int i = 0; i < element.getUdi().size(); i++) {
5856      composeReference(t, "DetailComponent", "udi", element.getUdi().get(i), i);
5857    }
5858    for (int i = 0; i < element.getSubDetail().size(); i++) {
5859      composeClaimSubDetailComponent(t, "DetailComponent", "subDetail", element.getSubDetail().get(i), i);
5860    }
5861  }
5862
5863  protected void composeClaimSubDetailComponent(Complex parent, String parentType, String name, Claim.SubDetailComponent element, int index) {
5864    if (element == null) 
5865      return;
5866    Complex t;
5867    if (Utilities.noString(parentType))
5868      t = parent;
5869    else {
5870      t = parent.predicate("fhir:"+name,index > -1);
5871    }
5872    composeBackboneElement(t, "subDetail", name, element, index);
5873    if (element.hasSequenceElement()) {
5874      composePositiveInt(t, "SubDetailComponent", "sequence", element.getSequenceElement(), -1);
5875    }
5876    for (int i = 0; i < element.getTraceNumber().size(); i++) {
5877      composeIdentifier(t, "SubDetailComponent", "traceNumber", element.getTraceNumber().get(i), i);
5878    }
5879    if (element.hasRevenue()) {
5880      composeCodeableConcept(t, "SubDetailComponent", "revenue", element.getRevenue(), -1);
5881    }
5882    if (element.hasCategory()) {
5883      composeCodeableConcept(t, "SubDetailComponent", "category", element.getCategory(), -1);
5884    }
5885    if (element.hasProductOrService()) {
5886      composeCodeableConcept(t, "SubDetailComponent", "productOrService", element.getProductOrService(), -1);
5887    }
5888    if (element.hasProductOrServiceEnd()) {
5889      composeCodeableConcept(t, "SubDetailComponent", "productOrServiceEnd", element.getProductOrServiceEnd(), -1);
5890    }
5891    for (int i = 0; i < element.getModifier().size(); i++) {
5892      composeCodeableConcept(t, "SubDetailComponent", "modifier", element.getModifier().get(i), i);
5893    }
5894    for (int i = 0; i < element.getProgramCode().size(); i++) {
5895      composeCodeableConcept(t, "SubDetailComponent", "programCode", element.getProgramCode().get(i), i);
5896    }
5897    if (element.hasPatientPaid()) {
5898      composeMoney(t, "SubDetailComponent", "patientPaid", element.getPatientPaid(), -1);
5899    }
5900    if (element.hasQuantity()) {
5901      composeQuantity(t, "SubDetailComponent", "quantity", element.getQuantity(), -1);
5902    }
5903    if (element.hasUnitPrice()) {
5904      composeMoney(t, "SubDetailComponent", "unitPrice", element.getUnitPrice(), -1);
5905    }
5906    if (element.hasFactorElement()) {
5907      composeDecimal(t, "SubDetailComponent", "factor", element.getFactorElement(), -1);
5908    }
5909    if (element.hasTax()) {
5910      composeMoney(t, "SubDetailComponent", "tax", element.getTax(), -1);
5911    }
5912    if (element.hasNet()) {
5913      composeMoney(t, "SubDetailComponent", "net", element.getNet(), -1);
5914    }
5915    for (int i = 0; i < element.getUdi().size(); i++) {
5916      composeReference(t, "SubDetailComponent", "udi", element.getUdi().get(i), i);
5917    }
5918  }
5919
5920  protected void composeClaimResponse(Complex parent, String parentType, String name, ClaimResponse element, int index) {
5921    if (element == null) 
5922      return;
5923    Complex t;
5924    if (Utilities.noString(parentType))
5925      t = parent;
5926    else {
5927      t = parent.predicate("fhir:"+name,index > -1);
5928    }
5929    composeDomainResource(t, "ClaimResponse", name, element, index);
5930    for (int i = 0; i < element.getIdentifier().size(); i++) {
5931      composeIdentifier(t, "ClaimResponse", "identifier", element.getIdentifier().get(i), i);
5932    }
5933    for (int i = 0; i < element.getTraceNumber().size(); i++) {
5934      composeIdentifier(t, "ClaimResponse", "traceNumber", element.getTraceNumber().get(i), i);
5935    }
5936    if (element.hasStatusElement()) {
5937      composeEnum(t, "ClaimResponse", "status", element.getStatusElement(), -1);
5938    }
5939    if (element.hasType()) {
5940      composeCodeableConcept(t, "ClaimResponse", "type", element.getType(), -1);
5941    }
5942    if (element.hasSubType()) {
5943      composeCodeableConcept(t, "ClaimResponse", "subType", element.getSubType(), -1);
5944    }
5945    if (element.hasUseElement()) {
5946      composeEnum(t, "ClaimResponse", "use", element.getUseElement(), -1);
5947    }
5948    if (element.hasPatient()) {
5949      composeReference(t, "ClaimResponse", "patient", element.getPatient(), -1);
5950    }
5951    if (element.hasCreatedElement()) {
5952      composeDateTime(t, "ClaimResponse", "created", element.getCreatedElement(), -1);
5953    }
5954    if (element.hasInsurer()) {
5955      composeReference(t, "ClaimResponse", "insurer", element.getInsurer(), -1);
5956    }
5957    if (element.hasRequestor()) {
5958      composeReference(t, "ClaimResponse", "requestor", element.getRequestor(), -1);
5959    }
5960    if (element.hasRequest()) {
5961      composeReference(t, "ClaimResponse", "request", element.getRequest(), -1);
5962    }
5963    if (element.hasOutcomeElement()) {
5964      composeEnum(t, "ClaimResponse", "outcome", element.getOutcomeElement(), -1);
5965    }
5966    if (element.hasDecision()) {
5967      composeCodeableConcept(t, "ClaimResponse", "decision", element.getDecision(), -1);
5968    }
5969    if (element.hasDispositionElement()) {
5970      composeString(t, "ClaimResponse", "disposition", element.getDispositionElement(), -1);
5971    }
5972    if (element.hasPreAuthRefElement()) {
5973      composeString(t, "ClaimResponse", "preAuthRef", element.getPreAuthRefElement(), -1);
5974    }
5975    if (element.hasPreAuthPeriod()) {
5976      composePeriod(t, "ClaimResponse", "preAuthPeriod", element.getPreAuthPeriod(), -1);
5977    }
5978    for (int i = 0; i < element.getEvent().size(); i++) {
5979      composeClaimResponseEventComponent(t, "ClaimResponse", "event", element.getEvent().get(i), i);
5980    }
5981    if (element.hasPayeeType()) {
5982      composeCodeableConcept(t, "ClaimResponse", "payeeType", element.getPayeeType(), -1);
5983    }
5984    for (int i = 0; i < element.getEncounter().size(); i++) {
5985      composeReference(t, "ClaimResponse", "encounter", element.getEncounter().get(i), i);
5986    }
5987    if (element.hasDiagnosisRelatedGroup()) {
5988      composeCodeableConcept(t, "ClaimResponse", "diagnosisRelatedGroup", element.getDiagnosisRelatedGroup(), -1);
5989    }
5990    for (int i = 0; i < element.getItem().size(); i++) {
5991      composeClaimResponseItemComponent(t, "ClaimResponse", "item", element.getItem().get(i), i);
5992    }
5993    for (int i = 0; i < element.getAddItem().size(); i++) {
5994      composeClaimResponseAddedItemComponent(t, "ClaimResponse", "addItem", element.getAddItem().get(i), i);
5995    }
5996    for (int i = 0; i < element.getAdjudication().size(); i++) {
5997      composeClaimResponseAdjudicationComponent(t, "ClaimResponse", "adjudication", element.getAdjudication().get(i), i);
5998    }
5999    for (int i = 0; i < element.getTotal().size(); i++) {
6000      composeClaimResponseTotalComponent(t, "ClaimResponse", "total", element.getTotal().get(i), i);
6001    }
6002    if (element.hasPayment()) {
6003      composeClaimResponsePaymentComponent(t, "ClaimResponse", "payment", element.getPayment(), -1);
6004    }
6005    if (element.hasFundsReserve()) {
6006      composeCodeableConcept(t, "ClaimResponse", "fundsReserve", element.getFundsReserve(), -1);
6007    }
6008    if (element.hasFormCode()) {
6009      composeCodeableConcept(t, "ClaimResponse", "formCode", element.getFormCode(), -1);
6010    }
6011    if (element.hasForm()) {
6012      composeAttachment(t, "ClaimResponse", "form", element.getForm(), -1);
6013    }
6014    for (int i = 0; i < element.getProcessNote().size(); i++) {
6015      composeClaimResponseNoteComponent(t, "ClaimResponse", "processNote", element.getProcessNote().get(i), i);
6016    }
6017    for (int i = 0; i < element.getCommunicationRequest().size(); i++) {
6018      composeReference(t, "ClaimResponse", "communicationRequest", element.getCommunicationRequest().get(i), i);
6019    }
6020    for (int i = 0; i < element.getInsurance().size(); i++) {
6021      composeClaimResponseInsuranceComponent(t, "ClaimResponse", "insurance", element.getInsurance().get(i), i);
6022    }
6023    for (int i = 0; i < element.getError().size(); i++) {
6024      composeClaimResponseErrorComponent(t, "ClaimResponse", "error", element.getError().get(i), i);
6025    }
6026  }
6027
6028  protected void composeClaimResponseEventComponent(Complex parent, String parentType, String name, ClaimResponse.ClaimResponseEventComponent element, int index) {
6029    if (element == null) 
6030      return;
6031    Complex t;
6032    if (Utilities.noString(parentType))
6033      t = parent;
6034    else {
6035      t = parent.predicate("fhir:"+name,index > -1);
6036    }
6037    composeBackboneElement(t, "event", name, element, index);
6038    if (element.hasType()) {
6039      composeCodeableConcept(t, "ClaimResponseEventComponent", "type", element.getType(), -1);
6040    }
6041    if (element.hasWhen()) {
6042      composeType(t, "ClaimResponseEventComponent", "when", element.getWhen(), -1);
6043    }
6044  }
6045
6046  protected void composeClaimResponseItemComponent(Complex parent, String parentType, String name, ClaimResponse.ItemComponent element, int index) {
6047    if (element == null) 
6048      return;
6049    Complex t;
6050    if (Utilities.noString(parentType))
6051      t = parent;
6052    else {
6053      t = parent.predicate("fhir:"+name,index > -1);
6054    }
6055    composeBackboneElement(t, "item", name, element, index);
6056    if (element.hasItemSequenceElement()) {
6057      composePositiveInt(t, "ItemComponent", "itemSequence", element.getItemSequenceElement(), -1);
6058    }
6059    for (int i = 0; i < element.getTraceNumber().size(); i++) {
6060      composeIdentifier(t, "ItemComponent", "traceNumber", element.getTraceNumber().get(i), i);
6061    }
6062    for (int i = 0; i < element.getNoteNumber().size(); i++) {
6063      composePositiveInt(t, "ItemComponent", "noteNumber", element.getNoteNumber().get(i), i);
6064    }
6065    if (element.hasReviewOutcome()) {
6066      composeClaimResponseReviewOutcomeComponent(t, "ItemComponent", "reviewOutcome", element.getReviewOutcome(), -1);
6067    }
6068    for (int i = 0; i < element.getAdjudication().size(); i++) {
6069      composeClaimResponseAdjudicationComponent(t, "ItemComponent", "adjudication", element.getAdjudication().get(i), i);
6070    }
6071    for (int i = 0; i < element.getDetail().size(); i++) {
6072      composeClaimResponseItemDetailComponent(t, "ItemComponent", "detail", element.getDetail().get(i), i);
6073    }
6074  }
6075
6076  protected void composeClaimResponseReviewOutcomeComponent(Complex parent, String parentType, String name, ClaimResponse.ReviewOutcomeComponent element, int index) {
6077    if (element == null) 
6078      return;
6079    Complex t;
6080    if (Utilities.noString(parentType))
6081      t = parent;
6082    else {
6083      t = parent.predicate("fhir:"+name,index > -1);
6084    }
6085    composeBackboneElement(t, "reviewOutcome", name, element, index);
6086    if (element.hasDecision()) {
6087      composeCodeableConcept(t, "ReviewOutcomeComponent", "decision", element.getDecision(), -1);
6088    }
6089    for (int i = 0; i < element.getReason().size(); i++) {
6090      composeCodeableConcept(t, "ReviewOutcomeComponent", "reason", element.getReason().get(i), i);
6091    }
6092    if (element.hasPreAuthRefElement()) {
6093      composeString(t, "ReviewOutcomeComponent", "preAuthRef", element.getPreAuthRefElement(), -1);
6094    }
6095    if (element.hasPreAuthPeriod()) {
6096      composePeriod(t, "ReviewOutcomeComponent", "preAuthPeriod", element.getPreAuthPeriod(), -1);
6097    }
6098  }
6099
6100  protected void composeClaimResponseAdjudicationComponent(Complex parent, String parentType, String name, ClaimResponse.AdjudicationComponent element, int index) {
6101    if (element == null) 
6102      return;
6103    Complex t;
6104    if (Utilities.noString(parentType))
6105      t = parent;
6106    else {
6107      t = parent.predicate("fhir:"+name,index > -1);
6108    }
6109    composeBackboneElement(t, "adjudication", name, element, index);
6110    if (element.hasCategory()) {
6111      composeCodeableConcept(t, "AdjudicationComponent", "category", element.getCategory(), -1);
6112    }
6113    if (element.hasReason()) {
6114      composeCodeableConcept(t, "AdjudicationComponent", "reason", element.getReason(), -1);
6115    }
6116    if (element.hasAmount()) {
6117      composeMoney(t, "AdjudicationComponent", "amount", element.getAmount(), -1);
6118    }
6119    if (element.hasQuantity()) {
6120      composeQuantity(t, "AdjudicationComponent", "quantity", element.getQuantity(), -1);
6121    }
6122  }
6123
6124  protected void composeClaimResponseItemDetailComponent(Complex parent, String parentType, String name, ClaimResponse.ItemDetailComponent element, int index) {
6125    if (element == null) 
6126      return;
6127    Complex t;
6128    if (Utilities.noString(parentType))
6129      t = parent;
6130    else {
6131      t = parent.predicate("fhir:"+name,index > -1);
6132    }
6133    composeBackboneElement(t, "detail", name, element, index);
6134    if (element.hasDetailSequenceElement()) {
6135      composePositiveInt(t, "ItemDetailComponent", "detailSequence", element.getDetailSequenceElement(), -1);
6136    }
6137    for (int i = 0; i < element.getTraceNumber().size(); i++) {
6138      composeIdentifier(t, "ItemDetailComponent", "traceNumber", element.getTraceNumber().get(i), i);
6139    }
6140    for (int i = 0; i < element.getNoteNumber().size(); i++) {
6141      composePositiveInt(t, "ItemDetailComponent", "noteNumber", element.getNoteNumber().get(i), i);
6142    }
6143    if (element.hasReviewOutcome()) {
6144      composeClaimResponseReviewOutcomeComponent(t, "ItemDetailComponent", "reviewOutcome", element.getReviewOutcome(), -1);
6145    }
6146    for (int i = 0; i < element.getAdjudication().size(); i++) {
6147      composeClaimResponseAdjudicationComponent(t, "ItemDetailComponent", "adjudication", element.getAdjudication().get(i), i);
6148    }
6149    for (int i = 0; i < element.getSubDetail().size(); i++) {
6150      composeClaimResponseSubDetailComponent(t, "ItemDetailComponent", "subDetail", element.getSubDetail().get(i), i);
6151    }
6152  }
6153
6154  protected void composeClaimResponseSubDetailComponent(Complex parent, String parentType, String name, ClaimResponse.SubDetailComponent 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:"+name,index > -1);
6162    }
6163    composeBackboneElement(t, "subDetail", name, element, index);
6164    if (element.hasSubDetailSequenceElement()) {
6165      composePositiveInt(t, "SubDetailComponent", "subDetailSequence", element.getSubDetailSequenceElement(), -1);
6166    }
6167    for (int i = 0; i < element.getTraceNumber().size(); i++) {
6168      composeIdentifier(t, "SubDetailComponent", "traceNumber", element.getTraceNumber().get(i), i);
6169    }
6170    for (int i = 0; i < element.getNoteNumber().size(); i++) {
6171      composePositiveInt(t, "SubDetailComponent", "noteNumber", element.getNoteNumber().get(i), i);
6172    }
6173    if (element.hasReviewOutcome()) {
6174      composeClaimResponseReviewOutcomeComponent(t, "SubDetailComponent", "reviewOutcome", element.getReviewOutcome(), -1);
6175    }
6176    for (int i = 0; i < element.getAdjudication().size(); i++) {
6177      composeClaimResponseAdjudicationComponent(t, "SubDetailComponent", "adjudication", element.getAdjudication().get(i), i);
6178    }
6179  }
6180
6181  protected void composeClaimResponseAddedItemComponent(Complex parent, String parentType, String name, ClaimResponse.AddedItemComponent element, int index) {
6182    if (element == null) 
6183      return;
6184    Complex t;
6185    if (Utilities.noString(parentType))
6186      t = parent;
6187    else {
6188      t = parent.predicate("fhir:"+name,index > -1);
6189    }
6190    composeBackboneElement(t, "addItem", name, element, index);
6191    for (int i = 0; i < element.getItemSequence().size(); i++) {
6192      composePositiveInt(t, "AddedItemComponent", "itemSequence", element.getItemSequence().get(i), i);
6193    }
6194    for (int i = 0; i < element.getDetailSequence().size(); i++) {
6195      composePositiveInt(t, "AddedItemComponent", "detailSequence", element.getDetailSequence().get(i), i);
6196    }
6197    for (int i = 0; i < element.getSubdetailSequence().size(); i++) {
6198      composePositiveInt(t, "AddedItemComponent", "subdetailSequence", element.getSubdetailSequence().get(i), i);
6199    }
6200    for (int i = 0; i < element.getTraceNumber().size(); i++) {
6201      composeIdentifier(t, "AddedItemComponent", "traceNumber", element.getTraceNumber().get(i), i);
6202    }
6203    for (int i = 0; i < element.getProvider().size(); i++) {
6204      composeReference(t, "AddedItemComponent", "provider", element.getProvider().get(i), i);
6205    }
6206    if (element.hasRevenue()) {
6207      composeCodeableConcept(t, "AddedItemComponent", "revenue", element.getRevenue(), -1);
6208    }
6209    if (element.hasProductOrService()) {
6210      composeCodeableConcept(t, "AddedItemComponent", "productOrService", element.getProductOrService(), -1);
6211    }
6212    if (element.hasProductOrServiceEnd()) {
6213      composeCodeableConcept(t, "AddedItemComponent", "productOrServiceEnd", element.getProductOrServiceEnd(), -1);
6214    }
6215    for (int i = 0; i < element.getRequest().size(); i++) {
6216      composeReference(t, "AddedItemComponent", "request", element.getRequest().get(i), i);
6217    }
6218    for (int i = 0; i < element.getModifier().size(); i++) {
6219      composeCodeableConcept(t, "AddedItemComponent", "modifier", element.getModifier().get(i), i);
6220    }
6221    for (int i = 0; i < element.getProgramCode().size(); i++) {
6222      composeCodeableConcept(t, "AddedItemComponent", "programCode", element.getProgramCode().get(i), i);
6223    }
6224    if (element.hasServiced()) {
6225      composeType(t, "AddedItemComponent", "serviced", element.getServiced(), -1);
6226    }
6227    if (element.hasLocation()) {
6228      composeType(t, "AddedItemComponent", "location", element.getLocation(), -1);
6229    }
6230    if (element.hasQuantity()) {
6231      composeQuantity(t, "AddedItemComponent", "quantity", element.getQuantity(), -1);
6232    }
6233    if (element.hasUnitPrice()) {
6234      composeMoney(t, "AddedItemComponent", "unitPrice", element.getUnitPrice(), -1);
6235    }
6236    if (element.hasFactorElement()) {
6237      composeDecimal(t, "AddedItemComponent", "factor", element.getFactorElement(), -1);
6238    }
6239    if (element.hasTax()) {
6240      composeMoney(t, "AddedItemComponent", "tax", element.getTax(), -1);
6241    }
6242    if (element.hasNet()) {
6243      composeMoney(t, "AddedItemComponent", "net", element.getNet(), -1);
6244    }
6245    for (int i = 0; i < element.getBodySite().size(); i++) {
6246      composeClaimResponseBodySiteComponent(t, "AddedItemComponent", "bodySite", element.getBodySite().get(i), i);
6247    }
6248    for (int i = 0; i < element.getNoteNumber().size(); i++) {
6249      composePositiveInt(t, "AddedItemComponent", "noteNumber", element.getNoteNumber().get(i), i);
6250    }
6251    if (element.hasReviewOutcome()) {
6252      composeClaimResponseReviewOutcomeComponent(t, "AddedItemComponent", "reviewOutcome", element.getReviewOutcome(), -1);
6253    }
6254    for (int i = 0; i < element.getAdjudication().size(); i++) {
6255      composeClaimResponseAdjudicationComponent(t, "AddedItemComponent", "adjudication", element.getAdjudication().get(i), i);
6256    }
6257    for (int i = 0; i < element.getDetail().size(); i++) {
6258      composeClaimResponseAddedItemDetailComponent(t, "AddedItemComponent", "detail", element.getDetail().get(i), i);
6259    }
6260  }
6261
6262  protected void composeClaimResponseBodySiteComponent(Complex parent, String parentType, String name, ClaimResponse.BodySiteComponent element, int index) {
6263    if (element == null) 
6264      return;
6265    Complex t;
6266    if (Utilities.noString(parentType))
6267      t = parent;
6268    else {
6269      t = parent.predicate("fhir:"+name,index > -1);
6270    }
6271    composeBackboneElement(t, "bodySite", name, element, index);
6272    for (int i = 0; i < element.getSite().size(); i++) {
6273      composeCodeableReference(t, "BodySiteComponent", "site", element.getSite().get(i), i);
6274    }
6275    for (int i = 0; i < element.getSubSite().size(); i++) {
6276      composeCodeableConcept(t, "BodySiteComponent", "subSite", element.getSubSite().get(i), i);
6277    }
6278  }
6279
6280  protected void composeClaimResponseAddedItemDetailComponent(Complex parent, String parentType, String name, ClaimResponse.AddedItemDetailComponent element, int index) {
6281    if (element == null) 
6282      return;
6283    Complex t;
6284    if (Utilities.noString(parentType))
6285      t = parent;
6286    else {
6287      t = parent.predicate("fhir:"+name,index > -1);
6288    }
6289    composeBackboneElement(t, "detail", name, element, index);
6290    for (int i = 0; i < element.getTraceNumber().size(); i++) {
6291      composeIdentifier(t, "AddedItemDetailComponent", "traceNumber", element.getTraceNumber().get(i), i);
6292    }
6293    if (element.hasRevenue()) {
6294      composeCodeableConcept(t, "AddedItemDetailComponent", "revenue", element.getRevenue(), -1);
6295    }
6296    if (element.hasProductOrService()) {
6297      composeCodeableConcept(t, "AddedItemDetailComponent", "productOrService", element.getProductOrService(), -1);
6298    }
6299    if (element.hasProductOrServiceEnd()) {
6300      composeCodeableConcept(t, "AddedItemDetailComponent", "productOrServiceEnd", element.getProductOrServiceEnd(), -1);
6301    }
6302    for (int i = 0; i < element.getModifier().size(); i++) {
6303      composeCodeableConcept(t, "AddedItemDetailComponent", "modifier", element.getModifier().get(i), i);
6304    }
6305    if (element.hasQuantity()) {
6306      composeQuantity(t, "AddedItemDetailComponent", "quantity", element.getQuantity(), -1);
6307    }
6308    if (element.hasUnitPrice()) {
6309      composeMoney(t, "AddedItemDetailComponent", "unitPrice", element.getUnitPrice(), -1);
6310    }
6311    if (element.hasFactorElement()) {
6312      composeDecimal(t, "AddedItemDetailComponent", "factor", element.getFactorElement(), -1);
6313    }
6314    if (element.hasTax()) {
6315      composeMoney(t, "AddedItemDetailComponent", "tax", element.getTax(), -1);
6316    }
6317    if (element.hasNet()) {
6318      composeMoney(t, "AddedItemDetailComponent", "net", element.getNet(), -1);
6319    }
6320    for (int i = 0; i < element.getNoteNumber().size(); i++) {
6321      composePositiveInt(t, "AddedItemDetailComponent", "noteNumber", element.getNoteNumber().get(i), i);
6322    }
6323    if (element.hasReviewOutcome()) {
6324      composeClaimResponseReviewOutcomeComponent(t, "AddedItemDetailComponent", "reviewOutcome", element.getReviewOutcome(), -1);
6325    }
6326    for (int i = 0; i < element.getAdjudication().size(); i++) {
6327      composeClaimResponseAdjudicationComponent(t, "AddedItemDetailComponent", "adjudication", element.getAdjudication().get(i), i);
6328    }
6329    for (int i = 0; i < element.getSubDetail().size(); i++) {
6330      composeClaimResponseAddedItemSubDetailComponent(t, "AddedItemDetailComponent", "subDetail", element.getSubDetail().get(i), i);
6331    }
6332  }
6333
6334  protected void composeClaimResponseAddedItemSubDetailComponent(Complex parent, String parentType, String name, ClaimResponse.AddedItemSubDetailComponent element, int index) {
6335    if (element == null) 
6336      return;
6337    Complex t;
6338    if (Utilities.noString(parentType))
6339      t = parent;
6340    else {
6341      t = parent.predicate("fhir:"+name,index > -1);
6342    }
6343    composeBackboneElement(t, "subDetail", name, element, index);
6344    for (int i = 0; i < element.getTraceNumber().size(); i++) {
6345      composeIdentifier(t, "AddedItemSubDetailComponent", "traceNumber", element.getTraceNumber().get(i), i);
6346    }
6347    if (element.hasRevenue()) {
6348      composeCodeableConcept(t, "AddedItemSubDetailComponent", "revenue", element.getRevenue(), -1);
6349    }
6350    if (element.hasProductOrService()) {
6351      composeCodeableConcept(t, "AddedItemSubDetailComponent", "productOrService", element.getProductOrService(), -1);
6352    }
6353    if (element.hasProductOrServiceEnd()) {
6354      composeCodeableConcept(t, "AddedItemSubDetailComponent", "productOrServiceEnd", element.getProductOrServiceEnd(), -1);
6355    }
6356    for (int i = 0; i < element.getModifier().size(); i++) {
6357      composeCodeableConcept(t, "AddedItemSubDetailComponent", "modifier", element.getModifier().get(i), i);
6358    }
6359    if (element.hasQuantity()) {
6360      composeQuantity(t, "AddedItemSubDetailComponent", "quantity", element.getQuantity(), -1);
6361    }
6362    if (element.hasUnitPrice()) {
6363      composeMoney(t, "AddedItemSubDetailComponent", "unitPrice", element.getUnitPrice(), -1);
6364    }
6365    if (element.hasFactorElement()) {
6366      composeDecimal(t, "AddedItemSubDetailComponent", "factor", element.getFactorElement(), -1);
6367    }
6368    if (element.hasTax()) {
6369      composeMoney(t, "AddedItemSubDetailComponent", "tax", element.getTax(), -1);
6370    }
6371    if (element.hasNet()) {
6372      composeMoney(t, "AddedItemSubDetailComponent", "net", element.getNet(), -1);
6373    }
6374    for (int i = 0; i < element.getNoteNumber().size(); i++) {
6375      composePositiveInt(t, "AddedItemSubDetailComponent", "noteNumber", element.getNoteNumber().get(i), i);
6376    }
6377    if (element.hasReviewOutcome()) {
6378      composeClaimResponseReviewOutcomeComponent(t, "AddedItemSubDetailComponent", "reviewOutcome", element.getReviewOutcome(), -1);
6379    }
6380    for (int i = 0; i < element.getAdjudication().size(); i++) {
6381      composeClaimResponseAdjudicationComponent(t, "AddedItemSubDetailComponent", "adjudication", element.getAdjudication().get(i), i);
6382    }
6383  }
6384
6385  protected void composeClaimResponseTotalComponent(Complex parent, String parentType, String name, ClaimResponse.TotalComponent element, int index) {
6386    if (element == null) 
6387      return;
6388    Complex t;
6389    if (Utilities.noString(parentType))
6390      t = parent;
6391    else {
6392      t = parent.predicate("fhir:"+name,index > -1);
6393    }
6394    composeBackboneElement(t, "total", name, element, index);
6395    if (element.hasCategory()) {
6396      composeCodeableConcept(t, "TotalComponent", "category", element.getCategory(), -1);
6397    }
6398    if (element.hasAmount()) {
6399      composeMoney(t, "TotalComponent", "amount", element.getAmount(), -1);
6400    }
6401  }
6402
6403  protected void composeClaimResponsePaymentComponent(Complex parent, String parentType, String name, ClaimResponse.PaymentComponent element, int index) {
6404    if (element == null) 
6405      return;
6406    Complex t;
6407    if (Utilities.noString(parentType))
6408      t = parent;
6409    else {
6410      t = parent.predicate("fhir:"+name,index > -1);
6411    }
6412    composeBackboneElement(t, "payment", name, element, index);
6413    if (element.hasType()) {
6414      composeCodeableConcept(t, "PaymentComponent", "type", element.getType(), -1);
6415    }
6416    if (element.hasAdjustment()) {
6417      composeMoney(t, "PaymentComponent", "adjustment", element.getAdjustment(), -1);
6418    }
6419    if (element.hasAdjustmentReason()) {
6420      composeCodeableConcept(t, "PaymentComponent", "adjustmentReason", element.getAdjustmentReason(), -1);
6421    }
6422    if (element.hasDateElement()) {
6423      composeDate(t, "PaymentComponent", "date", element.getDateElement(), -1);
6424    }
6425    if (element.hasAmount()) {
6426      composeMoney(t, "PaymentComponent", "amount", element.getAmount(), -1);
6427    }
6428    if (element.hasIdentifier()) {
6429      composeIdentifier(t, "PaymentComponent", "identifier", element.getIdentifier(), -1);
6430    }
6431  }
6432
6433  protected void composeClaimResponseNoteComponent(Complex parent, String parentType, String name, ClaimResponse.NoteComponent element, int index) {
6434    if (element == null) 
6435      return;
6436    Complex t;
6437    if (Utilities.noString(parentType))
6438      t = parent;
6439    else {
6440      t = parent.predicate("fhir:"+name,index > -1);
6441    }
6442    composeBackboneElement(t, "processNote", name, element, index);
6443    if (element.hasNumberElement()) {
6444      composePositiveInt(t, "NoteComponent", "number", element.getNumberElement(), -1);
6445    }
6446    if (element.hasType()) {
6447      composeCodeableConcept(t, "NoteComponent", "type", element.getType(), -1);
6448    }
6449    if (element.hasTextElement()) {
6450      composeString(t, "NoteComponent", "text", element.getTextElement(), -1);
6451    }
6452    if (element.hasLanguage()) {
6453      composeCodeableConcept(t, "NoteComponent", "language", element.getLanguage(), -1);
6454    }
6455  }
6456
6457  protected void composeClaimResponseInsuranceComponent(Complex parent, String parentType, String name, ClaimResponse.InsuranceComponent element, int index) {
6458    if (element == null) 
6459      return;
6460    Complex t;
6461    if (Utilities.noString(parentType))
6462      t = parent;
6463    else {
6464      t = parent.predicate("fhir:"+name,index > -1);
6465    }
6466    composeBackboneElement(t, "insurance", name, element, index);
6467    if (element.hasSequenceElement()) {
6468      composePositiveInt(t, "InsuranceComponent", "sequence", element.getSequenceElement(), -1);
6469    }
6470    if (element.hasFocalElement()) {
6471      composeBoolean(t, "InsuranceComponent", "focal", element.getFocalElement(), -1);
6472    }
6473    if (element.hasCoverage()) {
6474      composeReference(t, "InsuranceComponent", "coverage", element.getCoverage(), -1);
6475    }
6476    if (element.hasBusinessArrangementElement()) {
6477      composeString(t, "InsuranceComponent", "businessArrangement", element.getBusinessArrangementElement(), -1);
6478    }
6479    if (element.hasClaimResponse()) {
6480      composeReference(t, "InsuranceComponent", "claimResponse", element.getClaimResponse(), -1);
6481    }
6482  }
6483
6484  protected void composeClaimResponseErrorComponent(Complex parent, String parentType, String name, ClaimResponse.ErrorComponent element, int index) {
6485    if (element == null) 
6486      return;
6487    Complex t;
6488    if (Utilities.noString(parentType))
6489      t = parent;
6490    else {
6491      t = parent.predicate("fhir:"+name,index > -1);
6492    }
6493    composeBackboneElement(t, "error", name, element, index);
6494    if (element.hasItemSequenceElement()) {
6495      composePositiveInt(t, "ErrorComponent", "itemSequence", element.getItemSequenceElement(), -1);
6496    }
6497    if (element.hasDetailSequenceElement()) {
6498      composePositiveInt(t, "ErrorComponent", "detailSequence", element.getDetailSequenceElement(), -1);
6499    }
6500    if (element.hasSubDetailSequenceElement()) {
6501      composePositiveInt(t, "ErrorComponent", "subDetailSequence", element.getSubDetailSequenceElement(), -1);
6502    }
6503    if (element.hasCode()) {
6504      composeCodeableConcept(t, "ErrorComponent", "code", element.getCode(), -1);
6505    }
6506    for (int i = 0; i < element.getExpression().size(); i++) {
6507      composeString(t, "ErrorComponent", "expression", element.getExpression().get(i), i);
6508    }
6509  }
6510
6511  protected void composeClinicalImpression(Complex parent, String parentType, String name, ClinicalImpression element, int index) {
6512    if (element == null) 
6513      return;
6514    Complex t;
6515    if (Utilities.noString(parentType))
6516      t = parent;
6517    else {
6518      t = parent.predicate("fhir:"+name,index > -1);
6519    }
6520    composeDomainResource(t, "ClinicalImpression", name, element, index);
6521    for (int i = 0; i < element.getIdentifier().size(); i++) {
6522      composeIdentifier(t, "ClinicalImpression", "identifier", element.getIdentifier().get(i), i);
6523    }
6524    if (element.hasStatusElement()) {
6525      composeEnum(t, "ClinicalImpression", "status", element.getStatusElement(), -1);
6526    }
6527    if (element.hasStatusReason()) {
6528      composeCodeableConcept(t, "ClinicalImpression", "statusReason", element.getStatusReason(), -1);
6529    }
6530    if (element.hasDescriptionElement()) {
6531      composeString(t, "ClinicalImpression", "description", element.getDescriptionElement(), -1);
6532    }
6533    if (element.hasSubject()) {
6534      composeReference(t, "ClinicalImpression", "subject", element.getSubject(), -1);
6535    }
6536    if (element.hasEncounter()) {
6537      composeReference(t, "ClinicalImpression", "encounter", element.getEncounter(), -1);
6538    }
6539    if (element.hasEffective()) {
6540      composeType(t, "ClinicalImpression", "effective", element.getEffective(), -1);
6541    }
6542    if (element.hasDateElement()) {
6543      composeDateTime(t, "ClinicalImpression", "date", element.getDateElement(), -1);
6544    }
6545    if (element.hasPerformer()) {
6546      composeReference(t, "ClinicalImpression", "performer", element.getPerformer(), -1);
6547    }
6548    if (element.hasPrevious()) {
6549      composeReference(t, "ClinicalImpression", "previous", element.getPrevious(), -1);
6550    }
6551    for (int i = 0; i < element.getProblem().size(); i++) {
6552      composeReference(t, "ClinicalImpression", "problem", element.getProblem().get(i), i);
6553    }
6554    if (element.hasChangePattern()) {
6555      composeCodeableConcept(t, "ClinicalImpression", "changePattern", element.getChangePattern(), -1);
6556    }
6557    for (int i = 0; i < element.getProtocol().size(); i++) {
6558      composeUri(t, "ClinicalImpression", "protocol", element.getProtocol().get(i), i);
6559    }
6560    if (element.hasSummaryElement()) {
6561      composeString(t, "ClinicalImpression", "summary", element.getSummaryElement(), -1);
6562    }
6563    for (int i = 0; i < element.getFinding().size(); i++) {
6564      composeClinicalImpressionFindingComponent(t, "ClinicalImpression", "finding", element.getFinding().get(i), i);
6565    }
6566    for (int i = 0; i < element.getPrognosisCodeableConcept().size(); i++) {
6567      composeCodeableConcept(t, "ClinicalImpression", "prognosisCodeableConcept", element.getPrognosisCodeableConcept().get(i), i);
6568    }
6569    for (int i = 0; i < element.getPrognosisReference().size(); i++) {
6570      composeReference(t, "ClinicalImpression", "prognosisReference", element.getPrognosisReference().get(i), i);
6571    }
6572    for (int i = 0; i < element.getSupportingInfo().size(); i++) {
6573      composeReference(t, "ClinicalImpression", "supportingInfo", element.getSupportingInfo().get(i), i);
6574    }
6575    for (int i = 0; i < element.getNote().size(); i++) {
6576      composeAnnotation(t, "ClinicalImpression", "note", element.getNote().get(i), i);
6577    }
6578  }
6579
6580  protected void composeClinicalImpressionFindingComponent(Complex parent, String parentType, String name, ClinicalImpression.ClinicalImpressionFindingComponent element, int index) {
6581    if (element == null) 
6582      return;
6583    Complex t;
6584    if (Utilities.noString(parentType))
6585      t = parent;
6586    else {
6587      t = parent.predicate("fhir:"+name,index > -1);
6588    }
6589    composeBackboneElement(t, "finding", name, element, index);
6590    if (element.hasItem()) {
6591      composeCodeableReference(t, "ClinicalImpressionFindingComponent", "item", element.getItem(), -1);
6592    }
6593    if (element.hasBasisElement()) {
6594      composeString(t, "ClinicalImpressionFindingComponent", "basis", element.getBasisElement(), -1);
6595    }
6596  }
6597
6598  protected void composeClinicalUseDefinition(Complex parent, String parentType, String name, ClinicalUseDefinition element, int index) {
6599    if (element == null) 
6600      return;
6601    Complex t;
6602    if (Utilities.noString(parentType))
6603      t = parent;
6604    else {
6605      t = parent.predicate("fhir:"+name,index > -1);
6606    }
6607    composeDomainResource(t, "ClinicalUseDefinition", name, element, index);
6608    for (int i = 0; i < element.getIdentifier().size(); i++) {
6609      composeIdentifier(t, "ClinicalUseDefinition", "identifier", element.getIdentifier().get(i), i);
6610    }
6611    if (element.hasTypeElement()) {
6612      composeEnum(t, "ClinicalUseDefinition", "type", element.getTypeElement(), -1);
6613    }
6614    for (int i = 0; i < element.getCategory().size(); i++) {
6615      composeCodeableConcept(t, "ClinicalUseDefinition", "category", element.getCategory().get(i), i);
6616    }
6617    for (int i = 0; i < element.getSubject().size(); i++) {
6618      composeReference(t, "ClinicalUseDefinition", "subject", element.getSubject().get(i), i);
6619    }
6620    if (element.hasStatus()) {
6621      composeCodeableConcept(t, "ClinicalUseDefinition", "status", element.getStatus(), -1);
6622    }
6623    if (element.hasContraindication()) {
6624      composeClinicalUseDefinitionContraindicationComponent(t, "ClinicalUseDefinition", "contraindication", element.getContraindication(), -1);
6625    }
6626    if (element.hasIndication()) {
6627      composeClinicalUseDefinitionIndicationComponent(t, "ClinicalUseDefinition", "indication", element.getIndication(), -1);
6628    }
6629    if (element.hasInteraction()) {
6630      composeClinicalUseDefinitionInteractionComponent(t, "ClinicalUseDefinition", "interaction", element.getInteraction(), -1);
6631    }
6632    for (int i = 0; i < element.getPopulation().size(); i++) {
6633      composeReference(t, "ClinicalUseDefinition", "population", element.getPopulation().get(i), i);
6634    }
6635    for (int i = 0; i < element.getLibrary().size(); i++) {
6636      composeCanonical(t, "ClinicalUseDefinition", "library", element.getLibrary().get(i), i);
6637    }
6638    if (element.hasUndesirableEffect()) {
6639      composeClinicalUseDefinitionUndesirableEffectComponent(t, "ClinicalUseDefinition", "undesirableEffect", element.getUndesirableEffect(), -1);
6640    }
6641    if (element.hasWarning()) {
6642      composeClinicalUseDefinitionWarningComponent(t, "ClinicalUseDefinition", "warning", element.getWarning(), -1);
6643    }
6644  }
6645
6646  protected void composeClinicalUseDefinitionContraindicationComponent(Complex parent, String parentType, String name, ClinicalUseDefinition.ClinicalUseDefinitionContraindicationComponent element, int index) {
6647    if (element == null) 
6648      return;
6649    Complex t;
6650    if (Utilities.noString(parentType))
6651      t = parent;
6652    else {
6653      t = parent.predicate("fhir:"+name,index > -1);
6654    }
6655    composeBackboneElement(t, "contraindication", name, element, index);
6656    if (element.hasDiseaseSymptomProcedure()) {
6657      composeCodeableReference(t, "ClinicalUseDefinitionContraindicationComponent", "diseaseSymptomProcedure", element.getDiseaseSymptomProcedure(), -1);
6658    }
6659    if (element.hasDiseaseStatus()) {
6660      composeCodeableReference(t, "ClinicalUseDefinitionContraindicationComponent", "diseaseStatus", element.getDiseaseStatus(), -1);
6661    }
6662    for (int i = 0; i < element.getComorbidity().size(); i++) {
6663      composeCodeableReference(t, "ClinicalUseDefinitionContraindicationComponent", "comorbidity", element.getComorbidity().get(i), i);
6664    }
6665    for (int i = 0; i < element.getIndication().size(); i++) {
6666      composeReference(t, "ClinicalUseDefinitionContraindicationComponent", "indication", element.getIndication().get(i), i);
6667    }
6668    if (element.hasApplicability()) {
6669      composeExpression(t, "ClinicalUseDefinitionContraindicationComponent", "applicability", element.getApplicability(), -1);
6670    }
6671    for (int i = 0; i < element.getOtherTherapy().size(); i++) {
6672      composeClinicalUseDefinitionContraindicationOtherTherapyComponent(t, "ClinicalUseDefinitionContraindicationComponent", "otherTherapy", element.getOtherTherapy().get(i), i);
6673    }
6674  }
6675
6676  protected void composeClinicalUseDefinitionContraindicationOtherTherapyComponent(Complex parent, String parentType, String name, ClinicalUseDefinition.ClinicalUseDefinitionContraindicationOtherTherapyComponent element, int index) {
6677    if (element == null) 
6678      return;
6679    Complex t;
6680    if (Utilities.noString(parentType))
6681      t = parent;
6682    else {
6683      t = parent.predicate("fhir:"+name,index > -1);
6684    }
6685    composeBackboneElement(t, "otherTherapy", name, element, index);
6686    if (element.hasRelationshipType()) {
6687      composeCodeableConcept(t, "ClinicalUseDefinitionContraindicationOtherTherapyComponent", "relationshipType", element.getRelationshipType(), -1);
6688    }
6689    if (element.hasTreatment()) {
6690      composeCodeableReference(t, "ClinicalUseDefinitionContraindicationOtherTherapyComponent", "treatment", element.getTreatment(), -1);
6691    }
6692  }
6693
6694  protected void composeClinicalUseDefinitionIndicationComponent(Complex parent, String parentType, String name, ClinicalUseDefinition.ClinicalUseDefinitionIndicationComponent element, int index) {
6695    if (element == null) 
6696      return;
6697    Complex t;
6698    if (Utilities.noString(parentType))
6699      t = parent;
6700    else {
6701      t = parent.predicate("fhir:"+name,index > -1);
6702    }
6703    composeBackboneElement(t, "indication", name, element, index);
6704    if (element.hasDiseaseSymptomProcedure()) {
6705      composeCodeableReference(t, "ClinicalUseDefinitionIndicationComponent", "diseaseSymptomProcedure", element.getDiseaseSymptomProcedure(), -1);
6706    }
6707    if (element.hasDiseaseStatus()) {
6708      composeCodeableReference(t, "ClinicalUseDefinitionIndicationComponent", "diseaseStatus", element.getDiseaseStatus(), -1);
6709    }
6710    for (int i = 0; i < element.getComorbidity().size(); i++) {
6711      composeCodeableReference(t, "ClinicalUseDefinitionIndicationComponent", "comorbidity", element.getComorbidity().get(i), i);
6712    }
6713    if (element.hasIntendedEffect()) {
6714      composeCodeableReference(t, "ClinicalUseDefinitionIndicationComponent", "intendedEffect", element.getIntendedEffect(), -1);
6715    }
6716    if (element.hasDuration()) {
6717      composeType(t, "ClinicalUseDefinitionIndicationComponent", "duration", element.getDuration(), -1);
6718    }
6719    for (int i = 0; i < element.getUndesirableEffect().size(); i++) {
6720      composeReference(t, "ClinicalUseDefinitionIndicationComponent", "undesirableEffect", element.getUndesirableEffect().get(i), i);
6721    }
6722    if (element.hasApplicability()) {
6723      composeExpression(t, "ClinicalUseDefinitionIndicationComponent", "applicability", element.getApplicability(), -1);
6724    }
6725    for (int i = 0; i < element.getOtherTherapy().size(); i++) {
6726      composeClinicalUseDefinitionContraindicationOtherTherapyComponent(t, "ClinicalUseDefinitionIndicationComponent", "otherTherapy", element.getOtherTherapy().get(i), i);
6727    }
6728  }
6729
6730  protected void composeClinicalUseDefinitionInteractionComponent(Complex parent, String parentType, String name, ClinicalUseDefinition.ClinicalUseDefinitionInteractionComponent element, int index) {
6731    if (element == null) 
6732      return;
6733    Complex t;
6734    if (Utilities.noString(parentType))
6735      t = parent;
6736    else {
6737      t = parent.predicate("fhir:"+name,index > -1);
6738    }
6739    composeBackboneElement(t, "interaction", name, element, index);
6740    for (int i = 0; i < element.getInteractant().size(); i++) {
6741      composeClinicalUseDefinitionInteractionInteractantComponent(t, "ClinicalUseDefinitionInteractionComponent", "interactant", element.getInteractant().get(i), i);
6742    }
6743    if (element.hasType()) {
6744      composeCodeableConcept(t, "ClinicalUseDefinitionInteractionComponent", "type", element.getType(), -1);
6745    }
6746    if (element.hasEffect()) {
6747      composeCodeableReference(t, "ClinicalUseDefinitionInteractionComponent", "effect", element.getEffect(), -1);
6748    }
6749    if (element.hasIncidence()) {
6750      composeCodeableConcept(t, "ClinicalUseDefinitionInteractionComponent", "incidence", element.getIncidence(), -1);
6751    }
6752    for (int i = 0; i < element.getManagement().size(); i++) {
6753      composeCodeableConcept(t, "ClinicalUseDefinitionInteractionComponent", "management", element.getManagement().get(i), i);
6754    }
6755  }
6756
6757  protected void composeClinicalUseDefinitionInteractionInteractantComponent(Complex parent, String parentType, String name, ClinicalUseDefinition.ClinicalUseDefinitionInteractionInteractantComponent element, int index) {
6758    if (element == null) 
6759      return;
6760    Complex t;
6761    if (Utilities.noString(parentType))
6762      t = parent;
6763    else {
6764      t = parent.predicate("fhir:"+name,index > -1);
6765    }
6766    composeBackboneElement(t, "interactant", name, element, index);
6767    if (element.hasItem()) {
6768      composeType(t, "ClinicalUseDefinitionInteractionInteractantComponent", "item", element.getItem(), -1);
6769    }
6770  }
6771
6772  protected void composeClinicalUseDefinitionUndesirableEffectComponent(Complex parent, String parentType, String name, ClinicalUseDefinition.ClinicalUseDefinitionUndesirableEffectComponent element, int index) {
6773    if (element == null) 
6774      return;
6775    Complex t;
6776    if (Utilities.noString(parentType))
6777      t = parent;
6778    else {
6779      t = parent.predicate("fhir:"+name,index > -1);
6780    }
6781    composeBackboneElement(t, "undesirableEffect", name, element, index);
6782    if (element.hasSymptomConditionEffect()) {
6783      composeCodeableReference(t, "ClinicalUseDefinitionUndesirableEffectComponent", "symptomConditionEffect", element.getSymptomConditionEffect(), -1);
6784    }
6785    if (element.hasClassification()) {
6786      composeCodeableConcept(t, "ClinicalUseDefinitionUndesirableEffectComponent", "classification", element.getClassification(), -1);
6787    }
6788    if (element.hasFrequencyOfOccurrence()) {
6789      composeCodeableConcept(t, "ClinicalUseDefinitionUndesirableEffectComponent", "frequencyOfOccurrence", element.getFrequencyOfOccurrence(), -1);
6790    }
6791  }
6792
6793  protected void composeClinicalUseDefinitionWarningComponent(Complex parent, String parentType, String name, ClinicalUseDefinition.ClinicalUseDefinitionWarningComponent element, int index) {
6794    if (element == null) 
6795      return;
6796    Complex t;
6797    if (Utilities.noString(parentType))
6798      t = parent;
6799    else {
6800      t = parent.predicate("fhir:"+name,index > -1);
6801    }
6802    composeBackboneElement(t, "warning", name, element, index);
6803    if (element.hasDescriptionElement()) {
6804      composeMarkdown(t, "ClinicalUseDefinitionWarningComponent", "description", element.getDescriptionElement(), -1);
6805    }
6806    if (element.hasCode()) {
6807      composeCodeableConcept(t, "ClinicalUseDefinitionWarningComponent", "code", element.getCode(), -1);
6808    }
6809  }
6810
6811  protected void composeCodeSystem(Complex parent, String parentType, String name, CodeSystem element, int index) {
6812    if (element == null) 
6813      return;
6814    Complex t;
6815    if (Utilities.noString(parentType))
6816      t = parent;
6817    else {
6818      t = parent.predicate("fhir:"+name,index > -1);
6819    }
6820    composeMetadataResource(t, "CodeSystem", name, element, index);
6821    if (element.hasUrlElement()) {
6822      composeUri(t, "CodeSystem", "url", element.getUrlElement(), -1);
6823    }
6824    for (int i = 0; i < element.getIdentifier().size(); i++) {
6825      composeIdentifier(t, "CodeSystem", "identifier", element.getIdentifier().get(i), i);
6826    }
6827    if (element.hasVersionElement()) {
6828      composeString(t, "CodeSystem", "version", element.getVersionElement(), -1);
6829    }
6830    if (element.hasVersionAlgorithm()) {
6831      composeType(t, "CodeSystem", "versionAlgorithm", element.getVersionAlgorithm(), -1);
6832    }
6833    if (element.hasNameElement()) {
6834      composeString(t, "CodeSystem", "name", element.getNameElement(), -1);
6835    }
6836    if (element.hasTitleElement()) {
6837      composeString(t, "CodeSystem", "title", element.getTitleElement(), -1);
6838    }
6839    if (element.hasStatusElement()) {
6840      composeEnum(t, "CodeSystem", "status", element.getStatusElement(), -1);
6841    }
6842    if (element.hasExperimentalElement()) {
6843      composeBoolean(t, "CodeSystem", "experimental", element.getExperimentalElement(), -1);
6844    }
6845    if (element.hasDateElement()) {
6846      composeDateTime(t, "CodeSystem", "date", element.getDateElement(), -1);
6847    }
6848    if (element.hasPublisherElement()) {
6849      composeString(t, "CodeSystem", "publisher", element.getPublisherElement(), -1);
6850    }
6851    for (int i = 0; i < element.getContact().size(); i++) {
6852      composeContactDetail(t, "CodeSystem", "contact", element.getContact().get(i), i);
6853    }
6854    if (element.hasDescriptionElement()) {
6855      composeMarkdown(t, "CodeSystem", "description", element.getDescriptionElement(), -1);
6856    }
6857    for (int i = 0; i < element.getUseContext().size(); i++) {
6858      composeUsageContext(t, "CodeSystem", "useContext", element.getUseContext().get(i), i);
6859    }
6860    for (int i = 0; i < element.getJurisdiction().size(); i++) {
6861      composeCodeableConcept(t, "CodeSystem", "jurisdiction", element.getJurisdiction().get(i), i);
6862    }
6863    if (element.hasPurposeElement()) {
6864      composeMarkdown(t, "CodeSystem", "purpose", element.getPurposeElement(), -1);
6865    }
6866    if (element.hasCopyrightElement()) {
6867      composeMarkdown(t, "CodeSystem", "copyright", element.getCopyrightElement(), -1);
6868    }
6869    if (element.hasCopyrightLabelElement()) {
6870      composeString(t, "CodeSystem", "copyrightLabel", element.getCopyrightLabelElement(), -1);
6871    }
6872    if (element.hasApprovalDateElement()) {
6873      composeDate(t, "CodeSystem", "approvalDate", element.getApprovalDateElement(), -1);
6874    }
6875    if (element.hasLastReviewDateElement()) {
6876      composeDate(t, "CodeSystem", "lastReviewDate", element.getLastReviewDateElement(), -1);
6877    }
6878    if (element.hasEffectivePeriod()) {
6879      composePeriod(t, "CodeSystem", "effectivePeriod", element.getEffectivePeriod(), -1);
6880    }
6881    for (int i = 0; i < element.getTopic().size(); i++) {
6882      composeCodeableConcept(t, "CodeSystem", "topic", element.getTopic().get(i), i);
6883    }
6884    for (int i = 0; i < element.getAuthor().size(); i++) {
6885      composeContactDetail(t, "CodeSystem", "author", element.getAuthor().get(i), i);
6886    }
6887    for (int i = 0; i < element.getEditor().size(); i++) {
6888      composeContactDetail(t, "CodeSystem", "editor", element.getEditor().get(i), i);
6889    }
6890    for (int i = 0; i < element.getReviewer().size(); i++) {
6891      composeContactDetail(t, "CodeSystem", "reviewer", element.getReviewer().get(i), i);
6892    }
6893    for (int i = 0; i < element.getEndorser().size(); i++) {
6894      composeContactDetail(t, "CodeSystem", "endorser", element.getEndorser().get(i), i);
6895    }
6896    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
6897      composeRelatedArtifact(t, "CodeSystem", "relatedArtifact", element.getRelatedArtifact().get(i), i);
6898    }
6899    if (element.hasCaseSensitiveElement()) {
6900      composeBoolean(t, "CodeSystem", "caseSensitive", element.getCaseSensitiveElement(), -1);
6901    }
6902    if (element.hasValueSetElement()) {
6903      composeCanonical(t, "CodeSystem", "valueSet", element.getValueSetElement(), -1);
6904    }
6905    if (element.hasHierarchyMeaningElement()) {
6906      composeEnum(t, "CodeSystem", "hierarchyMeaning", element.getHierarchyMeaningElement(), -1);
6907    }
6908    if (element.hasCompositionalElement()) {
6909      composeBoolean(t, "CodeSystem", "compositional", element.getCompositionalElement(), -1);
6910    }
6911    if (element.hasVersionNeededElement()) {
6912      composeBoolean(t, "CodeSystem", "versionNeeded", element.getVersionNeededElement(), -1);
6913    }
6914    if (element.hasContentElement()) {
6915      composeEnum(t, "CodeSystem", "content", element.getContentElement(), -1);
6916    }
6917    if (element.hasSupplementsElement()) {
6918      composeCanonical(t, "CodeSystem", "supplements", element.getSupplementsElement(), -1);
6919    }
6920    if (element.hasCountElement()) {
6921      composeUnsignedInt(t, "CodeSystem", "count", element.getCountElement(), -1);
6922    }
6923    for (int i = 0; i < element.getFilter().size(); i++) {
6924      composeCodeSystemFilterComponent(t, "CodeSystem", "filter", element.getFilter().get(i), i);
6925    }
6926    for (int i = 0; i < element.getProperty().size(); i++) {
6927      composeCodeSystemPropertyComponent(t, "CodeSystem", "property", element.getProperty().get(i), i);
6928    }
6929    for (int i = 0; i < element.getConcept().size(); i++) {
6930      composeCodeSystemConceptDefinitionComponent(t, "CodeSystem", "concept", element.getConcept().get(i), i);
6931    }
6932  }
6933
6934  protected void composeCodeSystemFilterComponent(Complex parent, String parentType, String name, CodeSystem.CodeSystemFilterComponent element, int index) {
6935    if (element == null) 
6936      return;
6937    Complex t;
6938    if (Utilities.noString(parentType))
6939      t = parent;
6940    else {
6941      t = parent.predicate("fhir:"+name,index > -1);
6942    }
6943    composeBackboneElement(t, "filter", name, element, index);
6944    if (element.hasCodeElement()) {
6945      composeCode(t, "CodeSystemFilterComponent", "code", element.getCodeElement(), -1);
6946    }
6947    if (element.hasDescriptionElement()) {
6948      composeString(t, "CodeSystemFilterComponent", "description", element.getDescriptionElement(), -1);
6949    }
6950    for (int i = 0; i < element.getOperator().size(); i++) {
6951      composeEnum(t, "CodeSystemFilterComponent", "operator", element.getOperator().get(i), i);
6952    }
6953    if (element.hasValueElement()) {
6954      composeString(t, "CodeSystemFilterComponent", "value", element.getValueElement(), -1);
6955    }
6956  }
6957
6958  protected void composeCodeSystemPropertyComponent(Complex parent, String parentType, String name, CodeSystem.PropertyComponent element, int index) {
6959    if (element == null) 
6960      return;
6961    Complex t;
6962    if (Utilities.noString(parentType))
6963      t = parent;
6964    else {
6965      t = parent.predicate("fhir:"+name,index > -1);
6966    }
6967    composeBackboneElement(t, "property", name, element, index);
6968    if (element.hasCodeElement()) {
6969      composeCode(t, "PropertyComponent", "code", element.getCodeElement(), -1);
6970    }
6971    if (element.hasUriElement()) {
6972      composeUri(t, "PropertyComponent", "uri", element.getUriElement(), -1);
6973    }
6974    if (element.hasDescriptionElement()) {
6975      composeString(t, "PropertyComponent", "description", element.getDescriptionElement(), -1);
6976    }
6977    if (element.hasTypeElement()) {
6978      composeEnum(t, "PropertyComponent", "type", element.getTypeElement(), -1);
6979    }
6980  }
6981
6982  protected void composeCodeSystemConceptDefinitionComponent(Complex parent, String parentType, String name, CodeSystem.ConceptDefinitionComponent element, int index) {
6983    if (element == null) 
6984      return;
6985    Complex t;
6986    if (Utilities.noString(parentType))
6987      t = parent;
6988    else {
6989      t = parent.predicate("fhir:"+name,index > -1);
6990    }
6991    composeBackboneElement(t, "concept", name, element, index);
6992    if (element.hasCodeElement()) {
6993      composeCode(t, "ConceptDefinitionComponent", "code", element.getCodeElement(), -1);
6994    }
6995    if (element.hasDisplayElement()) {
6996      composeString(t, "ConceptDefinitionComponent", "display", element.getDisplayElement(), -1);
6997    }
6998    if (element.hasDefinitionElement()) {
6999      composeString(t, "ConceptDefinitionComponent", "definition", element.getDefinitionElement(), -1);
7000    }
7001    for (int i = 0; i < element.getDesignation().size(); i++) {
7002      composeCodeSystemConceptDefinitionDesignationComponent(t, "ConceptDefinitionComponent", "designation", element.getDesignation().get(i), i);
7003    }
7004    for (int i = 0; i < element.getProperty().size(); i++) {
7005      composeCodeSystemConceptPropertyComponent(t, "ConceptDefinitionComponent", "property", element.getProperty().get(i), i);
7006    }
7007    for (int i = 0; i < element.getConcept().size(); i++) {
7008      composeCodeSystemConceptDefinitionComponent(t, "ConceptDefinitionComponent", "concept", element.getConcept().get(i), i);
7009    }
7010  }
7011
7012  protected void composeCodeSystemConceptDefinitionDesignationComponent(Complex parent, String parentType, String name, CodeSystem.ConceptDefinitionDesignationComponent element, int index) {
7013    if (element == null) 
7014      return;
7015    Complex t;
7016    if (Utilities.noString(parentType))
7017      t = parent;
7018    else {
7019      t = parent.predicate("fhir:"+name,index > -1);
7020    }
7021    composeBackboneElement(t, "designation", name, element, index);
7022    if (element.hasLanguageElement()) {
7023      composeCode(t, "ConceptDefinitionDesignationComponent", "language", element.getLanguageElement(), -1);
7024    }
7025    if (element.hasUse()) {
7026      composeCoding(t, "ConceptDefinitionDesignationComponent", "use", element.getUse(), -1);
7027    }
7028    for (int i = 0; i < element.getAdditionalUse().size(); i++) {
7029      composeCoding(t, "ConceptDefinitionDesignationComponent", "additionalUse", element.getAdditionalUse().get(i), i);
7030    }
7031    if (element.hasValueElement()) {
7032      composeString(t, "ConceptDefinitionDesignationComponent", "value", element.getValueElement(), -1);
7033    }
7034  }
7035
7036  protected void composeCodeSystemConceptPropertyComponent(Complex parent, String parentType, String name, CodeSystem.ConceptPropertyComponent element, int index) {
7037    if (element == null) 
7038      return;
7039    Complex t;
7040    if (Utilities.noString(parentType))
7041      t = parent;
7042    else {
7043      t = parent.predicate("fhir:"+name,index > -1);
7044    }
7045    composeBackboneElement(t, "property", name, element, index);
7046    if (element.hasCodeElement()) {
7047      composeCode(t, "ConceptPropertyComponent", "code", element.getCodeElement(), -1);
7048    }
7049    if (element.hasValue()) {
7050      composeType(t, "ConceptPropertyComponent", "value", element.getValue(), -1);
7051    }
7052  }
7053
7054  protected void composeCommunication(Complex parent, String parentType, String name, Communication element, int index) {
7055    if (element == null) 
7056      return;
7057    Complex t;
7058    if (Utilities.noString(parentType))
7059      t = parent;
7060    else {
7061      t = parent.predicate("fhir:"+name,index > -1);
7062    }
7063    composeDomainResource(t, "Communication", name, element, index);
7064    for (int i = 0; i < element.getIdentifier().size(); i++) {
7065      composeIdentifier(t, "Communication", "identifier", element.getIdentifier().get(i), i);
7066    }
7067    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
7068      composeCanonical(t, "Communication", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
7069    }
7070    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
7071      composeUri(t, "Communication", "instantiatesUri", element.getInstantiatesUri().get(i), i);
7072    }
7073    for (int i = 0; i < element.getBasedOn().size(); i++) {
7074      composeReference(t, "Communication", "basedOn", element.getBasedOn().get(i), i);
7075    }
7076    for (int i = 0; i < element.getPartOf().size(); i++) {
7077      composeReference(t, "Communication", "partOf", element.getPartOf().get(i), i);
7078    }
7079    for (int i = 0; i < element.getInResponseTo().size(); i++) {
7080      composeReference(t, "Communication", "inResponseTo", element.getInResponseTo().get(i), i);
7081    }
7082    if (element.hasStatusElement()) {
7083      composeEnum(t, "Communication", "status", element.getStatusElement(), -1);
7084    }
7085    if (element.hasStatusReason()) {
7086      composeCodeableConcept(t, "Communication", "statusReason", element.getStatusReason(), -1);
7087    }
7088    for (int i = 0; i < element.getCategory().size(); i++) {
7089      composeCodeableConcept(t, "Communication", "category", element.getCategory().get(i), i);
7090    }
7091    if (element.hasPriorityElement()) {
7092      composeEnum(t, "Communication", "priority", element.getPriorityElement(), -1);
7093    }
7094    for (int i = 0; i < element.getMedium().size(); i++) {
7095      composeCodeableConcept(t, "Communication", "medium", element.getMedium().get(i), i);
7096    }
7097    if (element.hasSubject()) {
7098      composeReference(t, "Communication", "subject", element.getSubject(), -1);
7099    }
7100    if (element.hasTopic()) {
7101      composeCodeableConcept(t, "Communication", "topic", element.getTopic(), -1);
7102    }
7103    for (int i = 0; i < element.getAbout().size(); i++) {
7104      composeReference(t, "Communication", "about", element.getAbout().get(i), i);
7105    }
7106    if (element.hasEncounter()) {
7107      composeReference(t, "Communication", "encounter", element.getEncounter(), -1);
7108    }
7109    if (element.hasSentElement()) {
7110      composeDateTime(t, "Communication", "sent", element.getSentElement(), -1);
7111    }
7112    if (element.hasReceivedElement()) {
7113      composeDateTime(t, "Communication", "received", element.getReceivedElement(), -1);
7114    }
7115    for (int i = 0; i < element.getRecipient().size(); i++) {
7116      composeReference(t, "Communication", "recipient", element.getRecipient().get(i), i);
7117    }
7118    if (element.hasSender()) {
7119      composeReference(t, "Communication", "sender", element.getSender(), -1);
7120    }
7121    for (int i = 0; i < element.getReason().size(); i++) {
7122      composeCodeableReference(t, "Communication", "reason", element.getReason().get(i), i);
7123    }
7124    for (int i = 0; i < element.getPayload().size(); i++) {
7125      composeCommunicationPayloadComponent(t, "Communication", "payload", element.getPayload().get(i), i);
7126    }
7127    for (int i = 0; i < element.getNote().size(); i++) {
7128      composeAnnotation(t, "Communication", "note", element.getNote().get(i), i);
7129    }
7130  }
7131
7132  protected void composeCommunicationPayloadComponent(Complex parent, String parentType, String name, Communication.CommunicationPayloadComponent element, int index) {
7133    if (element == null) 
7134      return;
7135    Complex t;
7136    if (Utilities.noString(parentType))
7137      t = parent;
7138    else {
7139      t = parent.predicate("fhir:"+name,index > -1);
7140    }
7141    composeBackboneElement(t, "payload", name, element, index);
7142    if (element.hasContent()) {
7143      composeType(t, "CommunicationPayloadComponent", "content", element.getContent(), -1);
7144    }
7145  }
7146
7147  protected void composeCommunicationRequest(Complex parent, String parentType, String name, CommunicationRequest element, int index) {
7148    if (element == null) 
7149      return;
7150    Complex t;
7151    if (Utilities.noString(parentType))
7152      t = parent;
7153    else {
7154      t = parent.predicate("fhir:"+name,index > -1);
7155    }
7156    composeDomainResource(t, "CommunicationRequest", name, element, index);
7157    for (int i = 0; i < element.getIdentifier().size(); i++) {
7158      composeIdentifier(t, "CommunicationRequest", "identifier", element.getIdentifier().get(i), i);
7159    }
7160    for (int i = 0; i < element.getBasedOn().size(); i++) {
7161      composeReference(t, "CommunicationRequest", "basedOn", element.getBasedOn().get(i), i);
7162    }
7163    for (int i = 0; i < element.getReplaces().size(); i++) {
7164      composeReference(t, "CommunicationRequest", "replaces", element.getReplaces().get(i), i);
7165    }
7166    if (element.hasGroupIdentifier()) {
7167      composeIdentifier(t, "CommunicationRequest", "groupIdentifier", element.getGroupIdentifier(), -1);
7168    }
7169    if (element.hasStatusElement()) {
7170      composeEnum(t, "CommunicationRequest", "status", element.getStatusElement(), -1);
7171    }
7172    if (element.hasStatusReason()) {
7173      composeCodeableConcept(t, "CommunicationRequest", "statusReason", element.getStatusReason(), -1);
7174    }
7175    if (element.hasIntentElement()) {
7176      composeEnum(t, "CommunicationRequest", "intent", element.getIntentElement(), -1);
7177    }
7178    for (int i = 0; i < element.getCategory().size(); i++) {
7179      composeCodeableConcept(t, "CommunicationRequest", "category", element.getCategory().get(i), i);
7180    }
7181    if (element.hasPriorityElement()) {
7182      composeEnum(t, "CommunicationRequest", "priority", element.getPriorityElement(), -1);
7183    }
7184    if (element.hasDoNotPerformElement()) {
7185      composeBoolean(t, "CommunicationRequest", "doNotPerform", element.getDoNotPerformElement(), -1);
7186    }
7187    for (int i = 0; i < element.getMedium().size(); i++) {
7188      composeCodeableConcept(t, "CommunicationRequest", "medium", element.getMedium().get(i), i);
7189    }
7190    if (element.hasSubject()) {
7191      composeReference(t, "CommunicationRequest", "subject", element.getSubject(), -1);
7192    }
7193    for (int i = 0; i < element.getAbout().size(); i++) {
7194      composeReference(t, "CommunicationRequest", "about", element.getAbout().get(i), i);
7195    }
7196    if (element.hasEncounter()) {
7197      composeReference(t, "CommunicationRequest", "encounter", element.getEncounter(), -1);
7198    }
7199    for (int i = 0; i < element.getPayload().size(); i++) {
7200      composeCommunicationRequestPayloadComponent(t, "CommunicationRequest", "payload", element.getPayload().get(i), i);
7201    }
7202    if (element.hasOccurrence()) {
7203      composeType(t, "CommunicationRequest", "occurrence", element.getOccurrence(), -1);
7204    }
7205    if (element.hasAuthoredOnElement()) {
7206      composeDateTime(t, "CommunicationRequest", "authoredOn", element.getAuthoredOnElement(), -1);
7207    }
7208    if (element.hasRequester()) {
7209      composeReference(t, "CommunicationRequest", "requester", element.getRequester(), -1);
7210    }
7211    for (int i = 0; i < element.getRecipient().size(); i++) {
7212      composeReference(t, "CommunicationRequest", "recipient", element.getRecipient().get(i), i);
7213    }
7214    for (int i = 0; i < element.getInformationProvider().size(); i++) {
7215      composeReference(t, "CommunicationRequest", "informationProvider", element.getInformationProvider().get(i), i);
7216    }
7217    for (int i = 0; i < element.getReason().size(); i++) {
7218      composeCodeableReference(t, "CommunicationRequest", "reason", element.getReason().get(i), i);
7219    }
7220    for (int i = 0; i < element.getNote().size(); i++) {
7221      composeAnnotation(t, "CommunicationRequest", "note", element.getNote().get(i), i);
7222    }
7223  }
7224
7225  protected void composeCommunicationRequestPayloadComponent(Complex parent, String parentType, String name, CommunicationRequest.CommunicationRequestPayloadComponent 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:"+name,index > -1);
7233    }
7234    composeBackboneElement(t, "payload", name, element, index);
7235    if (element.hasContent()) {
7236      composeType(t, "CommunicationRequestPayloadComponent", "content", element.getContent(), -1);
7237    }
7238  }
7239
7240  protected void composeCompartmentDefinition(Complex parent, String parentType, String name, CompartmentDefinition element, int index) {
7241    if (element == null) 
7242      return;
7243    Complex t;
7244    if (Utilities.noString(parentType))
7245      t = parent;
7246    else {
7247      t = parent.predicate("fhir:"+name,index > -1);
7248    }
7249    composeCanonicalResource(t, "CompartmentDefinition", name, element, index);
7250    if (element.hasUrlElement()) {
7251      composeUri(t, "CompartmentDefinition", "url", element.getUrlElement(), -1);
7252    }
7253    if (element.hasVersionElement()) {
7254      composeString(t, "CompartmentDefinition", "version", element.getVersionElement(), -1);
7255    }
7256    if (element.hasVersionAlgorithm()) {
7257      composeType(t, "CompartmentDefinition", "versionAlgorithm", element.getVersionAlgorithm(), -1);
7258    }
7259    if (element.hasNameElement()) {
7260      composeString(t, "CompartmentDefinition", "name", element.getNameElement(), -1);
7261    }
7262    if (element.hasTitleElement()) {
7263      composeString(t, "CompartmentDefinition", "title", element.getTitleElement(), -1);
7264    }
7265    if (element.hasStatusElement()) {
7266      composeEnum(t, "CompartmentDefinition", "status", element.getStatusElement(), -1);
7267    }
7268    if (element.hasExperimentalElement()) {
7269      composeBoolean(t, "CompartmentDefinition", "experimental", element.getExperimentalElement(), -1);
7270    }
7271    if (element.hasDateElement()) {
7272      composeDateTime(t, "CompartmentDefinition", "date", element.getDateElement(), -1);
7273    }
7274    if (element.hasPublisherElement()) {
7275      composeString(t, "CompartmentDefinition", "publisher", element.getPublisherElement(), -1);
7276    }
7277    for (int i = 0; i < element.getContact().size(); i++) {
7278      composeContactDetail(t, "CompartmentDefinition", "contact", element.getContact().get(i), i);
7279    }
7280    if (element.hasDescriptionElement()) {
7281      composeMarkdown(t, "CompartmentDefinition", "description", element.getDescriptionElement(), -1);
7282    }
7283    for (int i = 0; i < element.getUseContext().size(); i++) {
7284      composeUsageContext(t, "CompartmentDefinition", "useContext", element.getUseContext().get(i), i);
7285    }
7286    if (element.hasPurposeElement()) {
7287      composeMarkdown(t, "CompartmentDefinition", "purpose", element.getPurposeElement(), -1);
7288    }
7289    if (element.hasCodeElement()) {
7290      composeEnum(t, "CompartmentDefinition", "code", element.getCodeElement(), -1);
7291    }
7292    if (element.hasSearchElement()) {
7293      composeBoolean(t, "CompartmentDefinition", "search", element.getSearchElement(), -1);
7294    }
7295    for (int i = 0; i < element.getResource().size(); i++) {
7296      composeCompartmentDefinitionResourceComponent(t, "CompartmentDefinition", "resource", element.getResource().get(i), i);
7297    }
7298  }
7299
7300  protected void composeCompartmentDefinitionResourceComponent(Complex parent, String parentType, String name, CompartmentDefinition.CompartmentDefinitionResourceComponent element, int index) {
7301    if (element == null) 
7302      return;
7303    Complex t;
7304    if (Utilities.noString(parentType))
7305      t = parent;
7306    else {
7307      t = parent.predicate("fhir:"+name,index > -1);
7308    }
7309    composeBackboneElement(t, "resource", name, element, index);
7310    if (element.hasCodeElement()) {
7311      composeCode(t, "CompartmentDefinitionResourceComponent", "code", element.getCodeElement(), -1);
7312    }
7313    for (int i = 0; i < element.getParam().size(); i++) {
7314      composeString(t, "CompartmentDefinitionResourceComponent", "param", element.getParam().get(i), i);
7315    }
7316    if (element.hasDocumentationElement()) {
7317      composeString(t, "CompartmentDefinitionResourceComponent", "documentation", element.getDocumentationElement(), -1);
7318    }
7319    if (element.hasStartParamElement()) {
7320      composeUri(t, "CompartmentDefinitionResourceComponent", "startParam", element.getStartParamElement(), -1);
7321    }
7322    if (element.hasEndParamElement()) {
7323      composeUri(t, "CompartmentDefinitionResourceComponent", "endParam", element.getEndParamElement(), -1);
7324    }
7325  }
7326
7327  protected void composeComposition(Complex parent, String parentType, String name, Composition element, int index) {
7328    if (element == null) 
7329      return;
7330    Complex t;
7331    if (Utilities.noString(parentType))
7332      t = parent;
7333    else {
7334      t = parent.predicate("fhir:"+name,index > -1);
7335    }
7336    composeDomainResource(t, "Composition", name, element, index);
7337    if (element.hasUrlElement()) {
7338      composeUri(t, "Composition", "url", element.getUrlElement(), -1);
7339    }
7340    for (int i = 0; i < element.getIdentifier().size(); i++) {
7341      composeIdentifier(t, "Composition", "identifier", element.getIdentifier().get(i), i);
7342    }
7343    if (element.hasVersionElement()) {
7344      composeString(t, "Composition", "version", element.getVersionElement(), -1);
7345    }
7346    if (element.hasStatusElement()) {
7347      composeEnum(t, "Composition", "status", element.getStatusElement(), -1);
7348    }
7349    if (element.hasType()) {
7350      composeCodeableConcept(t, "Composition", "type", element.getType(), -1);
7351    }
7352    for (int i = 0; i < element.getCategory().size(); i++) {
7353      composeCodeableConcept(t, "Composition", "category", element.getCategory().get(i), i);
7354    }
7355    for (int i = 0; i < element.getSubject().size(); i++) {
7356      composeReference(t, "Composition", "subject", element.getSubject().get(i), i);
7357    }
7358    if (element.hasEncounter()) {
7359      composeReference(t, "Composition", "encounter", element.getEncounter(), -1);
7360    }
7361    if (element.hasDateElement()) {
7362      composeDateTime(t, "Composition", "date", element.getDateElement(), -1);
7363    }
7364    for (int i = 0; i < element.getUseContext().size(); i++) {
7365      composeUsageContext(t, "Composition", "useContext", element.getUseContext().get(i), i);
7366    }
7367    for (int i = 0; i < element.getAuthor().size(); i++) {
7368      composeReference(t, "Composition", "author", element.getAuthor().get(i), i);
7369    }
7370    if (element.hasNameElement()) {
7371      composeString(t, "Composition", "name", element.getNameElement(), -1);
7372    }
7373    if (element.hasTitleElement()) {
7374      composeString(t, "Composition", "title", element.getTitleElement(), -1);
7375    }
7376    for (int i = 0; i < element.getNote().size(); i++) {
7377      composeAnnotation(t, "Composition", "note", element.getNote().get(i), i);
7378    }
7379    for (int i = 0; i < element.getAttester().size(); i++) {
7380      composeCompositionAttesterComponent(t, "Composition", "attester", element.getAttester().get(i), i);
7381    }
7382    if (element.hasCustodian()) {
7383      composeReference(t, "Composition", "custodian", element.getCustodian(), -1);
7384    }
7385    for (int i = 0; i < element.getRelatesTo().size(); i++) {
7386      composeRelatedArtifact(t, "Composition", "relatesTo", element.getRelatesTo().get(i), i);
7387    }
7388    for (int i = 0; i < element.getEvent().size(); i++) {
7389      composeCompositionEventComponent(t, "Composition", "event", element.getEvent().get(i), i);
7390    }
7391    for (int i = 0; i < element.getSection().size(); i++) {
7392      composeCompositionSectionComponent(t, "Composition", "section", element.getSection().get(i), i);
7393    }
7394  }
7395
7396  protected void composeCompositionAttesterComponent(Complex parent, String parentType, String name, Composition.CompositionAttesterComponent element, int index) {
7397    if (element == null) 
7398      return;
7399    Complex t;
7400    if (Utilities.noString(parentType))
7401      t = parent;
7402    else {
7403      t = parent.predicate("fhir:"+name,index > -1);
7404    }
7405    composeBackboneElement(t, "attester", name, element, index);
7406    if (element.hasMode()) {
7407      composeCodeableConcept(t, "CompositionAttesterComponent", "mode", element.getMode(), -1);
7408    }
7409    if (element.hasTimeElement()) {
7410      composeDateTime(t, "CompositionAttesterComponent", "time", element.getTimeElement(), -1);
7411    }
7412    if (element.hasParty()) {
7413      composeReference(t, "CompositionAttesterComponent", "party", element.getParty(), -1);
7414    }
7415  }
7416
7417  protected void composeCompositionEventComponent(Complex parent, String parentType, String name, Composition.CompositionEventComponent element, int index) {
7418    if (element == null) 
7419      return;
7420    Complex t;
7421    if (Utilities.noString(parentType))
7422      t = parent;
7423    else {
7424      t = parent.predicate("fhir:"+name,index > -1);
7425    }
7426    composeBackboneElement(t, "event", name, element, index);
7427    if (element.hasPeriod()) {
7428      composePeriod(t, "CompositionEventComponent", "period", element.getPeriod(), -1);
7429    }
7430    for (int i = 0; i < element.getDetail().size(); i++) {
7431      composeCodeableReference(t, "CompositionEventComponent", "detail", element.getDetail().get(i), i);
7432    }
7433  }
7434
7435  protected void composeCompositionSectionComponent(Complex parent, String parentType, String name, Composition.SectionComponent element, int index) {
7436    if (element == null) 
7437      return;
7438    Complex t;
7439    if (Utilities.noString(parentType))
7440      t = parent;
7441    else {
7442      t = parent.predicate("fhir:"+name,index > -1);
7443    }
7444    composeBackboneElement(t, "section", name, element, index);
7445    if (element.hasTitleElement()) {
7446      composeString(t, "SectionComponent", "title", element.getTitleElement(), -1);
7447    }
7448    if (element.hasCode()) {
7449      composeCodeableConcept(t, "SectionComponent", "code", element.getCode(), -1);
7450    }
7451    for (int i = 0; i < element.getAuthor().size(); i++) {
7452      composeReference(t, "SectionComponent", "author", element.getAuthor().get(i), i);
7453    }
7454    if (element.hasFocus()) {
7455      composeReference(t, "SectionComponent", "focus", element.getFocus(), -1);
7456    }
7457    if (element.hasText()) {
7458      composeNarrative(t, "SectionComponent", "text", element.getText(), -1);
7459    }
7460    if (element.hasOrderedBy()) {
7461      composeCodeableConcept(t, "SectionComponent", "orderedBy", element.getOrderedBy(), -1);
7462    }
7463    for (int i = 0; i < element.getEntry().size(); i++) {
7464      composeReference(t, "SectionComponent", "entry", element.getEntry().get(i), i);
7465    }
7466    if (element.hasEmptyReason()) {
7467      composeCodeableConcept(t, "SectionComponent", "emptyReason", element.getEmptyReason(), -1);
7468    }
7469    for (int i = 0; i < element.getSection().size(); i++) {
7470      composeCompositionSectionComponent(t, "SectionComponent", "section", element.getSection().get(i), i);
7471    }
7472  }
7473
7474  protected void composeConceptMap(Complex parent, String parentType, String name, ConceptMap element, int index) {
7475    if (element == null) 
7476      return;
7477    Complex t;
7478    if (Utilities.noString(parentType))
7479      t = parent;
7480    else {
7481      t = parent.predicate("fhir:"+name,index > -1);
7482    }
7483    composeMetadataResource(t, "ConceptMap", name, element, index);
7484    if (element.hasUrlElement()) {
7485      composeUri(t, "ConceptMap", "url", element.getUrlElement(), -1);
7486    }
7487    for (int i = 0; i < element.getIdentifier().size(); i++) {
7488      composeIdentifier(t, "ConceptMap", "identifier", element.getIdentifier().get(i), i);
7489    }
7490    if (element.hasVersionElement()) {
7491      composeString(t, "ConceptMap", "version", element.getVersionElement(), -1);
7492    }
7493    if (element.hasVersionAlgorithm()) {
7494      composeType(t, "ConceptMap", "versionAlgorithm", element.getVersionAlgorithm(), -1);
7495    }
7496    if (element.hasNameElement()) {
7497      composeString(t, "ConceptMap", "name", element.getNameElement(), -1);
7498    }
7499    if (element.hasTitleElement()) {
7500      composeString(t, "ConceptMap", "title", element.getTitleElement(), -1);
7501    }
7502    if (element.hasStatusElement()) {
7503      composeEnum(t, "ConceptMap", "status", element.getStatusElement(), -1);
7504    }
7505    if (element.hasExperimentalElement()) {
7506      composeBoolean(t, "ConceptMap", "experimental", element.getExperimentalElement(), -1);
7507    }
7508    if (element.hasDateElement()) {
7509      composeDateTime(t, "ConceptMap", "date", element.getDateElement(), -1);
7510    }
7511    if (element.hasPublisherElement()) {
7512      composeString(t, "ConceptMap", "publisher", element.getPublisherElement(), -1);
7513    }
7514    for (int i = 0; i < element.getContact().size(); i++) {
7515      composeContactDetail(t, "ConceptMap", "contact", element.getContact().get(i), i);
7516    }
7517    if (element.hasDescriptionElement()) {
7518      composeMarkdown(t, "ConceptMap", "description", element.getDescriptionElement(), -1);
7519    }
7520    for (int i = 0; i < element.getUseContext().size(); i++) {
7521      composeUsageContext(t, "ConceptMap", "useContext", element.getUseContext().get(i), i);
7522    }
7523    for (int i = 0; i < element.getJurisdiction().size(); i++) {
7524      composeCodeableConcept(t, "ConceptMap", "jurisdiction", element.getJurisdiction().get(i), i);
7525    }
7526    if (element.hasPurposeElement()) {
7527      composeMarkdown(t, "ConceptMap", "purpose", element.getPurposeElement(), -1);
7528    }
7529    if (element.hasCopyrightElement()) {
7530      composeMarkdown(t, "ConceptMap", "copyright", element.getCopyrightElement(), -1);
7531    }
7532    if (element.hasCopyrightLabelElement()) {
7533      composeString(t, "ConceptMap", "copyrightLabel", element.getCopyrightLabelElement(), -1);
7534    }
7535    if (element.hasApprovalDateElement()) {
7536      composeDate(t, "ConceptMap", "approvalDate", element.getApprovalDateElement(), -1);
7537    }
7538    if (element.hasLastReviewDateElement()) {
7539      composeDate(t, "ConceptMap", "lastReviewDate", element.getLastReviewDateElement(), -1);
7540    }
7541    if (element.hasEffectivePeriod()) {
7542      composePeriod(t, "ConceptMap", "effectivePeriod", element.getEffectivePeriod(), -1);
7543    }
7544    for (int i = 0; i < element.getTopic().size(); i++) {
7545      composeCodeableConcept(t, "ConceptMap", "topic", element.getTopic().get(i), i);
7546    }
7547    for (int i = 0; i < element.getAuthor().size(); i++) {
7548      composeContactDetail(t, "ConceptMap", "author", element.getAuthor().get(i), i);
7549    }
7550    for (int i = 0; i < element.getEditor().size(); i++) {
7551      composeContactDetail(t, "ConceptMap", "editor", element.getEditor().get(i), i);
7552    }
7553    for (int i = 0; i < element.getReviewer().size(); i++) {
7554      composeContactDetail(t, "ConceptMap", "reviewer", element.getReviewer().get(i), i);
7555    }
7556    for (int i = 0; i < element.getEndorser().size(); i++) {
7557      composeContactDetail(t, "ConceptMap", "endorser", element.getEndorser().get(i), i);
7558    }
7559    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
7560      composeRelatedArtifact(t, "ConceptMap", "relatedArtifact", element.getRelatedArtifact().get(i), i);
7561    }
7562    for (int i = 0; i < element.getProperty().size(); i++) {
7563      composeConceptMapPropertyComponent(t, "ConceptMap", "property", element.getProperty().get(i), i);
7564    }
7565    for (int i = 0; i < element.getAdditionalAttribute().size(); i++) {
7566      composeConceptMapAdditionalAttributeComponent(t, "ConceptMap", "additionalAttribute", element.getAdditionalAttribute().get(i), i);
7567    }
7568    if (element.hasSourceScope()) {
7569      composeType(t, "ConceptMap", "sourceScope", element.getSourceScope(), -1);
7570    }
7571    if (element.hasTargetScope()) {
7572      composeType(t, "ConceptMap", "targetScope", element.getTargetScope(), -1);
7573    }
7574    for (int i = 0; i < element.getGroup().size(); i++) {
7575      composeConceptMapGroupComponent(t, "ConceptMap", "group", element.getGroup().get(i), i);
7576    }
7577  }
7578
7579  protected void composeConceptMapPropertyComponent(Complex parent, String parentType, String name, ConceptMap.PropertyComponent element, int index) {
7580    if (element == null) 
7581      return;
7582    Complex t;
7583    if (Utilities.noString(parentType))
7584      t = parent;
7585    else {
7586      t = parent.predicate("fhir:"+name,index > -1);
7587    }
7588    composeBackboneElement(t, "property", name, element, index);
7589    if (element.hasCodeElement()) {
7590      composeCode(t, "PropertyComponent", "code", element.getCodeElement(), -1);
7591    }
7592    if (element.hasUriElement()) {
7593      composeUri(t, "PropertyComponent", "uri", element.getUriElement(), -1);
7594    }
7595    if (element.hasDescriptionElement()) {
7596      composeString(t, "PropertyComponent", "description", element.getDescriptionElement(), -1);
7597    }
7598    if (element.hasTypeElement()) {
7599      composeEnum(t, "PropertyComponent", "type", element.getTypeElement(), -1);
7600    }
7601    if (element.hasSystemElement()) {
7602      composeCanonical(t, "PropertyComponent", "system", element.getSystemElement(), -1);
7603    }
7604  }
7605
7606  protected void composeConceptMapAdditionalAttributeComponent(Complex parent, String parentType, String name, ConceptMap.AdditionalAttributeComponent element, int index) {
7607    if (element == null) 
7608      return;
7609    Complex t;
7610    if (Utilities.noString(parentType))
7611      t = parent;
7612    else {
7613      t = parent.predicate("fhir:"+name,index > -1);
7614    }
7615    composeBackboneElement(t, "additionalAttribute", name, element, index);
7616    if (element.hasCodeElement()) {
7617      composeCode(t, "AdditionalAttributeComponent", "code", element.getCodeElement(), -1);
7618    }
7619    if (element.hasUriElement()) {
7620      composeUri(t, "AdditionalAttributeComponent", "uri", element.getUriElement(), -1);
7621    }
7622    if (element.hasDescriptionElement()) {
7623      composeString(t, "AdditionalAttributeComponent", "description", element.getDescriptionElement(), -1);
7624    }
7625    if (element.hasTypeElement()) {
7626      composeEnum(t, "AdditionalAttributeComponent", "type", element.getTypeElement(), -1);
7627    }
7628  }
7629
7630  protected void composeConceptMapGroupComponent(Complex parent, String parentType, String name, ConceptMap.ConceptMapGroupComponent element, int index) {
7631    if (element == null) 
7632      return;
7633    Complex t;
7634    if (Utilities.noString(parentType))
7635      t = parent;
7636    else {
7637      t = parent.predicate("fhir:"+name,index > -1);
7638    }
7639    composeBackboneElement(t, "group", name, element, index);
7640    if (element.hasSourceElement()) {
7641      composeCanonical(t, "ConceptMapGroupComponent", "source", element.getSourceElement(), -1);
7642    }
7643    if (element.hasTargetElement()) {
7644      composeCanonical(t, "ConceptMapGroupComponent", "target", element.getTargetElement(), -1);
7645    }
7646    for (int i = 0; i < element.getElement().size(); i++) {
7647      composeConceptMapSourceElementComponent(t, "ConceptMapGroupComponent", "element", element.getElement().get(i), i);
7648    }
7649    if (element.hasUnmapped()) {
7650      composeConceptMapGroupUnmappedComponent(t, "ConceptMapGroupComponent", "unmapped", element.getUnmapped(), -1);
7651    }
7652  }
7653
7654  protected void composeConceptMapSourceElementComponent(Complex parent, String parentType, String name, ConceptMap.SourceElementComponent element, int index) {
7655    if (element == null) 
7656      return;
7657    Complex t;
7658    if (Utilities.noString(parentType))
7659      t = parent;
7660    else {
7661      t = parent.predicate("fhir:"+name,index > -1);
7662    }
7663    composeBackboneElement(t, "element", name, element, index);
7664    if (element.hasCodeElement()) {
7665      composeCode(t, "SourceElementComponent", "code", element.getCodeElement(), -1);
7666    }
7667    if (element.hasDisplayElement()) {
7668      composeString(t, "SourceElementComponent", "display", element.getDisplayElement(), -1);
7669    }
7670    if (element.hasValueSetElement()) {
7671      composeCanonical(t, "SourceElementComponent", "valueSet", element.getValueSetElement(), -1);
7672    }
7673    if (element.hasNoMapElement()) {
7674      composeBoolean(t, "SourceElementComponent", "noMap", element.getNoMapElement(), -1);
7675    }
7676    for (int i = 0; i < element.getTarget().size(); i++) {
7677      composeConceptMapTargetElementComponent(t, "SourceElementComponent", "target", element.getTarget().get(i), i);
7678    }
7679  }
7680
7681  protected void composeConceptMapTargetElementComponent(Complex parent, String parentType, String name, ConceptMap.TargetElementComponent element, int index) {
7682    if (element == null) 
7683      return;
7684    Complex t;
7685    if (Utilities.noString(parentType))
7686      t = parent;
7687    else {
7688      t = parent.predicate("fhir:"+name,index > -1);
7689    }
7690    composeBackboneElement(t, "target", name, element, index);
7691    if (element.hasCodeElement()) {
7692      composeCode(t, "TargetElementComponent", "code", element.getCodeElement(), -1);
7693    }
7694    if (element.hasDisplayElement()) {
7695      composeString(t, "TargetElementComponent", "display", element.getDisplayElement(), -1);
7696    }
7697    if (element.hasValueSetElement()) {
7698      composeCanonical(t, "TargetElementComponent", "valueSet", element.getValueSetElement(), -1);
7699    }
7700    if (element.hasRelationshipElement()) {
7701      composeEnum(t, "TargetElementComponent", "relationship", element.getRelationshipElement(), -1);
7702    }
7703    if (element.hasCommentElement()) {
7704      composeString(t, "TargetElementComponent", "comment", element.getCommentElement(), -1);
7705    }
7706    for (int i = 0; i < element.getProperty().size(); i++) {
7707      composeConceptMapMappingPropertyComponent(t, "TargetElementComponent", "property", element.getProperty().get(i), i);
7708    }
7709    for (int i = 0; i < element.getDependsOn().size(); i++) {
7710      composeConceptMapOtherElementComponent(t, "TargetElementComponent", "dependsOn", element.getDependsOn().get(i), i);
7711    }
7712    for (int i = 0; i < element.getProduct().size(); i++) {
7713      composeConceptMapOtherElementComponent(t, "TargetElementComponent", "product", element.getProduct().get(i), i);
7714    }
7715  }
7716
7717  protected void composeConceptMapMappingPropertyComponent(Complex parent, String parentType, String name, ConceptMap.MappingPropertyComponent element, int index) {
7718    if (element == null) 
7719      return;
7720    Complex t;
7721    if (Utilities.noString(parentType))
7722      t = parent;
7723    else {
7724      t = parent.predicate("fhir:"+name,index > -1);
7725    }
7726    composeBackboneElement(t, "property", name, element, index);
7727    if (element.hasCodeElement()) {
7728      composeCode(t, "MappingPropertyComponent", "code", element.getCodeElement(), -1);
7729    }
7730    if (element.hasValue()) {
7731      composeType(t, "MappingPropertyComponent", "value", element.getValue(), -1);
7732    }
7733  }
7734
7735  protected void composeConceptMapOtherElementComponent(Complex parent, String parentType, String name, ConceptMap.OtherElementComponent element, int index) {
7736    if (element == null) 
7737      return;
7738    Complex t;
7739    if (Utilities.noString(parentType))
7740      t = parent;
7741    else {
7742      t = parent.predicate("fhir:"+name,index > -1);
7743    }
7744    composeBackboneElement(t, "dependsOn", name, element, index);
7745    if (element.hasAttributeElement()) {
7746      composeCode(t, "OtherElementComponent", "attribute", element.getAttributeElement(), -1);
7747    }
7748    if (element.hasValue()) {
7749      composeType(t, "OtherElementComponent", "value", element.getValue(), -1);
7750    }
7751    if (element.hasValueSetElement()) {
7752      composeCanonical(t, "OtherElementComponent", "valueSet", element.getValueSetElement(), -1);
7753    }
7754  }
7755
7756  protected void composeConceptMapGroupUnmappedComponent(Complex parent, String parentType, String name, ConceptMap.ConceptMapGroupUnmappedComponent element, int index) {
7757    if (element == null) 
7758      return;
7759    Complex t;
7760    if (Utilities.noString(parentType))
7761      t = parent;
7762    else {
7763      t = parent.predicate("fhir:"+name,index > -1);
7764    }
7765    composeBackboneElement(t, "unmapped", name, element, index);
7766    if (element.hasModeElement()) {
7767      composeEnum(t, "ConceptMapGroupUnmappedComponent", "mode", element.getModeElement(), -1);
7768    }
7769    if (element.hasCodeElement()) {
7770      composeCode(t, "ConceptMapGroupUnmappedComponent", "code", element.getCodeElement(), -1);
7771    }
7772    if (element.hasDisplayElement()) {
7773      composeString(t, "ConceptMapGroupUnmappedComponent", "display", element.getDisplayElement(), -1);
7774    }
7775    if (element.hasValueSetElement()) {
7776      composeCanonical(t, "ConceptMapGroupUnmappedComponent", "valueSet", element.getValueSetElement(), -1);
7777    }
7778    if (element.hasRelationshipElement()) {
7779      composeEnum(t, "ConceptMapGroupUnmappedComponent", "relationship", element.getRelationshipElement(), -1);
7780    }
7781    if (element.hasOtherMapElement()) {
7782      composeCanonical(t, "ConceptMapGroupUnmappedComponent", "otherMap", element.getOtherMapElement(), -1);
7783    }
7784  }
7785
7786  protected void composeCondition(Complex parent, String parentType, String name, Condition 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:"+name,index > -1);
7794    }
7795    composeDomainResource(t, "Condition", name, element, index);
7796    for (int i = 0; i < element.getIdentifier().size(); i++) {
7797      composeIdentifier(t, "Condition", "identifier", element.getIdentifier().get(i), i);
7798    }
7799    if (element.hasClinicalStatus()) {
7800      composeCodeableConcept(t, "Condition", "clinicalStatus", element.getClinicalStatus(), -1);
7801    }
7802    if (element.hasVerificationStatus()) {
7803      composeCodeableConcept(t, "Condition", "verificationStatus", element.getVerificationStatus(), -1);
7804    }
7805    for (int i = 0; i < element.getCategory().size(); i++) {
7806      composeCodeableConcept(t, "Condition", "category", element.getCategory().get(i), i);
7807    }
7808    if (element.hasSeverity()) {
7809      composeCodeableConcept(t, "Condition", "severity", element.getSeverity(), -1);
7810    }
7811    if (element.hasCode()) {
7812      composeCodeableConcept(t, "Condition", "code", element.getCode(), -1);
7813    }
7814    for (int i = 0; i < element.getBodySite().size(); i++) {
7815      composeCodeableConcept(t, "Condition", "bodySite", element.getBodySite().get(i), i);
7816    }
7817    if (element.hasSubject()) {
7818      composeReference(t, "Condition", "subject", element.getSubject(), -1);
7819    }
7820    if (element.hasEncounter()) {
7821      composeReference(t, "Condition", "encounter", element.getEncounter(), -1);
7822    }
7823    if (element.hasOnset()) {
7824      composeType(t, "Condition", "onset", element.getOnset(), -1);
7825    }
7826    if (element.hasAbatement()) {
7827      composeType(t, "Condition", "abatement", element.getAbatement(), -1);
7828    }
7829    if (element.hasRecordedDateElement()) {
7830      composeDateTime(t, "Condition", "recordedDate", element.getRecordedDateElement(), -1);
7831    }
7832    for (int i = 0; i < element.getParticipant().size(); i++) {
7833      composeConditionParticipantComponent(t, "Condition", "participant", element.getParticipant().get(i), i);
7834    }
7835    for (int i = 0; i < element.getStage().size(); i++) {
7836      composeConditionStageComponent(t, "Condition", "stage", element.getStage().get(i), i);
7837    }
7838    for (int i = 0; i < element.getEvidence().size(); i++) {
7839      composeCodeableReference(t, "Condition", "evidence", element.getEvidence().get(i), i);
7840    }
7841    for (int i = 0; i < element.getNote().size(); i++) {
7842      composeAnnotation(t, "Condition", "note", element.getNote().get(i), i);
7843    }
7844  }
7845
7846  protected void composeConditionParticipantComponent(Complex parent, String parentType, String name, Condition.ConditionParticipantComponent element, int index) {
7847    if (element == null) 
7848      return;
7849    Complex t;
7850    if (Utilities.noString(parentType))
7851      t = parent;
7852    else {
7853      t = parent.predicate("fhir:"+name,index > -1);
7854    }
7855    composeBackboneElement(t, "participant", name, element, index);
7856    if (element.hasFunction()) {
7857      composeCodeableConcept(t, "ConditionParticipantComponent", "function", element.getFunction(), -1);
7858    }
7859    if (element.hasActor()) {
7860      composeReference(t, "ConditionParticipantComponent", "actor", element.getActor(), -1);
7861    }
7862  }
7863
7864  protected void composeConditionStageComponent(Complex parent, String parentType, String name, Condition.ConditionStageComponent element, int index) {
7865    if (element == null) 
7866      return;
7867    Complex t;
7868    if (Utilities.noString(parentType))
7869      t = parent;
7870    else {
7871      t = parent.predicate("fhir:"+name,index > -1);
7872    }
7873    composeBackboneElement(t, "stage", name, element, index);
7874    if (element.hasSummary()) {
7875      composeCodeableConcept(t, "ConditionStageComponent", "summary", element.getSummary(), -1);
7876    }
7877    for (int i = 0; i < element.getAssessment().size(); i++) {
7878      composeReference(t, "ConditionStageComponent", "assessment", element.getAssessment().get(i), i);
7879    }
7880    if (element.hasType()) {
7881      composeCodeableConcept(t, "ConditionStageComponent", "type", element.getType(), -1);
7882    }
7883  }
7884
7885  protected void composeConditionDefinition(Complex parent, String parentType, String name, ConditionDefinition 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:"+name,index > -1);
7893    }
7894    composeMetadataResource(t, "ConditionDefinition", name, element, index);
7895    if (element.hasUrlElement()) {
7896      composeUri(t, "ConditionDefinition", "url", element.getUrlElement(), -1);
7897    }
7898    for (int i = 0; i < element.getIdentifier().size(); i++) {
7899      composeIdentifier(t, "ConditionDefinition", "identifier", element.getIdentifier().get(i), i);
7900    }
7901    if (element.hasVersionElement()) {
7902      composeString(t, "ConditionDefinition", "version", element.getVersionElement(), -1);
7903    }
7904    if (element.hasVersionAlgorithm()) {
7905      composeType(t, "ConditionDefinition", "versionAlgorithm", element.getVersionAlgorithm(), -1);
7906    }
7907    if (element.hasNameElement()) {
7908      composeString(t, "ConditionDefinition", "name", element.getNameElement(), -1);
7909    }
7910    if (element.hasTitleElement()) {
7911      composeString(t, "ConditionDefinition", "title", element.getTitleElement(), -1);
7912    }
7913    if (element.hasSubtitleElement()) {
7914      composeString(t, "ConditionDefinition", "subtitle", element.getSubtitleElement(), -1);
7915    }
7916    if (element.hasStatusElement()) {
7917      composeEnum(t, "ConditionDefinition", "status", element.getStatusElement(), -1);
7918    }
7919    if (element.hasExperimentalElement()) {
7920      composeBoolean(t, "ConditionDefinition", "experimental", element.getExperimentalElement(), -1);
7921    }
7922    if (element.hasDateElement()) {
7923      composeDateTime(t, "ConditionDefinition", "date", element.getDateElement(), -1);
7924    }
7925    if (element.hasPublisherElement()) {
7926      composeString(t, "ConditionDefinition", "publisher", element.getPublisherElement(), -1);
7927    }
7928    for (int i = 0; i < element.getContact().size(); i++) {
7929      composeContactDetail(t, "ConditionDefinition", "contact", element.getContact().get(i), i);
7930    }
7931    if (element.hasDescriptionElement()) {
7932      composeMarkdown(t, "ConditionDefinition", "description", element.getDescriptionElement(), -1);
7933    }
7934    for (int i = 0; i < element.getUseContext().size(); i++) {
7935      composeUsageContext(t, "ConditionDefinition", "useContext", element.getUseContext().get(i), i);
7936    }
7937    for (int i = 0; i < element.getJurisdiction().size(); i++) {
7938      composeCodeableConcept(t, "ConditionDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
7939    }
7940    if (element.hasCode()) {
7941      composeCodeableConcept(t, "ConditionDefinition", "code", element.getCode(), -1);
7942    }
7943    if (element.hasSeverity()) {
7944      composeCodeableConcept(t, "ConditionDefinition", "severity", element.getSeverity(), -1);
7945    }
7946    if (element.hasBodySite()) {
7947      composeCodeableConcept(t, "ConditionDefinition", "bodySite", element.getBodySite(), -1);
7948    }
7949    if (element.hasStage()) {
7950      composeCodeableConcept(t, "ConditionDefinition", "stage", element.getStage(), -1);
7951    }
7952    if (element.hasHasSeverityElement()) {
7953      composeBoolean(t, "ConditionDefinition", "hasSeverity", element.getHasSeverityElement(), -1);
7954    }
7955    if (element.hasHasBodySiteElement()) {
7956      composeBoolean(t, "ConditionDefinition", "hasBodySite", element.getHasBodySiteElement(), -1);
7957    }
7958    if (element.hasHasStageElement()) {
7959      composeBoolean(t, "ConditionDefinition", "hasStage", element.getHasStageElement(), -1);
7960    }
7961    for (int i = 0; i < element.getDefinition().size(); i++) {
7962      composeUri(t, "ConditionDefinition", "definition", element.getDefinition().get(i), i);
7963    }
7964    for (int i = 0; i < element.getObservation().size(); i++) {
7965      composeConditionDefinitionObservationComponent(t, "ConditionDefinition", "observation", element.getObservation().get(i), i);
7966    }
7967    for (int i = 0; i < element.getMedication().size(); i++) {
7968      composeConditionDefinitionMedicationComponent(t, "ConditionDefinition", "medication", element.getMedication().get(i), i);
7969    }
7970    for (int i = 0; i < element.getPrecondition().size(); i++) {
7971      composeConditionDefinitionPreconditionComponent(t, "ConditionDefinition", "precondition", element.getPrecondition().get(i), i);
7972    }
7973    for (int i = 0; i < element.getTeam().size(); i++) {
7974      composeReference(t, "ConditionDefinition", "team", element.getTeam().get(i), i);
7975    }
7976    for (int i = 0; i < element.getQuestionnaire().size(); i++) {
7977      composeConditionDefinitionQuestionnaireComponent(t, "ConditionDefinition", "questionnaire", element.getQuestionnaire().get(i), i);
7978    }
7979    for (int i = 0; i < element.getPlan().size(); i++) {
7980      composeConditionDefinitionPlanComponent(t, "ConditionDefinition", "plan", element.getPlan().get(i), i);
7981    }
7982  }
7983
7984  protected void composeConditionDefinitionObservationComponent(Complex parent, String parentType, String name, ConditionDefinition.ConditionDefinitionObservationComponent element, int index) {
7985    if (element == null) 
7986      return;
7987    Complex t;
7988    if (Utilities.noString(parentType))
7989      t = parent;
7990    else {
7991      t = parent.predicate("fhir:"+name,index > -1);
7992    }
7993    composeBackboneElement(t, "observation", name, element, index);
7994    if (element.hasCategory()) {
7995      composeCodeableConcept(t, "ConditionDefinitionObservationComponent", "category", element.getCategory(), -1);
7996    }
7997    if (element.hasCode()) {
7998      composeCodeableConcept(t, "ConditionDefinitionObservationComponent", "code", element.getCode(), -1);
7999    }
8000  }
8001
8002  protected void composeConditionDefinitionMedicationComponent(Complex parent, String parentType, String name, ConditionDefinition.ConditionDefinitionMedicationComponent element, int index) {
8003    if (element == null) 
8004      return;
8005    Complex t;
8006    if (Utilities.noString(parentType))
8007      t = parent;
8008    else {
8009      t = parent.predicate("fhir:"+name,index > -1);
8010    }
8011    composeBackboneElement(t, "medication", name, element, index);
8012    if (element.hasCategory()) {
8013      composeCodeableConcept(t, "ConditionDefinitionMedicationComponent", "category", element.getCategory(), -1);
8014    }
8015    if (element.hasCode()) {
8016      composeCodeableConcept(t, "ConditionDefinitionMedicationComponent", "code", element.getCode(), -1);
8017    }
8018  }
8019
8020  protected void composeConditionDefinitionPreconditionComponent(Complex parent, String parentType, String name, ConditionDefinition.ConditionDefinitionPreconditionComponent element, int index) {
8021    if (element == null) 
8022      return;
8023    Complex t;
8024    if (Utilities.noString(parentType))
8025      t = parent;
8026    else {
8027      t = parent.predicate("fhir:"+name,index > -1);
8028    }
8029    composeBackboneElement(t, "precondition", name, element, index);
8030    if (element.hasTypeElement()) {
8031      composeEnum(t, "ConditionDefinitionPreconditionComponent", "type", element.getTypeElement(), -1);
8032    }
8033    if (element.hasCode()) {
8034      composeCodeableConcept(t, "ConditionDefinitionPreconditionComponent", "code", element.getCode(), -1);
8035    }
8036    if (element.hasValue()) {
8037      composeType(t, "ConditionDefinitionPreconditionComponent", "value", element.getValue(), -1);
8038    }
8039  }
8040
8041  protected void composeConditionDefinitionQuestionnaireComponent(Complex parent, String parentType, String name, ConditionDefinition.ConditionDefinitionQuestionnaireComponent element, int index) {
8042    if (element == null) 
8043      return;
8044    Complex t;
8045    if (Utilities.noString(parentType))
8046      t = parent;
8047    else {
8048      t = parent.predicate("fhir:"+name,index > -1);
8049    }
8050    composeBackboneElement(t, "questionnaire", name, element, index);
8051    if (element.hasPurposeElement()) {
8052      composeEnum(t, "ConditionDefinitionQuestionnaireComponent", "purpose", element.getPurposeElement(), -1);
8053    }
8054    if (element.hasReference()) {
8055      composeReference(t, "ConditionDefinitionQuestionnaireComponent", "reference", element.getReference(), -1);
8056    }
8057  }
8058
8059  protected void composeConditionDefinitionPlanComponent(Complex parent, String parentType, String name, ConditionDefinition.ConditionDefinitionPlanComponent element, int index) {
8060    if (element == null) 
8061      return;
8062    Complex t;
8063    if (Utilities.noString(parentType))
8064      t = parent;
8065    else {
8066      t = parent.predicate("fhir:"+name,index > -1);
8067    }
8068    composeBackboneElement(t, "plan", name, element, index);
8069    if (element.hasRole()) {
8070      composeCodeableConcept(t, "ConditionDefinitionPlanComponent", "role", element.getRole(), -1);
8071    }
8072    if (element.hasReference()) {
8073      composeReference(t, "ConditionDefinitionPlanComponent", "reference", element.getReference(), -1);
8074    }
8075  }
8076
8077  protected void composeConsent(Complex parent, String parentType, String name, Consent element, int index) {
8078    if (element == null) 
8079      return;
8080    Complex t;
8081    if (Utilities.noString(parentType))
8082      t = parent;
8083    else {
8084      t = parent.predicate("fhir:"+name,index > -1);
8085    }
8086    composeDomainResource(t, "Consent", name, element, index);
8087    for (int i = 0; i < element.getIdentifier().size(); i++) {
8088      composeIdentifier(t, "Consent", "identifier", element.getIdentifier().get(i), i);
8089    }
8090    if (element.hasStatusElement()) {
8091      composeEnum(t, "Consent", "status", element.getStatusElement(), -1);
8092    }
8093    for (int i = 0; i < element.getCategory().size(); i++) {
8094      composeCodeableConcept(t, "Consent", "category", element.getCategory().get(i), i);
8095    }
8096    if (element.hasSubject()) {
8097      composeReference(t, "Consent", "subject", element.getSubject(), -1);
8098    }
8099    if (element.hasDateElement()) {
8100      composeDate(t, "Consent", "date", element.getDateElement(), -1);
8101    }
8102    if (element.hasPeriod()) {
8103      composePeriod(t, "Consent", "period", element.getPeriod(), -1);
8104    }
8105    for (int i = 0; i < element.getGrantor().size(); i++) {
8106      composeReference(t, "Consent", "grantor", element.getGrantor().get(i), i);
8107    }
8108    for (int i = 0; i < element.getGrantee().size(); i++) {
8109      composeReference(t, "Consent", "grantee", element.getGrantee().get(i), i);
8110    }
8111    for (int i = 0; i < element.getManager().size(); i++) {
8112      composeReference(t, "Consent", "manager", element.getManager().get(i), i);
8113    }
8114    for (int i = 0; i < element.getController().size(); i++) {
8115      composeReference(t, "Consent", "controller", element.getController().get(i), i);
8116    }
8117    for (int i = 0; i < element.getSourceAttachment().size(); i++) {
8118      composeAttachment(t, "Consent", "sourceAttachment", element.getSourceAttachment().get(i), i);
8119    }
8120    for (int i = 0; i < element.getSourceReference().size(); i++) {
8121      composeReference(t, "Consent", "sourceReference", element.getSourceReference().get(i), i);
8122    }
8123    for (int i = 0; i < element.getRegulatoryBasis().size(); i++) {
8124      composeCodeableConcept(t, "Consent", "regulatoryBasis", element.getRegulatoryBasis().get(i), i);
8125    }
8126    if (element.hasPolicyBasis()) {
8127      composeConsentPolicyBasisComponent(t, "Consent", "policyBasis", element.getPolicyBasis(), -1);
8128    }
8129    for (int i = 0; i < element.getPolicyText().size(); i++) {
8130      composeReference(t, "Consent", "policyText", element.getPolicyText().get(i), i);
8131    }
8132    for (int i = 0; i < element.getVerification().size(); i++) {
8133      composeConsentVerificationComponent(t, "Consent", "verification", element.getVerification().get(i), i);
8134    }
8135    if (element.hasDecisionElement()) {
8136      composeEnum(t, "Consent", "decision", element.getDecisionElement(), -1);
8137    }
8138    for (int i = 0; i < element.getProvision().size(); i++) {
8139      composeConsentProvisionComponent(t, "Consent", "provision", element.getProvision().get(i), i);
8140    }
8141  }
8142
8143  protected void composeConsentPolicyBasisComponent(Complex parent, String parentType, String name, Consent.ConsentPolicyBasisComponent element, int index) {
8144    if (element == null) 
8145      return;
8146    Complex t;
8147    if (Utilities.noString(parentType))
8148      t = parent;
8149    else {
8150      t = parent.predicate("fhir:"+name,index > -1);
8151    }
8152    composeBackboneElement(t, "policyBasis", name, element, index);
8153    if (element.hasReference()) {
8154      composeReference(t, "ConsentPolicyBasisComponent", "reference", element.getReference(), -1);
8155    }
8156    if (element.hasUrlElement()) {
8157      composeUrl(t, "ConsentPolicyBasisComponent", "url", element.getUrlElement(), -1);
8158    }
8159  }
8160
8161  protected void composeConsentVerificationComponent(Complex parent, String parentType, String name, Consent.ConsentVerificationComponent element, int index) {
8162    if (element == null) 
8163      return;
8164    Complex t;
8165    if (Utilities.noString(parentType))
8166      t = parent;
8167    else {
8168      t = parent.predicate("fhir:"+name,index > -1);
8169    }
8170    composeBackboneElement(t, "verification", name, element, index);
8171    if (element.hasVerifiedElement()) {
8172      composeBoolean(t, "ConsentVerificationComponent", "verified", element.getVerifiedElement(), -1);
8173    }
8174    if (element.hasVerificationType()) {
8175      composeCodeableConcept(t, "ConsentVerificationComponent", "verificationType", element.getVerificationType(), -1);
8176    }
8177    if (element.hasVerifiedBy()) {
8178      composeReference(t, "ConsentVerificationComponent", "verifiedBy", element.getVerifiedBy(), -1);
8179    }
8180    if (element.hasVerifiedWith()) {
8181      composeReference(t, "ConsentVerificationComponent", "verifiedWith", element.getVerifiedWith(), -1);
8182    }
8183    for (int i = 0; i < element.getVerificationDate().size(); i++) {
8184      composeDateTime(t, "ConsentVerificationComponent", "verificationDate", element.getVerificationDate().get(i), i);
8185    }
8186  }
8187
8188  protected void composeConsentProvisionComponent(Complex parent, String parentType, String name, Consent.ProvisionComponent 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:"+name,index > -1);
8196    }
8197    composeBackboneElement(t, "provision", name, element, index);
8198    if (element.hasPeriod()) {
8199      composePeriod(t, "ProvisionComponent", "period", element.getPeriod(), -1);
8200    }
8201    for (int i = 0; i < element.getActor().size(); i++) {
8202      composeConsentProvisionActorComponent(t, "ProvisionComponent", "actor", element.getActor().get(i), i);
8203    }
8204    for (int i = 0; i < element.getAction().size(); i++) {
8205      composeCodeableConcept(t, "ProvisionComponent", "action", element.getAction().get(i), i);
8206    }
8207    for (int i = 0; i < element.getSecurityLabel().size(); i++) {
8208      composeCoding(t, "ProvisionComponent", "securityLabel", element.getSecurityLabel().get(i), i);
8209    }
8210    for (int i = 0; i < element.getPurpose().size(); i++) {
8211      composeCoding(t, "ProvisionComponent", "purpose", element.getPurpose().get(i), i);
8212    }
8213    for (int i = 0; i < element.getDocumentType().size(); i++) {
8214      composeCoding(t, "ProvisionComponent", "documentType", element.getDocumentType().get(i), i);
8215    }
8216    for (int i = 0; i < element.getResourceType().size(); i++) {
8217      composeCoding(t, "ProvisionComponent", "resourceType", element.getResourceType().get(i), i);
8218    }
8219    for (int i = 0; i < element.getCode().size(); i++) {
8220      composeCodeableConcept(t, "ProvisionComponent", "code", element.getCode().get(i), i);
8221    }
8222    if (element.hasDataPeriod()) {
8223      composePeriod(t, "ProvisionComponent", "dataPeriod", element.getDataPeriod(), -1);
8224    }
8225    for (int i = 0; i < element.getData().size(); i++) {
8226      composeConsentProvisionDataComponent(t, "ProvisionComponent", "data", element.getData().get(i), i);
8227    }
8228    if (element.hasExpression()) {
8229      composeExpression(t, "ProvisionComponent", "expression", element.getExpression(), -1);
8230    }
8231    for (int i = 0; i < element.getProvision().size(); i++) {
8232      composeConsentProvisionComponent(t, "ProvisionComponent", "provision", element.getProvision().get(i), i);
8233    }
8234  }
8235
8236  protected void composeConsentProvisionActorComponent(Complex parent, String parentType, String name, Consent.ProvisionActorComponent element, int index) {
8237    if (element == null) 
8238      return;
8239    Complex t;
8240    if (Utilities.noString(parentType))
8241      t = parent;
8242    else {
8243      t = parent.predicate("fhir:"+name,index > -1);
8244    }
8245    composeBackboneElement(t, "actor", name, element, index);
8246    if (element.hasRole()) {
8247      composeCodeableConcept(t, "ProvisionActorComponent", "role", element.getRole(), -1);
8248    }
8249    if (element.hasReference()) {
8250      composeReference(t, "ProvisionActorComponent", "reference", element.getReference(), -1);
8251    }
8252  }
8253
8254  protected void composeConsentProvisionDataComponent(Complex parent, String parentType, String name, Consent.ProvisionDataComponent 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:"+name,index > -1);
8262    }
8263    composeBackboneElement(t, "data", name, element, index);
8264    if (element.hasMeaningElement()) {
8265      composeEnum(t, "ProvisionDataComponent", "meaning", element.getMeaningElement(), -1);
8266    }
8267    if (element.hasReference()) {
8268      composeReference(t, "ProvisionDataComponent", "reference", element.getReference(), -1);
8269    }
8270  }
8271
8272  protected void composeContract(Complex parent, String parentType, String name, Contract 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:"+name,index > -1);
8280    }
8281    composeDomainResource(t, "Contract", name, element, index);
8282    for (int i = 0; i < element.getIdentifier().size(); i++) {
8283      composeIdentifier(t, "Contract", "identifier", element.getIdentifier().get(i), i);
8284    }
8285    if (element.hasUrlElement()) {
8286      composeUri(t, "Contract", "url", element.getUrlElement(), -1);
8287    }
8288    if (element.hasVersionElement()) {
8289      composeString(t, "Contract", "version", element.getVersionElement(), -1);
8290    }
8291    if (element.hasStatusElement()) {
8292      composeEnum(t, "Contract", "status", element.getStatusElement(), -1);
8293    }
8294    if (element.hasLegalState()) {
8295      composeCodeableConcept(t, "Contract", "legalState", element.getLegalState(), -1);
8296    }
8297    if (element.hasInstantiatesCanonical()) {
8298      composeReference(t, "Contract", "instantiatesCanonical", element.getInstantiatesCanonical(), -1);
8299    }
8300    if (element.hasInstantiatesUriElement()) {
8301      composeUri(t, "Contract", "instantiatesUri", element.getInstantiatesUriElement(), -1);
8302    }
8303    if (element.hasContentDerivative()) {
8304      composeCodeableConcept(t, "Contract", "contentDerivative", element.getContentDerivative(), -1);
8305    }
8306    if (element.hasIssuedElement()) {
8307      composeDateTime(t, "Contract", "issued", element.getIssuedElement(), -1);
8308    }
8309    if (element.hasApplies()) {
8310      composePeriod(t, "Contract", "applies", element.getApplies(), -1);
8311    }
8312    if (element.hasExpirationType()) {
8313      composeCodeableConcept(t, "Contract", "expirationType", element.getExpirationType(), -1);
8314    }
8315    for (int i = 0; i < element.getSubject().size(); i++) {
8316      composeReference(t, "Contract", "subject", element.getSubject().get(i), i);
8317    }
8318    for (int i = 0; i < element.getAuthority().size(); i++) {
8319      composeReference(t, "Contract", "authority", element.getAuthority().get(i), i);
8320    }
8321    for (int i = 0; i < element.getDomain().size(); i++) {
8322      composeReference(t, "Contract", "domain", element.getDomain().get(i), i);
8323    }
8324    for (int i = 0; i < element.getSite().size(); i++) {
8325      composeReference(t, "Contract", "site", element.getSite().get(i), i);
8326    }
8327    if (element.hasNameElement()) {
8328      composeString(t, "Contract", "name", element.getNameElement(), -1);
8329    }
8330    if (element.hasTitleElement()) {
8331      composeString(t, "Contract", "title", element.getTitleElement(), -1);
8332    }
8333    if (element.hasSubtitleElement()) {
8334      composeString(t, "Contract", "subtitle", element.getSubtitleElement(), -1);
8335    }
8336    for (int i = 0; i < element.getAlias().size(); i++) {
8337      composeString(t, "Contract", "alias", element.getAlias().get(i), i);
8338    }
8339    if (element.hasAuthor()) {
8340      composeReference(t, "Contract", "author", element.getAuthor(), -1);
8341    }
8342    if (element.hasScope()) {
8343      composeCodeableConcept(t, "Contract", "scope", element.getScope(), -1);
8344    }
8345    if (element.hasTopic()) {
8346      composeType(t, "Contract", "topic", element.getTopic(), -1);
8347    }
8348    if (element.hasType()) {
8349      composeCodeableConcept(t, "Contract", "type", element.getType(), -1);
8350    }
8351    for (int i = 0; i < element.getSubType().size(); i++) {
8352      composeCodeableConcept(t, "Contract", "subType", element.getSubType().get(i), i);
8353    }
8354    if (element.hasContentDefinition()) {
8355      composeContractContentDefinitionComponent(t, "Contract", "contentDefinition", element.getContentDefinition(), -1);
8356    }
8357    for (int i = 0; i < element.getTerm().size(); i++) {
8358      composeContractTermComponent(t, "Contract", "term", element.getTerm().get(i), i);
8359    }
8360    for (int i = 0; i < element.getSupportingInfo().size(); i++) {
8361      composeReference(t, "Contract", "supportingInfo", element.getSupportingInfo().get(i), i);
8362    }
8363    for (int i = 0; i < element.getRelevantHistory().size(); i++) {
8364      composeReference(t, "Contract", "relevantHistory", element.getRelevantHistory().get(i), i);
8365    }
8366    for (int i = 0; i < element.getSigner().size(); i++) {
8367      composeContractSignatoryComponent(t, "Contract", "signer", element.getSigner().get(i), i);
8368    }
8369    for (int i = 0; i < element.getFriendly().size(); i++) {
8370      composeContractFriendlyLanguageComponent(t, "Contract", "friendly", element.getFriendly().get(i), i);
8371    }
8372    for (int i = 0; i < element.getLegal().size(); i++) {
8373      composeContractLegalLanguageComponent(t, "Contract", "legal", element.getLegal().get(i), i);
8374    }
8375    for (int i = 0; i < element.getRule().size(); i++) {
8376      composeContractComputableLanguageComponent(t, "Contract", "rule", element.getRule().get(i), i);
8377    }
8378    if (element.hasLegallyBinding()) {
8379      composeType(t, "Contract", "legallyBinding", element.getLegallyBinding(), -1);
8380    }
8381  }
8382
8383  protected void composeContractContentDefinitionComponent(Complex parent, String parentType, String name, Contract.ContentDefinitionComponent element, int index) {
8384    if (element == null) 
8385      return;
8386    Complex t;
8387    if (Utilities.noString(parentType))
8388      t = parent;
8389    else {
8390      t = parent.predicate("fhir:"+name,index > -1);
8391    }
8392    composeBackboneElement(t, "contentDefinition", name, element, index);
8393    if (element.hasType()) {
8394      composeCodeableConcept(t, "ContentDefinitionComponent", "type", element.getType(), -1);
8395    }
8396    if (element.hasSubType()) {
8397      composeCodeableConcept(t, "ContentDefinitionComponent", "subType", element.getSubType(), -1);
8398    }
8399    if (element.hasPublisher()) {
8400      composeReference(t, "ContentDefinitionComponent", "publisher", element.getPublisher(), -1);
8401    }
8402    if (element.hasPublicationDateElement()) {
8403      composeDateTime(t, "ContentDefinitionComponent", "publicationDate", element.getPublicationDateElement(), -1);
8404    }
8405    if (element.hasPublicationStatusElement()) {
8406      composeEnum(t, "ContentDefinitionComponent", "publicationStatus", element.getPublicationStatusElement(), -1);
8407    }
8408    if (element.hasCopyrightElement()) {
8409      composeMarkdown(t, "ContentDefinitionComponent", "copyright", element.getCopyrightElement(), -1);
8410    }
8411  }
8412
8413  protected void composeContractTermComponent(Complex parent, String parentType, String name, Contract.TermComponent element, int index) {
8414    if (element == null) 
8415      return;
8416    Complex t;
8417    if (Utilities.noString(parentType))
8418      t = parent;
8419    else {
8420      t = parent.predicate("fhir:"+name,index > -1);
8421    }
8422    composeBackboneElement(t, "term", name, element, index);
8423    if (element.hasIdentifier()) {
8424      composeIdentifier(t, "TermComponent", "identifier", element.getIdentifier(), -1);
8425    }
8426    if (element.hasIssuedElement()) {
8427      composeDateTime(t, "TermComponent", "issued", element.getIssuedElement(), -1);
8428    }
8429    if (element.hasApplies()) {
8430      composePeriod(t, "TermComponent", "applies", element.getApplies(), -1);
8431    }
8432    if (element.hasTopic()) {
8433      composeType(t, "TermComponent", "topic", element.getTopic(), -1);
8434    }
8435    if (element.hasType()) {
8436      composeCodeableConcept(t, "TermComponent", "type", element.getType(), -1);
8437    }
8438    if (element.hasSubType()) {
8439      composeCodeableConcept(t, "TermComponent", "subType", element.getSubType(), -1);
8440    }
8441    if (element.hasTextElement()) {
8442      composeString(t, "TermComponent", "text", element.getTextElement(), -1);
8443    }
8444    for (int i = 0; i < element.getSecurityLabel().size(); i++) {
8445      composeContractSecurityLabelComponent(t, "TermComponent", "securityLabel", element.getSecurityLabel().get(i), i);
8446    }
8447    if (element.hasOffer()) {
8448      composeContractOfferComponent(t, "TermComponent", "offer", element.getOffer(), -1);
8449    }
8450    for (int i = 0; i < element.getAsset().size(); i++) {
8451      composeContractAssetComponent(t, "TermComponent", "asset", element.getAsset().get(i), i);
8452    }
8453    for (int i = 0; i < element.getAction().size(); i++) {
8454      composeContractActionComponent(t, "TermComponent", "action", element.getAction().get(i), i);
8455    }
8456    for (int i = 0; i < element.getGroup().size(); i++) {
8457      composeContractTermComponent(t, "TermComponent", "group", element.getGroup().get(i), i);
8458    }
8459  }
8460
8461  protected void composeContractSecurityLabelComponent(Complex parent, String parentType, String name, Contract.SecurityLabelComponent element, int index) {
8462    if (element == null) 
8463      return;
8464    Complex t;
8465    if (Utilities.noString(parentType))
8466      t = parent;
8467    else {
8468      t = parent.predicate("fhir:"+name,index > -1);
8469    }
8470    composeBackboneElement(t, "securityLabel", name, element, index);
8471    for (int i = 0; i < element.getNumber().size(); i++) {
8472      composeUnsignedInt(t, "SecurityLabelComponent", "number", element.getNumber().get(i), i);
8473    }
8474    if (element.hasClassification()) {
8475      composeCoding(t, "SecurityLabelComponent", "classification", element.getClassification(), -1);
8476    }
8477    for (int i = 0; i < element.getCategory().size(); i++) {
8478      composeCoding(t, "SecurityLabelComponent", "category", element.getCategory().get(i), i);
8479    }
8480    for (int i = 0; i < element.getControl().size(); i++) {
8481      composeCoding(t, "SecurityLabelComponent", "control", element.getControl().get(i), i);
8482    }
8483  }
8484
8485  protected void composeContractOfferComponent(Complex parent, String parentType, String name, Contract.ContractOfferComponent element, int index) {
8486    if (element == null) 
8487      return;
8488    Complex t;
8489    if (Utilities.noString(parentType))
8490      t = parent;
8491    else {
8492      t = parent.predicate("fhir:"+name,index > -1);
8493    }
8494    composeBackboneElement(t, "offer", name, element, index);
8495    for (int i = 0; i < element.getIdentifier().size(); i++) {
8496      composeIdentifier(t, "ContractOfferComponent", "identifier", element.getIdentifier().get(i), i);
8497    }
8498    for (int i = 0; i < element.getParty().size(); i++) {
8499      composeContractPartyComponent(t, "ContractOfferComponent", "party", element.getParty().get(i), i);
8500    }
8501    if (element.hasTopic()) {
8502      composeReference(t, "ContractOfferComponent", "topic", element.getTopic(), -1);
8503    }
8504    if (element.hasType()) {
8505      composeCodeableConcept(t, "ContractOfferComponent", "type", element.getType(), -1);
8506    }
8507    if (element.hasDecision()) {
8508      composeCodeableConcept(t, "ContractOfferComponent", "decision", element.getDecision(), -1);
8509    }
8510    for (int i = 0; i < element.getDecisionMode().size(); i++) {
8511      composeCodeableConcept(t, "ContractOfferComponent", "decisionMode", element.getDecisionMode().get(i), i);
8512    }
8513    for (int i = 0; i < element.getAnswer().size(); i++) {
8514      composeContractAnswerComponent(t, "ContractOfferComponent", "answer", element.getAnswer().get(i), i);
8515    }
8516    if (element.hasTextElement()) {
8517      composeString(t, "ContractOfferComponent", "text", element.getTextElement(), -1);
8518    }
8519    for (int i = 0; i < element.getLinkId().size(); i++) {
8520      composeString(t, "ContractOfferComponent", "linkId", element.getLinkId().get(i), i);
8521    }
8522    for (int i = 0; i < element.getSecurityLabelNumber().size(); i++) {
8523      composeUnsignedInt(t, "ContractOfferComponent", "securityLabelNumber", element.getSecurityLabelNumber().get(i), i);
8524    }
8525  }
8526
8527  protected void composeContractPartyComponent(Complex parent, String parentType, String name, Contract.ContractPartyComponent 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:"+name,index > -1);
8535    }
8536    composeBackboneElement(t, "party", name, element, index);
8537    for (int i = 0; i < element.getReference().size(); i++) {
8538      composeReference(t, "ContractPartyComponent", "reference", element.getReference().get(i), i);
8539    }
8540    if (element.hasRole()) {
8541      composeCodeableConcept(t, "ContractPartyComponent", "role", element.getRole(), -1);
8542    }
8543  }
8544
8545  protected void composeContractAnswerComponent(Complex parent, String parentType, String name, Contract.AnswerComponent element, int index) {
8546    if (element == null) 
8547      return;
8548    Complex t;
8549    if (Utilities.noString(parentType))
8550      t = parent;
8551    else {
8552      t = parent.predicate("fhir:"+name,index > -1);
8553    }
8554    composeBackboneElement(t, "answer", name, element, index);
8555    if (element.hasValue()) {
8556      composeType(t, "AnswerComponent", "value", element.getValue(), -1);
8557    }
8558  }
8559
8560  protected void composeContractAssetComponent(Complex parent, String parentType, String name, Contract.ContractAssetComponent element, int index) {
8561    if (element == null) 
8562      return;
8563    Complex t;
8564    if (Utilities.noString(parentType))
8565      t = parent;
8566    else {
8567      t = parent.predicate("fhir:"+name,index > -1);
8568    }
8569    composeBackboneElement(t, "asset", name, element, index);
8570    if (element.hasScope()) {
8571      composeCodeableConcept(t, "ContractAssetComponent", "scope", element.getScope(), -1);
8572    }
8573    for (int i = 0; i < element.getType().size(); i++) {
8574      composeCodeableConcept(t, "ContractAssetComponent", "type", element.getType().get(i), i);
8575    }
8576    for (int i = 0; i < element.getTypeReference().size(); i++) {
8577      composeReference(t, "ContractAssetComponent", "typeReference", element.getTypeReference().get(i), i);
8578    }
8579    for (int i = 0; i < element.getSubtype().size(); i++) {
8580      composeCodeableConcept(t, "ContractAssetComponent", "subtype", element.getSubtype().get(i), i);
8581    }
8582    if (element.hasRelationship()) {
8583      composeCoding(t, "ContractAssetComponent", "relationship", element.getRelationship(), -1);
8584    }
8585    for (int i = 0; i < element.getContext().size(); i++) {
8586      composeContractAssetContextComponent(t, "ContractAssetComponent", "context", element.getContext().get(i), i);
8587    }
8588    if (element.hasConditionElement()) {
8589      composeString(t, "ContractAssetComponent", "condition", element.getConditionElement(), -1);
8590    }
8591    for (int i = 0; i < element.getPeriodType().size(); i++) {
8592      composeCodeableConcept(t, "ContractAssetComponent", "periodType", element.getPeriodType().get(i), i);
8593    }
8594    for (int i = 0; i < element.getPeriod().size(); i++) {
8595      composePeriod(t, "ContractAssetComponent", "period", element.getPeriod().get(i), i);
8596    }
8597    for (int i = 0; i < element.getUsePeriod().size(); i++) {
8598      composePeriod(t, "ContractAssetComponent", "usePeriod", element.getUsePeriod().get(i), i);
8599    }
8600    if (element.hasTextElement()) {
8601      composeString(t, "ContractAssetComponent", "text", element.getTextElement(), -1);
8602    }
8603    for (int i = 0; i < element.getLinkId().size(); i++) {
8604      composeString(t, "ContractAssetComponent", "linkId", element.getLinkId().get(i), i);
8605    }
8606    for (int i = 0; i < element.getAnswer().size(); i++) {
8607      composeContractAnswerComponent(t, "ContractAssetComponent", "answer", element.getAnswer().get(i), i);
8608    }
8609    for (int i = 0; i < element.getSecurityLabelNumber().size(); i++) {
8610      composeUnsignedInt(t, "ContractAssetComponent", "securityLabelNumber", element.getSecurityLabelNumber().get(i), i);
8611    }
8612    for (int i = 0; i < element.getValuedItem().size(); i++) {
8613      composeContractValuedItemComponent(t, "ContractAssetComponent", "valuedItem", element.getValuedItem().get(i), i);
8614    }
8615  }
8616
8617  protected void composeContractAssetContextComponent(Complex parent, String parentType, String name, Contract.AssetContextComponent element, int index) {
8618    if (element == null) 
8619      return;
8620    Complex t;
8621    if (Utilities.noString(parentType))
8622      t = parent;
8623    else {
8624      t = parent.predicate("fhir:"+name,index > -1);
8625    }
8626    composeBackboneElement(t, "context", name, element, index);
8627    if (element.hasReference()) {
8628      composeReference(t, "AssetContextComponent", "reference", element.getReference(), -1);
8629    }
8630    for (int i = 0; i < element.getCode().size(); i++) {
8631      composeCodeableConcept(t, "AssetContextComponent", "code", element.getCode().get(i), i);
8632    }
8633    if (element.hasTextElement()) {
8634      composeString(t, "AssetContextComponent", "text", element.getTextElement(), -1);
8635    }
8636  }
8637
8638  protected void composeContractValuedItemComponent(Complex parent, String parentType, String name, Contract.ValuedItemComponent element, int index) {
8639    if (element == null) 
8640      return;
8641    Complex t;
8642    if (Utilities.noString(parentType))
8643      t = parent;
8644    else {
8645      t = parent.predicate("fhir:"+name,index > -1);
8646    }
8647    composeBackboneElement(t, "valuedItem", name, element, index);
8648    if (element.hasEntity()) {
8649      composeType(t, "ValuedItemComponent", "entity", element.getEntity(), -1);
8650    }
8651    if (element.hasIdentifier()) {
8652      composeIdentifier(t, "ValuedItemComponent", "identifier", element.getIdentifier(), -1);
8653    }
8654    if (element.hasEffectiveTimeElement()) {
8655      composeDateTime(t, "ValuedItemComponent", "effectiveTime", element.getEffectiveTimeElement(), -1);
8656    }
8657    if (element.hasQuantity()) {
8658      composeQuantity(t, "ValuedItemComponent", "quantity", element.getQuantity(), -1);
8659    }
8660    if (element.hasUnitPrice()) {
8661      composeMoney(t, "ValuedItemComponent", "unitPrice", element.getUnitPrice(), -1);
8662    }
8663    if (element.hasFactorElement()) {
8664      composeDecimal(t, "ValuedItemComponent", "factor", element.getFactorElement(), -1);
8665    }
8666    if (element.hasPointsElement()) {
8667      composeDecimal(t, "ValuedItemComponent", "points", element.getPointsElement(), -1);
8668    }
8669    if (element.hasNet()) {
8670      composeMoney(t, "ValuedItemComponent", "net", element.getNet(), -1);
8671    }
8672    if (element.hasPaymentElement()) {
8673      composeString(t, "ValuedItemComponent", "payment", element.getPaymentElement(), -1);
8674    }
8675    if (element.hasPaymentDateElement()) {
8676      composeDateTime(t, "ValuedItemComponent", "paymentDate", element.getPaymentDateElement(), -1);
8677    }
8678    if (element.hasResponsible()) {
8679      composeReference(t, "ValuedItemComponent", "responsible", element.getResponsible(), -1);
8680    }
8681    if (element.hasRecipient()) {
8682      composeReference(t, "ValuedItemComponent", "recipient", element.getRecipient(), -1);
8683    }
8684    for (int i = 0; i < element.getLinkId().size(); i++) {
8685      composeString(t, "ValuedItemComponent", "linkId", element.getLinkId().get(i), i);
8686    }
8687    for (int i = 0; i < element.getSecurityLabelNumber().size(); i++) {
8688      composeUnsignedInt(t, "ValuedItemComponent", "securityLabelNumber", element.getSecurityLabelNumber().get(i), i);
8689    }
8690  }
8691
8692  protected void composeContractActionComponent(Complex parent, String parentType, String name, Contract.ActionComponent element, int index) {
8693    if (element == null) 
8694      return;
8695    Complex t;
8696    if (Utilities.noString(parentType))
8697      t = parent;
8698    else {
8699      t = parent.predicate("fhir:"+name,index > -1);
8700    }
8701    composeBackboneElement(t, "action", name, element, index);
8702    if (element.hasDoNotPerformElement()) {
8703      composeBoolean(t, "ActionComponent", "doNotPerform", element.getDoNotPerformElement(), -1);
8704    }
8705    if (element.hasType()) {
8706      composeCodeableConcept(t, "ActionComponent", "type", element.getType(), -1);
8707    }
8708    for (int i = 0; i < element.getSubject().size(); i++) {
8709      composeContractActionSubjectComponent(t, "ActionComponent", "subject", element.getSubject().get(i), i);
8710    }
8711    if (element.hasIntent()) {
8712      composeCodeableConcept(t, "ActionComponent", "intent", element.getIntent(), -1);
8713    }
8714    for (int i = 0; i < element.getLinkId().size(); i++) {
8715      composeString(t, "ActionComponent", "linkId", element.getLinkId().get(i), i);
8716    }
8717    if (element.hasStatus()) {
8718      composeCodeableConcept(t, "ActionComponent", "status", element.getStatus(), -1);
8719    }
8720    if (element.hasContext()) {
8721      composeReference(t, "ActionComponent", "context", element.getContext(), -1);
8722    }
8723    for (int i = 0; i < element.getContextLinkId().size(); i++) {
8724      composeString(t, "ActionComponent", "contextLinkId", element.getContextLinkId().get(i), i);
8725    }
8726    if (element.hasOccurrence()) {
8727      composeType(t, "ActionComponent", "occurrence", element.getOccurrence(), -1);
8728    }
8729    for (int i = 0; i < element.getRequester().size(); i++) {
8730      composeReference(t, "ActionComponent", "requester", element.getRequester().get(i), i);
8731    }
8732    for (int i = 0; i < element.getRequesterLinkId().size(); i++) {
8733      composeString(t, "ActionComponent", "requesterLinkId", element.getRequesterLinkId().get(i), i);
8734    }
8735    for (int i = 0; i < element.getPerformerType().size(); i++) {
8736      composeCodeableConcept(t, "ActionComponent", "performerType", element.getPerformerType().get(i), i);
8737    }
8738    if (element.hasPerformerRole()) {
8739      composeCodeableConcept(t, "ActionComponent", "performerRole", element.getPerformerRole(), -1);
8740    }
8741    if (element.hasPerformer()) {
8742      composeReference(t, "ActionComponent", "performer", element.getPerformer(), -1);
8743    }
8744    for (int i = 0; i < element.getPerformerLinkId().size(); i++) {
8745      composeString(t, "ActionComponent", "performerLinkId", element.getPerformerLinkId().get(i), i);
8746    }
8747    for (int i = 0; i < element.getReason().size(); i++) {
8748      composeCodeableReference(t, "ActionComponent", "reason", element.getReason().get(i), i);
8749    }
8750    for (int i = 0; i < element.getReasonLinkId().size(); i++) {
8751      composeString(t, "ActionComponent", "reasonLinkId", element.getReasonLinkId().get(i), i);
8752    }
8753    for (int i = 0; i < element.getNote().size(); i++) {
8754      composeAnnotation(t, "ActionComponent", "note", element.getNote().get(i), i);
8755    }
8756    for (int i = 0; i < element.getSecurityLabelNumber().size(); i++) {
8757      composeUnsignedInt(t, "ActionComponent", "securityLabelNumber", element.getSecurityLabelNumber().get(i), i);
8758    }
8759  }
8760
8761  protected void composeContractActionSubjectComponent(Complex parent, String parentType, String name, Contract.ActionSubjectComponent element, int index) {
8762    if (element == null) 
8763      return;
8764    Complex t;
8765    if (Utilities.noString(parentType))
8766      t = parent;
8767    else {
8768      t = parent.predicate("fhir:"+name,index > -1);
8769    }
8770    composeBackboneElement(t, "subject", name, element, index);
8771    for (int i = 0; i < element.getReference().size(); i++) {
8772      composeReference(t, "ActionSubjectComponent", "reference", element.getReference().get(i), i);
8773    }
8774    if (element.hasRole()) {
8775      composeCodeableConcept(t, "ActionSubjectComponent", "role", element.getRole(), -1);
8776    }
8777  }
8778
8779  protected void composeContractSignatoryComponent(Complex parent, String parentType, String name, Contract.SignatoryComponent element, int index) {
8780    if (element == null) 
8781      return;
8782    Complex t;
8783    if (Utilities.noString(parentType))
8784      t = parent;
8785    else {
8786      t = parent.predicate("fhir:"+name,index > -1);
8787    }
8788    composeBackboneElement(t, "signer", name, element, index);
8789    if (element.hasType()) {
8790      composeCoding(t, "SignatoryComponent", "type", element.getType(), -1);
8791    }
8792    if (element.hasParty()) {
8793      composeReference(t, "SignatoryComponent", "party", element.getParty(), -1);
8794    }
8795    for (int i = 0; i < element.getSignature().size(); i++) {
8796      composeSignature(t, "SignatoryComponent", "signature", element.getSignature().get(i), i);
8797    }
8798  }
8799
8800  protected void composeContractFriendlyLanguageComponent(Complex parent, String parentType, String name, Contract.FriendlyLanguageComponent element, int index) {
8801    if (element == null) 
8802      return;
8803    Complex t;
8804    if (Utilities.noString(parentType))
8805      t = parent;
8806    else {
8807      t = parent.predicate("fhir:"+name,index > -1);
8808    }
8809    composeBackboneElement(t, "friendly", name, element, index);
8810    if (element.hasContent()) {
8811      composeType(t, "FriendlyLanguageComponent", "content", element.getContent(), -1);
8812    }
8813  }
8814
8815  protected void composeContractLegalLanguageComponent(Complex parent, String parentType, String name, Contract.LegalLanguageComponent element, int index) {
8816    if (element == null) 
8817      return;
8818    Complex t;
8819    if (Utilities.noString(parentType))
8820      t = parent;
8821    else {
8822      t = parent.predicate("fhir:"+name,index > -1);
8823    }
8824    composeBackboneElement(t, "legal", name, element, index);
8825    if (element.hasContent()) {
8826      composeType(t, "LegalLanguageComponent", "content", element.getContent(), -1);
8827    }
8828  }
8829
8830  protected void composeContractComputableLanguageComponent(Complex parent, String parentType, String name, Contract.ComputableLanguageComponent 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:"+name,index > -1);
8838    }
8839    composeBackboneElement(t, "rule", name, element, index);
8840    if (element.hasContent()) {
8841      composeType(t, "ComputableLanguageComponent", "content", element.getContent(), -1);
8842    }
8843  }
8844
8845  protected void composeCoverage(Complex parent, String parentType, String name, Coverage element, int index) {
8846    if (element == null) 
8847      return;
8848    Complex t;
8849    if (Utilities.noString(parentType))
8850      t = parent;
8851    else {
8852      t = parent.predicate("fhir:"+name,index > -1);
8853    }
8854    composeDomainResource(t, "Coverage", name, element, index);
8855    for (int i = 0; i < element.getIdentifier().size(); i++) {
8856      composeIdentifier(t, "Coverage", "identifier", element.getIdentifier().get(i), i);
8857    }
8858    if (element.hasStatusElement()) {
8859      composeEnum(t, "Coverage", "status", element.getStatusElement(), -1);
8860    }
8861    if (element.hasKindElement()) {
8862      composeEnum(t, "Coverage", "kind", element.getKindElement(), -1);
8863    }
8864    for (int i = 0; i < element.getPaymentBy().size(); i++) {
8865      composeCoveragePaymentByComponent(t, "Coverage", "paymentBy", element.getPaymentBy().get(i), i);
8866    }
8867    if (element.hasType()) {
8868      composeCodeableConcept(t, "Coverage", "type", element.getType(), -1);
8869    }
8870    if (element.hasPolicyHolder()) {
8871      composeReference(t, "Coverage", "policyHolder", element.getPolicyHolder(), -1);
8872    }
8873    if (element.hasSubscriber()) {
8874      composeReference(t, "Coverage", "subscriber", element.getSubscriber(), -1);
8875    }
8876    for (int i = 0; i < element.getSubscriberId().size(); i++) {
8877      composeIdentifier(t, "Coverage", "subscriberId", element.getSubscriberId().get(i), i);
8878    }
8879    if (element.hasBeneficiary()) {
8880      composeReference(t, "Coverage", "beneficiary", element.getBeneficiary(), -1);
8881    }
8882    if (element.hasDependentElement()) {
8883      composeString(t, "Coverage", "dependent", element.getDependentElement(), -1);
8884    }
8885    if (element.hasRelationship()) {
8886      composeCodeableConcept(t, "Coverage", "relationship", element.getRelationship(), -1);
8887    }
8888    if (element.hasPeriod()) {
8889      composePeriod(t, "Coverage", "period", element.getPeriod(), -1);
8890    }
8891    if (element.hasInsurer()) {
8892      composeReference(t, "Coverage", "insurer", element.getInsurer(), -1);
8893    }
8894    for (int i = 0; i < element.getClass_().size(); i++) {
8895      composeCoverageClassComponent(t, "Coverage", "class", element.getClass_().get(i), i);
8896    }
8897    if (element.hasOrderElement()) {
8898      composePositiveInt(t, "Coverage", "order", element.getOrderElement(), -1);
8899    }
8900    if (element.hasNetworkElement()) {
8901      composeString(t, "Coverage", "network", element.getNetworkElement(), -1);
8902    }
8903    for (int i = 0; i < element.getCostToBeneficiary().size(); i++) {
8904      composeCoverageCostToBeneficiaryComponent(t, "Coverage", "costToBeneficiary", element.getCostToBeneficiary().get(i), i);
8905    }
8906    if (element.hasSubrogationElement()) {
8907      composeBoolean(t, "Coverage", "subrogation", element.getSubrogationElement(), -1);
8908    }
8909    for (int i = 0; i < element.getContract().size(); i++) {
8910      composeReference(t, "Coverage", "contract", element.getContract().get(i), i);
8911    }
8912    if (element.hasInsurancePlan()) {
8913      composeReference(t, "Coverage", "insurancePlan", element.getInsurancePlan(), -1);
8914    }
8915  }
8916
8917  protected void composeCoveragePaymentByComponent(Complex parent, String parentType, String name, Coverage.CoveragePaymentByComponent element, int index) {
8918    if (element == null) 
8919      return;
8920    Complex t;
8921    if (Utilities.noString(parentType))
8922      t = parent;
8923    else {
8924      t = parent.predicate("fhir:"+name,index > -1);
8925    }
8926    composeBackboneElement(t, "paymentBy", name, element, index);
8927    if (element.hasParty()) {
8928      composeReference(t, "CoveragePaymentByComponent", "party", element.getParty(), -1);
8929    }
8930    if (element.hasResponsibilityElement()) {
8931      composeString(t, "CoveragePaymentByComponent", "responsibility", element.getResponsibilityElement(), -1);
8932    }
8933  }
8934
8935  protected void composeCoverageClassComponent(Complex parent, String parentType, String name, Coverage.ClassComponent element, int index) {
8936    if (element == null) 
8937      return;
8938    Complex t;
8939    if (Utilities.noString(parentType))
8940      t = parent;
8941    else {
8942      t = parent.predicate("fhir:"+name,index > -1);
8943    }
8944    composeBackboneElement(t, "class", name, element, index);
8945    if (element.hasType()) {
8946      composeCodeableConcept(t, "ClassComponent", "type", element.getType(), -1);
8947    }
8948    if (element.hasValue()) {
8949      composeIdentifier(t, "ClassComponent", "value", element.getValue(), -1);
8950    }
8951    if (element.hasNameElement()) {
8952      composeString(t, "ClassComponent", "name", element.getNameElement(), -1);
8953    }
8954  }
8955
8956  protected void composeCoverageCostToBeneficiaryComponent(Complex parent, String parentType, String name, Coverage.CostToBeneficiaryComponent element, int index) {
8957    if (element == null) 
8958      return;
8959    Complex t;
8960    if (Utilities.noString(parentType))
8961      t = parent;
8962    else {
8963      t = parent.predicate("fhir:"+name,index > -1);
8964    }
8965    composeBackboneElement(t, "costToBeneficiary", name, element, index);
8966    if (element.hasType()) {
8967      composeCodeableConcept(t, "CostToBeneficiaryComponent", "type", element.getType(), -1);
8968    }
8969    if (element.hasCategory()) {
8970      composeCodeableConcept(t, "CostToBeneficiaryComponent", "category", element.getCategory(), -1);
8971    }
8972    if (element.hasNetwork()) {
8973      composeCodeableConcept(t, "CostToBeneficiaryComponent", "network", element.getNetwork(), -1);
8974    }
8975    if (element.hasUnit()) {
8976      composeCodeableConcept(t, "CostToBeneficiaryComponent", "unit", element.getUnit(), -1);
8977    }
8978    if (element.hasTerm()) {
8979      composeCodeableConcept(t, "CostToBeneficiaryComponent", "term", element.getTerm(), -1);
8980    }
8981    if (element.hasValue()) {
8982      composeType(t, "CostToBeneficiaryComponent", "value", element.getValue(), -1);
8983    }
8984    for (int i = 0; i < element.getException().size(); i++) {
8985      composeCoverageExemptionComponent(t, "CostToBeneficiaryComponent", "exception", element.getException().get(i), i);
8986    }
8987  }
8988
8989  protected void composeCoverageExemptionComponent(Complex parent, String parentType, String name, Coverage.ExemptionComponent element, int index) {
8990    if (element == null) 
8991      return;
8992    Complex t;
8993    if (Utilities.noString(parentType))
8994      t = parent;
8995    else {
8996      t = parent.predicate("fhir:"+name,index > -1);
8997    }
8998    composeBackboneElement(t, "exception", name, element, index);
8999    if (element.hasType()) {
9000      composeCodeableConcept(t, "ExemptionComponent", "type", element.getType(), -1);
9001    }
9002    if (element.hasPeriod()) {
9003      composePeriod(t, "ExemptionComponent", "period", element.getPeriod(), -1);
9004    }
9005  }
9006
9007  protected void composeCoverageEligibilityRequest(Complex parent, String parentType, String name, CoverageEligibilityRequest element, int index) {
9008    if (element == null) 
9009      return;
9010    Complex t;
9011    if (Utilities.noString(parentType))
9012      t = parent;
9013    else {
9014      t = parent.predicate("fhir:"+name,index > -1);
9015    }
9016    composeDomainResource(t, "CoverageEligibilityRequest", name, element, index);
9017    for (int i = 0; i < element.getIdentifier().size(); i++) {
9018      composeIdentifier(t, "CoverageEligibilityRequest", "identifier", element.getIdentifier().get(i), i);
9019    }
9020    if (element.hasStatusElement()) {
9021      composeEnum(t, "CoverageEligibilityRequest", "status", element.getStatusElement(), -1);
9022    }
9023    if (element.hasPriority()) {
9024      composeCodeableConcept(t, "CoverageEligibilityRequest", "priority", element.getPriority(), -1);
9025    }
9026    for (int i = 0; i < element.getPurpose().size(); i++) {
9027      composeEnum(t, "CoverageEligibilityRequest", "purpose", element.getPurpose().get(i), i);
9028    }
9029    if (element.hasPatient()) {
9030      composeReference(t, "CoverageEligibilityRequest", "patient", element.getPatient(), -1);
9031    }
9032    for (int i = 0; i < element.getEvent().size(); i++) {
9033      composeCoverageEligibilityRequestEventComponent(t, "CoverageEligibilityRequest", "event", element.getEvent().get(i), i);
9034    }
9035    if (element.hasServiced()) {
9036      composeType(t, "CoverageEligibilityRequest", "serviced", element.getServiced(), -1);
9037    }
9038    if (element.hasCreatedElement()) {
9039      composeDateTime(t, "CoverageEligibilityRequest", "created", element.getCreatedElement(), -1);
9040    }
9041    if (element.hasEnterer()) {
9042      composeReference(t, "CoverageEligibilityRequest", "enterer", element.getEnterer(), -1);
9043    }
9044    if (element.hasProvider()) {
9045      composeReference(t, "CoverageEligibilityRequest", "provider", element.getProvider(), -1);
9046    }
9047    if (element.hasInsurer()) {
9048      composeReference(t, "CoverageEligibilityRequest", "insurer", element.getInsurer(), -1);
9049    }
9050    if (element.hasFacility()) {
9051      composeReference(t, "CoverageEligibilityRequest", "facility", element.getFacility(), -1);
9052    }
9053    for (int i = 0; i < element.getSupportingInfo().size(); i++) {
9054      composeCoverageEligibilityRequestSupportingInformationComponent(t, "CoverageEligibilityRequest", "supportingInfo", element.getSupportingInfo().get(i), i);
9055    }
9056    for (int i = 0; i < element.getInsurance().size(); i++) {
9057      composeCoverageEligibilityRequestInsuranceComponent(t, "CoverageEligibilityRequest", "insurance", element.getInsurance().get(i), i);
9058    }
9059    for (int i = 0; i < element.getItem().size(); i++) {
9060      composeCoverageEligibilityRequestDetailsComponent(t, "CoverageEligibilityRequest", "item", element.getItem().get(i), i);
9061    }
9062  }
9063
9064  protected void composeCoverageEligibilityRequestEventComponent(Complex parent, String parentType, String name, CoverageEligibilityRequest.CoverageEligibilityRequestEventComponent element, int index) {
9065    if (element == null) 
9066      return;
9067    Complex t;
9068    if (Utilities.noString(parentType))
9069      t = parent;
9070    else {
9071      t = parent.predicate("fhir:"+name,index > -1);
9072    }
9073    composeBackboneElement(t, "event", name, element, index);
9074    if (element.hasType()) {
9075      composeCodeableConcept(t, "CoverageEligibilityRequestEventComponent", "type", element.getType(), -1);
9076    }
9077    if (element.hasWhen()) {
9078      composeType(t, "CoverageEligibilityRequestEventComponent", "when", element.getWhen(), -1);
9079    }
9080  }
9081
9082  protected void composeCoverageEligibilityRequestSupportingInformationComponent(Complex parent, String parentType, String name, CoverageEligibilityRequest.SupportingInformationComponent element, int index) {
9083    if (element == null) 
9084      return;
9085    Complex t;
9086    if (Utilities.noString(parentType))
9087      t = parent;
9088    else {
9089      t = parent.predicate("fhir:"+name,index > -1);
9090    }
9091    composeBackboneElement(t, "supportingInfo", name, element, index);
9092    if (element.hasSequenceElement()) {
9093      composePositiveInt(t, "SupportingInformationComponent", "sequence", element.getSequenceElement(), -1);
9094    }
9095    if (element.hasInformation()) {
9096      composeReference(t, "SupportingInformationComponent", "information", element.getInformation(), -1);
9097    }
9098    if (element.hasAppliesToAllElement()) {
9099      composeBoolean(t, "SupportingInformationComponent", "appliesToAll", element.getAppliesToAllElement(), -1);
9100    }
9101  }
9102
9103  protected void composeCoverageEligibilityRequestInsuranceComponent(Complex parent, String parentType, String name, CoverageEligibilityRequest.InsuranceComponent element, int index) {
9104    if (element == null) 
9105      return;
9106    Complex t;
9107    if (Utilities.noString(parentType))
9108      t = parent;
9109    else {
9110      t = parent.predicate("fhir:"+name,index > -1);
9111    }
9112    composeBackboneElement(t, "insurance", name, element, index);
9113    if (element.hasFocalElement()) {
9114      composeBoolean(t, "InsuranceComponent", "focal", element.getFocalElement(), -1);
9115    }
9116    if (element.hasCoverage()) {
9117      composeReference(t, "InsuranceComponent", "coverage", element.getCoverage(), -1);
9118    }
9119    if (element.hasBusinessArrangementElement()) {
9120      composeString(t, "InsuranceComponent", "businessArrangement", element.getBusinessArrangementElement(), -1);
9121    }
9122  }
9123
9124  protected void composeCoverageEligibilityRequestDetailsComponent(Complex parent, String parentType, String name, CoverageEligibilityRequest.DetailsComponent element, int index) {
9125    if (element == null) 
9126      return;
9127    Complex t;
9128    if (Utilities.noString(parentType))
9129      t = parent;
9130    else {
9131      t = parent.predicate("fhir:"+name,index > -1);
9132    }
9133    composeBackboneElement(t, "item", name, element, index);
9134    for (int i = 0; i < element.getSupportingInfoSequence().size(); i++) {
9135      composePositiveInt(t, "DetailsComponent", "supportingInfoSequence", element.getSupportingInfoSequence().get(i), i);
9136    }
9137    if (element.hasCategory()) {
9138      composeCodeableConcept(t, "DetailsComponent", "category", element.getCategory(), -1);
9139    }
9140    if (element.hasProductOrService()) {
9141      composeCodeableConcept(t, "DetailsComponent", "productOrService", element.getProductOrService(), -1);
9142    }
9143    for (int i = 0; i < element.getModifier().size(); i++) {
9144      composeCodeableConcept(t, "DetailsComponent", "modifier", element.getModifier().get(i), i);
9145    }
9146    if (element.hasProvider()) {
9147      composeReference(t, "DetailsComponent", "provider", element.getProvider(), -1);
9148    }
9149    if (element.hasQuantity()) {
9150      composeQuantity(t, "DetailsComponent", "quantity", element.getQuantity(), -1);
9151    }
9152    if (element.hasUnitPrice()) {
9153      composeMoney(t, "DetailsComponent", "unitPrice", element.getUnitPrice(), -1);
9154    }
9155    if (element.hasFacility()) {
9156      composeReference(t, "DetailsComponent", "facility", element.getFacility(), -1);
9157    }
9158    for (int i = 0; i < element.getDiagnosis().size(); i++) {
9159      composeCoverageEligibilityRequestDiagnosisComponent(t, "DetailsComponent", "diagnosis", element.getDiagnosis().get(i), i);
9160    }
9161    for (int i = 0; i < element.getDetail().size(); i++) {
9162      composeReference(t, "DetailsComponent", "detail", element.getDetail().get(i), i);
9163    }
9164  }
9165
9166  protected void composeCoverageEligibilityRequestDiagnosisComponent(Complex parent, String parentType, String name, CoverageEligibilityRequest.DiagnosisComponent element, int index) {
9167    if (element == null) 
9168      return;
9169    Complex t;
9170    if (Utilities.noString(parentType))
9171      t = parent;
9172    else {
9173      t = parent.predicate("fhir:"+name,index > -1);
9174    }
9175    composeBackboneElement(t, "diagnosis", name, element, index);
9176    if (element.hasDiagnosis()) {
9177      composeType(t, "DiagnosisComponent", "diagnosis", element.getDiagnosis(), -1);
9178    }
9179  }
9180
9181  protected void composeCoverageEligibilityResponse(Complex parent, String parentType, String name, CoverageEligibilityResponse element, int index) {
9182    if (element == null) 
9183      return;
9184    Complex t;
9185    if (Utilities.noString(parentType))
9186      t = parent;
9187    else {
9188      t = parent.predicate("fhir:"+name,index > -1);
9189    }
9190    composeDomainResource(t, "CoverageEligibilityResponse", name, element, index);
9191    for (int i = 0; i < element.getIdentifier().size(); i++) {
9192      composeIdentifier(t, "CoverageEligibilityResponse", "identifier", element.getIdentifier().get(i), i);
9193    }
9194    if (element.hasStatusElement()) {
9195      composeEnum(t, "CoverageEligibilityResponse", "status", element.getStatusElement(), -1);
9196    }
9197    for (int i = 0; i < element.getPurpose().size(); i++) {
9198      composeEnum(t, "CoverageEligibilityResponse", "purpose", element.getPurpose().get(i), i);
9199    }
9200    if (element.hasPatient()) {
9201      composeReference(t, "CoverageEligibilityResponse", "patient", element.getPatient(), -1);
9202    }
9203    for (int i = 0; i < element.getEvent().size(); i++) {
9204      composeCoverageEligibilityResponseEventComponent(t, "CoverageEligibilityResponse", "event", element.getEvent().get(i), i);
9205    }
9206    if (element.hasServiced()) {
9207      composeType(t, "CoverageEligibilityResponse", "serviced", element.getServiced(), -1);
9208    }
9209    if (element.hasCreatedElement()) {
9210      composeDateTime(t, "CoverageEligibilityResponse", "created", element.getCreatedElement(), -1);
9211    }
9212    if (element.hasRequestor()) {
9213      composeReference(t, "CoverageEligibilityResponse", "requestor", element.getRequestor(), -1);
9214    }
9215    if (element.hasRequest()) {
9216      composeReference(t, "CoverageEligibilityResponse", "request", element.getRequest(), -1);
9217    }
9218    if (element.hasOutcomeElement()) {
9219      composeEnum(t, "CoverageEligibilityResponse", "outcome", element.getOutcomeElement(), -1);
9220    }
9221    if (element.hasDispositionElement()) {
9222      composeString(t, "CoverageEligibilityResponse", "disposition", element.getDispositionElement(), -1);
9223    }
9224    if (element.hasInsurer()) {
9225      composeReference(t, "CoverageEligibilityResponse", "insurer", element.getInsurer(), -1);
9226    }
9227    for (int i = 0; i < element.getInsurance().size(); i++) {
9228      composeCoverageEligibilityResponseInsuranceComponent(t, "CoverageEligibilityResponse", "insurance", element.getInsurance().get(i), i);
9229    }
9230    if (element.hasPreAuthRefElement()) {
9231      composeString(t, "CoverageEligibilityResponse", "preAuthRef", element.getPreAuthRefElement(), -1);
9232    }
9233    if (element.hasForm()) {
9234      composeCodeableConcept(t, "CoverageEligibilityResponse", "form", element.getForm(), -1);
9235    }
9236    for (int i = 0; i < element.getError().size(); i++) {
9237      composeCoverageEligibilityResponseErrorsComponent(t, "CoverageEligibilityResponse", "error", element.getError().get(i), i);
9238    }
9239  }
9240
9241  protected void composeCoverageEligibilityResponseEventComponent(Complex parent, String parentType, String name, CoverageEligibilityResponse.CoverageEligibilityResponseEventComponent element, int index) {
9242    if (element == null) 
9243      return;
9244    Complex t;
9245    if (Utilities.noString(parentType))
9246      t = parent;
9247    else {
9248      t = parent.predicate("fhir:"+name,index > -1);
9249    }
9250    composeBackboneElement(t, "event", name, element, index);
9251    if (element.hasType()) {
9252      composeCodeableConcept(t, "CoverageEligibilityResponseEventComponent", "type", element.getType(), -1);
9253    }
9254    if (element.hasWhen()) {
9255      composeType(t, "CoverageEligibilityResponseEventComponent", "when", element.getWhen(), -1);
9256    }
9257  }
9258
9259  protected void composeCoverageEligibilityResponseInsuranceComponent(Complex parent, String parentType, String name, CoverageEligibilityResponse.InsuranceComponent element, int index) {
9260    if (element == null) 
9261      return;
9262    Complex t;
9263    if (Utilities.noString(parentType))
9264      t = parent;
9265    else {
9266      t = parent.predicate("fhir:"+name,index > -1);
9267    }
9268    composeBackboneElement(t, "insurance", name, element, index);
9269    if (element.hasCoverage()) {
9270      composeReference(t, "InsuranceComponent", "coverage", element.getCoverage(), -1);
9271    }
9272    if (element.hasInforceElement()) {
9273      composeBoolean(t, "InsuranceComponent", "inforce", element.getInforceElement(), -1);
9274    }
9275    if (element.hasBenefitPeriod()) {
9276      composePeriod(t, "InsuranceComponent", "benefitPeriod", element.getBenefitPeriod(), -1);
9277    }
9278    for (int i = 0; i < element.getItem().size(); i++) {
9279      composeCoverageEligibilityResponseItemsComponent(t, "InsuranceComponent", "item", element.getItem().get(i), i);
9280    }
9281  }
9282
9283  protected void composeCoverageEligibilityResponseItemsComponent(Complex parent, String parentType, String name, CoverageEligibilityResponse.ItemsComponent 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:"+name,index > -1);
9291    }
9292    composeBackboneElement(t, "item", name, element, index);
9293    if (element.hasCategory()) {
9294      composeCodeableConcept(t, "ItemsComponent", "category", element.getCategory(), -1);
9295    }
9296    if (element.hasProductOrService()) {
9297      composeCodeableConcept(t, "ItemsComponent", "productOrService", element.getProductOrService(), -1);
9298    }
9299    for (int i = 0; i < element.getModifier().size(); i++) {
9300      composeCodeableConcept(t, "ItemsComponent", "modifier", element.getModifier().get(i), i);
9301    }
9302    if (element.hasProvider()) {
9303      composeReference(t, "ItemsComponent", "provider", element.getProvider(), -1);
9304    }
9305    if (element.hasExcludedElement()) {
9306      composeBoolean(t, "ItemsComponent", "excluded", element.getExcludedElement(), -1);
9307    }
9308    if (element.hasNameElement()) {
9309      composeString(t, "ItemsComponent", "name", element.getNameElement(), -1);
9310    }
9311    if (element.hasDescriptionElement()) {
9312      composeString(t, "ItemsComponent", "description", element.getDescriptionElement(), -1);
9313    }
9314    if (element.hasNetwork()) {
9315      composeCodeableConcept(t, "ItemsComponent", "network", element.getNetwork(), -1);
9316    }
9317    if (element.hasUnit()) {
9318      composeCodeableConcept(t, "ItemsComponent", "unit", element.getUnit(), -1);
9319    }
9320    if (element.hasTerm()) {
9321      composeCodeableConcept(t, "ItemsComponent", "term", element.getTerm(), -1);
9322    }
9323    for (int i = 0; i < element.getBenefit().size(); i++) {
9324      composeCoverageEligibilityResponseBenefitComponent(t, "ItemsComponent", "benefit", element.getBenefit().get(i), i);
9325    }
9326    if (element.hasAuthorizationRequiredElement()) {
9327      composeBoolean(t, "ItemsComponent", "authorizationRequired", element.getAuthorizationRequiredElement(), -1);
9328    }
9329    for (int i = 0; i < element.getAuthorizationSupporting().size(); i++) {
9330      composeCodeableConcept(t, "ItemsComponent", "authorizationSupporting", element.getAuthorizationSupporting().get(i), i);
9331    }
9332    if (element.hasAuthorizationUrlElement()) {
9333      composeUri(t, "ItemsComponent", "authorizationUrl", element.getAuthorizationUrlElement(), -1);
9334    }
9335  }
9336
9337  protected void composeCoverageEligibilityResponseBenefitComponent(Complex parent, String parentType, String name, CoverageEligibilityResponse.BenefitComponent element, int index) {
9338    if (element == null) 
9339      return;
9340    Complex t;
9341    if (Utilities.noString(parentType))
9342      t = parent;
9343    else {
9344      t = parent.predicate("fhir:"+name,index > -1);
9345    }
9346    composeBackboneElement(t, "benefit", name, element, index);
9347    if (element.hasType()) {
9348      composeCodeableConcept(t, "BenefitComponent", "type", element.getType(), -1);
9349    }
9350    if (element.hasAllowed()) {
9351      composeType(t, "BenefitComponent", "allowed", element.getAllowed(), -1);
9352    }
9353    if (element.hasUsed()) {
9354      composeType(t, "BenefitComponent", "used", element.getUsed(), -1);
9355    }
9356  }
9357
9358  protected void composeCoverageEligibilityResponseErrorsComponent(Complex parent, String parentType, String name, CoverageEligibilityResponse.ErrorsComponent element, int index) {
9359    if (element == null) 
9360      return;
9361    Complex t;
9362    if (Utilities.noString(parentType))
9363      t = parent;
9364    else {
9365      t = parent.predicate("fhir:"+name,index > -1);
9366    }
9367    composeBackboneElement(t, "error", name, element, index);
9368    if (element.hasCode()) {
9369      composeCodeableConcept(t, "ErrorsComponent", "code", element.getCode(), -1);
9370    }
9371    for (int i = 0; i < element.getExpression().size(); i++) {
9372      composeString(t, "ErrorsComponent", "expression", element.getExpression().get(i), i);
9373    }
9374  }
9375
9376  protected void composeDetectedIssue(Complex parent, String parentType, String name, DetectedIssue element, int index) {
9377    if (element == null) 
9378      return;
9379    Complex t;
9380    if (Utilities.noString(parentType))
9381      t = parent;
9382    else {
9383      t = parent.predicate("fhir:"+name,index > -1);
9384    }
9385    composeDomainResource(t, "DetectedIssue", name, element, index);
9386    for (int i = 0; i < element.getIdentifier().size(); i++) {
9387      composeIdentifier(t, "DetectedIssue", "identifier", element.getIdentifier().get(i), i);
9388    }
9389    if (element.hasStatusElement()) {
9390      composeEnum(t, "DetectedIssue", "status", element.getStatusElement(), -1);
9391    }
9392    for (int i = 0; i < element.getCategory().size(); i++) {
9393      composeCodeableConcept(t, "DetectedIssue", "category", element.getCategory().get(i), i);
9394    }
9395    if (element.hasCode()) {
9396      composeCodeableConcept(t, "DetectedIssue", "code", element.getCode(), -1);
9397    }
9398    if (element.hasSeverityElement()) {
9399      composeEnum(t, "DetectedIssue", "severity", element.getSeverityElement(), -1);
9400    }
9401    if (element.hasSubject()) {
9402      composeReference(t, "DetectedIssue", "subject", element.getSubject(), -1);
9403    }
9404    if (element.hasEncounter()) {
9405      composeReference(t, "DetectedIssue", "encounter", element.getEncounter(), -1);
9406    }
9407    if (element.hasIdentified()) {
9408      composeType(t, "DetectedIssue", "identified", element.getIdentified(), -1);
9409    }
9410    if (element.hasAuthor()) {
9411      composeReference(t, "DetectedIssue", "author", element.getAuthor(), -1);
9412    }
9413    for (int i = 0; i < element.getImplicated().size(); i++) {
9414      composeReference(t, "DetectedIssue", "implicated", element.getImplicated().get(i), i);
9415    }
9416    for (int i = 0; i < element.getEvidence().size(); i++) {
9417      composeDetectedIssueEvidenceComponent(t, "DetectedIssue", "evidence", element.getEvidence().get(i), i);
9418    }
9419    if (element.hasDetailElement()) {
9420      composeMarkdown(t, "DetectedIssue", "detail", element.getDetailElement(), -1);
9421    }
9422    if (element.hasReferenceElement()) {
9423      composeUri(t, "DetectedIssue", "reference", element.getReferenceElement(), -1);
9424    }
9425    for (int i = 0; i < element.getMitigation().size(); i++) {
9426      composeDetectedIssueMitigationComponent(t, "DetectedIssue", "mitigation", element.getMitigation().get(i), i);
9427    }
9428  }
9429
9430  protected void composeDetectedIssueEvidenceComponent(Complex parent, String parentType, String name, DetectedIssue.DetectedIssueEvidenceComponent element, int index) {
9431    if (element == null) 
9432      return;
9433    Complex t;
9434    if (Utilities.noString(parentType))
9435      t = parent;
9436    else {
9437      t = parent.predicate("fhir:"+name,index > -1);
9438    }
9439    composeBackboneElement(t, "evidence", name, element, index);
9440    for (int i = 0; i < element.getCode().size(); i++) {
9441      composeCodeableConcept(t, "DetectedIssueEvidenceComponent", "code", element.getCode().get(i), i);
9442    }
9443    for (int i = 0; i < element.getDetail().size(); i++) {
9444      composeReference(t, "DetectedIssueEvidenceComponent", "detail", element.getDetail().get(i), i);
9445    }
9446  }
9447
9448  protected void composeDetectedIssueMitigationComponent(Complex parent, String parentType, String name, DetectedIssue.DetectedIssueMitigationComponent element, int index) {
9449    if (element == null) 
9450      return;
9451    Complex t;
9452    if (Utilities.noString(parentType))
9453      t = parent;
9454    else {
9455      t = parent.predicate("fhir:"+name,index > -1);
9456    }
9457    composeBackboneElement(t, "mitigation", name, element, index);
9458    if (element.hasAction()) {
9459      composeCodeableConcept(t, "DetectedIssueMitigationComponent", "action", element.getAction(), -1);
9460    }
9461    if (element.hasDateElement()) {
9462      composeDateTime(t, "DetectedIssueMitigationComponent", "date", element.getDateElement(), -1);
9463    }
9464    if (element.hasAuthor()) {
9465      composeReference(t, "DetectedIssueMitigationComponent", "author", element.getAuthor(), -1);
9466    }
9467    for (int i = 0; i < element.getNote().size(); i++) {
9468      composeAnnotation(t, "DetectedIssueMitigationComponent", "note", element.getNote().get(i), i);
9469    }
9470  }
9471
9472  protected void composeDevice(Complex parent, String parentType, String name, Device element, int index) {
9473    if (element == null) 
9474      return;
9475    Complex t;
9476    if (Utilities.noString(parentType))
9477      t = parent;
9478    else {
9479      t = parent.predicate("fhir:"+name,index > -1);
9480    }
9481    composeDomainResource(t, "Device", name, element, index);
9482    for (int i = 0; i < element.getIdentifier().size(); i++) {
9483      composeIdentifier(t, "Device", "identifier", element.getIdentifier().get(i), i);
9484    }
9485    if (element.hasDisplayNameElement()) {
9486      composeString(t, "Device", "displayName", element.getDisplayNameElement(), -1);
9487    }
9488    if (element.hasDefinition()) {
9489      composeCodeableReference(t, "Device", "definition", element.getDefinition(), -1);
9490    }
9491    for (int i = 0; i < element.getUdiCarrier().size(); i++) {
9492      composeDeviceUdiCarrierComponent(t, "Device", "udiCarrier", element.getUdiCarrier().get(i), i);
9493    }
9494    if (element.hasStatusElement()) {
9495      composeEnum(t, "Device", "status", element.getStatusElement(), -1);
9496    }
9497    if (element.hasAvailabilityStatus()) {
9498      composeCodeableConcept(t, "Device", "availabilityStatus", element.getAvailabilityStatus(), -1);
9499    }
9500    if (element.hasBiologicalSourceEvent()) {
9501      composeIdentifier(t, "Device", "biologicalSourceEvent", element.getBiologicalSourceEvent(), -1);
9502    }
9503    if (element.hasManufacturerElement()) {
9504      composeString(t, "Device", "manufacturer", element.getManufacturerElement(), -1);
9505    }
9506    if (element.hasManufactureDateElement()) {
9507      composeDateTime(t, "Device", "manufactureDate", element.getManufactureDateElement(), -1);
9508    }
9509    if (element.hasExpirationDateElement()) {
9510      composeDateTime(t, "Device", "expirationDate", element.getExpirationDateElement(), -1);
9511    }
9512    if (element.hasLotNumberElement()) {
9513      composeString(t, "Device", "lotNumber", element.getLotNumberElement(), -1);
9514    }
9515    if (element.hasSerialNumberElement()) {
9516      composeString(t, "Device", "serialNumber", element.getSerialNumberElement(), -1);
9517    }
9518    for (int i = 0; i < element.getName().size(); i++) {
9519      composeDeviceNameComponent(t, "Device", "name", element.getName().get(i), i);
9520    }
9521    if (element.hasModelNumberElement()) {
9522      composeString(t, "Device", "modelNumber", element.getModelNumberElement(), -1);
9523    }
9524    if (element.hasPartNumberElement()) {
9525      composeString(t, "Device", "partNumber", element.getPartNumberElement(), -1);
9526    }
9527    for (int i = 0; i < element.getCategory().size(); i++) {
9528      composeCodeableConcept(t, "Device", "category", element.getCategory().get(i), i);
9529    }
9530    for (int i = 0; i < element.getType().size(); i++) {
9531      composeCodeableConcept(t, "Device", "type", element.getType().get(i), i);
9532    }
9533    for (int i = 0; i < element.getVersion().size(); i++) {
9534      composeDeviceVersionComponent(t, "Device", "version", element.getVersion().get(i), i);
9535    }
9536    for (int i = 0; i < element.getConformsTo().size(); i++) {
9537      composeDeviceConformsToComponent(t, "Device", "conformsTo", element.getConformsTo().get(i), i);
9538    }
9539    for (int i = 0; i < element.getProperty().size(); i++) {
9540      composeDevicePropertyComponent(t, "Device", "property", element.getProperty().get(i), i);
9541    }
9542    if (element.hasMode()) {
9543      composeCodeableConcept(t, "Device", "mode", element.getMode(), -1);
9544    }
9545    if (element.hasCycle()) {
9546      composeCount(t, "Device", "cycle", element.getCycle(), -1);
9547    }
9548    if (element.hasDuration()) {
9549      composeDuration(t, "Device", "duration", element.getDuration(), -1);
9550    }
9551    if (element.hasOwner()) {
9552      composeReference(t, "Device", "owner", element.getOwner(), -1);
9553    }
9554    for (int i = 0; i < element.getContact().size(); i++) {
9555      composeContactPoint(t, "Device", "contact", element.getContact().get(i), i);
9556    }
9557    if (element.hasLocation()) {
9558      composeReference(t, "Device", "location", element.getLocation(), -1);
9559    }
9560    if (element.hasUrlElement()) {
9561      composeUri(t, "Device", "url", element.getUrlElement(), -1);
9562    }
9563    for (int i = 0; i < element.getEndpoint().size(); i++) {
9564      composeReference(t, "Device", "endpoint", element.getEndpoint().get(i), i);
9565    }
9566    for (int i = 0; i < element.getGateway().size(); i++) {
9567      composeCodeableReference(t, "Device", "gateway", element.getGateway().get(i), i);
9568    }
9569    for (int i = 0; i < element.getNote().size(); i++) {
9570      composeAnnotation(t, "Device", "note", element.getNote().get(i), i);
9571    }
9572    for (int i = 0; i < element.getSafety().size(); i++) {
9573      composeCodeableConcept(t, "Device", "safety", element.getSafety().get(i), i);
9574    }
9575    if (element.hasParent()) {
9576      composeReference(t, "Device", "parent", element.getParent(), -1);
9577    }
9578  }
9579
9580  protected void composeDeviceUdiCarrierComponent(Complex parent, String parentType, String name, Device.DeviceUdiCarrierComponent element, int index) {
9581    if (element == null) 
9582      return;
9583    Complex t;
9584    if (Utilities.noString(parentType))
9585      t = parent;
9586    else {
9587      t = parent.predicate("fhir:"+name,index > -1);
9588    }
9589    composeBackboneElement(t, "udiCarrier", name, element, index);
9590    if (element.hasDeviceIdentifierElement()) {
9591      composeString(t, "DeviceUdiCarrierComponent", "deviceIdentifier", element.getDeviceIdentifierElement(), -1);
9592    }
9593    if (element.hasIssuerElement()) {
9594      composeUri(t, "DeviceUdiCarrierComponent", "issuer", element.getIssuerElement(), -1);
9595    }
9596    if (element.hasJurisdictionElement()) {
9597      composeUri(t, "DeviceUdiCarrierComponent", "jurisdiction", element.getJurisdictionElement(), -1);
9598    }
9599    if (element.hasCarrierAIDCElement()) {
9600      composeBase64Binary(t, "DeviceUdiCarrierComponent", "carrierAIDC", element.getCarrierAIDCElement(), -1);
9601    }
9602    if (element.hasCarrierHRFElement()) {
9603      composeString(t, "DeviceUdiCarrierComponent", "carrierHRF", element.getCarrierHRFElement(), -1);
9604    }
9605    if (element.hasEntryTypeElement()) {
9606      composeEnum(t, "DeviceUdiCarrierComponent", "entryType", element.getEntryTypeElement(), -1);
9607    }
9608  }
9609
9610  protected void composeDeviceNameComponent(Complex parent, String parentType, String name, Device.DeviceNameComponent element, int index) {
9611    if (element == null) 
9612      return;
9613    Complex t;
9614    if (Utilities.noString(parentType))
9615      t = parent;
9616    else {
9617      t = parent.predicate("fhir:"+name,index > -1);
9618    }
9619    composeBackboneElement(t, "name", name, element, index);
9620    if (element.hasValueElement()) {
9621      composeString(t, "DeviceNameComponent", "value", element.getValueElement(), -1);
9622    }
9623    if (element.hasTypeElement()) {
9624      composeEnum(t, "DeviceNameComponent", "type", element.getTypeElement(), -1);
9625    }
9626    if (element.hasDisplayElement()) {
9627      composeBoolean(t, "DeviceNameComponent", "display", element.getDisplayElement(), -1);
9628    }
9629  }
9630
9631  protected void composeDeviceVersionComponent(Complex parent, String parentType, String name, Device.DeviceVersionComponent 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:"+name,index > -1);
9639    }
9640    composeBackboneElement(t, "version", name, element, index);
9641    if (element.hasType()) {
9642      composeCodeableConcept(t, "DeviceVersionComponent", "type", element.getType(), -1);
9643    }
9644    if (element.hasComponent()) {
9645      composeIdentifier(t, "DeviceVersionComponent", "component", element.getComponent(), -1);
9646    }
9647    if (element.hasInstallDateElement()) {
9648      composeDateTime(t, "DeviceVersionComponent", "installDate", element.getInstallDateElement(), -1);
9649    }
9650    if (element.hasValueElement()) {
9651      composeString(t, "DeviceVersionComponent", "value", element.getValueElement(), -1);
9652    }
9653  }
9654
9655  protected void composeDeviceConformsToComponent(Complex parent, String parentType, String name, Device.DeviceConformsToComponent element, int index) {
9656    if (element == null) 
9657      return;
9658    Complex t;
9659    if (Utilities.noString(parentType))
9660      t = parent;
9661    else {
9662      t = parent.predicate("fhir:"+name,index > -1);
9663    }
9664    composeBackboneElement(t, "conformsTo", name, element, index);
9665    if (element.hasCategory()) {
9666      composeCodeableConcept(t, "DeviceConformsToComponent", "category", element.getCategory(), -1);
9667    }
9668    if (element.hasSpecification()) {
9669      composeCodeableConcept(t, "DeviceConformsToComponent", "specification", element.getSpecification(), -1);
9670    }
9671    if (element.hasVersionElement()) {
9672      composeString(t, "DeviceConformsToComponent", "version", element.getVersionElement(), -1);
9673    }
9674  }
9675
9676  protected void composeDevicePropertyComponent(Complex parent, String parentType, String name, Device.DevicePropertyComponent element, int index) {
9677    if (element == null) 
9678      return;
9679    Complex t;
9680    if (Utilities.noString(parentType))
9681      t = parent;
9682    else {
9683      t = parent.predicate("fhir:"+name,index > -1);
9684    }
9685    composeBackboneElement(t, "property", name, element, index);
9686    if (element.hasType()) {
9687      composeCodeableConcept(t, "DevicePropertyComponent", "type", element.getType(), -1);
9688    }
9689    if (element.hasValue()) {
9690      composeType(t, "DevicePropertyComponent", "value", element.getValue(), -1);
9691    }
9692  }
9693
9694  protected void composeDeviceAssociation(Complex parent, String parentType, String name, DeviceAssociation element, int index) {
9695    if (element == null) 
9696      return;
9697    Complex t;
9698    if (Utilities.noString(parentType))
9699      t = parent;
9700    else {
9701      t = parent.predicate("fhir:"+name,index > -1);
9702    }
9703    composeDomainResource(t, "DeviceAssociation", name, element, index);
9704    for (int i = 0; i < element.getIdentifier().size(); i++) {
9705      composeIdentifier(t, "DeviceAssociation", "identifier", element.getIdentifier().get(i), i);
9706    }
9707    if (element.hasDevice()) {
9708      composeReference(t, "DeviceAssociation", "device", element.getDevice(), -1);
9709    }
9710    for (int i = 0; i < element.getCategory().size(); i++) {
9711      composeCodeableConcept(t, "DeviceAssociation", "category", element.getCategory().get(i), i);
9712    }
9713    if (element.hasStatus()) {
9714      composeCodeableConcept(t, "DeviceAssociation", "status", element.getStatus(), -1);
9715    }
9716    for (int i = 0; i < element.getStatusReason().size(); i++) {
9717      composeCodeableConcept(t, "DeviceAssociation", "statusReason", element.getStatusReason().get(i), i);
9718    }
9719    if (element.hasSubject()) {
9720      composeReference(t, "DeviceAssociation", "subject", element.getSubject(), -1);
9721    }
9722    if (element.hasBodyStructure()) {
9723      composeReference(t, "DeviceAssociation", "bodyStructure", element.getBodyStructure(), -1);
9724    }
9725    if (element.hasPeriod()) {
9726      composePeriod(t, "DeviceAssociation", "period", element.getPeriod(), -1);
9727    }
9728    for (int i = 0; i < element.getOperation().size(); i++) {
9729      composeDeviceAssociationOperationComponent(t, "DeviceAssociation", "operation", element.getOperation().get(i), i);
9730    }
9731  }
9732
9733  protected void composeDeviceAssociationOperationComponent(Complex parent, String parentType, String name, DeviceAssociation.DeviceAssociationOperationComponent element, int index) {
9734    if (element == null) 
9735      return;
9736    Complex t;
9737    if (Utilities.noString(parentType))
9738      t = parent;
9739    else {
9740      t = parent.predicate("fhir:"+name,index > -1);
9741    }
9742    composeBackboneElement(t, "operation", name, element, index);
9743    if (element.hasStatus()) {
9744      composeCodeableConcept(t, "DeviceAssociationOperationComponent", "status", element.getStatus(), -1);
9745    }
9746    for (int i = 0; i < element.getOperator().size(); i++) {
9747      composeReference(t, "DeviceAssociationOperationComponent", "operator", element.getOperator().get(i), i);
9748    }
9749    if (element.hasPeriod()) {
9750      composePeriod(t, "DeviceAssociationOperationComponent", "period", element.getPeriod(), -1);
9751    }
9752  }
9753
9754  protected void composeDeviceDefinition(Complex parent, String parentType, String name, DeviceDefinition element, int index) {
9755    if (element == null) 
9756      return;
9757    Complex t;
9758    if (Utilities.noString(parentType))
9759      t = parent;
9760    else {
9761      t = parent.predicate("fhir:"+name,index > -1);
9762    }
9763    composeDomainResource(t, "DeviceDefinition", name, element, index);
9764    if (element.hasDescriptionElement()) {
9765      composeMarkdown(t, "DeviceDefinition", "description", element.getDescriptionElement(), -1);
9766    }
9767    for (int i = 0; i < element.getIdentifier().size(); i++) {
9768      composeIdentifier(t, "DeviceDefinition", "identifier", element.getIdentifier().get(i), i);
9769    }
9770    for (int i = 0; i < element.getUdiDeviceIdentifier().size(); i++) {
9771      composeDeviceDefinitionUdiDeviceIdentifierComponent(t, "DeviceDefinition", "udiDeviceIdentifier", element.getUdiDeviceIdentifier().get(i), i);
9772    }
9773    for (int i = 0; i < element.getRegulatoryIdentifier().size(); i++) {
9774      composeDeviceDefinitionRegulatoryIdentifierComponent(t, "DeviceDefinition", "regulatoryIdentifier", element.getRegulatoryIdentifier().get(i), i);
9775    }
9776    if (element.hasPartNumberElement()) {
9777      composeString(t, "DeviceDefinition", "partNumber", element.getPartNumberElement(), -1);
9778    }
9779    if (element.hasManufacturer()) {
9780      composeReference(t, "DeviceDefinition", "manufacturer", element.getManufacturer(), -1);
9781    }
9782    for (int i = 0; i < element.getDeviceName().size(); i++) {
9783      composeDeviceDefinitionDeviceNameComponent(t, "DeviceDefinition", "deviceName", element.getDeviceName().get(i), i);
9784    }
9785    if (element.hasModelNumberElement()) {
9786      composeString(t, "DeviceDefinition", "modelNumber", element.getModelNumberElement(), -1);
9787    }
9788    for (int i = 0; i < element.getClassification().size(); i++) {
9789      composeDeviceDefinitionClassificationComponent(t, "DeviceDefinition", "classification", element.getClassification().get(i), i);
9790    }
9791    for (int i = 0; i < element.getConformsTo().size(); i++) {
9792      composeDeviceDefinitionConformsToComponent(t, "DeviceDefinition", "conformsTo", element.getConformsTo().get(i), i);
9793    }
9794    for (int i = 0; i < element.getHasPart().size(); i++) {
9795      composeDeviceDefinitionHasPartComponent(t, "DeviceDefinition", "hasPart", element.getHasPart().get(i), i);
9796    }
9797    for (int i = 0; i < element.getPackaging().size(); i++) {
9798      composeDeviceDefinitionPackagingComponent(t, "DeviceDefinition", "packaging", element.getPackaging().get(i), i);
9799    }
9800    for (int i = 0; i < element.getVersion().size(); i++) {
9801      composeDeviceDefinitionVersionComponent(t, "DeviceDefinition", "version", element.getVersion().get(i), i);
9802    }
9803    for (int i = 0; i < element.getSafety().size(); i++) {
9804      composeCodeableConcept(t, "DeviceDefinition", "safety", element.getSafety().get(i), i);
9805    }
9806    for (int i = 0; i < element.getShelfLifeStorage().size(); i++) {
9807      composeProductShelfLife(t, "DeviceDefinition", "shelfLifeStorage", element.getShelfLifeStorage().get(i), i);
9808    }
9809    for (int i = 0; i < element.getLanguageCode().size(); i++) {
9810      composeCodeableConcept(t, "DeviceDefinition", "languageCode", element.getLanguageCode().get(i), i);
9811    }
9812    for (int i = 0; i < element.getProperty().size(); i++) {
9813      composeDeviceDefinitionPropertyComponent(t, "DeviceDefinition", "property", element.getProperty().get(i), i);
9814    }
9815    if (element.hasOwner()) {
9816      composeReference(t, "DeviceDefinition", "owner", element.getOwner(), -1);
9817    }
9818    for (int i = 0; i < element.getContact().size(); i++) {
9819      composeContactPoint(t, "DeviceDefinition", "contact", element.getContact().get(i), i);
9820    }
9821    for (int i = 0; i < element.getLink().size(); i++) {
9822      composeDeviceDefinitionLinkComponent(t, "DeviceDefinition", "link", element.getLink().get(i), i);
9823    }
9824    for (int i = 0; i < element.getNote().size(); i++) {
9825      composeAnnotation(t, "DeviceDefinition", "note", element.getNote().get(i), i);
9826    }
9827    for (int i = 0; i < element.getMaterial().size(); i++) {
9828      composeDeviceDefinitionMaterialComponent(t, "DeviceDefinition", "material", element.getMaterial().get(i), i);
9829    }
9830    for (int i = 0; i < element.getProductionIdentifierInUDI().size(); i++) {
9831      composeEnum(t, "DeviceDefinition", "productionIdentifierInUDI", element.getProductionIdentifierInUDI().get(i), i);
9832    }
9833    if (element.hasGuideline()) {
9834      composeDeviceDefinitionGuidelineComponent(t, "DeviceDefinition", "guideline", element.getGuideline(), -1);
9835    }
9836    if (element.hasCorrectiveAction()) {
9837      composeDeviceDefinitionCorrectiveActionComponent(t, "DeviceDefinition", "correctiveAction", element.getCorrectiveAction(), -1);
9838    }
9839    for (int i = 0; i < element.getChargeItem().size(); i++) {
9840      composeDeviceDefinitionChargeItemComponent(t, "DeviceDefinition", "chargeItem", element.getChargeItem().get(i), i);
9841    }
9842  }
9843
9844  protected void composeDeviceDefinitionUdiDeviceIdentifierComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionUdiDeviceIdentifierComponent element, int index) {
9845    if (element == null) 
9846      return;
9847    Complex t;
9848    if (Utilities.noString(parentType))
9849      t = parent;
9850    else {
9851      t = parent.predicate("fhir:"+name,index > -1);
9852    }
9853    composeBackboneElement(t, "udiDeviceIdentifier", name, element, index);
9854    if (element.hasDeviceIdentifierElement()) {
9855      composeString(t, "DeviceDefinitionUdiDeviceIdentifierComponent", "deviceIdentifier", element.getDeviceIdentifierElement(), -1);
9856    }
9857    if (element.hasIssuerElement()) {
9858      composeUri(t, "DeviceDefinitionUdiDeviceIdentifierComponent", "issuer", element.getIssuerElement(), -1);
9859    }
9860    if (element.hasJurisdictionElement()) {
9861      composeUri(t, "DeviceDefinitionUdiDeviceIdentifierComponent", "jurisdiction", element.getJurisdictionElement(), -1);
9862    }
9863    for (int i = 0; i < element.getMarketDistribution().size(); i++) {
9864      composeDeviceDefinitionUdiDeviceIdentifierMarketDistributionComponent(t, "DeviceDefinitionUdiDeviceIdentifierComponent", "marketDistribution", element.getMarketDistribution().get(i), i);
9865    }
9866  }
9867
9868  protected void composeDeviceDefinitionUdiDeviceIdentifierMarketDistributionComponent(Complex parent, String parentType, String name, DeviceDefinition.UdiDeviceIdentifierMarketDistributionComponent element, int index) {
9869    if (element == null) 
9870      return;
9871    Complex t;
9872    if (Utilities.noString(parentType))
9873      t = parent;
9874    else {
9875      t = parent.predicate("fhir:"+name,index > -1);
9876    }
9877    composeBackboneElement(t, "marketDistribution", name, element, index);
9878    if (element.hasMarketPeriod()) {
9879      composePeriod(t, "UdiDeviceIdentifierMarketDistributionComponent", "marketPeriod", element.getMarketPeriod(), -1);
9880    }
9881    if (element.hasSubJurisdictionElement()) {
9882      composeUri(t, "UdiDeviceIdentifierMarketDistributionComponent", "subJurisdiction", element.getSubJurisdictionElement(), -1);
9883    }
9884  }
9885
9886  protected void composeDeviceDefinitionRegulatoryIdentifierComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionRegulatoryIdentifierComponent element, int index) {
9887    if (element == null) 
9888      return;
9889    Complex t;
9890    if (Utilities.noString(parentType))
9891      t = parent;
9892    else {
9893      t = parent.predicate("fhir:"+name,index > -1);
9894    }
9895    composeBackboneElement(t, "regulatoryIdentifier", name, element, index);
9896    if (element.hasTypeElement()) {
9897      composeEnum(t, "DeviceDefinitionRegulatoryIdentifierComponent", "type", element.getTypeElement(), -1);
9898    }
9899    if (element.hasDeviceIdentifierElement()) {
9900      composeString(t, "DeviceDefinitionRegulatoryIdentifierComponent", "deviceIdentifier", element.getDeviceIdentifierElement(), -1);
9901    }
9902    if (element.hasIssuerElement()) {
9903      composeUri(t, "DeviceDefinitionRegulatoryIdentifierComponent", "issuer", element.getIssuerElement(), -1);
9904    }
9905    if (element.hasJurisdictionElement()) {
9906      composeUri(t, "DeviceDefinitionRegulatoryIdentifierComponent", "jurisdiction", element.getJurisdictionElement(), -1);
9907    }
9908  }
9909
9910  protected void composeDeviceDefinitionDeviceNameComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionDeviceNameComponent element, int index) {
9911    if (element == null) 
9912      return;
9913    Complex t;
9914    if (Utilities.noString(parentType))
9915      t = parent;
9916    else {
9917      t = parent.predicate("fhir:"+name,index > -1);
9918    }
9919    composeBackboneElement(t, "deviceName", name, element, index);
9920    if (element.hasNameElement()) {
9921      composeString(t, "DeviceDefinitionDeviceNameComponent", "name", element.getNameElement(), -1);
9922    }
9923    if (element.hasTypeElement()) {
9924      composeEnum(t, "DeviceDefinitionDeviceNameComponent", "type", element.getTypeElement(), -1);
9925    }
9926  }
9927
9928  protected void composeDeviceDefinitionClassificationComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionClassificationComponent element, int index) {
9929    if (element == null) 
9930      return;
9931    Complex t;
9932    if (Utilities.noString(parentType))
9933      t = parent;
9934    else {
9935      t = parent.predicate("fhir:"+name,index > -1);
9936    }
9937    composeBackboneElement(t, "classification", name, element, index);
9938    if (element.hasType()) {
9939      composeCodeableConcept(t, "DeviceDefinitionClassificationComponent", "type", element.getType(), -1);
9940    }
9941    for (int i = 0; i < element.getJustification().size(); i++) {
9942      composeRelatedArtifact(t, "DeviceDefinitionClassificationComponent", "justification", element.getJustification().get(i), i);
9943    }
9944  }
9945
9946  protected void composeDeviceDefinitionConformsToComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionConformsToComponent element, int index) {
9947    if (element == null) 
9948      return;
9949    Complex t;
9950    if (Utilities.noString(parentType))
9951      t = parent;
9952    else {
9953      t = parent.predicate("fhir:"+name,index > -1);
9954    }
9955    composeBackboneElement(t, "conformsTo", name, element, index);
9956    if (element.hasCategory()) {
9957      composeCodeableConcept(t, "DeviceDefinitionConformsToComponent", "category", element.getCategory(), -1);
9958    }
9959    if (element.hasSpecification()) {
9960      composeCodeableConcept(t, "DeviceDefinitionConformsToComponent", "specification", element.getSpecification(), -1);
9961    }
9962    for (int i = 0; i < element.getVersion().size(); i++) {
9963      composeString(t, "DeviceDefinitionConformsToComponent", "version", element.getVersion().get(i), i);
9964    }
9965    for (int i = 0; i < element.getSource().size(); i++) {
9966      composeRelatedArtifact(t, "DeviceDefinitionConformsToComponent", "source", element.getSource().get(i), i);
9967    }
9968  }
9969
9970  protected void composeDeviceDefinitionHasPartComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionHasPartComponent element, int index) {
9971    if (element == null) 
9972      return;
9973    Complex t;
9974    if (Utilities.noString(parentType))
9975      t = parent;
9976    else {
9977      t = parent.predicate("fhir:"+name,index > -1);
9978    }
9979    composeBackboneElement(t, "hasPart", name, element, index);
9980    if (element.hasReference()) {
9981      composeReference(t, "DeviceDefinitionHasPartComponent", "reference", element.getReference(), -1);
9982    }
9983    if (element.hasCountElement()) {
9984      composeInteger(t, "DeviceDefinitionHasPartComponent", "count", element.getCountElement(), -1);
9985    }
9986  }
9987
9988  protected void composeDeviceDefinitionPackagingComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionPackagingComponent 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:"+name,index > -1);
9996    }
9997    composeBackboneElement(t, "packaging", name, element, index);
9998    if (element.hasIdentifier()) {
9999      composeIdentifier(t, "DeviceDefinitionPackagingComponent", "identifier", element.getIdentifier(), -1);
10000    }
10001    if (element.hasType()) {
10002      composeCodeableConcept(t, "DeviceDefinitionPackagingComponent", "type", element.getType(), -1);
10003    }
10004    if (element.hasCountElement()) {
10005      composeInteger(t, "DeviceDefinitionPackagingComponent", "count", element.getCountElement(), -1);
10006    }
10007    for (int i = 0; i < element.getDistributor().size(); i++) {
10008      composeDeviceDefinitionPackagingDistributorComponent(t, "DeviceDefinitionPackagingComponent", "distributor", element.getDistributor().get(i), i);
10009    }
10010    for (int i = 0; i < element.getUdiDeviceIdentifier().size(); i++) {
10011      composeDeviceDefinitionUdiDeviceIdentifierComponent(t, "DeviceDefinitionPackagingComponent", "udiDeviceIdentifier", element.getUdiDeviceIdentifier().get(i), i);
10012    }
10013    for (int i = 0; i < element.getPackaging().size(); i++) {
10014      composeDeviceDefinitionPackagingComponent(t, "DeviceDefinitionPackagingComponent", "packaging", element.getPackaging().get(i), i);
10015    }
10016  }
10017
10018  protected void composeDeviceDefinitionPackagingDistributorComponent(Complex parent, String parentType, String name, DeviceDefinition.PackagingDistributorComponent element, int index) {
10019    if (element == null) 
10020      return;
10021    Complex t;
10022    if (Utilities.noString(parentType))
10023      t = parent;
10024    else {
10025      t = parent.predicate("fhir:"+name,index > -1);
10026    }
10027    composeBackboneElement(t, "distributor", name, element, index);
10028    if (element.hasNameElement()) {
10029      composeString(t, "PackagingDistributorComponent", "name", element.getNameElement(), -1);
10030    }
10031    for (int i = 0; i < element.getOrganizationReference().size(); i++) {
10032      composeReference(t, "PackagingDistributorComponent", "organizationReference", element.getOrganizationReference().get(i), i);
10033    }
10034  }
10035
10036  protected void composeDeviceDefinitionVersionComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionVersionComponent element, int index) {
10037    if (element == null) 
10038      return;
10039    Complex t;
10040    if (Utilities.noString(parentType))
10041      t = parent;
10042    else {
10043      t = parent.predicate("fhir:"+name,index > -1);
10044    }
10045    composeBackboneElement(t, "version", name, element, index);
10046    if (element.hasType()) {
10047      composeCodeableConcept(t, "DeviceDefinitionVersionComponent", "type", element.getType(), -1);
10048    }
10049    if (element.hasComponent()) {
10050      composeIdentifier(t, "DeviceDefinitionVersionComponent", "component", element.getComponent(), -1);
10051    }
10052    if (element.hasValueElement()) {
10053      composeString(t, "DeviceDefinitionVersionComponent", "value", element.getValueElement(), -1);
10054    }
10055  }
10056
10057  protected void composeDeviceDefinitionPropertyComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionPropertyComponent element, int index) {
10058    if (element == null) 
10059      return;
10060    Complex t;
10061    if (Utilities.noString(parentType))
10062      t = parent;
10063    else {
10064      t = parent.predicate("fhir:"+name,index > -1);
10065    }
10066    composeBackboneElement(t, "property", name, element, index);
10067    if (element.hasType()) {
10068      composeCodeableConcept(t, "DeviceDefinitionPropertyComponent", "type", element.getType(), -1);
10069    }
10070    if (element.hasValue()) {
10071      composeType(t, "DeviceDefinitionPropertyComponent", "value", element.getValue(), -1);
10072    }
10073  }
10074
10075  protected void composeDeviceDefinitionLinkComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionLinkComponent element, int index) {
10076    if (element == null) 
10077      return;
10078    Complex t;
10079    if (Utilities.noString(parentType))
10080      t = parent;
10081    else {
10082      t = parent.predicate("fhir:"+name,index > -1);
10083    }
10084    composeBackboneElement(t, "link", name, element, index);
10085    if (element.hasRelation()) {
10086      composeCoding(t, "DeviceDefinitionLinkComponent", "relation", element.getRelation(), -1);
10087    }
10088    if (element.hasRelatedDevice()) {
10089      composeCodeableReference(t, "DeviceDefinitionLinkComponent", "relatedDevice", element.getRelatedDevice(), -1);
10090    }
10091  }
10092
10093  protected void composeDeviceDefinitionMaterialComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionMaterialComponent element, int index) {
10094    if (element == null) 
10095      return;
10096    Complex t;
10097    if (Utilities.noString(parentType))
10098      t = parent;
10099    else {
10100      t = parent.predicate("fhir:"+name,index > -1);
10101    }
10102    composeBackboneElement(t, "material", name, element, index);
10103    if (element.hasSubstance()) {
10104      composeCodeableConcept(t, "DeviceDefinitionMaterialComponent", "substance", element.getSubstance(), -1);
10105    }
10106    if (element.hasAlternateElement()) {
10107      composeBoolean(t, "DeviceDefinitionMaterialComponent", "alternate", element.getAlternateElement(), -1);
10108    }
10109    if (element.hasAllergenicIndicatorElement()) {
10110      composeBoolean(t, "DeviceDefinitionMaterialComponent", "allergenicIndicator", element.getAllergenicIndicatorElement(), -1);
10111    }
10112  }
10113
10114  protected void composeDeviceDefinitionGuidelineComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionGuidelineComponent element, int index) {
10115    if (element == null) 
10116      return;
10117    Complex t;
10118    if (Utilities.noString(parentType))
10119      t = parent;
10120    else {
10121      t = parent.predicate("fhir:"+name,index > -1);
10122    }
10123    composeBackboneElement(t, "guideline", name, element, index);
10124    for (int i = 0; i < element.getUseContext().size(); i++) {
10125      composeUsageContext(t, "DeviceDefinitionGuidelineComponent", "useContext", element.getUseContext().get(i), i);
10126    }
10127    if (element.hasUsageInstructionElement()) {
10128      composeMarkdown(t, "DeviceDefinitionGuidelineComponent", "usageInstruction", element.getUsageInstructionElement(), -1);
10129    }
10130    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
10131      composeRelatedArtifact(t, "DeviceDefinitionGuidelineComponent", "relatedArtifact", element.getRelatedArtifact().get(i), i);
10132    }
10133    for (int i = 0; i < element.getIndication().size(); i++) {
10134      composeCodeableConcept(t, "DeviceDefinitionGuidelineComponent", "indication", element.getIndication().get(i), i);
10135    }
10136    for (int i = 0; i < element.getContraindication().size(); i++) {
10137      composeCodeableConcept(t, "DeviceDefinitionGuidelineComponent", "contraindication", element.getContraindication().get(i), i);
10138    }
10139    for (int i = 0; i < element.getWarning().size(); i++) {
10140      composeCodeableConcept(t, "DeviceDefinitionGuidelineComponent", "warning", element.getWarning().get(i), i);
10141    }
10142    if (element.hasIntendedUseElement()) {
10143      composeString(t, "DeviceDefinitionGuidelineComponent", "intendedUse", element.getIntendedUseElement(), -1);
10144    }
10145  }
10146
10147  protected void composeDeviceDefinitionCorrectiveActionComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionCorrectiveActionComponent element, int index) {
10148    if (element == null) 
10149      return;
10150    Complex t;
10151    if (Utilities.noString(parentType))
10152      t = parent;
10153    else {
10154      t = parent.predicate("fhir:"+name,index > -1);
10155    }
10156    composeBackboneElement(t, "correctiveAction", name, element, index);
10157    if (element.hasRecallElement()) {
10158      composeBoolean(t, "DeviceDefinitionCorrectiveActionComponent", "recall", element.getRecallElement(), -1);
10159    }
10160    if (element.hasScopeElement()) {
10161      composeEnum(t, "DeviceDefinitionCorrectiveActionComponent", "scope", element.getScopeElement(), -1);
10162    }
10163    if (element.hasPeriod()) {
10164      composePeriod(t, "DeviceDefinitionCorrectiveActionComponent", "period", element.getPeriod(), -1);
10165    }
10166  }
10167
10168  protected void composeDeviceDefinitionChargeItemComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionChargeItemComponent element, int index) {
10169    if (element == null) 
10170      return;
10171    Complex t;
10172    if (Utilities.noString(parentType))
10173      t = parent;
10174    else {
10175      t = parent.predicate("fhir:"+name,index > -1);
10176    }
10177    composeBackboneElement(t, "chargeItem", name, element, index);
10178    if (element.hasChargeItemCode()) {
10179      composeCodeableReference(t, "DeviceDefinitionChargeItemComponent", "chargeItemCode", element.getChargeItemCode(), -1);
10180    }
10181    if (element.hasCount()) {
10182      composeQuantity(t, "DeviceDefinitionChargeItemComponent", "count", element.getCount(), -1);
10183    }
10184    if (element.hasEffectivePeriod()) {
10185      composePeriod(t, "DeviceDefinitionChargeItemComponent", "effectivePeriod", element.getEffectivePeriod(), -1);
10186    }
10187    for (int i = 0; i < element.getUseContext().size(); i++) {
10188      composeUsageContext(t, "DeviceDefinitionChargeItemComponent", "useContext", element.getUseContext().get(i), i);
10189    }
10190  }
10191
10192  protected void composeDeviceDispense(Complex parent, String parentType, String name, DeviceDispense element, int index) {
10193    if (element == null) 
10194      return;
10195    Complex t;
10196    if (Utilities.noString(parentType))
10197      t = parent;
10198    else {
10199      t = parent.predicate("fhir:"+name,index > -1);
10200    }
10201    composeDomainResource(t, "DeviceDispense", name, element, index);
10202    for (int i = 0; i < element.getIdentifier().size(); i++) {
10203      composeIdentifier(t, "DeviceDispense", "identifier", element.getIdentifier().get(i), i);
10204    }
10205    for (int i = 0; i < element.getBasedOn().size(); i++) {
10206      composeReference(t, "DeviceDispense", "basedOn", element.getBasedOn().get(i), i);
10207    }
10208    for (int i = 0; i < element.getPartOf().size(); i++) {
10209      composeReference(t, "DeviceDispense", "partOf", element.getPartOf().get(i), i);
10210    }
10211    if (element.hasStatusElement()) {
10212      composeEnum(t, "DeviceDispense", "status", element.getStatusElement(), -1);
10213    }
10214    if (element.hasStatusReason()) {
10215      composeCodeableReference(t, "DeviceDispense", "statusReason", element.getStatusReason(), -1);
10216    }
10217    for (int i = 0; i < element.getCategory().size(); i++) {
10218      composeCodeableConcept(t, "DeviceDispense", "category", element.getCategory().get(i), i);
10219    }
10220    if (element.hasDevice()) {
10221      composeCodeableReference(t, "DeviceDispense", "device", element.getDevice(), -1);
10222    }
10223    if (element.hasSubject()) {
10224      composeReference(t, "DeviceDispense", "subject", element.getSubject(), -1);
10225    }
10226    if (element.hasReceiver()) {
10227      composeReference(t, "DeviceDispense", "receiver", element.getReceiver(), -1);
10228    }
10229    if (element.hasEncounter()) {
10230      composeReference(t, "DeviceDispense", "encounter", element.getEncounter(), -1);
10231    }
10232    for (int i = 0; i < element.getSupportingInformation().size(); i++) {
10233      composeReference(t, "DeviceDispense", "supportingInformation", element.getSupportingInformation().get(i), i);
10234    }
10235    for (int i = 0; i < element.getPerformer().size(); i++) {
10236      composeDeviceDispensePerformerComponent(t, "DeviceDispense", "performer", element.getPerformer().get(i), i);
10237    }
10238    if (element.hasLocation()) {
10239      composeReference(t, "DeviceDispense", "location", element.getLocation(), -1);
10240    }
10241    if (element.hasType()) {
10242      composeCodeableConcept(t, "DeviceDispense", "type", element.getType(), -1);
10243    }
10244    if (element.hasQuantity()) {
10245      composeQuantity(t, "DeviceDispense", "quantity", element.getQuantity(), -1);
10246    }
10247    if (element.hasPreparedDateElement()) {
10248      composeDateTime(t, "DeviceDispense", "preparedDate", element.getPreparedDateElement(), -1);
10249    }
10250    if (element.hasWhenHandedOverElement()) {
10251      composeDateTime(t, "DeviceDispense", "whenHandedOver", element.getWhenHandedOverElement(), -1);
10252    }
10253    if (element.hasDestination()) {
10254      composeReference(t, "DeviceDispense", "destination", element.getDestination(), -1);
10255    }
10256    for (int i = 0; i < element.getNote().size(); i++) {
10257      composeAnnotation(t, "DeviceDispense", "note", element.getNote().get(i), i);
10258    }
10259    if (element.hasUsageInstructionElement()) {
10260      composeMarkdown(t, "DeviceDispense", "usageInstruction", element.getUsageInstructionElement(), -1);
10261    }
10262    for (int i = 0; i < element.getEventHistory().size(); i++) {
10263      composeReference(t, "DeviceDispense", "eventHistory", element.getEventHistory().get(i), i);
10264    }
10265  }
10266
10267  protected void composeDeviceDispensePerformerComponent(Complex parent, String parentType, String name, DeviceDispense.DeviceDispensePerformerComponent element, int index) {
10268    if (element == null) 
10269      return;
10270    Complex t;
10271    if (Utilities.noString(parentType))
10272      t = parent;
10273    else {
10274      t = parent.predicate("fhir:"+name,index > -1);
10275    }
10276    composeBackboneElement(t, "performer", name, element, index);
10277    if (element.hasFunction()) {
10278      composeCodeableConcept(t, "DeviceDispensePerformerComponent", "function", element.getFunction(), -1);
10279    }
10280    if (element.hasActor()) {
10281      composeReference(t, "DeviceDispensePerformerComponent", "actor", element.getActor(), -1);
10282    }
10283  }
10284
10285  protected void composeDeviceMetric(Complex parent, String parentType, String name, DeviceMetric element, int index) {
10286    if (element == null) 
10287      return;
10288    Complex t;
10289    if (Utilities.noString(parentType))
10290      t = parent;
10291    else {
10292      t = parent.predicate("fhir:"+name,index > -1);
10293    }
10294    composeDomainResource(t, "DeviceMetric", name, element, index);
10295    for (int i = 0; i < element.getIdentifier().size(); i++) {
10296      composeIdentifier(t, "DeviceMetric", "identifier", element.getIdentifier().get(i), i);
10297    }
10298    if (element.hasType()) {
10299      composeCodeableConcept(t, "DeviceMetric", "type", element.getType(), -1);
10300    }
10301    if (element.hasUnit()) {
10302      composeCodeableConcept(t, "DeviceMetric", "unit", element.getUnit(), -1);
10303    }
10304    if (element.hasDevice()) {
10305      composeReference(t, "DeviceMetric", "device", element.getDevice(), -1);
10306    }
10307    if (element.hasOperationalStatusElement()) {
10308      composeEnum(t, "DeviceMetric", "operationalStatus", element.getOperationalStatusElement(), -1);
10309    }
10310    if (element.hasColorElement()) {
10311      composeCode(t, "DeviceMetric", "color", element.getColorElement(), -1);
10312    }
10313    if (element.hasCategoryElement()) {
10314      composeEnum(t, "DeviceMetric", "category", element.getCategoryElement(), -1);
10315    }
10316    if (element.hasMeasurementFrequency()) {
10317      composeQuantity(t, "DeviceMetric", "measurementFrequency", element.getMeasurementFrequency(), -1);
10318    }
10319    for (int i = 0; i < element.getCalibration().size(); i++) {
10320      composeDeviceMetricCalibrationComponent(t, "DeviceMetric", "calibration", element.getCalibration().get(i), i);
10321    }
10322  }
10323
10324  protected void composeDeviceMetricCalibrationComponent(Complex parent, String parentType, String name, DeviceMetric.DeviceMetricCalibrationComponent element, int index) {
10325    if (element == null) 
10326      return;
10327    Complex t;
10328    if (Utilities.noString(parentType))
10329      t = parent;
10330    else {
10331      t = parent.predicate("fhir:"+name,index > -1);
10332    }
10333    composeBackboneElement(t, "calibration", name, element, index);
10334    if (element.hasTypeElement()) {
10335      composeEnum(t, "DeviceMetricCalibrationComponent", "type", element.getTypeElement(), -1);
10336    }
10337    if (element.hasStateElement()) {
10338      composeEnum(t, "DeviceMetricCalibrationComponent", "state", element.getStateElement(), -1);
10339    }
10340    if (element.hasTimeElement()) {
10341      composeInstant(t, "DeviceMetricCalibrationComponent", "time", element.getTimeElement(), -1);
10342    }
10343  }
10344
10345  protected void composeDeviceRequest(Complex parent, String parentType, String name, DeviceRequest element, int index) {
10346    if (element == null) 
10347      return;
10348    Complex t;
10349    if (Utilities.noString(parentType))
10350      t = parent;
10351    else {
10352      t = parent.predicate("fhir:"+name,index > -1);
10353    }
10354    composeDomainResource(t, "DeviceRequest", name, element, index);
10355    for (int i = 0; i < element.getIdentifier().size(); i++) {
10356      composeIdentifier(t, "DeviceRequest", "identifier", element.getIdentifier().get(i), i);
10357    }
10358    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
10359      composeCanonical(t, "DeviceRequest", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
10360    }
10361    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
10362      composeUri(t, "DeviceRequest", "instantiatesUri", element.getInstantiatesUri().get(i), i);
10363    }
10364    for (int i = 0; i < element.getBasedOn().size(); i++) {
10365      composeReference(t, "DeviceRequest", "basedOn", element.getBasedOn().get(i), i);
10366    }
10367    for (int i = 0; i < element.getReplaces().size(); i++) {
10368      composeReference(t, "DeviceRequest", "replaces", element.getReplaces().get(i), i);
10369    }
10370    if (element.hasGroupIdentifier()) {
10371      composeIdentifier(t, "DeviceRequest", "groupIdentifier", element.getGroupIdentifier(), -1);
10372    }
10373    if (element.hasStatusElement()) {
10374      composeEnum(t, "DeviceRequest", "status", element.getStatusElement(), -1);
10375    }
10376    if (element.hasIntentElement()) {
10377      composeEnum(t, "DeviceRequest", "intent", element.getIntentElement(), -1);
10378    }
10379    if (element.hasPriorityElement()) {
10380      composeEnum(t, "DeviceRequest", "priority", element.getPriorityElement(), -1);
10381    }
10382    if (element.hasDoNotPerformElement()) {
10383      composeBoolean(t, "DeviceRequest", "doNotPerform", element.getDoNotPerformElement(), -1);
10384    }
10385    if (element.hasCode()) {
10386      composeCodeableReference(t, "DeviceRequest", "code", element.getCode(), -1);
10387    }
10388    if (element.hasQuantityElement()) {
10389      composeInteger(t, "DeviceRequest", "quantity", element.getQuantityElement(), -1);
10390    }
10391    for (int i = 0; i < element.getParameter().size(); i++) {
10392      composeDeviceRequestParameterComponent(t, "DeviceRequest", "parameter", element.getParameter().get(i), i);
10393    }
10394    if (element.hasSubject()) {
10395      composeReference(t, "DeviceRequest", "subject", element.getSubject(), -1);
10396    }
10397    if (element.hasEncounter()) {
10398      composeReference(t, "DeviceRequest", "encounter", element.getEncounter(), -1);
10399    }
10400    if (element.hasOccurrence()) {
10401      composeType(t, "DeviceRequest", "occurrence", element.getOccurrence(), -1);
10402    }
10403    if (element.hasAuthoredOnElement()) {
10404      composeDateTime(t, "DeviceRequest", "authoredOn", element.getAuthoredOnElement(), -1);
10405    }
10406    if (element.hasRequester()) {
10407      composeReference(t, "DeviceRequest", "requester", element.getRequester(), -1);
10408    }
10409    if (element.hasPerformer()) {
10410      composeCodeableReference(t, "DeviceRequest", "performer", element.getPerformer(), -1);
10411    }
10412    for (int i = 0; i < element.getReason().size(); i++) {
10413      composeCodeableReference(t, "DeviceRequest", "reason", element.getReason().get(i), i);
10414    }
10415    if (element.hasAsNeededElement()) {
10416      composeBoolean(t, "DeviceRequest", "asNeeded", element.getAsNeededElement(), -1);
10417    }
10418    if (element.hasAsNeededFor()) {
10419      composeCodeableConcept(t, "DeviceRequest", "asNeededFor", element.getAsNeededFor(), -1);
10420    }
10421    for (int i = 0; i < element.getInsurance().size(); i++) {
10422      composeReference(t, "DeviceRequest", "insurance", element.getInsurance().get(i), i);
10423    }
10424    for (int i = 0; i < element.getSupportingInfo().size(); i++) {
10425      composeReference(t, "DeviceRequest", "supportingInfo", element.getSupportingInfo().get(i), i);
10426    }
10427    for (int i = 0; i < element.getNote().size(); i++) {
10428      composeAnnotation(t, "DeviceRequest", "note", element.getNote().get(i), i);
10429    }
10430    for (int i = 0; i < element.getRelevantHistory().size(); i++) {
10431      composeReference(t, "DeviceRequest", "relevantHistory", element.getRelevantHistory().get(i), i);
10432    }
10433  }
10434
10435  protected void composeDeviceRequestParameterComponent(Complex parent, String parentType, String name, DeviceRequest.DeviceRequestParameterComponent element, int index) {
10436    if (element == null) 
10437      return;
10438    Complex t;
10439    if (Utilities.noString(parentType))
10440      t = parent;
10441    else {
10442      t = parent.predicate("fhir:"+name,index > -1);
10443    }
10444    composeBackboneElement(t, "parameter", name, element, index);
10445    if (element.hasCode()) {
10446      composeCodeableConcept(t, "DeviceRequestParameterComponent", "code", element.getCode(), -1);
10447    }
10448    if (element.hasValue()) {
10449      composeType(t, "DeviceRequestParameterComponent", "value", element.getValue(), -1);
10450    }
10451  }
10452
10453  protected void composeDeviceUsage(Complex parent, String parentType, String name, DeviceUsage element, int index) {
10454    if (element == null) 
10455      return;
10456    Complex t;
10457    if (Utilities.noString(parentType))
10458      t = parent;
10459    else {
10460      t = parent.predicate("fhir:"+name,index > -1);
10461    }
10462    composeDomainResource(t, "DeviceUsage", name, element, index);
10463    for (int i = 0; i < element.getIdentifier().size(); i++) {
10464      composeIdentifier(t, "DeviceUsage", "identifier", element.getIdentifier().get(i), i);
10465    }
10466    for (int i = 0; i < element.getBasedOn().size(); i++) {
10467      composeReference(t, "DeviceUsage", "basedOn", element.getBasedOn().get(i), i);
10468    }
10469    if (element.hasStatusElement()) {
10470      composeEnum(t, "DeviceUsage", "status", element.getStatusElement(), -1);
10471    }
10472    for (int i = 0; i < element.getCategory().size(); i++) {
10473      composeCodeableConcept(t, "DeviceUsage", "category", element.getCategory().get(i), i);
10474    }
10475    if (element.hasPatient()) {
10476      composeReference(t, "DeviceUsage", "patient", element.getPatient(), -1);
10477    }
10478    for (int i = 0; i < element.getDerivedFrom().size(); i++) {
10479      composeReference(t, "DeviceUsage", "derivedFrom", element.getDerivedFrom().get(i), i);
10480    }
10481    if (element.hasContext()) {
10482      composeReference(t, "DeviceUsage", "context", element.getContext(), -1);
10483    }
10484    if (element.hasTiming()) {
10485      composeType(t, "DeviceUsage", "timing", element.getTiming(), -1);
10486    }
10487    if (element.hasDateAssertedElement()) {
10488      composeDateTime(t, "DeviceUsage", "dateAsserted", element.getDateAssertedElement(), -1);
10489    }
10490    if (element.hasUsageStatus()) {
10491      composeCodeableConcept(t, "DeviceUsage", "usageStatus", element.getUsageStatus(), -1);
10492    }
10493    for (int i = 0; i < element.getUsageReason().size(); i++) {
10494      composeCodeableConcept(t, "DeviceUsage", "usageReason", element.getUsageReason().get(i), i);
10495    }
10496    if (element.hasAdherence()) {
10497      composeDeviceUsageAdherenceComponent(t, "DeviceUsage", "adherence", element.getAdherence(), -1);
10498    }
10499    if (element.hasInformationSource()) {
10500      composeReference(t, "DeviceUsage", "informationSource", element.getInformationSource(), -1);
10501    }
10502    if (element.hasDevice()) {
10503      composeCodeableReference(t, "DeviceUsage", "device", element.getDevice(), -1);
10504    }
10505    for (int i = 0; i < element.getReason().size(); i++) {
10506      composeCodeableReference(t, "DeviceUsage", "reason", element.getReason().get(i), i);
10507    }
10508    if (element.hasBodySite()) {
10509      composeCodeableReference(t, "DeviceUsage", "bodySite", element.getBodySite(), -1);
10510    }
10511    for (int i = 0; i < element.getNote().size(); i++) {
10512      composeAnnotation(t, "DeviceUsage", "note", element.getNote().get(i), i);
10513    }
10514  }
10515
10516  protected void composeDeviceUsageAdherenceComponent(Complex parent, String parentType, String name, DeviceUsage.DeviceUsageAdherenceComponent element, int index) {
10517    if (element == null) 
10518      return;
10519    Complex t;
10520    if (Utilities.noString(parentType))
10521      t = parent;
10522    else {
10523      t = parent.predicate("fhir:"+name,index > -1);
10524    }
10525    composeBackboneElement(t, "adherence", name, element, index);
10526    if (element.hasCode()) {
10527      composeCodeableConcept(t, "DeviceUsageAdherenceComponent", "code", element.getCode(), -1);
10528    }
10529    for (int i = 0; i < element.getReason().size(); i++) {
10530      composeCodeableConcept(t, "DeviceUsageAdherenceComponent", "reason", element.getReason().get(i), i);
10531    }
10532  }
10533
10534  protected void composeDiagnosticReport(Complex parent, String parentType, String name, DiagnosticReport element, int index) {
10535    if (element == null) 
10536      return;
10537    Complex t;
10538    if (Utilities.noString(parentType))
10539      t = parent;
10540    else {
10541      t = parent.predicate("fhir:"+name,index > -1);
10542    }
10543    composeDomainResource(t, "DiagnosticReport", name, element, index);
10544    for (int i = 0; i < element.getIdentifier().size(); i++) {
10545      composeIdentifier(t, "DiagnosticReport", "identifier", element.getIdentifier().get(i), i);
10546    }
10547    for (int i = 0; i < element.getBasedOn().size(); i++) {
10548      composeReference(t, "DiagnosticReport", "basedOn", element.getBasedOn().get(i), i);
10549    }
10550    if (element.hasStatusElement()) {
10551      composeEnum(t, "DiagnosticReport", "status", element.getStatusElement(), -1);
10552    }
10553    for (int i = 0; i < element.getCategory().size(); i++) {
10554      composeCodeableConcept(t, "DiagnosticReport", "category", element.getCategory().get(i), i);
10555    }
10556    if (element.hasCode()) {
10557      composeCodeableConcept(t, "DiagnosticReport", "code", element.getCode(), -1);
10558    }
10559    if (element.hasSubject()) {
10560      composeReference(t, "DiagnosticReport", "subject", element.getSubject(), -1);
10561    }
10562    if (element.hasEncounter()) {
10563      composeReference(t, "DiagnosticReport", "encounter", element.getEncounter(), -1);
10564    }
10565    if (element.hasEffective()) {
10566      composeType(t, "DiagnosticReport", "effective", element.getEffective(), -1);
10567    }
10568    if (element.hasIssuedElement()) {
10569      composeInstant(t, "DiagnosticReport", "issued", element.getIssuedElement(), -1);
10570    }
10571    for (int i = 0; i < element.getPerformer().size(); i++) {
10572      composeReference(t, "DiagnosticReport", "performer", element.getPerformer().get(i), i);
10573    }
10574    for (int i = 0; i < element.getResultsInterpreter().size(); i++) {
10575      composeReference(t, "DiagnosticReport", "resultsInterpreter", element.getResultsInterpreter().get(i), i);
10576    }
10577    for (int i = 0; i < element.getSpecimen().size(); i++) {
10578      composeReference(t, "DiagnosticReport", "specimen", element.getSpecimen().get(i), i);
10579    }
10580    for (int i = 0; i < element.getResult().size(); i++) {
10581      composeReference(t, "DiagnosticReport", "result", element.getResult().get(i), i);
10582    }
10583    for (int i = 0; i < element.getNote().size(); i++) {
10584      composeAnnotation(t, "DiagnosticReport", "note", element.getNote().get(i), i);
10585    }
10586    for (int i = 0; i < element.getStudy().size(); i++) {
10587      composeReference(t, "DiagnosticReport", "study", element.getStudy().get(i), i);
10588    }
10589    for (int i = 0; i < element.getSupportingInfo().size(); i++) {
10590      composeDiagnosticReportSupportingInfoComponent(t, "DiagnosticReport", "supportingInfo", element.getSupportingInfo().get(i), i);
10591    }
10592    for (int i = 0; i < element.getMedia().size(); i++) {
10593      composeDiagnosticReportMediaComponent(t, "DiagnosticReport", "media", element.getMedia().get(i), i);
10594    }
10595    if (element.hasComposition()) {
10596      composeReference(t, "DiagnosticReport", "composition", element.getComposition(), -1);
10597    }
10598    if (element.hasConclusionElement()) {
10599      composeMarkdown(t, "DiagnosticReport", "conclusion", element.getConclusionElement(), -1);
10600    }
10601    for (int i = 0; i < element.getConclusionCode().size(); i++) {
10602      composeCodeableConcept(t, "DiagnosticReport", "conclusionCode", element.getConclusionCode().get(i), i);
10603    }
10604    for (int i = 0; i < element.getPresentedForm().size(); i++) {
10605      composeAttachment(t, "DiagnosticReport", "presentedForm", element.getPresentedForm().get(i), i);
10606    }
10607  }
10608
10609  protected void composeDiagnosticReportSupportingInfoComponent(Complex parent, String parentType, String name, DiagnosticReport.DiagnosticReportSupportingInfoComponent element, int index) {
10610    if (element == null) 
10611      return;
10612    Complex t;
10613    if (Utilities.noString(parentType))
10614      t = parent;
10615    else {
10616      t = parent.predicate("fhir:"+name,index > -1);
10617    }
10618    composeBackboneElement(t, "supportingInfo", name, element, index);
10619    if (element.hasType()) {
10620      composeCodeableConcept(t, "DiagnosticReportSupportingInfoComponent", "type", element.getType(), -1);
10621    }
10622    if (element.hasReference()) {
10623      composeReference(t, "DiagnosticReportSupportingInfoComponent", "reference", element.getReference(), -1);
10624    }
10625  }
10626
10627  protected void composeDiagnosticReportMediaComponent(Complex parent, String parentType, String name, DiagnosticReport.DiagnosticReportMediaComponent element, int index) {
10628    if (element == null) 
10629      return;
10630    Complex t;
10631    if (Utilities.noString(parentType))
10632      t = parent;
10633    else {
10634      t = parent.predicate("fhir:"+name,index > -1);
10635    }
10636    composeBackboneElement(t, "media", name, element, index);
10637    if (element.hasCommentElement()) {
10638      composeString(t, "DiagnosticReportMediaComponent", "comment", element.getCommentElement(), -1);
10639    }
10640    if (element.hasLink()) {
10641      composeReference(t, "DiagnosticReportMediaComponent", "link", element.getLink(), -1);
10642    }
10643  }
10644
10645  protected void composeDocumentReference(Complex parent, String parentType, String name, DocumentReference element, int index) {
10646    if (element == null) 
10647      return;
10648    Complex t;
10649    if (Utilities.noString(parentType))
10650      t = parent;
10651    else {
10652      t = parent.predicate("fhir:"+name,index > -1);
10653    }
10654    composeDomainResource(t, "DocumentReference", name, element, index);
10655    for (int i = 0; i < element.getIdentifier().size(); i++) {
10656      composeIdentifier(t, "DocumentReference", "identifier", element.getIdentifier().get(i), i);
10657    }
10658    if (element.hasVersionElement()) {
10659      composeString(t, "DocumentReference", "version", element.getVersionElement(), -1);
10660    }
10661    for (int i = 0; i < element.getBasedOn().size(); i++) {
10662      composeReference(t, "DocumentReference", "basedOn", element.getBasedOn().get(i), i);
10663    }
10664    if (element.hasStatusElement()) {
10665      composeEnum(t, "DocumentReference", "status", element.getStatusElement(), -1);
10666    }
10667    if (element.hasDocStatusElement()) {
10668      composeEnum(t, "DocumentReference", "docStatus", element.getDocStatusElement(), -1);
10669    }
10670    for (int i = 0; i < element.getModality().size(); i++) {
10671      composeCodeableConcept(t, "DocumentReference", "modality", element.getModality().get(i), i);
10672    }
10673    if (element.hasType()) {
10674      composeCodeableConcept(t, "DocumentReference", "type", element.getType(), -1);
10675    }
10676    for (int i = 0; i < element.getCategory().size(); i++) {
10677      composeCodeableConcept(t, "DocumentReference", "category", element.getCategory().get(i), i);
10678    }
10679    if (element.hasSubject()) {
10680      composeReference(t, "DocumentReference", "subject", element.getSubject(), -1);
10681    }
10682    for (int i = 0; i < element.getContext().size(); i++) {
10683      composeReference(t, "DocumentReference", "context", element.getContext().get(i), i);
10684    }
10685    for (int i = 0; i < element.getEvent().size(); i++) {
10686      composeCodeableReference(t, "DocumentReference", "event", element.getEvent().get(i), i);
10687    }
10688    for (int i = 0; i < element.getBodySite().size(); i++) {
10689      composeCodeableReference(t, "DocumentReference", "bodySite", element.getBodySite().get(i), i);
10690    }
10691    if (element.hasFacilityType()) {
10692      composeCodeableConcept(t, "DocumentReference", "facilityType", element.getFacilityType(), -1);
10693    }
10694    if (element.hasPracticeSetting()) {
10695      composeCodeableConcept(t, "DocumentReference", "practiceSetting", element.getPracticeSetting(), -1);
10696    }
10697    if (element.hasPeriod()) {
10698      composePeriod(t, "DocumentReference", "period", element.getPeriod(), -1);
10699    }
10700    if (element.hasDateElement()) {
10701      composeInstant(t, "DocumentReference", "date", element.getDateElement(), -1);
10702    }
10703    for (int i = 0; i < element.getAuthor().size(); i++) {
10704      composeReference(t, "DocumentReference", "author", element.getAuthor().get(i), i);
10705    }
10706    for (int i = 0; i < element.getAttester().size(); i++) {
10707      composeDocumentReferenceAttesterComponent(t, "DocumentReference", "attester", element.getAttester().get(i), i);
10708    }
10709    if (element.hasCustodian()) {
10710      composeReference(t, "DocumentReference", "custodian", element.getCustodian(), -1);
10711    }
10712    for (int i = 0; i < element.getRelatesTo().size(); i++) {
10713      composeDocumentReferenceRelatesToComponent(t, "DocumentReference", "relatesTo", element.getRelatesTo().get(i), i);
10714    }
10715    if (element.hasDescriptionElement()) {
10716      composeMarkdown(t, "DocumentReference", "description", element.getDescriptionElement(), -1);
10717    }
10718    for (int i = 0; i < element.getSecurityLabel().size(); i++) {
10719      composeCodeableConcept(t, "DocumentReference", "securityLabel", element.getSecurityLabel().get(i), i);
10720    }
10721    for (int i = 0; i < element.getContent().size(); i++) {
10722      composeDocumentReferenceContentComponent(t, "DocumentReference", "content", element.getContent().get(i), i);
10723    }
10724  }
10725
10726  protected void composeDocumentReferenceAttesterComponent(Complex parent, String parentType, String name, DocumentReference.DocumentReferenceAttesterComponent element, int index) {
10727    if (element == null) 
10728      return;
10729    Complex t;
10730    if (Utilities.noString(parentType))
10731      t = parent;
10732    else {
10733      t = parent.predicate("fhir:"+name,index > -1);
10734    }
10735    composeBackboneElement(t, "attester", name, element, index);
10736    if (element.hasMode()) {
10737      composeCodeableConcept(t, "DocumentReferenceAttesterComponent", "mode", element.getMode(), -1);
10738    }
10739    if (element.hasTimeElement()) {
10740      composeDateTime(t, "DocumentReferenceAttesterComponent", "time", element.getTimeElement(), -1);
10741    }
10742    if (element.hasParty()) {
10743      composeReference(t, "DocumentReferenceAttesterComponent", "party", element.getParty(), -1);
10744    }
10745  }
10746
10747  protected void composeDocumentReferenceRelatesToComponent(Complex parent, String parentType, String name, DocumentReference.DocumentReferenceRelatesToComponent element, int index) {
10748    if (element == null) 
10749      return;
10750    Complex t;
10751    if (Utilities.noString(parentType))
10752      t = parent;
10753    else {
10754      t = parent.predicate("fhir:"+name,index > -1);
10755    }
10756    composeBackboneElement(t, "relatesTo", name, element, index);
10757    if (element.hasCode()) {
10758      composeCodeableConcept(t, "DocumentReferenceRelatesToComponent", "code", element.getCode(), -1);
10759    }
10760    if (element.hasTarget()) {
10761      composeReference(t, "DocumentReferenceRelatesToComponent", "target", element.getTarget(), -1);
10762    }
10763  }
10764
10765  protected void composeDocumentReferenceContentComponent(Complex parent, String parentType, String name, DocumentReference.DocumentReferenceContentComponent element, int index) {
10766    if (element == null) 
10767      return;
10768    Complex t;
10769    if (Utilities.noString(parentType))
10770      t = parent;
10771    else {
10772      t = parent.predicate("fhir:"+name,index > -1);
10773    }
10774    composeBackboneElement(t, "content", name, element, index);
10775    if (element.hasAttachment()) {
10776      composeAttachment(t, "DocumentReferenceContentComponent", "attachment", element.getAttachment(), -1);
10777    }
10778    for (int i = 0; i < element.getProfile().size(); i++) {
10779      composeDocumentReferenceContentProfileComponent(t, "DocumentReferenceContentComponent", "profile", element.getProfile().get(i), i);
10780    }
10781  }
10782
10783  protected void composeDocumentReferenceContentProfileComponent(Complex parent, String parentType, String name, DocumentReference.DocumentReferenceContentProfileComponent element, int index) {
10784    if (element == null) 
10785      return;
10786    Complex t;
10787    if (Utilities.noString(parentType))
10788      t = parent;
10789    else {
10790      t = parent.predicate("fhir:"+name,index > -1);
10791    }
10792    composeBackboneElement(t, "profile", name, element, index);
10793    if (element.hasValue()) {
10794      composeType(t, "DocumentReferenceContentProfileComponent", "value", element.getValue(), -1);
10795    }
10796  }
10797
10798  protected void composeEncounter(Complex parent, String parentType, String name, Encounter element, int index) {
10799    if (element == null) 
10800      return;
10801    Complex t;
10802    if (Utilities.noString(parentType))
10803      t = parent;
10804    else {
10805      t = parent.predicate("fhir:"+name,index > -1);
10806    }
10807    composeDomainResource(t, "Encounter", name, element, index);
10808    for (int i = 0; i < element.getIdentifier().size(); i++) {
10809      composeIdentifier(t, "Encounter", "identifier", element.getIdentifier().get(i), i);
10810    }
10811    if (element.hasStatusElement()) {
10812      composeEnum(t, "Encounter", "status", element.getStatusElement(), -1);
10813    }
10814    for (int i = 0; i < element.getClass_().size(); i++) {
10815      composeCodeableConcept(t, "Encounter", "class", element.getClass_().get(i), i);
10816    }
10817    if (element.hasPriority()) {
10818      composeCodeableConcept(t, "Encounter", "priority", element.getPriority(), -1);
10819    }
10820    for (int i = 0; i < element.getType().size(); i++) {
10821      composeCodeableConcept(t, "Encounter", "type", element.getType().get(i), i);
10822    }
10823    for (int i = 0; i < element.getServiceType().size(); i++) {
10824      composeCodeableReference(t, "Encounter", "serviceType", element.getServiceType().get(i), i);
10825    }
10826    if (element.hasSubject()) {
10827      composeReference(t, "Encounter", "subject", element.getSubject(), -1);
10828    }
10829    if (element.hasSubjectStatus()) {
10830      composeCodeableConcept(t, "Encounter", "subjectStatus", element.getSubjectStatus(), -1);
10831    }
10832    for (int i = 0; i < element.getEpisodeOfCare().size(); i++) {
10833      composeReference(t, "Encounter", "episodeOfCare", element.getEpisodeOfCare().get(i), i);
10834    }
10835    for (int i = 0; i < element.getBasedOn().size(); i++) {
10836      composeReference(t, "Encounter", "basedOn", element.getBasedOn().get(i), i);
10837    }
10838    for (int i = 0; i < element.getCareTeam().size(); i++) {
10839      composeReference(t, "Encounter", "careTeam", element.getCareTeam().get(i), i);
10840    }
10841    if (element.hasPartOf()) {
10842      composeReference(t, "Encounter", "partOf", element.getPartOf(), -1);
10843    }
10844    if (element.hasServiceProvider()) {
10845      composeReference(t, "Encounter", "serviceProvider", element.getServiceProvider(), -1);
10846    }
10847    for (int i = 0; i < element.getParticipant().size(); i++) {
10848      composeEncounterParticipantComponent(t, "Encounter", "participant", element.getParticipant().get(i), i);
10849    }
10850    for (int i = 0; i < element.getAppointment().size(); i++) {
10851      composeReference(t, "Encounter", "appointment", element.getAppointment().get(i), i);
10852    }
10853    for (int i = 0; i < element.getVirtualService().size(); i++) {
10854      composeVirtualServiceDetail(t, "Encounter", "virtualService", element.getVirtualService().get(i), i);
10855    }
10856    if (element.hasActualPeriod()) {
10857      composePeriod(t, "Encounter", "actualPeriod", element.getActualPeriod(), -1);
10858    }
10859    if (element.hasPlannedStartDateElement()) {
10860      composeDateTime(t, "Encounter", "plannedStartDate", element.getPlannedStartDateElement(), -1);
10861    }
10862    if (element.hasPlannedEndDateElement()) {
10863      composeDateTime(t, "Encounter", "plannedEndDate", element.getPlannedEndDateElement(), -1);
10864    }
10865    if (element.hasLength()) {
10866      composeDuration(t, "Encounter", "length", element.getLength(), -1);
10867    }
10868    for (int i = 0; i < element.getReason().size(); i++) {
10869      composeEncounterReasonComponent(t, "Encounter", "reason", element.getReason().get(i), i);
10870    }
10871    for (int i = 0; i < element.getDiagnosis().size(); i++) {
10872      composeEncounterDiagnosisComponent(t, "Encounter", "diagnosis", element.getDiagnosis().get(i), i);
10873    }
10874    for (int i = 0; i < element.getAccount().size(); i++) {
10875      composeReference(t, "Encounter", "account", element.getAccount().get(i), i);
10876    }
10877    for (int i = 0; i < element.getDietPreference().size(); i++) {
10878      composeCodeableConcept(t, "Encounter", "dietPreference", element.getDietPreference().get(i), i);
10879    }
10880    for (int i = 0; i < element.getSpecialArrangement().size(); i++) {
10881      composeCodeableConcept(t, "Encounter", "specialArrangement", element.getSpecialArrangement().get(i), i);
10882    }
10883    for (int i = 0; i < element.getSpecialCourtesy().size(); i++) {
10884      composeCodeableConcept(t, "Encounter", "specialCourtesy", element.getSpecialCourtesy().get(i), i);
10885    }
10886    if (element.hasAdmission()) {
10887      composeEncounterAdmissionComponent(t, "Encounter", "admission", element.getAdmission(), -1);
10888    }
10889    for (int i = 0; i < element.getLocation().size(); i++) {
10890      composeEncounterLocationComponent(t, "Encounter", "location", element.getLocation().get(i), i);
10891    }
10892  }
10893
10894  protected void composeEncounterParticipantComponent(Complex parent, String parentType, String name, Encounter.EncounterParticipantComponent element, int index) {
10895    if (element == null) 
10896      return;
10897    Complex t;
10898    if (Utilities.noString(parentType))
10899      t = parent;
10900    else {
10901      t = parent.predicate("fhir:"+name,index > -1);
10902    }
10903    composeBackboneElement(t, "participant", name, element, index);
10904    for (int i = 0; i < element.getType().size(); i++) {
10905      composeCodeableConcept(t, "EncounterParticipantComponent", "type", element.getType().get(i), i);
10906    }
10907    if (element.hasPeriod()) {
10908      composePeriod(t, "EncounterParticipantComponent", "period", element.getPeriod(), -1);
10909    }
10910    if (element.hasActor()) {
10911      composeReference(t, "EncounterParticipantComponent", "actor", element.getActor(), -1);
10912    }
10913  }
10914
10915  protected void composeEncounterReasonComponent(Complex parent, String parentType, String name, Encounter.ReasonComponent element, int index) {
10916    if (element == null) 
10917      return;
10918    Complex t;
10919    if (Utilities.noString(parentType))
10920      t = parent;
10921    else {
10922      t = parent.predicate("fhir:"+name,index > -1);
10923    }
10924    composeBackboneElement(t, "reason", name, element, index);
10925    for (int i = 0; i < element.getUse().size(); i++) {
10926      composeCodeableConcept(t, "ReasonComponent", "use", element.getUse().get(i), i);
10927    }
10928    for (int i = 0; i < element.getValue().size(); i++) {
10929      composeCodeableReference(t, "ReasonComponent", "value", element.getValue().get(i), i);
10930    }
10931  }
10932
10933  protected void composeEncounterDiagnosisComponent(Complex parent, String parentType, String name, Encounter.DiagnosisComponent element, int index) {
10934    if (element == null) 
10935      return;
10936    Complex t;
10937    if (Utilities.noString(parentType))
10938      t = parent;
10939    else {
10940      t = parent.predicate("fhir:"+name,index > -1);
10941    }
10942    composeBackboneElement(t, "diagnosis", name, element, index);
10943    for (int i = 0; i < element.getCondition().size(); i++) {
10944      composeCodeableReference(t, "DiagnosisComponent", "condition", element.getCondition().get(i), i);
10945    }
10946    for (int i = 0; i < element.getUse().size(); i++) {
10947      composeCodeableConcept(t, "DiagnosisComponent", "use", element.getUse().get(i), i);
10948    }
10949  }
10950
10951  protected void composeEncounterAdmissionComponent(Complex parent, String parentType, String name, Encounter.EncounterAdmissionComponent element, int index) {
10952    if (element == null) 
10953      return;
10954    Complex t;
10955    if (Utilities.noString(parentType))
10956      t = parent;
10957    else {
10958      t = parent.predicate("fhir:"+name,index > -1);
10959    }
10960    composeBackboneElement(t, "admission", name, element, index);
10961    if (element.hasPreAdmissionIdentifier()) {
10962      composeIdentifier(t, "EncounterAdmissionComponent", "preAdmissionIdentifier", element.getPreAdmissionIdentifier(), -1);
10963    }
10964    if (element.hasOrigin()) {
10965      composeReference(t, "EncounterAdmissionComponent", "origin", element.getOrigin(), -1);
10966    }
10967    if (element.hasAdmitSource()) {
10968      composeCodeableConcept(t, "EncounterAdmissionComponent", "admitSource", element.getAdmitSource(), -1);
10969    }
10970    if (element.hasReAdmission()) {
10971      composeCodeableConcept(t, "EncounterAdmissionComponent", "reAdmission", element.getReAdmission(), -1);
10972    }
10973    if (element.hasDestination()) {
10974      composeReference(t, "EncounterAdmissionComponent", "destination", element.getDestination(), -1);
10975    }
10976    if (element.hasDischargeDisposition()) {
10977      composeCodeableConcept(t, "EncounterAdmissionComponent", "dischargeDisposition", element.getDischargeDisposition(), -1);
10978    }
10979  }
10980
10981  protected void composeEncounterLocationComponent(Complex parent, String parentType, String name, Encounter.EncounterLocationComponent element, int index) {
10982    if (element == null) 
10983      return;
10984    Complex t;
10985    if (Utilities.noString(parentType))
10986      t = parent;
10987    else {
10988      t = parent.predicate("fhir:"+name,index > -1);
10989    }
10990    composeBackboneElement(t, "location", name, element, index);
10991    if (element.hasLocation()) {
10992      composeReference(t, "EncounterLocationComponent", "location", element.getLocation(), -1);
10993    }
10994    if (element.hasStatusElement()) {
10995      composeEnum(t, "EncounterLocationComponent", "status", element.getStatusElement(), -1);
10996    }
10997    if (element.hasForm()) {
10998      composeCodeableConcept(t, "EncounterLocationComponent", "form", element.getForm(), -1);
10999    }
11000    if (element.hasPeriod()) {
11001      composePeriod(t, "EncounterLocationComponent", "period", element.getPeriod(), -1);
11002    }
11003  }
11004
11005  protected void composeEncounterHistory(Complex parent, String parentType, String name, EncounterHistory element, int index) {
11006    if (element == null) 
11007      return;
11008    Complex t;
11009    if (Utilities.noString(parentType))
11010      t = parent;
11011    else {
11012      t = parent.predicate("fhir:"+name,index > -1);
11013    }
11014    composeDomainResource(t, "EncounterHistory", name, element, index);
11015    if (element.hasEncounter()) {
11016      composeReference(t, "EncounterHistory", "encounter", element.getEncounter(), -1);
11017    }
11018    for (int i = 0; i < element.getIdentifier().size(); i++) {
11019      composeIdentifier(t, "EncounterHistory", "identifier", element.getIdentifier().get(i), i);
11020    }
11021    if (element.hasStatusElement()) {
11022      composeEnum(t, "EncounterHistory", "status", element.getStatusElement(), -1);
11023    }
11024    if (element.hasClass_()) {
11025      composeCodeableConcept(t, "EncounterHistory", "class", element.getClass_(), -1);
11026    }
11027    for (int i = 0; i < element.getType().size(); i++) {
11028      composeCodeableConcept(t, "EncounterHistory", "type", element.getType().get(i), i);
11029    }
11030    for (int i = 0; i < element.getServiceType().size(); i++) {
11031      composeCodeableReference(t, "EncounterHistory", "serviceType", element.getServiceType().get(i), i);
11032    }
11033    if (element.hasSubject()) {
11034      composeReference(t, "EncounterHistory", "subject", element.getSubject(), -1);
11035    }
11036    if (element.hasSubjectStatus()) {
11037      composeCodeableConcept(t, "EncounterHistory", "subjectStatus", element.getSubjectStatus(), -1);
11038    }
11039    if (element.hasActualPeriod()) {
11040      composePeriod(t, "EncounterHistory", "actualPeriod", element.getActualPeriod(), -1);
11041    }
11042    if (element.hasPlannedStartDateElement()) {
11043      composeDateTime(t, "EncounterHistory", "plannedStartDate", element.getPlannedStartDateElement(), -1);
11044    }
11045    if (element.hasPlannedEndDateElement()) {
11046      composeDateTime(t, "EncounterHistory", "plannedEndDate", element.getPlannedEndDateElement(), -1);
11047    }
11048    if (element.hasLength()) {
11049      composeDuration(t, "EncounterHistory", "length", element.getLength(), -1);
11050    }
11051    for (int i = 0; i < element.getLocation().size(); i++) {
11052      composeEncounterHistoryLocationComponent(t, "EncounterHistory", "location", element.getLocation().get(i), i);
11053    }
11054  }
11055
11056  protected void composeEncounterHistoryLocationComponent(Complex parent, String parentType, String name, EncounterHistory.EncounterHistoryLocationComponent element, int index) {
11057    if (element == null) 
11058      return;
11059    Complex t;
11060    if (Utilities.noString(parentType))
11061      t = parent;
11062    else {
11063      t = parent.predicate("fhir:"+name,index > -1);
11064    }
11065    composeBackboneElement(t, "location", name, element, index);
11066    if (element.hasLocation()) {
11067      composeReference(t, "EncounterHistoryLocationComponent", "location", element.getLocation(), -1);
11068    }
11069    if (element.hasForm()) {
11070      composeCodeableConcept(t, "EncounterHistoryLocationComponent", "form", element.getForm(), -1);
11071    }
11072  }
11073
11074  protected void composeEndpoint(Complex parent, String parentType, String name, Endpoint element, int index) {
11075    if (element == null) 
11076      return;
11077    Complex t;
11078    if (Utilities.noString(parentType))
11079      t = parent;
11080    else {
11081      t = parent.predicate("fhir:"+name,index > -1);
11082    }
11083    composeDomainResource(t, "Endpoint", name, element, index);
11084    for (int i = 0; i < element.getIdentifier().size(); i++) {
11085      composeIdentifier(t, "Endpoint", "identifier", element.getIdentifier().get(i), i);
11086    }
11087    if (element.hasStatusElement()) {
11088      composeEnum(t, "Endpoint", "status", element.getStatusElement(), -1);
11089    }
11090    for (int i = 0; i < element.getConnectionType().size(); i++) {
11091      composeCodeableConcept(t, "Endpoint", "connectionType", element.getConnectionType().get(i), i);
11092    }
11093    if (element.hasNameElement()) {
11094      composeString(t, "Endpoint", "name", element.getNameElement(), -1);
11095    }
11096    if (element.hasDescriptionElement()) {
11097      composeString(t, "Endpoint", "description", element.getDescriptionElement(), -1);
11098    }
11099    for (int i = 0; i < element.getEnvironmentType().size(); i++) {
11100      composeCodeableConcept(t, "Endpoint", "environmentType", element.getEnvironmentType().get(i), i);
11101    }
11102    if (element.hasManagingOrganization()) {
11103      composeReference(t, "Endpoint", "managingOrganization", element.getManagingOrganization(), -1);
11104    }
11105    for (int i = 0; i < element.getContact().size(); i++) {
11106      composeContactPoint(t, "Endpoint", "contact", element.getContact().get(i), i);
11107    }
11108    if (element.hasPeriod()) {
11109      composePeriod(t, "Endpoint", "period", element.getPeriod(), -1);
11110    }
11111    for (int i = 0; i < element.getPayload().size(); i++) {
11112      composeEndpointPayloadComponent(t, "Endpoint", "payload", element.getPayload().get(i), i);
11113    }
11114    if (element.hasAddressElement()) {
11115      composeUrl(t, "Endpoint", "address", element.getAddressElement(), -1);
11116    }
11117    for (int i = 0; i < element.getHeader().size(); i++) {
11118      composeString(t, "Endpoint", "header", element.getHeader().get(i), i);
11119    }
11120  }
11121
11122  protected void composeEndpointPayloadComponent(Complex parent, String parentType, String name, Endpoint.EndpointPayloadComponent element, int index) {
11123    if (element == null) 
11124      return;
11125    Complex t;
11126    if (Utilities.noString(parentType))
11127      t = parent;
11128    else {
11129      t = parent.predicate("fhir:"+name,index > -1);
11130    }
11131    composeBackboneElement(t, "payload", name, element, index);
11132    for (int i = 0; i < element.getType().size(); i++) {
11133      composeCodeableConcept(t, "EndpointPayloadComponent", "type", element.getType().get(i), i);
11134    }
11135    for (int i = 0; i < element.getMimeType().size(); i++) {
11136      composeCode(t, "EndpointPayloadComponent", "mimeType", element.getMimeType().get(i), i);
11137    }
11138  }
11139
11140  protected void composeEnrollmentRequest(Complex parent, String parentType, String name, EnrollmentRequest element, int index) {
11141    if (element == null) 
11142      return;
11143    Complex t;
11144    if (Utilities.noString(parentType))
11145      t = parent;
11146    else {
11147      t = parent.predicate("fhir:"+name,index > -1);
11148    }
11149    composeDomainResource(t, "EnrollmentRequest", name, element, index);
11150    for (int i = 0; i < element.getIdentifier().size(); i++) {
11151      composeIdentifier(t, "EnrollmentRequest", "identifier", element.getIdentifier().get(i), i);
11152    }
11153    if (element.hasStatusElement()) {
11154      composeEnum(t, "EnrollmentRequest", "status", element.getStatusElement(), -1);
11155    }
11156    if (element.hasCreatedElement()) {
11157      composeDateTime(t, "EnrollmentRequest", "created", element.getCreatedElement(), -1);
11158    }
11159    if (element.hasInsurer()) {
11160      composeReference(t, "EnrollmentRequest", "insurer", element.getInsurer(), -1);
11161    }
11162    if (element.hasProvider()) {
11163      composeReference(t, "EnrollmentRequest", "provider", element.getProvider(), -1);
11164    }
11165    if (element.hasCandidate()) {
11166      composeReference(t, "EnrollmentRequest", "candidate", element.getCandidate(), -1);
11167    }
11168    if (element.hasCoverage()) {
11169      composeReference(t, "EnrollmentRequest", "coverage", element.getCoverage(), -1);
11170    }
11171  }
11172
11173  protected void composeEnrollmentResponse(Complex parent, String parentType, String name, EnrollmentResponse element, int index) {
11174    if (element == null) 
11175      return;
11176    Complex t;
11177    if (Utilities.noString(parentType))
11178      t = parent;
11179    else {
11180      t = parent.predicate("fhir:"+name,index > -1);
11181    }
11182    composeDomainResource(t, "EnrollmentResponse", name, element, index);
11183    for (int i = 0; i < element.getIdentifier().size(); i++) {
11184      composeIdentifier(t, "EnrollmentResponse", "identifier", element.getIdentifier().get(i), i);
11185    }
11186    if (element.hasStatusElement()) {
11187      composeEnum(t, "EnrollmentResponse", "status", element.getStatusElement(), -1);
11188    }
11189    if (element.hasRequest()) {
11190      composeReference(t, "EnrollmentResponse", "request", element.getRequest(), -1);
11191    }
11192    if (element.hasOutcomeElement()) {
11193      composeEnum(t, "EnrollmentResponse", "outcome", element.getOutcomeElement(), -1);
11194    }
11195    if (element.hasDispositionElement()) {
11196      composeString(t, "EnrollmentResponse", "disposition", element.getDispositionElement(), -1);
11197    }
11198    if (element.hasCreatedElement()) {
11199      composeDateTime(t, "EnrollmentResponse", "created", element.getCreatedElement(), -1);
11200    }
11201    if (element.hasOrganization()) {
11202      composeReference(t, "EnrollmentResponse", "organization", element.getOrganization(), -1);
11203    }
11204    if (element.hasRequestProvider()) {
11205      composeReference(t, "EnrollmentResponse", "requestProvider", element.getRequestProvider(), -1);
11206    }
11207  }
11208
11209  protected void composeEpisodeOfCare(Complex parent, String parentType, String name, EpisodeOfCare element, int index) {
11210    if (element == null) 
11211      return;
11212    Complex t;
11213    if (Utilities.noString(parentType))
11214      t = parent;
11215    else {
11216      t = parent.predicate("fhir:"+name,index > -1);
11217    }
11218    composeDomainResource(t, "EpisodeOfCare", name, element, index);
11219    for (int i = 0; i < element.getIdentifier().size(); i++) {
11220      composeIdentifier(t, "EpisodeOfCare", "identifier", element.getIdentifier().get(i), i);
11221    }
11222    if (element.hasStatusElement()) {
11223      composeEnum(t, "EpisodeOfCare", "status", element.getStatusElement(), -1);
11224    }
11225    for (int i = 0; i < element.getStatusHistory().size(); i++) {
11226      composeEpisodeOfCareStatusHistoryComponent(t, "EpisodeOfCare", "statusHistory", element.getStatusHistory().get(i), i);
11227    }
11228    for (int i = 0; i < element.getType().size(); i++) {
11229      composeCodeableConcept(t, "EpisodeOfCare", "type", element.getType().get(i), i);
11230    }
11231    for (int i = 0; i < element.getReason().size(); i++) {
11232      composeEpisodeOfCareReasonComponent(t, "EpisodeOfCare", "reason", element.getReason().get(i), i);
11233    }
11234    for (int i = 0; i < element.getDiagnosis().size(); i++) {
11235      composeEpisodeOfCareDiagnosisComponent(t, "EpisodeOfCare", "diagnosis", element.getDiagnosis().get(i), i);
11236    }
11237    if (element.hasPatient()) {
11238      composeReference(t, "EpisodeOfCare", "patient", element.getPatient(), -1);
11239    }
11240    if (element.hasManagingOrganization()) {
11241      composeReference(t, "EpisodeOfCare", "managingOrganization", element.getManagingOrganization(), -1);
11242    }
11243    if (element.hasPeriod()) {
11244      composePeriod(t, "EpisodeOfCare", "period", element.getPeriod(), -1);
11245    }
11246    for (int i = 0; i < element.getReferralRequest().size(); i++) {
11247      composeReference(t, "EpisodeOfCare", "referralRequest", element.getReferralRequest().get(i), i);
11248    }
11249    if (element.hasCareManager()) {
11250      composeReference(t, "EpisodeOfCare", "careManager", element.getCareManager(), -1);
11251    }
11252    for (int i = 0; i < element.getCareTeam().size(); i++) {
11253      composeReference(t, "EpisodeOfCare", "careTeam", element.getCareTeam().get(i), i);
11254    }
11255    for (int i = 0; i < element.getAccount().size(); i++) {
11256      composeReference(t, "EpisodeOfCare", "account", element.getAccount().get(i), i);
11257    }
11258  }
11259
11260  protected void composeEpisodeOfCareStatusHistoryComponent(Complex parent, String parentType, String name, EpisodeOfCare.EpisodeOfCareStatusHistoryComponent element, int index) {
11261    if (element == null) 
11262      return;
11263    Complex t;
11264    if (Utilities.noString(parentType))
11265      t = parent;
11266    else {
11267      t = parent.predicate("fhir:"+name,index > -1);
11268    }
11269    composeBackboneElement(t, "statusHistory", name, element, index);
11270    if (element.hasStatusElement()) {
11271      composeEnum(t, "EpisodeOfCareStatusHistoryComponent", "status", element.getStatusElement(), -1);
11272    }
11273    if (element.hasPeriod()) {
11274      composePeriod(t, "EpisodeOfCareStatusHistoryComponent", "period", element.getPeriod(), -1);
11275    }
11276  }
11277
11278  protected void composeEpisodeOfCareReasonComponent(Complex parent, String parentType, String name, EpisodeOfCare.ReasonComponent element, int index) {
11279    if (element == null) 
11280      return;
11281    Complex t;
11282    if (Utilities.noString(parentType))
11283      t = parent;
11284    else {
11285      t = parent.predicate("fhir:"+name,index > -1);
11286    }
11287    composeBackboneElement(t, "reason", name, element, index);
11288    if (element.hasUse()) {
11289      composeCodeableConcept(t, "ReasonComponent", "use", element.getUse(), -1);
11290    }
11291    for (int i = 0; i < element.getValue().size(); i++) {
11292      composeCodeableReference(t, "ReasonComponent", "value", element.getValue().get(i), i);
11293    }
11294  }
11295
11296  protected void composeEpisodeOfCareDiagnosisComponent(Complex parent, String parentType, String name, EpisodeOfCare.DiagnosisComponent element, int index) {
11297    if (element == null) 
11298      return;
11299    Complex t;
11300    if (Utilities.noString(parentType))
11301      t = parent;
11302    else {
11303      t = parent.predicate("fhir:"+name,index > -1);
11304    }
11305    composeBackboneElement(t, "diagnosis", name, element, index);
11306    for (int i = 0; i < element.getCondition().size(); i++) {
11307      composeCodeableReference(t, "DiagnosisComponent", "condition", element.getCondition().get(i), i);
11308    }
11309    if (element.hasUse()) {
11310      composeCodeableConcept(t, "DiagnosisComponent", "use", element.getUse(), -1);
11311    }
11312  }
11313
11314  protected void composeEventDefinition(Complex parent, String parentType, String name, EventDefinition 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:"+name,index > -1);
11322    }
11323    composeMetadataResource(t, "EventDefinition", name, element, index);
11324    if (element.hasUrlElement()) {
11325      composeUri(t, "EventDefinition", "url", element.getUrlElement(), -1);
11326    }
11327    for (int i = 0; i < element.getIdentifier().size(); i++) {
11328      composeIdentifier(t, "EventDefinition", "identifier", element.getIdentifier().get(i), i);
11329    }
11330    if (element.hasVersionElement()) {
11331      composeString(t, "EventDefinition", "version", element.getVersionElement(), -1);
11332    }
11333    if (element.hasVersionAlgorithm()) {
11334      composeType(t, "EventDefinition", "versionAlgorithm", element.getVersionAlgorithm(), -1);
11335    }
11336    if (element.hasNameElement()) {
11337      composeString(t, "EventDefinition", "name", element.getNameElement(), -1);
11338    }
11339    if (element.hasTitleElement()) {
11340      composeString(t, "EventDefinition", "title", element.getTitleElement(), -1);
11341    }
11342    if (element.hasSubtitleElement()) {
11343      composeString(t, "EventDefinition", "subtitle", element.getSubtitleElement(), -1);
11344    }
11345    if (element.hasStatusElement()) {
11346      composeEnum(t, "EventDefinition", "status", element.getStatusElement(), -1);
11347    }
11348    if (element.hasExperimentalElement()) {
11349      composeBoolean(t, "EventDefinition", "experimental", element.getExperimentalElement(), -1);
11350    }
11351    if (element.hasSubject()) {
11352      composeType(t, "EventDefinition", "subject", element.getSubject(), -1);
11353    }
11354    if (element.hasDateElement()) {
11355      composeDateTime(t, "EventDefinition", "date", element.getDateElement(), -1);
11356    }
11357    if (element.hasPublisherElement()) {
11358      composeString(t, "EventDefinition", "publisher", element.getPublisherElement(), -1);
11359    }
11360    for (int i = 0; i < element.getContact().size(); i++) {
11361      composeContactDetail(t, "EventDefinition", "contact", element.getContact().get(i), i);
11362    }
11363    if (element.hasDescriptionElement()) {
11364      composeMarkdown(t, "EventDefinition", "description", element.getDescriptionElement(), -1);
11365    }
11366    for (int i = 0; i < element.getUseContext().size(); i++) {
11367      composeUsageContext(t, "EventDefinition", "useContext", element.getUseContext().get(i), i);
11368    }
11369    for (int i = 0; i < element.getJurisdiction().size(); i++) {
11370      composeCodeableConcept(t, "EventDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
11371    }
11372    if (element.hasPurposeElement()) {
11373      composeMarkdown(t, "EventDefinition", "purpose", element.getPurposeElement(), -1);
11374    }
11375    if (element.hasUsageElement()) {
11376      composeMarkdown(t, "EventDefinition", "usage", element.getUsageElement(), -1);
11377    }
11378    if (element.hasCopyrightElement()) {
11379      composeMarkdown(t, "EventDefinition", "copyright", element.getCopyrightElement(), -1);
11380    }
11381    if (element.hasCopyrightLabelElement()) {
11382      composeString(t, "EventDefinition", "copyrightLabel", element.getCopyrightLabelElement(), -1);
11383    }
11384    if (element.hasApprovalDateElement()) {
11385      composeDate(t, "EventDefinition", "approvalDate", element.getApprovalDateElement(), -1);
11386    }
11387    if (element.hasLastReviewDateElement()) {
11388      composeDate(t, "EventDefinition", "lastReviewDate", element.getLastReviewDateElement(), -1);
11389    }
11390    if (element.hasEffectivePeriod()) {
11391      composePeriod(t, "EventDefinition", "effectivePeriod", element.getEffectivePeriod(), -1);
11392    }
11393    for (int i = 0; i < element.getTopic().size(); i++) {
11394      composeCodeableConcept(t, "EventDefinition", "topic", element.getTopic().get(i), i);
11395    }
11396    for (int i = 0; i < element.getAuthor().size(); i++) {
11397      composeContactDetail(t, "EventDefinition", "author", element.getAuthor().get(i), i);
11398    }
11399    for (int i = 0; i < element.getEditor().size(); i++) {
11400      composeContactDetail(t, "EventDefinition", "editor", element.getEditor().get(i), i);
11401    }
11402    for (int i = 0; i < element.getReviewer().size(); i++) {
11403      composeContactDetail(t, "EventDefinition", "reviewer", element.getReviewer().get(i), i);
11404    }
11405    for (int i = 0; i < element.getEndorser().size(); i++) {
11406      composeContactDetail(t, "EventDefinition", "endorser", element.getEndorser().get(i), i);
11407    }
11408    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
11409      composeRelatedArtifact(t, "EventDefinition", "relatedArtifact", element.getRelatedArtifact().get(i), i);
11410    }
11411    for (int i = 0; i < element.getTrigger().size(); i++) {
11412      composeTriggerDefinition(t, "EventDefinition", "trigger", element.getTrigger().get(i), i);
11413    }
11414  }
11415
11416  protected void composeEvidence(Complex parent, String parentType, String name, Evidence element, int index) {
11417    if (element == null) 
11418      return;
11419    Complex t;
11420    if (Utilities.noString(parentType))
11421      t = parent;
11422    else {
11423      t = parent.predicate("fhir:"+name,index > -1);
11424    }
11425    composeMetadataResource(t, "Evidence", name, element, index);
11426    if (element.hasUrlElement()) {
11427      composeUri(t, "Evidence", "url", element.getUrlElement(), -1);
11428    }
11429    for (int i = 0; i < element.getIdentifier().size(); i++) {
11430      composeIdentifier(t, "Evidence", "identifier", element.getIdentifier().get(i), i);
11431    }
11432    if (element.hasVersionElement()) {
11433      composeString(t, "Evidence", "version", element.getVersionElement(), -1);
11434    }
11435    if (element.hasVersionAlgorithm()) {
11436      composeType(t, "Evidence", "versionAlgorithm", element.getVersionAlgorithm(), -1);
11437    }
11438    if (element.hasNameElement()) {
11439      composeString(t, "Evidence", "name", element.getNameElement(), -1);
11440    }
11441    if (element.hasTitleElement()) {
11442      composeString(t, "Evidence", "title", element.getTitleElement(), -1);
11443    }
11444    if (element.hasCiteAs()) {
11445      composeType(t, "Evidence", "citeAs", element.getCiteAs(), -1);
11446    }
11447    if (element.hasStatusElement()) {
11448      composeEnum(t, "Evidence", "status", element.getStatusElement(), -1);
11449    }
11450    if (element.hasExperimentalElement()) {
11451      composeBoolean(t, "Evidence", "experimental", element.getExperimentalElement(), -1);
11452    }
11453    if (element.hasDateElement()) {
11454      composeDateTime(t, "Evidence", "date", element.getDateElement(), -1);
11455    }
11456    if (element.hasApprovalDateElement()) {
11457      composeDate(t, "Evidence", "approvalDate", element.getApprovalDateElement(), -1);
11458    }
11459    if (element.hasLastReviewDateElement()) {
11460      composeDate(t, "Evidence", "lastReviewDate", element.getLastReviewDateElement(), -1);
11461    }
11462    if (element.hasPublisherElement()) {
11463      composeString(t, "Evidence", "publisher", element.getPublisherElement(), -1);
11464    }
11465    for (int i = 0; i < element.getContact().size(); i++) {
11466      composeContactDetail(t, "Evidence", "contact", element.getContact().get(i), i);
11467    }
11468    for (int i = 0; i < element.getAuthor().size(); i++) {
11469      composeContactDetail(t, "Evidence", "author", element.getAuthor().get(i), i);
11470    }
11471    for (int i = 0; i < element.getEditor().size(); i++) {
11472      composeContactDetail(t, "Evidence", "editor", element.getEditor().get(i), i);
11473    }
11474    for (int i = 0; i < element.getReviewer().size(); i++) {
11475      composeContactDetail(t, "Evidence", "reviewer", element.getReviewer().get(i), i);
11476    }
11477    for (int i = 0; i < element.getEndorser().size(); i++) {
11478      composeContactDetail(t, "Evidence", "endorser", element.getEndorser().get(i), i);
11479    }
11480    for (int i = 0; i < element.getUseContext().size(); i++) {
11481      composeUsageContext(t, "Evidence", "useContext", element.getUseContext().get(i), i);
11482    }
11483    if (element.hasPurposeElement()) {
11484      composeMarkdown(t, "Evidence", "purpose", element.getPurposeElement(), -1);
11485    }
11486    if (element.hasCopyrightElement()) {
11487      composeMarkdown(t, "Evidence", "copyright", element.getCopyrightElement(), -1);
11488    }
11489    if (element.hasCopyrightLabelElement()) {
11490      composeString(t, "Evidence", "copyrightLabel", element.getCopyrightLabelElement(), -1);
11491    }
11492    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
11493      composeRelatedArtifact(t, "Evidence", "relatedArtifact", element.getRelatedArtifact().get(i), i);
11494    }
11495    if (element.hasDescriptionElement()) {
11496      composeMarkdown(t, "Evidence", "description", element.getDescriptionElement(), -1);
11497    }
11498    if (element.hasAssertionElement()) {
11499      composeMarkdown(t, "Evidence", "assertion", element.getAssertionElement(), -1);
11500    }
11501    for (int i = 0; i < element.getNote().size(); i++) {
11502      composeAnnotation(t, "Evidence", "note", element.getNote().get(i), i);
11503    }
11504    for (int i = 0; i < element.getVariableDefinition().size(); i++) {
11505      composeEvidenceVariableDefinitionComponent(t, "Evidence", "variableDefinition", element.getVariableDefinition().get(i), i);
11506    }
11507    if (element.hasSynthesisType()) {
11508      composeCodeableConcept(t, "Evidence", "synthesisType", element.getSynthesisType(), -1);
11509    }
11510    for (int i = 0; i < element.getStudyDesign().size(); i++) {
11511      composeCodeableConcept(t, "Evidence", "studyDesign", element.getStudyDesign().get(i), i);
11512    }
11513    for (int i = 0; i < element.getStatistic().size(); i++) {
11514      composeEvidenceStatisticComponent(t, "Evidence", "statistic", element.getStatistic().get(i), i);
11515    }
11516    for (int i = 0; i < element.getCertainty().size(); i++) {
11517      composeEvidenceCertaintyComponent(t, "Evidence", "certainty", element.getCertainty().get(i), i);
11518    }
11519  }
11520
11521  protected void composeEvidenceVariableDefinitionComponent(Complex parent, String parentType, String name, Evidence.EvidenceVariableDefinitionComponent element, int index) {
11522    if (element == null) 
11523      return;
11524    Complex t;
11525    if (Utilities.noString(parentType))
11526      t = parent;
11527    else {
11528      t = parent.predicate("fhir:"+name,index > -1);
11529    }
11530    composeBackboneElement(t, "variableDefinition", name, element, index);
11531    if (element.hasDescriptionElement()) {
11532      composeMarkdown(t, "EvidenceVariableDefinitionComponent", "description", element.getDescriptionElement(), -1);
11533    }
11534    for (int i = 0; i < element.getNote().size(); i++) {
11535      composeAnnotation(t, "EvidenceVariableDefinitionComponent", "note", element.getNote().get(i), i);
11536    }
11537    if (element.hasVariableRole()) {
11538      composeCodeableConcept(t, "EvidenceVariableDefinitionComponent", "variableRole", element.getVariableRole(), -1);
11539    }
11540    if (element.hasObserved()) {
11541      composeReference(t, "EvidenceVariableDefinitionComponent", "observed", element.getObserved(), -1);
11542    }
11543    if (element.hasIntended()) {
11544      composeReference(t, "EvidenceVariableDefinitionComponent", "intended", element.getIntended(), -1);
11545    }
11546    if (element.hasDirectnessMatch()) {
11547      composeCodeableConcept(t, "EvidenceVariableDefinitionComponent", "directnessMatch", element.getDirectnessMatch(), -1);
11548    }
11549  }
11550
11551  protected void composeEvidenceStatisticComponent(Complex parent, String parentType, String name, Evidence.EvidenceStatisticComponent element, int index) {
11552    if (element == null) 
11553      return;
11554    Complex t;
11555    if (Utilities.noString(parentType))
11556      t = parent;
11557    else {
11558      t = parent.predicate("fhir:"+name,index > -1);
11559    }
11560    composeBackboneElement(t, "statistic", name, element, index);
11561    if (element.hasDescriptionElement()) {
11562      composeMarkdown(t, "EvidenceStatisticComponent", "description", element.getDescriptionElement(), -1);
11563    }
11564    for (int i = 0; i < element.getNote().size(); i++) {
11565      composeAnnotation(t, "EvidenceStatisticComponent", "note", element.getNote().get(i), i);
11566    }
11567    if (element.hasStatisticType()) {
11568      composeCodeableConcept(t, "EvidenceStatisticComponent", "statisticType", element.getStatisticType(), -1);
11569    }
11570    if (element.hasCategory()) {
11571      composeCodeableConcept(t, "EvidenceStatisticComponent", "category", element.getCategory(), -1);
11572    }
11573    if (element.hasQuantity()) {
11574      composeQuantity(t, "EvidenceStatisticComponent", "quantity", element.getQuantity(), -1);
11575    }
11576    if (element.hasNumberOfEventsElement()) {
11577      composeUnsignedInt(t, "EvidenceStatisticComponent", "numberOfEvents", element.getNumberOfEventsElement(), -1);
11578    }
11579    if (element.hasNumberAffectedElement()) {
11580      composeUnsignedInt(t, "EvidenceStatisticComponent", "numberAffected", element.getNumberAffectedElement(), -1);
11581    }
11582    if (element.hasSampleSize()) {
11583      composeEvidenceStatisticSampleSizeComponent(t, "EvidenceStatisticComponent", "sampleSize", element.getSampleSize(), -1);
11584    }
11585    for (int i = 0; i < element.getAttributeEstimate().size(); i++) {
11586      composeEvidenceStatisticAttributeEstimateComponent(t, "EvidenceStatisticComponent", "attributeEstimate", element.getAttributeEstimate().get(i), i);
11587    }
11588    for (int i = 0; i < element.getModelCharacteristic().size(); i++) {
11589      composeEvidenceStatisticModelCharacteristicComponent(t, "EvidenceStatisticComponent", "modelCharacteristic", element.getModelCharacteristic().get(i), i);
11590    }
11591  }
11592
11593  protected void composeEvidenceStatisticSampleSizeComponent(Complex parent, String parentType, String name, Evidence.EvidenceStatisticSampleSizeComponent element, int index) {
11594    if (element == null) 
11595      return;
11596    Complex t;
11597    if (Utilities.noString(parentType))
11598      t = parent;
11599    else {
11600      t = parent.predicate("fhir:"+name,index > -1);
11601    }
11602    composeBackboneElement(t, "sampleSize", name, element, index);
11603    if (element.hasDescriptionElement()) {
11604      composeMarkdown(t, "EvidenceStatisticSampleSizeComponent", "description", element.getDescriptionElement(), -1);
11605    }
11606    for (int i = 0; i < element.getNote().size(); i++) {
11607      composeAnnotation(t, "EvidenceStatisticSampleSizeComponent", "note", element.getNote().get(i), i);
11608    }
11609    if (element.hasNumberOfStudiesElement()) {
11610      composeUnsignedInt(t, "EvidenceStatisticSampleSizeComponent", "numberOfStudies", element.getNumberOfStudiesElement(), -1);
11611    }
11612    if (element.hasNumberOfParticipantsElement()) {
11613      composeUnsignedInt(t, "EvidenceStatisticSampleSizeComponent", "numberOfParticipants", element.getNumberOfParticipantsElement(), -1);
11614    }
11615    if (element.hasKnownDataCountElement()) {
11616      composeUnsignedInt(t, "EvidenceStatisticSampleSizeComponent", "knownDataCount", element.getKnownDataCountElement(), -1);
11617    }
11618  }
11619
11620  protected void composeEvidenceStatisticAttributeEstimateComponent(Complex parent, String parentType, String name, Evidence.EvidenceStatisticAttributeEstimateComponent element, int index) {
11621    if (element == null) 
11622      return;
11623    Complex t;
11624    if (Utilities.noString(parentType))
11625      t = parent;
11626    else {
11627      t = parent.predicate("fhir:"+name,index > -1);
11628    }
11629    composeBackboneElement(t, "attributeEstimate", name, element, index);
11630    if (element.hasDescriptionElement()) {
11631      composeMarkdown(t, "EvidenceStatisticAttributeEstimateComponent", "description", element.getDescriptionElement(), -1);
11632    }
11633    for (int i = 0; i < element.getNote().size(); i++) {
11634      composeAnnotation(t, "EvidenceStatisticAttributeEstimateComponent", "note", element.getNote().get(i), i);
11635    }
11636    if (element.hasType()) {
11637      composeCodeableConcept(t, "EvidenceStatisticAttributeEstimateComponent", "type", element.getType(), -1);
11638    }
11639    if (element.hasQuantity()) {
11640      composeQuantity(t, "EvidenceStatisticAttributeEstimateComponent", "quantity", element.getQuantity(), -1);
11641    }
11642    if (element.hasLevelElement()) {
11643      composeDecimal(t, "EvidenceStatisticAttributeEstimateComponent", "level", element.getLevelElement(), -1);
11644    }
11645    if (element.hasRange()) {
11646      composeRange(t, "EvidenceStatisticAttributeEstimateComponent", "range", element.getRange(), -1);
11647    }
11648    for (int i = 0; i < element.getAttributeEstimate().size(); i++) {
11649      composeEvidenceStatisticAttributeEstimateComponent(t, "EvidenceStatisticAttributeEstimateComponent", "attributeEstimate", element.getAttributeEstimate().get(i), i);
11650    }
11651  }
11652
11653  protected void composeEvidenceStatisticModelCharacteristicComponent(Complex parent, String parentType, String name, Evidence.EvidenceStatisticModelCharacteristicComponent element, int index) {
11654    if (element == null) 
11655      return;
11656    Complex t;
11657    if (Utilities.noString(parentType))
11658      t = parent;
11659    else {
11660      t = parent.predicate("fhir:"+name,index > -1);
11661    }
11662    composeBackboneElement(t, "modelCharacteristic", name, element, index);
11663    if (element.hasCode()) {
11664      composeCodeableConcept(t, "EvidenceStatisticModelCharacteristicComponent", "code", element.getCode(), -1);
11665    }
11666    if (element.hasValue()) {
11667      composeQuantity(t, "EvidenceStatisticModelCharacteristicComponent", "value", element.getValue(), -1);
11668    }
11669    for (int i = 0; i < element.getVariable().size(); i++) {
11670      composeEvidenceStatisticModelCharacteristicVariableComponent(t, "EvidenceStatisticModelCharacteristicComponent", "variable", element.getVariable().get(i), i);
11671    }
11672    for (int i = 0; i < element.getAttributeEstimate().size(); i++) {
11673      composeEvidenceStatisticAttributeEstimateComponent(t, "EvidenceStatisticModelCharacteristicComponent", "attributeEstimate", element.getAttributeEstimate().get(i), i);
11674    }
11675  }
11676
11677  protected void composeEvidenceStatisticModelCharacteristicVariableComponent(Complex parent, String parentType, String name, Evidence.EvidenceStatisticModelCharacteristicVariableComponent element, int index) {
11678    if (element == null) 
11679      return;
11680    Complex t;
11681    if (Utilities.noString(parentType))
11682      t = parent;
11683    else {
11684      t = parent.predicate("fhir:"+name,index > -1);
11685    }
11686    composeBackboneElement(t, "variable", name, element, index);
11687    if (element.hasVariableDefinition()) {
11688      composeReference(t, "EvidenceStatisticModelCharacteristicVariableComponent", "variableDefinition", element.getVariableDefinition(), -1);
11689    }
11690    if (element.hasHandlingElement()) {
11691      composeEnum(t, "EvidenceStatisticModelCharacteristicVariableComponent", "handling", element.getHandlingElement(), -1);
11692    }
11693    for (int i = 0; i < element.getValueCategory().size(); i++) {
11694      composeCodeableConcept(t, "EvidenceStatisticModelCharacteristicVariableComponent", "valueCategory", element.getValueCategory().get(i), i);
11695    }
11696    for (int i = 0; i < element.getValueQuantity().size(); i++) {
11697      composeQuantity(t, "EvidenceStatisticModelCharacteristicVariableComponent", "valueQuantity", element.getValueQuantity().get(i), i);
11698    }
11699    for (int i = 0; i < element.getValueRange().size(); i++) {
11700      composeRange(t, "EvidenceStatisticModelCharacteristicVariableComponent", "valueRange", element.getValueRange().get(i), i);
11701    }
11702  }
11703
11704  protected void composeEvidenceCertaintyComponent(Complex parent, String parentType, String name, Evidence.EvidenceCertaintyComponent element, int index) {
11705    if (element == null) 
11706      return;
11707    Complex t;
11708    if (Utilities.noString(parentType))
11709      t = parent;
11710    else {
11711      t = parent.predicate("fhir:"+name,index > -1);
11712    }
11713    composeBackboneElement(t, "certainty", name, element, index);
11714    if (element.hasDescriptionElement()) {
11715      composeMarkdown(t, "EvidenceCertaintyComponent", "description", element.getDescriptionElement(), -1);
11716    }
11717    for (int i = 0; i < element.getNote().size(); i++) {
11718      composeAnnotation(t, "EvidenceCertaintyComponent", "note", element.getNote().get(i), i);
11719    }
11720    if (element.hasType()) {
11721      composeCodeableConcept(t, "EvidenceCertaintyComponent", "type", element.getType(), -1);
11722    }
11723    if (element.hasRating()) {
11724      composeCodeableConcept(t, "EvidenceCertaintyComponent", "rating", element.getRating(), -1);
11725    }
11726    if (element.hasRaterElement()) {
11727      composeString(t, "EvidenceCertaintyComponent", "rater", element.getRaterElement(), -1);
11728    }
11729    for (int i = 0; i < element.getSubcomponent().size(); i++) {
11730      composeEvidenceCertaintyComponent(t, "EvidenceCertaintyComponent", "subcomponent", element.getSubcomponent().get(i), i);
11731    }
11732  }
11733
11734  protected void composeEvidenceReport(Complex parent, String parentType, String name, EvidenceReport 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:"+name,index > -1);
11742    }
11743    composeMetadataResource(t, "EvidenceReport", name, element, index);
11744    if (element.hasUrlElement()) {
11745      composeUri(t, "EvidenceReport", "url", element.getUrlElement(), -1);
11746    }
11747    if (element.hasStatusElement()) {
11748      composeEnum(t, "EvidenceReport", "status", element.getStatusElement(), -1);
11749    }
11750    for (int i = 0; i < element.getUseContext().size(); i++) {
11751      composeUsageContext(t, "EvidenceReport", "useContext", element.getUseContext().get(i), i);
11752    }
11753    for (int i = 0; i < element.getIdentifier().size(); i++) {
11754      composeIdentifier(t, "EvidenceReport", "identifier", element.getIdentifier().get(i), i);
11755    }
11756    for (int i = 0; i < element.getRelatedIdentifier().size(); i++) {
11757      composeIdentifier(t, "EvidenceReport", "relatedIdentifier", element.getRelatedIdentifier().get(i), i);
11758    }
11759    if (element.hasCiteAs()) {
11760      composeType(t, "EvidenceReport", "citeAs", element.getCiteAs(), -1);
11761    }
11762    if (element.hasType()) {
11763      composeCodeableConcept(t, "EvidenceReport", "type", element.getType(), -1);
11764    }
11765    for (int i = 0; i < element.getNote().size(); i++) {
11766      composeAnnotation(t, "EvidenceReport", "note", element.getNote().get(i), i);
11767    }
11768    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
11769      composeRelatedArtifact(t, "EvidenceReport", "relatedArtifact", element.getRelatedArtifact().get(i), i);
11770    }
11771    if (element.hasSubject()) {
11772      composeEvidenceReportSubjectComponent(t, "EvidenceReport", "subject", element.getSubject(), -1);
11773    }
11774    if (element.hasPublisherElement()) {
11775      composeString(t, "EvidenceReport", "publisher", element.getPublisherElement(), -1);
11776    }
11777    for (int i = 0; i < element.getContact().size(); i++) {
11778      composeContactDetail(t, "EvidenceReport", "contact", element.getContact().get(i), i);
11779    }
11780    for (int i = 0; i < element.getAuthor().size(); i++) {
11781      composeContactDetail(t, "EvidenceReport", "author", element.getAuthor().get(i), i);
11782    }
11783    for (int i = 0; i < element.getEditor().size(); i++) {
11784      composeContactDetail(t, "EvidenceReport", "editor", element.getEditor().get(i), i);
11785    }
11786    for (int i = 0; i < element.getReviewer().size(); i++) {
11787      composeContactDetail(t, "EvidenceReport", "reviewer", element.getReviewer().get(i), i);
11788    }
11789    for (int i = 0; i < element.getEndorser().size(); i++) {
11790      composeContactDetail(t, "EvidenceReport", "endorser", element.getEndorser().get(i), i);
11791    }
11792    for (int i = 0; i < element.getRelatesTo().size(); i++) {
11793      composeEvidenceReportRelatesToComponent(t, "EvidenceReport", "relatesTo", element.getRelatesTo().get(i), i);
11794    }
11795    for (int i = 0; i < element.getSection().size(); i++) {
11796      composeEvidenceReportSectionComponent(t, "EvidenceReport", "section", element.getSection().get(i), i);
11797    }
11798  }
11799
11800  protected void composeEvidenceReportSubjectComponent(Complex parent, String parentType, String name, EvidenceReport.EvidenceReportSubjectComponent element, int index) {
11801    if (element == null) 
11802      return;
11803    Complex t;
11804    if (Utilities.noString(parentType))
11805      t = parent;
11806    else {
11807      t = parent.predicate("fhir:"+name,index > -1);
11808    }
11809    composeBackboneElement(t, "subject", name, element, index);
11810    for (int i = 0; i < element.getCharacteristic().size(); i++) {
11811      composeEvidenceReportSubjectCharacteristicComponent(t, "EvidenceReportSubjectComponent", "characteristic", element.getCharacteristic().get(i), i);
11812    }
11813    for (int i = 0; i < element.getNote().size(); i++) {
11814      composeAnnotation(t, "EvidenceReportSubjectComponent", "note", element.getNote().get(i), i);
11815    }
11816  }
11817
11818  protected void composeEvidenceReportSubjectCharacteristicComponent(Complex parent, String parentType, String name, EvidenceReport.EvidenceReportSubjectCharacteristicComponent element, int index) {
11819    if (element == null) 
11820      return;
11821    Complex t;
11822    if (Utilities.noString(parentType))
11823      t = parent;
11824    else {
11825      t = parent.predicate("fhir:"+name,index > -1);
11826    }
11827    composeBackboneElement(t, "characteristic", name, element, index);
11828    if (element.hasCode()) {
11829      composeCodeableConcept(t, "EvidenceReportSubjectCharacteristicComponent", "code", element.getCode(), -1);
11830    }
11831    if (element.hasValue()) {
11832      composeType(t, "EvidenceReportSubjectCharacteristicComponent", "value", element.getValue(), -1);
11833    }
11834    if (element.hasExcludeElement()) {
11835      composeBoolean(t, "EvidenceReportSubjectCharacteristicComponent", "exclude", element.getExcludeElement(), -1);
11836    }
11837    if (element.hasPeriod()) {
11838      composePeriod(t, "EvidenceReportSubjectCharacteristicComponent", "period", element.getPeriod(), -1);
11839    }
11840  }
11841
11842  protected void composeEvidenceReportRelatesToComponent(Complex parent, String parentType, String name, EvidenceReport.EvidenceReportRelatesToComponent element, int index) {
11843    if (element == null) 
11844      return;
11845    Complex t;
11846    if (Utilities.noString(parentType))
11847      t = parent;
11848    else {
11849      t = parent.predicate("fhir:"+name,index > -1);
11850    }
11851    composeBackboneElement(t, "relatesTo", name, element, index);
11852    if (element.hasCodeElement()) {
11853      composeEnum(t, "EvidenceReportRelatesToComponent", "code", element.getCodeElement(), -1);
11854    }
11855    if (element.hasTarget()) {
11856      composeEvidenceReportRelatesToTargetComponent(t, "EvidenceReportRelatesToComponent", "target", element.getTarget(), -1);
11857    }
11858  }
11859
11860  protected void composeEvidenceReportRelatesToTargetComponent(Complex parent, String parentType, String name, EvidenceReport.EvidenceReportRelatesToTargetComponent element, int index) {
11861    if (element == null) 
11862      return;
11863    Complex t;
11864    if (Utilities.noString(parentType))
11865      t = parent;
11866    else {
11867      t = parent.predicate("fhir:"+name,index > -1);
11868    }
11869    composeBackboneElement(t, "target", name, element, index);
11870    if (element.hasUrlElement()) {
11871      composeUri(t, "EvidenceReportRelatesToTargetComponent", "url", element.getUrlElement(), -1);
11872    }
11873    if (element.hasIdentifier()) {
11874      composeIdentifier(t, "EvidenceReportRelatesToTargetComponent", "identifier", element.getIdentifier(), -1);
11875    }
11876    if (element.hasDisplayElement()) {
11877      composeMarkdown(t, "EvidenceReportRelatesToTargetComponent", "display", element.getDisplayElement(), -1);
11878    }
11879    if (element.hasResource()) {
11880      composeReference(t, "EvidenceReportRelatesToTargetComponent", "resource", element.getResource(), -1);
11881    }
11882  }
11883
11884  protected void composeEvidenceReportSectionComponent(Complex parent, String parentType, String name, EvidenceReport.SectionComponent element, int index) {
11885    if (element == null) 
11886      return;
11887    Complex t;
11888    if (Utilities.noString(parentType))
11889      t = parent;
11890    else {
11891      t = parent.predicate("fhir:"+name,index > -1);
11892    }
11893    composeBackboneElement(t, "section", name, element, index);
11894    if (element.hasTitleElement()) {
11895      composeString(t, "SectionComponent", "title", element.getTitleElement(), -1);
11896    }
11897    if (element.hasFocus()) {
11898      composeCodeableConcept(t, "SectionComponent", "focus", element.getFocus(), -1);
11899    }
11900    if (element.hasFocusReference()) {
11901      composeReference(t, "SectionComponent", "focusReference", element.getFocusReference(), -1);
11902    }
11903    for (int i = 0; i < element.getAuthor().size(); i++) {
11904      composeReference(t, "SectionComponent", "author", element.getAuthor().get(i), i);
11905    }
11906    if (element.hasText()) {
11907      composeNarrative(t, "SectionComponent", "text", element.getText(), -1);
11908    }
11909    if (element.hasModeElement()) {
11910      composeEnum(t, "SectionComponent", "mode", element.getModeElement(), -1);
11911    }
11912    if (element.hasOrderedBy()) {
11913      composeCodeableConcept(t, "SectionComponent", "orderedBy", element.getOrderedBy(), -1);
11914    }
11915    for (int i = 0; i < element.getEntryClassifier().size(); i++) {
11916      composeCodeableConcept(t, "SectionComponent", "entryClassifier", element.getEntryClassifier().get(i), i);
11917    }
11918    for (int i = 0; i < element.getEntryReference().size(); i++) {
11919      composeReference(t, "SectionComponent", "entryReference", element.getEntryReference().get(i), i);
11920    }
11921    for (int i = 0; i < element.getEntryQuantity().size(); i++) {
11922      composeQuantity(t, "SectionComponent", "entryQuantity", element.getEntryQuantity().get(i), i);
11923    }
11924    if (element.hasEmptyReason()) {
11925      composeCodeableConcept(t, "SectionComponent", "emptyReason", element.getEmptyReason(), -1);
11926    }
11927    for (int i = 0; i < element.getSection().size(); i++) {
11928      composeEvidenceReportSectionComponent(t, "SectionComponent", "section", element.getSection().get(i), i);
11929    }
11930  }
11931
11932  protected void composeEvidenceVariable(Complex parent, String parentType, String name, EvidenceVariable element, int index) {
11933    if (element == null) 
11934      return;
11935    Complex t;
11936    if (Utilities.noString(parentType))
11937      t = parent;
11938    else {
11939      t = parent.predicate("fhir:"+name,index > -1);
11940    }
11941    composeMetadataResource(t, "EvidenceVariable", name, element, index);
11942    if (element.hasUrlElement()) {
11943      composeUri(t, "EvidenceVariable", "url", element.getUrlElement(), -1);
11944    }
11945    for (int i = 0; i < element.getIdentifier().size(); i++) {
11946      composeIdentifier(t, "EvidenceVariable", "identifier", element.getIdentifier().get(i), i);
11947    }
11948    if (element.hasVersionElement()) {
11949      composeString(t, "EvidenceVariable", "version", element.getVersionElement(), -1);
11950    }
11951    if (element.hasVersionAlgorithm()) {
11952      composeType(t, "EvidenceVariable", "versionAlgorithm", element.getVersionAlgorithm(), -1);
11953    }
11954    if (element.hasNameElement()) {
11955      composeString(t, "EvidenceVariable", "name", element.getNameElement(), -1);
11956    }
11957    if (element.hasTitleElement()) {
11958      composeString(t, "EvidenceVariable", "title", element.getTitleElement(), -1);
11959    }
11960    if (element.hasShortTitleElement()) {
11961      composeString(t, "EvidenceVariable", "shortTitle", element.getShortTitleElement(), -1);
11962    }
11963    if (element.hasStatusElement()) {
11964      composeEnum(t, "EvidenceVariable", "status", element.getStatusElement(), -1);
11965    }
11966    if (element.hasExperimentalElement()) {
11967      composeBoolean(t, "EvidenceVariable", "experimental", element.getExperimentalElement(), -1);
11968    }
11969    if (element.hasDateElement()) {
11970      composeDateTime(t, "EvidenceVariable", "date", element.getDateElement(), -1);
11971    }
11972    if (element.hasPublisherElement()) {
11973      composeString(t, "EvidenceVariable", "publisher", element.getPublisherElement(), -1);
11974    }
11975    for (int i = 0; i < element.getContact().size(); i++) {
11976      composeContactDetail(t, "EvidenceVariable", "contact", element.getContact().get(i), i);
11977    }
11978    if (element.hasDescriptionElement()) {
11979      composeMarkdown(t, "EvidenceVariable", "description", element.getDescriptionElement(), -1);
11980    }
11981    for (int i = 0; i < element.getNote().size(); i++) {
11982      composeAnnotation(t, "EvidenceVariable", "note", element.getNote().get(i), i);
11983    }
11984    for (int i = 0; i < element.getUseContext().size(); i++) {
11985      composeUsageContext(t, "EvidenceVariable", "useContext", element.getUseContext().get(i), i);
11986    }
11987    if (element.hasPurposeElement()) {
11988      composeMarkdown(t, "EvidenceVariable", "purpose", element.getPurposeElement(), -1);
11989    }
11990    if (element.hasCopyrightElement()) {
11991      composeMarkdown(t, "EvidenceVariable", "copyright", element.getCopyrightElement(), -1);
11992    }
11993    if (element.hasCopyrightLabelElement()) {
11994      composeString(t, "EvidenceVariable", "copyrightLabel", element.getCopyrightLabelElement(), -1);
11995    }
11996    if (element.hasApprovalDateElement()) {
11997      composeDate(t, "EvidenceVariable", "approvalDate", element.getApprovalDateElement(), -1);
11998    }
11999    if (element.hasLastReviewDateElement()) {
12000      composeDate(t, "EvidenceVariable", "lastReviewDate", element.getLastReviewDateElement(), -1);
12001    }
12002    if (element.hasEffectivePeriod()) {
12003      composePeriod(t, "EvidenceVariable", "effectivePeriod", element.getEffectivePeriod(), -1);
12004    }
12005    for (int i = 0; i < element.getAuthor().size(); i++) {
12006      composeContactDetail(t, "EvidenceVariable", "author", element.getAuthor().get(i), i);
12007    }
12008    for (int i = 0; i < element.getEditor().size(); i++) {
12009      composeContactDetail(t, "EvidenceVariable", "editor", element.getEditor().get(i), i);
12010    }
12011    for (int i = 0; i < element.getReviewer().size(); i++) {
12012      composeContactDetail(t, "EvidenceVariable", "reviewer", element.getReviewer().get(i), i);
12013    }
12014    for (int i = 0; i < element.getEndorser().size(); i++) {
12015      composeContactDetail(t, "EvidenceVariable", "endorser", element.getEndorser().get(i), i);
12016    }
12017    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
12018      composeRelatedArtifact(t, "EvidenceVariable", "relatedArtifact", element.getRelatedArtifact().get(i), i);
12019    }
12020    if (element.hasActualElement()) {
12021      composeBoolean(t, "EvidenceVariable", "actual", element.getActualElement(), -1);
12022    }
12023    for (int i = 0; i < element.getCharacteristic().size(); i++) {
12024      composeEvidenceVariableCharacteristicComponent(t, "EvidenceVariable", "characteristic", element.getCharacteristic().get(i), i);
12025    }
12026    if (element.hasHandlingElement()) {
12027      composeEnum(t, "EvidenceVariable", "handling", element.getHandlingElement(), -1);
12028    }
12029    for (int i = 0; i < element.getCategory().size(); i++) {
12030      composeEvidenceVariableCategoryComponent(t, "EvidenceVariable", "category", element.getCategory().get(i), i);
12031    }
12032  }
12033
12034  protected void composeEvidenceVariableCharacteristicComponent(Complex parent, String parentType, String name, EvidenceVariable.EvidenceVariableCharacteristicComponent element, int index) {
12035    if (element == null) 
12036      return;
12037    Complex t;
12038    if (Utilities.noString(parentType))
12039      t = parent;
12040    else {
12041      t = parent.predicate("fhir:"+name,index > -1);
12042    }
12043    composeBackboneElement(t, "characteristic", name, element, index);
12044    if (element.hasLinkIdElement()) {
12045      composeId(t, "EvidenceVariableCharacteristicComponent", "linkId", element.getLinkIdElement(), -1);
12046    }
12047    if (element.hasDescriptionElement()) {
12048      composeMarkdown(t, "EvidenceVariableCharacteristicComponent", "description", element.getDescriptionElement(), -1);
12049    }
12050    for (int i = 0; i < element.getNote().size(); i++) {
12051      composeAnnotation(t, "EvidenceVariableCharacteristicComponent", "note", element.getNote().get(i), i);
12052    }
12053    if (element.hasExcludeElement()) {
12054      composeBoolean(t, "EvidenceVariableCharacteristicComponent", "exclude", element.getExcludeElement(), -1);
12055    }
12056    if (element.hasDefinitionReference()) {
12057      composeReference(t, "EvidenceVariableCharacteristicComponent", "definitionReference", element.getDefinitionReference(), -1);
12058    }
12059    if (element.hasDefinitionCanonicalElement()) {
12060      composeCanonical(t, "EvidenceVariableCharacteristicComponent", "definitionCanonical", element.getDefinitionCanonicalElement(), -1);
12061    }
12062    if (element.hasDefinitionCodeableConcept()) {
12063      composeCodeableConcept(t, "EvidenceVariableCharacteristicComponent", "definitionCodeableConcept", element.getDefinitionCodeableConcept(), -1);
12064    }
12065    if (element.hasDefinitionExpression()) {
12066      composeExpression(t, "EvidenceVariableCharacteristicComponent", "definitionExpression", element.getDefinitionExpression(), -1);
12067    }
12068    if (element.hasDefinitionIdElement()) {
12069      composeId(t, "EvidenceVariableCharacteristicComponent", "definitionId", element.getDefinitionIdElement(), -1);
12070    }
12071    if (element.hasDefinitionByTypeAndValue()) {
12072      composeEvidenceVariableCharacteristicDefinitionByTypeAndValueComponent(t, "EvidenceVariableCharacteristicComponent", "definitionByTypeAndValue", element.getDefinitionByTypeAndValue(), -1);
12073    }
12074    if (element.hasDefinitionByCombination()) {
12075      composeEvidenceVariableCharacteristicDefinitionByCombinationComponent(t, "EvidenceVariableCharacteristicComponent", "definitionByCombination", element.getDefinitionByCombination(), -1);
12076    }
12077    if (element.hasInstances()) {
12078      composeType(t, "EvidenceVariableCharacteristicComponent", "instances", element.getInstances(), -1);
12079    }
12080    if (element.hasDuration()) {
12081      composeType(t, "EvidenceVariableCharacteristicComponent", "duration", element.getDuration(), -1);
12082    }
12083    for (int i = 0; i < element.getTimeFromEvent().size(); i++) {
12084      composeEvidenceVariableCharacteristicTimeFromEventComponent(t, "EvidenceVariableCharacteristicComponent", "timeFromEvent", element.getTimeFromEvent().get(i), i);
12085    }
12086  }
12087
12088  protected void composeEvidenceVariableCharacteristicDefinitionByTypeAndValueComponent(Complex parent, String parentType, String name, EvidenceVariable.EvidenceVariableCharacteristicDefinitionByTypeAndValueComponent element, int index) {
12089    if (element == null) 
12090      return;
12091    Complex t;
12092    if (Utilities.noString(parentType))
12093      t = parent;
12094    else {
12095      t = parent.predicate("fhir:"+name,index > -1);
12096    }
12097    composeBackboneElement(t, "definitionByTypeAndValue", name, element, index);
12098    if (element.hasType()) {
12099      composeCodeableConcept(t, "EvidenceVariableCharacteristicDefinitionByTypeAndValueComponent", "type", element.getType(), -1);
12100    }
12101    for (int i = 0; i < element.getMethod().size(); i++) {
12102      composeCodeableConcept(t, "EvidenceVariableCharacteristicDefinitionByTypeAndValueComponent", "method", element.getMethod().get(i), i);
12103    }
12104    if (element.hasDevice()) {
12105      composeReference(t, "EvidenceVariableCharacteristicDefinitionByTypeAndValueComponent", "device", element.getDevice(), -1);
12106    }
12107    if (element.hasValue()) {
12108      composeType(t, "EvidenceVariableCharacteristicDefinitionByTypeAndValueComponent", "value", element.getValue(), -1);
12109    }
12110    if (element.hasOffset()) {
12111      composeCodeableConcept(t, "EvidenceVariableCharacteristicDefinitionByTypeAndValueComponent", "offset", element.getOffset(), -1);
12112    }
12113  }
12114
12115  protected void composeEvidenceVariableCharacteristicDefinitionByCombinationComponent(Complex parent, String parentType, String name, EvidenceVariable.EvidenceVariableCharacteristicDefinitionByCombinationComponent element, int index) {
12116    if (element == null) 
12117      return;
12118    Complex t;
12119    if (Utilities.noString(parentType))
12120      t = parent;
12121    else {
12122      t = parent.predicate("fhir:"+name,index > -1);
12123    }
12124    composeBackboneElement(t, "definitionByCombination", name, element, index);
12125    if (element.hasCodeElement()) {
12126      composeEnum(t, "EvidenceVariableCharacteristicDefinitionByCombinationComponent", "code", element.getCodeElement(), -1);
12127    }
12128    if (element.hasThresholdElement()) {
12129      composePositiveInt(t, "EvidenceVariableCharacteristicDefinitionByCombinationComponent", "threshold", element.getThresholdElement(), -1);
12130    }
12131    for (int i = 0; i < element.getCharacteristic().size(); i++) {
12132      composeEvidenceVariableCharacteristicComponent(t, "EvidenceVariableCharacteristicDefinitionByCombinationComponent", "characteristic", element.getCharacteristic().get(i), i);
12133    }
12134  }
12135
12136  protected void composeEvidenceVariableCharacteristicTimeFromEventComponent(Complex parent, String parentType, String name, EvidenceVariable.EvidenceVariableCharacteristicTimeFromEventComponent element, int index) {
12137    if (element == null) 
12138      return;
12139    Complex t;
12140    if (Utilities.noString(parentType))
12141      t = parent;
12142    else {
12143      t = parent.predicate("fhir:"+name,index > -1);
12144    }
12145    composeBackboneElement(t, "timeFromEvent", name, element, index);
12146    if (element.hasDescriptionElement()) {
12147      composeMarkdown(t, "EvidenceVariableCharacteristicTimeFromEventComponent", "description", element.getDescriptionElement(), -1);
12148    }
12149    for (int i = 0; i < element.getNote().size(); i++) {
12150      composeAnnotation(t, "EvidenceVariableCharacteristicTimeFromEventComponent", "note", element.getNote().get(i), i);
12151    }
12152    if (element.hasEvent()) {
12153      composeType(t, "EvidenceVariableCharacteristicTimeFromEventComponent", "event", element.getEvent(), -1);
12154    }
12155    if (element.hasQuantity()) {
12156      composeQuantity(t, "EvidenceVariableCharacteristicTimeFromEventComponent", "quantity", element.getQuantity(), -1);
12157    }
12158    if (element.hasRange()) {
12159      composeRange(t, "EvidenceVariableCharacteristicTimeFromEventComponent", "range", element.getRange(), -1);
12160    }
12161  }
12162
12163  protected void composeEvidenceVariableCategoryComponent(Complex parent, String parentType, String name, EvidenceVariable.EvidenceVariableCategoryComponent element, int index) {
12164    if (element == null) 
12165      return;
12166    Complex t;
12167    if (Utilities.noString(parentType))
12168      t = parent;
12169    else {
12170      t = parent.predicate("fhir:"+name,index > -1);
12171    }
12172    composeBackboneElement(t, "category", name, element, index);
12173    if (element.hasNameElement()) {
12174      composeString(t, "EvidenceVariableCategoryComponent", "name", element.getNameElement(), -1);
12175    }
12176    if (element.hasValue()) {
12177      composeType(t, "EvidenceVariableCategoryComponent", "value", element.getValue(), -1);
12178    }
12179  }
12180
12181  protected void composeExampleScenario(Complex parent, String parentType, String name, ExampleScenario element, int index) {
12182    if (element == null) 
12183      return;
12184    Complex t;
12185    if (Utilities.noString(parentType))
12186      t = parent;
12187    else {
12188      t = parent.predicate("fhir:"+name,index > -1);
12189    }
12190    composeCanonicalResource(t, "ExampleScenario", name, element, index);
12191    if (element.hasUrlElement()) {
12192      composeUri(t, "ExampleScenario", "url", element.getUrlElement(), -1);
12193    }
12194    for (int i = 0; i < element.getIdentifier().size(); i++) {
12195      composeIdentifier(t, "ExampleScenario", "identifier", element.getIdentifier().get(i), i);
12196    }
12197    if (element.hasVersionElement()) {
12198      composeString(t, "ExampleScenario", "version", element.getVersionElement(), -1);
12199    }
12200    if (element.hasVersionAlgorithm()) {
12201      composeType(t, "ExampleScenario", "versionAlgorithm", element.getVersionAlgorithm(), -1);
12202    }
12203    if (element.hasNameElement()) {
12204      composeString(t, "ExampleScenario", "name", element.getNameElement(), -1);
12205    }
12206    if (element.hasTitleElement()) {
12207      composeString(t, "ExampleScenario", "title", element.getTitleElement(), -1);
12208    }
12209    if (element.hasStatusElement()) {
12210      composeEnum(t, "ExampleScenario", "status", element.getStatusElement(), -1);
12211    }
12212    if (element.hasExperimentalElement()) {
12213      composeBoolean(t, "ExampleScenario", "experimental", element.getExperimentalElement(), -1);
12214    }
12215    if (element.hasDateElement()) {
12216      composeDateTime(t, "ExampleScenario", "date", element.getDateElement(), -1);
12217    }
12218    if (element.hasPublisherElement()) {
12219      composeString(t, "ExampleScenario", "publisher", element.getPublisherElement(), -1);
12220    }
12221    for (int i = 0; i < element.getContact().size(); i++) {
12222      composeContactDetail(t, "ExampleScenario", "contact", element.getContact().get(i), i);
12223    }
12224    if (element.hasDescriptionElement()) {
12225      composeMarkdown(t, "ExampleScenario", "description", element.getDescriptionElement(), -1);
12226    }
12227    for (int i = 0; i < element.getUseContext().size(); i++) {
12228      composeUsageContext(t, "ExampleScenario", "useContext", element.getUseContext().get(i), i);
12229    }
12230    for (int i = 0; i < element.getJurisdiction().size(); i++) {
12231      composeCodeableConcept(t, "ExampleScenario", "jurisdiction", element.getJurisdiction().get(i), i);
12232    }
12233    if (element.hasPurposeElement()) {
12234      composeMarkdown(t, "ExampleScenario", "purpose", element.getPurposeElement(), -1);
12235    }
12236    if (element.hasCopyrightElement()) {
12237      composeMarkdown(t, "ExampleScenario", "copyright", element.getCopyrightElement(), -1);
12238    }
12239    if (element.hasCopyrightLabelElement()) {
12240      composeString(t, "ExampleScenario", "copyrightLabel", element.getCopyrightLabelElement(), -1);
12241    }
12242    for (int i = 0; i < element.getActor().size(); i++) {
12243      composeExampleScenarioActorComponent(t, "ExampleScenario", "actor", element.getActor().get(i), i);
12244    }
12245    for (int i = 0; i < element.getInstance().size(); i++) {
12246      composeExampleScenarioInstanceComponent(t, "ExampleScenario", "instance", element.getInstance().get(i), i);
12247    }
12248    for (int i = 0; i < element.getProcess().size(); i++) {
12249      composeExampleScenarioProcessComponent(t, "ExampleScenario", "process", element.getProcess().get(i), i);
12250    }
12251  }
12252
12253  protected void composeExampleScenarioActorComponent(Complex parent, String parentType, String name, ExampleScenario.ExampleScenarioActorComponent element, int index) {
12254    if (element == null) 
12255      return;
12256    Complex t;
12257    if (Utilities.noString(parentType))
12258      t = parent;
12259    else {
12260      t = parent.predicate("fhir:"+name,index > -1);
12261    }
12262    composeBackboneElement(t, "actor", name, element, index);
12263    if (element.hasKeyElement()) {
12264      composeString(t, "ExampleScenarioActorComponent", "key", element.getKeyElement(), -1);
12265    }
12266    if (element.hasTypeElement()) {
12267      composeEnum(t, "ExampleScenarioActorComponent", "type", element.getTypeElement(), -1);
12268    }
12269    if (element.hasTitleElement()) {
12270      composeString(t, "ExampleScenarioActorComponent", "title", element.getTitleElement(), -1);
12271    }
12272    if (element.hasDescriptionElement()) {
12273      composeMarkdown(t, "ExampleScenarioActorComponent", "description", element.getDescriptionElement(), -1);
12274    }
12275  }
12276
12277  protected void composeExampleScenarioInstanceComponent(Complex parent, String parentType, String name, ExampleScenario.ExampleScenarioInstanceComponent element, int index) {
12278    if (element == null) 
12279      return;
12280    Complex t;
12281    if (Utilities.noString(parentType))
12282      t = parent;
12283    else {
12284      t = parent.predicate("fhir:"+name,index > -1);
12285    }
12286    composeBackboneElement(t, "instance", name, element, index);
12287    if (element.hasKeyElement()) {
12288      composeString(t, "ExampleScenarioInstanceComponent", "key", element.getKeyElement(), -1);
12289    }
12290    if (element.hasStructureType()) {
12291      composeCoding(t, "ExampleScenarioInstanceComponent", "structureType", element.getStructureType(), -1);
12292    }
12293    if (element.hasStructureVersionElement()) {
12294      composeString(t, "ExampleScenarioInstanceComponent", "structureVersion", element.getStructureVersionElement(), -1);
12295    }
12296    if (element.hasStructureProfile()) {
12297      composeType(t, "ExampleScenarioInstanceComponent", "structureProfile", element.getStructureProfile(), -1);
12298    }
12299    if (element.hasTitleElement()) {
12300      composeString(t, "ExampleScenarioInstanceComponent", "title", element.getTitleElement(), -1);
12301    }
12302    if (element.hasDescriptionElement()) {
12303      composeMarkdown(t, "ExampleScenarioInstanceComponent", "description", element.getDescriptionElement(), -1);
12304    }
12305    if (element.hasContent()) {
12306      composeReference(t, "ExampleScenarioInstanceComponent", "content", element.getContent(), -1);
12307    }
12308    for (int i = 0; i < element.getVersion().size(); i++) {
12309      composeExampleScenarioInstanceVersionComponent(t, "ExampleScenarioInstanceComponent", "version", element.getVersion().get(i), i);
12310    }
12311    for (int i = 0; i < element.getContainedInstance().size(); i++) {
12312      composeExampleScenarioInstanceContainedInstanceComponent(t, "ExampleScenarioInstanceComponent", "containedInstance", element.getContainedInstance().get(i), i);
12313    }
12314  }
12315
12316  protected void composeExampleScenarioInstanceVersionComponent(Complex parent, String parentType, String name, ExampleScenario.ExampleScenarioInstanceVersionComponent element, int index) {
12317    if (element == null) 
12318      return;
12319    Complex t;
12320    if (Utilities.noString(parentType))
12321      t = parent;
12322    else {
12323      t = parent.predicate("fhir:"+name,index > -1);
12324    }
12325    composeBackboneElement(t, "version", name, element, index);
12326    if (element.hasKeyElement()) {
12327      composeString(t, "ExampleScenarioInstanceVersionComponent", "key", element.getKeyElement(), -1);
12328    }
12329    if (element.hasTitleElement()) {
12330      composeString(t, "ExampleScenarioInstanceVersionComponent", "title", element.getTitleElement(), -1);
12331    }
12332    if (element.hasDescriptionElement()) {
12333      composeMarkdown(t, "ExampleScenarioInstanceVersionComponent", "description", element.getDescriptionElement(), -1);
12334    }
12335    if (element.hasContent()) {
12336      composeReference(t, "ExampleScenarioInstanceVersionComponent", "content", element.getContent(), -1);
12337    }
12338  }
12339
12340  protected void composeExampleScenarioInstanceContainedInstanceComponent(Complex parent, String parentType, String name, ExampleScenario.ExampleScenarioInstanceContainedInstanceComponent element, int index) {
12341    if (element == null) 
12342      return;
12343    Complex t;
12344    if (Utilities.noString(parentType))
12345      t = parent;
12346    else {
12347      t = parent.predicate("fhir:"+name,index > -1);
12348    }
12349    composeBackboneElement(t, "containedInstance", name, element, index);
12350    if (element.hasInstanceReferenceElement()) {
12351      composeString(t, "ExampleScenarioInstanceContainedInstanceComponent", "instanceReference", element.getInstanceReferenceElement(), -1);
12352    }
12353    if (element.hasVersionReferenceElement()) {
12354      composeString(t, "ExampleScenarioInstanceContainedInstanceComponent", "versionReference", element.getVersionReferenceElement(), -1);
12355    }
12356  }
12357
12358  protected void composeExampleScenarioProcessComponent(Complex parent, String parentType, String name, ExampleScenario.ExampleScenarioProcessComponent element, int index) {
12359    if (element == null) 
12360      return;
12361    Complex t;
12362    if (Utilities.noString(parentType))
12363      t = parent;
12364    else {
12365      t = parent.predicate("fhir:"+name,index > -1);
12366    }
12367    composeBackboneElement(t, "process", name, element, index);
12368    if (element.hasTitleElement()) {
12369      composeString(t, "ExampleScenarioProcessComponent", "title", element.getTitleElement(), -1);
12370    }
12371    if (element.hasDescriptionElement()) {
12372      composeMarkdown(t, "ExampleScenarioProcessComponent", "description", element.getDescriptionElement(), -1);
12373    }
12374    if (element.hasPreConditionsElement()) {
12375      composeMarkdown(t, "ExampleScenarioProcessComponent", "preConditions", element.getPreConditionsElement(), -1);
12376    }
12377    if (element.hasPostConditionsElement()) {
12378      composeMarkdown(t, "ExampleScenarioProcessComponent", "postConditions", element.getPostConditionsElement(), -1);
12379    }
12380    for (int i = 0; i < element.getStep().size(); i++) {
12381      composeExampleScenarioProcessStepComponent(t, "ExampleScenarioProcessComponent", "step", element.getStep().get(i), i);
12382    }
12383  }
12384
12385  protected void composeExampleScenarioProcessStepComponent(Complex parent, String parentType, String name, ExampleScenario.ExampleScenarioProcessStepComponent element, int index) {
12386    if (element == null) 
12387      return;
12388    Complex t;
12389    if (Utilities.noString(parentType))
12390      t = parent;
12391    else {
12392      t = parent.predicate("fhir:"+name,index > -1);
12393    }
12394    composeBackboneElement(t, "step", name, element, index);
12395    if (element.hasNumberElement()) {
12396      composeString(t, "ExampleScenarioProcessStepComponent", "number", element.getNumberElement(), -1);
12397    }
12398    if (element.hasProcess()) {
12399      composeExampleScenarioProcessComponent(t, "ExampleScenarioProcessStepComponent", "process", element.getProcess(), -1);
12400    }
12401    if (element.hasWorkflowElement()) {
12402      composeCanonical(t, "ExampleScenarioProcessStepComponent", "workflow", element.getWorkflowElement(), -1);
12403    }
12404    if (element.hasOperation()) {
12405      composeExampleScenarioProcessStepOperationComponent(t, "ExampleScenarioProcessStepComponent", "operation", element.getOperation(), -1);
12406    }
12407    for (int i = 0; i < element.getAlternative().size(); i++) {
12408      composeExampleScenarioProcessStepAlternativeComponent(t, "ExampleScenarioProcessStepComponent", "alternative", element.getAlternative().get(i), i);
12409    }
12410    if (element.hasPauseElement()) {
12411      composeBoolean(t, "ExampleScenarioProcessStepComponent", "pause", element.getPauseElement(), -1);
12412    }
12413  }
12414
12415  protected void composeExampleScenarioProcessStepOperationComponent(Complex parent, String parentType, String name, ExampleScenario.ExampleScenarioProcessStepOperationComponent 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:"+name,index > -1);
12423    }
12424    composeBackboneElement(t, "operation", name, element, index);
12425    if (element.hasType()) {
12426      composeCoding(t, "ExampleScenarioProcessStepOperationComponent", "type", element.getType(), -1);
12427    }
12428    if (element.hasTitleElement()) {
12429      composeString(t, "ExampleScenarioProcessStepOperationComponent", "title", element.getTitleElement(), -1);
12430    }
12431    if (element.hasInitiatorElement()) {
12432      composeString(t, "ExampleScenarioProcessStepOperationComponent", "initiator", element.getInitiatorElement(), -1);
12433    }
12434    if (element.hasReceiverElement()) {
12435      composeString(t, "ExampleScenarioProcessStepOperationComponent", "receiver", element.getReceiverElement(), -1);
12436    }
12437    if (element.hasDescriptionElement()) {
12438      composeMarkdown(t, "ExampleScenarioProcessStepOperationComponent", "description", element.getDescriptionElement(), -1);
12439    }
12440    if (element.hasInitiatorActiveElement()) {
12441      composeBoolean(t, "ExampleScenarioProcessStepOperationComponent", "initiatorActive", element.getInitiatorActiveElement(), -1);
12442    }
12443    if (element.hasReceiverActiveElement()) {
12444      composeBoolean(t, "ExampleScenarioProcessStepOperationComponent", "receiverActive", element.getReceiverActiveElement(), -1);
12445    }
12446    if (element.hasRequest()) {
12447      composeExampleScenarioInstanceContainedInstanceComponent(t, "ExampleScenarioProcessStepOperationComponent", "request", element.getRequest(), -1);
12448    }
12449    if (element.hasResponse()) {
12450      composeExampleScenarioInstanceContainedInstanceComponent(t, "ExampleScenarioProcessStepOperationComponent", "response", element.getResponse(), -1);
12451    }
12452  }
12453
12454  protected void composeExampleScenarioProcessStepAlternativeComponent(Complex parent, String parentType, String name, ExampleScenario.ExampleScenarioProcessStepAlternativeComponent element, int index) {
12455    if (element == null) 
12456      return;
12457    Complex t;
12458    if (Utilities.noString(parentType))
12459      t = parent;
12460    else {
12461      t = parent.predicate("fhir:"+name,index > -1);
12462    }
12463    composeBackboneElement(t, "alternative", name, element, index);
12464    if (element.hasTitleElement()) {
12465      composeString(t, "ExampleScenarioProcessStepAlternativeComponent", "title", element.getTitleElement(), -1);
12466    }
12467    if (element.hasDescriptionElement()) {
12468      composeMarkdown(t, "ExampleScenarioProcessStepAlternativeComponent", "description", element.getDescriptionElement(), -1);
12469    }
12470    for (int i = 0; i < element.getStep().size(); i++) {
12471      composeExampleScenarioProcessStepComponent(t, "ExampleScenarioProcessStepAlternativeComponent", "step", element.getStep().get(i), i);
12472    }
12473  }
12474
12475  protected void composeExplanationOfBenefit(Complex parent, String parentType, String name, ExplanationOfBenefit element, int index) {
12476    if (element == null) 
12477      return;
12478    Complex t;
12479    if (Utilities.noString(parentType))
12480      t = parent;
12481    else {
12482      t = parent.predicate("fhir:"+name,index > -1);
12483    }
12484    composeDomainResource(t, "ExplanationOfBenefit", name, element, index);
12485    for (int i = 0; i < element.getIdentifier().size(); i++) {
12486      composeIdentifier(t, "ExplanationOfBenefit", "identifier", element.getIdentifier().get(i), i);
12487    }
12488    for (int i = 0; i < element.getTraceNumber().size(); i++) {
12489      composeIdentifier(t, "ExplanationOfBenefit", "traceNumber", element.getTraceNumber().get(i), i);
12490    }
12491    if (element.hasStatusElement()) {
12492      composeEnum(t, "ExplanationOfBenefit", "status", element.getStatusElement(), -1);
12493    }
12494    if (element.hasType()) {
12495      composeCodeableConcept(t, "ExplanationOfBenefit", "type", element.getType(), -1);
12496    }
12497    if (element.hasSubType()) {
12498      composeCodeableConcept(t, "ExplanationOfBenefit", "subType", element.getSubType(), -1);
12499    }
12500    if (element.hasUseElement()) {
12501      composeEnum(t, "ExplanationOfBenefit", "use", element.getUseElement(), -1);
12502    }
12503    if (element.hasPatient()) {
12504      composeReference(t, "ExplanationOfBenefit", "patient", element.getPatient(), -1);
12505    }
12506    if (element.hasBillablePeriod()) {
12507      composePeriod(t, "ExplanationOfBenefit", "billablePeriod", element.getBillablePeriod(), -1);
12508    }
12509    if (element.hasCreatedElement()) {
12510      composeDateTime(t, "ExplanationOfBenefit", "created", element.getCreatedElement(), -1);
12511    }
12512    if (element.hasEnterer()) {
12513      composeReference(t, "ExplanationOfBenefit", "enterer", element.getEnterer(), -1);
12514    }
12515    if (element.hasInsurer()) {
12516      composeReference(t, "ExplanationOfBenefit", "insurer", element.getInsurer(), -1);
12517    }
12518    if (element.hasProvider()) {
12519      composeReference(t, "ExplanationOfBenefit", "provider", element.getProvider(), -1);
12520    }
12521    if (element.hasPriority()) {
12522      composeCodeableConcept(t, "ExplanationOfBenefit", "priority", element.getPriority(), -1);
12523    }
12524    if (element.hasFundsReserveRequested()) {
12525      composeCodeableConcept(t, "ExplanationOfBenefit", "fundsReserveRequested", element.getFundsReserveRequested(), -1);
12526    }
12527    if (element.hasFundsReserve()) {
12528      composeCodeableConcept(t, "ExplanationOfBenefit", "fundsReserve", element.getFundsReserve(), -1);
12529    }
12530    for (int i = 0; i < element.getRelated().size(); i++) {
12531      composeExplanationOfBenefitRelatedClaimComponent(t, "ExplanationOfBenefit", "related", element.getRelated().get(i), i);
12532    }
12533    if (element.hasPrescription()) {
12534      composeReference(t, "ExplanationOfBenefit", "prescription", element.getPrescription(), -1);
12535    }
12536    if (element.hasOriginalPrescription()) {
12537      composeReference(t, "ExplanationOfBenefit", "originalPrescription", element.getOriginalPrescription(), -1);
12538    }
12539    for (int i = 0; i < element.getEvent().size(); i++) {
12540      composeExplanationOfBenefitEventComponent(t, "ExplanationOfBenefit", "event", element.getEvent().get(i), i);
12541    }
12542    if (element.hasPayee()) {
12543      composeExplanationOfBenefitPayeeComponent(t, "ExplanationOfBenefit", "payee", element.getPayee(), -1);
12544    }
12545    if (element.hasReferral()) {
12546      composeReference(t, "ExplanationOfBenefit", "referral", element.getReferral(), -1);
12547    }
12548    for (int i = 0; i < element.getEncounter().size(); i++) {
12549      composeReference(t, "ExplanationOfBenefit", "encounter", element.getEncounter().get(i), i);
12550    }
12551    if (element.hasFacility()) {
12552      composeReference(t, "ExplanationOfBenefit", "facility", element.getFacility(), -1);
12553    }
12554    if (element.hasClaim()) {
12555      composeReference(t, "ExplanationOfBenefit", "claim", element.getClaim(), -1);
12556    }
12557    if (element.hasClaimResponse()) {
12558      composeReference(t, "ExplanationOfBenefit", "claimResponse", element.getClaimResponse(), -1);
12559    }
12560    if (element.hasOutcomeElement()) {
12561      composeEnum(t, "ExplanationOfBenefit", "outcome", element.getOutcomeElement(), -1);
12562    }
12563    if (element.hasDecision()) {
12564      composeCodeableConcept(t, "ExplanationOfBenefit", "decision", element.getDecision(), -1);
12565    }
12566    if (element.hasDispositionElement()) {
12567      composeString(t, "ExplanationOfBenefit", "disposition", element.getDispositionElement(), -1);
12568    }
12569    for (int i = 0; i < element.getPreAuthRef().size(); i++) {
12570      composeString(t, "ExplanationOfBenefit", "preAuthRef", element.getPreAuthRef().get(i), i);
12571    }
12572    for (int i = 0; i < element.getPreAuthRefPeriod().size(); i++) {
12573      composePeriod(t, "ExplanationOfBenefit", "preAuthRefPeriod", element.getPreAuthRefPeriod().get(i), i);
12574    }
12575    if (element.hasDiagnosisRelatedGroup()) {
12576      composeCodeableConcept(t, "ExplanationOfBenefit", "diagnosisRelatedGroup", element.getDiagnosisRelatedGroup(), -1);
12577    }
12578    for (int i = 0; i < element.getCareTeam().size(); i++) {
12579      composeExplanationOfBenefitCareTeamComponent(t, "ExplanationOfBenefit", "careTeam", element.getCareTeam().get(i), i);
12580    }
12581    for (int i = 0; i < element.getSupportingInfo().size(); i++) {
12582      composeExplanationOfBenefitSupportingInformationComponent(t, "ExplanationOfBenefit", "supportingInfo", element.getSupportingInfo().get(i), i);
12583    }
12584    for (int i = 0; i < element.getDiagnosis().size(); i++) {
12585      composeExplanationOfBenefitDiagnosisComponent(t, "ExplanationOfBenefit", "diagnosis", element.getDiagnosis().get(i), i);
12586    }
12587    for (int i = 0; i < element.getProcedure().size(); i++) {
12588      composeExplanationOfBenefitProcedureComponent(t, "ExplanationOfBenefit", "procedure", element.getProcedure().get(i), i);
12589    }
12590    if (element.hasPrecedenceElement()) {
12591      composePositiveInt(t, "ExplanationOfBenefit", "precedence", element.getPrecedenceElement(), -1);
12592    }
12593    for (int i = 0; i < element.getInsurance().size(); i++) {
12594      composeExplanationOfBenefitInsuranceComponent(t, "ExplanationOfBenefit", "insurance", element.getInsurance().get(i), i);
12595    }
12596    if (element.hasAccident()) {
12597      composeExplanationOfBenefitAccidentComponent(t, "ExplanationOfBenefit", "accident", element.getAccident(), -1);
12598    }
12599    if (element.hasPatientPaid()) {
12600      composeMoney(t, "ExplanationOfBenefit", "patientPaid", element.getPatientPaid(), -1);
12601    }
12602    for (int i = 0; i < element.getItem().size(); i++) {
12603      composeExplanationOfBenefitItemComponent(t, "ExplanationOfBenefit", "item", element.getItem().get(i), i);
12604    }
12605    for (int i = 0; i < element.getAddItem().size(); i++) {
12606      composeExplanationOfBenefitAddedItemComponent(t, "ExplanationOfBenefit", "addItem", element.getAddItem().get(i), i);
12607    }
12608    for (int i = 0; i < element.getAdjudication().size(); i++) {
12609      composeExplanationOfBenefitAdjudicationComponent(t, "ExplanationOfBenefit", "adjudication", element.getAdjudication().get(i), i);
12610    }
12611    for (int i = 0; i < element.getTotal().size(); i++) {
12612      composeExplanationOfBenefitTotalComponent(t, "ExplanationOfBenefit", "total", element.getTotal().get(i), i);
12613    }
12614    if (element.hasPayment()) {
12615      composeExplanationOfBenefitPaymentComponent(t, "ExplanationOfBenefit", "payment", element.getPayment(), -1);
12616    }
12617    if (element.hasFormCode()) {
12618      composeCodeableConcept(t, "ExplanationOfBenefit", "formCode", element.getFormCode(), -1);
12619    }
12620    if (element.hasForm()) {
12621      composeAttachment(t, "ExplanationOfBenefit", "form", element.getForm(), -1);
12622    }
12623    for (int i = 0; i < element.getProcessNote().size(); i++) {
12624      composeExplanationOfBenefitNoteComponent(t, "ExplanationOfBenefit", "processNote", element.getProcessNote().get(i), i);
12625    }
12626    if (element.hasBenefitPeriod()) {
12627      composePeriod(t, "ExplanationOfBenefit", "benefitPeriod", element.getBenefitPeriod(), -1);
12628    }
12629    for (int i = 0; i < element.getBenefitBalance().size(); i++) {
12630      composeExplanationOfBenefitBenefitBalanceComponent(t, "ExplanationOfBenefit", "benefitBalance", element.getBenefitBalance().get(i), i);
12631    }
12632  }
12633
12634  protected void composeExplanationOfBenefitRelatedClaimComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.RelatedClaimComponent element, int index) {
12635    if (element == null) 
12636      return;
12637    Complex t;
12638    if (Utilities.noString(parentType))
12639      t = parent;
12640    else {
12641      t = parent.predicate("fhir:"+name,index > -1);
12642    }
12643    composeBackboneElement(t, "related", name, element, index);
12644    if (element.hasClaim()) {
12645      composeReference(t, "RelatedClaimComponent", "claim", element.getClaim(), -1);
12646    }
12647    if (element.hasRelationship()) {
12648      composeCodeableConcept(t, "RelatedClaimComponent", "relationship", element.getRelationship(), -1);
12649    }
12650    if (element.hasReference()) {
12651      composeIdentifier(t, "RelatedClaimComponent", "reference", element.getReference(), -1);
12652    }
12653  }
12654
12655  protected void composeExplanationOfBenefitEventComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.ExplanationOfBenefitEventComponent element, int index) {
12656    if (element == null) 
12657      return;
12658    Complex t;
12659    if (Utilities.noString(parentType))
12660      t = parent;
12661    else {
12662      t = parent.predicate("fhir:"+name,index > -1);
12663    }
12664    composeBackboneElement(t, "event", name, element, index);
12665    if (element.hasType()) {
12666      composeCodeableConcept(t, "ExplanationOfBenefitEventComponent", "type", element.getType(), -1);
12667    }
12668    if (element.hasWhen()) {
12669      composeType(t, "ExplanationOfBenefitEventComponent", "when", element.getWhen(), -1);
12670    }
12671  }
12672
12673  protected void composeExplanationOfBenefitPayeeComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.PayeeComponent element, int index) {
12674    if (element == null) 
12675      return;
12676    Complex t;
12677    if (Utilities.noString(parentType))
12678      t = parent;
12679    else {
12680      t = parent.predicate("fhir:"+name,index > -1);
12681    }
12682    composeBackboneElement(t, "payee", name, element, index);
12683    if (element.hasType()) {
12684      composeCodeableConcept(t, "PayeeComponent", "type", element.getType(), -1);
12685    }
12686    if (element.hasParty()) {
12687      composeReference(t, "PayeeComponent", "party", element.getParty(), -1);
12688    }
12689  }
12690
12691  protected void composeExplanationOfBenefitCareTeamComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.CareTeamComponent element, int index) {
12692    if (element == null) 
12693      return;
12694    Complex t;
12695    if (Utilities.noString(parentType))
12696      t = parent;
12697    else {
12698      t = parent.predicate("fhir:"+name,index > -1);
12699    }
12700    composeBackboneElement(t, "careTeam", name, element, index);
12701    if (element.hasSequenceElement()) {
12702      composePositiveInt(t, "CareTeamComponent", "sequence", element.getSequenceElement(), -1);
12703    }
12704    if (element.hasProvider()) {
12705      composeReference(t, "CareTeamComponent", "provider", element.getProvider(), -1);
12706    }
12707    if (element.hasResponsibleElement()) {
12708      composeBoolean(t, "CareTeamComponent", "responsible", element.getResponsibleElement(), -1);
12709    }
12710    if (element.hasRole()) {
12711      composeCodeableConcept(t, "CareTeamComponent", "role", element.getRole(), -1);
12712    }
12713    if (element.hasSpecialty()) {
12714      composeCodeableConcept(t, "CareTeamComponent", "specialty", element.getSpecialty(), -1);
12715    }
12716  }
12717
12718  protected void composeExplanationOfBenefitSupportingInformationComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.SupportingInformationComponent element, int index) {
12719    if (element == null) 
12720      return;
12721    Complex t;
12722    if (Utilities.noString(parentType))
12723      t = parent;
12724    else {
12725      t = parent.predicate("fhir:"+name,index > -1);
12726    }
12727    composeBackboneElement(t, "supportingInfo", name, element, index);
12728    if (element.hasSequenceElement()) {
12729      composePositiveInt(t, "SupportingInformationComponent", "sequence", element.getSequenceElement(), -1);
12730    }
12731    if (element.hasCategory()) {
12732      composeCodeableConcept(t, "SupportingInformationComponent", "category", element.getCategory(), -1);
12733    }
12734    if (element.hasCode()) {
12735      composeCodeableConcept(t, "SupportingInformationComponent", "code", element.getCode(), -1);
12736    }
12737    if (element.hasTiming()) {
12738      composeType(t, "SupportingInformationComponent", "timing", element.getTiming(), -1);
12739    }
12740    if (element.hasValue()) {
12741      composeType(t, "SupportingInformationComponent", "value", element.getValue(), -1);
12742    }
12743    if (element.hasReason()) {
12744      composeCoding(t, "SupportingInformationComponent", "reason", element.getReason(), -1);
12745    }
12746  }
12747
12748  protected void composeExplanationOfBenefitDiagnosisComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.DiagnosisComponent element, int index) {
12749    if (element == null) 
12750      return;
12751    Complex t;
12752    if (Utilities.noString(parentType))
12753      t = parent;
12754    else {
12755      t = parent.predicate("fhir:"+name,index > -1);
12756    }
12757    composeBackboneElement(t, "diagnosis", name, element, index);
12758    if (element.hasSequenceElement()) {
12759      composePositiveInt(t, "DiagnosisComponent", "sequence", element.getSequenceElement(), -1);
12760    }
12761    if (element.hasDiagnosis()) {
12762      composeType(t, "DiagnosisComponent", "diagnosis", element.getDiagnosis(), -1);
12763    }
12764    for (int i = 0; i < element.getType().size(); i++) {
12765      composeCodeableConcept(t, "DiagnosisComponent", "type", element.getType().get(i), i);
12766    }
12767    if (element.hasOnAdmission()) {
12768      composeCodeableConcept(t, "DiagnosisComponent", "onAdmission", element.getOnAdmission(), -1);
12769    }
12770  }
12771
12772  protected void composeExplanationOfBenefitProcedureComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.ProcedureComponent 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:"+name,index > -1);
12780    }
12781    composeBackboneElement(t, "procedure", name, element, index);
12782    if (element.hasSequenceElement()) {
12783      composePositiveInt(t, "ProcedureComponent", "sequence", element.getSequenceElement(), -1);
12784    }
12785    for (int i = 0; i < element.getType().size(); i++) {
12786      composeCodeableConcept(t, "ProcedureComponent", "type", element.getType().get(i), i);
12787    }
12788    if (element.hasDateElement()) {
12789      composeDateTime(t, "ProcedureComponent", "date", element.getDateElement(), -1);
12790    }
12791    if (element.hasProcedure()) {
12792      composeType(t, "ProcedureComponent", "procedure", element.getProcedure(), -1);
12793    }
12794    for (int i = 0; i < element.getUdi().size(); i++) {
12795      composeReference(t, "ProcedureComponent", "udi", element.getUdi().get(i), i);
12796    }
12797  }
12798
12799  protected void composeExplanationOfBenefitInsuranceComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.InsuranceComponent element, int index) {
12800    if (element == null) 
12801      return;
12802    Complex t;
12803    if (Utilities.noString(parentType))
12804      t = parent;
12805    else {
12806      t = parent.predicate("fhir:"+name,index > -1);
12807    }
12808    composeBackboneElement(t, "insurance", name, element, index);
12809    if (element.hasFocalElement()) {
12810      composeBoolean(t, "InsuranceComponent", "focal", element.getFocalElement(), -1);
12811    }
12812    if (element.hasCoverage()) {
12813      composeReference(t, "InsuranceComponent", "coverage", element.getCoverage(), -1);
12814    }
12815    for (int i = 0; i < element.getPreAuthRef().size(); i++) {
12816      composeString(t, "InsuranceComponent", "preAuthRef", element.getPreAuthRef().get(i), i);
12817    }
12818  }
12819
12820  protected void composeExplanationOfBenefitAccidentComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.AccidentComponent element, int index) {
12821    if (element == null) 
12822      return;
12823    Complex t;
12824    if (Utilities.noString(parentType))
12825      t = parent;
12826    else {
12827      t = parent.predicate("fhir:"+name,index > -1);
12828    }
12829    composeBackboneElement(t, "accident", name, element, index);
12830    if (element.hasDateElement()) {
12831      composeDate(t, "AccidentComponent", "date", element.getDateElement(), -1);
12832    }
12833    if (element.hasType()) {
12834      composeCodeableConcept(t, "AccidentComponent", "type", element.getType(), -1);
12835    }
12836    if (element.hasLocation()) {
12837      composeType(t, "AccidentComponent", "location", element.getLocation(), -1);
12838    }
12839  }
12840
12841  protected void composeExplanationOfBenefitItemComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.ItemComponent element, int index) {
12842    if (element == null) 
12843      return;
12844    Complex t;
12845    if (Utilities.noString(parentType))
12846      t = parent;
12847    else {
12848      t = parent.predicate("fhir:"+name,index > -1);
12849    }
12850    composeBackboneElement(t, "item", name, element, index);
12851    if (element.hasSequenceElement()) {
12852      composePositiveInt(t, "ItemComponent", "sequence", element.getSequenceElement(), -1);
12853    }
12854    for (int i = 0; i < element.getCareTeamSequence().size(); i++) {
12855      composePositiveInt(t, "ItemComponent", "careTeamSequence", element.getCareTeamSequence().get(i), i);
12856    }
12857    for (int i = 0; i < element.getDiagnosisSequence().size(); i++) {
12858      composePositiveInt(t, "ItemComponent", "diagnosisSequence", element.getDiagnosisSequence().get(i), i);
12859    }
12860    for (int i = 0; i < element.getProcedureSequence().size(); i++) {
12861      composePositiveInt(t, "ItemComponent", "procedureSequence", element.getProcedureSequence().get(i), i);
12862    }
12863    for (int i = 0; i < element.getInformationSequence().size(); i++) {
12864      composePositiveInt(t, "ItemComponent", "informationSequence", element.getInformationSequence().get(i), i);
12865    }
12866    for (int i = 0; i < element.getTraceNumber().size(); i++) {
12867      composeIdentifier(t, "ItemComponent", "traceNumber", element.getTraceNumber().get(i), i);
12868    }
12869    if (element.hasRevenue()) {
12870      composeCodeableConcept(t, "ItemComponent", "revenue", element.getRevenue(), -1);
12871    }
12872    if (element.hasCategory()) {
12873      composeCodeableConcept(t, "ItemComponent", "category", element.getCategory(), -1);
12874    }
12875    if (element.hasProductOrService()) {
12876      composeCodeableConcept(t, "ItemComponent", "productOrService", element.getProductOrService(), -1);
12877    }
12878    if (element.hasProductOrServiceEnd()) {
12879      composeCodeableConcept(t, "ItemComponent", "productOrServiceEnd", element.getProductOrServiceEnd(), -1);
12880    }
12881    for (int i = 0; i < element.getRequest().size(); i++) {
12882      composeReference(t, "ItemComponent", "request", element.getRequest().get(i), i);
12883    }
12884    for (int i = 0; i < element.getModifier().size(); i++) {
12885      composeCodeableConcept(t, "ItemComponent", "modifier", element.getModifier().get(i), i);
12886    }
12887    for (int i = 0; i < element.getProgramCode().size(); i++) {
12888      composeCodeableConcept(t, "ItemComponent", "programCode", element.getProgramCode().get(i), i);
12889    }
12890    if (element.hasServiced()) {
12891      composeType(t, "ItemComponent", "serviced", element.getServiced(), -1);
12892    }
12893    if (element.hasLocation()) {
12894      composeType(t, "ItemComponent", "location", element.getLocation(), -1);
12895    }
12896    if (element.hasPatientPaid()) {
12897      composeMoney(t, "ItemComponent", "patientPaid", element.getPatientPaid(), -1);
12898    }
12899    if (element.hasQuantity()) {
12900      composeQuantity(t, "ItemComponent", "quantity", element.getQuantity(), -1);
12901    }
12902    if (element.hasUnitPrice()) {
12903      composeMoney(t, "ItemComponent", "unitPrice", element.getUnitPrice(), -1);
12904    }
12905    if (element.hasFactorElement()) {
12906      composeDecimal(t, "ItemComponent", "factor", element.getFactorElement(), -1);
12907    }
12908    if (element.hasTax()) {
12909      composeMoney(t, "ItemComponent", "tax", element.getTax(), -1);
12910    }
12911    if (element.hasNet()) {
12912      composeMoney(t, "ItemComponent", "net", element.getNet(), -1);
12913    }
12914    for (int i = 0; i < element.getUdi().size(); i++) {
12915      composeReference(t, "ItemComponent", "udi", element.getUdi().get(i), i);
12916    }
12917    for (int i = 0; i < element.getBodySite().size(); i++) {
12918      composeExplanationOfBenefitItemBodySiteComponent(t, "ItemComponent", "bodySite", element.getBodySite().get(i), i);
12919    }
12920    for (int i = 0; i < element.getEncounter().size(); i++) {
12921      composeReference(t, "ItemComponent", "encounter", element.getEncounter().get(i), i);
12922    }
12923    for (int i = 0; i < element.getNoteNumber().size(); i++) {
12924      composePositiveInt(t, "ItemComponent", "noteNumber", element.getNoteNumber().get(i), i);
12925    }
12926    if (element.hasReviewOutcome()) {
12927      composeExplanationOfBenefitItemReviewOutcomeComponent(t, "ItemComponent", "reviewOutcome", element.getReviewOutcome(), -1);
12928    }
12929    for (int i = 0; i < element.getAdjudication().size(); i++) {
12930      composeExplanationOfBenefitAdjudicationComponent(t, "ItemComponent", "adjudication", element.getAdjudication().get(i), i);
12931    }
12932    for (int i = 0; i < element.getDetail().size(); i++) {
12933      composeExplanationOfBenefitDetailComponent(t, "ItemComponent", "detail", element.getDetail().get(i), i);
12934    }
12935  }
12936
12937  protected void composeExplanationOfBenefitItemBodySiteComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.ItemBodySiteComponent element, int index) {
12938    if (element == null) 
12939      return;
12940    Complex t;
12941    if (Utilities.noString(parentType))
12942      t = parent;
12943    else {
12944      t = parent.predicate("fhir:"+name,index > -1);
12945    }
12946    composeBackboneElement(t, "bodySite", name, element, index);
12947    for (int i = 0; i < element.getSite().size(); i++) {
12948      composeCodeableReference(t, "ItemBodySiteComponent", "site", element.getSite().get(i), i);
12949    }
12950    for (int i = 0; i < element.getSubSite().size(); i++) {
12951      composeCodeableConcept(t, "ItemBodySiteComponent", "subSite", element.getSubSite().get(i), i);
12952    }
12953  }
12954
12955  protected void composeExplanationOfBenefitItemReviewOutcomeComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.ItemReviewOutcomeComponent element, int index) {
12956    if (element == null) 
12957      return;
12958    Complex t;
12959    if (Utilities.noString(parentType))
12960      t = parent;
12961    else {
12962      t = parent.predicate("fhir:"+name,index > -1);
12963    }
12964    composeBackboneElement(t, "reviewOutcome", name, element, index);
12965    if (element.hasDecision()) {
12966      composeCodeableConcept(t, "ItemReviewOutcomeComponent", "decision", element.getDecision(), -1);
12967    }
12968    for (int i = 0; i < element.getReason().size(); i++) {
12969      composeCodeableConcept(t, "ItemReviewOutcomeComponent", "reason", element.getReason().get(i), i);
12970    }
12971    if (element.hasPreAuthRefElement()) {
12972      composeString(t, "ItemReviewOutcomeComponent", "preAuthRef", element.getPreAuthRefElement(), -1);
12973    }
12974    if (element.hasPreAuthPeriod()) {
12975      composePeriod(t, "ItemReviewOutcomeComponent", "preAuthPeriod", element.getPreAuthPeriod(), -1);
12976    }
12977  }
12978
12979  protected void composeExplanationOfBenefitAdjudicationComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.AdjudicationComponent element, int index) {
12980    if (element == null) 
12981      return;
12982    Complex t;
12983    if (Utilities.noString(parentType))
12984      t = parent;
12985    else {
12986      t = parent.predicate("fhir:"+name,index > -1);
12987    }
12988    composeBackboneElement(t, "adjudication", name, element, index);
12989    if (element.hasCategory()) {
12990      composeCodeableConcept(t, "AdjudicationComponent", "category", element.getCategory(), -1);
12991    }
12992    if (element.hasReason()) {
12993      composeCodeableConcept(t, "AdjudicationComponent", "reason", element.getReason(), -1);
12994    }
12995    if (element.hasAmount()) {
12996      composeMoney(t, "AdjudicationComponent", "amount", element.getAmount(), -1);
12997    }
12998    if (element.hasQuantity()) {
12999      composeQuantity(t, "AdjudicationComponent", "quantity", element.getQuantity(), -1);
13000    }
13001  }
13002
13003  protected void composeExplanationOfBenefitDetailComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.DetailComponent element, int index) {
13004    if (element == null) 
13005      return;
13006    Complex t;
13007    if (Utilities.noString(parentType))
13008      t = parent;
13009    else {
13010      t = parent.predicate("fhir:"+name,index > -1);
13011    }
13012    composeBackboneElement(t, "detail", name, element, index);
13013    if (element.hasSequenceElement()) {
13014      composePositiveInt(t, "DetailComponent", "sequence", element.getSequenceElement(), -1);
13015    }
13016    for (int i = 0; i < element.getTraceNumber().size(); i++) {
13017      composeIdentifier(t, "DetailComponent", "traceNumber", element.getTraceNumber().get(i), i);
13018    }
13019    if (element.hasRevenue()) {
13020      composeCodeableConcept(t, "DetailComponent", "revenue", element.getRevenue(), -1);
13021    }
13022    if (element.hasCategory()) {
13023      composeCodeableConcept(t, "DetailComponent", "category", element.getCategory(), -1);
13024    }
13025    if (element.hasProductOrService()) {
13026      composeCodeableConcept(t, "DetailComponent", "productOrService", element.getProductOrService(), -1);
13027    }
13028    if (element.hasProductOrServiceEnd()) {
13029      composeCodeableConcept(t, "DetailComponent", "productOrServiceEnd", element.getProductOrServiceEnd(), -1);
13030    }
13031    for (int i = 0; i < element.getModifier().size(); i++) {
13032      composeCodeableConcept(t, "DetailComponent", "modifier", element.getModifier().get(i), i);
13033    }
13034    for (int i = 0; i < element.getProgramCode().size(); i++) {
13035      composeCodeableConcept(t, "DetailComponent", "programCode", element.getProgramCode().get(i), i);
13036    }
13037    if (element.hasPatientPaid()) {
13038      composeMoney(t, "DetailComponent", "patientPaid", element.getPatientPaid(), -1);
13039    }
13040    if (element.hasQuantity()) {
13041      composeQuantity(t, "DetailComponent", "quantity", element.getQuantity(), -1);
13042    }
13043    if (element.hasUnitPrice()) {
13044      composeMoney(t, "DetailComponent", "unitPrice", element.getUnitPrice(), -1);
13045    }
13046    if (element.hasFactorElement()) {
13047      composeDecimal(t, "DetailComponent", "factor", element.getFactorElement(), -1);
13048    }
13049    if (element.hasTax()) {
13050      composeMoney(t, "DetailComponent", "tax", element.getTax(), -1);
13051    }
13052    if (element.hasNet()) {
13053      composeMoney(t, "DetailComponent", "net", element.getNet(), -1);
13054    }
13055    for (int i = 0; i < element.getUdi().size(); i++) {
13056      composeReference(t, "DetailComponent", "udi", element.getUdi().get(i), i);
13057    }
13058    for (int i = 0; i < element.getNoteNumber().size(); i++) {
13059      composePositiveInt(t, "DetailComponent", "noteNumber", element.getNoteNumber().get(i), i);
13060    }
13061    if (element.hasReviewOutcome()) {
13062      composeExplanationOfBenefitItemReviewOutcomeComponent(t, "DetailComponent", "reviewOutcome", element.getReviewOutcome(), -1);
13063    }
13064    for (int i = 0; i < element.getAdjudication().size(); i++) {
13065      composeExplanationOfBenefitAdjudicationComponent(t, "DetailComponent", "adjudication", element.getAdjudication().get(i), i);
13066    }
13067    for (int i = 0; i < element.getSubDetail().size(); i++) {
13068      composeExplanationOfBenefitSubDetailComponent(t, "DetailComponent", "subDetail", element.getSubDetail().get(i), i);
13069    }
13070  }
13071
13072  protected void composeExplanationOfBenefitSubDetailComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.SubDetailComponent element, int index) {
13073    if (element == null) 
13074      return;
13075    Complex t;
13076    if (Utilities.noString(parentType))
13077      t = parent;
13078    else {
13079      t = parent.predicate("fhir:"+name,index > -1);
13080    }
13081    composeBackboneElement(t, "subDetail", name, element, index);
13082    if (element.hasSequenceElement()) {
13083      composePositiveInt(t, "SubDetailComponent", "sequence", element.getSequenceElement(), -1);
13084    }
13085    for (int i = 0; i < element.getTraceNumber().size(); i++) {
13086      composeIdentifier(t, "SubDetailComponent", "traceNumber", element.getTraceNumber().get(i), i);
13087    }
13088    if (element.hasRevenue()) {
13089      composeCodeableConcept(t, "SubDetailComponent", "revenue", element.getRevenue(), -1);
13090    }
13091    if (element.hasCategory()) {
13092      composeCodeableConcept(t, "SubDetailComponent", "category", element.getCategory(), -1);
13093    }
13094    if (element.hasProductOrService()) {
13095      composeCodeableConcept(t, "SubDetailComponent", "productOrService", element.getProductOrService(), -1);
13096    }
13097    if (element.hasProductOrServiceEnd()) {
13098      composeCodeableConcept(t, "SubDetailComponent", "productOrServiceEnd", element.getProductOrServiceEnd(), -1);
13099    }
13100    for (int i = 0; i < element.getModifier().size(); i++) {
13101      composeCodeableConcept(t, "SubDetailComponent", "modifier", element.getModifier().get(i), i);
13102    }
13103    for (int i = 0; i < element.getProgramCode().size(); i++) {
13104      composeCodeableConcept(t, "SubDetailComponent", "programCode", element.getProgramCode().get(i), i);
13105    }
13106    if (element.hasPatientPaid()) {
13107      composeMoney(t, "SubDetailComponent", "patientPaid", element.getPatientPaid(), -1);
13108    }
13109    if (element.hasQuantity()) {
13110      composeQuantity(t, "SubDetailComponent", "quantity", element.getQuantity(), -1);
13111    }
13112    if (element.hasUnitPrice()) {
13113      composeMoney(t, "SubDetailComponent", "unitPrice", element.getUnitPrice(), -1);
13114    }
13115    if (element.hasFactorElement()) {
13116      composeDecimal(t, "SubDetailComponent", "factor", element.getFactorElement(), -1);
13117    }
13118    if (element.hasTax()) {
13119      composeMoney(t, "SubDetailComponent", "tax", element.getTax(), -1);
13120    }
13121    if (element.hasNet()) {
13122      composeMoney(t, "SubDetailComponent", "net", element.getNet(), -1);
13123    }
13124    for (int i = 0; i < element.getUdi().size(); i++) {
13125      composeReference(t, "SubDetailComponent", "udi", element.getUdi().get(i), i);
13126    }
13127    for (int i = 0; i < element.getNoteNumber().size(); i++) {
13128      composePositiveInt(t, "SubDetailComponent", "noteNumber", element.getNoteNumber().get(i), i);
13129    }
13130    if (element.hasReviewOutcome()) {
13131      composeExplanationOfBenefitItemReviewOutcomeComponent(t, "SubDetailComponent", "reviewOutcome", element.getReviewOutcome(), -1);
13132    }
13133    for (int i = 0; i < element.getAdjudication().size(); i++) {
13134      composeExplanationOfBenefitAdjudicationComponent(t, "SubDetailComponent", "adjudication", element.getAdjudication().get(i), i);
13135    }
13136  }
13137
13138  protected void composeExplanationOfBenefitAddedItemComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.AddedItemComponent element, int index) {
13139    if (element == null) 
13140      return;
13141    Complex t;
13142    if (Utilities.noString(parentType))
13143      t = parent;
13144    else {
13145      t = parent.predicate("fhir:"+name,index > -1);
13146    }
13147    composeBackboneElement(t, "addItem", name, element, index);
13148    for (int i = 0; i < element.getItemSequence().size(); i++) {
13149      composePositiveInt(t, "AddedItemComponent", "itemSequence", element.getItemSequence().get(i), i);
13150    }
13151    for (int i = 0; i < element.getDetailSequence().size(); i++) {
13152      composePositiveInt(t, "AddedItemComponent", "detailSequence", element.getDetailSequence().get(i), i);
13153    }
13154    for (int i = 0; i < element.getSubDetailSequence().size(); i++) {
13155      composePositiveInt(t, "AddedItemComponent", "subDetailSequence", element.getSubDetailSequence().get(i), i);
13156    }
13157    for (int i = 0; i < element.getTraceNumber().size(); i++) {
13158      composeIdentifier(t, "AddedItemComponent", "traceNumber", element.getTraceNumber().get(i), i);
13159    }
13160    for (int i = 0; i < element.getProvider().size(); i++) {
13161      composeReference(t, "AddedItemComponent", "provider", element.getProvider().get(i), i);
13162    }
13163    if (element.hasRevenue()) {
13164      composeCodeableConcept(t, "AddedItemComponent", "revenue", element.getRevenue(), -1);
13165    }
13166    if (element.hasProductOrService()) {
13167      composeCodeableConcept(t, "AddedItemComponent", "productOrService", element.getProductOrService(), -1);
13168    }
13169    if (element.hasProductOrServiceEnd()) {
13170      composeCodeableConcept(t, "AddedItemComponent", "productOrServiceEnd", element.getProductOrServiceEnd(), -1);
13171    }
13172    for (int i = 0; i < element.getRequest().size(); i++) {
13173      composeReference(t, "AddedItemComponent", "request", element.getRequest().get(i), i);
13174    }
13175    for (int i = 0; i < element.getModifier().size(); i++) {
13176      composeCodeableConcept(t, "AddedItemComponent", "modifier", element.getModifier().get(i), i);
13177    }
13178    for (int i = 0; i < element.getProgramCode().size(); i++) {
13179      composeCodeableConcept(t, "AddedItemComponent", "programCode", element.getProgramCode().get(i), i);
13180    }
13181    if (element.hasServiced()) {
13182      composeType(t, "AddedItemComponent", "serviced", element.getServiced(), -1);
13183    }
13184    if (element.hasLocation()) {
13185      composeType(t, "AddedItemComponent", "location", element.getLocation(), -1);
13186    }
13187    if (element.hasPatientPaid()) {
13188      composeMoney(t, "AddedItemComponent", "patientPaid", element.getPatientPaid(), -1);
13189    }
13190    if (element.hasQuantity()) {
13191      composeQuantity(t, "AddedItemComponent", "quantity", element.getQuantity(), -1);
13192    }
13193    if (element.hasUnitPrice()) {
13194      composeMoney(t, "AddedItemComponent", "unitPrice", element.getUnitPrice(), -1);
13195    }
13196    if (element.hasFactorElement()) {
13197      composeDecimal(t, "AddedItemComponent", "factor", element.getFactorElement(), -1);
13198    }
13199    if (element.hasTax()) {
13200      composeMoney(t, "AddedItemComponent", "tax", element.getTax(), -1);
13201    }
13202    if (element.hasNet()) {
13203      composeMoney(t, "AddedItemComponent", "net", element.getNet(), -1);
13204    }
13205    for (int i = 0; i < element.getBodySite().size(); i++) {
13206      composeExplanationOfBenefitAddedItemBodySiteComponent(t, "AddedItemComponent", "bodySite", element.getBodySite().get(i), i);
13207    }
13208    for (int i = 0; i < element.getNoteNumber().size(); i++) {
13209      composePositiveInt(t, "AddedItemComponent", "noteNumber", element.getNoteNumber().get(i), i);
13210    }
13211    if (element.hasReviewOutcome()) {
13212      composeExplanationOfBenefitItemReviewOutcomeComponent(t, "AddedItemComponent", "reviewOutcome", element.getReviewOutcome(), -1);
13213    }
13214    for (int i = 0; i < element.getAdjudication().size(); i++) {
13215      composeExplanationOfBenefitAdjudicationComponent(t, "AddedItemComponent", "adjudication", element.getAdjudication().get(i), i);
13216    }
13217    for (int i = 0; i < element.getDetail().size(); i++) {
13218      composeExplanationOfBenefitAddedItemDetailComponent(t, "AddedItemComponent", "detail", element.getDetail().get(i), i);
13219    }
13220  }
13221
13222  protected void composeExplanationOfBenefitAddedItemBodySiteComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.AddedItemBodySiteComponent element, int index) {
13223    if (element == null) 
13224      return;
13225    Complex t;
13226    if (Utilities.noString(parentType))
13227      t = parent;
13228    else {
13229      t = parent.predicate("fhir:"+name,index > -1);
13230    }
13231    composeBackboneElement(t, "bodySite", name, element, index);
13232    for (int i = 0; i < element.getSite().size(); i++) {
13233      composeCodeableReference(t, "AddedItemBodySiteComponent", "site", element.getSite().get(i), i);
13234    }
13235    for (int i = 0; i < element.getSubSite().size(); i++) {
13236      composeCodeableConcept(t, "AddedItemBodySiteComponent", "subSite", element.getSubSite().get(i), i);
13237    }
13238  }
13239
13240  protected void composeExplanationOfBenefitAddedItemDetailComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.AddedItemDetailComponent element, int index) {
13241    if (element == null) 
13242      return;
13243    Complex t;
13244    if (Utilities.noString(parentType))
13245      t = parent;
13246    else {
13247      t = parent.predicate("fhir:"+name,index > -1);
13248    }
13249    composeBackboneElement(t, "detail", name, element, index);
13250    for (int i = 0; i < element.getTraceNumber().size(); i++) {
13251      composeIdentifier(t, "AddedItemDetailComponent", "traceNumber", element.getTraceNumber().get(i), i);
13252    }
13253    if (element.hasRevenue()) {
13254      composeCodeableConcept(t, "AddedItemDetailComponent", "revenue", element.getRevenue(), -1);
13255    }
13256    if (element.hasProductOrService()) {
13257      composeCodeableConcept(t, "AddedItemDetailComponent", "productOrService", element.getProductOrService(), -1);
13258    }
13259    if (element.hasProductOrServiceEnd()) {
13260      composeCodeableConcept(t, "AddedItemDetailComponent", "productOrServiceEnd", element.getProductOrServiceEnd(), -1);
13261    }
13262    for (int i = 0; i < element.getModifier().size(); i++) {
13263      composeCodeableConcept(t, "AddedItemDetailComponent", "modifier", element.getModifier().get(i), i);
13264    }
13265    if (element.hasPatientPaid()) {
13266      composeMoney(t, "AddedItemDetailComponent", "patientPaid", element.getPatientPaid(), -1);
13267    }
13268    if (element.hasQuantity()) {
13269      composeQuantity(t, "AddedItemDetailComponent", "quantity", element.getQuantity(), -1);
13270    }
13271    if (element.hasUnitPrice()) {
13272      composeMoney(t, "AddedItemDetailComponent", "unitPrice", element.getUnitPrice(), -1);
13273    }
13274    if (element.hasFactorElement()) {
13275      composeDecimal(t, "AddedItemDetailComponent", "factor", element.getFactorElement(), -1);
13276    }
13277    if (element.hasTax()) {
13278      composeMoney(t, "AddedItemDetailComponent", "tax", element.getTax(), -1);
13279    }
13280    if (element.hasNet()) {
13281      composeMoney(t, "AddedItemDetailComponent", "net", element.getNet(), -1);
13282    }
13283    for (int i = 0; i < element.getNoteNumber().size(); i++) {
13284      composePositiveInt(t, "AddedItemDetailComponent", "noteNumber", element.getNoteNumber().get(i), i);
13285    }
13286    if (element.hasReviewOutcome()) {
13287      composeExplanationOfBenefitItemReviewOutcomeComponent(t, "AddedItemDetailComponent", "reviewOutcome", element.getReviewOutcome(), -1);
13288    }
13289    for (int i = 0; i < element.getAdjudication().size(); i++) {
13290      composeExplanationOfBenefitAdjudicationComponent(t, "AddedItemDetailComponent", "adjudication", element.getAdjudication().get(i), i);
13291    }
13292    for (int i = 0; i < element.getSubDetail().size(); i++) {
13293      composeExplanationOfBenefitAddedItemDetailSubDetailComponent(t, "AddedItemDetailComponent", "subDetail", element.getSubDetail().get(i), i);
13294    }
13295  }
13296
13297  protected void composeExplanationOfBenefitAddedItemDetailSubDetailComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.AddedItemDetailSubDetailComponent element, int index) {
13298    if (element == null) 
13299      return;
13300    Complex t;
13301    if (Utilities.noString(parentType))
13302      t = parent;
13303    else {
13304      t = parent.predicate("fhir:"+name,index > -1);
13305    }
13306    composeBackboneElement(t, "subDetail", name, element, index);
13307    for (int i = 0; i < element.getTraceNumber().size(); i++) {
13308      composeIdentifier(t, "AddedItemDetailSubDetailComponent", "traceNumber", element.getTraceNumber().get(i), i);
13309    }
13310    if (element.hasRevenue()) {
13311      composeCodeableConcept(t, "AddedItemDetailSubDetailComponent", "revenue", element.getRevenue(), -1);
13312    }
13313    if (element.hasProductOrService()) {
13314      composeCodeableConcept(t, "AddedItemDetailSubDetailComponent", "productOrService", element.getProductOrService(), -1);
13315    }
13316    if (element.hasProductOrServiceEnd()) {
13317      composeCodeableConcept(t, "AddedItemDetailSubDetailComponent", "productOrServiceEnd", element.getProductOrServiceEnd(), -1);
13318    }
13319    for (int i = 0; i < element.getModifier().size(); i++) {
13320      composeCodeableConcept(t, "AddedItemDetailSubDetailComponent", "modifier", element.getModifier().get(i), i);
13321    }
13322    if (element.hasPatientPaid()) {
13323      composeMoney(t, "AddedItemDetailSubDetailComponent", "patientPaid", element.getPatientPaid(), -1);
13324    }
13325    if (element.hasQuantity()) {
13326      composeQuantity(t, "AddedItemDetailSubDetailComponent", "quantity", element.getQuantity(), -1);
13327    }
13328    if (element.hasUnitPrice()) {
13329      composeMoney(t, "AddedItemDetailSubDetailComponent", "unitPrice", element.getUnitPrice(), -1);
13330    }
13331    if (element.hasFactorElement()) {
13332      composeDecimal(t, "AddedItemDetailSubDetailComponent", "factor", element.getFactorElement(), -1);
13333    }
13334    if (element.hasTax()) {
13335      composeMoney(t, "AddedItemDetailSubDetailComponent", "tax", element.getTax(), -1);
13336    }
13337    if (element.hasNet()) {
13338      composeMoney(t, "AddedItemDetailSubDetailComponent", "net", element.getNet(), -1);
13339    }
13340    for (int i = 0; i < element.getNoteNumber().size(); i++) {
13341      composePositiveInt(t, "AddedItemDetailSubDetailComponent", "noteNumber", element.getNoteNumber().get(i), i);
13342    }
13343    if (element.hasReviewOutcome()) {
13344      composeExplanationOfBenefitItemReviewOutcomeComponent(t, "AddedItemDetailSubDetailComponent", "reviewOutcome", element.getReviewOutcome(), -1);
13345    }
13346    for (int i = 0; i < element.getAdjudication().size(); i++) {
13347      composeExplanationOfBenefitAdjudicationComponent(t, "AddedItemDetailSubDetailComponent", "adjudication", element.getAdjudication().get(i), i);
13348    }
13349  }
13350
13351  protected void composeExplanationOfBenefitTotalComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.TotalComponent element, int index) {
13352    if (element == null) 
13353      return;
13354    Complex t;
13355    if (Utilities.noString(parentType))
13356      t = parent;
13357    else {
13358      t = parent.predicate("fhir:"+name,index > -1);
13359    }
13360    composeBackboneElement(t, "total", name, element, index);
13361    if (element.hasCategory()) {
13362      composeCodeableConcept(t, "TotalComponent", "category", element.getCategory(), -1);
13363    }
13364    if (element.hasAmount()) {
13365      composeMoney(t, "TotalComponent", "amount", element.getAmount(), -1);
13366    }
13367  }
13368
13369  protected void composeExplanationOfBenefitPaymentComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.PaymentComponent element, int index) {
13370    if (element == null) 
13371      return;
13372    Complex t;
13373    if (Utilities.noString(parentType))
13374      t = parent;
13375    else {
13376      t = parent.predicate("fhir:"+name,index > -1);
13377    }
13378    composeBackboneElement(t, "payment", name, element, index);
13379    if (element.hasType()) {
13380      composeCodeableConcept(t, "PaymentComponent", "type", element.getType(), -1);
13381    }
13382    if (element.hasAdjustment()) {
13383      composeMoney(t, "PaymentComponent", "adjustment", element.getAdjustment(), -1);
13384    }
13385    if (element.hasAdjustmentReason()) {
13386      composeCodeableConcept(t, "PaymentComponent", "adjustmentReason", element.getAdjustmentReason(), -1);
13387    }
13388    if (element.hasDateElement()) {
13389      composeDate(t, "PaymentComponent", "date", element.getDateElement(), -1);
13390    }
13391    if (element.hasAmount()) {
13392      composeMoney(t, "PaymentComponent", "amount", element.getAmount(), -1);
13393    }
13394    if (element.hasIdentifier()) {
13395      composeIdentifier(t, "PaymentComponent", "identifier", element.getIdentifier(), -1);
13396    }
13397  }
13398
13399  protected void composeExplanationOfBenefitNoteComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.NoteComponent element, int index) {
13400    if (element == null) 
13401      return;
13402    Complex t;
13403    if (Utilities.noString(parentType))
13404      t = parent;
13405    else {
13406      t = parent.predicate("fhir:"+name,index > -1);
13407    }
13408    composeBackboneElement(t, "processNote", name, element, index);
13409    if (element.hasNumberElement()) {
13410      composePositiveInt(t, "NoteComponent", "number", element.getNumberElement(), -1);
13411    }
13412    if (element.hasType()) {
13413      composeCodeableConcept(t, "NoteComponent", "type", element.getType(), -1);
13414    }
13415    if (element.hasTextElement()) {
13416      composeString(t, "NoteComponent", "text", element.getTextElement(), -1);
13417    }
13418    if (element.hasLanguage()) {
13419      composeCodeableConcept(t, "NoteComponent", "language", element.getLanguage(), -1);
13420    }
13421  }
13422
13423  protected void composeExplanationOfBenefitBenefitBalanceComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.BenefitBalanceComponent element, int index) {
13424    if (element == null) 
13425      return;
13426    Complex t;
13427    if (Utilities.noString(parentType))
13428      t = parent;
13429    else {
13430      t = parent.predicate("fhir:"+name,index > -1);
13431    }
13432    composeBackboneElement(t, "benefitBalance", name, element, index);
13433    if (element.hasCategory()) {
13434      composeCodeableConcept(t, "BenefitBalanceComponent", "category", element.getCategory(), -1);
13435    }
13436    if (element.hasExcludedElement()) {
13437      composeBoolean(t, "BenefitBalanceComponent", "excluded", element.getExcludedElement(), -1);
13438    }
13439    if (element.hasNameElement()) {
13440      composeString(t, "BenefitBalanceComponent", "name", element.getNameElement(), -1);
13441    }
13442    if (element.hasDescriptionElement()) {
13443      composeString(t, "BenefitBalanceComponent", "description", element.getDescriptionElement(), -1);
13444    }
13445    if (element.hasNetwork()) {
13446      composeCodeableConcept(t, "BenefitBalanceComponent", "network", element.getNetwork(), -1);
13447    }
13448    if (element.hasUnit()) {
13449      composeCodeableConcept(t, "BenefitBalanceComponent", "unit", element.getUnit(), -1);
13450    }
13451    if (element.hasTerm()) {
13452      composeCodeableConcept(t, "BenefitBalanceComponent", "term", element.getTerm(), -1);
13453    }
13454    for (int i = 0; i < element.getFinancial().size(); i++) {
13455      composeExplanationOfBenefitBenefitComponent(t, "BenefitBalanceComponent", "financial", element.getFinancial().get(i), i);
13456    }
13457  }
13458
13459  protected void composeExplanationOfBenefitBenefitComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.BenefitComponent element, int index) {
13460    if (element == null) 
13461      return;
13462    Complex t;
13463    if (Utilities.noString(parentType))
13464      t = parent;
13465    else {
13466      t = parent.predicate("fhir:"+name,index > -1);
13467    }
13468    composeBackboneElement(t, "financial", name, element, index);
13469    if (element.hasType()) {
13470      composeCodeableConcept(t, "BenefitComponent", "type", element.getType(), -1);
13471    }
13472    if (element.hasAllowed()) {
13473      composeType(t, "BenefitComponent", "allowed", element.getAllowed(), -1);
13474    }
13475    if (element.hasUsed()) {
13476      composeType(t, "BenefitComponent", "used", element.getUsed(), -1);
13477    }
13478  }
13479
13480  protected void composeFamilyMemberHistory(Complex parent, String parentType, String name, FamilyMemberHistory element, int index) {
13481    if (element == null) 
13482      return;
13483    Complex t;
13484    if (Utilities.noString(parentType))
13485      t = parent;
13486    else {
13487      t = parent.predicate("fhir:"+name,index > -1);
13488    }
13489    composeDomainResource(t, "FamilyMemberHistory", name, element, index);
13490    for (int i = 0; i < element.getIdentifier().size(); i++) {
13491      composeIdentifier(t, "FamilyMemberHistory", "identifier", element.getIdentifier().get(i), i);
13492    }
13493    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
13494      composeCanonical(t, "FamilyMemberHistory", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
13495    }
13496    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
13497      composeUri(t, "FamilyMemberHistory", "instantiatesUri", element.getInstantiatesUri().get(i), i);
13498    }
13499    if (element.hasStatusElement()) {
13500      composeEnum(t, "FamilyMemberHistory", "status", element.getStatusElement(), -1);
13501    }
13502    if (element.hasDataAbsentReason()) {
13503      composeCodeableConcept(t, "FamilyMemberHistory", "dataAbsentReason", element.getDataAbsentReason(), -1);
13504    }
13505    if (element.hasPatient()) {
13506      composeReference(t, "FamilyMemberHistory", "patient", element.getPatient(), -1);
13507    }
13508    if (element.hasDateElement()) {
13509      composeDateTime(t, "FamilyMemberHistory", "date", element.getDateElement(), -1);
13510    }
13511    for (int i = 0; i < element.getParticipant().size(); i++) {
13512      composeFamilyMemberHistoryParticipantComponent(t, "FamilyMemberHistory", "participant", element.getParticipant().get(i), i);
13513    }
13514    if (element.hasNameElement()) {
13515      composeString(t, "FamilyMemberHistory", "name", element.getNameElement(), -1);
13516    }
13517    if (element.hasRelationship()) {
13518      composeCodeableConcept(t, "FamilyMemberHistory", "relationship", element.getRelationship(), -1);
13519    }
13520    if (element.hasSex()) {
13521      composeCodeableConcept(t, "FamilyMemberHistory", "sex", element.getSex(), -1);
13522    }
13523    if (element.hasBorn()) {
13524      composeType(t, "FamilyMemberHistory", "born", element.getBorn(), -1);
13525    }
13526    if (element.hasAge()) {
13527      composeType(t, "FamilyMemberHistory", "age", element.getAge(), -1);
13528    }
13529    if (element.hasEstimatedAgeElement()) {
13530      composeBoolean(t, "FamilyMemberHistory", "estimatedAge", element.getEstimatedAgeElement(), -1);
13531    }
13532    if (element.hasDeceased()) {
13533      composeType(t, "FamilyMemberHistory", "deceased", element.getDeceased(), -1);
13534    }
13535    for (int i = 0; i < element.getReason().size(); i++) {
13536      composeCodeableReference(t, "FamilyMemberHistory", "reason", element.getReason().get(i), i);
13537    }
13538    for (int i = 0; i < element.getNote().size(); i++) {
13539      composeAnnotation(t, "FamilyMemberHistory", "note", element.getNote().get(i), i);
13540    }
13541    for (int i = 0; i < element.getCondition().size(); i++) {
13542      composeFamilyMemberHistoryConditionComponent(t, "FamilyMemberHistory", "condition", element.getCondition().get(i), i);
13543    }
13544    for (int i = 0; i < element.getProcedure().size(); i++) {
13545      composeFamilyMemberHistoryProcedureComponent(t, "FamilyMemberHistory", "procedure", element.getProcedure().get(i), i);
13546    }
13547  }
13548
13549  protected void composeFamilyMemberHistoryParticipantComponent(Complex parent, String parentType, String name, FamilyMemberHistory.FamilyMemberHistoryParticipantComponent element, int index) {
13550    if (element == null) 
13551      return;
13552    Complex t;
13553    if (Utilities.noString(parentType))
13554      t = parent;
13555    else {
13556      t = parent.predicate("fhir:"+name,index > -1);
13557    }
13558    composeBackboneElement(t, "participant", name, element, index);
13559    if (element.hasFunction()) {
13560      composeCodeableConcept(t, "FamilyMemberHistoryParticipantComponent", "function", element.getFunction(), -1);
13561    }
13562    if (element.hasActor()) {
13563      composeReference(t, "FamilyMemberHistoryParticipantComponent", "actor", element.getActor(), -1);
13564    }
13565  }
13566
13567  protected void composeFamilyMemberHistoryConditionComponent(Complex parent, String parentType, String name, FamilyMemberHistory.FamilyMemberHistoryConditionComponent element, int index) {
13568    if (element == null) 
13569      return;
13570    Complex t;
13571    if (Utilities.noString(parentType))
13572      t = parent;
13573    else {
13574      t = parent.predicate("fhir:"+name,index > -1);
13575    }
13576    composeBackboneElement(t, "condition", name, element, index);
13577    if (element.hasCode()) {
13578      composeCodeableConcept(t, "FamilyMemberHistoryConditionComponent", "code", element.getCode(), -1);
13579    }
13580    if (element.hasOutcome()) {
13581      composeCodeableConcept(t, "FamilyMemberHistoryConditionComponent", "outcome", element.getOutcome(), -1);
13582    }
13583    if (element.hasContributedToDeathElement()) {
13584      composeBoolean(t, "FamilyMemberHistoryConditionComponent", "contributedToDeath", element.getContributedToDeathElement(), -1);
13585    }
13586    if (element.hasOnset()) {
13587      composeType(t, "FamilyMemberHistoryConditionComponent", "onset", element.getOnset(), -1);
13588    }
13589    for (int i = 0; i < element.getNote().size(); i++) {
13590      composeAnnotation(t, "FamilyMemberHistoryConditionComponent", "note", element.getNote().get(i), i);
13591    }
13592  }
13593
13594  protected void composeFamilyMemberHistoryProcedureComponent(Complex parent, String parentType, String name, FamilyMemberHistory.FamilyMemberHistoryProcedureComponent element, int index) {
13595    if (element == null) 
13596      return;
13597    Complex t;
13598    if (Utilities.noString(parentType))
13599      t = parent;
13600    else {
13601      t = parent.predicate("fhir:"+name,index > -1);
13602    }
13603    composeBackboneElement(t, "procedure", name, element, index);
13604    if (element.hasCode()) {
13605      composeCodeableConcept(t, "FamilyMemberHistoryProcedureComponent", "code", element.getCode(), -1);
13606    }
13607    if (element.hasOutcome()) {
13608      composeCodeableConcept(t, "FamilyMemberHistoryProcedureComponent", "outcome", element.getOutcome(), -1);
13609    }
13610    if (element.hasContributedToDeathElement()) {
13611      composeBoolean(t, "FamilyMemberHistoryProcedureComponent", "contributedToDeath", element.getContributedToDeathElement(), -1);
13612    }
13613    if (element.hasPerformed()) {
13614      composeType(t, "FamilyMemberHistoryProcedureComponent", "performed", element.getPerformed(), -1);
13615    }
13616    for (int i = 0; i < element.getNote().size(); i++) {
13617      composeAnnotation(t, "FamilyMemberHistoryProcedureComponent", "note", element.getNote().get(i), i);
13618    }
13619  }
13620
13621  protected void composeFlag(Complex parent, String parentType, String name, Flag element, int index) {
13622    if (element == null) 
13623      return;
13624    Complex t;
13625    if (Utilities.noString(parentType))
13626      t = parent;
13627    else {
13628      t = parent.predicate("fhir:"+name,index > -1);
13629    }
13630    composeDomainResource(t, "Flag", name, element, index);
13631    for (int i = 0; i < element.getIdentifier().size(); i++) {
13632      composeIdentifier(t, "Flag", "identifier", element.getIdentifier().get(i), i);
13633    }
13634    if (element.hasStatusElement()) {
13635      composeEnum(t, "Flag", "status", element.getStatusElement(), -1);
13636    }
13637    for (int i = 0; i < element.getCategory().size(); i++) {
13638      composeCodeableConcept(t, "Flag", "category", element.getCategory().get(i), i);
13639    }
13640    if (element.hasCode()) {
13641      composeCodeableConcept(t, "Flag", "code", element.getCode(), -1);
13642    }
13643    if (element.hasSubject()) {
13644      composeReference(t, "Flag", "subject", element.getSubject(), -1);
13645    }
13646    if (element.hasPeriod()) {
13647      composePeriod(t, "Flag", "period", element.getPeriod(), -1);
13648    }
13649    if (element.hasEncounter()) {
13650      composeReference(t, "Flag", "encounter", element.getEncounter(), -1);
13651    }
13652    if (element.hasAuthor()) {
13653      composeReference(t, "Flag", "author", element.getAuthor(), -1);
13654    }
13655  }
13656
13657  protected void composeFormularyItem(Complex parent, String parentType, String name, FormularyItem element, int index) {
13658    if (element == null) 
13659      return;
13660    Complex t;
13661    if (Utilities.noString(parentType))
13662      t = parent;
13663    else {
13664      t = parent.predicate("fhir:"+name,index > -1);
13665    }
13666    composeDomainResource(t, "FormularyItem", name, element, index);
13667    for (int i = 0; i < element.getIdentifier().size(); i++) {
13668      composeIdentifier(t, "FormularyItem", "identifier", element.getIdentifier().get(i), i);
13669    }
13670    if (element.hasCode()) {
13671      composeCodeableConcept(t, "FormularyItem", "code", element.getCode(), -1);
13672    }
13673    if (element.hasStatusElement()) {
13674      composeEnum(t, "FormularyItem", "status", element.getStatusElement(), -1);
13675    }
13676  }
13677
13678  protected void composeGenomicStudy(Complex parent, String parentType, String name, GenomicStudy element, int index) {
13679    if (element == null) 
13680      return;
13681    Complex t;
13682    if (Utilities.noString(parentType))
13683      t = parent;
13684    else {
13685      t = parent.predicate("fhir:"+name,index > -1);
13686    }
13687    composeDomainResource(t, "GenomicStudy", name, element, index);
13688    for (int i = 0; i < element.getIdentifier().size(); i++) {
13689      composeIdentifier(t, "GenomicStudy", "identifier", element.getIdentifier().get(i), i);
13690    }
13691    if (element.hasStatusElement()) {
13692      composeEnum(t, "GenomicStudy", "status", element.getStatusElement(), -1);
13693    }
13694    for (int i = 0; i < element.getType().size(); i++) {
13695      composeCodeableConcept(t, "GenomicStudy", "type", element.getType().get(i), i);
13696    }
13697    if (element.hasSubject()) {
13698      composeReference(t, "GenomicStudy", "subject", element.getSubject(), -1);
13699    }
13700    if (element.hasEncounter()) {
13701      composeReference(t, "GenomicStudy", "encounter", element.getEncounter(), -1);
13702    }
13703    if (element.hasStartDateElement()) {
13704      composeDateTime(t, "GenomicStudy", "startDate", element.getStartDateElement(), -1);
13705    }
13706    for (int i = 0; i < element.getBasedOn().size(); i++) {
13707      composeReference(t, "GenomicStudy", "basedOn", element.getBasedOn().get(i), i);
13708    }
13709    if (element.hasReferrer()) {
13710      composeReference(t, "GenomicStudy", "referrer", element.getReferrer(), -1);
13711    }
13712    for (int i = 0; i < element.getInterpreter().size(); i++) {
13713      composeReference(t, "GenomicStudy", "interpreter", element.getInterpreter().get(i), i);
13714    }
13715    for (int i = 0; i < element.getReason().size(); i++) {
13716      composeCodeableReference(t, "GenomicStudy", "reason", element.getReason().get(i), i);
13717    }
13718    if (element.hasInstantiatesCanonicalElement()) {
13719      composeCanonical(t, "GenomicStudy", "instantiatesCanonical", element.getInstantiatesCanonicalElement(), -1);
13720    }
13721    if (element.hasInstantiatesUriElement()) {
13722      composeUri(t, "GenomicStudy", "instantiatesUri", element.getInstantiatesUriElement(), -1);
13723    }
13724    for (int i = 0; i < element.getNote().size(); i++) {
13725      composeAnnotation(t, "GenomicStudy", "note", element.getNote().get(i), i);
13726    }
13727    if (element.hasDescriptionElement()) {
13728      composeMarkdown(t, "GenomicStudy", "description", element.getDescriptionElement(), -1);
13729    }
13730    for (int i = 0; i < element.getAnalysis().size(); i++) {
13731      composeGenomicStudyAnalysisComponent(t, "GenomicStudy", "analysis", element.getAnalysis().get(i), i);
13732    }
13733  }
13734
13735  protected void composeGenomicStudyAnalysisComponent(Complex parent, String parentType, String name, GenomicStudy.GenomicStudyAnalysisComponent element, int index) {
13736    if (element == null) 
13737      return;
13738    Complex t;
13739    if (Utilities.noString(parentType))
13740      t = parent;
13741    else {
13742      t = parent.predicate("fhir:"+name,index > -1);
13743    }
13744    composeBackboneElement(t, "analysis", name, element, index);
13745    for (int i = 0; i < element.getIdentifier().size(); i++) {
13746      composeIdentifier(t, "GenomicStudyAnalysisComponent", "identifier", element.getIdentifier().get(i), i);
13747    }
13748    for (int i = 0; i < element.getMethodType().size(); i++) {
13749      composeCodeableConcept(t, "GenomicStudyAnalysisComponent", "methodType", element.getMethodType().get(i), i);
13750    }
13751    for (int i = 0; i < element.getChangeType().size(); i++) {
13752      composeCodeableConcept(t, "GenomicStudyAnalysisComponent", "changeType", element.getChangeType().get(i), i);
13753    }
13754    if (element.hasGenomeBuild()) {
13755      composeCodeableConcept(t, "GenomicStudyAnalysisComponent", "genomeBuild", element.getGenomeBuild(), -1);
13756    }
13757    if (element.hasInstantiatesCanonicalElement()) {
13758      composeCanonical(t, "GenomicStudyAnalysisComponent", "instantiatesCanonical", element.getInstantiatesCanonicalElement(), -1);
13759    }
13760    if (element.hasInstantiatesUriElement()) {
13761      composeUri(t, "GenomicStudyAnalysisComponent", "instantiatesUri", element.getInstantiatesUriElement(), -1);
13762    }
13763    if (element.hasTitleElement()) {
13764      composeString(t, "GenomicStudyAnalysisComponent", "title", element.getTitleElement(), -1);
13765    }
13766    for (int i = 0; i < element.getFocus().size(); i++) {
13767      composeReference(t, "GenomicStudyAnalysisComponent", "focus", element.getFocus().get(i), i);
13768    }
13769    for (int i = 0; i < element.getSpecimen().size(); i++) {
13770      composeReference(t, "GenomicStudyAnalysisComponent", "specimen", element.getSpecimen().get(i), i);
13771    }
13772    if (element.hasDateElement()) {
13773      composeDateTime(t, "GenomicStudyAnalysisComponent", "date", element.getDateElement(), -1);
13774    }
13775    for (int i = 0; i < element.getNote().size(); i++) {
13776      composeAnnotation(t, "GenomicStudyAnalysisComponent", "note", element.getNote().get(i), i);
13777    }
13778    if (element.hasProtocolPerformed()) {
13779      composeReference(t, "GenomicStudyAnalysisComponent", "protocolPerformed", element.getProtocolPerformed(), -1);
13780    }
13781    for (int i = 0; i < element.getRegionsStudied().size(); i++) {
13782      composeReference(t, "GenomicStudyAnalysisComponent", "regionsStudied", element.getRegionsStudied().get(i), i);
13783    }
13784    for (int i = 0; i < element.getRegionsCalled().size(); i++) {
13785      composeReference(t, "GenomicStudyAnalysisComponent", "regionsCalled", element.getRegionsCalled().get(i), i);
13786    }
13787    for (int i = 0; i < element.getInput().size(); i++) {
13788      composeGenomicStudyAnalysisInputComponent(t, "GenomicStudyAnalysisComponent", "input", element.getInput().get(i), i);
13789    }
13790    for (int i = 0; i < element.getOutput().size(); i++) {
13791      composeGenomicStudyAnalysisOutputComponent(t, "GenomicStudyAnalysisComponent", "output", element.getOutput().get(i), i);
13792    }
13793    for (int i = 0; i < element.getPerformer().size(); i++) {
13794      composeGenomicStudyAnalysisPerformerComponent(t, "GenomicStudyAnalysisComponent", "performer", element.getPerformer().get(i), i);
13795    }
13796    for (int i = 0; i < element.getDevice().size(); i++) {
13797      composeGenomicStudyAnalysisDeviceComponent(t, "GenomicStudyAnalysisComponent", "device", element.getDevice().get(i), i);
13798    }
13799  }
13800
13801  protected void composeGenomicStudyAnalysisInputComponent(Complex parent, String parentType, String name, GenomicStudy.GenomicStudyAnalysisInputComponent element, int index) {
13802    if (element == null) 
13803      return;
13804    Complex t;
13805    if (Utilities.noString(parentType))
13806      t = parent;
13807    else {
13808      t = parent.predicate("fhir:"+name,index > -1);
13809    }
13810    composeBackboneElement(t, "input", name, element, index);
13811    if (element.hasFile()) {
13812      composeReference(t, "GenomicStudyAnalysisInputComponent", "file", element.getFile(), -1);
13813    }
13814    if (element.hasType()) {
13815      composeCodeableConcept(t, "GenomicStudyAnalysisInputComponent", "type", element.getType(), -1);
13816    }
13817    if (element.hasGeneratedBy()) {
13818      composeType(t, "GenomicStudyAnalysisInputComponent", "generatedBy", element.getGeneratedBy(), -1);
13819    }
13820  }
13821
13822  protected void composeGenomicStudyAnalysisOutputComponent(Complex parent, String parentType, String name, GenomicStudy.GenomicStudyAnalysisOutputComponent element, int index) {
13823    if (element == null) 
13824      return;
13825    Complex t;
13826    if (Utilities.noString(parentType))
13827      t = parent;
13828    else {
13829      t = parent.predicate("fhir:"+name,index > -1);
13830    }
13831    composeBackboneElement(t, "output", name, element, index);
13832    if (element.hasFile()) {
13833      composeReference(t, "GenomicStudyAnalysisOutputComponent", "file", element.getFile(), -1);
13834    }
13835    if (element.hasType()) {
13836      composeCodeableConcept(t, "GenomicStudyAnalysisOutputComponent", "type", element.getType(), -1);
13837    }
13838  }
13839
13840  protected void composeGenomicStudyAnalysisPerformerComponent(Complex parent, String parentType, String name, GenomicStudy.GenomicStudyAnalysisPerformerComponent element, int index) {
13841    if (element == null) 
13842      return;
13843    Complex t;
13844    if (Utilities.noString(parentType))
13845      t = parent;
13846    else {
13847      t = parent.predicate("fhir:"+name,index > -1);
13848    }
13849    composeBackboneElement(t, "performer", name, element, index);
13850    if (element.hasActor()) {
13851      composeReference(t, "GenomicStudyAnalysisPerformerComponent", "actor", element.getActor(), -1);
13852    }
13853    if (element.hasRole()) {
13854      composeCodeableConcept(t, "GenomicStudyAnalysisPerformerComponent", "role", element.getRole(), -1);
13855    }
13856  }
13857
13858  protected void composeGenomicStudyAnalysisDeviceComponent(Complex parent, String parentType, String name, GenomicStudy.GenomicStudyAnalysisDeviceComponent element, int index) {
13859    if (element == null) 
13860      return;
13861    Complex t;
13862    if (Utilities.noString(parentType))
13863      t = parent;
13864    else {
13865      t = parent.predicate("fhir:"+name,index > -1);
13866    }
13867    composeBackboneElement(t, "device", name, element, index);
13868    if (element.hasDevice()) {
13869      composeReference(t, "GenomicStudyAnalysisDeviceComponent", "device", element.getDevice(), -1);
13870    }
13871    if (element.hasFunction()) {
13872      composeCodeableConcept(t, "GenomicStudyAnalysisDeviceComponent", "function", element.getFunction(), -1);
13873    }
13874  }
13875
13876  protected void composeGoal(Complex parent, String parentType, String name, Goal element, int index) {
13877    if (element == null) 
13878      return;
13879    Complex t;
13880    if (Utilities.noString(parentType))
13881      t = parent;
13882    else {
13883      t = parent.predicate("fhir:"+name,index > -1);
13884    }
13885    composeDomainResource(t, "Goal", name, element, index);
13886    for (int i = 0; i < element.getIdentifier().size(); i++) {
13887      composeIdentifier(t, "Goal", "identifier", element.getIdentifier().get(i), i);
13888    }
13889    if (element.hasLifecycleStatusElement()) {
13890      composeEnum(t, "Goal", "lifecycleStatus", element.getLifecycleStatusElement(), -1);
13891    }
13892    if (element.hasAchievementStatus()) {
13893      composeCodeableConcept(t, "Goal", "achievementStatus", element.getAchievementStatus(), -1);
13894    }
13895    for (int i = 0; i < element.getCategory().size(); i++) {
13896      composeCodeableConcept(t, "Goal", "category", element.getCategory().get(i), i);
13897    }
13898    if (element.hasContinuousElement()) {
13899      composeBoolean(t, "Goal", "continuous", element.getContinuousElement(), -1);
13900    }
13901    if (element.hasPriority()) {
13902      composeCodeableConcept(t, "Goal", "priority", element.getPriority(), -1);
13903    }
13904    if (element.hasDescription()) {
13905      composeCodeableConcept(t, "Goal", "description", element.getDescription(), -1);
13906    }
13907    if (element.hasSubject()) {
13908      composeReference(t, "Goal", "subject", element.getSubject(), -1);
13909    }
13910    if (element.hasStart()) {
13911      composeType(t, "Goal", "start", element.getStart(), -1);
13912    }
13913    for (int i = 0; i < element.getTarget().size(); i++) {
13914      composeGoalTargetComponent(t, "Goal", "target", element.getTarget().get(i), i);
13915    }
13916    if (element.hasStatusDateElement()) {
13917      composeDate(t, "Goal", "statusDate", element.getStatusDateElement(), -1);
13918    }
13919    if (element.hasStatusReasonElement()) {
13920      composeString(t, "Goal", "statusReason", element.getStatusReasonElement(), -1);
13921    }
13922    if (element.hasSource()) {
13923      composeReference(t, "Goal", "source", element.getSource(), -1);
13924    }
13925    for (int i = 0; i < element.getAddresses().size(); i++) {
13926      composeReference(t, "Goal", "addresses", element.getAddresses().get(i), i);
13927    }
13928    for (int i = 0; i < element.getNote().size(); i++) {
13929      composeAnnotation(t, "Goal", "note", element.getNote().get(i), i);
13930    }
13931    for (int i = 0; i < element.getOutcome().size(); i++) {
13932      composeCodeableReference(t, "Goal", "outcome", element.getOutcome().get(i), i);
13933    }
13934  }
13935
13936  protected void composeGoalTargetComponent(Complex parent, String parentType, String name, Goal.GoalTargetComponent element, int index) {
13937    if (element == null) 
13938      return;
13939    Complex t;
13940    if (Utilities.noString(parentType))
13941      t = parent;
13942    else {
13943      t = parent.predicate("fhir:"+name,index > -1);
13944    }
13945    composeBackboneElement(t, "target", name, element, index);
13946    if (element.hasMeasure()) {
13947      composeCodeableConcept(t, "GoalTargetComponent", "measure", element.getMeasure(), -1);
13948    }
13949    if (element.hasDetail()) {
13950      composeType(t, "GoalTargetComponent", "detail", element.getDetail(), -1);
13951    }
13952    if (element.hasDue()) {
13953      composeType(t, "GoalTargetComponent", "due", element.getDue(), -1);
13954    }
13955  }
13956
13957  protected void composeGraphDefinition(Complex parent, String parentType, String name, GraphDefinition element, int index) {
13958    if (element == null) 
13959      return;
13960    Complex t;
13961    if (Utilities.noString(parentType))
13962      t = parent;
13963    else {
13964      t = parent.predicate("fhir:"+name,index > -1);
13965    }
13966    composeCanonicalResource(t, "GraphDefinition", name, element, index);
13967    if (element.hasUrlElement()) {
13968      composeUri(t, "GraphDefinition", "url", element.getUrlElement(), -1);
13969    }
13970    for (int i = 0; i < element.getIdentifier().size(); i++) {
13971      composeIdentifier(t, "GraphDefinition", "identifier", element.getIdentifier().get(i), i);
13972    }
13973    if (element.hasVersionElement()) {
13974      composeString(t, "GraphDefinition", "version", element.getVersionElement(), -1);
13975    }
13976    if (element.hasVersionAlgorithm()) {
13977      composeType(t, "GraphDefinition", "versionAlgorithm", element.getVersionAlgorithm(), -1);
13978    }
13979    if (element.hasNameElement()) {
13980      composeString(t, "GraphDefinition", "name", element.getNameElement(), -1);
13981    }
13982    if (element.hasTitleElement()) {
13983      composeString(t, "GraphDefinition", "title", element.getTitleElement(), -1);
13984    }
13985    if (element.hasStatusElement()) {
13986      composeEnum(t, "GraphDefinition", "status", element.getStatusElement(), -1);
13987    }
13988    if (element.hasExperimentalElement()) {
13989      composeBoolean(t, "GraphDefinition", "experimental", element.getExperimentalElement(), -1);
13990    }
13991    if (element.hasDateElement()) {
13992      composeDateTime(t, "GraphDefinition", "date", element.getDateElement(), -1);
13993    }
13994    if (element.hasPublisherElement()) {
13995      composeString(t, "GraphDefinition", "publisher", element.getPublisherElement(), -1);
13996    }
13997    for (int i = 0; i < element.getContact().size(); i++) {
13998      composeContactDetail(t, "GraphDefinition", "contact", element.getContact().get(i), i);
13999    }
14000    if (element.hasDescriptionElement()) {
14001      composeMarkdown(t, "GraphDefinition", "description", element.getDescriptionElement(), -1);
14002    }
14003    for (int i = 0; i < element.getUseContext().size(); i++) {
14004      composeUsageContext(t, "GraphDefinition", "useContext", element.getUseContext().get(i), i);
14005    }
14006    for (int i = 0; i < element.getJurisdiction().size(); i++) {
14007      composeCodeableConcept(t, "GraphDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
14008    }
14009    if (element.hasPurposeElement()) {
14010      composeMarkdown(t, "GraphDefinition", "purpose", element.getPurposeElement(), -1);
14011    }
14012    if (element.hasCopyrightElement()) {
14013      composeMarkdown(t, "GraphDefinition", "copyright", element.getCopyrightElement(), -1);
14014    }
14015    if (element.hasCopyrightLabelElement()) {
14016      composeString(t, "GraphDefinition", "copyrightLabel", element.getCopyrightLabelElement(), -1);
14017    }
14018    if (element.hasStartElement()) {
14019      composeId(t, "GraphDefinition", "start", element.getStartElement(), -1);
14020    }
14021    for (int i = 0; i < element.getNode().size(); i++) {
14022      composeGraphDefinitionNodeComponent(t, "GraphDefinition", "node", element.getNode().get(i), i);
14023    }
14024    for (int i = 0; i < element.getLink().size(); i++) {
14025      composeGraphDefinitionLinkComponent(t, "GraphDefinition", "link", element.getLink().get(i), i);
14026    }
14027  }
14028
14029  protected void composeGraphDefinitionNodeComponent(Complex parent, String parentType, String name, GraphDefinition.GraphDefinitionNodeComponent element, int index) {
14030    if (element == null) 
14031      return;
14032    Complex t;
14033    if (Utilities.noString(parentType))
14034      t = parent;
14035    else {
14036      t = parent.predicate("fhir:"+name,index > -1);
14037    }
14038    composeBackboneElement(t, "node", name, element, index);
14039    if (element.hasNodeIdElement()) {
14040      composeId(t, "GraphDefinitionNodeComponent", "nodeId", element.getNodeIdElement(), -1);
14041    }
14042    if (element.hasDescriptionElement()) {
14043      composeString(t, "GraphDefinitionNodeComponent", "description", element.getDescriptionElement(), -1);
14044    }
14045    if (element.hasTypeElement()) {
14046      composeEnum(t, "GraphDefinitionNodeComponent", "type", element.getTypeElement(), -1);
14047    }
14048    if (element.hasProfileElement()) {
14049      composeCanonical(t, "GraphDefinitionNodeComponent", "profile", element.getProfileElement(), -1);
14050    }
14051  }
14052
14053  protected void composeGraphDefinitionLinkComponent(Complex parent, String parentType, String name, GraphDefinition.GraphDefinitionLinkComponent element, int index) {
14054    if (element == null) 
14055      return;
14056    Complex t;
14057    if (Utilities.noString(parentType))
14058      t = parent;
14059    else {
14060      t = parent.predicate("fhir:"+name,index > -1);
14061    }
14062    composeBackboneElement(t, "link", name, element, index);
14063    if (element.hasDescriptionElement()) {
14064      composeString(t, "GraphDefinitionLinkComponent", "description", element.getDescriptionElement(), -1);
14065    }
14066    if (element.hasMinElement()) {
14067      composeInteger(t, "GraphDefinitionLinkComponent", "min", element.getMinElement(), -1);
14068    }
14069    if (element.hasMaxElement()) {
14070      composeString(t, "GraphDefinitionLinkComponent", "max", element.getMaxElement(), -1);
14071    }
14072    if (element.hasSourceIdElement()) {
14073      composeId(t, "GraphDefinitionLinkComponent", "sourceId", element.getSourceIdElement(), -1);
14074    }
14075    if (element.hasPathElement()) {
14076      composeString(t, "GraphDefinitionLinkComponent", "path", element.getPathElement(), -1);
14077    }
14078    if (element.hasSliceNameElement()) {
14079      composeString(t, "GraphDefinitionLinkComponent", "sliceName", element.getSliceNameElement(), -1);
14080    }
14081    if (element.hasTargetIdElement()) {
14082      composeId(t, "GraphDefinitionLinkComponent", "targetId", element.getTargetIdElement(), -1);
14083    }
14084    if (element.hasParamsElement()) {
14085      composeString(t, "GraphDefinitionLinkComponent", "params", element.getParamsElement(), -1);
14086    }
14087    for (int i = 0; i < element.getCompartment().size(); i++) {
14088      composeGraphDefinitionLinkCompartmentComponent(t, "GraphDefinitionLinkComponent", "compartment", element.getCompartment().get(i), i);
14089    }
14090  }
14091
14092  protected void composeGraphDefinitionLinkCompartmentComponent(Complex parent, String parentType, String name, GraphDefinition.GraphDefinitionLinkCompartmentComponent 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:"+name,index > -1);
14100    }
14101    composeBackboneElement(t, "compartment", name, element, index);
14102    if (element.hasUseElement()) {
14103      composeEnum(t, "GraphDefinitionLinkCompartmentComponent", "use", element.getUseElement(), -1);
14104    }
14105    if (element.hasRuleElement()) {
14106      composeEnum(t, "GraphDefinitionLinkCompartmentComponent", "rule", element.getRuleElement(), -1);
14107    }
14108    if (element.hasCodeElement()) {
14109      composeEnum(t, "GraphDefinitionLinkCompartmentComponent", "code", element.getCodeElement(), -1);
14110    }
14111    if (element.hasExpressionElement()) {
14112      composeString(t, "GraphDefinitionLinkCompartmentComponent", "expression", element.getExpressionElement(), -1);
14113    }
14114    if (element.hasDescriptionElement()) {
14115      composeString(t, "GraphDefinitionLinkCompartmentComponent", "description", element.getDescriptionElement(), -1);
14116    }
14117  }
14118
14119  protected void composeGroup(Complex parent, String parentType, String name, Group element, int index) {
14120    if (element == null) 
14121      return;
14122    Complex t;
14123    if (Utilities.noString(parentType))
14124      t = parent;
14125    else {
14126      t = parent.predicate("fhir:"+name,index > -1);
14127    }
14128    composeDomainResource(t, "Group", name, element, index);
14129    for (int i = 0; i < element.getIdentifier().size(); i++) {
14130      composeIdentifier(t, "Group", "identifier", element.getIdentifier().get(i), i);
14131    }
14132    if (element.hasActiveElement()) {
14133      composeBoolean(t, "Group", "active", element.getActiveElement(), -1);
14134    }
14135    if (element.hasTypeElement()) {
14136      composeEnum(t, "Group", "type", element.getTypeElement(), -1);
14137    }
14138    if (element.hasMembershipElement()) {
14139      composeEnum(t, "Group", "membership", element.getMembershipElement(), -1);
14140    }
14141    if (element.hasCode()) {
14142      composeCodeableConcept(t, "Group", "code", element.getCode(), -1);
14143    }
14144    if (element.hasNameElement()) {
14145      composeString(t, "Group", "name", element.getNameElement(), -1);
14146    }
14147    if (element.hasDescriptionElement()) {
14148      composeMarkdown(t, "Group", "description", element.getDescriptionElement(), -1);
14149    }
14150    if (element.hasQuantityElement()) {
14151      composeUnsignedInt(t, "Group", "quantity", element.getQuantityElement(), -1);
14152    }
14153    if (element.hasManagingEntity()) {
14154      composeReference(t, "Group", "managingEntity", element.getManagingEntity(), -1);
14155    }
14156    for (int i = 0; i < element.getCharacteristic().size(); i++) {
14157      composeGroupCharacteristicComponent(t, "Group", "characteristic", element.getCharacteristic().get(i), i);
14158    }
14159    for (int i = 0; i < element.getMember().size(); i++) {
14160      composeGroupMemberComponent(t, "Group", "member", element.getMember().get(i), i);
14161    }
14162  }
14163
14164  protected void composeGroupCharacteristicComponent(Complex parent, String parentType, String name, Group.GroupCharacteristicComponent element, int index) {
14165    if (element == null) 
14166      return;
14167    Complex t;
14168    if (Utilities.noString(parentType))
14169      t = parent;
14170    else {
14171      t = parent.predicate("fhir:"+name,index > -1);
14172    }
14173    composeBackboneElement(t, "characteristic", name, element, index);
14174    if (element.hasCode()) {
14175      composeCodeableConcept(t, "GroupCharacteristicComponent", "code", element.getCode(), -1);
14176    }
14177    if (element.hasValue()) {
14178      composeType(t, "GroupCharacteristicComponent", "value", element.getValue(), -1);
14179    }
14180    if (element.hasExcludeElement()) {
14181      composeBoolean(t, "GroupCharacteristicComponent", "exclude", element.getExcludeElement(), -1);
14182    }
14183    if (element.hasPeriod()) {
14184      composePeriod(t, "GroupCharacteristicComponent", "period", element.getPeriod(), -1);
14185    }
14186  }
14187
14188  protected void composeGroupMemberComponent(Complex parent, String parentType, String name, Group.GroupMemberComponent element, int index) {
14189    if (element == null) 
14190      return;
14191    Complex t;
14192    if (Utilities.noString(parentType))
14193      t = parent;
14194    else {
14195      t = parent.predicate("fhir:"+name,index > -1);
14196    }
14197    composeBackboneElement(t, "member", name, element, index);
14198    if (element.hasEntity()) {
14199      composeReference(t, "GroupMemberComponent", "entity", element.getEntity(), -1);
14200    }
14201    if (element.hasPeriod()) {
14202      composePeriod(t, "GroupMemberComponent", "period", element.getPeriod(), -1);
14203    }
14204    if (element.hasInactiveElement()) {
14205      composeBoolean(t, "GroupMemberComponent", "inactive", element.getInactiveElement(), -1);
14206    }
14207  }
14208
14209  protected void composeGuidanceResponse(Complex parent, String parentType, String name, GuidanceResponse element, int index) {
14210    if (element == null) 
14211      return;
14212    Complex t;
14213    if (Utilities.noString(parentType))
14214      t = parent;
14215    else {
14216      t = parent.predicate("fhir:"+name,index > -1);
14217    }
14218    composeDomainResource(t, "GuidanceResponse", name, element, index);
14219    if (element.hasRequestIdentifier()) {
14220      composeIdentifier(t, "GuidanceResponse", "requestIdentifier", element.getRequestIdentifier(), -1);
14221    }
14222    for (int i = 0; i < element.getIdentifier().size(); i++) {
14223      composeIdentifier(t, "GuidanceResponse", "identifier", element.getIdentifier().get(i), i);
14224    }
14225    if (element.hasModule()) {
14226      composeType(t, "GuidanceResponse", "module", element.getModule(), -1);
14227    }
14228    if (element.hasStatusElement()) {
14229      composeEnum(t, "GuidanceResponse", "status", element.getStatusElement(), -1);
14230    }
14231    if (element.hasSubject()) {
14232      composeReference(t, "GuidanceResponse", "subject", element.getSubject(), -1);
14233    }
14234    if (element.hasEncounter()) {
14235      composeReference(t, "GuidanceResponse", "encounter", element.getEncounter(), -1);
14236    }
14237    if (element.hasOccurrenceDateTimeElement()) {
14238      composeDateTime(t, "GuidanceResponse", "occurrenceDateTime", element.getOccurrenceDateTimeElement(), -1);
14239    }
14240    if (element.hasPerformer()) {
14241      composeReference(t, "GuidanceResponse", "performer", element.getPerformer(), -1);
14242    }
14243    for (int i = 0; i < element.getReason().size(); i++) {
14244      composeCodeableReference(t, "GuidanceResponse", "reason", element.getReason().get(i), i);
14245    }
14246    for (int i = 0; i < element.getNote().size(); i++) {
14247      composeAnnotation(t, "GuidanceResponse", "note", element.getNote().get(i), i);
14248    }
14249    if (element.hasEvaluationMessage()) {
14250      composeReference(t, "GuidanceResponse", "evaluationMessage", element.getEvaluationMessage(), -1);
14251    }
14252    if (element.hasOutputParameters()) {
14253      composeReference(t, "GuidanceResponse", "outputParameters", element.getOutputParameters(), -1);
14254    }
14255    for (int i = 0; i < element.getResult().size(); i++) {
14256      composeReference(t, "GuidanceResponse", "result", element.getResult().get(i), i);
14257    }
14258    for (int i = 0; i < element.getDataRequirement().size(); i++) {
14259      composeDataRequirement(t, "GuidanceResponse", "dataRequirement", element.getDataRequirement().get(i), i);
14260    }
14261  }
14262
14263  protected void composeHealthcareService(Complex parent, String parentType, String name, HealthcareService element, int index) {
14264    if (element == null) 
14265      return;
14266    Complex t;
14267    if (Utilities.noString(parentType))
14268      t = parent;
14269    else {
14270      t = parent.predicate("fhir:"+name,index > -1);
14271    }
14272    composeDomainResource(t, "HealthcareService", name, element, index);
14273    for (int i = 0; i < element.getIdentifier().size(); i++) {
14274      composeIdentifier(t, "HealthcareService", "identifier", element.getIdentifier().get(i), i);
14275    }
14276    if (element.hasActiveElement()) {
14277      composeBoolean(t, "HealthcareService", "active", element.getActiveElement(), -1);
14278    }
14279    if (element.hasProvidedBy()) {
14280      composeReference(t, "HealthcareService", "providedBy", element.getProvidedBy(), -1);
14281    }
14282    for (int i = 0; i < element.getOfferedIn().size(); i++) {
14283      composeReference(t, "HealthcareService", "offeredIn", element.getOfferedIn().get(i), i);
14284    }
14285    for (int i = 0; i < element.getCategory().size(); i++) {
14286      composeCodeableConcept(t, "HealthcareService", "category", element.getCategory().get(i), i);
14287    }
14288    for (int i = 0; i < element.getType().size(); i++) {
14289      composeCodeableConcept(t, "HealthcareService", "type", element.getType().get(i), i);
14290    }
14291    for (int i = 0; i < element.getSpecialty().size(); i++) {
14292      composeCodeableConcept(t, "HealthcareService", "specialty", element.getSpecialty().get(i), i);
14293    }
14294    for (int i = 0; i < element.getLocation().size(); i++) {
14295      composeReference(t, "HealthcareService", "location", element.getLocation().get(i), i);
14296    }
14297    if (element.hasNameElement()) {
14298      composeString(t, "HealthcareService", "name", element.getNameElement(), -1);
14299    }
14300    if (element.hasCommentElement()) {
14301      composeMarkdown(t, "HealthcareService", "comment", element.getCommentElement(), -1);
14302    }
14303    if (element.hasExtraDetailsElement()) {
14304      composeMarkdown(t, "HealthcareService", "extraDetails", element.getExtraDetailsElement(), -1);
14305    }
14306    if (element.hasPhoto()) {
14307      composeAttachment(t, "HealthcareService", "photo", element.getPhoto(), -1);
14308    }
14309    for (int i = 0; i < element.getContact().size(); i++) {
14310      composeExtendedContactDetail(t, "HealthcareService", "contact", element.getContact().get(i), i);
14311    }
14312    for (int i = 0; i < element.getCoverageArea().size(); i++) {
14313      composeReference(t, "HealthcareService", "coverageArea", element.getCoverageArea().get(i), i);
14314    }
14315    for (int i = 0; i < element.getServiceProvisionCode().size(); i++) {
14316      composeCodeableConcept(t, "HealthcareService", "serviceProvisionCode", element.getServiceProvisionCode().get(i), i);
14317    }
14318    for (int i = 0; i < element.getEligibility().size(); i++) {
14319      composeHealthcareServiceEligibilityComponent(t, "HealthcareService", "eligibility", element.getEligibility().get(i), i);
14320    }
14321    for (int i = 0; i < element.getProgram().size(); i++) {
14322      composeCodeableConcept(t, "HealthcareService", "program", element.getProgram().get(i), i);
14323    }
14324    for (int i = 0; i < element.getCharacteristic().size(); i++) {
14325      composeCodeableConcept(t, "HealthcareService", "characteristic", element.getCharacteristic().get(i), i);
14326    }
14327    for (int i = 0; i < element.getCommunication().size(); i++) {
14328      composeCodeableConcept(t, "HealthcareService", "communication", element.getCommunication().get(i), i);
14329    }
14330    for (int i = 0; i < element.getReferralMethod().size(); i++) {
14331      composeCodeableConcept(t, "HealthcareService", "referralMethod", element.getReferralMethod().get(i), i);
14332    }
14333    if (element.hasAppointmentRequiredElement()) {
14334      composeBoolean(t, "HealthcareService", "appointmentRequired", element.getAppointmentRequiredElement(), -1);
14335    }
14336    for (int i = 0; i < element.getAvailability().size(); i++) {
14337      composeAvailability(t, "HealthcareService", "availability", element.getAvailability().get(i), i);
14338    }
14339    for (int i = 0; i < element.getEndpoint().size(); i++) {
14340      composeReference(t, "HealthcareService", "endpoint", element.getEndpoint().get(i), i);
14341    }
14342  }
14343
14344  protected void composeHealthcareServiceEligibilityComponent(Complex parent, String parentType, String name, HealthcareService.HealthcareServiceEligibilityComponent element, int index) {
14345    if (element == null) 
14346      return;
14347    Complex t;
14348    if (Utilities.noString(parentType))
14349      t = parent;
14350    else {
14351      t = parent.predicate("fhir:"+name,index > -1);
14352    }
14353    composeBackboneElement(t, "eligibility", name, element, index);
14354    if (element.hasCode()) {
14355      composeCodeableConcept(t, "HealthcareServiceEligibilityComponent", "code", element.getCode(), -1);
14356    }
14357    if (element.hasCommentElement()) {
14358      composeMarkdown(t, "HealthcareServiceEligibilityComponent", "comment", element.getCommentElement(), -1);
14359    }
14360  }
14361
14362  protected void composeImagingSelection(Complex parent, String parentType, String name, ImagingSelection 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:"+name,index > -1);
14370    }
14371    composeDomainResource(t, "ImagingSelection", name, element, index);
14372    for (int i = 0; i < element.getIdentifier().size(); i++) {
14373      composeIdentifier(t, "ImagingSelection", "identifier", element.getIdentifier().get(i), i);
14374    }
14375    if (element.hasStatusElement()) {
14376      composeEnum(t, "ImagingSelection", "status", element.getStatusElement(), -1);
14377    }
14378    if (element.hasSubject()) {
14379      composeReference(t, "ImagingSelection", "subject", element.getSubject(), -1);
14380    }
14381    if (element.hasIssuedElement()) {
14382      composeInstant(t, "ImagingSelection", "issued", element.getIssuedElement(), -1);
14383    }
14384    for (int i = 0; i < element.getPerformer().size(); i++) {
14385      composeImagingSelectionPerformerComponent(t, "ImagingSelection", "performer", element.getPerformer().get(i), i);
14386    }
14387    for (int i = 0; i < element.getBasedOn().size(); i++) {
14388      composeReference(t, "ImagingSelection", "basedOn", element.getBasedOn().get(i), i);
14389    }
14390    for (int i = 0; i < element.getCategory().size(); i++) {
14391      composeCodeableConcept(t, "ImagingSelection", "category", element.getCategory().get(i), i);
14392    }
14393    if (element.hasCode()) {
14394      composeCodeableConcept(t, "ImagingSelection", "code", element.getCode(), -1);
14395    }
14396    if (element.hasStudyUidElement()) {
14397      composeId(t, "ImagingSelection", "studyUid", element.getStudyUidElement(), -1);
14398    }
14399    for (int i = 0; i < element.getDerivedFrom().size(); i++) {
14400      composeReference(t, "ImagingSelection", "derivedFrom", element.getDerivedFrom().get(i), i);
14401    }
14402    for (int i = 0; i < element.getEndpoint().size(); i++) {
14403      composeReference(t, "ImagingSelection", "endpoint", element.getEndpoint().get(i), i);
14404    }
14405    if (element.hasSeriesUidElement()) {
14406      composeId(t, "ImagingSelection", "seriesUid", element.getSeriesUidElement(), -1);
14407    }
14408    if (element.hasSeriesNumberElement()) {
14409      composeUnsignedInt(t, "ImagingSelection", "seriesNumber", element.getSeriesNumberElement(), -1);
14410    }
14411    if (element.hasFrameOfReferenceUidElement()) {
14412      composeId(t, "ImagingSelection", "frameOfReferenceUid", element.getFrameOfReferenceUidElement(), -1);
14413    }
14414    if (element.hasBodySite()) {
14415      composeCodeableReference(t, "ImagingSelection", "bodySite", element.getBodySite(), -1);
14416    }
14417    for (int i = 0; i < element.getFocus().size(); i++) {
14418      composeReference(t, "ImagingSelection", "focus", element.getFocus().get(i), i);
14419    }
14420    for (int i = 0; i < element.getInstance().size(); i++) {
14421      composeImagingSelectionInstanceComponent(t, "ImagingSelection", "instance", element.getInstance().get(i), i);
14422    }
14423  }
14424
14425  protected void composeImagingSelectionPerformerComponent(Complex parent, String parentType, String name, ImagingSelection.ImagingSelectionPerformerComponent element, int index) {
14426    if (element == null) 
14427      return;
14428    Complex t;
14429    if (Utilities.noString(parentType))
14430      t = parent;
14431    else {
14432      t = parent.predicate("fhir:"+name,index > -1);
14433    }
14434    composeBackboneElement(t, "performer", name, element, index);
14435    if (element.hasFunction()) {
14436      composeCodeableConcept(t, "ImagingSelectionPerformerComponent", "function", element.getFunction(), -1);
14437    }
14438    if (element.hasActor()) {
14439      composeReference(t, "ImagingSelectionPerformerComponent", "actor", element.getActor(), -1);
14440    }
14441  }
14442
14443  protected void composeImagingSelectionInstanceComponent(Complex parent, String parentType, String name, ImagingSelection.ImagingSelectionInstanceComponent element, int index) {
14444    if (element == null) 
14445      return;
14446    Complex t;
14447    if (Utilities.noString(parentType))
14448      t = parent;
14449    else {
14450      t = parent.predicate("fhir:"+name,index > -1);
14451    }
14452    composeBackboneElement(t, "instance", name, element, index);
14453    if (element.hasUidElement()) {
14454      composeId(t, "ImagingSelectionInstanceComponent", "uid", element.getUidElement(), -1);
14455    }
14456    if (element.hasNumberElement()) {
14457      composeUnsignedInt(t, "ImagingSelectionInstanceComponent", "number", element.getNumberElement(), -1);
14458    }
14459    if (element.hasSopClass()) {
14460      composeCoding(t, "ImagingSelectionInstanceComponent", "sopClass", element.getSopClass(), -1);
14461    }
14462    for (int i = 0; i < element.getSubset().size(); i++) {
14463      composeString(t, "ImagingSelectionInstanceComponent", "subset", element.getSubset().get(i), i);
14464    }
14465    for (int i = 0; i < element.getImageRegion2D().size(); i++) {
14466      composeImagingSelectionImageRegion2DComponent(t, "ImagingSelectionInstanceComponent", "imageRegion2D", element.getImageRegion2D().get(i), i);
14467    }
14468    for (int i = 0; i < element.getImageRegion3D().size(); i++) {
14469      composeImagingSelectionImageRegion3DComponent(t, "ImagingSelectionInstanceComponent", "imageRegion3D", element.getImageRegion3D().get(i), i);
14470    }
14471  }
14472
14473  protected void composeImagingSelectionImageRegion2DComponent(Complex parent, String parentType, String name, ImagingSelection.ImageRegion2DComponent element, int index) {
14474    if (element == null) 
14475      return;
14476    Complex t;
14477    if (Utilities.noString(parentType))
14478      t = parent;
14479    else {
14480      t = parent.predicate("fhir:"+name,index > -1);
14481    }
14482    composeBackboneElement(t, "imageRegion2D", name, element, index);
14483    if (element.hasRegionTypeElement()) {
14484      composeEnum(t, "ImageRegion2DComponent", "regionType", element.getRegionTypeElement(), -1);
14485    }
14486    for (int i = 0; i < element.getCoordinate().size(); i++) {
14487      composeDecimal(t, "ImageRegion2DComponent", "coordinate", element.getCoordinate().get(i), i);
14488    }
14489  }
14490
14491  protected void composeImagingSelectionImageRegion3DComponent(Complex parent, String parentType, String name, ImagingSelection.ImageRegion3DComponent element, int index) {
14492    if (element == null) 
14493      return;
14494    Complex t;
14495    if (Utilities.noString(parentType))
14496      t = parent;
14497    else {
14498      t = parent.predicate("fhir:"+name,index > -1);
14499    }
14500    composeBackboneElement(t, "imageRegion3D", name, element, index);
14501    if (element.hasRegionTypeElement()) {
14502      composeEnum(t, "ImageRegion3DComponent", "regionType", element.getRegionTypeElement(), -1);
14503    }
14504    for (int i = 0; i < element.getCoordinate().size(); i++) {
14505      composeDecimal(t, "ImageRegion3DComponent", "coordinate", element.getCoordinate().get(i), i);
14506    }
14507  }
14508
14509  protected void composeImagingStudy(Complex parent, String parentType, String name, ImagingStudy element, int index) {
14510    if (element == null) 
14511      return;
14512    Complex t;
14513    if (Utilities.noString(parentType))
14514      t = parent;
14515    else {
14516      t = parent.predicate("fhir:"+name,index > -1);
14517    }
14518    composeDomainResource(t, "ImagingStudy", name, element, index);
14519    for (int i = 0; i < element.getIdentifier().size(); i++) {
14520      composeIdentifier(t, "ImagingStudy", "identifier", element.getIdentifier().get(i), i);
14521    }
14522    if (element.hasStatusElement()) {
14523      composeEnum(t, "ImagingStudy", "status", element.getStatusElement(), -1);
14524    }
14525    for (int i = 0; i < element.getModality().size(); i++) {
14526      composeCodeableConcept(t, "ImagingStudy", "modality", element.getModality().get(i), i);
14527    }
14528    if (element.hasSubject()) {
14529      composeReference(t, "ImagingStudy", "subject", element.getSubject(), -1);
14530    }
14531    if (element.hasEncounter()) {
14532      composeReference(t, "ImagingStudy", "encounter", element.getEncounter(), -1);
14533    }
14534    if (element.hasStartedElement()) {
14535      composeDateTime(t, "ImagingStudy", "started", element.getStartedElement(), -1);
14536    }
14537    for (int i = 0; i < element.getBasedOn().size(); i++) {
14538      composeReference(t, "ImagingStudy", "basedOn", element.getBasedOn().get(i), i);
14539    }
14540    for (int i = 0; i < element.getPartOf().size(); i++) {
14541      composeReference(t, "ImagingStudy", "partOf", element.getPartOf().get(i), i);
14542    }
14543    if (element.hasReferrer()) {
14544      composeReference(t, "ImagingStudy", "referrer", element.getReferrer(), -1);
14545    }
14546    for (int i = 0; i < element.getEndpoint().size(); i++) {
14547      composeReference(t, "ImagingStudy", "endpoint", element.getEndpoint().get(i), i);
14548    }
14549    if (element.hasNumberOfSeriesElement()) {
14550      composeUnsignedInt(t, "ImagingStudy", "numberOfSeries", element.getNumberOfSeriesElement(), -1);
14551    }
14552    if (element.hasNumberOfInstancesElement()) {
14553      composeUnsignedInt(t, "ImagingStudy", "numberOfInstances", element.getNumberOfInstancesElement(), -1);
14554    }
14555    for (int i = 0; i < element.getProcedure().size(); i++) {
14556      composeCodeableReference(t, "ImagingStudy", "procedure", element.getProcedure().get(i), i);
14557    }
14558    if (element.hasLocation()) {
14559      composeReference(t, "ImagingStudy", "location", element.getLocation(), -1);
14560    }
14561    for (int i = 0; i < element.getReason().size(); i++) {
14562      composeCodeableReference(t, "ImagingStudy", "reason", element.getReason().get(i), i);
14563    }
14564    for (int i = 0; i < element.getNote().size(); i++) {
14565      composeAnnotation(t, "ImagingStudy", "note", element.getNote().get(i), i);
14566    }
14567    if (element.hasDescriptionElement()) {
14568      composeString(t, "ImagingStudy", "description", element.getDescriptionElement(), -1);
14569    }
14570    for (int i = 0; i < element.getSeries().size(); i++) {
14571      composeImagingStudySeriesComponent(t, "ImagingStudy", "series", element.getSeries().get(i), i);
14572    }
14573  }
14574
14575  protected void composeImagingStudySeriesComponent(Complex parent, String parentType, String name, ImagingStudy.ImagingStudySeriesComponent element, int index) {
14576    if (element == null) 
14577      return;
14578    Complex t;
14579    if (Utilities.noString(parentType))
14580      t = parent;
14581    else {
14582      t = parent.predicate("fhir:"+name,index > -1);
14583    }
14584    composeBackboneElement(t, "series", name, element, index);
14585    if (element.hasUidElement()) {
14586      composeId(t, "ImagingStudySeriesComponent", "uid", element.getUidElement(), -1);
14587    }
14588    if (element.hasNumberElement()) {
14589      composeUnsignedInt(t, "ImagingStudySeriesComponent", "number", element.getNumberElement(), -1);
14590    }
14591    if (element.hasModality()) {
14592      composeCodeableConcept(t, "ImagingStudySeriesComponent", "modality", element.getModality(), -1);
14593    }
14594    if (element.hasDescriptionElement()) {
14595      composeString(t, "ImagingStudySeriesComponent", "description", element.getDescriptionElement(), -1);
14596    }
14597    if (element.hasNumberOfInstancesElement()) {
14598      composeUnsignedInt(t, "ImagingStudySeriesComponent", "numberOfInstances", element.getNumberOfInstancesElement(), -1);
14599    }
14600    for (int i = 0; i < element.getEndpoint().size(); i++) {
14601      composeReference(t, "ImagingStudySeriesComponent", "endpoint", element.getEndpoint().get(i), i);
14602    }
14603    if (element.hasBodySite()) {
14604      composeCodeableReference(t, "ImagingStudySeriesComponent", "bodySite", element.getBodySite(), -1);
14605    }
14606    if (element.hasLaterality()) {
14607      composeCodeableConcept(t, "ImagingStudySeriesComponent", "laterality", element.getLaterality(), -1);
14608    }
14609    for (int i = 0; i < element.getSpecimen().size(); i++) {
14610      composeReference(t, "ImagingStudySeriesComponent", "specimen", element.getSpecimen().get(i), i);
14611    }
14612    if (element.hasStartedElement()) {
14613      composeDateTime(t, "ImagingStudySeriesComponent", "started", element.getStartedElement(), -1);
14614    }
14615    for (int i = 0; i < element.getPerformer().size(); i++) {
14616      composeImagingStudySeriesPerformerComponent(t, "ImagingStudySeriesComponent", "performer", element.getPerformer().get(i), i);
14617    }
14618    for (int i = 0; i < element.getInstance().size(); i++) {
14619      composeImagingStudySeriesInstanceComponent(t, "ImagingStudySeriesComponent", "instance", element.getInstance().get(i), i);
14620    }
14621  }
14622
14623  protected void composeImagingStudySeriesPerformerComponent(Complex parent, String parentType, String name, ImagingStudy.ImagingStudySeriesPerformerComponent element, int index) {
14624    if (element == null) 
14625      return;
14626    Complex t;
14627    if (Utilities.noString(parentType))
14628      t = parent;
14629    else {
14630      t = parent.predicate("fhir:"+name,index > -1);
14631    }
14632    composeBackboneElement(t, "performer", name, element, index);
14633    if (element.hasFunction()) {
14634      composeCodeableConcept(t, "ImagingStudySeriesPerformerComponent", "function", element.getFunction(), -1);
14635    }
14636    if (element.hasActor()) {
14637      composeReference(t, "ImagingStudySeriesPerformerComponent", "actor", element.getActor(), -1);
14638    }
14639  }
14640
14641  protected void composeImagingStudySeriesInstanceComponent(Complex parent, String parentType, String name, ImagingStudy.ImagingStudySeriesInstanceComponent element, int index) {
14642    if (element == null) 
14643      return;
14644    Complex t;
14645    if (Utilities.noString(parentType))
14646      t = parent;
14647    else {
14648      t = parent.predicate("fhir:"+name,index > -1);
14649    }
14650    composeBackboneElement(t, "instance", name, element, index);
14651    if (element.hasUidElement()) {
14652      composeId(t, "ImagingStudySeriesInstanceComponent", "uid", element.getUidElement(), -1);
14653    }
14654    if (element.hasSopClass()) {
14655      composeCoding(t, "ImagingStudySeriesInstanceComponent", "sopClass", element.getSopClass(), -1);
14656    }
14657    if (element.hasNumberElement()) {
14658      composeUnsignedInt(t, "ImagingStudySeriesInstanceComponent", "number", element.getNumberElement(), -1);
14659    }
14660    if (element.hasTitleElement()) {
14661      composeString(t, "ImagingStudySeriesInstanceComponent", "title", element.getTitleElement(), -1);
14662    }
14663  }
14664
14665  protected void composeImmunization(Complex parent, String parentType, String name, Immunization element, int index) {
14666    if (element == null) 
14667      return;
14668    Complex t;
14669    if (Utilities.noString(parentType))
14670      t = parent;
14671    else {
14672      t = parent.predicate("fhir:"+name,index > -1);
14673    }
14674    composeDomainResource(t, "Immunization", name, element, index);
14675    for (int i = 0; i < element.getIdentifier().size(); i++) {
14676      composeIdentifier(t, "Immunization", "identifier", element.getIdentifier().get(i), i);
14677    }
14678    for (int i = 0; i < element.getBasedOn().size(); i++) {
14679      composeReference(t, "Immunization", "basedOn", element.getBasedOn().get(i), i);
14680    }
14681    if (element.hasStatusElement()) {
14682      composeEnum(t, "Immunization", "status", element.getStatusElement(), -1);
14683    }
14684    if (element.hasStatusReason()) {
14685      composeCodeableConcept(t, "Immunization", "statusReason", element.getStatusReason(), -1);
14686    }
14687    if (element.hasVaccineCode()) {
14688      composeCodeableConcept(t, "Immunization", "vaccineCode", element.getVaccineCode(), -1);
14689    }
14690    if (element.hasAdministeredProduct()) {
14691      composeCodeableReference(t, "Immunization", "administeredProduct", element.getAdministeredProduct(), -1);
14692    }
14693    if (element.hasManufacturer()) {
14694      composeCodeableReference(t, "Immunization", "manufacturer", element.getManufacturer(), -1);
14695    }
14696    if (element.hasLotNumberElement()) {
14697      composeString(t, "Immunization", "lotNumber", element.getLotNumberElement(), -1);
14698    }
14699    if (element.hasExpirationDateElement()) {
14700      composeDate(t, "Immunization", "expirationDate", element.getExpirationDateElement(), -1);
14701    }
14702    if (element.hasPatient()) {
14703      composeReference(t, "Immunization", "patient", element.getPatient(), -1);
14704    }
14705    if (element.hasEncounter()) {
14706      composeReference(t, "Immunization", "encounter", element.getEncounter(), -1);
14707    }
14708    for (int i = 0; i < element.getSupportingInformation().size(); i++) {
14709      composeReference(t, "Immunization", "supportingInformation", element.getSupportingInformation().get(i), i);
14710    }
14711    if (element.hasOccurrence()) {
14712      composeType(t, "Immunization", "occurrence", element.getOccurrence(), -1);
14713    }
14714    if (element.hasPrimarySourceElement()) {
14715      composeBoolean(t, "Immunization", "primarySource", element.getPrimarySourceElement(), -1);
14716    }
14717    if (element.hasInformationSource()) {
14718      composeCodeableReference(t, "Immunization", "informationSource", element.getInformationSource(), -1);
14719    }
14720    if (element.hasLocation()) {
14721      composeReference(t, "Immunization", "location", element.getLocation(), -1);
14722    }
14723    if (element.hasSite()) {
14724      composeCodeableConcept(t, "Immunization", "site", element.getSite(), -1);
14725    }
14726    if (element.hasRoute()) {
14727      composeCodeableConcept(t, "Immunization", "route", element.getRoute(), -1);
14728    }
14729    if (element.hasDoseQuantity()) {
14730      composeQuantity(t, "Immunization", "doseQuantity", element.getDoseQuantity(), -1);
14731    }
14732    for (int i = 0; i < element.getPerformer().size(); i++) {
14733      composeImmunizationPerformerComponent(t, "Immunization", "performer", element.getPerformer().get(i), i);
14734    }
14735    for (int i = 0; i < element.getNote().size(); i++) {
14736      composeAnnotation(t, "Immunization", "note", element.getNote().get(i), i);
14737    }
14738    for (int i = 0; i < element.getReason().size(); i++) {
14739      composeCodeableReference(t, "Immunization", "reason", element.getReason().get(i), i);
14740    }
14741    if (element.hasIsSubpotentElement()) {
14742      composeBoolean(t, "Immunization", "isSubpotent", element.getIsSubpotentElement(), -1);
14743    }
14744    for (int i = 0; i < element.getSubpotentReason().size(); i++) {
14745      composeCodeableConcept(t, "Immunization", "subpotentReason", element.getSubpotentReason().get(i), i);
14746    }
14747    for (int i = 0; i < element.getProgramEligibility().size(); i++) {
14748      composeImmunizationProgramEligibilityComponent(t, "Immunization", "programEligibility", element.getProgramEligibility().get(i), i);
14749    }
14750    if (element.hasFundingSource()) {
14751      composeCodeableConcept(t, "Immunization", "fundingSource", element.getFundingSource(), -1);
14752    }
14753    for (int i = 0; i < element.getReaction().size(); i++) {
14754      composeImmunizationReactionComponent(t, "Immunization", "reaction", element.getReaction().get(i), i);
14755    }
14756    for (int i = 0; i < element.getProtocolApplied().size(); i++) {
14757      composeImmunizationProtocolAppliedComponent(t, "Immunization", "protocolApplied", element.getProtocolApplied().get(i), i);
14758    }
14759  }
14760
14761  protected void composeImmunizationPerformerComponent(Complex parent, String parentType, String name, Immunization.ImmunizationPerformerComponent element, int index) {
14762    if (element == null) 
14763      return;
14764    Complex t;
14765    if (Utilities.noString(parentType))
14766      t = parent;
14767    else {
14768      t = parent.predicate("fhir:"+name,index > -1);
14769    }
14770    composeBackboneElement(t, "performer", name, element, index);
14771    if (element.hasFunction()) {
14772      composeCodeableConcept(t, "ImmunizationPerformerComponent", "function", element.getFunction(), -1);
14773    }
14774    if (element.hasActor()) {
14775      composeReference(t, "ImmunizationPerformerComponent", "actor", element.getActor(), -1);
14776    }
14777  }
14778
14779  protected void composeImmunizationProgramEligibilityComponent(Complex parent, String parentType, String name, Immunization.ImmunizationProgramEligibilityComponent element, int index) {
14780    if (element == null) 
14781      return;
14782    Complex t;
14783    if (Utilities.noString(parentType))
14784      t = parent;
14785    else {
14786      t = parent.predicate("fhir:"+name,index > -1);
14787    }
14788    composeBackboneElement(t, "programEligibility", name, element, index);
14789    if (element.hasProgram()) {
14790      composeCodeableConcept(t, "ImmunizationProgramEligibilityComponent", "program", element.getProgram(), -1);
14791    }
14792    if (element.hasProgramStatus()) {
14793      composeCodeableConcept(t, "ImmunizationProgramEligibilityComponent", "programStatus", element.getProgramStatus(), -1);
14794    }
14795  }
14796
14797  protected void composeImmunizationReactionComponent(Complex parent, String parentType, String name, Immunization.ImmunizationReactionComponent 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:"+name,index > -1);
14805    }
14806    composeBackboneElement(t, "reaction", name, element, index);
14807    if (element.hasDateElement()) {
14808      composeDateTime(t, "ImmunizationReactionComponent", "date", element.getDateElement(), -1);
14809    }
14810    if (element.hasManifestation()) {
14811      composeCodeableReference(t, "ImmunizationReactionComponent", "manifestation", element.getManifestation(), -1);
14812    }
14813    if (element.hasReportedElement()) {
14814      composeBoolean(t, "ImmunizationReactionComponent", "reported", element.getReportedElement(), -1);
14815    }
14816  }
14817
14818  protected void composeImmunizationProtocolAppliedComponent(Complex parent, String parentType, String name, Immunization.ImmunizationProtocolAppliedComponent element, int index) {
14819    if (element == null) 
14820      return;
14821    Complex t;
14822    if (Utilities.noString(parentType))
14823      t = parent;
14824    else {
14825      t = parent.predicate("fhir:"+name,index > -1);
14826    }
14827    composeBackboneElement(t, "protocolApplied", name, element, index);
14828    if (element.hasSeriesElement()) {
14829      composeString(t, "ImmunizationProtocolAppliedComponent", "series", element.getSeriesElement(), -1);
14830    }
14831    if (element.hasAuthority()) {
14832      composeReference(t, "ImmunizationProtocolAppliedComponent", "authority", element.getAuthority(), -1);
14833    }
14834    for (int i = 0; i < element.getTargetDisease().size(); i++) {
14835      composeCodeableConcept(t, "ImmunizationProtocolAppliedComponent", "targetDisease", element.getTargetDisease().get(i), i);
14836    }
14837    if (element.hasDoseNumberElement()) {
14838      composeString(t, "ImmunizationProtocolAppliedComponent", "doseNumber", element.getDoseNumberElement(), -1);
14839    }
14840    if (element.hasSeriesDosesElement()) {
14841      composeString(t, "ImmunizationProtocolAppliedComponent", "seriesDoses", element.getSeriesDosesElement(), -1);
14842    }
14843  }
14844
14845  protected void composeImmunizationEvaluation(Complex parent, String parentType, String name, ImmunizationEvaluation element, int index) {
14846    if (element == null) 
14847      return;
14848    Complex t;
14849    if (Utilities.noString(parentType))
14850      t = parent;
14851    else {
14852      t = parent.predicate("fhir:"+name,index > -1);
14853    }
14854    composeDomainResource(t, "ImmunizationEvaluation", name, element, index);
14855    for (int i = 0; i < element.getIdentifier().size(); i++) {
14856      composeIdentifier(t, "ImmunizationEvaluation", "identifier", element.getIdentifier().get(i), i);
14857    }
14858    if (element.hasStatusElement()) {
14859      composeEnum(t, "ImmunizationEvaluation", "status", element.getStatusElement(), -1);
14860    }
14861    if (element.hasPatient()) {
14862      composeReference(t, "ImmunizationEvaluation", "patient", element.getPatient(), -1);
14863    }
14864    if (element.hasDateElement()) {
14865      composeDateTime(t, "ImmunizationEvaluation", "date", element.getDateElement(), -1);
14866    }
14867    if (element.hasAuthority()) {
14868      composeReference(t, "ImmunizationEvaluation", "authority", element.getAuthority(), -1);
14869    }
14870    if (element.hasTargetDisease()) {
14871      composeCodeableConcept(t, "ImmunizationEvaluation", "targetDisease", element.getTargetDisease(), -1);
14872    }
14873    if (element.hasImmunizationEvent()) {
14874      composeReference(t, "ImmunizationEvaluation", "immunizationEvent", element.getImmunizationEvent(), -1);
14875    }
14876    if (element.hasDoseStatus()) {
14877      composeCodeableConcept(t, "ImmunizationEvaluation", "doseStatus", element.getDoseStatus(), -1);
14878    }
14879    for (int i = 0; i < element.getDoseStatusReason().size(); i++) {
14880      composeCodeableConcept(t, "ImmunizationEvaluation", "doseStatusReason", element.getDoseStatusReason().get(i), i);
14881    }
14882    if (element.hasDescriptionElement()) {
14883      composeMarkdown(t, "ImmunizationEvaluation", "description", element.getDescriptionElement(), -1);
14884    }
14885    if (element.hasSeriesElement()) {
14886      composeString(t, "ImmunizationEvaluation", "series", element.getSeriesElement(), -1);
14887    }
14888    if (element.hasDoseNumberElement()) {
14889      composeString(t, "ImmunizationEvaluation", "doseNumber", element.getDoseNumberElement(), -1);
14890    }
14891    if (element.hasSeriesDosesElement()) {
14892      composeString(t, "ImmunizationEvaluation", "seriesDoses", element.getSeriesDosesElement(), -1);
14893    }
14894  }
14895
14896  protected void composeImmunizationRecommendation(Complex parent, String parentType, String name, ImmunizationRecommendation element, int index) {
14897    if (element == null) 
14898      return;
14899    Complex t;
14900    if (Utilities.noString(parentType))
14901      t = parent;
14902    else {
14903      t = parent.predicate("fhir:"+name,index > -1);
14904    }
14905    composeDomainResource(t, "ImmunizationRecommendation", name, element, index);
14906    for (int i = 0; i < element.getIdentifier().size(); i++) {
14907      composeIdentifier(t, "ImmunizationRecommendation", "identifier", element.getIdentifier().get(i), i);
14908    }
14909    if (element.hasPatient()) {
14910      composeReference(t, "ImmunizationRecommendation", "patient", element.getPatient(), -1);
14911    }
14912    if (element.hasDateElement()) {
14913      composeDateTime(t, "ImmunizationRecommendation", "date", element.getDateElement(), -1);
14914    }
14915    if (element.hasAuthority()) {
14916      composeReference(t, "ImmunizationRecommendation", "authority", element.getAuthority(), -1);
14917    }
14918    for (int i = 0; i < element.getRecommendation().size(); i++) {
14919      composeImmunizationRecommendationRecommendationComponent(t, "ImmunizationRecommendation", "recommendation", element.getRecommendation().get(i), i);
14920    }
14921  }
14922
14923  protected void composeImmunizationRecommendationRecommendationComponent(Complex parent, String parentType, String name, ImmunizationRecommendation.ImmunizationRecommendationRecommendationComponent element, int index) {
14924    if (element == null) 
14925      return;
14926    Complex t;
14927    if (Utilities.noString(parentType))
14928      t = parent;
14929    else {
14930      t = parent.predicate("fhir:"+name,index > -1);
14931    }
14932    composeBackboneElement(t, "recommendation", name, element, index);
14933    for (int i = 0; i < element.getVaccineCode().size(); i++) {
14934      composeCodeableConcept(t, "ImmunizationRecommendationRecommendationComponent", "vaccineCode", element.getVaccineCode().get(i), i);
14935    }
14936    for (int i = 0; i < element.getTargetDisease().size(); i++) {
14937      composeCodeableConcept(t, "ImmunizationRecommendationRecommendationComponent", "targetDisease", element.getTargetDisease().get(i), i);
14938    }
14939    for (int i = 0; i < element.getContraindicatedVaccineCode().size(); i++) {
14940      composeCodeableConcept(t, "ImmunizationRecommendationRecommendationComponent", "contraindicatedVaccineCode", element.getContraindicatedVaccineCode().get(i), i);
14941    }
14942    if (element.hasForecastStatus()) {
14943      composeCodeableConcept(t, "ImmunizationRecommendationRecommendationComponent", "forecastStatus", element.getForecastStatus(), -1);
14944    }
14945    for (int i = 0; i < element.getForecastReason().size(); i++) {
14946      composeCodeableConcept(t, "ImmunizationRecommendationRecommendationComponent", "forecastReason", element.getForecastReason().get(i), i);
14947    }
14948    for (int i = 0; i < element.getDateCriterion().size(); i++) {
14949      composeImmunizationRecommendationRecommendationDateCriterionComponent(t, "ImmunizationRecommendationRecommendationComponent", "dateCriterion", element.getDateCriterion().get(i), i);
14950    }
14951    if (element.hasDescriptionElement()) {
14952      composeMarkdown(t, "ImmunizationRecommendationRecommendationComponent", "description", element.getDescriptionElement(), -1);
14953    }
14954    if (element.hasSeriesElement()) {
14955      composeString(t, "ImmunizationRecommendationRecommendationComponent", "series", element.getSeriesElement(), -1);
14956    }
14957    if (element.hasDoseNumberElement()) {
14958      composeString(t, "ImmunizationRecommendationRecommendationComponent", "doseNumber", element.getDoseNumberElement(), -1);
14959    }
14960    if (element.hasSeriesDosesElement()) {
14961      composeString(t, "ImmunizationRecommendationRecommendationComponent", "seriesDoses", element.getSeriesDosesElement(), -1);
14962    }
14963    for (int i = 0; i < element.getSupportingImmunization().size(); i++) {
14964      composeReference(t, "ImmunizationRecommendationRecommendationComponent", "supportingImmunization", element.getSupportingImmunization().get(i), i);
14965    }
14966    for (int i = 0; i < element.getSupportingPatientInformation().size(); i++) {
14967      composeReference(t, "ImmunizationRecommendationRecommendationComponent", "supportingPatientInformation", element.getSupportingPatientInformation().get(i), i);
14968    }
14969  }
14970
14971  protected void composeImmunizationRecommendationRecommendationDateCriterionComponent(Complex parent, String parentType, String name, ImmunizationRecommendation.ImmunizationRecommendationRecommendationDateCriterionComponent element, int index) {
14972    if (element == null) 
14973      return;
14974    Complex t;
14975    if (Utilities.noString(parentType))
14976      t = parent;
14977    else {
14978      t = parent.predicate("fhir:"+name,index > -1);
14979    }
14980    composeBackboneElement(t, "dateCriterion", name, element, index);
14981    if (element.hasCode()) {
14982      composeCodeableConcept(t, "ImmunizationRecommendationRecommendationDateCriterionComponent", "code", element.getCode(), -1);
14983    }
14984    if (element.hasValueElement()) {
14985      composeDateTime(t, "ImmunizationRecommendationRecommendationDateCriterionComponent", "value", element.getValueElement(), -1);
14986    }
14987  }
14988
14989  protected void composeImplementationGuide(Complex parent, String parentType, String name, ImplementationGuide element, int index) {
14990    if (element == null) 
14991      return;
14992    Complex t;
14993    if (Utilities.noString(parentType))
14994      t = parent;
14995    else {
14996      t = parent.predicate("fhir:"+name,index > -1);
14997    }
14998    composeCanonicalResource(t, "ImplementationGuide", name, element, index);
14999    if (element.hasUrlElement()) {
15000      composeUri(t, "ImplementationGuide", "url", element.getUrlElement(), -1);
15001    }
15002    for (int i = 0; i < element.getIdentifier().size(); i++) {
15003      composeIdentifier(t, "ImplementationGuide", "identifier", element.getIdentifier().get(i), i);
15004    }
15005    if (element.hasVersionElement()) {
15006      composeString(t, "ImplementationGuide", "version", element.getVersionElement(), -1);
15007    }
15008    if (element.hasVersionAlgorithm()) {
15009      composeType(t, "ImplementationGuide", "versionAlgorithm", element.getVersionAlgorithm(), -1);
15010    }
15011    if (element.hasNameElement()) {
15012      composeString(t, "ImplementationGuide", "name", element.getNameElement(), -1);
15013    }
15014    if (element.hasTitleElement()) {
15015      composeString(t, "ImplementationGuide", "title", element.getTitleElement(), -1);
15016    }
15017    if (element.hasStatusElement()) {
15018      composeEnum(t, "ImplementationGuide", "status", element.getStatusElement(), -1);
15019    }
15020    if (element.hasExperimentalElement()) {
15021      composeBoolean(t, "ImplementationGuide", "experimental", element.getExperimentalElement(), -1);
15022    }
15023    if (element.hasDateElement()) {
15024      composeDateTime(t, "ImplementationGuide", "date", element.getDateElement(), -1);
15025    }
15026    if (element.hasPublisherElement()) {
15027      composeString(t, "ImplementationGuide", "publisher", element.getPublisherElement(), -1);
15028    }
15029    for (int i = 0; i < element.getContact().size(); i++) {
15030      composeContactDetail(t, "ImplementationGuide", "contact", element.getContact().get(i), i);
15031    }
15032    if (element.hasDescriptionElement()) {
15033      composeMarkdown(t, "ImplementationGuide", "description", element.getDescriptionElement(), -1);
15034    }
15035    for (int i = 0; i < element.getUseContext().size(); i++) {
15036      composeUsageContext(t, "ImplementationGuide", "useContext", element.getUseContext().get(i), i);
15037    }
15038    for (int i = 0; i < element.getJurisdiction().size(); i++) {
15039      composeCodeableConcept(t, "ImplementationGuide", "jurisdiction", element.getJurisdiction().get(i), i);
15040    }
15041    if (element.hasPurposeElement()) {
15042      composeMarkdown(t, "ImplementationGuide", "purpose", element.getPurposeElement(), -1);
15043    }
15044    if (element.hasCopyrightElement()) {
15045      composeMarkdown(t, "ImplementationGuide", "copyright", element.getCopyrightElement(), -1);
15046    }
15047    if (element.hasCopyrightLabelElement()) {
15048      composeString(t, "ImplementationGuide", "copyrightLabel", element.getCopyrightLabelElement(), -1);
15049    }
15050    if (element.hasPackageIdElement()) {
15051      composeId(t, "ImplementationGuide", "packageId", element.getPackageIdElement(), -1);
15052    }
15053    if (element.hasLicenseElement()) {
15054      composeEnum(t, "ImplementationGuide", "license", element.getLicenseElement(), -1);
15055    }
15056    for (int i = 0; i < element.getFhirVersion().size(); i++) {
15057      composeEnum(t, "ImplementationGuide", "fhirVersion", element.getFhirVersion().get(i), i);
15058    }
15059    for (int i = 0; i < element.getDependsOn().size(); i++) {
15060      composeImplementationGuideDependsOnComponent(t, "ImplementationGuide", "dependsOn", element.getDependsOn().get(i), i);
15061    }
15062    for (int i = 0; i < element.getGlobal().size(); i++) {
15063      composeImplementationGuideGlobalComponent(t, "ImplementationGuide", "global", element.getGlobal().get(i), i);
15064    }
15065    if (element.hasDefinition()) {
15066      composeImplementationGuideDefinitionComponent(t, "ImplementationGuide", "definition", element.getDefinition(), -1);
15067    }
15068    if (element.hasManifest()) {
15069      composeImplementationGuideManifestComponent(t, "ImplementationGuide", "manifest", element.getManifest(), -1);
15070    }
15071  }
15072
15073  protected void composeImplementationGuideDependsOnComponent(Complex parent, String parentType, String name, ImplementationGuide.ImplementationGuideDependsOnComponent 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:"+name,index > -1);
15081    }
15082    composeBackboneElement(t, "dependsOn", name, element, index);
15083    if (element.hasUriElement()) {
15084      composeCanonical(t, "ImplementationGuideDependsOnComponent", "uri", element.getUriElement(), -1);
15085    }
15086    if (element.hasPackageIdElement()) {
15087      composeId(t, "ImplementationGuideDependsOnComponent", "packageId", element.getPackageIdElement(), -1);
15088    }
15089    if (element.hasVersionElement()) {
15090      composeString(t, "ImplementationGuideDependsOnComponent", "version", element.getVersionElement(), -1);
15091    }
15092    if (element.hasReasonElement()) {
15093      composeMarkdown(t, "ImplementationGuideDependsOnComponent", "reason", element.getReasonElement(), -1);
15094    }
15095  }
15096
15097  protected void composeImplementationGuideGlobalComponent(Complex parent, String parentType, String name, ImplementationGuide.ImplementationGuideGlobalComponent element, int index) {
15098    if (element == null) 
15099      return;
15100    Complex t;
15101    if (Utilities.noString(parentType))
15102      t = parent;
15103    else {
15104      t = parent.predicate("fhir:"+name,index > -1);
15105    }
15106    composeBackboneElement(t, "global", name, element, index);
15107    if (element.hasTypeElement()) {
15108      composeCode(t, "ImplementationGuideGlobalComponent", "type", element.getTypeElement(), -1);
15109    }
15110    if (element.hasProfileElement()) {
15111      composeCanonical(t, "ImplementationGuideGlobalComponent", "profile", element.getProfileElement(), -1);
15112    }
15113  }
15114
15115  protected void composeImplementationGuideDefinitionComponent(Complex parent, String parentType, String name, ImplementationGuide.ImplementationGuideDefinitionComponent element, int index) {
15116    if (element == null) 
15117      return;
15118    Complex t;
15119    if (Utilities.noString(parentType))
15120      t = parent;
15121    else {
15122      t = parent.predicate("fhir:"+name,index > -1);
15123    }
15124    composeBackboneElement(t, "definition", name, element, index);
15125    for (int i = 0; i < element.getGrouping().size(); i++) {
15126      composeImplementationGuideDefinitionGroupingComponent(t, "ImplementationGuideDefinitionComponent", "grouping", element.getGrouping().get(i), i);
15127    }
15128    for (int i = 0; i < element.getResource().size(); i++) {
15129      composeImplementationGuideDefinitionResourceComponent(t, "ImplementationGuideDefinitionComponent", "resource", element.getResource().get(i), i);
15130    }
15131    if (element.hasPage()) {
15132      composeImplementationGuideDefinitionPageComponent(t, "ImplementationGuideDefinitionComponent", "page", element.getPage(), -1);
15133    }
15134    for (int i = 0; i < element.getParameter().size(); i++) {
15135      composeImplementationGuideDefinitionParameterComponent(t, "ImplementationGuideDefinitionComponent", "parameter", element.getParameter().get(i), i);
15136    }
15137    for (int i = 0; i < element.getTemplate().size(); i++) {
15138      composeImplementationGuideDefinitionTemplateComponent(t, "ImplementationGuideDefinitionComponent", "template", element.getTemplate().get(i), i);
15139    }
15140  }
15141
15142  protected void composeImplementationGuideDefinitionGroupingComponent(Complex parent, String parentType, String name, ImplementationGuide.ImplementationGuideDefinitionGroupingComponent element, int index) {
15143    if (element == null) 
15144      return;
15145    Complex t;
15146    if (Utilities.noString(parentType))
15147      t = parent;
15148    else {
15149      t = parent.predicate("fhir:"+name,index > -1);
15150    }
15151    composeBackboneElement(t, "grouping", name, element, index);
15152    if (element.hasNameElement()) {
15153      composeString(t, "ImplementationGuideDefinitionGroupingComponent", "name", element.getNameElement(), -1);
15154    }
15155    if (element.hasDescriptionElement()) {
15156      composeMarkdown(t, "ImplementationGuideDefinitionGroupingComponent", "description", element.getDescriptionElement(), -1);
15157    }
15158  }
15159
15160  protected void composeImplementationGuideDefinitionResourceComponent(Complex parent, String parentType, String name, ImplementationGuide.ImplementationGuideDefinitionResourceComponent element, int index) {
15161    if (element == null) 
15162      return;
15163    Complex t;
15164    if (Utilities.noString(parentType))
15165      t = parent;
15166    else {
15167      t = parent.predicate("fhir:"+name,index > -1);
15168    }
15169    composeBackboneElement(t, "resource", name, element, index);
15170    if (element.hasReference()) {
15171      composeReference(t, "ImplementationGuideDefinitionResourceComponent", "reference", element.getReference(), -1);
15172    }
15173    for (int i = 0; i < element.getFhirVersion().size(); i++) {
15174      composeEnum(t, "ImplementationGuideDefinitionResourceComponent", "fhirVersion", element.getFhirVersion().get(i), i);
15175    }
15176    if (element.hasNameElement()) {
15177      composeString(t, "ImplementationGuideDefinitionResourceComponent", "name", element.getNameElement(), -1);
15178    }
15179    if (element.hasDescriptionElement()) {
15180      composeMarkdown(t, "ImplementationGuideDefinitionResourceComponent", "description", element.getDescriptionElement(), -1);
15181    }
15182    if (element.hasIsExampleElement()) {
15183      composeBoolean(t, "ImplementationGuideDefinitionResourceComponent", "isExample", element.getIsExampleElement(), -1);
15184    }
15185    for (int i = 0; i < element.getProfile().size(); i++) {
15186      composeCanonical(t, "ImplementationGuideDefinitionResourceComponent", "profile", element.getProfile().get(i), i);
15187    }
15188    if (element.hasGroupingIdElement()) {
15189      composeId(t, "ImplementationGuideDefinitionResourceComponent", "groupingId", element.getGroupingIdElement(), -1);
15190    }
15191  }
15192
15193  protected void composeImplementationGuideDefinitionPageComponent(Complex parent, String parentType, String name, ImplementationGuide.ImplementationGuideDefinitionPageComponent element, int index) {
15194    if (element == null) 
15195      return;
15196    Complex t;
15197    if (Utilities.noString(parentType))
15198      t = parent;
15199    else {
15200      t = parent.predicate("fhir:"+name,index > -1);
15201    }
15202    composeBackboneElement(t, "page", name, element, index);
15203    if (element.hasSource()) {
15204      composeType(t, "ImplementationGuideDefinitionPageComponent", "source", element.getSource(), -1);
15205    }
15206    if (element.hasNameElement()) {
15207      composeUrl(t, "ImplementationGuideDefinitionPageComponent", "name", element.getNameElement(), -1);
15208    }
15209    if (element.hasTitleElement()) {
15210      composeString(t, "ImplementationGuideDefinitionPageComponent", "title", element.getTitleElement(), -1);
15211    }
15212    if (element.hasGenerationElement()) {
15213      composeEnum(t, "ImplementationGuideDefinitionPageComponent", "generation", element.getGenerationElement(), -1);
15214    }
15215    for (int i = 0; i < element.getPage().size(); i++) {
15216      composeImplementationGuideDefinitionPageComponent(t, "ImplementationGuideDefinitionPageComponent", "page", element.getPage().get(i), i);
15217    }
15218  }
15219
15220  protected void composeImplementationGuideDefinitionParameterComponent(Complex parent, String parentType, String name, ImplementationGuide.ImplementationGuideDefinitionParameterComponent element, int index) {
15221    if (element == null) 
15222      return;
15223    Complex t;
15224    if (Utilities.noString(parentType))
15225      t = parent;
15226    else {
15227      t = parent.predicate("fhir:"+name,index > -1);
15228    }
15229    composeBackboneElement(t, "parameter", name, element, index);
15230    if (element.hasCode()) {
15231      composeCoding(t, "ImplementationGuideDefinitionParameterComponent", "code", element.getCode(), -1);
15232    }
15233    if (element.hasValueElement()) {
15234      composeString(t, "ImplementationGuideDefinitionParameterComponent", "value", element.getValueElement(), -1);
15235    }
15236  }
15237
15238  protected void composeImplementationGuideDefinitionTemplateComponent(Complex parent, String parentType, String name, ImplementationGuide.ImplementationGuideDefinitionTemplateComponent element, int index) {
15239    if (element == null) 
15240      return;
15241    Complex t;
15242    if (Utilities.noString(parentType))
15243      t = parent;
15244    else {
15245      t = parent.predicate("fhir:"+name,index > -1);
15246    }
15247    composeBackboneElement(t, "template", name, element, index);
15248    if (element.hasCodeElement()) {
15249      composeCode(t, "ImplementationGuideDefinitionTemplateComponent", "code", element.getCodeElement(), -1);
15250    }
15251    if (element.hasSourceElement()) {
15252      composeString(t, "ImplementationGuideDefinitionTemplateComponent", "source", element.getSourceElement(), -1);
15253    }
15254    if (element.hasScopeElement()) {
15255      composeString(t, "ImplementationGuideDefinitionTemplateComponent", "scope", element.getScopeElement(), -1);
15256    }
15257  }
15258
15259  protected void composeImplementationGuideManifestComponent(Complex parent, String parentType, String name, ImplementationGuide.ImplementationGuideManifestComponent element, int index) {
15260    if (element == null) 
15261      return;
15262    Complex t;
15263    if (Utilities.noString(parentType))
15264      t = parent;
15265    else {
15266      t = parent.predicate("fhir:"+name,index > -1);
15267    }
15268    composeBackboneElement(t, "manifest", name, element, index);
15269    if (element.hasRenderingElement()) {
15270      composeUrl(t, "ImplementationGuideManifestComponent", "rendering", element.getRenderingElement(), -1);
15271    }
15272    for (int i = 0; i < element.getResource().size(); i++) {
15273      composeImplementationGuideManifestResourceComponent(t, "ImplementationGuideManifestComponent", "resource", element.getResource().get(i), i);
15274    }
15275    for (int i = 0; i < element.getPage().size(); i++) {
15276      composeImplementationGuideManifestPageComponent(t, "ImplementationGuideManifestComponent", "page", element.getPage().get(i), i);
15277    }
15278    for (int i = 0; i < element.getImage().size(); i++) {
15279      composeString(t, "ImplementationGuideManifestComponent", "image", element.getImage().get(i), i);
15280    }
15281    for (int i = 0; i < element.getOther().size(); i++) {
15282      composeString(t, "ImplementationGuideManifestComponent", "other", element.getOther().get(i), i);
15283    }
15284  }
15285
15286  protected void composeImplementationGuideManifestResourceComponent(Complex parent, String parentType, String name, ImplementationGuide.ManifestResourceComponent element, int index) {
15287    if (element == null) 
15288      return;
15289    Complex t;
15290    if (Utilities.noString(parentType))
15291      t = parent;
15292    else {
15293      t = parent.predicate("fhir:"+name,index > -1);
15294    }
15295    composeBackboneElement(t, "resource", name, element, index);
15296    if (element.hasReference()) {
15297      composeReference(t, "ManifestResourceComponent", "reference", element.getReference(), -1);
15298    }
15299    if (element.hasIsExampleElement()) {
15300      composeBoolean(t, "ManifestResourceComponent", "isExample", element.getIsExampleElement(), -1);
15301    }
15302    for (int i = 0; i < element.getProfile().size(); i++) {
15303      composeCanonical(t, "ManifestResourceComponent", "profile", element.getProfile().get(i), i);
15304    }
15305    if (element.hasRelativePathElement()) {
15306      composeUrl(t, "ManifestResourceComponent", "relativePath", element.getRelativePathElement(), -1);
15307    }
15308  }
15309
15310  protected void composeImplementationGuideManifestPageComponent(Complex parent, String parentType, String name, ImplementationGuide.ManifestPageComponent element, int index) {
15311    if (element == null) 
15312      return;
15313    Complex t;
15314    if (Utilities.noString(parentType))
15315      t = parent;
15316    else {
15317      t = parent.predicate("fhir:"+name,index > -1);
15318    }
15319    composeBackboneElement(t, "page", name, element, index);
15320    if (element.hasNameElement()) {
15321      composeString(t, "ManifestPageComponent", "name", element.getNameElement(), -1);
15322    }
15323    if (element.hasTitleElement()) {
15324      composeString(t, "ManifestPageComponent", "title", element.getTitleElement(), -1);
15325    }
15326    for (int i = 0; i < element.getAnchor().size(); i++) {
15327      composeString(t, "ManifestPageComponent", "anchor", element.getAnchor().get(i), i);
15328    }
15329  }
15330
15331  protected void composeIngredient(Complex parent, String parentType, String name, Ingredient element, int index) {
15332    if (element == null) 
15333      return;
15334    Complex t;
15335    if (Utilities.noString(parentType))
15336      t = parent;
15337    else {
15338      t = parent.predicate("fhir:"+name,index > -1);
15339    }
15340    composeDomainResource(t, "Ingredient", name, element, index);
15341    if (element.hasIdentifier()) {
15342      composeIdentifier(t, "Ingredient", "identifier", element.getIdentifier(), -1);
15343    }
15344    if (element.hasStatusElement()) {
15345      composeEnum(t, "Ingredient", "status", element.getStatusElement(), -1);
15346    }
15347    for (int i = 0; i < element.getFor().size(); i++) {
15348      composeReference(t, "Ingredient", "for", element.getFor().get(i), i);
15349    }
15350    if (element.hasRole()) {
15351      composeCodeableConcept(t, "Ingredient", "role", element.getRole(), -1);
15352    }
15353    for (int i = 0; i < element.getFunction().size(); i++) {
15354      composeCodeableConcept(t, "Ingredient", "function", element.getFunction().get(i), i);
15355    }
15356    if (element.hasGroup()) {
15357      composeCodeableConcept(t, "Ingredient", "group", element.getGroup(), -1);
15358    }
15359    if (element.hasAllergenicIndicatorElement()) {
15360      composeBoolean(t, "Ingredient", "allergenicIndicator", element.getAllergenicIndicatorElement(), -1);
15361    }
15362    if (element.hasCommentElement()) {
15363      composeMarkdown(t, "Ingredient", "comment", element.getCommentElement(), -1);
15364    }
15365    for (int i = 0; i < element.getManufacturer().size(); i++) {
15366      composeIngredientManufacturerComponent(t, "Ingredient", "manufacturer", element.getManufacturer().get(i), i);
15367    }
15368    if (element.hasSubstance()) {
15369      composeIngredientSubstanceComponent(t, "Ingredient", "substance", element.getSubstance(), -1);
15370    }
15371  }
15372
15373  protected void composeIngredientManufacturerComponent(Complex parent, String parentType, String name, Ingredient.IngredientManufacturerComponent element, int index) {
15374    if (element == null) 
15375      return;
15376    Complex t;
15377    if (Utilities.noString(parentType))
15378      t = parent;
15379    else {
15380      t = parent.predicate("fhir:"+name,index > -1);
15381    }
15382    composeBackboneElement(t, "manufacturer", name, element, index);
15383    if (element.hasRoleElement()) {
15384      composeEnum(t, "IngredientManufacturerComponent", "role", element.getRoleElement(), -1);
15385    }
15386    if (element.hasManufacturer()) {
15387      composeReference(t, "IngredientManufacturerComponent", "manufacturer", element.getManufacturer(), -1);
15388    }
15389  }
15390
15391  protected void composeIngredientSubstanceComponent(Complex parent, String parentType, String name, Ingredient.IngredientSubstanceComponent element, int index) {
15392    if (element == null) 
15393      return;
15394    Complex t;
15395    if (Utilities.noString(parentType))
15396      t = parent;
15397    else {
15398      t = parent.predicate("fhir:"+name,index > -1);
15399    }
15400    composeBackboneElement(t, "substance", name, element, index);
15401    if (element.hasCode()) {
15402      composeCodeableReference(t, "IngredientSubstanceComponent", "code", element.getCode(), -1);
15403    }
15404    for (int i = 0; i < element.getStrength().size(); i++) {
15405      composeIngredientSubstanceStrengthComponent(t, "IngredientSubstanceComponent", "strength", element.getStrength().get(i), i);
15406    }
15407  }
15408
15409  protected void composeIngredientSubstanceStrengthComponent(Complex parent, String parentType, String name, Ingredient.IngredientSubstanceStrengthComponent element, int index) {
15410    if (element == null) 
15411      return;
15412    Complex t;
15413    if (Utilities.noString(parentType))
15414      t = parent;
15415    else {
15416      t = parent.predicate("fhir:"+name,index > -1);
15417    }
15418    composeBackboneElement(t, "strength", name, element, index);
15419    if (element.hasPresentation()) {
15420      composeType(t, "IngredientSubstanceStrengthComponent", "presentation", element.getPresentation(), -1);
15421    }
15422    if (element.hasTextPresentationElement()) {
15423      composeString(t, "IngredientSubstanceStrengthComponent", "textPresentation", element.getTextPresentationElement(), -1);
15424    }
15425    if (element.hasConcentration()) {
15426      composeType(t, "IngredientSubstanceStrengthComponent", "concentration", element.getConcentration(), -1);
15427    }
15428    if (element.hasTextConcentrationElement()) {
15429      composeString(t, "IngredientSubstanceStrengthComponent", "textConcentration", element.getTextConcentrationElement(), -1);
15430    }
15431    if (element.hasBasis()) {
15432      composeCodeableConcept(t, "IngredientSubstanceStrengthComponent", "basis", element.getBasis(), -1);
15433    }
15434    if (element.hasMeasurementPointElement()) {
15435      composeString(t, "IngredientSubstanceStrengthComponent", "measurementPoint", element.getMeasurementPointElement(), -1);
15436    }
15437    for (int i = 0; i < element.getCountry().size(); i++) {
15438      composeCodeableConcept(t, "IngredientSubstanceStrengthComponent", "country", element.getCountry().get(i), i);
15439    }
15440    for (int i = 0; i < element.getReferenceStrength().size(); i++) {
15441      composeIngredientSubstanceStrengthReferenceStrengthComponent(t, "IngredientSubstanceStrengthComponent", "referenceStrength", element.getReferenceStrength().get(i), i);
15442    }
15443  }
15444
15445  protected void composeIngredientSubstanceStrengthReferenceStrengthComponent(Complex parent, String parentType, String name, Ingredient.IngredientSubstanceStrengthReferenceStrengthComponent element, int index) {
15446    if (element == null) 
15447      return;
15448    Complex t;
15449    if (Utilities.noString(parentType))
15450      t = parent;
15451    else {
15452      t = parent.predicate("fhir:"+name,index > -1);
15453    }
15454    composeBackboneElement(t, "referenceStrength", name, element, index);
15455    if (element.hasSubstance()) {
15456      composeCodeableReference(t, "IngredientSubstanceStrengthReferenceStrengthComponent", "substance", element.getSubstance(), -1);
15457    }
15458    if (element.hasStrength()) {
15459      composeType(t, "IngredientSubstanceStrengthReferenceStrengthComponent", "strength", element.getStrength(), -1);
15460    }
15461    if (element.hasMeasurementPointElement()) {
15462      composeString(t, "IngredientSubstanceStrengthReferenceStrengthComponent", "measurementPoint", element.getMeasurementPointElement(), -1);
15463    }
15464    for (int i = 0; i < element.getCountry().size(); i++) {
15465      composeCodeableConcept(t, "IngredientSubstanceStrengthReferenceStrengthComponent", "country", element.getCountry().get(i), i);
15466    }
15467  }
15468
15469  protected void composeInsurancePlan(Complex parent, String parentType, String name, InsurancePlan element, int index) {
15470    if (element == null) 
15471      return;
15472    Complex t;
15473    if (Utilities.noString(parentType))
15474      t = parent;
15475    else {
15476      t = parent.predicate("fhir:"+name,index > -1);
15477    }
15478    composeDomainResource(t, "InsurancePlan", name, element, index);
15479    for (int i = 0; i < element.getIdentifier().size(); i++) {
15480      composeIdentifier(t, "InsurancePlan", "identifier", element.getIdentifier().get(i), i);
15481    }
15482    if (element.hasStatusElement()) {
15483      composeEnum(t, "InsurancePlan", "status", element.getStatusElement(), -1);
15484    }
15485    for (int i = 0; i < element.getType().size(); i++) {
15486      composeCodeableConcept(t, "InsurancePlan", "type", element.getType().get(i), i);
15487    }
15488    if (element.hasNameElement()) {
15489      composeString(t, "InsurancePlan", "name", element.getNameElement(), -1);
15490    }
15491    for (int i = 0; i < element.getAlias().size(); i++) {
15492      composeString(t, "InsurancePlan", "alias", element.getAlias().get(i), i);
15493    }
15494    if (element.hasPeriod()) {
15495      composePeriod(t, "InsurancePlan", "period", element.getPeriod(), -1);
15496    }
15497    if (element.hasOwnedBy()) {
15498      composeReference(t, "InsurancePlan", "ownedBy", element.getOwnedBy(), -1);
15499    }
15500    if (element.hasAdministeredBy()) {
15501      composeReference(t, "InsurancePlan", "administeredBy", element.getAdministeredBy(), -1);
15502    }
15503    for (int i = 0; i < element.getCoverageArea().size(); i++) {
15504      composeReference(t, "InsurancePlan", "coverageArea", element.getCoverageArea().get(i), i);
15505    }
15506    for (int i = 0; i < element.getContact().size(); i++) {
15507      composeExtendedContactDetail(t, "InsurancePlan", "contact", element.getContact().get(i), i);
15508    }
15509    for (int i = 0; i < element.getEndpoint().size(); i++) {
15510      composeReference(t, "InsurancePlan", "endpoint", element.getEndpoint().get(i), i);
15511    }
15512    for (int i = 0; i < element.getNetwork().size(); i++) {
15513      composeReference(t, "InsurancePlan", "network", element.getNetwork().get(i), i);
15514    }
15515    for (int i = 0; i < element.getCoverage().size(); i++) {
15516      composeInsurancePlanCoverageComponent(t, "InsurancePlan", "coverage", element.getCoverage().get(i), i);
15517    }
15518    for (int i = 0; i < element.getPlan().size(); i++) {
15519      composeInsurancePlanPlanComponent(t, "InsurancePlan", "plan", element.getPlan().get(i), i);
15520    }
15521  }
15522
15523  protected void composeInsurancePlanCoverageComponent(Complex parent, String parentType, String name, InsurancePlan.InsurancePlanCoverageComponent element, int index) {
15524    if (element == null) 
15525      return;
15526    Complex t;
15527    if (Utilities.noString(parentType))
15528      t = parent;
15529    else {
15530      t = parent.predicate("fhir:"+name,index > -1);
15531    }
15532    composeBackboneElement(t, "coverage", name, element, index);
15533    if (element.hasType()) {
15534      composeCodeableConcept(t, "InsurancePlanCoverageComponent", "type", element.getType(), -1);
15535    }
15536    for (int i = 0; i < element.getNetwork().size(); i++) {
15537      composeReference(t, "InsurancePlanCoverageComponent", "network", element.getNetwork().get(i), i);
15538    }
15539    for (int i = 0; i < element.getBenefit().size(); i++) {
15540      composeInsurancePlanCoverageBenefitComponent(t, "InsurancePlanCoverageComponent", "benefit", element.getBenefit().get(i), i);
15541    }
15542  }
15543
15544  protected void composeInsurancePlanCoverageBenefitComponent(Complex parent, String parentType, String name, InsurancePlan.CoverageBenefitComponent element, int index) {
15545    if (element == null) 
15546      return;
15547    Complex t;
15548    if (Utilities.noString(parentType))
15549      t = parent;
15550    else {
15551      t = parent.predicate("fhir:"+name,index > -1);
15552    }
15553    composeBackboneElement(t, "benefit", name, element, index);
15554    if (element.hasType()) {
15555      composeCodeableConcept(t, "CoverageBenefitComponent", "type", element.getType(), -1);
15556    }
15557    if (element.hasRequirementElement()) {
15558      composeString(t, "CoverageBenefitComponent", "requirement", element.getRequirementElement(), -1);
15559    }
15560    for (int i = 0; i < element.getLimit().size(); i++) {
15561      composeInsurancePlanCoverageBenefitLimitComponent(t, "CoverageBenefitComponent", "limit", element.getLimit().get(i), i);
15562    }
15563  }
15564
15565  protected void composeInsurancePlanCoverageBenefitLimitComponent(Complex parent, String parentType, String name, InsurancePlan.CoverageBenefitLimitComponent element, int index) {
15566    if (element == null) 
15567      return;
15568    Complex t;
15569    if (Utilities.noString(parentType))
15570      t = parent;
15571    else {
15572      t = parent.predicate("fhir:"+name,index > -1);
15573    }
15574    composeBackboneElement(t, "limit", name, element, index);
15575    if (element.hasValue()) {
15576      composeQuantity(t, "CoverageBenefitLimitComponent", "value", element.getValue(), -1);
15577    }
15578    if (element.hasCode()) {
15579      composeCodeableConcept(t, "CoverageBenefitLimitComponent", "code", element.getCode(), -1);
15580    }
15581  }
15582
15583  protected void composeInsurancePlanPlanComponent(Complex parent, String parentType, String name, InsurancePlan.InsurancePlanPlanComponent element, int index) {
15584    if (element == null) 
15585      return;
15586    Complex t;
15587    if (Utilities.noString(parentType))
15588      t = parent;
15589    else {
15590      t = parent.predicate("fhir:"+name,index > -1);
15591    }
15592    composeBackboneElement(t, "plan", name, element, index);
15593    for (int i = 0; i < element.getIdentifier().size(); i++) {
15594      composeIdentifier(t, "InsurancePlanPlanComponent", "identifier", element.getIdentifier().get(i), i);
15595    }
15596    if (element.hasType()) {
15597      composeCodeableConcept(t, "InsurancePlanPlanComponent", "type", element.getType(), -1);
15598    }
15599    for (int i = 0; i < element.getCoverageArea().size(); i++) {
15600      composeReference(t, "InsurancePlanPlanComponent", "coverageArea", element.getCoverageArea().get(i), i);
15601    }
15602    for (int i = 0; i < element.getNetwork().size(); i++) {
15603      composeReference(t, "InsurancePlanPlanComponent", "network", element.getNetwork().get(i), i);
15604    }
15605    for (int i = 0; i < element.getGeneralCost().size(); i++) {
15606      composeInsurancePlanPlanGeneralCostComponent(t, "InsurancePlanPlanComponent", "generalCost", element.getGeneralCost().get(i), i);
15607    }
15608    for (int i = 0; i < element.getSpecificCost().size(); i++) {
15609      composeInsurancePlanPlanSpecificCostComponent(t, "InsurancePlanPlanComponent", "specificCost", element.getSpecificCost().get(i), i);
15610    }
15611  }
15612
15613  protected void composeInsurancePlanPlanGeneralCostComponent(Complex parent, String parentType, String name, InsurancePlan.InsurancePlanPlanGeneralCostComponent element, int index) {
15614    if (element == null) 
15615      return;
15616    Complex t;
15617    if (Utilities.noString(parentType))
15618      t = parent;
15619    else {
15620      t = parent.predicate("fhir:"+name,index > -1);
15621    }
15622    composeBackboneElement(t, "generalCost", name, element, index);
15623    if (element.hasType()) {
15624      composeCodeableConcept(t, "InsurancePlanPlanGeneralCostComponent", "type", element.getType(), -1);
15625    }
15626    if (element.hasGroupSizeElement()) {
15627      composePositiveInt(t, "InsurancePlanPlanGeneralCostComponent", "groupSize", element.getGroupSizeElement(), -1);
15628    }
15629    if (element.hasCost()) {
15630      composeMoney(t, "InsurancePlanPlanGeneralCostComponent", "cost", element.getCost(), -1);
15631    }
15632    if (element.hasCommentElement()) {
15633      composeString(t, "InsurancePlanPlanGeneralCostComponent", "comment", element.getCommentElement(), -1);
15634    }
15635  }
15636
15637  protected void composeInsurancePlanPlanSpecificCostComponent(Complex parent, String parentType, String name, InsurancePlan.InsurancePlanPlanSpecificCostComponent element, int index) {
15638    if (element == null) 
15639      return;
15640    Complex t;
15641    if (Utilities.noString(parentType))
15642      t = parent;
15643    else {
15644      t = parent.predicate("fhir:"+name,index > -1);
15645    }
15646    composeBackboneElement(t, "specificCost", name, element, index);
15647    if (element.hasCategory()) {
15648      composeCodeableConcept(t, "InsurancePlanPlanSpecificCostComponent", "category", element.getCategory(), -1);
15649    }
15650    for (int i = 0; i < element.getBenefit().size(); i++) {
15651      composeInsurancePlanPlanBenefitComponent(t, "InsurancePlanPlanSpecificCostComponent", "benefit", element.getBenefit().get(i), i);
15652    }
15653  }
15654
15655  protected void composeInsurancePlanPlanBenefitComponent(Complex parent, String parentType, String name, InsurancePlan.PlanBenefitComponent element, int index) {
15656    if (element == null) 
15657      return;
15658    Complex t;
15659    if (Utilities.noString(parentType))
15660      t = parent;
15661    else {
15662      t = parent.predicate("fhir:"+name,index > -1);
15663    }
15664    composeBackboneElement(t, "benefit", name, element, index);
15665    if (element.hasType()) {
15666      composeCodeableConcept(t, "PlanBenefitComponent", "type", element.getType(), -1);
15667    }
15668    for (int i = 0; i < element.getCost().size(); i++) {
15669      composeInsurancePlanPlanBenefitCostComponent(t, "PlanBenefitComponent", "cost", element.getCost().get(i), i);
15670    }
15671  }
15672
15673  protected void composeInsurancePlanPlanBenefitCostComponent(Complex parent, String parentType, String name, InsurancePlan.PlanBenefitCostComponent element, int index) {
15674    if (element == null) 
15675      return;
15676    Complex t;
15677    if (Utilities.noString(parentType))
15678      t = parent;
15679    else {
15680      t = parent.predicate("fhir:"+name,index > -1);
15681    }
15682    composeBackboneElement(t, "cost", name, element, index);
15683    if (element.hasType()) {
15684      composeCodeableConcept(t, "PlanBenefitCostComponent", "type", element.getType(), -1);
15685    }
15686    if (element.hasApplicability()) {
15687      composeCodeableConcept(t, "PlanBenefitCostComponent", "applicability", element.getApplicability(), -1);
15688    }
15689    for (int i = 0; i < element.getQualifiers().size(); i++) {
15690      composeCodeableConcept(t, "PlanBenefitCostComponent", "qualifiers", element.getQualifiers().get(i), i);
15691    }
15692    if (element.hasValue()) {
15693      composeQuantity(t, "PlanBenefitCostComponent", "value", element.getValue(), -1);
15694    }
15695  }
15696
15697  protected void composeInventoryItem(Complex parent, String parentType, String name, InventoryItem 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:"+name,index > -1);
15705    }
15706    composeDomainResource(t, "InventoryItem", name, element, index);
15707    for (int i = 0; i < element.getIdentifier().size(); i++) {
15708      composeIdentifier(t, "InventoryItem", "identifier", element.getIdentifier().get(i), i);
15709    }
15710    if (element.hasStatusElement()) {
15711      composeEnum(t, "InventoryItem", "status", element.getStatusElement(), -1);
15712    }
15713    for (int i = 0; i < element.getCategory().size(); i++) {
15714      composeCodeableConcept(t, "InventoryItem", "category", element.getCategory().get(i), i);
15715    }
15716    for (int i = 0; i < element.getCode().size(); i++) {
15717      composeCodeableConcept(t, "InventoryItem", "code", element.getCode().get(i), i);
15718    }
15719    for (int i = 0; i < element.getName().size(); i++) {
15720      composeInventoryItemNameComponent(t, "InventoryItem", "name", element.getName().get(i), i);
15721    }
15722    for (int i = 0; i < element.getResponsibleOrganization().size(); i++) {
15723      composeInventoryItemResponsibleOrganizationComponent(t, "InventoryItem", "responsibleOrganization", element.getResponsibleOrganization().get(i), i);
15724    }
15725    if (element.hasDescription()) {
15726      composeInventoryItemDescriptionComponent(t, "InventoryItem", "description", element.getDescription(), -1);
15727    }
15728    for (int i = 0; i < element.getInventoryStatus().size(); i++) {
15729      composeCodeableConcept(t, "InventoryItem", "inventoryStatus", element.getInventoryStatus().get(i), i);
15730    }
15731    if (element.hasBaseUnit()) {
15732      composeCodeableConcept(t, "InventoryItem", "baseUnit", element.getBaseUnit(), -1);
15733    }
15734    if (element.hasNetContent()) {
15735      composeQuantity(t, "InventoryItem", "netContent", element.getNetContent(), -1);
15736    }
15737    for (int i = 0; i < element.getAssociation().size(); i++) {
15738      composeInventoryItemAssociationComponent(t, "InventoryItem", "association", element.getAssociation().get(i), i);
15739    }
15740    for (int i = 0; i < element.getCharacteristic().size(); i++) {
15741      composeInventoryItemCharacteristicComponent(t, "InventoryItem", "characteristic", element.getCharacteristic().get(i), i);
15742    }
15743    if (element.hasInstance()) {
15744      composeInventoryItemInstanceComponent(t, "InventoryItem", "instance", element.getInstance(), -1);
15745    }
15746    if (element.hasProductReference()) {
15747      composeReference(t, "InventoryItem", "productReference", element.getProductReference(), -1);
15748    }
15749  }
15750
15751  protected void composeInventoryItemNameComponent(Complex parent, String parentType, String name, InventoryItem.InventoryItemNameComponent element, int index) {
15752    if (element == null) 
15753      return;
15754    Complex t;
15755    if (Utilities.noString(parentType))
15756      t = parent;
15757    else {
15758      t = parent.predicate("fhir:"+name,index > -1);
15759    }
15760    composeBackboneElement(t, "name", name, element, index);
15761    if (element.hasNameType()) {
15762      composeCoding(t, "InventoryItemNameComponent", "nameType", element.getNameType(), -1);
15763    }
15764    if (element.hasLanguageElement()) {
15765      composeEnum(t, "InventoryItemNameComponent", "language", element.getLanguageElement(), -1);
15766    }
15767    if (element.hasNameElement()) {
15768      composeString(t, "InventoryItemNameComponent", "name", element.getNameElement(), -1);
15769    }
15770  }
15771
15772  protected void composeInventoryItemResponsibleOrganizationComponent(Complex parent, String parentType, String name, InventoryItem.InventoryItemResponsibleOrganizationComponent element, int index) {
15773    if (element == null) 
15774      return;
15775    Complex t;
15776    if (Utilities.noString(parentType))
15777      t = parent;
15778    else {
15779      t = parent.predicate("fhir:"+name,index > -1);
15780    }
15781    composeBackboneElement(t, "responsibleOrganization", name, element, index);
15782    if (element.hasRole()) {
15783      composeCodeableConcept(t, "InventoryItemResponsibleOrganizationComponent", "role", element.getRole(), -1);
15784    }
15785    if (element.hasOrganization()) {
15786      composeReference(t, "InventoryItemResponsibleOrganizationComponent", "organization", element.getOrganization(), -1);
15787    }
15788  }
15789
15790  protected void composeInventoryItemDescriptionComponent(Complex parent, String parentType, String name, InventoryItem.InventoryItemDescriptionComponent element, int index) {
15791    if (element == null) 
15792      return;
15793    Complex t;
15794    if (Utilities.noString(parentType))
15795      t = parent;
15796    else {
15797      t = parent.predicate("fhir:"+name,index > -1);
15798    }
15799    composeBackboneElement(t, "description", name, element, index);
15800    if (element.hasLanguageElement()) {
15801      composeEnum(t, "InventoryItemDescriptionComponent", "language", element.getLanguageElement(), -1);
15802    }
15803    if (element.hasDescriptionElement()) {
15804      composeString(t, "InventoryItemDescriptionComponent", "description", element.getDescriptionElement(), -1);
15805    }
15806  }
15807
15808  protected void composeInventoryItemAssociationComponent(Complex parent, String parentType, String name, InventoryItem.InventoryItemAssociationComponent 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:"+name,index > -1);
15816    }
15817    composeBackboneElement(t, "association", name, element, index);
15818    if (element.hasAssociationType()) {
15819      composeCodeableConcept(t, "InventoryItemAssociationComponent", "associationType", element.getAssociationType(), -1);
15820    }
15821    if (element.hasRelatedItem()) {
15822      composeReference(t, "InventoryItemAssociationComponent", "relatedItem", element.getRelatedItem(), -1);
15823    }
15824    if (element.hasQuantity()) {
15825      composeRatio(t, "InventoryItemAssociationComponent", "quantity", element.getQuantity(), -1);
15826    }
15827  }
15828
15829  protected void composeInventoryItemCharacteristicComponent(Complex parent, String parentType, String name, InventoryItem.InventoryItemCharacteristicComponent element, int index) {
15830    if (element == null) 
15831      return;
15832    Complex t;
15833    if (Utilities.noString(parentType))
15834      t = parent;
15835    else {
15836      t = parent.predicate("fhir:"+name,index > -1);
15837    }
15838    composeBackboneElement(t, "characteristic", name, element, index);
15839    if (element.hasCharacteristicType()) {
15840      composeCodeableConcept(t, "InventoryItemCharacteristicComponent", "characteristicType", element.getCharacteristicType(), -1);
15841    }
15842    if (element.hasValue()) {
15843      composeType(t, "InventoryItemCharacteristicComponent", "value", element.getValue(), -1);
15844    }
15845  }
15846
15847  protected void composeInventoryItemInstanceComponent(Complex parent, String parentType, String name, InventoryItem.InventoryItemInstanceComponent element, int index) {
15848    if (element == null) 
15849      return;
15850    Complex t;
15851    if (Utilities.noString(parentType))
15852      t = parent;
15853    else {
15854      t = parent.predicate("fhir:"+name,index > -1);
15855    }
15856    composeBackboneElement(t, "instance", name, element, index);
15857    for (int i = 0; i < element.getIdentifier().size(); i++) {
15858      composeIdentifier(t, "InventoryItemInstanceComponent", "identifier", element.getIdentifier().get(i), i);
15859    }
15860    if (element.hasLotNumberElement()) {
15861      composeString(t, "InventoryItemInstanceComponent", "lotNumber", element.getLotNumberElement(), -1);
15862    }
15863    if (element.hasExpiryElement()) {
15864      composeDateTime(t, "InventoryItemInstanceComponent", "expiry", element.getExpiryElement(), -1);
15865    }
15866    if (element.hasSubject()) {
15867      composeReference(t, "InventoryItemInstanceComponent", "subject", element.getSubject(), -1);
15868    }
15869    if (element.hasLocation()) {
15870      composeReference(t, "InventoryItemInstanceComponent", "location", element.getLocation(), -1);
15871    }
15872  }
15873
15874  protected void composeInventoryReport(Complex parent, String parentType, String name, InventoryReport element, int index) {
15875    if (element == null) 
15876      return;
15877    Complex t;
15878    if (Utilities.noString(parentType))
15879      t = parent;
15880    else {
15881      t = parent.predicate("fhir:"+name,index > -1);
15882    }
15883    composeDomainResource(t, "InventoryReport", name, element, index);
15884    for (int i = 0; i < element.getIdentifier().size(); i++) {
15885      composeIdentifier(t, "InventoryReport", "identifier", element.getIdentifier().get(i), i);
15886    }
15887    if (element.hasStatusElement()) {
15888      composeEnum(t, "InventoryReport", "status", element.getStatusElement(), -1);
15889    }
15890    if (element.hasCountTypeElement()) {
15891      composeEnum(t, "InventoryReport", "countType", element.getCountTypeElement(), -1);
15892    }
15893    if (element.hasOperationType()) {
15894      composeCodeableConcept(t, "InventoryReport", "operationType", element.getOperationType(), -1);
15895    }
15896    if (element.hasOperationTypeReason()) {
15897      composeCodeableConcept(t, "InventoryReport", "operationTypeReason", element.getOperationTypeReason(), -1);
15898    }
15899    if (element.hasReportedDateTimeElement()) {
15900      composeDateTime(t, "InventoryReport", "reportedDateTime", element.getReportedDateTimeElement(), -1);
15901    }
15902    if (element.hasReporter()) {
15903      composeReference(t, "InventoryReport", "reporter", element.getReporter(), -1);
15904    }
15905    if (element.hasReportingPeriod()) {
15906      composePeriod(t, "InventoryReport", "reportingPeriod", element.getReportingPeriod(), -1);
15907    }
15908    for (int i = 0; i < element.getInventoryListing().size(); i++) {
15909      composeInventoryReportInventoryListingComponent(t, "InventoryReport", "inventoryListing", element.getInventoryListing().get(i), i);
15910    }
15911    for (int i = 0; i < element.getNote().size(); i++) {
15912      composeAnnotation(t, "InventoryReport", "note", element.getNote().get(i), i);
15913    }
15914  }
15915
15916  protected void composeInventoryReportInventoryListingComponent(Complex parent, String parentType, String name, InventoryReport.InventoryReportInventoryListingComponent element, int index) {
15917    if (element == null) 
15918      return;
15919    Complex t;
15920    if (Utilities.noString(parentType))
15921      t = parent;
15922    else {
15923      t = parent.predicate("fhir:"+name,index > -1);
15924    }
15925    composeBackboneElement(t, "inventoryListing", name, element, index);
15926    if (element.hasLocation()) {
15927      composeReference(t, "InventoryReportInventoryListingComponent", "location", element.getLocation(), -1);
15928    }
15929    if (element.hasItemStatus()) {
15930      composeCodeableConcept(t, "InventoryReportInventoryListingComponent", "itemStatus", element.getItemStatus(), -1);
15931    }
15932    if (element.hasCountingDateTimeElement()) {
15933      composeDateTime(t, "InventoryReportInventoryListingComponent", "countingDateTime", element.getCountingDateTimeElement(), -1);
15934    }
15935    for (int i = 0; i < element.getItem().size(); i++) {
15936      composeInventoryReportInventoryListingItemComponent(t, "InventoryReportInventoryListingComponent", "item", element.getItem().get(i), i);
15937    }
15938  }
15939
15940  protected void composeInventoryReportInventoryListingItemComponent(Complex parent, String parentType, String name, InventoryReport.InventoryReportInventoryListingItemComponent element, int index) {
15941    if (element == null) 
15942      return;
15943    Complex t;
15944    if (Utilities.noString(parentType))
15945      t = parent;
15946    else {
15947      t = parent.predicate("fhir:"+name,index > -1);
15948    }
15949    composeBackboneElement(t, "item", name, element, index);
15950    if (element.hasCategory()) {
15951      composeCodeableConcept(t, "InventoryReportInventoryListingItemComponent", "category", element.getCategory(), -1);
15952    }
15953    if (element.hasQuantity()) {
15954      composeQuantity(t, "InventoryReportInventoryListingItemComponent", "quantity", element.getQuantity(), -1);
15955    }
15956    if (element.hasItem()) {
15957      composeCodeableReference(t, "InventoryReportInventoryListingItemComponent", "item", element.getItem(), -1);
15958    }
15959  }
15960
15961  protected void composeInvoice(Complex parent, String parentType, String name, Invoice element, int index) {
15962    if (element == null) 
15963      return;
15964    Complex t;
15965    if (Utilities.noString(parentType))
15966      t = parent;
15967    else {
15968      t = parent.predicate("fhir:"+name,index > -1);
15969    }
15970    composeDomainResource(t, "Invoice", name, element, index);
15971    for (int i = 0; i < element.getIdentifier().size(); i++) {
15972      composeIdentifier(t, "Invoice", "identifier", element.getIdentifier().get(i), i);
15973    }
15974    if (element.hasStatusElement()) {
15975      composeEnum(t, "Invoice", "status", element.getStatusElement(), -1);
15976    }
15977    if (element.hasCancelledReasonElement()) {
15978      composeString(t, "Invoice", "cancelledReason", element.getCancelledReasonElement(), -1);
15979    }
15980    if (element.hasType()) {
15981      composeCodeableConcept(t, "Invoice", "type", element.getType(), -1);
15982    }
15983    if (element.hasSubject()) {
15984      composeReference(t, "Invoice", "subject", element.getSubject(), -1);
15985    }
15986    if (element.hasRecipient()) {
15987      composeReference(t, "Invoice", "recipient", element.getRecipient(), -1);
15988    }
15989    if (element.hasDateElement()) {
15990      composeDateTime(t, "Invoice", "date", element.getDateElement(), -1);
15991    }
15992    if (element.hasCreationElement()) {
15993      composeDateTime(t, "Invoice", "creation", element.getCreationElement(), -1);
15994    }
15995    if (element.hasPeriod()) {
15996      composeType(t, "Invoice", "period", element.getPeriod(), -1);
15997    }
15998    for (int i = 0; i < element.getParticipant().size(); i++) {
15999      composeInvoiceParticipantComponent(t, "Invoice", "participant", element.getParticipant().get(i), i);
16000    }
16001    if (element.hasIssuer()) {
16002      composeReference(t, "Invoice", "issuer", element.getIssuer(), -1);
16003    }
16004    if (element.hasAccount()) {
16005      composeReference(t, "Invoice", "account", element.getAccount(), -1);
16006    }
16007    for (int i = 0; i < element.getLineItem().size(); i++) {
16008      composeInvoiceLineItemComponent(t, "Invoice", "lineItem", element.getLineItem().get(i), i);
16009    }
16010    for (int i = 0; i < element.getTotalPriceComponent().size(); i++) {
16011      composeMonetaryComponent(t, "Invoice", "totalPriceComponent", element.getTotalPriceComponent().get(i), i);
16012    }
16013    if (element.hasTotalNet()) {
16014      composeMoney(t, "Invoice", "totalNet", element.getTotalNet(), -1);
16015    }
16016    if (element.hasTotalGross()) {
16017      composeMoney(t, "Invoice", "totalGross", element.getTotalGross(), -1);
16018    }
16019    if (element.hasPaymentTermsElement()) {
16020      composeMarkdown(t, "Invoice", "paymentTerms", element.getPaymentTermsElement(), -1);
16021    }
16022    for (int i = 0; i < element.getNote().size(); i++) {
16023      composeAnnotation(t, "Invoice", "note", element.getNote().get(i), i);
16024    }
16025  }
16026
16027  protected void composeInvoiceParticipantComponent(Complex parent, String parentType, String name, Invoice.InvoiceParticipantComponent element, int index) {
16028    if (element == null) 
16029      return;
16030    Complex t;
16031    if (Utilities.noString(parentType))
16032      t = parent;
16033    else {
16034      t = parent.predicate("fhir:"+name,index > -1);
16035    }
16036    composeBackboneElement(t, "participant", name, element, index);
16037    if (element.hasRole()) {
16038      composeCodeableConcept(t, "InvoiceParticipantComponent", "role", element.getRole(), -1);
16039    }
16040    if (element.hasActor()) {
16041      composeReference(t, "InvoiceParticipantComponent", "actor", element.getActor(), -1);
16042    }
16043  }
16044
16045  protected void composeInvoiceLineItemComponent(Complex parent, String parentType, String name, Invoice.InvoiceLineItemComponent element, int index) {
16046    if (element == null) 
16047      return;
16048    Complex t;
16049    if (Utilities.noString(parentType))
16050      t = parent;
16051    else {
16052      t = parent.predicate("fhir:"+name,index > -1);
16053    }
16054    composeBackboneElement(t, "lineItem", name, element, index);
16055    if (element.hasSequenceElement()) {
16056      composePositiveInt(t, "InvoiceLineItemComponent", "sequence", element.getSequenceElement(), -1);
16057    }
16058    if (element.hasServiced()) {
16059      composeType(t, "InvoiceLineItemComponent", "serviced", element.getServiced(), -1);
16060    }
16061    if (element.hasChargeItem()) {
16062      composeType(t, "InvoiceLineItemComponent", "chargeItem", element.getChargeItem(), -1);
16063    }
16064    for (int i = 0; i < element.getPriceComponent().size(); i++) {
16065      composeMonetaryComponent(t, "InvoiceLineItemComponent", "priceComponent", element.getPriceComponent().get(i), i);
16066    }
16067  }
16068
16069  protected void composeLibrary(Complex parent, String parentType, String name, Library element, int index) {
16070    if (element == null) 
16071      return;
16072    Complex t;
16073    if (Utilities.noString(parentType))
16074      t = parent;
16075    else {
16076      t = parent.predicate("fhir:"+name,index > -1);
16077    }
16078    composeMetadataResource(t, "Library", name, element, index);
16079    if (element.hasUrlElement()) {
16080      composeUri(t, "Library", "url", element.getUrlElement(), -1);
16081    }
16082    for (int i = 0; i < element.getIdentifier().size(); i++) {
16083      composeIdentifier(t, "Library", "identifier", element.getIdentifier().get(i), i);
16084    }
16085    if (element.hasVersionElement()) {
16086      composeString(t, "Library", "version", element.getVersionElement(), -1);
16087    }
16088    if (element.hasVersionAlgorithm()) {
16089      composeType(t, "Library", "versionAlgorithm", element.getVersionAlgorithm(), -1);
16090    }
16091    if (element.hasNameElement()) {
16092      composeString(t, "Library", "name", element.getNameElement(), -1);
16093    }
16094    if (element.hasTitleElement()) {
16095      composeString(t, "Library", "title", element.getTitleElement(), -1);
16096    }
16097    if (element.hasSubtitleElement()) {
16098      composeString(t, "Library", "subtitle", element.getSubtitleElement(), -1);
16099    }
16100    if (element.hasStatusElement()) {
16101      composeEnum(t, "Library", "status", element.getStatusElement(), -1);
16102    }
16103    if (element.hasExperimentalElement()) {
16104      composeBoolean(t, "Library", "experimental", element.getExperimentalElement(), -1);
16105    }
16106    if (element.hasType()) {
16107      composeCodeableConcept(t, "Library", "type", element.getType(), -1);
16108    }
16109    if (element.hasSubject()) {
16110      composeType(t, "Library", "subject", element.getSubject(), -1);
16111    }
16112    if (element.hasDateElement()) {
16113      composeDateTime(t, "Library", "date", element.getDateElement(), -1);
16114    }
16115    if (element.hasPublisherElement()) {
16116      composeString(t, "Library", "publisher", element.getPublisherElement(), -1);
16117    }
16118    for (int i = 0; i < element.getContact().size(); i++) {
16119      composeContactDetail(t, "Library", "contact", element.getContact().get(i), i);
16120    }
16121    if (element.hasDescriptionElement()) {
16122      composeMarkdown(t, "Library", "description", element.getDescriptionElement(), -1);
16123    }
16124    for (int i = 0; i < element.getUseContext().size(); i++) {
16125      composeUsageContext(t, "Library", "useContext", element.getUseContext().get(i), i);
16126    }
16127    for (int i = 0; i < element.getJurisdiction().size(); i++) {
16128      composeCodeableConcept(t, "Library", "jurisdiction", element.getJurisdiction().get(i), i);
16129    }
16130    if (element.hasPurposeElement()) {
16131      composeMarkdown(t, "Library", "purpose", element.getPurposeElement(), -1);
16132    }
16133    if (element.hasUsageElement()) {
16134      composeMarkdown(t, "Library", "usage", element.getUsageElement(), -1);
16135    }
16136    if (element.hasCopyrightElement()) {
16137      composeMarkdown(t, "Library", "copyright", element.getCopyrightElement(), -1);
16138    }
16139    if (element.hasCopyrightLabelElement()) {
16140      composeString(t, "Library", "copyrightLabel", element.getCopyrightLabelElement(), -1);
16141    }
16142    if (element.hasApprovalDateElement()) {
16143      composeDate(t, "Library", "approvalDate", element.getApprovalDateElement(), -1);
16144    }
16145    if (element.hasLastReviewDateElement()) {
16146      composeDate(t, "Library", "lastReviewDate", element.getLastReviewDateElement(), -1);
16147    }
16148    if (element.hasEffectivePeriod()) {
16149      composePeriod(t, "Library", "effectivePeriod", element.getEffectivePeriod(), -1);
16150    }
16151    for (int i = 0; i < element.getTopic().size(); i++) {
16152      composeCodeableConcept(t, "Library", "topic", element.getTopic().get(i), i);
16153    }
16154    for (int i = 0; i < element.getAuthor().size(); i++) {
16155      composeContactDetail(t, "Library", "author", element.getAuthor().get(i), i);
16156    }
16157    for (int i = 0; i < element.getEditor().size(); i++) {
16158      composeContactDetail(t, "Library", "editor", element.getEditor().get(i), i);
16159    }
16160    for (int i = 0; i < element.getReviewer().size(); i++) {
16161      composeContactDetail(t, "Library", "reviewer", element.getReviewer().get(i), i);
16162    }
16163    for (int i = 0; i < element.getEndorser().size(); i++) {
16164      composeContactDetail(t, "Library", "endorser", element.getEndorser().get(i), i);
16165    }
16166    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
16167      composeRelatedArtifact(t, "Library", "relatedArtifact", element.getRelatedArtifact().get(i), i);
16168    }
16169    for (int i = 0; i < element.getParameter().size(); i++) {
16170      composeParameterDefinition(t, "Library", "parameter", element.getParameter().get(i), i);
16171    }
16172    for (int i = 0; i < element.getDataRequirement().size(); i++) {
16173      composeDataRequirement(t, "Library", "dataRequirement", element.getDataRequirement().get(i), i);
16174    }
16175    for (int i = 0; i < element.getContent().size(); i++) {
16176      composeAttachment(t, "Library", "content", element.getContent().get(i), i);
16177    }
16178  }
16179
16180  protected void composeLinkage(Complex parent, String parentType, String name, Linkage element, int index) {
16181    if (element == null) 
16182      return;
16183    Complex t;
16184    if (Utilities.noString(parentType))
16185      t = parent;
16186    else {
16187      t = parent.predicate("fhir:"+name,index > -1);
16188    }
16189    composeDomainResource(t, "Linkage", name, element, index);
16190    if (element.hasActiveElement()) {
16191      composeBoolean(t, "Linkage", "active", element.getActiveElement(), -1);
16192    }
16193    if (element.hasAuthor()) {
16194      composeReference(t, "Linkage", "author", element.getAuthor(), -1);
16195    }
16196    for (int i = 0; i < element.getItem().size(); i++) {
16197      composeLinkageItemComponent(t, "Linkage", "item", element.getItem().get(i), i);
16198    }
16199  }
16200
16201  protected void composeLinkageItemComponent(Complex parent, String parentType, String name, Linkage.LinkageItemComponent element, int index) {
16202    if (element == null) 
16203      return;
16204    Complex t;
16205    if (Utilities.noString(parentType))
16206      t = parent;
16207    else {
16208      t = parent.predicate("fhir:"+name,index > -1);
16209    }
16210    composeBackboneElement(t, "item", name, element, index);
16211    if (element.hasTypeElement()) {
16212      composeEnum(t, "LinkageItemComponent", "type", element.getTypeElement(), -1);
16213    }
16214    if (element.hasResource()) {
16215      composeReference(t, "LinkageItemComponent", "resource", element.getResource(), -1);
16216    }
16217  }
16218
16219  protected void composeListResource(Complex parent, String parentType, String name, ListResource element, int index) {
16220    if (element == null) 
16221      return;
16222    Complex t;
16223    if (Utilities.noString(parentType))
16224      t = parent;
16225    else {
16226      t = parent.predicate("fhir:"+name,index > -1);
16227    }
16228    composeDomainResource(t, "List", name, element, index);
16229    for (int i = 0; i < element.getIdentifier().size(); i++) {
16230      composeIdentifier(t, "ListResource", "identifier", element.getIdentifier().get(i), i);
16231    }
16232    if (element.hasStatusElement()) {
16233      composeEnum(t, "ListResource", "status", element.getStatusElement(), -1);
16234    }
16235    if (element.hasModeElement()) {
16236      composeEnum(t, "ListResource", "mode", element.getModeElement(), -1);
16237    }
16238    if (element.hasTitleElement()) {
16239      composeString(t, "ListResource", "title", element.getTitleElement(), -1);
16240    }
16241    if (element.hasCode()) {
16242      composeCodeableConcept(t, "ListResource", "code", element.getCode(), -1);
16243    }
16244    for (int i = 0; i < element.getSubject().size(); i++) {
16245      composeReference(t, "ListResource", "subject", element.getSubject().get(i), i);
16246    }
16247    if (element.hasEncounter()) {
16248      composeReference(t, "ListResource", "encounter", element.getEncounter(), -1);
16249    }
16250    if (element.hasDateElement()) {
16251      composeDateTime(t, "ListResource", "date", element.getDateElement(), -1);
16252    }
16253    if (element.hasSource()) {
16254      composeReference(t, "ListResource", "source", element.getSource(), -1);
16255    }
16256    if (element.hasOrderedBy()) {
16257      composeCodeableConcept(t, "ListResource", "orderedBy", element.getOrderedBy(), -1);
16258    }
16259    for (int i = 0; i < element.getNote().size(); i++) {
16260      composeAnnotation(t, "ListResource", "note", element.getNote().get(i), i);
16261    }
16262    for (int i = 0; i < element.getEntry().size(); i++) {
16263      composeListResourceEntryComponent(t, "ListResource", "entry", element.getEntry().get(i), i);
16264    }
16265    if (element.hasEmptyReason()) {
16266      composeCodeableConcept(t, "ListResource", "emptyReason", element.getEmptyReason(), -1);
16267    }
16268  }
16269
16270  protected void composeListResourceEntryComponent(Complex parent, String parentType, String name, ListResource.ListResourceEntryComponent element, int index) {
16271    if (element == null) 
16272      return;
16273    Complex t;
16274    if (Utilities.noString(parentType))
16275      t = parent;
16276    else {
16277      t = parent.predicate("fhir:"+name,index > -1);
16278    }
16279    composeBackboneElement(t, "entry", name, element, index);
16280    if (element.hasFlag()) {
16281      composeCodeableConcept(t, "ListResourceEntryComponent", "flag", element.getFlag(), -1);
16282    }
16283    if (element.hasDeletedElement()) {
16284      composeBoolean(t, "ListResourceEntryComponent", "deleted", element.getDeletedElement(), -1);
16285    }
16286    if (element.hasDateElement()) {
16287      composeDateTime(t, "ListResourceEntryComponent", "date", element.getDateElement(), -1);
16288    }
16289    if (element.hasItem()) {
16290      composeReference(t, "ListResourceEntryComponent", "item", element.getItem(), -1);
16291    }
16292  }
16293
16294  protected void composeLocation(Complex parent, String parentType, String name, Location element, int index) {
16295    if (element == null) 
16296      return;
16297    Complex t;
16298    if (Utilities.noString(parentType))
16299      t = parent;
16300    else {
16301      t = parent.predicate("fhir:"+name,index > -1);
16302    }
16303    composeDomainResource(t, "Location", name, element, index);
16304    for (int i = 0; i < element.getIdentifier().size(); i++) {
16305      composeIdentifier(t, "Location", "identifier", element.getIdentifier().get(i), i);
16306    }
16307    if (element.hasStatusElement()) {
16308      composeEnum(t, "Location", "status", element.getStatusElement(), -1);
16309    }
16310    if (element.hasOperationalStatus()) {
16311      composeCoding(t, "Location", "operationalStatus", element.getOperationalStatus(), -1);
16312    }
16313    if (element.hasNameElement()) {
16314      composeString(t, "Location", "name", element.getNameElement(), -1);
16315    }
16316    for (int i = 0; i < element.getAlias().size(); i++) {
16317      composeString(t, "Location", "alias", element.getAlias().get(i), i);
16318    }
16319    if (element.hasDescriptionElement()) {
16320      composeMarkdown(t, "Location", "description", element.getDescriptionElement(), -1);
16321    }
16322    if (element.hasModeElement()) {
16323      composeEnum(t, "Location", "mode", element.getModeElement(), -1);
16324    }
16325    for (int i = 0; i < element.getType().size(); i++) {
16326      composeCodeableConcept(t, "Location", "type", element.getType().get(i), i);
16327    }
16328    for (int i = 0; i < element.getContact().size(); i++) {
16329      composeExtendedContactDetail(t, "Location", "contact", element.getContact().get(i), i);
16330    }
16331    if (element.hasAddress()) {
16332      composeAddress(t, "Location", "address", element.getAddress(), -1);
16333    }
16334    if (element.hasForm()) {
16335      composeCodeableConcept(t, "Location", "form", element.getForm(), -1);
16336    }
16337    if (element.hasPosition()) {
16338      composeLocationPositionComponent(t, "Location", "position", element.getPosition(), -1);
16339    }
16340    if (element.hasManagingOrganization()) {
16341      composeReference(t, "Location", "managingOrganization", element.getManagingOrganization(), -1);
16342    }
16343    if (element.hasPartOf()) {
16344      composeReference(t, "Location", "partOf", element.getPartOf(), -1);
16345    }
16346    for (int i = 0; i < element.getCharacteristic().size(); i++) {
16347      composeCodeableConcept(t, "Location", "characteristic", element.getCharacteristic().get(i), i);
16348    }
16349    for (int i = 0; i < element.getHoursOfOperation().size(); i++) {
16350      composeAvailability(t, "Location", "hoursOfOperation", element.getHoursOfOperation().get(i), i);
16351    }
16352    for (int i = 0; i < element.getVirtualService().size(); i++) {
16353      composeVirtualServiceDetail(t, "Location", "virtualService", element.getVirtualService().get(i), i);
16354    }
16355    for (int i = 0; i < element.getEndpoint().size(); i++) {
16356      composeReference(t, "Location", "endpoint", element.getEndpoint().get(i), i);
16357    }
16358  }
16359
16360  protected void composeLocationPositionComponent(Complex parent, String parentType, String name, Location.LocationPositionComponent element, int index) {
16361    if (element == null) 
16362      return;
16363    Complex t;
16364    if (Utilities.noString(parentType))
16365      t = parent;
16366    else {
16367      t = parent.predicate("fhir:"+name,index > -1);
16368    }
16369    composeBackboneElement(t, "position", name, element, index);
16370    if (element.hasLongitudeElement()) {
16371      composeDecimal(t, "LocationPositionComponent", "longitude", element.getLongitudeElement(), -1);
16372    }
16373    if (element.hasLatitudeElement()) {
16374      composeDecimal(t, "LocationPositionComponent", "latitude", element.getLatitudeElement(), -1);
16375    }
16376    if (element.hasAltitudeElement()) {
16377      composeDecimal(t, "LocationPositionComponent", "altitude", element.getAltitudeElement(), -1);
16378    }
16379  }
16380
16381  protected void composeManufacturedItemDefinition(Complex parent, String parentType, String name, ManufacturedItemDefinition element, int index) {
16382    if (element == null) 
16383      return;
16384    Complex t;
16385    if (Utilities.noString(parentType))
16386      t = parent;
16387    else {
16388      t = parent.predicate("fhir:"+name,index > -1);
16389    }
16390    composeDomainResource(t, "ManufacturedItemDefinition", name, element, index);
16391    for (int i = 0; i < element.getIdentifier().size(); i++) {
16392      composeIdentifier(t, "ManufacturedItemDefinition", "identifier", element.getIdentifier().get(i), i);
16393    }
16394    if (element.hasStatusElement()) {
16395      composeEnum(t, "ManufacturedItemDefinition", "status", element.getStatusElement(), -1);
16396    }
16397    if (element.hasNameElement()) {
16398      composeString(t, "ManufacturedItemDefinition", "name", element.getNameElement(), -1);
16399    }
16400    if (element.hasManufacturedDoseForm()) {
16401      composeCodeableConcept(t, "ManufacturedItemDefinition", "manufacturedDoseForm", element.getManufacturedDoseForm(), -1);
16402    }
16403    if (element.hasUnitOfPresentation()) {
16404      composeCodeableConcept(t, "ManufacturedItemDefinition", "unitOfPresentation", element.getUnitOfPresentation(), -1);
16405    }
16406    for (int i = 0; i < element.getManufacturer().size(); i++) {
16407      composeReference(t, "ManufacturedItemDefinition", "manufacturer", element.getManufacturer().get(i), i);
16408    }
16409    for (int i = 0; i < element.getMarketingStatus().size(); i++) {
16410      composeMarketingStatus(t, "ManufacturedItemDefinition", "marketingStatus", element.getMarketingStatus().get(i), i);
16411    }
16412    for (int i = 0; i < element.getIngredient().size(); i++) {
16413      composeCodeableConcept(t, "ManufacturedItemDefinition", "ingredient", element.getIngredient().get(i), i);
16414    }
16415    for (int i = 0; i < element.getProperty().size(); i++) {
16416      composeManufacturedItemDefinitionPropertyComponent(t, "ManufacturedItemDefinition", "property", element.getProperty().get(i), i);
16417    }
16418    for (int i = 0; i < element.getComponent().size(); i++) {
16419      composeManufacturedItemDefinitionComponentComponent(t, "ManufacturedItemDefinition", "component", element.getComponent().get(i), i);
16420    }
16421  }
16422
16423  protected void composeManufacturedItemDefinitionPropertyComponent(Complex parent, String parentType, String name, ManufacturedItemDefinition.ManufacturedItemDefinitionPropertyComponent element, int index) {
16424    if (element == null) 
16425      return;
16426    Complex t;
16427    if (Utilities.noString(parentType))
16428      t = parent;
16429    else {
16430      t = parent.predicate("fhir:"+name,index > -1);
16431    }
16432    composeBackboneElement(t, "property", name, element, index);
16433    if (element.hasType()) {
16434      composeCodeableConcept(t, "ManufacturedItemDefinitionPropertyComponent", "type", element.getType(), -1);
16435    }
16436    if (element.hasValue()) {
16437      composeType(t, "ManufacturedItemDefinitionPropertyComponent", "value", element.getValue(), -1);
16438    }
16439  }
16440
16441  protected void composeManufacturedItemDefinitionComponentComponent(Complex parent, String parentType, String name, ManufacturedItemDefinition.ManufacturedItemDefinitionComponentComponent element, int index) {
16442    if (element == null) 
16443      return;
16444    Complex t;
16445    if (Utilities.noString(parentType))
16446      t = parent;
16447    else {
16448      t = parent.predicate("fhir:"+name,index > -1);
16449    }
16450    composeBackboneElement(t, "component", name, element, index);
16451    if (element.hasType()) {
16452      composeCodeableConcept(t, "ManufacturedItemDefinitionComponentComponent", "type", element.getType(), -1);
16453    }
16454    for (int i = 0; i < element.getFunction().size(); i++) {
16455      composeCodeableConcept(t, "ManufacturedItemDefinitionComponentComponent", "function", element.getFunction().get(i), i);
16456    }
16457    for (int i = 0; i < element.getAmount().size(); i++) {
16458      composeQuantity(t, "ManufacturedItemDefinitionComponentComponent", "amount", element.getAmount().get(i), i);
16459    }
16460    for (int i = 0; i < element.getConstituent().size(); i++) {
16461      composeManufacturedItemDefinitionComponentConstituentComponent(t, "ManufacturedItemDefinitionComponentComponent", "constituent", element.getConstituent().get(i), i);
16462    }
16463    for (int i = 0; i < element.getProperty().size(); i++) {
16464      composeManufacturedItemDefinitionPropertyComponent(t, "ManufacturedItemDefinitionComponentComponent", "property", element.getProperty().get(i), i);
16465    }
16466    for (int i = 0; i < element.getComponent().size(); i++) {
16467      composeManufacturedItemDefinitionComponentComponent(t, "ManufacturedItemDefinitionComponentComponent", "component", element.getComponent().get(i), i);
16468    }
16469  }
16470
16471  protected void composeManufacturedItemDefinitionComponentConstituentComponent(Complex parent, String parentType, String name, ManufacturedItemDefinition.ManufacturedItemDefinitionComponentConstituentComponent element, int index) {
16472    if (element == null) 
16473      return;
16474    Complex t;
16475    if (Utilities.noString(parentType))
16476      t = parent;
16477    else {
16478      t = parent.predicate("fhir:"+name,index > -1);
16479    }
16480    composeBackboneElement(t, "constituent", name, element, index);
16481    for (int i = 0; i < element.getAmount().size(); i++) {
16482      composeQuantity(t, "ManufacturedItemDefinitionComponentConstituentComponent", "amount", element.getAmount().get(i), i);
16483    }
16484    for (int i = 0; i < element.getLocation().size(); i++) {
16485      composeCodeableConcept(t, "ManufacturedItemDefinitionComponentConstituentComponent", "location", element.getLocation().get(i), i);
16486    }
16487    for (int i = 0; i < element.getFunction().size(); i++) {
16488      composeCodeableConcept(t, "ManufacturedItemDefinitionComponentConstituentComponent", "function", element.getFunction().get(i), i);
16489    }
16490    for (int i = 0; i < element.getHasIngredient().size(); i++) {
16491      composeCodeableReference(t, "ManufacturedItemDefinitionComponentConstituentComponent", "hasIngredient", element.getHasIngredient().get(i), i);
16492    }
16493  }
16494
16495  protected void composeMeasure(Complex parent, String parentType, String name, Measure element, int index) {
16496    if (element == null) 
16497      return;
16498    Complex t;
16499    if (Utilities.noString(parentType))
16500      t = parent;
16501    else {
16502      t = parent.predicate("fhir:"+name,index > -1);
16503    }
16504    composeMetadataResource(t, "Measure", name, element, index);
16505    if (element.hasUrlElement()) {
16506      composeUri(t, "Measure", "url", element.getUrlElement(), -1);
16507    }
16508    for (int i = 0; i < element.getIdentifier().size(); i++) {
16509      composeIdentifier(t, "Measure", "identifier", element.getIdentifier().get(i), i);
16510    }
16511    if (element.hasVersionElement()) {
16512      composeString(t, "Measure", "version", element.getVersionElement(), -1);
16513    }
16514    if (element.hasVersionAlgorithm()) {
16515      composeType(t, "Measure", "versionAlgorithm", element.getVersionAlgorithm(), -1);
16516    }
16517    if (element.hasNameElement()) {
16518      composeString(t, "Measure", "name", element.getNameElement(), -1);
16519    }
16520    if (element.hasTitleElement()) {
16521      composeString(t, "Measure", "title", element.getTitleElement(), -1);
16522    }
16523    if (element.hasSubtitleElement()) {
16524      composeString(t, "Measure", "subtitle", element.getSubtitleElement(), -1);
16525    }
16526    if (element.hasStatusElement()) {
16527      composeEnum(t, "Measure", "status", element.getStatusElement(), -1);
16528    }
16529    if (element.hasExperimentalElement()) {
16530      composeBoolean(t, "Measure", "experimental", element.getExperimentalElement(), -1);
16531    }
16532    if (element.hasSubject()) {
16533      composeType(t, "Measure", "subject", element.getSubject(), -1);
16534    }
16535    if (element.hasBasisElement()) {
16536      composeEnum(t, "Measure", "basis", element.getBasisElement(), -1);
16537    }
16538    if (element.hasDateElement()) {
16539      composeDateTime(t, "Measure", "date", element.getDateElement(), -1);
16540    }
16541    if (element.hasPublisherElement()) {
16542      composeString(t, "Measure", "publisher", element.getPublisherElement(), -1);
16543    }
16544    for (int i = 0; i < element.getContact().size(); i++) {
16545      composeContactDetail(t, "Measure", "contact", element.getContact().get(i), i);
16546    }
16547    if (element.hasDescriptionElement()) {
16548      composeMarkdown(t, "Measure", "description", element.getDescriptionElement(), -1);
16549    }
16550    for (int i = 0; i < element.getUseContext().size(); i++) {
16551      composeUsageContext(t, "Measure", "useContext", element.getUseContext().get(i), i);
16552    }
16553    for (int i = 0; i < element.getJurisdiction().size(); i++) {
16554      composeCodeableConcept(t, "Measure", "jurisdiction", element.getJurisdiction().get(i), i);
16555    }
16556    if (element.hasPurposeElement()) {
16557      composeMarkdown(t, "Measure", "purpose", element.getPurposeElement(), -1);
16558    }
16559    if (element.hasUsageElement()) {
16560      composeMarkdown(t, "Measure", "usage", element.getUsageElement(), -1);
16561    }
16562    if (element.hasCopyrightElement()) {
16563      composeMarkdown(t, "Measure", "copyright", element.getCopyrightElement(), -1);
16564    }
16565    if (element.hasCopyrightLabelElement()) {
16566      composeString(t, "Measure", "copyrightLabel", element.getCopyrightLabelElement(), -1);
16567    }
16568    if (element.hasApprovalDateElement()) {
16569      composeDate(t, "Measure", "approvalDate", element.getApprovalDateElement(), -1);
16570    }
16571    if (element.hasLastReviewDateElement()) {
16572      composeDate(t, "Measure", "lastReviewDate", element.getLastReviewDateElement(), -1);
16573    }
16574    if (element.hasEffectivePeriod()) {
16575      composePeriod(t, "Measure", "effectivePeriod", element.getEffectivePeriod(), -1);
16576    }
16577    for (int i = 0; i < element.getTopic().size(); i++) {
16578      composeCodeableConcept(t, "Measure", "topic", element.getTopic().get(i), i);
16579    }
16580    for (int i = 0; i < element.getAuthor().size(); i++) {
16581      composeContactDetail(t, "Measure", "author", element.getAuthor().get(i), i);
16582    }
16583    for (int i = 0; i < element.getEditor().size(); i++) {
16584      composeContactDetail(t, "Measure", "editor", element.getEditor().get(i), i);
16585    }
16586    for (int i = 0; i < element.getReviewer().size(); i++) {
16587      composeContactDetail(t, "Measure", "reviewer", element.getReviewer().get(i), i);
16588    }
16589    for (int i = 0; i < element.getEndorser().size(); i++) {
16590      composeContactDetail(t, "Measure", "endorser", element.getEndorser().get(i), i);
16591    }
16592    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
16593      composeRelatedArtifact(t, "Measure", "relatedArtifact", element.getRelatedArtifact().get(i), i);
16594    }
16595    for (int i = 0; i < element.getLibrary().size(); i++) {
16596      composeCanonical(t, "Measure", "library", element.getLibrary().get(i), i);
16597    }
16598    if (element.hasDisclaimerElement()) {
16599      composeMarkdown(t, "Measure", "disclaimer", element.getDisclaimerElement(), -1);
16600    }
16601    if (element.hasScoring()) {
16602      composeCodeableConcept(t, "Measure", "scoring", element.getScoring(), -1);
16603    }
16604    if (element.hasScoringUnit()) {
16605      composeCodeableConcept(t, "Measure", "scoringUnit", element.getScoringUnit(), -1);
16606    }
16607    if (element.hasCompositeScoring()) {
16608      composeCodeableConcept(t, "Measure", "compositeScoring", element.getCompositeScoring(), -1);
16609    }
16610    for (int i = 0; i < element.getType().size(); i++) {
16611      composeCodeableConcept(t, "Measure", "type", element.getType().get(i), i);
16612    }
16613    if (element.hasRiskAdjustmentElement()) {
16614      composeMarkdown(t, "Measure", "riskAdjustment", element.getRiskAdjustmentElement(), -1);
16615    }
16616    if (element.hasRateAggregationElement()) {
16617      composeMarkdown(t, "Measure", "rateAggregation", element.getRateAggregationElement(), -1);
16618    }
16619    if (element.hasRationaleElement()) {
16620      composeMarkdown(t, "Measure", "rationale", element.getRationaleElement(), -1);
16621    }
16622    if (element.hasClinicalRecommendationStatementElement()) {
16623      composeMarkdown(t, "Measure", "clinicalRecommendationStatement", element.getClinicalRecommendationStatementElement(), -1);
16624    }
16625    if (element.hasImprovementNotation()) {
16626      composeCodeableConcept(t, "Measure", "improvementNotation", element.getImprovementNotation(), -1);
16627    }
16628    for (int i = 0; i < element.getTerm().size(); i++) {
16629      composeMeasureTermComponent(t, "Measure", "term", element.getTerm().get(i), i);
16630    }
16631    if (element.hasGuidanceElement()) {
16632      composeMarkdown(t, "Measure", "guidance", element.getGuidanceElement(), -1);
16633    }
16634    for (int i = 0; i < element.getGroup().size(); i++) {
16635      composeMeasureGroupComponent(t, "Measure", "group", element.getGroup().get(i), i);
16636    }
16637    for (int i = 0; i < element.getSupplementalData().size(); i++) {
16638      composeMeasureSupplementalDataComponent(t, "Measure", "supplementalData", element.getSupplementalData().get(i), i);
16639    }
16640  }
16641
16642  protected void composeMeasureTermComponent(Complex parent, String parentType, String name, Measure.MeasureTermComponent element, int index) {
16643    if (element == null) 
16644      return;
16645    Complex t;
16646    if (Utilities.noString(parentType))
16647      t = parent;
16648    else {
16649      t = parent.predicate("fhir:"+name,index > -1);
16650    }
16651    composeBackboneElement(t, "term", name, element, index);
16652    if (element.hasCode()) {
16653      composeCodeableConcept(t, "MeasureTermComponent", "code", element.getCode(), -1);
16654    }
16655    if (element.hasDefinitionElement()) {
16656      composeMarkdown(t, "MeasureTermComponent", "definition", element.getDefinitionElement(), -1);
16657    }
16658  }
16659
16660  protected void composeMeasureGroupComponent(Complex parent, String parentType, String name, Measure.MeasureGroupComponent element, int index) {
16661    if (element == null) 
16662      return;
16663    Complex t;
16664    if (Utilities.noString(parentType))
16665      t = parent;
16666    else {
16667      t = parent.predicate("fhir:"+name,index > -1);
16668    }
16669    composeBackboneElement(t, "group", name, element, index);
16670    if (element.hasLinkIdElement()) {
16671      composeString(t, "MeasureGroupComponent", "linkId", element.getLinkIdElement(), -1);
16672    }
16673    if (element.hasCode()) {
16674      composeCodeableConcept(t, "MeasureGroupComponent", "code", element.getCode(), -1);
16675    }
16676    if (element.hasDescriptionElement()) {
16677      composeMarkdown(t, "MeasureGroupComponent", "description", element.getDescriptionElement(), -1);
16678    }
16679    for (int i = 0; i < element.getType().size(); i++) {
16680      composeCodeableConcept(t, "MeasureGroupComponent", "type", element.getType().get(i), i);
16681    }
16682    if (element.hasSubject()) {
16683      composeType(t, "MeasureGroupComponent", "subject", element.getSubject(), -1);
16684    }
16685    if (element.hasBasisElement()) {
16686      composeEnum(t, "MeasureGroupComponent", "basis", element.getBasisElement(), -1);
16687    }
16688    if (element.hasScoring()) {
16689      composeCodeableConcept(t, "MeasureGroupComponent", "scoring", element.getScoring(), -1);
16690    }
16691    if (element.hasScoringUnit()) {
16692      composeCodeableConcept(t, "MeasureGroupComponent", "scoringUnit", element.getScoringUnit(), -1);
16693    }
16694    if (element.hasRateAggregationElement()) {
16695      composeMarkdown(t, "MeasureGroupComponent", "rateAggregation", element.getRateAggregationElement(), -1);
16696    }
16697    if (element.hasImprovementNotation()) {
16698      composeCodeableConcept(t, "MeasureGroupComponent", "improvementNotation", element.getImprovementNotation(), -1);
16699    }
16700    for (int i = 0; i < element.getLibrary().size(); i++) {
16701      composeCanonical(t, "MeasureGroupComponent", "library", element.getLibrary().get(i), i);
16702    }
16703    for (int i = 0; i < element.getPopulation().size(); i++) {
16704      composeMeasureGroupPopulationComponent(t, "MeasureGroupComponent", "population", element.getPopulation().get(i), i);
16705    }
16706    for (int i = 0; i < element.getStratifier().size(); i++) {
16707      composeMeasureGroupStratifierComponent(t, "MeasureGroupComponent", "stratifier", element.getStratifier().get(i), i);
16708    }
16709  }
16710
16711  protected void composeMeasureGroupPopulationComponent(Complex parent, String parentType, String name, Measure.MeasureGroupPopulationComponent element, int index) {
16712    if (element == null) 
16713      return;
16714    Complex t;
16715    if (Utilities.noString(parentType))
16716      t = parent;
16717    else {
16718      t = parent.predicate("fhir:"+name,index > -1);
16719    }
16720    composeBackboneElement(t, "population", name, element, index);
16721    if (element.hasLinkIdElement()) {
16722      composeString(t, "MeasureGroupPopulationComponent", "linkId", element.getLinkIdElement(), -1);
16723    }
16724    if (element.hasCode()) {
16725      composeCodeableConcept(t, "MeasureGroupPopulationComponent", "code", element.getCode(), -1);
16726    }
16727    if (element.hasDescriptionElement()) {
16728      composeMarkdown(t, "MeasureGroupPopulationComponent", "description", element.getDescriptionElement(), -1);
16729    }
16730    if (element.hasCriteria()) {
16731      composeExpression(t, "MeasureGroupPopulationComponent", "criteria", element.getCriteria(), -1);
16732    }
16733    if (element.hasGroupDefinition()) {
16734      composeReference(t, "MeasureGroupPopulationComponent", "groupDefinition", element.getGroupDefinition(), -1);
16735    }
16736    if (element.hasInputPopulationIdElement()) {
16737      composeString(t, "MeasureGroupPopulationComponent", "inputPopulationId", element.getInputPopulationIdElement(), -1);
16738    }
16739    if (element.hasAggregateMethod()) {
16740      composeCodeableConcept(t, "MeasureGroupPopulationComponent", "aggregateMethod", element.getAggregateMethod(), -1);
16741    }
16742  }
16743
16744  protected void composeMeasureGroupStratifierComponent(Complex parent, String parentType, String name, Measure.MeasureGroupStratifierComponent element, int index) {
16745    if (element == null) 
16746      return;
16747    Complex t;
16748    if (Utilities.noString(parentType))
16749      t = parent;
16750    else {
16751      t = parent.predicate("fhir:"+name,index > -1);
16752    }
16753    composeBackboneElement(t, "stratifier", name, element, index);
16754    if (element.hasLinkIdElement()) {
16755      composeString(t, "MeasureGroupStratifierComponent", "linkId", element.getLinkIdElement(), -1);
16756    }
16757    if (element.hasCode()) {
16758      composeCodeableConcept(t, "MeasureGroupStratifierComponent", "code", element.getCode(), -1);
16759    }
16760    if (element.hasDescriptionElement()) {
16761      composeMarkdown(t, "MeasureGroupStratifierComponent", "description", element.getDescriptionElement(), -1);
16762    }
16763    if (element.hasCriteria()) {
16764      composeExpression(t, "MeasureGroupStratifierComponent", "criteria", element.getCriteria(), -1);
16765    }
16766    if (element.hasGroupDefinition()) {
16767      composeReference(t, "MeasureGroupStratifierComponent", "groupDefinition", element.getGroupDefinition(), -1);
16768    }
16769    for (int i = 0; i < element.getComponent().size(); i++) {
16770      composeMeasureGroupStratifierComponentComponent(t, "MeasureGroupStratifierComponent", "component", element.getComponent().get(i), i);
16771    }
16772  }
16773
16774  protected void composeMeasureGroupStratifierComponentComponent(Complex parent, String parentType, String name, Measure.MeasureGroupStratifierComponentComponent element, int index) {
16775    if (element == null) 
16776      return;
16777    Complex t;
16778    if (Utilities.noString(parentType))
16779      t = parent;
16780    else {
16781      t = parent.predicate("fhir:"+name,index > -1);
16782    }
16783    composeBackboneElement(t, "component", name, element, index);
16784    if (element.hasLinkIdElement()) {
16785      composeString(t, "MeasureGroupStratifierComponentComponent", "linkId", element.getLinkIdElement(), -1);
16786    }
16787    if (element.hasCode()) {
16788      composeCodeableConcept(t, "MeasureGroupStratifierComponentComponent", "code", element.getCode(), -1);
16789    }
16790    if (element.hasDescriptionElement()) {
16791      composeMarkdown(t, "MeasureGroupStratifierComponentComponent", "description", element.getDescriptionElement(), -1);
16792    }
16793    if (element.hasCriteria()) {
16794      composeExpression(t, "MeasureGroupStratifierComponentComponent", "criteria", element.getCriteria(), -1);
16795    }
16796    if (element.hasGroupDefinition()) {
16797      composeReference(t, "MeasureGroupStratifierComponentComponent", "groupDefinition", element.getGroupDefinition(), -1);
16798    }
16799  }
16800
16801  protected void composeMeasureSupplementalDataComponent(Complex parent, String parentType, String name, Measure.MeasureSupplementalDataComponent element, int index) {
16802    if (element == null) 
16803      return;
16804    Complex t;
16805    if (Utilities.noString(parentType))
16806      t = parent;
16807    else {
16808      t = parent.predicate("fhir:"+name,index > -1);
16809    }
16810    composeBackboneElement(t, "supplementalData", name, element, index);
16811    if (element.hasLinkIdElement()) {
16812      composeString(t, "MeasureSupplementalDataComponent", "linkId", element.getLinkIdElement(), -1);
16813    }
16814    if (element.hasCode()) {
16815      composeCodeableConcept(t, "MeasureSupplementalDataComponent", "code", element.getCode(), -1);
16816    }
16817    for (int i = 0; i < element.getUsage().size(); i++) {
16818      composeCodeableConcept(t, "MeasureSupplementalDataComponent", "usage", element.getUsage().get(i), i);
16819    }
16820    if (element.hasDescriptionElement()) {
16821      composeMarkdown(t, "MeasureSupplementalDataComponent", "description", element.getDescriptionElement(), -1);
16822    }
16823    if (element.hasCriteria()) {
16824      composeExpression(t, "MeasureSupplementalDataComponent", "criteria", element.getCriteria(), -1);
16825    }
16826  }
16827
16828  protected void composeMeasureReport(Complex parent, String parentType, String name, MeasureReport element, int index) {
16829    if (element == null) 
16830      return;
16831    Complex t;
16832    if (Utilities.noString(parentType))
16833      t = parent;
16834    else {
16835      t = parent.predicate("fhir:"+name,index > -1);
16836    }
16837    composeDomainResource(t, "MeasureReport", name, element, index);
16838    for (int i = 0; i < element.getIdentifier().size(); i++) {
16839      composeIdentifier(t, "MeasureReport", "identifier", element.getIdentifier().get(i), i);
16840    }
16841    if (element.hasStatusElement()) {
16842      composeEnum(t, "MeasureReport", "status", element.getStatusElement(), -1);
16843    }
16844    if (element.hasTypeElement()) {
16845      composeEnum(t, "MeasureReport", "type", element.getTypeElement(), -1);
16846    }
16847    if (element.hasDataUpdateTypeElement()) {
16848      composeEnum(t, "MeasureReport", "dataUpdateType", element.getDataUpdateTypeElement(), -1);
16849    }
16850    if (element.hasMeasureElement()) {
16851      composeCanonical(t, "MeasureReport", "measure", element.getMeasureElement(), -1);
16852    }
16853    if (element.hasSubject()) {
16854      composeReference(t, "MeasureReport", "subject", element.getSubject(), -1);
16855    }
16856    if (element.hasDateElement()) {
16857      composeDateTime(t, "MeasureReport", "date", element.getDateElement(), -1);
16858    }
16859    if (element.hasReporter()) {
16860      composeReference(t, "MeasureReport", "reporter", element.getReporter(), -1);
16861    }
16862    if (element.hasReportingVendor()) {
16863      composeReference(t, "MeasureReport", "reportingVendor", element.getReportingVendor(), -1);
16864    }
16865    if (element.hasLocation()) {
16866      composeReference(t, "MeasureReport", "location", element.getLocation(), -1);
16867    }
16868    if (element.hasPeriod()) {
16869      composePeriod(t, "MeasureReport", "period", element.getPeriod(), -1);
16870    }
16871    if (element.hasInputParameters()) {
16872      composeReference(t, "MeasureReport", "inputParameters", element.getInputParameters(), -1);
16873    }
16874    if (element.hasScoring()) {
16875      composeCodeableConcept(t, "MeasureReport", "scoring", element.getScoring(), -1);
16876    }
16877    if (element.hasImprovementNotation()) {
16878      composeCodeableConcept(t, "MeasureReport", "improvementNotation", element.getImprovementNotation(), -1);
16879    }
16880    for (int i = 0; i < element.getGroup().size(); i++) {
16881      composeMeasureReportGroupComponent(t, "MeasureReport", "group", element.getGroup().get(i), i);
16882    }
16883    for (int i = 0; i < element.getSupplementalData().size(); i++) {
16884      composeReference(t, "MeasureReport", "supplementalData", element.getSupplementalData().get(i), i);
16885    }
16886    for (int i = 0; i < element.getEvaluatedResource().size(); i++) {
16887      composeReference(t, "MeasureReport", "evaluatedResource", element.getEvaluatedResource().get(i), i);
16888    }
16889  }
16890
16891  protected void composeMeasureReportGroupComponent(Complex parent, String parentType, String name, MeasureReport.MeasureReportGroupComponent element, int index) {
16892    if (element == null) 
16893      return;
16894    Complex t;
16895    if (Utilities.noString(parentType))
16896      t = parent;
16897    else {
16898      t = parent.predicate("fhir:"+name,index > -1);
16899    }
16900    composeBackboneElement(t, "group", name, element, index);
16901    if (element.hasLinkIdElement()) {
16902      composeString(t, "MeasureReportGroupComponent", "linkId", element.getLinkIdElement(), -1);
16903    }
16904    if (element.hasCode()) {
16905      composeCodeableConcept(t, "MeasureReportGroupComponent", "code", element.getCode(), -1);
16906    }
16907    if (element.hasSubject()) {
16908      composeReference(t, "MeasureReportGroupComponent", "subject", element.getSubject(), -1);
16909    }
16910    for (int i = 0; i < element.getPopulation().size(); i++) {
16911      composeMeasureReportGroupPopulationComponent(t, "MeasureReportGroupComponent", "population", element.getPopulation().get(i), i);
16912    }
16913    if (element.hasMeasureScore()) {
16914      composeType(t, "MeasureReportGroupComponent", "measureScore", element.getMeasureScore(), -1);
16915    }
16916    for (int i = 0; i < element.getStratifier().size(); i++) {
16917      composeMeasureReportGroupStratifierComponent(t, "MeasureReportGroupComponent", "stratifier", element.getStratifier().get(i), i);
16918    }
16919  }
16920
16921  protected void composeMeasureReportGroupPopulationComponent(Complex parent, String parentType, String name, MeasureReport.MeasureReportGroupPopulationComponent element, int index) {
16922    if (element == null) 
16923      return;
16924    Complex t;
16925    if (Utilities.noString(parentType))
16926      t = parent;
16927    else {
16928      t = parent.predicate("fhir:"+name,index > -1);
16929    }
16930    composeBackboneElement(t, "population", name, element, index);
16931    if (element.hasLinkIdElement()) {
16932      composeString(t, "MeasureReportGroupPopulationComponent", "linkId", element.getLinkIdElement(), -1);
16933    }
16934    if (element.hasCode()) {
16935      composeCodeableConcept(t, "MeasureReportGroupPopulationComponent", "code", element.getCode(), -1);
16936    }
16937    if (element.hasCountElement()) {
16938      composeInteger(t, "MeasureReportGroupPopulationComponent", "count", element.getCountElement(), -1);
16939    }
16940    if (element.hasSubjectResults()) {
16941      composeReference(t, "MeasureReportGroupPopulationComponent", "subjectResults", element.getSubjectResults(), -1);
16942    }
16943    for (int i = 0; i < element.getSubjectReport().size(); i++) {
16944      composeReference(t, "MeasureReportGroupPopulationComponent", "subjectReport", element.getSubjectReport().get(i), i);
16945    }
16946    if (element.hasSubjects()) {
16947      composeReference(t, "MeasureReportGroupPopulationComponent", "subjects", element.getSubjects(), -1);
16948    }
16949  }
16950
16951  protected void composeMeasureReportGroupStratifierComponent(Complex parent, String parentType, String name, MeasureReport.MeasureReportGroupStratifierComponent element, int index) {
16952    if (element == null) 
16953      return;
16954    Complex t;
16955    if (Utilities.noString(parentType))
16956      t = parent;
16957    else {
16958      t = parent.predicate("fhir:"+name,index > -1);
16959    }
16960    composeBackboneElement(t, "stratifier", name, element, index);
16961    if (element.hasLinkIdElement()) {
16962      composeString(t, "MeasureReportGroupStratifierComponent", "linkId", element.getLinkIdElement(), -1);
16963    }
16964    if (element.hasCode()) {
16965      composeCodeableConcept(t, "MeasureReportGroupStratifierComponent", "code", element.getCode(), -1);
16966    }
16967    for (int i = 0; i < element.getStratum().size(); i++) {
16968      composeMeasureReportStratifierGroupComponent(t, "MeasureReportGroupStratifierComponent", "stratum", element.getStratum().get(i), i);
16969    }
16970  }
16971
16972  protected void composeMeasureReportStratifierGroupComponent(Complex parent, String parentType, String name, MeasureReport.StratifierGroupComponent element, int index) {
16973    if (element == null) 
16974      return;
16975    Complex t;
16976    if (Utilities.noString(parentType))
16977      t = parent;
16978    else {
16979      t = parent.predicate("fhir:"+name,index > -1);
16980    }
16981    composeBackboneElement(t, "stratum", name, element, index);
16982    if (element.hasValue()) {
16983      composeType(t, "StratifierGroupComponent", "value", element.getValue(), -1);
16984    }
16985    for (int i = 0; i < element.getComponent().size(); i++) {
16986      composeMeasureReportStratifierGroupComponentComponent(t, "StratifierGroupComponent", "component", element.getComponent().get(i), i);
16987    }
16988    for (int i = 0; i < element.getPopulation().size(); i++) {
16989      composeMeasureReportStratifierGroupPopulationComponent(t, "StratifierGroupComponent", "population", element.getPopulation().get(i), i);
16990    }
16991    if (element.hasMeasureScore()) {
16992      composeType(t, "StratifierGroupComponent", "measureScore", element.getMeasureScore(), -1);
16993    }
16994  }
16995
16996  protected void composeMeasureReportStratifierGroupComponentComponent(Complex parent, String parentType, String name, MeasureReport.StratifierGroupComponentComponent 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:"+name,index > -1);
17004    }
17005    composeBackboneElement(t, "component", name, element, index);
17006    if (element.hasLinkIdElement()) {
17007      composeString(t, "StratifierGroupComponentComponent", "linkId", element.getLinkIdElement(), -1);
17008    }
17009    if (element.hasCode()) {
17010      composeCodeableConcept(t, "StratifierGroupComponentComponent", "code", element.getCode(), -1);
17011    }
17012    if (element.hasValue()) {
17013      composeType(t, "StratifierGroupComponentComponent", "value", element.getValue(), -1);
17014    }
17015  }
17016
17017  protected void composeMeasureReportStratifierGroupPopulationComponent(Complex parent, String parentType, String name, MeasureReport.StratifierGroupPopulationComponent element, int index) {
17018    if (element == null) 
17019      return;
17020    Complex t;
17021    if (Utilities.noString(parentType))
17022      t = parent;
17023    else {
17024      t = parent.predicate("fhir:"+name,index > -1);
17025    }
17026    composeBackboneElement(t, "population", name, element, index);
17027    if (element.hasLinkIdElement()) {
17028      composeString(t, "StratifierGroupPopulationComponent", "linkId", element.getLinkIdElement(), -1);
17029    }
17030    if (element.hasCode()) {
17031      composeCodeableConcept(t, "StratifierGroupPopulationComponent", "code", element.getCode(), -1);
17032    }
17033    if (element.hasCountElement()) {
17034      composeInteger(t, "StratifierGroupPopulationComponent", "count", element.getCountElement(), -1);
17035    }
17036    if (element.hasSubjectResults()) {
17037      composeReference(t, "StratifierGroupPopulationComponent", "subjectResults", element.getSubjectResults(), -1);
17038    }
17039    for (int i = 0; i < element.getSubjectReport().size(); i++) {
17040      composeReference(t, "StratifierGroupPopulationComponent", "subjectReport", element.getSubjectReport().get(i), i);
17041    }
17042    if (element.hasSubjects()) {
17043      composeReference(t, "StratifierGroupPopulationComponent", "subjects", element.getSubjects(), -1);
17044    }
17045  }
17046
17047  protected void composeMedication(Complex parent, String parentType, String name, Medication element, int index) {
17048    if (element == null) 
17049      return;
17050    Complex t;
17051    if (Utilities.noString(parentType))
17052      t = parent;
17053    else {
17054      t = parent.predicate("fhir:"+name,index > -1);
17055    }
17056    composeDomainResource(t, "Medication", name, element, index);
17057    for (int i = 0; i < element.getIdentifier().size(); i++) {
17058      composeIdentifier(t, "Medication", "identifier", element.getIdentifier().get(i), i);
17059    }
17060    if (element.hasCode()) {
17061      composeCodeableConcept(t, "Medication", "code", element.getCode(), -1);
17062    }
17063    if (element.hasStatusElement()) {
17064      composeEnum(t, "Medication", "status", element.getStatusElement(), -1);
17065    }
17066    if (element.hasMarketingAuthorizationHolder()) {
17067      composeReference(t, "Medication", "marketingAuthorizationHolder", element.getMarketingAuthorizationHolder(), -1);
17068    }
17069    if (element.hasDoseForm()) {
17070      composeCodeableConcept(t, "Medication", "doseForm", element.getDoseForm(), -1);
17071    }
17072    if (element.hasTotalVolume()) {
17073      composeQuantity(t, "Medication", "totalVolume", element.getTotalVolume(), -1);
17074    }
17075    for (int i = 0; i < element.getIngredient().size(); i++) {
17076      composeMedicationIngredientComponent(t, "Medication", "ingredient", element.getIngredient().get(i), i);
17077    }
17078    if (element.hasBatch()) {
17079      composeMedicationBatchComponent(t, "Medication", "batch", element.getBatch(), -1);
17080    }
17081    if (element.hasDefinition()) {
17082      composeReference(t, "Medication", "definition", element.getDefinition(), -1);
17083    }
17084  }
17085
17086  protected void composeMedicationIngredientComponent(Complex parent, String parentType, String name, Medication.MedicationIngredientComponent element, int index) {
17087    if (element == null) 
17088      return;
17089    Complex t;
17090    if (Utilities.noString(parentType))
17091      t = parent;
17092    else {
17093      t = parent.predicate("fhir:"+name,index > -1);
17094    }
17095    composeBackboneElement(t, "ingredient", name, element, index);
17096    if (element.hasItem()) {
17097      composeCodeableReference(t, "MedicationIngredientComponent", "item", element.getItem(), -1);
17098    }
17099    if (element.hasIsActiveElement()) {
17100      composeBoolean(t, "MedicationIngredientComponent", "isActive", element.getIsActiveElement(), -1);
17101    }
17102    if (element.hasStrength()) {
17103      composeType(t, "MedicationIngredientComponent", "strength", element.getStrength(), -1);
17104    }
17105  }
17106
17107  protected void composeMedicationBatchComponent(Complex parent, String parentType, String name, Medication.MedicationBatchComponent element, int index) {
17108    if (element == null) 
17109      return;
17110    Complex t;
17111    if (Utilities.noString(parentType))
17112      t = parent;
17113    else {
17114      t = parent.predicate("fhir:"+name,index > -1);
17115    }
17116    composeBackboneElement(t, "batch", name, element, index);
17117    if (element.hasLotNumberElement()) {
17118      composeString(t, "MedicationBatchComponent", "lotNumber", element.getLotNumberElement(), -1);
17119    }
17120    if (element.hasExpirationDateElement()) {
17121      composeDateTime(t, "MedicationBatchComponent", "expirationDate", element.getExpirationDateElement(), -1);
17122    }
17123  }
17124
17125  protected void composeMedicationAdministration(Complex parent, String parentType, String name, MedicationAdministration element, int index) {
17126    if (element == null) 
17127      return;
17128    Complex t;
17129    if (Utilities.noString(parentType))
17130      t = parent;
17131    else {
17132      t = parent.predicate("fhir:"+name,index > -1);
17133    }
17134    composeDomainResource(t, "MedicationAdministration", name, element, index);
17135    for (int i = 0; i < element.getIdentifier().size(); i++) {
17136      composeIdentifier(t, "MedicationAdministration", "identifier", element.getIdentifier().get(i), i);
17137    }
17138    for (int i = 0; i < element.getBasedOn().size(); i++) {
17139      composeReference(t, "MedicationAdministration", "basedOn", element.getBasedOn().get(i), i);
17140    }
17141    for (int i = 0; i < element.getPartOf().size(); i++) {
17142      composeReference(t, "MedicationAdministration", "partOf", element.getPartOf().get(i), i);
17143    }
17144    if (element.hasStatusElement()) {
17145      composeEnum(t, "MedicationAdministration", "status", element.getStatusElement(), -1);
17146    }
17147    for (int i = 0; i < element.getStatusReason().size(); i++) {
17148      composeCodeableConcept(t, "MedicationAdministration", "statusReason", element.getStatusReason().get(i), i);
17149    }
17150    for (int i = 0; i < element.getCategory().size(); i++) {
17151      composeCodeableConcept(t, "MedicationAdministration", "category", element.getCategory().get(i), i);
17152    }
17153    if (element.hasMedication()) {
17154      composeCodeableReference(t, "MedicationAdministration", "medication", element.getMedication(), -1);
17155    }
17156    if (element.hasSubject()) {
17157      composeReference(t, "MedicationAdministration", "subject", element.getSubject(), -1);
17158    }
17159    if (element.hasEncounter()) {
17160      composeReference(t, "MedicationAdministration", "encounter", element.getEncounter(), -1);
17161    }
17162    for (int i = 0; i < element.getSupportingInformation().size(); i++) {
17163      composeReference(t, "MedicationAdministration", "supportingInformation", element.getSupportingInformation().get(i), i);
17164    }
17165    if (element.hasOccurence()) {
17166      composeType(t, "MedicationAdministration", "occurence", element.getOccurence(), -1);
17167    }
17168    if (element.hasRecordedElement()) {
17169      composeDateTime(t, "MedicationAdministration", "recorded", element.getRecordedElement(), -1);
17170    }
17171    if (element.hasIsSubPotentElement()) {
17172      composeBoolean(t, "MedicationAdministration", "isSubPotent", element.getIsSubPotentElement(), -1);
17173    }
17174    for (int i = 0; i < element.getSubPotentReason().size(); i++) {
17175      composeCodeableConcept(t, "MedicationAdministration", "subPotentReason", element.getSubPotentReason().get(i), i);
17176    }
17177    for (int i = 0; i < element.getPerformer().size(); i++) {
17178      composeMedicationAdministrationPerformerComponent(t, "MedicationAdministration", "performer", element.getPerformer().get(i), i);
17179    }
17180    for (int i = 0; i < element.getReason().size(); i++) {
17181      composeCodeableReference(t, "MedicationAdministration", "reason", element.getReason().get(i), i);
17182    }
17183    if (element.hasRequest()) {
17184      composeReference(t, "MedicationAdministration", "request", element.getRequest(), -1);
17185    }
17186    for (int i = 0; i < element.getDevice().size(); i++) {
17187      composeCodeableReference(t, "MedicationAdministration", "device", element.getDevice().get(i), i);
17188    }
17189    for (int i = 0; i < element.getNote().size(); i++) {
17190      composeAnnotation(t, "MedicationAdministration", "note", element.getNote().get(i), i);
17191    }
17192    if (element.hasDosage()) {
17193      composeMedicationAdministrationDosageComponent(t, "MedicationAdministration", "dosage", element.getDosage(), -1);
17194    }
17195    for (int i = 0; i < element.getEventHistory().size(); i++) {
17196      composeReference(t, "MedicationAdministration", "eventHistory", element.getEventHistory().get(i), i);
17197    }
17198  }
17199
17200  protected void composeMedicationAdministrationPerformerComponent(Complex parent, String parentType, String name, MedicationAdministration.MedicationAdministrationPerformerComponent element, int index) {
17201    if (element == null) 
17202      return;
17203    Complex t;
17204    if (Utilities.noString(parentType))
17205      t = parent;
17206    else {
17207      t = parent.predicate("fhir:"+name,index > -1);
17208    }
17209    composeBackboneElement(t, "performer", name, element, index);
17210    if (element.hasFunction()) {
17211      composeCodeableConcept(t, "MedicationAdministrationPerformerComponent", "function", element.getFunction(), -1);
17212    }
17213    if (element.hasActor()) {
17214      composeCodeableReference(t, "MedicationAdministrationPerformerComponent", "actor", element.getActor(), -1);
17215    }
17216  }
17217
17218  protected void composeMedicationAdministrationDosageComponent(Complex parent, String parentType, String name, MedicationAdministration.MedicationAdministrationDosageComponent element, int index) {
17219    if (element == null) 
17220      return;
17221    Complex t;
17222    if (Utilities.noString(parentType))
17223      t = parent;
17224    else {
17225      t = parent.predicate("fhir:"+name,index > -1);
17226    }
17227    composeBackboneElement(t, "dosage", name, element, index);
17228    if (element.hasTextElement()) {
17229      composeString(t, "MedicationAdministrationDosageComponent", "text", element.getTextElement(), -1);
17230    }
17231    if (element.hasSite()) {
17232      composeCodeableConcept(t, "MedicationAdministrationDosageComponent", "site", element.getSite(), -1);
17233    }
17234    if (element.hasRoute()) {
17235      composeCodeableConcept(t, "MedicationAdministrationDosageComponent", "route", element.getRoute(), -1);
17236    }
17237    if (element.hasMethod()) {
17238      composeCodeableConcept(t, "MedicationAdministrationDosageComponent", "method", element.getMethod(), -1);
17239    }
17240    if (element.hasDose()) {
17241      composeQuantity(t, "MedicationAdministrationDosageComponent", "dose", element.getDose(), -1);
17242    }
17243    if (element.hasRate()) {
17244      composeType(t, "MedicationAdministrationDosageComponent", "rate", element.getRate(), -1);
17245    }
17246  }
17247
17248  protected void composeMedicationDispense(Complex parent, String parentType, String name, MedicationDispense element, int index) {
17249    if (element == null) 
17250      return;
17251    Complex t;
17252    if (Utilities.noString(parentType))
17253      t = parent;
17254    else {
17255      t = parent.predicate("fhir:"+name,index > -1);
17256    }
17257    composeDomainResource(t, "MedicationDispense", name, element, index);
17258    for (int i = 0; i < element.getIdentifier().size(); i++) {
17259      composeIdentifier(t, "MedicationDispense", "identifier", element.getIdentifier().get(i), i);
17260    }
17261    for (int i = 0; i < element.getBasedOn().size(); i++) {
17262      composeReference(t, "MedicationDispense", "basedOn", element.getBasedOn().get(i), i);
17263    }
17264    for (int i = 0; i < element.getPartOf().size(); i++) {
17265      composeReference(t, "MedicationDispense", "partOf", element.getPartOf().get(i), i);
17266    }
17267    if (element.hasStatusElement()) {
17268      composeEnum(t, "MedicationDispense", "status", element.getStatusElement(), -1);
17269    }
17270    if (element.hasNotPerformedReason()) {
17271      composeCodeableReference(t, "MedicationDispense", "notPerformedReason", element.getNotPerformedReason(), -1);
17272    }
17273    if (element.hasStatusChangedElement()) {
17274      composeDateTime(t, "MedicationDispense", "statusChanged", element.getStatusChangedElement(), -1);
17275    }
17276    for (int i = 0; i < element.getCategory().size(); i++) {
17277      composeCodeableConcept(t, "MedicationDispense", "category", element.getCategory().get(i), i);
17278    }
17279    if (element.hasMedication()) {
17280      composeCodeableReference(t, "MedicationDispense", "medication", element.getMedication(), -1);
17281    }
17282    if (element.hasSubject()) {
17283      composeReference(t, "MedicationDispense", "subject", element.getSubject(), -1);
17284    }
17285    if (element.hasEncounter()) {
17286      composeReference(t, "MedicationDispense", "encounter", element.getEncounter(), -1);
17287    }
17288    for (int i = 0; i < element.getSupportingInformation().size(); i++) {
17289      composeReference(t, "MedicationDispense", "supportingInformation", element.getSupportingInformation().get(i), i);
17290    }
17291    for (int i = 0; i < element.getPerformer().size(); i++) {
17292      composeMedicationDispensePerformerComponent(t, "MedicationDispense", "performer", element.getPerformer().get(i), i);
17293    }
17294    if (element.hasLocation()) {
17295      composeReference(t, "MedicationDispense", "location", element.getLocation(), -1);
17296    }
17297    for (int i = 0; i < element.getAuthorizingPrescription().size(); i++) {
17298      composeReference(t, "MedicationDispense", "authorizingPrescription", element.getAuthorizingPrescription().get(i), i);
17299    }
17300    if (element.hasType()) {
17301      composeCodeableConcept(t, "MedicationDispense", "type", element.getType(), -1);
17302    }
17303    if (element.hasQuantity()) {
17304      composeQuantity(t, "MedicationDispense", "quantity", element.getQuantity(), -1);
17305    }
17306    if (element.hasDaysSupply()) {
17307      composeQuantity(t, "MedicationDispense", "daysSupply", element.getDaysSupply(), -1);
17308    }
17309    if (element.hasRecordedElement()) {
17310      composeDateTime(t, "MedicationDispense", "recorded", element.getRecordedElement(), -1);
17311    }
17312    if (element.hasWhenPreparedElement()) {
17313      composeDateTime(t, "MedicationDispense", "whenPrepared", element.getWhenPreparedElement(), -1);
17314    }
17315    if (element.hasWhenHandedOverElement()) {
17316      composeDateTime(t, "MedicationDispense", "whenHandedOver", element.getWhenHandedOverElement(), -1);
17317    }
17318    if (element.hasDestination()) {
17319      composeReference(t, "MedicationDispense", "destination", element.getDestination(), -1);
17320    }
17321    for (int i = 0; i < element.getReceiver().size(); i++) {
17322      composeReference(t, "MedicationDispense", "receiver", element.getReceiver().get(i), i);
17323    }
17324    for (int i = 0; i < element.getNote().size(); i++) {
17325      composeAnnotation(t, "MedicationDispense", "note", element.getNote().get(i), i);
17326    }
17327    if (element.hasRenderedDosageInstructionElement()) {
17328      composeMarkdown(t, "MedicationDispense", "renderedDosageInstruction", element.getRenderedDosageInstructionElement(), -1);
17329    }
17330    for (int i = 0; i < element.getDosageInstruction().size(); i++) {
17331      composeDosage(t, "MedicationDispense", "dosageInstruction", element.getDosageInstruction().get(i), i);
17332    }
17333    if (element.hasSubstitution()) {
17334      composeMedicationDispenseSubstitutionComponent(t, "MedicationDispense", "substitution", element.getSubstitution(), -1);
17335    }
17336    for (int i = 0; i < element.getEventHistory().size(); i++) {
17337      composeReference(t, "MedicationDispense", "eventHistory", element.getEventHistory().get(i), i);
17338    }
17339  }
17340
17341  protected void composeMedicationDispensePerformerComponent(Complex parent, String parentType, String name, MedicationDispense.MedicationDispensePerformerComponent element, int index) {
17342    if (element == null) 
17343      return;
17344    Complex t;
17345    if (Utilities.noString(parentType))
17346      t = parent;
17347    else {
17348      t = parent.predicate("fhir:"+name,index > -1);
17349    }
17350    composeBackboneElement(t, "performer", name, element, index);
17351    if (element.hasFunction()) {
17352      composeCodeableConcept(t, "MedicationDispensePerformerComponent", "function", element.getFunction(), -1);
17353    }
17354    if (element.hasActor()) {
17355      composeReference(t, "MedicationDispensePerformerComponent", "actor", element.getActor(), -1);
17356    }
17357  }
17358
17359  protected void composeMedicationDispenseSubstitutionComponent(Complex parent, String parentType, String name, MedicationDispense.MedicationDispenseSubstitutionComponent element, int index) {
17360    if (element == null) 
17361      return;
17362    Complex t;
17363    if (Utilities.noString(parentType))
17364      t = parent;
17365    else {
17366      t = parent.predicate("fhir:"+name,index > -1);
17367    }
17368    composeBackboneElement(t, "substitution", name, element, index);
17369    if (element.hasWasSubstitutedElement()) {
17370      composeBoolean(t, "MedicationDispenseSubstitutionComponent", "wasSubstituted", element.getWasSubstitutedElement(), -1);
17371    }
17372    if (element.hasType()) {
17373      composeCodeableConcept(t, "MedicationDispenseSubstitutionComponent", "type", element.getType(), -1);
17374    }
17375    for (int i = 0; i < element.getReason().size(); i++) {
17376      composeCodeableConcept(t, "MedicationDispenseSubstitutionComponent", "reason", element.getReason().get(i), i);
17377    }
17378    if (element.hasResponsibleParty()) {
17379      composeReference(t, "MedicationDispenseSubstitutionComponent", "responsibleParty", element.getResponsibleParty(), -1);
17380    }
17381  }
17382
17383  protected void composeMedicationKnowledge(Complex parent, String parentType, String name, MedicationKnowledge element, int index) {
17384    if (element == null) 
17385      return;
17386    Complex t;
17387    if (Utilities.noString(parentType))
17388      t = parent;
17389    else {
17390      t = parent.predicate("fhir:"+name,index > -1);
17391    }
17392    composeDomainResource(t, "MedicationKnowledge", name, element, index);
17393    for (int i = 0; i < element.getIdentifier().size(); i++) {
17394      composeIdentifier(t, "MedicationKnowledge", "identifier", element.getIdentifier().get(i), i);
17395    }
17396    if (element.hasCode()) {
17397      composeCodeableConcept(t, "MedicationKnowledge", "code", element.getCode(), -1);
17398    }
17399    if (element.hasStatusElement()) {
17400      composeEnum(t, "MedicationKnowledge", "status", element.getStatusElement(), -1);
17401    }
17402    if (element.hasAuthor()) {
17403      composeReference(t, "MedicationKnowledge", "author", element.getAuthor(), -1);
17404    }
17405    for (int i = 0; i < element.getIntendedJurisdiction().size(); i++) {
17406      composeCodeableConcept(t, "MedicationKnowledge", "intendedJurisdiction", element.getIntendedJurisdiction().get(i), i);
17407    }
17408    for (int i = 0; i < element.getName().size(); i++) {
17409      composeString(t, "MedicationKnowledge", "name", element.getName().get(i), i);
17410    }
17411    for (int i = 0; i < element.getRelatedMedicationKnowledge().size(); i++) {
17412      composeMedicationKnowledgeRelatedMedicationKnowledgeComponent(t, "MedicationKnowledge", "relatedMedicationKnowledge", element.getRelatedMedicationKnowledge().get(i), i);
17413    }
17414    for (int i = 0; i < element.getAssociatedMedication().size(); i++) {
17415      composeReference(t, "MedicationKnowledge", "associatedMedication", element.getAssociatedMedication().get(i), i);
17416    }
17417    for (int i = 0; i < element.getProductType().size(); i++) {
17418      composeCodeableConcept(t, "MedicationKnowledge", "productType", element.getProductType().get(i), i);
17419    }
17420    for (int i = 0; i < element.getMonograph().size(); i++) {
17421      composeMedicationKnowledgeMonographComponent(t, "MedicationKnowledge", "monograph", element.getMonograph().get(i), i);
17422    }
17423    if (element.hasPreparationInstructionElement()) {
17424      composeMarkdown(t, "MedicationKnowledge", "preparationInstruction", element.getPreparationInstructionElement(), -1);
17425    }
17426    for (int i = 0; i < element.getCost().size(); i++) {
17427      composeMedicationKnowledgeCostComponent(t, "MedicationKnowledge", "cost", element.getCost().get(i), i);
17428    }
17429    for (int i = 0; i < element.getMonitoringProgram().size(); i++) {
17430      composeMedicationKnowledgeMonitoringProgramComponent(t, "MedicationKnowledge", "monitoringProgram", element.getMonitoringProgram().get(i), i);
17431    }
17432    for (int i = 0; i < element.getIndicationGuideline().size(); i++) {
17433      composeMedicationKnowledgeIndicationGuidelineComponent(t, "MedicationKnowledge", "indicationGuideline", element.getIndicationGuideline().get(i), i);
17434    }
17435    for (int i = 0; i < element.getMedicineClassification().size(); i++) {
17436      composeMedicationKnowledgeMedicineClassificationComponent(t, "MedicationKnowledge", "medicineClassification", element.getMedicineClassification().get(i), i);
17437    }
17438    for (int i = 0; i < element.getPackaging().size(); i++) {
17439      composeMedicationKnowledgePackagingComponent(t, "MedicationKnowledge", "packaging", element.getPackaging().get(i), i);
17440    }
17441    for (int i = 0; i < element.getClinicalUseIssue().size(); i++) {
17442      composeReference(t, "MedicationKnowledge", "clinicalUseIssue", element.getClinicalUseIssue().get(i), i);
17443    }
17444    for (int i = 0; i < element.getStorageGuideline().size(); i++) {
17445      composeMedicationKnowledgeStorageGuidelineComponent(t, "MedicationKnowledge", "storageGuideline", element.getStorageGuideline().get(i), i);
17446    }
17447    for (int i = 0; i < element.getRegulatory().size(); i++) {
17448      composeMedicationKnowledgeRegulatoryComponent(t, "MedicationKnowledge", "regulatory", element.getRegulatory().get(i), i);
17449    }
17450    if (element.hasDefinitional()) {
17451      composeMedicationKnowledgeDefinitionalComponent(t, "MedicationKnowledge", "definitional", element.getDefinitional(), -1);
17452    }
17453  }
17454
17455  protected void composeMedicationKnowledgeRelatedMedicationKnowledgeComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeRelatedMedicationKnowledgeComponent element, int index) {
17456    if (element == null) 
17457      return;
17458    Complex t;
17459    if (Utilities.noString(parentType))
17460      t = parent;
17461    else {
17462      t = parent.predicate("fhir:"+name,index > -1);
17463    }
17464    composeBackboneElement(t, "relatedMedicationKnowledge", name, element, index);
17465    if (element.hasType()) {
17466      composeCodeableConcept(t, "MedicationKnowledgeRelatedMedicationKnowledgeComponent", "type", element.getType(), -1);
17467    }
17468    for (int i = 0; i < element.getReference().size(); i++) {
17469      composeReference(t, "MedicationKnowledgeRelatedMedicationKnowledgeComponent", "reference", element.getReference().get(i), i);
17470    }
17471  }
17472
17473  protected void composeMedicationKnowledgeMonographComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeMonographComponent element, int index) {
17474    if (element == null) 
17475      return;
17476    Complex t;
17477    if (Utilities.noString(parentType))
17478      t = parent;
17479    else {
17480      t = parent.predicate("fhir:"+name,index > -1);
17481    }
17482    composeBackboneElement(t, "monograph", name, element, index);
17483    if (element.hasType()) {
17484      composeCodeableConcept(t, "MedicationKnowledgeMonographComponent", "type", element.getType(), -1);
17485    }
17486    if (element.hasSource()) {
17487      composeReference(t, "MedicationKnowledgeMonographComponent", "source", element.getSource(), -1);
17488    }
17489  }
17490
17491  protected void composeMedicationKnowledgeCostComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeCostComponent element, int index) {
17492    if (element == null) 
17493      return;
17494    Complex t;
17495    if (Utilities.noString(parentType))
17496      t = parent;
17497    else {
17498      t = parent.predicate("fhir:"+name,index > -1);
17499    }
17500    composeBackboneElement(t, "cost", name, element, index);
17501    for (int i = 0; i < element.getEffectiveDate().size(); i++) {
17502      composePeriod(t, "MedicationKnowledgeCostComponent", "effectiveDate", element.getEffectiveDate().get(i), i);
17503    }
17504    if (element.hasType()) {
17505      composeCodeableConcept(t, "MedicationKnowledgeCostComponent", "type", element.getType(), -1);
17506    }
17507    if (element.hasSourceElement()) {
17508      composeString(t, "MedicationKnowledgeCostComponent", "source", element.getSourceElement(), -1);
17509    }
17510    if (element.hasCost()) {
17511      composeType(t, "MedicationKnowledgeCostComponent", "cost", element.getCost(), -1);
17512    }
17513  }
17514
17515  protected void composeMedicationKnowledgeMonitoringProgramComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeMonitoringProgramComponent element, int index) {
17516    if (element == null) 
17517      return;
17518    Complex t;
17519    if (Utilities.noString(parentType))
17520      t = parent;
17521    else {
17522      t = parent.predicate("fhir:"+name,index > -1);
17523    }
17524    composeBackboneElement(t, "monitoringProgram", name, element, index);
17525    if (element.hasType()) {
17526      composeCodeableConcept(t, "MedicationKnowledgeMonitoringProgramComponent", "type", element.getType(), -1);
17527    }
17528    if (element.hasNameElement()) {
17529      composeString(t, "MedicationKnowledgeMonitoringProgramComponent", "name", element.getNameElement(), -1);
17530    }
17531  }
17532
17533  protected void composeMedicationKnowledgeIndicationGuidelineComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeIndicationGuidelineComponent element, int index) {
17534    if (element == null) 
17535      return;
17536    Complex t;
17537    if (Utilities.noString(parentType))
17538      t = parent;
17539    else {
17540      t = parent.predicate("fhir:"+name,index > -1);
17541    }
17542    composeBackboneElement(t, "indicationGuideline", name, element, index);
17543    for (int i = 0; i < element.getIndication().size(); i++) {
17544      composeCodeableReference(t, "MedicationKnowledgeIndicationGuidelineComponent", "indication", element.getIndication().get(i), i);
17545    }
17546    for (int i = 0; i < element.getDosingGuideline().size(); i++) {
17547      composeMedicationKnowledgeIndicationGuidelineDosingGuidelineComponent(t, "MedicationKnowledgeIndicationGuidelineComponent", "dosingGuideline", element.getDosingGuideline().get(i), i);
17548    }
17549  }
17550
17551  protected void composeMedicationKnowledgeIndicationGuidelineDosingGuidelineComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeIndicationGuidelineDosingGuidelineComponent element, int index) {
17552    if (element == null) 
17553      return;
17554    Complex t;
17555    if (Utilities.noString(parentType))
17556      t = parent;
17557    else {
17558      t = parent.predicate("fhir:"+name,index > -1);
17559    }
17560    composeBackboneElement(t, "dosingGuideline", name, element, index);
17561    if (element.hasTreatmentIntent()) {
17562      composeCodeableConcept(t, "MedicationKnowledgeIndicationGuidelineDosingGuidelineComponent", "treatmentIntent", element.getTreatmentIntent(), -1);
17563    }
17564    for (int i = 0; i < element.getDosage().size(); i++) {
17565      composeMedicationKnowledgeIndicationGuidelineDosingGuidelineDosageComponent(t, "MedicationKnowledgeIndicationGuidelineDosingGuidelineComponent", "dosage", element.getDosage().get(i), i);
17566    }
17567    if (element.hasAdministrationTreatment()) {
17568      composeCodeableConcept(t, "MedicationKnowledgeIndicationGuidelineDosingGuidelineComponent", "administrationTreatment", element.getAdministrationTreatment(), -1);
17569    }
17570    for (int i = 0; i < element.getPatientCharacteristic().size(); i++) {
17571      composeMedicationKnowledgeIndicationGuidelineDosingGuidelinePatientCharacteristicComponent(t, "MedicationKnowledgeIndicationGuidelineDosingGuidelineComponent", "patientCharacteristic", element.getPatientCharacteristic().get(i), i);
17572    }
17573  }
17574
17575  protected void composeMedicationKnowledgeIndicationGuidelineDosingGuidelineDosageComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeIndicationGuidelineDosingGuidelineDosageComponent element, int index) {
17576    if (element == null) 
17577      return;
17578    Complex t;
17579    if (Utilities.noString(parentType))
17580      t = parent;
17581    else {
17582      t = parent.predicate("fhir:"+name,index > -1);
17583    }
17584    composeBackboneElement(t, "dosage", name, element, index);
17585    if (element.hasType()) {
17586      composeCodeableConcept(t, "MedicationKnowledgeIndicationGuidelineDosingGuidelineDosageComponent", "type", element.getType(), -1);
17587    }
17588    for (int i = 0; i < element.getDosage().size(); i++) {
17589      composeDosage(t, "MedicationKnowledgeIndicationGuidelineDosingGuidelineDosageComponent", "dosage", element.getDosage().get(i), i);
17590    }
17591  }
17592
17593  protected void composeMedicationKnowledgeIndicationGuidelineDosingGuidelinePatientCharacteristicComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeIndicationGuidelineDosingGuidelinePatientCharacteristicComponent element, int index) {
17594    if (element == null) 
17595      return;
17596    Complex t;
17597    if (Utilities.noString(parentType))
17598      t = parent;
17599    else {
17600      t = parent.predicate("fhir:"+name,index > -1);
17601    }
17602    composeBackboneElement(t, "patientCharacteristic", name, element, index);
17603    if (element.hasType()) {
17604      composeCodeableConcept(t, "MedicationKnowledgeIndicationGuidelineDosingGuidelinePatientCharacteristicComponent", "type", element.getType(), -1);
17605    }
17606    if (element.hasValue()) {
17607      composeType(t, "MedicationKnowledgeIndicationGuidelineDosingGuidelinePatientCharacteristicComponent", "value", element.getValue(), -1);
17608    }
17609  }
17610
17611  protected void composeMedicationKnowledgeMedicineClassificationComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeMedicineClassificationComponent element, int index) {
17612    if (element == null) 
17613      return;
17614    Complex t;
17615    if (Utilities.noString(parentType))
17616      t = parent;
17617    else {
17618      t = parent.predicate("fhir:"+name,index > -1);
17619    }
17620    composeBackboneElement(t, "medicineClassification", name, element, index);
17621    if (element.hasType()) {
17622      composeCodeableConcept(t, "MedicationKnowledgeMedicineClassificationComponent", "type", element.getType(), -1);
17623    }
17624    if (element.hasSource()) {
17625      composeType(t, "MedicationKnowledgeMedicineClassificationComponent", "source", element.getSource(), -1);
17626    }
17627    for (int i = 0; i < element.getClassification().size(); i++) {
17628      composeCodeableConcept(t, "MedicationKnowledgeMedicineClassificationComponent", "classification", element.getClassification().get(i), i);
17629    }
17630  }
17631
17632  protected void composeMedicationKnowledgePackagingComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgePackagingComponent element, int index) {
17633    if (element == null) 
17634      return;
17635    Complex t;
17636    if (Utilities.noString(parentType))
17637      t = parent;
17638    else {
17639      t = parent.predicate("fhir:"+name,index > -1);
17640    }
17641    composeBackboneElement(t, "packaging", name, element, index);
17642    for (int i = 0; i < element.getCost().size(); i++) {
17643      composeMedicationKnowledgeCostComponent(t, "MedicationKnowledgePackagingComponent", "cost", element.getCost().get(i), i);
17644    }
17645    if (element.hasPackagedProduct()) {
17646      composeReference(t, "MedicationKnowledgePackagingComponent", "packagedProduct", element.getPackagedProduct(), -1);
17647    }
17648  }
17649
17650  protected void composeMedicationKnowledgeStorageGuidelineComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeStorageGuidelineComponent element, int index) {
17651    if (element == null) 
17652      return;
17653    Complex t;
17654    if (Utilities.noString(parentType))
17655      t = parent;
17656    else {
17657      t = parent.predicate("fhir:"+name,index > -1);
17658    }
17659    composeBackboneElement(t, "storageGuideline", name, element, index);
17660    if (element.hasReferenceElement()) {
17661      composeUri(t, "MedicationKnowledgeStorageGuidelineComponent", "reference", element.getReferenceElement(), -1);
17662    }
17663    for (int i = 0; i < element.getNote().size(); i++) {
17664      composeAnnotation(t, "MedicationKnowledgeStorageGuidelineComponent", "note", element.getNote().get(i), i);
17665    }
17666    if (element.hasStabilityDuration()) {
17667      composeDuration(t, "MedicationKnowledgeStorageGuidelineComponent", "stabilityDuration", element.getStabilityDuration(), -1);
17668    }
17669    for (int i = 0; i < element.getEnvironmentalSetting().size(); i++) {
17670      composeMedicationKnowledgeStorageGuidelineEnvironmentalSettingComponent(t, "MedicationKnowledgeStorageGuidelineComponent", "environmentalSetting", element.getEnvironmentalSetting().get(i), i);
17671    }
17672  }
17673
17674  protected void composeMedicationKnowledgeStorageGuidelineEnvironmentalSettingComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeStorageGuidelineEnvironmentalSettingComponent element, int index) {
17675    if (element == null) 
17676      return;
17677    Complex t;
17678    if (Utilities.noString(parentType))
17679      t = parent;
17680    else {
17681      t = parent.predicate("fhir:"+name,index > -1);
17682    }
17683    composeBackboneElement(t, "environmentalSetting", name, element, index);
17684    if (element.hasType()) {
17685      composeCodeableConcept(t, "MedicationKnowledgeStorageGuidelineEnvironmentalSettingComponent", "type", element.getType(), -1);
17686    }
17687    if (element.hasValue()) {
17688      composeType(t, "MedicationKnowledgeStorageGuidelineEnvironmentalSettingComponent", "value", element.getValue(), -1);
17689    }
17690  }
17691
17692  protected void composeMedicationKnowledgeRegulatoryComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeRegulatoryComponent element, int index) {
17693    if (element == null) 
17694      return;
17695    Complex t;
17696    if (Utilities.noString(parentType))
17697      t = parent;
17698    else {
17699      t = parent.predicate("fhir:"+name,index > -1);
17700    }
17701    composeBackboneElement(t, "regulatory", name, element, index);
17702    if (element.hasRegulatoryAuthority()) {
17703      composeReference(t, "MedicationKnowledgeRegulatoryComponent", "regulatoryAuthority", element.getRegulatoryAuthority(), -1);
17704    }
17705    for (int i = 0; i < element.getSubstitution().size(); i++) {
17706      composeMedicationKnowledgeRegulatorySubstitutionComponent(t, "MedicationKnowledgeRegulatoryComponent", "substitution", element.getSubstitution().get(i), i);
17707    }
17708    for (int i = 0; i < element.getSchedule().size(); i++) {
17709      composeCodeableConcept(t, "MedicationKnowledgeRegulatoryComponent", "schedule", element.getSchedule().get(i), i);
17710    }
17711    if (element.hasMaxDispense()) {
17712      composeMedicationKnowledgeRegulatoryMaxDispenseComponent(t, "MedicationKnowledgeRegulatoryComponent", "maxDispense", element.getMaxDispense(), -1);
17713    }
17714  }
17715
17716  protected void composeMedicationKnowledgeRegulatorySubstitutionComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeRegulatorySubstitutionComponent element, int index) {
17717    if (element == null) 
17718      return;
17719    Complex t;
17720    if (Utilities.noString(parentType))
17721      t = parent;
17722    else {
17723      t = parent.predicate("fhir:"+name,index > -1);
17724    }
17725    composeBackboneElement(t, "substitution", name, element, index);
17726    if (element.hasType()) {
17727      composeCodeableConcept(t, "MedicationKnowledgeRegulatorySubstitutionComponent", "type", element.getType(), -1);
17728    }
17729    if (element.hasAllowedElement()) {
17730      composeBoolean(t, "MedicationKnowledgeRegulatorySubstitutionComponent", "allowed", element.getAllowedElement(), -1);
17731    }
17732  }
17733
17734  protected void composeMedicationKnowledgeRegulatoryMaxDispenseComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeRegulatoryMaxDispenseComponent element, int index) {
17735    if (element == null) 
17736      return;
17737    Complex t;
17738    if (Utilities.noString(parentType))
17739      t = parent;
17740    else {
17741      t = parent.predicate("fhir:"+name,index > -1);
17742    }
17743    composeBackboneElement(t, "maxDispense", name, element, index);
17744    if (element.hasQuantity()) {
17745      composeQuantity(t, "MedicationKnowledgeRegulatoryMaxDispenseComponent", "quantity", element.getQuantity(), -1);
17746    }
17747    if (element.hasPeriod()) {
17748      composeDuration(t, "MedicationKnowledgeRegulatoryMaxDispenseComponent", "period", element.getPeriod(), -1);
17749    }
17750  }
17751
17752  protected void composeMedicationKnowledgeDefinitionalComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeDefinitionalComponent element, int index) {
17753    if (element == null) 
17754      return;
17755    Complex t;
17756    if (Utilities.noString(parentType))
17757      t = parent;
17758    else {
17759      t = parent.predicate("fhir:"+name,index > -1);
17760    }
17761    composeBackboneElement(t, "definitional", name, element, index);
17762    for (int i = 0; i < element.getDefinition().size(); i++) {
17763      composeReference(t, "MedicationKnowledgeDefinitionalComponent", "definition", element.getDefinition().get(i), i);
17764    }
17765    if (element.hasDoseForm()) {
17766      composeCodeableConcept(t, "MedicationKnowledgeDefinitionalComponent", "doseForm", element.getDoseForm(), -1);
17767    }
17768    for (int i = 0; i < element.getIntendedRoute().size(); i++) {
17769      composeCodeableConcept(t, "MedicationKnowledgeDefinitionalComponent", "intendedRoute", element.getIntendedRoute().get(i), i);
17770    }
17771    for (int i = 0; i < element.getIngredient().size(); i++) {
17772      composeMedicationKnowledgeDefinitionalIngredientComponent(t, "MedicationKnowledgeDefinitionalComponent", "ingredient", element.getIngredient().get(i), i);
17773    }
17774    for (int i = 0; i < element.getDrugCharacteristic().size(); i++) {
17775      composeMedicationKnowledgeDefinitionalDrugCharacteristicComponent(t, "MedicationKnowledgeDefinitionalComponent", "drugCharacteristic", element.getDrugCharacteristic().get(i), i);
17776    }
17777  }
17778
17779  protected void composeMedicationKnowledgeDefinitionalIngredientComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeDefinitionalIngredientComponent element, int index) {
17780    if (element == null) 
17781      return;
17782    Complex t;
17783    if (Utilities.noString(parentType))
17784      t = parent;
17785    else {
17786      t = parent.predicate("fhir:"+name,index > -1);
17787    }
17788    composeBackboneElement(t, "ingredient", name, element, index);
17789    if (element.hasItem()) {
17790      composeCodeableReference(t, "MedicationKnowledgeDefinitionalIngredientComponent", "item", element.getItem(), -1);
17791    }
17792    if (element.hasType()) {
17793      composeCodeableConcept(t, "MedicationKnowledgeDefinitionalIngredientComponent", "type", element.getType(), -1);
17794    }
17795    if (element.hasStrength()) {
17796      composeType(t, "MedicationKnowledgeDefinitionalIngredientComponent", "strength", element.getStrength(), -1);
17797    }
17798  }
17799
17800  protected void composeMedicationKnowledgeDefinitionalDrugCharacteristicComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeDefinitionalDrugCharacteristicComponent element, int index) {
17801    if (element == null) 
17802      return;
17803    Complex t;
17804    if (Utilities.noString(parentType))
17805      t = parent;
17806    else {
17807      t = parent.predicate("fhir:"+name,index > -1);
17808    }
17809    composeBackboneElement(t, "drugCharacteristic", name, element, index);
17810    if (element.hasType()) {
17811      composeCodeableConcept(t, "MedicationKnowledgeDefinitionalDrugCharacteristicComponent", "type", element.getType(), -1);
17812    }
17813    if (element.hasValue()) {
17814      composeType(t, "MedicationKnowledgeDefinitionalDrugCharacteristicComponent", "value", element.getValue(), -1);
17815    }
17816  }
17817
17818  protected void composeMedicationRequest(Complex parent, String parentType, String name, MedicationRequest element, int index) {
17819    if (element == null) 
17820      return;
17821    Complex t;
17822    if (Utilities.noString(parentType))
17823      t = parent;
17824    else {
17825      t = parent.predicate("fhir:"+name,index > -1);
17826    }
17827    composeDomainResource(t, "MedicationRequest", name, element, index);
17828    for (int i = 0; i < element.getIdentifier().size(); i++) {
17829      composeIdentifier(t, "MedicationRequest", "identifier", element.getIdentifier().get(i), i);
17830    }
17831    for (int i = 0; i < element.getBasedOn().size(); i++) {
17832      composeReference(t, "MedicationRequest", "basedOn", element.getBasedOn().get(i), i);
17833    }
17834    if (element.hasPriorPrescription()) {
17835      composeReference(t, "MedicationRequest", "priorPrescription", element.getPriorPrescription(), -1);
17836    }
17837    if (element.hasGroupIdentifier()) {
17838      composeIdentifier(t, "MedicationRequest", "groupIdentifier", element.getGroupIdentifier(), -1);
17839    }
17840    if (element.hasStatusElement()) {
17841      composeEnum(t, "MedicationRequest", "status", element.getStatusElement(), -1);
17842    }
17843    if (element.hasStatusReason()) {
17844      composeCodeableConcept(t, "MedicationRequest", "statusReason", element.getStatusReason(), -1);
17845    }
17846    if (element.hasStatusChangedElement()) {
17847      composeDateTime(t, "MedicationRequest", "statusChanged", element.getStatusChangedElement(), -1);
17848    }
17849    if (element.hasIntentElement()) {
17850      composeEnum(t, "MedicationRequest", "intent", element.getIntentElement(), -1);
17851    }
17852    for (int i = 0; i < element.getCategory().size(); i++) {
17853      composeCodeableConcept(t, "MedicationRequest", "category", element.getCategory().get(i), i);
17854    }
17855    if (element.hasPriorityElement()) {
17856      composeEnum(t, "MedicationRequest", "priority", element.getPriorityElement(), -1);
17857    }
17858    if (element.hasDoNotPerformElement()) {
17859      composeBoolean(t, "MedicationRequest", "doNotPerform", element.getDoNotPerformElement(), -1);
17860    }
17861    if (element.hasMedication()) {
17862      composeCodeableReference(t, "MedicationRequest", "medication", element.getMedication(), -1);
17863    }
17864    if (element.hasSubject()) {
17865      composeReference(t, "MedicationRequest", "subject", element.getSubject(), -1);
17866    }
17867    for (int i = 0; i < element.getInformationSource().size(); i++) {
17868      composeReference(t, "MedicationRequest", "informationSource", element.getInformationSource().get(i), i);
17869    }
17870    if (element.hasEncounter()) {
17871      composeReference(t, "MedicationRequest", "encounter", element.getEncounter(), -1);
17872    }
17873    for (int i = 0; i < element.getSupportingInformation().size(); i++) {
17874      composeReference(t, "MedicationRequest", "supportingInformation", element.getSupportingInformation().get(i), i);
17875    }
17876    if (element.hasAuthoredOnElement()) {
17877      composeDateTime(t, "MedicationRequest", "authoredOn", element.getAuthoredOnElement(), -1);
17878    }
17879    if (element.hasRequester()) {
17880      composeReference(t, "MedicationRequest", "requester", element.getRequester(), -1);
17881    }
17882    if (element.hasReportedElement()) {
17883      composeBoolean(t, "MedicationRequest", "reported", element.getReportedElement(), -1);
17884    }
17885    if (element.hasPerformerType()) {
17886      composeCodeableConcept(t, "MedicationRequest", "performerType", element.getPerformerType(), -1);
17887    }
17888    for (int i = 0; i < element.getPerformer().size(); i++) {
17889      composeReference(t, "MedicationRequest", "performer", element.getPerformer().get(i), i);
17890    }
17891    for (int i = 0; i < element.getDevice().size(); i++) {
17892      composeCodeableReference(t, "MedicationRequest", "device", element.getDevice().get(i), i);
17893    }
17894    if (element.hasRecorder()) {
17895      composeReference(t, "MedicationRequest", "recorder", element.getRecorder(), -1);
17896    }
17897    for (int i = 0; i < element.getReason().size(); i++) {
17898      composeCodeableReference(t, "MedicationRequest", "reason", element.getReason().get(i), i);
17899    }
17900    if (element.hasCourseOfTherapyType()) {
17901      composeCodeableConcept(t, "MedicationRequest", "courseOfTherapyType", element.getCourseOfTherapyType(), -1);
17902    }
17903    for (int i = 0; i < element.getInsurance().size(); i++) {
17904      composeReference(t, "MedicationRequest", "insurance", element.getInsurance().get(i), i);
17905    }
17906    for (int i = 0; i < element.getNote().size(); i++) {
17907      composeAnnotation(t, "MedicationRequest", "note", element.getNote().get(i), i);
17908    }
17909    if (element.hasRenderedDosageInstructionElement()) {
17910      composeMarkdown(t, "MedicationRequest", "renderedDosageInstruction", element.getRenderedDosageInstructionElement(), -1);
17911    }
17912    if (element.hasEffectiveDosePeriod()) {
17913      composePeriod(t, "MedicationRequest", "effectiveDosePeriod", element.getEffectiveDosePeriod(), -1);
17914    }
17915    for (int i = 0; i < element.getDosageInstruction().size(); i++) {
17916      composeDosage(t, "MedicationRequest", "dosageInstruction", element.getDosageInstruction().get(i), i);
17917    }
17918    if (element.hasDispenseRequest()) {
17919      composeMedicationRequestDispenseRequestComponent(t, "MedicationRequest", "dispenseRequest", element.getDispenseRequest(), -1);
17920    }
17921    if (element.hasSubstitution()) {
17922      composeMedicationRequestSubstitutionComponent(t, "MedicationRequest", "substitution", element.getSubstitution(), -1);
17923    }
17924    for (int i = 0; i < element.getEventHistory().size(); i++) {
17925      composeReference(t, "MedicationRequest", "eventHistory", element.getEventHistory().get(i), i);
17926    }
17927  }
17928
17929  protected void composeMedicationRequestDispenseRequestComponent(Complex parent, String parentType, String name, MedicationRequest.MedicationRequestDispenseRequestComponent element, int index) {
17930    if (element == null) 
17931      return;
17932    Complex t;
17933    if (Utilities.noString(parentType))
17934      t = parent;
17935    else {
17936      t = parent.predicate("fhir:"+name,index > -1);
17937    }
17938    composeBackboneElement(t, "dispenseRequest", name, element, index);
17939    if (element.hasInitialFill()) {
17940      composeMedicationRequestDispenseRequestInitialFillComponent(t, "MedicationRequestDispenseRequestComponent", "initialFill", element.getInitialFill(), -1);
17941    }
17942    if (element.hasDispenseInterval()) {
17943      composeDuration(t, "MedicationRequestDispenseRequestComponent", "dispenseInterval", element.getDispenseInterval(), -1);
17944    }
17945    if (element.hasValidityPeriod()) {
17946      composePeriod(t, "MedicationRequestDispenseRequestComponent", "validityPeriod", element.getValidityPeriod(), -1);
17947    }
17948    if (element.hasNumberOfRepeatsAllowedElement()) {
17949      composeUnsignedInt(t, "MedicationRequestDispenseRequestComponent", "numberOfRepeatsAllowed", element.getNumberOfRepeatsAllowedElement(), -1);
17950    }
17951    if (element.hasQuantity()) {
17952      composeQuantity(t, "MedicationRequestDispenseRequestComponent", "quantity", element.getQuantity(), -1);
17953    }
17954    if (element.hasExpectedSupplyDuration()) {
17955      composeDuration(t, "MedicationRequestDispenseRequestComponent", "expectedSupplyDuration", element.getExpectedSupplyDuration(), -1);
17956    }
17957    if (element.hasDispenser()) {
17958      composeReference(t, "MedicationRequestDispenseRequestComponent", "dispenser", element.getDispenser(), -1);
17959    }
17960    for (int i = 0; i < element.getDispenserInstruction().size(); i++) {
17961      composeAnnotation(t, "MedicationRequestDispenseRequestComponent", "dispenserInstruction", element.getDispenserInstruction().get(i), i);
17962    }
17963    if (element.hasDoseAdministrationAid()) {
17964      composeCodeableConcept(t, "MedicationRequestDispenseRequestComponent", "doseAdministrationAid", element.getDoseAdministrationAid(), -1);
17965    }
17966  }
17967
17968  protected void composeMedicationRequestDispenseRequestInitialFillComponent(Complex parent, String parentType, String name, MedicationRequest.MedicationRequestDispenseRequestInitialFillComponent 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:"+name,index > -1);
17976    }
17977    composeBackboneElement(t, "initialFill", name, element, index);
17978    if (element.hasQuantity()) {
17979      composeQuantity(t, "MedicationRequestDispenseRequestInitialFillComponent", "quantity", element.getQuantity(), -1);
17980    }
17981    if (element.hasDuration()) {
17982      composeDuration(t, "MedicationRequestDispenseRequestInitialFillComponent", "duration", element.getDuration(), -1);
17983    }
17984  }
17985
17986  protected void composeMedicationRequestSubstitutionComponent(Complex parent, String parentType, String name, MedicationRequest.MedicationRequestSubstitutionComponent element, int index) {
17987    if (element == null) 
17988      return;
17989    Complex t;
17990    if (Utilities.noString(parentType))
17991      t = parent;
17992    else {
17993      t = parent.predicate("fhir:"+name,index > -1);
17994    }
17995    composeBackboneElement(t, "substitution", name, element, index);
17996    if (element.hasAllowed()) {
17997      composeType(t, "MedicationRequestSubstitutionComponent", "allowed", element.getAllowed(), -1);
17998    }
17999    if (element.hasReason()) {
18000      composeCodeableConcept(t, "MedicationRequestSubstitutionComponent", "reason", element.getReason(), -1);
18001    }
18002  }
18003
18004  protected void composeMedicationStatement(Complex parent, String parentType, String name, MedicationStatement element, int index) {
18005    if (element == null) 
18006      return;
18007    Complex t;
18008    if (Utilities.noString(parentType))
18009      t = parent;
18010    else {
18011      t = parent.predicate("fhir:"+name,index > -1);
18012    }
18013    composeDomainResource(t, "MedicationStatement", name, element, index);
18014    for (int i = 0; i < element.getIdentifier().size(); i++) {
18015      composeIdentifier(t, "MedicationStatement", "identifier", element.getIdentifier().get(i), i);
18016    }
18017    for (int i = 0; i < element.getPartOf().size(); i++) {
18018      composeReference(t, "MedicationStatement", "partOf", element.getPartOf().get(i), i);
18019    }
18020    if (element.hasStatusElement()) {
18021      composeEnum(t, "MedicationStatement", "status", element.getStatusElement(), -1);
18022    }
18023    for (int i = 0; i < element.getCategory().size(); i++) {
18024      composeCodeableConcept(t, "MedicationStatement", "category", element.getCategory().get(i), i);
18025    }
18026    if (element.hasMedication()) {
18027      composeCodeableReference(t, "MedicationStatement", "medication", element.getMedication(), -1);
18028    }
18029    if (element.hasSubject()) {
18030      composeReference(t, "MedicationStatement", "subject", element.getSubject(), -1);
18031    }
18032    if (element.hasEncounter()) {
18033      composeReference(t, "MedicationStatement", "encounter", element.getEncounter(), -1);
18034    }
18035    if (element.hasEffective()) {
18036      composeType(t, "MedicationStatement", "effective", element.getEffective(), -1);
18037    }
18038    if (element.hasDateAssertedElement()) {
18039      composeDateTime(t, "MedicationStatement", "dateAsserted", element.getDateAssertedElement(), -1);
18040    }
18041    for (int i = 0; i < element.getInformationSource().size(); i++) {
18042      composeReference(t, "MedicationStatement", "informationSource", element.getInformationSource().get(i), i);
18043    }
18044    for (int i = 0; i < element.getDerivedFrom().size(); i++) {
18045      composeReference(t, "MedicationStatement", "derivedFrom", element.getDerivedFrom().get(i), i);
18046    }
18047    for (int i = 0; i < element.getReason().size(); i++) {
18048      composeCodeableReference(t, "MedicationStatement", "reason", element.getReason().get(i), i);
18049    }
18050    for (int i = 0; i < element.getNote().size(); i++) {
18051      composeAnnotation(t, "MedicationStatement", "note", element.getNote().get(i), i);
18052    }
18053    for (int i = 0; i < element.getRelatedClinicalInformation().size(); i++) {
18054      composeReference(t, "MedicationStatement", "relatedClinicalInformation", element.getRelatedClinicalInformation().get(i), i);
18055    }
18056    if (element.hasRenderedDosageInstructionElement()) {
18057      composeMarkdown(t, "MedicationStatement", "renderedDosageInstruction", element.getRenderedDosageInstructionElement(), -1);
18058    }
18059    for (int i = 0; i < element.getDosage().size(); i++) {
18060      composeDosage(t, "MedicationStatement", "dosage", element.getDosage().get(i), i);
18061    }
18062    if (element.hasAdherence()) {
18063      composeMedicationStatementAdherenceComponent(t, "MedicationStatement", "adherence", element.getAdherence(), -1);
18064    }
18065  }
18066
18067  protected void composeMedicationStatementAdherenceComponent(Complex parent, String parentType, String name, MedicationStatement.MedicationStatementAdherenceComponent 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:"+name,index > -1);
18075    }
18076    composeBackboneElement(t, "adherence", name, element, index);
18077    if (element.hasCode()) {
18078      composeCodeableConcept(t, "MedicationStatementAdherenceComponent", "code", element.getCode(), -1);
18079    }
18080    if (element.hasReason()) {
18081      composeCodeableConcept(t, "MedicationStatementAdherenceComponent", "reason", element.getReason(), -1);
18082    }
18083  }
18084
18085  protected void composeMedicinalProductDefinition(Complex parent, String parentType, String name, MedicinalProductDefinition element, int index) {
18086    if (element == null) 
18087      return;
18088    Complex t;
18089    if (Utilities.noString(parentType))
18090      t = parent;
18091    else {
18092      t = parent.predicate("fhir:"+name,index > -1);
18093    }
18094    composeDomainResource(t, "MedicinalProductDefinition", name, element, index);
18095    for (int i = 0; i < element.getIdentifier().size(); i++) {
18096      composeIdentifier(t, "MedicinalProductDefinition", "identifier", element.getIdentifier().get(i), i);
18097    }
18098    if (element.hasType()) {
18099      composeCodeableConcept(t, "MedicinalProductDefinition", "type", element.getType(), -1);
18100    }
18101    if (element.hasDomain()) {
18102      composeCodeableConcept(t, "MedicinalProductDefinition", "domain", element.getDomain(), -1);
18103    }
18104    if (element.hasVersionElement()) {
18105      composeString(t, "MedicinalProductDefinition", "version", element.getVersionElement(), -1);
18106    }
18107    if (element.hasStatus()) {
18108      composeCodeableConcept(t, "MedicinalProductDefinition", "status", element.getStatus(), -1);
18109    }
18110    if (element.hasStatusDateElement()) {
18111      composeDateTime(t, "MedicinalProductDefinition", "statusDate", element.getStatusDateElement(), -1);
18112    }
18113    if (element.hasDescriptionElement()) {
18114      composeMarkdown(t, "MedicinalProductDefinition", "description", element.getDescriptionElement(), -1);
18115    }
18116    if (element.hasCombinedPharmaceuticalDoseForm()) {
18117      composeCodeableConcept(t, "MedicinalProductDefinition", "combinedPharmaceuticalDoseForm", element.getCombinedPharmaceuticalDoseForm(), -1);
18118    }
18119    for (int i = 0; i < element.getRoute().size(); i++) {
18120      composeCodeableConcept(t, "MedicinalProductDefinition", "route", element.getRoute().get(i), i);
18121    }
18122    if (element.hasIndicationElement()) {
18123      composeMarkdown(t, "MedicinalProductDefinition", "indication", element.getIndicationElement(), -1);
18124    }
18125    if (element.hasLegalStatusOfSupply()) {
18126      composeCodeableConcept(t, "MedicinalProductDefinition", "legalStatusOfSupply", element.getLegalStatusOfSupply(), -1);
18127    }
18128    if (element.hasAdditionalMonitoringIndicator()) {
18129      composeCodeableConcept(t, "MedicinalProductDefinition", "additionalMonitoringIndicator", element.getAdditionalMonitoringIndicator(), -1);
18130    }
18131    for (int i = 0; i < element.getSpecialMeasures().size(); i++) {
18132      composeCodeableConcept(t, "MedicinalProductDefinition", "specialMeasures", element.getSpecialMeasures().get(i), i);
18133    }
18134    if (element.hasPediatricUseIndicator()) {
18135      composeCodeableConcept(t, "MedicinalProductDefinition", "pediatricUseIndicator", element.getPediatricUseIndicator(), -1);
18136    }
18137    for (int i = 0; i < element.getClassification().size(); i++) {
18138      composeCodeableConcept(t, "MedicinalProductDefinition", "classification", element.getClassification().get(i), i);
18139    }
18140    for (int i = 0; i < element.getMarketingStatus().size(); i++) {
18141      composeMarketingStatus(t, "MedicinalProductDefinition", "marketingStatus", element.getMarketingStatus().get(i), i);
18142    }
18143    for (int i = 0; i < element.getPackagedMedicinalProduct().size(); i++) {
18144      composeCodeableConcept(t, "MedicinalProductDefinition", "packagedMedicinalProduct", element.getPackagedMedicinalProduct().get(i), i);
18145    }
18146    for (int i = 0; i < element.getComprisedOf().size(); i++) {
18147      composeReference(t, "MedicinalProductDefinition", "comprisedOf", element.getComprisedOf().get(i), i);
18148    }
18149    for (int i = 0; i < element.getIngredient().size(); i++) {
18150      composeCodeableConcept(t, "MedicinalProductDefinition", "ingredient", element.getIngredient().get(i), i);
18151    }
18152    for (int i = 0; i < element.getImpurity().size(); i++) {
18153      composeCodeableReference(t, "MedicinalProductDefinition", "impurity", element.getImpurity().get(i), i);
18154    }
18155    for (int i = 0; i < element.getAttachedDocument().size(); i++) {
18156      composeReference(t, "MedicinalProductDefinition", "attachedDocument", element.getAttachedDocument().get(i), i);
18157    }
18158    for (int i = 0; i < element.getMasterFile().size(); i++) {
18159      composeReference(t, "MedicinalProductDefinition", "masterFile", element.getMasterFile().get(i), i);
18160    }
18161    for (int i = 0; i < element.getContact().size(); i++) {
18162      composeMedicinalProductDefinitionContactComponent(t, "MedicinalProductDefinition", "contact", element.getContact().get(i), i);
18163    }
18164    for (int i = 0; i < element.getClinicalTrial().size(); i++) {
18165      composeReference(t, "MedicinalProductDefinition", "clinicalTrial", element.getClinicalTrial().get(i), i);
18166    }
18167    for (int i = 0; i < element.getCode().size(); i++) {
18168      composeCoding(t, "MedicinalProductDefinition", "code", element.getCode().get(i), i);
18169    }
18170    for (int i = 0; i < element.getName().size(); i++) {
18171      composeMedicinalProductDefinitionNameComponent(t, "MedicinalProductDefinition", "name", element.getName().get(i), i);
18172    }
18173    for (int i = 0; i < element.getCrossReference().size(); i++) {
18174      composeMedicinalProductDefinitionCrossReferenceComponent(t, "MedicinalProductDefinition", "crossReference", element.getCrossReference().get(i), i);
18175    }
18176    for (int i = 0; i < element.getOperation().size(); i++) {
18177      composeMedicinalProductDefinitionOperationComponent(t, "MedicinalProductDefinition", "operation", element.getOperation().get(i), i);
18178    }
18179    for (int i = 0; i < element.getCharacteristic().size(); i++) {
18180      composeMedicinalProductDefinitionCharacteristicComponent(t, "MedicinalProductDefinition", "characteristic", element.getCharacteristic().get(i), i);
18181    }
18182  }
18183
18184  protected void composeMedicinalProductDefinitionContactComponent(Complex parent, String parentType, String name, MedicinalProductDefinition.MedicinalProductDefinitionContactComponent element, int index) {
18185    if (element == null) 
18186      return;
18187    Complex t;
18188    if (Utilities.noString(parentType))
18189      t = parent;
18190    else {
18191      t = parent.predicate("fhir:"+name,index > -1);
18192    }
18193    composeBackboneElement(t, "contact", name, element, index);
18194    if (element.hasType()) {
18195      composeCodeableConcept(t, "MedicinalProductDefinitionContactComponent", "type", element.getType(), -1);
18196    }
18197    if (element.hasContact()) {
18198      composeReference(t, "MedicinalProductDefinitionContactComponent", "contact", element.getContact(), -1);
18199    }
18200  }
18201
18202  protected void composeMedicinalProductDefinitionNameComponent(Complex parent, String parentType, String name, MedicinalProductDefinition.MedicinalProductDefinitionNameComponent 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:"+name,index > -1);
18210    }
18211    composeBackboneElement(t, "name", name, element, index);
18212    if (element.hasProductNameElement()) {
18213      composeString(t, "MedicinalProductDefinitionNameComponent", "productName", element.getProductNameElement(), -1);
18214    }
18215    if (element.hasType()) {
18216      composeCodeableConcept(t, "MedicinalProductDefinitionNameComponent", "type", element.getType(), -1);
18217    }
18218    for (int i = 0; i < element.getPart().size(); i++) {
18219      composeMedicinalProductDefinitionNamePartComponent(t, "MedicinalProductDefinitionNameComponent", "part", element.getPart().get(i), i);
18220    }
18221    for (int i = 0; i < element.getUsage().size(); i++) {
18222      composeMedicinalProductDefinitionNameUsageComponent(t, "MedicinalProductDefinitionNameComponent", "usage", element.getUsage().get(i), i);
18223    }
18224  }
18225
18226  protected void composeMedicinalProductDefinitionNamePartComponent(Complex parent, String parentType, String name, MedicinalProductDefinition.MedicinalProductDefinitionNamePartComponent element, int index) {
18227    if (element == null) 
18228      return;
18229    Complex t;
18230    if (Utilities.noString(parentType))
18231      t = parent;
18232    else {
18233      t = parent.predicate("fhir:"+name,index > -1);
18234    }
18235    composeBackboneElement(t, "part", name, element, index);
18236    if (element.hasPartElement()) {
18237      composeString(t, "MedicinalProductDefinitionNamePartComponent", "part", element.getPartElement(), -1);
18238    }
18239    if (element.hasType()) {
18240      composeCodeableConcept(t, "MedicinalProductDefinitionNamePartComponent", "type", element.getType(), -1);
18241    }
18242  }
18243
18244  protected void composeMedicinalProductDefinitionNameUsageComponent(Complex parent, String parentType, String name, MedicinalProductDefinition.MedicinalProductDefinitionNameUsageComponent element, int index) {
18245    if (element == null) 
18246      return;
18247    Complex t;
18248    if (Utilities.noString(parentType))
18249      t = parent;
18250    else {
18251      t = parent.predicate("fhir:"+name,index > -1);
18252    }
18253    composeBackboneElement(t, "usage", name, element, index);
18254    if (element.hasCountry()) {
18255      composeCodeableConcept(t, "MedicinalProductDefinitionNameUsageComponent", "country", element.getCountry(), -1);
18256    }
18257    if (element.hasJurisdiction()) {
18258      composeCodeableConcept(t, "MedicinalProductDefinitionNameUsageComponent", "jurisdiction", element.getJurisdiction(), -1);
18259    }
18260    if (element.hasLanguage()) {
18261      composeCodeableConcept(t, "MedicinalProductDefinitionNameUsageComponent", "language", element.getLanguage(), -1);
18262    }
18263  }
18264
18265  protected void composeMedicinalProductDefinitionCrossReferenceComponent(Complex parent, String parentType, String name, MedicinalProductDefinition.MedicinalProductDefinitionCrossReferenceComponent element, int index) {
18266    if (element == null) 
18267      return;
18268    Complex t;
18269    if (Utilities.noString(parentType))
18270      t = parent;
18271    else {
18272      t = parent.predicate("fhir:"+name,index > -1);
18273    }
18274    composeBackboneElement(t, "crossReference", name, element, index);
18275    if (element.hasProduct()) {
18276      composeCodeableReference(t, "MedicinalProductDefinitionCrossReferenceComponent", "product", element.getProduct(), -1);
18277    }
18278    if (element.hasType()) {
18279      composeCodeableConcept(t, "MedicinalProductDefinitionCrossReferenceComponent", "type", element.getType(), -1);
18280    }
18281  }
18282
18283  protected void composeMedicinalProductDefinitionOperationComponent(Complex parent, String parentType, String name, MedicinalProductDefinition.MedicinalProductDefinitionOperationComponent element, int index) {
18284    if (element == null) 
18285      return;
18286    Complex t;
18287    if (Utilities.noString(parentType))
18288      t = parent;
18289    else {
18290      t = parent.predicate("fhir:"+name,index > -1);
18291    }
18292    composeBackboneElement(t, "operation", name, element, index);
18293    if (element.hasType()) {
18294      composeCodeableReference(t, "MedicinalProductDefinitionOperationComponent", "type", element.getType(), -1);
18295    }
18296    if (element.hasEffectiveDate()) {
18297      composePeriod(t, "MedicinalProductDefinitionOperationComponent", "effectiveDate", element.getEffectiveDate(), -1);
18298    }
18299    for (int i = 0; i < element.getOrganization().size(); i++) {
18300      composeReference(t, "MedicinalProductDefinitionOperationComponent", "organization", element.getOrganization().get(i), i);
18301    }
18302    if (element.hasConfidentialityIndicator()) {
18303      composeCodeableConcept(t, "MedicinalProductDefinitionOperationComponent", "confidentialityIndicator", element.getConfidentialityIndicator(), -1);
18304    }
18305  }
18306
18307  protected void composeMedicinalProductDefinitionCharacteristicComponent(Complex parent, String parentType, String name, MedicinalProductDefinition.MedicinalProductDefinitionCharacteristicComponent element, int index) {
18308    if (element == null) 
18309      return;
18310    Complex t;
18311    if (Utilities.noString(parentType))
18312      t = parent;
18313    else {
18314      t = parent.predicate("fhir:"+name,index > -1);
18315    }
18316    composeBackboneElement(t, "characteristic", name, element, index);
18317    if (element.hasType()) {
18318      composeCodeableConcept(t, "MedicinalProductDefinitionCharacteristicComponent", "type", element.getType(), -1);
18319    }
18320    if (element.hasValue()) {
18321      composeType(t, "MedicinalProductDefinitionCharacteristicComponent", "value", element.getValue(), -1);
18322    }
18323  }
18324
18325  protected void composeMessageDefinition(Complex parent, String parentType, String name, MessageDefinition element, int index) {
18326    if (element == null) 
18327      return;
18328    Complex t;
18329    if (Utilities.noString(parentType))
18330      t = parent;
18331    else {
18332      t = parent.predicate("fhir:"+name,index > -1);
18333    }
18334    composeCanonicalResource(t, "MessageDefinition", name, element, index);
18335    if (element.hasUrlElement()) {
18336      composeUri(t, "MessageDefinition", "url", element.getUrlElement(), -1);
18337    }
18338    for (int i = 0; i < element.getIdentifier().size(); i++) {
18339      composeIdentifier(t, "MessageDefinition", "identifier", element.getIdentifier().get(i), i);
18340    }
18341    if (element.hasVersionElement()) {
18342      composeString(t, "MessageDefinition", "version", element.getVersionElement(), -1);
18343    }
18344    if (element.hasVersionAlgorithm()) {
18345      composeType(t, "MessageDefinition", "versionAlgorithm", element.getVersionAlgorithm(), -1);
18346    }
18347    if (element.hasNameElement()) {
18348      composeString(t, "MessageDefinition", "name", element.getNameElement(), -1);
18349    }
18350    if (element.hasTitleElement()) {
18351      composeString(t, "MessageDefinition", "title", element.getTitleElement(), -1);
18352    }
18353    for (int i = 0; i < element.getReplaces().size(); i++) {
18354      composeCanonical(t, "MessageDefinition", "replaces", element.getReplaces().get(i), i);
18355    }
18356    if (element.hasStatusElement()) {
18357      composeEnum(t, "MessageDefinition", "status", element.getStatusElement(), -1);
18358    }
18359    if (element.hasExperimentalElement()) {
18360      composeBoolean(t, "MessageDefinition", "experimental", element.getExperimentalElement(), -1);
18361    }
18362    if (element.hasDateElement()) {
18363      composeDateTime(t, "MessageDefinition", "date", element.getDateElement(), -1);
18364    }
18365    if (element.hasPublisherElement()) {
18366      composeString(t, "MessageDefinition", "publisher", element.getPublisherElement(), -1);
18367    }
18368    for (int i = 0; i < element.getContact().size(); i++) {
18369      composeContactDetail(t, "MessageDefinition", "contact", element.getContact().get(i), i);
18370    }
18371    if (element.hasDescriptionElement()) {
18372      composeMarkdown(t, "MessageDefinition", "description", element.getDescriptionElement(), -1);
18373    }
18374    for (int i = 0; i < element.getUseContext().size(); i++) {
18375      composeUsageContext(t, "MessageDefinition", "useContext", element.getUseContext().get(i), i);
18376    }
18377    for (int i = 0; i < element.getJurisdiction().size(); i++) {
18378      composeCodeableConcept(t, "MessageDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
18379    }
18380    if (element.hasPurposeElement()) {
18381      composeMarkdown(t, "MessageDefinition", "purpose", element.getPurposeElement(), -1);
18382    }
18383    if (element.hasCopyrightElement()) {
18384      composeMarkdown(t, "MessageDefinition", "copyright", element.getCopyrightElement(), -1);
18385    }
18386    if (element.hasCopyrightLabelElement()) {
18387      composeString(t, "MessageDefinition", "copyrightLabel", element.getCopyrightLabelElement(), -1);
18388    }
18389    if (element.hasBaseElement()) {
18390      composeCanonical(t, "MessageDefinition", "base", element.getBaseElement(), -1);
18391    }
18392    for (int i = 0; i < element.getParent().size(); i++) {
18393      composeCanonical(t, "MessageDefinition", "parent", element.getParent().get(i), i);
18394    }
18395    if (element.hasEvent()) {
18396      composeType(t, "MessageDefinition", "event", element.getEvent(), -1);
18397    }
18398    if (element.hasCategoryElement()) {
18399      composeEnum(t, "MessageDefinition", "category", element.getCategoryElement(), -1);
18400    }
18401    for (int i = 0; i < element.getFocus().size(); i++) {
18402      composeMessageDefinitionFocusComponent(t, "MessageDefinition", "focus", element.getFocus().get(i), i);
18403    }
18404    if (element.hasResponseRequiredElement()) {
18405      composeEnum(t, "MessageDefinition", "responseRequired", element.getResponseRequiredElement(), -1);
18406    }
18407    for (int i = 0; i < element.getAllowedResponse().size(); i++) {
18408      composeMessageDefinitionAllowedResponseComponent(t, "MessageDefinition", "allowedResponse", element.getAllowedResponse().get(i), i);
18409    }
18410    if (element.hasGraphElement()) {
18411      composeCanonical(t, "MessageDefinition", "graph", element.getGraphElement(), -1);
18412    }
18413  }
18414
18415  protected void composeMessageDefinitionFocusComponent(Complex parent, String parentType, String name, MessageDefinition.MessageDefinitionFocusComponent element, int index) {
18416    if (element == null) 
18417      return;
18418    Complex t;
18419    if (Utilities.noString(parentType))
18420      t = parent;
18421    else {
18422      t = parent.predicate("fhir:"+name,index > -1);
18423    }
18424    composeBackboneElement(t, "focus", name, element, index);
18425    if (element.hasCodeElement()) {
18426      composeCode(t, "MessageDefinitionFocusComponent", "code", element.getCodeElement(), -1);
18427    }
18428    if (element.hasProfileElement()) {
18429      composeCanonical(t, "MessageDefinitionFocusComponent", "profile", element.getProfileElement(), -1);
18430    }
18431    if (element.hasMinElement()) {
18432      composeUnsignedInt(t, "MessageDefinitionFocusComponent", "min", element.getMinElement(), -1);
18433    }
18434    if (element.hasMaxElement()) {
18435      composeString(t, "MessageDefinitionFocusComponent", "max", element.getMaxElement(), -1);
18436    }
18437  }
18438
18439  protected void composeMessageDefinitionAllowedResponseComponent(Complex parent, String parentType, String name, MessageDefinition.MessageDefinitionAllowedResponseComponent element, int index) {
18440    if (element == null) 
18441      return;
18442    Complex t;
18443    if (Utilities.noString(parentType))
18444      t = parent;
18445    else {
18446      t = parent.predicate("fhir:"+name,index > -1);
18447    }
18448    composeBackboneElement(t, "allowedResponse", name, element, index);
18449    if (element.hasMessageElement()) {
18450      composeCanonical(t, "MessageDefinitionAllowedResponseComponent", "message", element.getMessageElement(), -1);
18451    }
18452    if (element.hasSituationElement()) {
18453      composeMarkdown(t, "MessageDefinitionAllowedResponseComponent", "situation", element.getSituationElement(), -1);
18454    }
18455  }
18456
18457  protected void composeMessageHeader(Complex parent, String parentType, String name, MessageHeader element, int index) {
18458    if (element == null) 
18459      return;
18460    Complex t;
18461    if (Utilities.noString(parentType))
18462      t = parent;
18463    else {
18464      t = parent.predicate("fhir:"+name,index > -1);
18465    }
18466    composeDomainResource(t, "MessageHeader", name, element, index);
18467    if (element.hasEvent()) {
18468      composeType(t, "MessageHeader", "event", element.getEvent(), -1);
18469    }
18470    for (int i = 0; i < element.getDestination().size(); i++) {
18471      composeMessageHeaderMessageDestinationComponent(t, "MessageHeader", "destination", element.getDestination().get(i), i);
18472    }
18473    if (element.hasSender()) {
18474      composeReference(t, "MessageHeader", "sender", element.getSender(), -1);
18475    }
18476    if (element.hasAuthor()) {
18477      composeReference(t, "MessageHeader", "author", element.getAuthor(), -1);
18478    }
18479    if (element.hasSource()) {
18480      composeMessageHeaderMessageSourceComponent(t, "MessageHeader", "source", element.getSource(), -1);
18481    }
18482    if (element.hasResponsible()) {
18483      composeReference(t, "MessageHeader", "responsible", element.getResponsible(), -1);
18484    }
18485    if (element.hasReason()) {
18486      composeCodeableConcept(t, "MessageHeader", "reason", element.getReason(), -1);
18487    }
18488    if (element.hasResponse()) {
18489      composeMessageHeaderResponseComponent(t, "MessageHeader", "response", element.getResponse(), -1);
18490    }
18491    for (int i = 0; i < element.getFocus().size(); i++) {
18492      composeReference(t, "MessageHeader", "focus", element.getFocus().get(i), i);
18493    }
18494    if (element.hasDefinitionElement()) {
18495      composeCanonical(t, "MessageHeader", "definition", element.getDefinitionElement(), -1);
18496    }
18497  }
18498
18499  protected void composeMessageHeaderMessageDestinationComponent(Complex parent, String parentType, String name, MessageHeader.MessageDestinationComponent element, int index) {
18500    if (element == null) 
18501      return;
18502    Complex t;
18503    if (Utilities.noString(parentType))
18504      t = parent;
18505    else {
18506      t = parent.predicate("fhir:"+name,index > -1);
18507    }
18508    composeBackboneElement(t, "destination", name, element, index);
18509    if (element.hasEndpoint()) {
18510      composeType(t, "MessageDestinationComponent", "endpoint", element.getEndpoint(), -1);
18511    }
18512    if (element.hasNameElement()) {
18513      composeString(t, "MessageDestinationComponent", "name", element.getNameElement(), -1);
18514    }
18515    if (element.hasTarget()) {
18516      composeReference(t, "MessageDestinationComponent", "target", element.getTarget(), -1);
18517    }
18518    if (element.hasReceiver()) {
18519      composeReference(t, "MessageDestinationComponent", "receiver", element.getReceiver(), -1);
18520    }
18521  }
18522
18523  protected void composeMessageHeaderMessageSourceComponent(Complex parent, String parentType, String name, MessageHeader.MessageSourceComponent element, int index) {
18524    if (element == null) 
18525      return;
18526    Complex t;
18527    if (Utilities.noString(parentType))
18528      t = parent;
18529    else {
18530      t = parent.predicate("fhir:"+name,index > -1);
18531    }
18532    composeBackboneElement(t, "source", name, element, index);
18533    if (element.hasEndpoint()) {
18534      composeType(t, "MessageSourceComponent", "endpoint", element.getEndpoint(), -1);
18535    }
18536    if (element.hasNameElement()) {
18537      composeString(t, "MessageSourceComponent", "name", element.getNameElement(), -1);
18538    }
18539    if (element.hasSoftwareElement()) {
18540      composeString(t, "MessageSourceComponent", "software", element.getSoftwareElement(), -1);
18541    }
18542    if (element.hasVersionElement()) {
18543      composeString(t, "MessageSourceComponent", "version", element.getVersionElement(), -1);
18544    }
18545    if (element.hasContact()) {
18546      composeContactPoint(t, "MessageSourceComponent", "contact", element.getContact(), -1);
18547    }
18548  }
18549
18550  protected void composeMessageHeaderResponseComponent(Complex parent, String parentType, String name, MessageHeader.MessageHeaderResponseComponent element, int index) {
18551    if (element == null) 
18552      return;
18553    Complex t;
18554    if (Utilities.noString(parentType))
18555      t = parent;
18556    else {
18557      t = parent.predicate("fhir:"+name,index > -1);
18558    }
18559    composeBackboneElement(t, "response", name, element, index);
18560    if (element.hasIdentifier()) {
18561      composeIdentifier(t, "MessageHeaderResponseComponent", "identifier", element.getIdentifier(), -1);
18562    }
18563    if (element.hasCodeElement()) {
18564      composeEnum(t, "MessageHeaderResponseComponent", "code", element.getCodeElement(), -1);
18565    }
18566    if (element.hasDetails()) {
18567      composeReference(t, "MessageHeaderResponseComponent", "details", element.getDetails(), -1);
18568    }
18569  }
18570
18571  protected void composeMolecularSequence(Complex parent, String parentType, String name, MolecularSequence element, int index) {
18572    if (element == null) 
18573      return;
18574    Complex t;
18575    if (Utilities.noString(parentType))
18576      t = parent;
18577    else {
18578      t = parent.predicate("fhir:"+name,index > -1);
18579    }
18580    composeDomainResource(t, "MolecularSequence", name, element, index);
18581    for (int i = 0; i < element.getIdentifier().size(); i++) {
18582      composeIdentifier(t, "MolecularSequence", "identifier", element.getIdentifier().get(i), i);
18583    }
18584    if (element.hasTypeElement()) {
18585      composeEnum(t, "MolecularSequence", "type", element.getTypeElement(), -1);
18586    }
18587    if (element.hasSubject()) {
18588      composeReference(t, "MolecularSequence", "subject", element.getSubject(), -1);
18589    }
18590    for (int i = 0; i < element.getFocus().size(); i++) {
18591      composeReference(t, "MolecularSequence", "focus", element.getFocus().get(i), i);
18592    }
18593    if (element.hasSpecimen()) {
18594      composeReference(t, "MolecularSequence", "specimen", element.getSpecimen(), -1);
18595    }
18596    if (element.hasDevice()) {
18597      composeReference(t, "MolecularSequence", "device", element.getDevice(), -1);
18598    }
18599    if (element.hasPerformer()) {
18600      composeReference(t, "MolecularSequence", "performer", element.getPerformer(), -1);
18601    }
18602    if (element.hasLiteralElement()) {
18603      composeString(t, "MolecularSequence", "literal", element.getLiteralElement(), -1);
18604    }
18605    for (int i = 0; i < element.getFormatted().size(); i++) {
18606      composeAttachment(t, "MolecularSequence", "formatted", element.getFormatted().get(i), i);
18607    }
18608    for (int i = 0; i < element.getRelative().size(); i++) {
18609      composeMolecularSequenceRelativeComponent(t, "MolecularSequence", "relative", element.getRelative().get(i), i);
18610    }
18611  }
18612
18613  protected void composeMolecularSequenceRelativeComponent(Complex parent, String parentType, String name, MolecularSequence.MolecularSequenceRelativeComponent 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:"+name,index > -1);
18621    }
18622    composeBackboneElement(t, "relative", name, element, index);
18623    if (element.hasCoordinateSystem()) {
18624      composeCodeableConcept(t, "MolecularSequenceRelativeComponent", "coordinateSystem", element.getCoordinateSystem(), -1);
18625    }
18626    if (element.hasOrdinalPositionElement()) {
18627      composeInteger(t, "MolecularSequenceRelativeComponent", "ordinalPosition", element.getOrdinalPositionElement(), -1);
18628    }
18629    if (element.hasSequenceRange()) {
18630      composeRange(t, "MolecularSequenceRelativeComponent", "sequenceRange", element.getSequenceRange(), -1);
18631    }
18632    if (element.hasStartingSequence()) {
18633      composeMolecularSequenceRelativeStartingSequenceComponent(t, "MolecularSequenceRelativeComponent", "startingSequence", element.getStartingSequence(), -1);
18634    }
18635    for (int i = 0; i < element.getEdit().size(); i++) {
18636      composeMolecularSequenceRelativeEditComponent(t, "MolecularSequenceRelativeComponent", "edit", element.getEdit().get(i), i);
18637    }
18638  }
18639
18640  protected void composeMolecularSequenceRelativeStartingSequenceComponent(Complex parent, String parentType, String name, MolecularSequence.MolecularSequenceRelativeStartingSequenceComponent element, int index) {
18641    if (element == null) 
18642      return;
18643    Complex t;
18644    if (Utilities.noString(parentType))
18645      t = parent;
18646    else {
18647      t = parent.predicate("fhir:"+name,index > -1);
18648    }
18649    composeBackboneElement(t, "startingSequence", name, element, index);
18650    if (element.hasGenomeAssembly()) {
18651      composeCodeableConcept(t, "MolecularSequenceRelativeStartingSequenceComponent", "genomeAssembly", element.getGenomeAssembly(), -1);
18652    }
18653    if (element.hasChromosome()) {
18654      composeCodeableConcept(t, "MolecularSequenceRelativeStartingSequenceComponent", "chromosome", element.getChromosome(), -1);
18655    }
18656    if (element.hasSequence()) {
18657      composeType(t, "MolecularSequenceRelativeStartingSequenceComponent", "sequence", element.getSequence(), -1);
18658    }
18659    if (element.hasWindowStartElement()) {
18660      composeInteger(t, "MolecularSequenceRelativeStartingSequenceComponent", "windowStart", element.getWindowStartElement(), -1);
18661    }
18662    if (element.hasWindowEndElement()) {
18663      composeInteger(t, "MolecularSequenceRelativeStartingSequenceComponent", "windowEnd", element.getWindowEndElement(), -1);
18664    }
18665    if (element.hasOrientationElement()) {
18666      composeEnum(t, "MolecularSequenceRelativeStartingSequenceComponent", "orientation", element.getOrientationElement(), -1);
18667    }
18668    if (element.hasStrandElement()) {
18669      composeEnum(t, "MolecularSequenceRelativeStartingSequenceComponent", "strand", element.getStrandElement(), -1);
18670    }
18671  }
18672
18673  protected void composeMolecularSequenceRelativeEditComponent(Complex parent, String parentType, String name, MolecularSequence.MolecularSequenceRelativeEditComponent element, int index) {
18674    if (element == null) 
18675      return;
18676    Complex t;
18677    if (Utilities.noString(parentType))
18678      t = parent;
18679    else {
18680      t = parent.predicate("fhir:"+name,index > -1);
18681    }
18682    composeBackboneElement(t, "edit", name, element, index);
18683    if (element.hasStartElement()) {
18684      composeInteger(t, "MolecularSequenceRelativeEditComponent", "start", element.getStartElement(), -1);
18685    }
18686    if (element.hasEndElement()) {
18687      composeInteger(t, "MolecularSequenceRelativeEditComponent", "end", element.getEndElement(), -1);
18688    }
18689    if (element.hasReplacementSequenceElement()) {
18690      composeString(t, "MolecularSequenceRelativeEditComponent", "replacementSequence", element.getReplacementSequenceElement(), -1);
18691    }
18692    if (element.hasReplacedSequenceElement()) {
18693      composeString(t, "MolecularSequenceRelativeEditComponent", "replacedSequence", element.getReplacedSequenceElement(), -1);
18694    }
18695  }
18696
18697  protected void composeNamingSystem(Complex parent, String parentType, String name, NamingSystem element, int index) {
18698    if (element == null) 
18699      return;
18700    Complex t;
18701    if (Utilities.noString(parentType))
18702      t = parent;
18703    else {
18704      t = parent.predicate("fhir:"+name,index > -1);
18705    }
18706    composeMetadataResource(t, "NamingSystem", name, element, index);
18707    if (element.hasUrlElement()) {
18708      composeUri(t, "NamingSystem", "url", element.getUrlElement(), -1);
18709    }
18710    for (int i = 0; i < element.getIdentifier().size(); i++) {
18711      composeIdentifier(t, "NamingSystem", "identifier", element.getIdentifier().get(i), i);
18712    }
18713    if (element.hasVersionElement()) {
18714      composeString(t, "NamingSystem", "version", element.getVersionElement(), -1);
18715    }
18716    if (element.hasVersionAlgorithm()) {
18717      composeType(t, "NamingSystem", "versionAlgorithm", element.getVersionAlgorithm(), -1);
18718    }
18719    if (element.hasNameElement()) {
18720      composeString(t, "NamingSystem", "name", element.getNameElement(), -1);
18721    }
18722    if (element.hasTitleElement()) {
18723      composeString(t, "NamingSystem", "title", element.getTitleElement(), -1);
18724    }
18725    if (element.hasStatusElement()) {
18726      composeEnum(t, "NamingSystem", "status", element.getStatusElement(), -1);
18727    }
18728    if (element.hasKindElement()) {
18729      composeEnum(t, "NamingSystem", "kind", element.getKindElement(), -1);
18730    }
18731    if (element.hasExperimentalElement()) {
18732      composeBoolean(t, "NamingSystem", "experimental", element.getExperimentalElement(), -1);
18733    }
18734    if (element.hasDateElement()) {
18735      composeDateTime(t, "NamingSystem", "date", element.getDateElement(), -1);
18736    }
18737    if (element.hasPublisherElement()) {
18738      composeString(t, "NamingSystem", "publisher", element.getPublisherElement(), -1);
18739    }
18740    for (int i = 0; i < element.getContact().size(); i++) {
18741      composeContactDetail(t, "NamingSystem", "contact", element.getContact().get(i), i);
18742    }
18743    if (element.hasResponsibleElement()) {
18744      composeString(t, "NamingSystem", "responsible", element.getResponsibleElement(), -1);
18745    }
18746    if (element.hasType()) {
18747      composeCodeableConcept(t, "NamingSystem", "type", element.getType(), -1);
18748    }
18749    if (element.hasDescriptionElement()) {
18750      composeMarkdown(t, "NamingSystem", "description", element.getDescriptionElement(), -1);
18751    }
18752    for (int i = 0; i < element.getUseContext().size(); i++) {
18753      composeUsageContext(t, "NamingSystem", "useContext", element.getUseContext().get(i), i);
18754    }
18755    for (int i = 0; i < element.getJurisdiction().size(); i++) {
18756      composeCodeableConcept(t, "NamingSystem", "jurisdiction", element.getJurisdiction().get(i), i);
18757    }
18758    if (element.hasPurposeElement()) {
18759      composeMarkdown(t, "NamingSystem", "purpose", element.getPurposeElement(), -1);
18760    }
18761    if (element.hasCopyrightElement()) {
18762      composeMarkdown(t, "NamingSystem", "copyright", element.getCopyrightElement(), -1);
18763    }
18764    if (element.hasCopyrightLabelElement()) {
18765      composeString(t, "NamingSystem", "copyrightLabel", element.getCopyrightLabelElement(), -1);
18766    }
18767    if (element.hasApprovalDateElement()) {
18768      composeDate(t, "NamingSystem", "approvalDate", element.getApprovalDateElement(), -1);
18769    }
18770    if (element.hasLastReviewDateElement()) {
18771      composeDate(t, "NamingSystem", "lastReviewDate", element.getLastReviewDateElement(), -1);
18772    }
18773    if (element.hasEffectivePeriod()) {
18774      composePeriod(t, "NamingSystem", "effectivePeriod", element.getEffectivePeriod(), -1);
18775    }
18776    for (int i = 0; i < element.getTopic().size(); i++) {
18777      composeCodeableConcept(t, "NamingSystem", "topic", element.getTopic().get(i), i);
18778    }
18779    for (int i = 0; i < element.getAuthor().size(); i++) {
18780      composeContactDetail(t, "NamingSystem", "author", element.getAuthor().get(i), i);
18781    }
18782    for (int i = 0; i < element.getEditor().size(); i++) {
18783      composeContactDetail(t, "NamingSystem", "editor", element.getEditor().get(i), i);
18784    }
18785    for (int i = 0; i < element.getReviewer().size(); i++) {
18786      composeContactDetail(t, "NamingSystem", "reviewer", element.getReviewer().get(i), i);
18787    }
18788    for (int i = 0; i < element.getEndorser().size(); i++) {
18789      composeContactDetail(t, "NamingSystem", "endorser", element.getEndorser().get(i), i);
18790    }
18791    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
18792      composeRelatedArtifact(t, "NamingSystem", "relatedArtifact", element.getRelatedArtifact().get(i), i);
18793    }
18794    if (element.hasUsageElement()) {
18795      composeString(t, "NamingSystem", "usage", element.getUsageElement(), -1);
18796    }
18797    for (int i = 0; i < element.getUniqueId().size(); i++) {
18798      composeNamingSystemUniqueIdComponent(t, "NamingSystem", "uniqueId", element.getUniqueId().get(i), i);
18799    }
18800  }
18801
18802  protected void composeNamingSystemUniqueIdComponent(Complex parent, String parentType, String name, NamingSystem.NamingSystemUniqueIdComponent element, int index) {
18803    if (element == null) 
18804      return;
18805    Complex t;
18806    if (Utilities.noString(parentType))
18807      t = parent;
18808    else {
18809      t = parent.predicate("fhir:"+name,index > -1);
18810    }
18811    composeBackboneElement(t, "uniqueId", name, element, index);
18812    if (element.hasTypeElement()) {
18813      composeEnum(t, "NamingSystemUniqueIdComponent", "type", element.getTypeElement(), -1);
18814    }
18815    if (element.hasValueElement()) {
18816      composeString(t, "NamingSystemUniqueIdComponent", "value", element.getValueElement(), -1);
18817    }
18818    if (element.hasPreferredElement()) {
18819      composeBoolean(t, "NamingSystemUniqueIdComponent", "preferred", element.getPreferredElement(), -1);
18820    }
18821    if (element.hasCommentElement()) {
18822      composeString(t, "NamingSystemUniqueIdComponent", "comment", element.getCommentElement(), -1);
18823    }
18824    if (element.hasPeriod()) {
18825      composePeriod(t, "NamingSystemUniqueIdComponent", "period", element.getPeriod(), -1);
18826    }
18827    if (element.hasAuthoritativeElement()) {
18828      composeBoolean(t, "NamingSystemUniqueIdComponent", "authoritative", element.getAuthoritativeElement(), -1);
18829    }
18830  }
18831
18832  protected void composeNutritionIntake(Complex parent, String parentType, String name, NutritionIntake element, int index) {
18833    if (element == null) 
18834      return;
18835    Complex t;
18836    if (Utilities.noString(parentType))
18837      t = parent;
18838    else {
18839      t = parent.predicate("fhir:"+name,index > -1);
18840    }
18841    composeDomainResource(t, "NutritionIntake", name, element, index);
18842    for (int i = 0; i < element.getIdentifier().size(); i++) {
18843      composeIdentifier(t, "NutritionIntake", "identifier", element.getIdentifier().get(i), i);
18844    }
18845    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
18846      composeCanonical(t, "NutritionIntake", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
18847    }
18848    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
18849      composeUri(t, "NutritionIntake", "instantiatesUri", element.getInstantiatesUri().get(i), i);
18850    }
18851    for (int i = 0; i < element.getBasedOn().size(); i++) {
18852      composeReference(t, "NutritionIntake", "basedOn", element.getBasedOn().get(i), i);
18853    }
18854    for (int i = 0; i < element.getPartOf().size(); i++) {
18855      composeReference(t, "NutritionIntake", "partOf", element.getPartOf().get(i), i);
18856    }
18857    if (element.hasStatusElement()) {
18858      composeEnum(t, "NutritionIntake", "status", element.getStatusElement(), -1);
18859    }
18860    for (int i = 0; i < element.getStatusReason().size(); i++) {
18861      composeCodeableConcept(t, "NutritionIntake", "statusReason", element.getStatusReason().get(i), i);
18862    }
18863    if (element.hasCode()) {
18864      composeCodeableConcept(t, "NutritionIntake", "code", element.getCode(), -1);
18865    }
18866    if (element.hasSubject()) {
18867      composeReference(t, "NutritionIntake", "subject", element.getSubject(), -1);
18868    }
18869    if (element.hasEncounter()) {
18870      composeReference(t, "NutritionIntake", "encounter", element.getEncounter(), -1);
18871    }
18872    if (element.hasOccurrence()) {
18873      composeType(t, "NutritionIntake", "occurrence", element.getOccurrence(), -1);
18874    }
18875    if (element.hasRecordedElement()) {
18876      composeDateTime(t, "NutritionIntake", "recorded", element.getRecordedElement(), -1);
18877    }
18878    if (element.hasReported()) {
18879      composeType(t, "NutritionIntake", "reported", element.getReported(), -1);
18880    }
18881    for (int i = 0; i < element.getConsumedItem().size(); i++) {
18882      composeNutritionIntakeConsumedItemComponent(t, "NutritionIntake", "consumedItem", element.getConsumedItem().get(i), i);
18883    }
18884    for (int i = 0; i < element.getIngredientLabel().size(); i++) {
18885      composeNutritionIntakeIngredientLabelComponent(t, "NutritionIntake", "ingredientLabel", element.getIngredientLabel().get(i), i);
18886    }
18887    for (int i = 0; i < element.getPerformer().size(); i++) {
18888      composeNutritionIntakePerformerComponent(t, "NutritionIntake", "performer", element.getPerformer().get(i), i);
18889    }
18890    if (element.hasLocation()) {
18891      composeReference(t, "NutritionIntake", "location", element.getLocation(), -1);
18892    }
18893    for (int i = 0; i < element.getDerivedFrom().size(); i++) {
18894      composeReference(t, "NutritionIntake", "derivedFrom", element.getDerivedFrom().get(i), i);
18895    }
18896    for (int i = 0; i < element.getReason().size(); i++) {
18897      composeCodeableReference(t, "NutritionIntake", "reason", element.getReason().get(i), i);
18898    }
18899    for (int i = 0; i < element.getNote().size(); i++) {
18900      composeAnnotation(t, "NutritionIntake", "note", element.getNote().get(i), i);
18901    }
18902  }
18903
18904  protected void composeNutritionIntakeConsumedItemComponent(Complex parent, String parentType, String name, NutritionIntake.NutritionIntakeConsumedItemComponent element, int index) {
18905    if (element == null) 
18906      return;
18907    Complex t;
18908    if (Utilities.noString(parentType))
18909      t = parent;
18910    else {
18911      t = parent.predicate("fhir:"+name,index > -1);
18912    }
18913    composeBackboneElement(t, "consumedItem", name, element, index);
18914    if (element.hasType()) {
18915      composeCodeableConcept(t, "NutritionIntakeConsumedItemComponent", "type", element.getType(), -1);
18916    }
18917    if (element.hasNutritionProduct()) {
18918      composeCodeableReference(t, "NutritionIntakeConsumedItemComponent", "nutritionProduct", element.getNutritionProduct(), -1);
18919    }
18920    if (element.hasSchedule()) {
18921      composeTiming(t, "NutritionIntakeConsumedItemComponent", "schedule", element.getSchedule(), -1);
18922    }
18923    if (element.hasAmount()) {
18924      composeQuantity(t, "NutritionIntakeConsumedItemComponent", "amount", element.getAmount(), -1);
18925    }
18926    if (element.hasRate()) {
18927      composeQuantity(t, "NutritionIntakeConsumedItemComponent", "rate", element.getRate(), -1);
18928    }
18929    if (element.hasNotConsumedElement()) {
18930      composeBoolean(t, "NutritionIntakeConsumedItemComponent", "notConsumed", element.getNotConsumedElement(), -1);
18931    }
18932    if (element.hasNotConsumedReason()) {
18933      composeCodeableConcept(t, "NutritionIntakeConsumedItemComponent", "notConsumedReason", element.getNotConsumedReason(), -1);
18934    }
18935  }
18936
18937  protected void composeNutritionIntakeIngredientLabelComponent(Complex parent, String parentType, String name, NutritionIntake.NutritionIntakeIngredientLabelComponent element, int index) {
18938    if (element == null) 
18939      return;
18940    Complex t;
18941    if (Utilities.noString(parentType))
18942      t = parent;
18943    else {
18944      t = parent.predicate("fhir:"+name,index > -1);
18945    }
18946    composeBackboneElement(t, "ingredientLabel", name, element, index);
18947    if (element.hasNutrient()) {
18948      composeCodeableReference(t, "NutritionIntakeIngredientLabelComponent", "nutrient", element.getNutrient(), -1);
18949    }
18950    if (element.hasAmount()) {
18951      composeQuantity(t, "NutritionIntakeIngredientLabelComponent", "amount", element.getAmount(), -1);
18952    }
18953  }
18954
18955  protected void composeNutritionIntakePerformerComponent(Complex parent, String parentType, String name, NutritionIntake.NutritionIntakePerformerComponent element, int index) {
18956    if (element == null) 
18957      return;
18958    Complex t;
18959    if (Utilities.noString(parentType))
18960      t = parent;
18961    else {
18962      t = parent.predicate("fhir:"+name,index > -1);
18963    }
18964    composeBackboneElement(t, "performer", name, element, index);
18965    if (element.hasFunction()) {
18966      composeCodeableConcept(t, "NutritionIntakePerformerComponent", "function", element.getFunction(), -1);
18967    }
18968    if (element.hasActor()) {
18969      composeReference(t, "NutritionIntakePerformerComponent", "actor", element.getActor(), -1);
18970    }
18971  }
18972
18973  protected void composeNutritionOrder(Complex parent, String parentType, String name, NutritionOrder 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:"+name,index > -1);
18981    }
18982    composeDomainResource(t, "NutritionOrder", name, element, index);
18983    for (int i = 0; i < element.getIdentifier().size(); i++) {
18984      composeIdentifier(t, "NutritionOrder", "identifier", element.getIdentifier().get(i), i);
18985    }
18986    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
18987      composeCanonical(t, "NutritionOrder", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
18988    }
18989    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
18990      composeUri(t, "NutritionOrder", "instantiatesUri", element.getInstantiatesUri().get(i), i);
18991    }
18992    for (int i = 0; i < element.getInstantiates().size(); i++) {
18993      composeUri(t, "NutritionOrder", "instantiates", element.getInstantiates().get(i), i);
18994    }
18995    for (int i = 0; i < element.getBasedOn().size(); i++) {
18996      composeReference(t, "NutritionOrder", "basedOn", element.getBasedOn().get(i), i);
18997    }
18998    if (element.hasGroupIdentifier()) {
18999      composeIdentifier(t, "NutritionOrder", "groupIdentifier", element.getGroupIdentifier(), -1);
19000    }
19001    if (element.hasStatusElement()) {
19002      composeEnum(t, "NutritionOrder", "status", element.getStatusElement(), -1);
19003    }
19004    if (element.hasIntentElement()) {
19005      composeEnum(t, "NutritionOrder", "intent", element.getIntentElement(), -1);
19006    }
19007    if (element.hasPriorityElement()) {
19008      composeEnum(t, "NutritionOrder", "priority", element.getPriorityElement(), -1);
19009    }
19010    if (element.hasSubject()) {
19011      composeReference(t, "NutritionOrder", "subject", element.getSubject(), -1);
19012    }
19013    if (element.hasEncounter()) {
19014      composeReference(t, "NutritionOrder", "encounter", element.getEncounter(), -1);
19015    }
19016    for (int i = 0; i < element.getSupportingInformation().size(); i++) {
19017      composeReference(t, "NutritionOrder", "supportingInformation", element.getSupportingInformation().get(i), i);
19018    }
19019    if (element.hasDateTimeElement()) {
19020      composeDateTime(t, "NutritionOrder", "dateTime", element.getDateTimeElement(), -1);
19021    }
19022    if (element.hasOrderer()) {
19023      composeReference(t, "NutritionOrder", "orderer", element.getOrderer(), -1);
19024    }
19025    for (int i = 0; i < element.getPerformer().size(); i++) {
19026      composeCodeableReference(t, "NutritionOrder", "performer", element.getPerformer().get(i), i);
19027    }
19028    for (int i = 0; i < element.getAllergyIntolerance().size(); i++) {
19029      composeReference(t, "NutritionOrder", "allergyIntolerance", element.getAllergyIntolerance().get(i), i);
19030    }
19031    for (int i = 0; i < element.getFoodPreferenceModifier().size(); i++) {
19032      composeCodeableConcept(t, "NutritionOrder", "foodPreferenceModifier", element.getFoodPreferenceModifier().get(i), i);
19033    }
19034    for (int i = 0; i < element.getExcludeFoodModifier().size(); i++) {
19035      composeCodeableConcept(t, "NutritionOrder", "excludeFoodModifier", element.getExcludeFoodModifier().get(i), i);
19036    }
19037    if (element.hasOutsideFoodAllowedElement()) {
19038      composeBoolean(t, "NutritionOrder", "outsideFoodAllowed", element.getOutsideFoodAllowedElement(), -1);
19039    }
19040    if (element.hasOralDiet()) {
19041      composeNutritionOrderOralDietComponent(t, "NutritionOrder", "oralDiet", element.getOralDiet(), -1);
19042    }
19043    for (int i = 0; i < element.getSupplement().size(); i++) {
19044      composeNutritionOrderSupplementComponent(t, "NutritionOrder", "supplement", element.getSupplement().get(i), i);
19045    }
19046    if (element.hasEnteralFormula()) {
19047      composeNutritionOrderEnteralFormulaComponent(t, "NutritionOrder", "enteralFormula", element.getEnteralFormula(), -1);
19048    }
19049    for (int i = 0; i < element.getNote().size(); i++) {
19050      composeAnnotation(t, "NutritionOrder", "note", element.getNote().get(i), i);
19051    }
19052  }
19053
19054  protected void composeNutritionOrderOralDietComponent(Complex parent, String parentType, String name, NutritionOrder.NutritionOrderOralDietComponent element, int index) {
19055    if (element == null) 
19056      return;
19057    Complex t;
19058    if (Utilities.noString(parentType))
19059      t = parent;
19060    else {
19061      t = parent.predicate("fhir:"+name,index > -1);
19062    }
19063    composeBackboneElement(t, "oralDiet", name, element, index);
19064    for (int i = 0; i < element.getType().size(); i++) {
19065      composeCodeableConcept(t, "NutritionOrderOralDietComponent", "type", element.getType().get(i), i);
19066    }
19067    if (element.hasSchedule()) {
19068      composeNutritionOrderOralDietScheduleComponent(t, "NutritionOrderOralDietComponent", "schedule", element.getSchedule(), -1);
19069    }
19070    for (int i = 0; i < element.getNutrient().size(); i++) {
19071      composeNutritionOrderOralDietNutrientComponent(t, "NutritionOrderOralDietComponent", "nutrient", element.getNutrient().get(i), i);
19072    }
19073    for (int i = 0; i < element.getTexture().size(); i++) {
19074      composeNutritionOrderOralDietTextureComponent(t, "NutritionOrderOralDietComponent", "texture", element.getTexture().get(i), i);
19075    }
19076    for (int i = 0; i < element.getFluidConsistencyType().size(); i++) {
19077      composeCodeableConcept(t, "NutritionOrderOralDietComponent", "fluidConsistencyType", element.getFluidConsistencyType().get(i), i);
19078    }
19079    if (element.hasInstructionElement()) {
19080      composeString(t, "NutritionOrderOralDietComponent", "instruction", element.getInstructionElement(), -1);
19081    }
19082  }
19083
19084  protected void composeNutritionOrderOralDietScheduleComponent(Complex parent, String parentType, String name, NutritionOrder.OralDietScheduleComponent element, int index) {
19085    if (element == null) 
19086      return;
19087    Complex t;
19088    if (Utilities.noString(parentType))
19089      t = parent;
19090    else {
19091      t = parent.predicate("fhir:"+name,index > -1);
19092    }
19093    composeBackboneElement(t, "schedule", name, element, index);
19094    for (int i = 0; i < element.getTiming().size(); i++) {
19095      composeTiming(t, "OralDietScheduleComponent", "timing", element.getTiming().get(i), i);
19096    }
19097    if (element.hasAsNeededElement()) {
19098      composeBoolean(t, "OralDietScheduleComponent", "asNeeded", element.getAsNeededElement(), -1);
19099    }
19100    if (element.hasAsNeededFor()) {
19101      composeCodeableConcept(t, "OralDietScheduleComponent", "asNeededFor", element.getAsNeededFor(), -1);
19102    }
19103  }
19104
19105  protected void composeNutritionOrderOralDietNutrientComponent(Complex parent, String parentType, String name, NutritionOrder.NutritionOrderOralDietNutrientComponent element, int index) {
19106    if (element == null) 
19107      return;
19108    Complex t;
19109    if (Utilities.noString(parentType))
19110      t = parent;
19111    else {
19112      t = parent.predicate("fhir:"+name,index > -1);
19113    }
19114    composeBackboneElement(t, "nutrient", name, element, index);
19115    if (element.hasModifier()) {
19116      composeCodeableConcept(t, "NutritionOrderOralDietNutrientComponent", "modifier", element.getModifier(), -1);
19117    }
19118    if (element.hasAmount()) {
19119      composeQuantity(t, "NutritionOrderOralDietNutrientComponent", "amount", element.getAmount(), -1);
19120    }
19121  }
19122
19123  protected void composeNutritionOrderOralDietTextureComponent(Complex parent, String parentType, String name, NutritionOrder.NutritionOrderOralDietTextureComponent element, int index) {
19124    if (element == null) 
19125      return;
19126    Complex t;
19127    if (Utilities.noString(parentType))
19128      t = parent;
19129    else {
19130      t = parent.predicate("fhir:"+name,index > -1);
19131    }
19132    composeBackboneElement(t, "texture", name, element, index);
19133    if (element.hasModifier()) {
19134      composeCodeableConcept(t, "NutritionOrderOralDietTextureComponent", "modifier", element.getModifier(), -1);
19135    }
19136    if (element.hasFoodType()) {
19137      composeCodeableConcept(t, "NutritionOrderOralDietTextureComponent", "foodType", element.getFoodType(), -1);
19138    }
19139  }
19140
19141  protected void composeNutritionOrderSupplementComponent(Complex parent, String parentType, String name, NutritionOrder.NutritionOrderSupplementComponent element, int index) {
19142    if (element == null) 
19143      return;
19144    Complex t;
19145    if (Utilities.noString(parentType))
19146      t = parent;
19147    else {
19148      t = parent.predicate("fhir:"+name,index > -1);
19149    }
19150    composeBackboneElement(t, "supplement", name, element, index);
19151    if (element.hasType()) {
19152      composeCodeableReference(t, "NutritionOrderSupplementComponent", "type", element.getType(), -1);
19153    }
19154    if (element.hasProductNameElement()) {
19155      composeString(t, "NutritionOrderSupplementComponent", "productName", element.getProductNameElement(), -1);
19156    }
19157    if (element.hasSchedule()) {
19158      composeNutritionOrderSupplementScheduleComponent(t, "NutritionOrderSupplementComponent", "schedule", element.getSchedule(), -1);
19159    }
19160    if (element.hasQuantity()) {
19161      composeQuantity(t, "NutritionOrderSupplementComponent", "quantity", element.getQuantity(), -1);
19162    }
19163    if (element.hasInstructionElement()) {
19164      composeString(t, "NutritionOrderSupplementComponent", "instruction", element.getInstructionElement(), -1);
19165    }
19166  }
19167
19168  protected void composeNutritionOrderSupplementScheduleComponent(Complex parent, String parentType, String name, NutritionOrder.SupplementScheduleComponent 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:"+name,index > -1);
19176    }
19177    composeBackboneElement(t, "schedule", name, element, index);
19178    for (int i = 0; i < element.getTiming().size(); i++) {
19179      composeTiming(t, "SupplementScheduleComponent", "timing", element.getTiming().get(i), i);
19180    }
19181    if (element.hasAsNeededElement()) {
19182      composeBoolean(t, "SupplementScheduleComponent", "asNeeded", element.getAsNeededElement(), -1);
19183    }
19184    if (element.hasAsNeededFor()) {
19185      composeCodeableConcept(t, "SupplementScheduleComponent", "asNeededFor", element.getAsNeededFor(), -1);
19186    }
19187  }
19188
19189  protected void composeNutritionOrderEnteralFormulaComponent(Complex parent, String parentType, String name, NutritionOrder.NutritionOrderEnteralFormulaComponent element, int index) {
19190    if (element == null) 
19191      return;
19192    Complex t;
19193    if (Utilities.noString(parentType))
19194      t = parent;
19195    else {
19196      t = parent.predicate("fhir:"+name,index > -1);
19197    }
19198    composeBackboneElement(t, "enteralFormula", name, element, index);
19199    if (element.hasBaseFormulaType()) {
19200      composeCodeableReference(t, "NutritionOrderEnteralFormulaComponent", "baseFormulaType", element.getBaseFormulaType(), -1);
19201    }
19202    if (element.hasBaseFormulaProductNameElement()) {
19203      composeString(t, "NutritionOrderEnteralFormulaComponent", "baseFormulaProductName", element.getBaseFormulaProductNameElement(), -1);
19204    }
19205    for (int i = 0; i < element.getDeliveryDevice().size(); i++) {
19206      composeCodeableReference(t, "NutritionOrderEnteralFormulaComponent", "deliveryDevice", element.getDeliveryDevice().get(i), i);
19207    }
19208    for (int i = 0; i < element.getAdditive().size(); i++) {
19209      composeNutritionOrderEnteralFormulaAdditiveComponent(t, "NutritionOrderEnteralFormulaComponent", "additive", element.getAdditive().get(i), i);
19210    }
19211    if (element.hasCaloricDensity()) {
19212      composeQuantity(t, "NutritionOrderEnteralFormulaComponent", "caloricDensity", element.getCaloricDensity(), -1);
19213    }
19214    if (element.hasRouteOfAdministration()) {
19215      composeCodeableConcept(t, "NutritionOrderEnteralFormulaComponent", "routeOfAdministration", element.getRouteOfAdministration(), -1);
19216    }
19217    for (int i = 0; i < element.getAdministration().size(); i++) {
19218      composeNutritionOrderEnteralFormulaAdministrationComponent(t, "NutritionOrderEnteralFormulaComponent", "administration", element.getAdministration().get(i), i);
19219    }
19220    if (element.hasMaxVolumeToDeliver()) {
19221      composeQuantity(t, "NutritionOrderEnteralFormulaComponent", "maxVolumeToDeliver", element.getMaxVolumeToDeliver(), -1);
19222    }
19223    if (element.hasAdministrationInstructionElement()) {
19224      composeMarkdown(t, "NutritionOrderEnteralFormulaComponent", "administrationInstruction", element.getAdministrationInstructionElement(), -1);
19225    }
19226  }
19227
19228  protected void composeNutritionOrderEnteralFormulaAdditiveComponent(Complex parent, String parentType, String name, NutritionOrder.NutritionOrderEnteralFormulaAdditiveComponent element, int index) {
19229    if (element == null) 
19230      return;
19231    Complex t;
19232    if (Utilities.noString(parentType))
19233      t = parent;
19234    else {
19235      t = parent.predicate("fhir:"+name,index > -1);
19236    }
19237    composeBackboneElement(t, "additive", name, element, index);
19238    if (element.hasType()) {
19239      composeCodeableReference(t, "NutritionOrderEnteralFormulaAdditiveComponent", "type", element.getType(), -1);
19240    }
19241    if (element.hasProductNameElement()) {
19242      composeString(t, "NutritionOrderEnteralFormulaAdditiveComponent", "productName", element.getProductNameElement(), -1);
19243    }
19244    if (element.hasQuantity()) {
19245      composeQuantity(t, "NutritionOrderEnteralFormulaAdditiveComponent", "quantity", element.getQuantity(), -1);
19246    }
19247  }
19248
19249  protected void composeNutritionOrderEnteralFormulaAdministrationComponent(Complex parent, String parentType, String name, NutritionOrder.NutritionOrderEnteralFormulaAdministrationComponent element, int index) {
19250    if (element == null) 
19251      return;
19252    Complex t;
19253    if (Utilities.noString(parentType))
19254      t = parent;
19255    else {
19256      t = parent.predicate("fhir:"+name,index > -1);
19257    }
19258    composeBackboneElement(t, "administration", name, element, index);
19259    if (element.hasSchedule()) {
19260      composeNutritionOrderEnteralFormulaScheduleComponent(t, "NutritionOrderEnteralFormulaAdministrationComponent", "schedule", element.getSchedule(), -1);
19261    }
19262    if (element.hasQuantity()) {
19263      composeQuantity(t, "NutritionOrderEnteralFormulaAdministrationComponent", "quantity", element.getQuantity(), -1);
19264    }
19265    if (element.hasRate()) {
19266      composeType(t, "NutritionOrderEnteralFormulaAdministrationComponent", "rate", element.getRate(), -1);
19267    }
19268  }
19269
19270  protected void composeNutritionOrderEnteralFormulaScheduleComponent(Complex parent, String parentType, String name, NutritionOrder.EnteralFormulaScheduleComponent element, int index) {
19271    if (element == null) 
19272      return;
19273    Complex t;
19274    if (Utilities.noString(parentType))
19275      t = parent;
19276    else {
19277      t = parent.predicate("fhir:"+name,index > -1);
19278    }
19279    composeBackboneElement(t, "schedule", name, element, index);
19280    for (int i = 0; i < element.getTiming().size(); i++) {
19281      composeTiming(t, "EnteralFormulaScheduleComponent", "timing", element.getTiming().get(i), i);
19282    }
19283    if (element.hasAsNeededElement()) {
19284      composeBoolean(t, "EnteralFormulaScheduleComponent", "asNeeded", element.getAsNeededElement(), -1);
19285    }
19286    if (element.hasAsNeededFor()) {
19287      composeCodeableConcept(t, "EnteralFormulaScheduleComponent", "asNeededFor", element.getAsNeededFor(), -1);
19288    }
19289  }
19290
19291  protected void composeNutritionProduct(Complex parent, String parentType, String name, NutritionProduct element, int index) {
19292    if (element == null) 
19293      return;
19294    Complex t;
19295    if (Utilities.noString(parentType))
19296      t = parent;
19297    else {
19298      t = parent.predicate("fhir:"+name,index > -1);
19299    }
19300    composeDomainResource(t, "NutritionProduct", name, element, index);
19301    if (element.hasCode()) {
19302      composeCodeableConcept(t, "NutritionProduct", "code", element.getCode(), -1);
19303    }
19304    if (element.hasStatusElement()) {
19305      composeEnum(t, "NutritionProduct", "status", element.getStatusElement(), -1);
19306    }
19307    for (int i = 0; i < element.getCategory().size(); i++) {
19308      composeCodeableConcept(t, "NutritionProduct", "category", element.getCategory().get(i), i);
19309    }
19310    for (int i = 0; i < element.getManufacturer().size(); i++) {
19311      composeReference(t, "NutritionProduct", "manufacturer", element.getManufacturer().get(i), i);
19312    }
19313    for (int i = 0; i < element.getNutrient().size(); i++) {
19314      composeNutritionProductNutrientComponent(t, "NutritionProduct", "nutrient", element.getNutrient().get(i), i);
19315    }
19316    for (int i = 0; i < element.getIngredient().size(); i++) {
19317      composeNutritionProductIngredientComponent(t, "NutritionProduct", "ingredient", element.getIngredient().get(i), i);
19318    }
19319    for (int i = 0; i < element.getKnownAllergen().size(); i++) {
19320      composeCodeableReference(t, "NutritionProduct", "knownAllergen", element.getKnownAllergen().get(i), i);
19321    }
19322    for (int i = 0; i < element.getCharacteristic().size(); i++) {
19323      composeNutritionProductCharacteristicComponent(t, "NutritionProduct", "characteristic", element.getCharacteristic().get(i), i);
19324    }
19325    for (int i = 0; i < element.getInstance().size(); i++) {
19326      composeNutritionProductInstanceComponent(t, "NutritionProduct", "instance", element.getInstance().get(i), i);
19327    }
19328    for (int i = 0; i < element.getNote().size(); i++) {
19329      composeAnnotation(t, "NutritionProduct", "note", element.getNote().get(i), i);
19330    }
19331  }
19332
19333  protected void composeNutritionProductNutrientComponent(Complex parent, String parentType, String name, NutritionProduct.NutritionProductNutrientComponent element, int index) {
19334    if (element == null) 
19335      return;
19336    Complex t;
19337    if (Utilities.noString(parentType))
19338      t = parent;
19339    else {
19340      t = parent.predicate("fhir:"+name,index > -1);
19341    }
19342    composeBackboneElement(t, "nutrient", name, element, index);
19343    if (element.hasItem()) {
19344      composeCodeableReference(t, "NutritionProductNutrientComponent", "item", element.getItem(), -1);
19345    }
19346    for (int i = 0; i < element.getAmount().size(); i++) {
19347      composeRatio(t, "NutritionProductNutrientComponent", "amount", element.getAmount().get(i), i);
19348    }
19349  }
19350
19351  protected void composeNutritionProductIngredientComponent(Complex parent, String parentType, String name, NutritionProduct.NutritionProductIngredientComponent element, int index) {
19352    if (element == null) 
19353      return;
19354    Complex t;
19355    if (Utilities.noString(parentType))
19356      t = parent;
19357    else {
19358      t = parent.predicate("fhir:"+name,index > -1);
19359    }
19360    composeBackboneElement(t, "ingredient", name, element, index);
19361    if (element.hasItem()) {
19362      composeCodeableReference(t, "NutritionProductIngredientComponent", "item", element.getItem(), -1);
19363    }
19364    for (int i = 0; i < element.getAmount().size(); i++) {
19365      composeRatio(t, "NutritionProductIngredientComponent", "amount", element.getAmount().get(i), i);
19366    }
19367  }
19368
19369  protected void composeNutritionProductCharacteristicComponent(Complex parent, String parentType, String name, NutritionProduct.NutritionProductCharacteristicComponent element, int index) {
19370    if (element == null) 
19371      return;
19372    Complex t;
19373    if (Utilities.noString(parentType))
19374      t = parent;
19375    else {
19376      t = parent.predicate("fhir:"+name,index > -1);
19377    }
19378    composeBackboneElement(t, "characteristic", name, element, index);
19379    if (element.hasType()) {
19380      composeCodeableConcept(t, "NutritionProductCharacteristicComponent", "type", element.getType(), -1);
19381    }
19382    if (element.hasValue()) {
19383      composeType(t, "NutritionProductCharacteristicComponent", "value", element.getValue(), -1);
19384    }
19385  }
19386
19387  protected void composeNutritionProductInstanceComponent(Complex parent, String parentType, String name, NutritionProduct.NutritionProductInstanceComponent element, int index) {
19388    if (element == null) 
19389      return;
19390    Complex t;
19391    if (Utilities.noString(parentType))
19392      t = parent;
19393    else {
19394      t = parent.predicate("fhir:"+name,index > -1);
19395    }
19396    composeBackboneElement(t, "instance", name, element, index);
19397    if (element.hasQuantity()) {
19398      composeQuantity(t, "NutritionProductInstanceComponent", "quantity", element.getQuantity(), -1);
19399    }
19400    for (int i = 0; i < element.getIdentifier().size(); i++) {
19401      composeIdentifier(t, "NutritionProductInstanceComponent", "identifier", element.getIdentifier().get(i), i);
19402    }
19403    if (element.hasNameElement()) {
19404      composeString(t, "NutritionProductInstanceComponent", "name", element.getNameElement(), -1);
19405    }
19406    if (element.hasLotNumberElement()) {
19407      composeString(t, "NutritionProductInstanceComponent", "lotNumber", element.getLotNumberElement(), -1);
19408    }
19409    if (element.hasExpiryElement()) {
19410      composeDateTime(t, "NutritionProductInstanceComponent", "expiry", element.getExpiryElement(), -1);
19411    }
19412    if (element.hasUseByElement()) {
19413      composeDateTime(t, "NutritionProductInstanceComponent", "useBy", element.getUseByElement(), -1);
19414    }
19415    if (element.hasBiologicalSourceEvent()) {
19416      composeIdentifier(t, "NutritionProductInstanceComponent", "biologicalSourceEvent", element.getBiologicalSourceEvent(), -1);
19417    }
19418  }
19419
19420  protected void composeObservation(Complex parent, String parentType, String name, Observation element, int index) {
19421    if (element == null) 
19422      return;
19423    Complex t;
19424    if (Utilities.noString(parentType))
19425      t = parent;
19426    else {
19427      t = parent.predicate("fhir:"+name,index > -1);
19428    }
19429    composeDomainResource(t, "Observation", name, element, index);
19430    for (int i = 0; i < element.getIdentifier().size(); i++) {
19431      composeIdentifier(t, "Observation", "identifier", element.getIdentifier().get(i), i);
19432    }
19433    if (element.hasInstantiates()) {
19434      composeType(t, "Observation", "instantiates", element.getInstantiates(), -1);
19435    }
19436    for (int i = 0; i < element.getBasedOn().size(); i++) {
19437      composeReference(t, "Observation", "basedOn", element.getBasedOn().get(i), i);
19438    }
19439    for (int i = 0; i < element.getTriggeredBy().size(); i++) {
19440      composeObservationTriggeredByComponent(t, "Observation", "triggeredBy", element.getTriggeredBy().get(i), i);
19441    }
19442    for (int i = 0; i < element.getPartOf().size(); i++) {
19443      composeReference(t, "Observation", "partOf", element.getPartOf().get(i), i);
19444    }
19445    if (element.hasStatusElement()) {
19446      composeEnum(t, "Observation", "status", element.getStatusElement(), -1);
19447    }
19448    for (int i = 0; i < element.getCategory().size(); i++) {
19449      composeCodeableConcept(t, "Observation", "category", element.getCategory().get(i), i);
19450    }
19451    if (element.hasCode()) {
19452      composeCodeableConcept(t, "Observation", "code", element.getCode(), -1);
19453    }
19454    if (element.hasSubject()) {
19455      composeReference(t, "Observation", "subject", element.getSubject(), -1);
19456    }
19457    for (int i = 0; i < element.getFocus().size(); i++) {
19458      composeReference(t, "Observation", "focus", element.getFocus().get(i), i);
19459    }
19460    if (element.hasEncounter()) {
19461      composeReference(t, "Observation", "encounter", element.getEncounter(), -1);
19462    }
19463    if (element.hasEffective()) {
19464      composeType(t, "Observation", "effective", element.getEffective(), -1);
19465    }
19466    if (element.hasIssuedElement()) {
19467      composeInstant(t, "Observation", "issued", element.getIssuedElement(), -1);
19468    }
19469    for (int i = 0; i < element.getPerformer().size(); i++) {
19470      composeReference(t, "Observation", "performer", element.getPerformer().get(i), i);
19471    }
19472    if (element.hasValue()) {
19473      composeType(t, "Observation", "value", element.getValue(), -1);
19474    }
19475    if (element.hasDataAbsentReason()) {
19476      composeCodeableConcept(t, "Observation", "dataAbsentReason", element.getDataAbsentReason(), -1);
19477    }
19478    for (int i = 0; i < element.getInterpretation().size(); i++) {
19479      composeCodeableConcept(t, "Observation", "interpretation", element.getInterpretation().get(i), i);
19480    }
19481    for (int i = 0; i < element.getNote().size(); i++) {
19482      composeAnnotation(t, "Observation", "note", element.getNote().get(i), i);
19483    }
19484    if (element.hasBodySite()) {
19485      composeCodeableConcept(t, "Observation", "bodySite", element.getBodySite(), -1);
19486    }
19487    if (element.hasBodyStructure()) {
19488      composeReference(t, "Observation", "bodyStructure", element.getBodyStructure(), -1);
19489    }
19490    if (element.hasMethod()) {
19491      composeCodeableConcept(t, "Observation", "method", element.getMethod(), -1);
19492    }
19493    if (element.hasSpecimen()) {
19494      composeReference(t, "Observation", "specimen", element.getSpecimen(), -1);
19495    }
19496    if (element.hasDevice()) {
19497      composeReference(t, "Observation", "device", element.getDevice(), -1);
19498    }
19499    for (int i = 0; i < element.getReferenceRange().size(); i++) {
19500      composeObservationReferenceRangeComponent(t, "Observation", "referenceRange", element.getReferenceRange().get(i), i);
19501    }
19502    for (int i = 0; i < element.getHasMember().size(); i++) {
19503      composeReference(t, "Observation", "hasMember", element.getHasMember().get(i), i);
19504    }
19505    for (int i = 0; i < element.getDerivedFrom().size(); i++) {
19506      composeReference(t, "Observation", "derivedFrom", element.getDerivedFrom().get(i), i);
19507    }
19508    for (int i = 0; i < element.getComponent().size(); i++) {
19509      composeObservationComponentComponent(t, "Observation", "component", element.getComponent().get(i), i);
19510    }
19511  }
19512
19513  protected void composeObservationTriggeredByComponent(Complex parent, String parentType, String name, Observation.ObservationTriggeredByComponent element, int index) {
19514    if (element == null) 
19515      return;
19516    Complex t;
19517    if (Utilities.noString(parentType))
19518      t = parent;
19519    else {
19520      t = parent.predicate("fhir:"+name,index > -1);
19521    }
19522    composeBackboneElement(t, "triggeredBy", name, element, index);
19523    if (element.hasObservation()) {
19524      composeReference(t, "ObservationTriggeredByComponent", "observation", element.getObservation(), -1);
19525    }
19526    if (element.hasTypeElement()) {
19527      composeEnum(t, "ObservationTriggeredByComponent", "type", element.getTypeElement(), -1);
19528    }
19529    if (element.hasReasonElement()) {
19530      composeString(t, "ObservationTriggeredByComponent", "reason", element.getReasonElement(), -1);
19531    }
19532  }
19533
19534  protected void composeObservationReferenceRangeComponent(Complex parent, String parentType, String name, Observation.ObservationReferenceRangeComponent element, int index) {
19535    if (element == null) 
19536      return;
19537    Complex t;
19538    if (Utilities.noString(parentType))
19539      t = parent;
19540    else {
19541      t = parent.predicate("fhir:"+name,index > -1);
19542    }
19543    composeBackboneElement(t, "referenceRange", name, element, index);
19544    if (element.hasLow()) {
19545      composeQuantity(t, "ObservationReferenceRangeComponent", "low", element.getLow(), -1);
19546    }
19547    if (element.hasHigh()) {
19548      composeQuantity(t, "ObservationReferenceRangeComponent", "high", element.getHigh(), -1);
19549    }
19550    if (element.hasNormalValue()) {
19551      composeCodeableConcept(t, "ObservationReferenceRangeComponent", "normalValue", element.getNormalValue(), -1);
19552    }
19553    if (element.hasType()) {
19554      composeCodeableConcept(t, "ObservationReferenceRangeComponent", "type", element.getType(), -1);
19555    }
19556    for (int i = 0; i < element.getAppliesTo().size(); i++) {
19557      composeCodeableConcept(t, "ObservationReferenceRangeComponent", "appliesTo", element.getAppliesTo().get(i), i);
19558    }
19559    if (element.hasAge()) {
19560      composeRange(t, "ObservationReferenceRangeComponent", "age", element.getAge(), -1);
19561    }
19562    if (element.hasTextElement()) {
19563      composeMarkdown(t, "ObservationReferenceRangeComponent", "text", element.getTextElement(), -1);
19564    }
19565  }
19566
19567  protected void composeObservationComponentComponent(Complex parent, String parentType, String name, Observation.ObservationComponentComponent element, int index) {
19568    if (element == null) 
19569      return;
19570    Complex t;
19571    if (Utilities.noString(parentType))
19572      t = parent;
19573    else {
19574      t = parent.predicate("fhir:"+name,index > -1);
19575    }
19576    composeBackboneElement(t, "component", name, element, index);
19577    if (element.hasCode()) {
19578      composeCodeableConcept(t, "ObservationComponentComponent", "code", element.getCode(), -1);
19579    }
19580    if (element.hasValue()) {
19581      composeType(t, "ObservationComponentComponent", "value", element.getValue(), -1);
19582    }
19583    if (element.hasDataAbsentReason()) {
19584      composeCodeableConcept(t, "ObservationComponentComponent", "dataAbsentReason", element.getDataAbsentReason(), -1);
19585    }
19586    for (int i = 0; i < element.getInterpretation().size(); i++) {
19587      composeCodeableConcept(t, "ObservationComponentComponent", "interpretation", element.getInterpretation().get(i), i);
19588    }
19589    for (int i = 0; i < element.getReferenceRange().size(); i++) {
19590      composeObservationReferenceRangeComponent(t, "ObservationComponentComponent", "referenceRange", element.getReferenceRange().get(i), i);
19591    }
19592  }
19593
19594  protected void composeObservationDefinition(Complex parent, String parentType, String name, ObservationDefinition element, int index) {
19595    if (element == null) 
19596      return;
19597    Complex t;
19598    if (Utilities.noString(parentType))
19599      t = parent;
19600    else {
19601      t = parent.predicate("fhir:"+name,index > -1);
19602    }
19603    composeDomainResource(t, "ObservationDefinition", name, element, index);
19604    if (element.hasUrlElement()) {
19605      composeUri(t, "ObservationDefinition", "url", element.getUrlElement(), -1);
19606    }
19607    if (element.hasIdentifier()) {
19608      composeIdentifier(t, "ObservationDefinition", "identifier", element.getIdentifier(), -1);
19609    }
19610    if (element.hasVersionElement()) {
19611      composeString(t, "ObservationDefinition", "version", element.getVersionElement(), -1);
19612    }
19613    if (element.hasVersionAlgorithm()) {
19614      composeType(t, "ObservationDefinition", "versionAlgorithm", element.getVersionAlgorithm(), -1);
19615    }
19616    if (element.hasNameElement()) {
19617      composeString(t, "ObservationDefinition", "name", element.getNameElement(), -1);
19618    }
19619    if (element.hasTitleElement()) {
19620      composeString(t, "ObservationDefinition", "title", element.getTitleElement(), -1);
19621    }
19622    if (element.hasStatusElement()) {
19623      composeEnum(t, "ObservationDefinition", "status", element.getStatusElement(), -1);
19624    }
19625    if (element.hasExperimentalElement()) {
19626      composeBoolean(t, "ObservationDefinition", "experimental", element.getExperimentalElement(), -1);
19627    }
19628    if (element.hasDateElement()) {
19629      composeDateTime(t, "ObservationDefinition", "date", element.getDateElement(), -1);
19630    }
19631    if (element.hasPublisherElement()) {
19632      composeString(t, "ObservationDefinition", "publisher", element.getPublisherElement(), -1);
19633    }
19634    for (int i = 0; i < element.getContact().size(); i++) {
19635      composeContactDetail(t, "ObservationDefinition", "contact", element.getContact().get(i), i);
19636    }
19637    if (element.hasDescriptionElement()) {
19638      composeMarkdown(t, "ObservationDefinition", "description", element.getDescriptionElement(), -1);
19639    }
19640    for (int i = 0; i < element.getUseContext().size(); i++) {
19641      composeUsageContext(t, "ObservationDefinition", "useContext", element.getUseContext().get(i), i);
19642    }
19643    for (int i = 0; i < element.getJurisdiction().size(); i++) {
19644      composeCodeableConcept(t, "ObservationDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
19645    }
19646    if (element.hasPurposeElement()) {
19647      composeMarkdown(t, "ObservationDefinition", "purpose", element.getPurposeElement(), -1);
19648    }
19649    if (element.hasCopyrightElement()) {
19650      composeMarkdown(t, "ObservationDefinition", "copyright", element.getCopyrightElement(), -1);
19651    }
19652    if (element.hasCopyrightLabelElement()) {
19653      composeString(t, "ObservationDefinition", "copyrightLabel", element.getCopyrightLabelElement(), -1);
19654    }
19655    if (element.hasApprovalDateElement()) {
19656      composeDate(t, "ObservationDefinition", "approvalDate", element.getApprovalDateElement(), -1);
19657    }
19658    if (element.hasLastReviewDateElement()) {
19659      composeDate(t, "ObservationDefinition", "lastReviewDate", element.getLastReviewDateElement(), -1);
19660    }
19661    if (element.hasEffectivePeriod()) {
19662      composePeriod(t, "ObservationDefinition", "effectivePeriod", element.getEffectivePeriod(), -1);
19663    }
19664    for (int i = 0; i < element.getDerivedFromCanonical().size(); i++) {
19665      composeCanonical(t, "ObservationDefinition", "derivedFromCanonical", element.getDerivedFromCanonical().get(i), i);
19666    }
19667    for (int i = 0; i < element.getDerivedFromUri().size(); i++) {
19668      composeUri(t, "ObservationDefinition", "derivedFromUri", element.getDerivedFromUri().get(i), i);
19669    }
19670    for (int i = 0; i < element.getSubject().size(); i++) {
19671      composeCodeableConcept(t, "ObservationDefinition", "subject", element.getSubject().get(i), i);
19672    }
19673    if (element.hasPerformerType()) {
19674      composeCodeableConcept(t, "ObservationDefinition", "performerType", element.getPerformerType(), -1);
19675    }
19676    for (int i = 0; i < element.getCategory().size(); i++) {
19677      composeCodeableConcept(t, "ObservationDefinition", "category", element.getCategory().get(i), i);
19678    }
19679    if (element.hasCode()) {
19680      composeCodeableConcept(t, "ObservationDefinition", "code", element.getCode(), -1);
19681    }
19682    for (int i = 0; i < element.getPermittedDataType().size(); i++) {
19683      composeEnum(t, "ObservationDefinition", "permittedDataType", element.getPermittedDataType().get(i), i);
19684    }
19685    if (element.hasMultipleResultsAllowedElement()) {
19686      composeBoolean(t, "ObservationDefinition", "multipleResultsAllowed", element.getMultipleResultsAllowedElement(), -1);
19687    }
19688    if (element.hasBodySite()) {
19689      composeCodeableConcept(t, "ObservationDefinition", "bodySite", element.getBodySite(), -1);
19690    }
19691    if (element.hasMethod()) {
19692      composeCodeableConcept(t, "ObservationDefinition", "method", element.getMethod(), -1);
19693    }
19694    for (int i = 0; i < element.getSpecimen().size(); i++) {
19695      composeReference(t, "ObservationDefinition", "specimen", element.getSpecimen().get(i), i);
19696    }
19697    for (int i = 0; i < element.getDevice().size(); i++) {
19698      composeReference(t, "ObservationDefinition", "device", element.getDevice().get(i), i);
19699    }
19700    if (element.hasPreferredReportNameElement()) {
19701      composeString(t, "ObservationDefinition", "preferredReportName", element.getPreferredReportNameElement(), -1);
19702    }
19703    for (int i = 0; i < element.getPermittedUnit().size(); i++) {
19704      composeCoding(t, "ObservationDefinition", "permittedUnit", element.getPermittedUnit().get(i), i);
19705    }
19706    for (int i = 0; i < element.getQualifiedValue().size(); i++) {
19707      composeObservationDefinitionQualifiedValueComponent(t, "ObservationDefinition", "qualifiedValue", element.getQualifiedValue().get(i), i);
19708    }
19709    for (int i = 0; i < element.getHasMember().size(); i++) {
19710      composeReference(t, "ObservationDefinition", "hasMember", element.getHasMember().get(i), i);
19711    }
19712    for (int i = 0; i < element.getComponent().size(); i++) {
19713      composeObservationDefinitionComponentComponent(t, "ObservationDefinition", "component", element.getComponent().get(i), i);
19714    }
19715  }
19716
19717  protected void composeObservationDefinitionQualifiedValueComponent(Complex parent, String parentType, String name, ObservationDefinition.ObservationDefinitionQualifiedValueComponent element, int index) {
19718    if (element == null) 
19719      return;
19720    Complex t;
19721    if (Utilities.noString(parentType))
19722      t = parent;
19723    else {
19724      t = parent.predicate("fhir:"+name,index > -1);
19725    }
19726    composeBackboneElement(t, "qualifiedValue", name, element, index);
19727    if (element.hasContext()) {
19728      composeCodeableConcept(t, "ObservationDefinitionQualifiedValueComponent", "context", element.getContext(), -1);
19729    }
19730    for (int i = 0; i < element.getAppliesTo().size(); i++) {
19731      composeCodeableConcept(t, "ObservationDefinitionQualifiedValueComponent", "appliesTo", element.getAppliesTo().get(i), i);
19732    }
19733    if (element.hasGenderElement()) {
19734      composeEnum(t, "ObservationDefinitionQualifiedValueComponent", "gender", element.getGenderElement(), -1);
19735    }
19736    if (element.hasAge()) {
19737      composeRange(t, "ObservationDefinitionQualifiedValueComponent", "age", element.getAge(), -1);
19738    }
19739    if (element.hasGestationalAge()) {
19740      composeRange(t, "ObservationDefinitionQualifiedValueComponent", "gestationalAge", element.getGestationalAge(), -1);
19741    }
19742    if (element.hasConditionElement()) {
19743      composeString(t, "ObservationDefinitionQualifiedValueComponent", "condition", element.getConditionElement(), -1);
19744    }
19745    if (element.hasRangeCategoryElement()) {
19746      composeEnum(t, "ObservationDefinitionQualifiedValueComponent", "rangeCategory", element.getRangeCategoryElement(), -1);
19747    }
19748    if (element.hasRange()) {
19749      composeRange(t, "ObservationDefinitionQualifiedValueComponent", "range", element.getRange(), -1);
19750    }
19751    if (element.hasValidCodedValueSetElement()) {
19752      composeCanonical(t, "ObservationDefinitionQualifiedValueComponent", "validCodedValueSet", element.getValidCodedValueSetElement(), -1);
19753    }
19754    if (element.hasNormalCodedValueSetElement()) {
19755      composeCanonical(t, "ObservationDefinitionQualifiedValueComponent", "normalCodedValueSet", element.getNormalCodedValueSetElement(), -1);
19756    }
19757    if (element.hasAbnormalCodedValueSetElement()) {
19758      composeCanonical(t, "ObservationDefinitionQualifiedValueComponent", "abnormalCodedValueSet", element.getAbnormalCodedValueSetElement(), -1);
19759    }
19760    if (element.hasCriticalCodedValueSetElement()) {
19761      composeCanonical(t, "ObservationDefinitionQualifiedValueComponent", "criticalCodedValueSet", element.getCriticalCodedValueSetElement(), -1);
19762    }
19763  }
19764
19765  protected void composeObservationDefinitionComponentComponent(Complex parent, String parentType, String name, ObservationDefinition.ObservationDefinitionComponentComponent element, int index) {
19766    if (element == null) 
19767      return;
19768    Complex t;
19769    if (Utilities.noString(parentType))
19770      t = parent;
19771    else {
19772      t = parent.predicate("fhir:"+name,index > -1);
19773    }
19774    composeBackboneElement(t, "component", name, element, index);
19775    if (element.hasCode()) {
19776      composeCodeableConcept(t, "ObservationDefinitionComponentComponent", "code", element.getCode(), -1);
19777    }
19778    for (int i = 0; i < element.getPermittedDataType().size(); i++) {
19779      composeEnum(t, "ObservationDefinitionComponentComponent", "permittedDataType", element.getPermittedDataType().get(i), i);
19780    }
19781    for (int i = 0; i < element.getPermittedUnit().size(); i++) {
19782      composeCoding(t, "ObservationDefinitionComponentComponent", "permittedUnit", element.getPermittedUnit().get(i), i);
19783    }
19784    for (int i = 0; i < element.getQualifiedValue().size(); i++) {
19785      composeObservationDefinitionQualifiedValueComponent(t, "ObservationDefinitionComponentComponent", "qualifiedValue", element.getQualifiedValue().get(i), i);
19786    }
19787  }
19788
19789  protected void composeOperationDefinition(Complex parent, String parentType, String name, OperationDefinition element, int index) {
19790    if (element == null) 
19791      return;
19792    Complex t;
19793    if (Utilities.noString(parentType))
19794      t = parent;
19795    else {
19796      t = parent.predicate("fhir:"+name,index > -1);
19797    }
19798    composeCanonicalResource(t, "OperationDefinition", name, element, index);
19799    if (element.hasUrlElement()) {
19800      composeUri(t, "OperationDefinition", "url", element.getUrlElement(), -1);
19801    }
19802    for (int i = 0; i < element.getIdentifier().size(); i++) {
19803      composeIdentifier(t, "OperationDefinition", "identifier", element.getIdentifier().get(i), i);
19804    }
19805    if (element.hasVersionElement()) {
19806      composeString(t, "OperationDefinition", "version", element.getVersionElement(), -1);
19807    }
19808    if (element.hasVersionAlgorithm()) {
19809      composeType(t, "OperationDefinition", "versionAlgorithm", element.getVersionAlgorithm(), -1);
19810    }
19811    if (element.hasNameElement()) {
19812      composeString(t, "OperationDefinition", "name", element.getNameElement(), -1);
19813    }
19814    if (element.hasTitleElement()) {
19815      composeString(t, "OperationDefinition", "title", element.getTitleElement(), -1);
19816    }
19817    if (element.hasStatusElement()) {
19818      composeEnum(t, "OperationDefinition", "status", element.getStatusElement(), -1);
19819    }
19820    if (element.hasKindElement()) {
19821      composeEnum(t, "OperationDefinition", "kind", element.getKindElement(), -1);
19822    }
19823    if (element.hasExperimentalElement()) {
19824      composeBoolean(t, "OperationDefinition", "experimental", element.getExperimentalElement(), -1);
19825    }
19826    if (element.hasDateElement()) {
19827      composeDateTime(t, "OperationDefinition", "date", element.getDateElement(), -1);
19828    }
19829    if (element.hasPublisherElement()) {
19830      composeString(t, "OperationDefinition", "publisher", element.getPublisherElement(), -1);
19831    }
19832    for (int i = 0; i < element.getContact().size(); i++) {
19833      composeContactDetail(t, "OperationDefinition", "contact", element.getContact().get(i), i);
19834    }
19835    if (element.hasDescriptionElement()) {
19836      composeMarkdown(t, "OperationDefinition", "description", element.getDescriptionElement(), -1);
19837    }
19838    for (int i = 0; i < element.getUseContext().size(); i++) {
19839      composeUsageContext(t, "OperationDefinition", "useContext", element.getUseContext().get(i), i);
19840    }
19841    for (int i = 0; i < element.getJurisdiction().size(); i++) {
19842      composeCodeableConcept(t, "OperationDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
19843    }
19844    if (element.hasPurposeElement()) {
19845      composeMarkdown(t, "OperationDefinition", "purpose", element.getPurposeElement(), -1);
19846    }
19847    if (element.hasCopyrightElement()) {
19848      composeMarkdown(t, "OperationDefinition", "copyright", element.getCopyrightElement(), -1);
19849    }
19850    if (element.hasCopyrightLabelElement()) {
19851      composeString(t, "OperationDefinition", "copyrightLabel", element.getCopyrightLabelElement(), -1);
19852    }
19853    if (element.hasAffectsStateElement()) {
19854      composeBoolean(t, "OperationDefinition", "affectsState", element.getAffectsStateElement(), -1);
19855    }
19856    if (element.hasCodeElement()) {
19857      composeCode(t, "OperationDefinition", "code", element.getCodeElement(), -1);
19858    }
19859    if (element.hasCommentElement()) {
19860      composeMarkdown(t, "OperationDefinition", "comment", element.getCommentElement(), -1);
19861    }
19862    if (element.hasBaseElement()) {
19863      composeCanonical(t, "OperationDefinition", "base", element.getBaseElement(), -1);
19864    }
19865    for (int i = 0; i < element.getResource().size(); i++) {
19866      composeEnum(t, "OperationDefinition", "resource", element.getResource().get(i), i);
19867    }
19868    if (element.hasSystemElement()) {
19869      composeBoolean(t, "OperationDefinition", "system", element.getSystemElement(), -1);
19870    }
19871    if (element.hasTypeElement()) {
19872      composeBoolean(t, "OperationDefinition", "type", element.getTypeElement(), -1);
19873    }
19874    if (element.hasInstanceElement()) {
19875      composeBoolean(t, "OperationDefinition", "instance", element.getInstanceElement(), -1);
19876    }
19877    if (element.hasInputProfileElement()) {
19878      composeCanonical(t, "OperationDefinition", "inputProfile", element.getInputProfileElement(), -1);
19879    }
19880    if (element.hasOutputProfileElement()) {
19881      composeCanonical(t, "OperationDefinition", "outputProfile", element.getOutputProfileElement(), -1);
19882    }
19883    for (int i = 0; i < element.getParameter().size(); i++) {
19884      composeOperationDefinitionParameterComponent(t, "OperationDefinition", "parameter", element.getParameter().get(i), i);
19885    }
19886    for (int i = 0; i < element.getOverload().size(); i++) {
19887      composeOperationDefinitionOverloadComponent(t, "OperationDefinition", "overload", element.getOverload().get(i), i);
19888    }
19889  }
19890
19891  protected void composeOperationDefinitionParameterComponent(Complex parent, String parentType, String name, OperationDefinition.OperationDefinitionParameterComponent element, int index) {
19892    if (element == null) 
19893      return;
19894    Complex t;
19895    if (Utilities.noString(parentType))
19896      t = parent;
19897    else {
19898      t = parent.predicate("fhir:"+name,index > -1);
19899    }
19900    composeBackboneElement(t, "parameter", name, element, index);
19901    if (element.hasNameElement()) {
19902      composeCode(t, "OperationDefinitionParameterComponent", "name", element.getNameElement(), -1);
19903    }
19904    if (element.hasUseElement()) {
19905      composeEnum(t, "OperationDefinitionParameterComponent", "use", element.getUseElement(), -1);
19906    }
19907    for (int i = 0; i < element.getScope().size(); i++) {
19908      composeEnum(t, "OperationDefinitionParameterComponent", "scope", element.getScope().get(i), i);
19909    }
19910    if (element.hasMinElement()) {
19911      composeInteger(t, "OperationDefinitionParameterComponent", "min", element.getMinElement(), -1);
19912    }
19913    if (element.hasMaxElement()) {
19914      composeString(t, "OperationDefinitionParameterComponent", "max", element.getMaxElement(), -1);
19915    }
19916    if (element.hasDocumentationElement()) {
19917      composeMarkdown(t, "OperationDefinitionParameterComponent", "documentation", element.getDocumentationElement(), -1);
19918    }
19919    if (element.hasTypeElement()) {
19920      composeEnum(t, "OperationDefinitionParameterComponent", "type", element.getTypeElement(), -1);
19921    }
19922    for (int i = 0; i < element.getAllowedType().size(); i++) {
19923      composeEnum(t, "OperationDefinitionParameterComponent", "allowedType", element.getAllowedType().get(i), i);
19924    }
19925    for (int i = 0; i < element.getTargetProfile().size(); i++) {
19926      composeCanonical(t, "OperationDefinitionParameterComponent", "targetProfile", element.getTargetProfile().get(i), i);
19927    }
19928    if (element.hasSearchTypeElement()) {
19929      composeEnum(t, "OperationDefinitionParameterComponent", "searchType", element.getSearchTypeElement(), -1);
19930    }
19931    if (element.hasBinding()) {
19932      composeOperationDefinitionParameterBindingComponent(t, "OperationDefinitionParameterComponent", "binding", element.getBinding(), -1);
19933    }
19934    for (int i = 0; i < element.getReferencedFrom().size(); i++) {
19935      composeOperationDefinitionParameterReferencedFromComponent(t, "OperationDefinitionParameterComponent", "referencedFrom", element.getReferencedFrom().get(i), i);
19936    }
19937    for (int i = 0; i < element.getPart().size(); i++) {
19938      composeOperationDefinitionParameterComponent(t, "OperationDefinitionParameterComponent", "part", element.getPart().get(i), i);
19939    }
19940  }
19941
19942  protected void composeOperationDefinitionParameterBindingComponent(Complex parent, String parentType, String name, OperationDefinition.OperationDefinitionParameterBindingComponent element, int index) {
19943    if (element == null) 
19944      return;
19945    Complex t;
19946    if (Utilities.noString(parentType))
19947      t = parent;
19948    else {
19949      t = parent.predicate("fhir:"+name,index > -1);
19950    }
19951    composeBackboneElement(t, "binding", name, element, index);
19952    if (element.hasStrengthElement()) {
19953      composeEnum(t, "OperationDefinitionParameterBindingComponent", "strength", element.getStrengthElement(), -1);
19954    }
19955    if (element.hasValueSetElement()) {
19956      composeCanonical(t, "OperationDefinitionParameterBindingComponent", "valueSet", element.getValueSetElement(), -1);
19957    }
19958  }
19959
19960  protected void composeOperationDefinitionParameterReferencedFromComponent(Complex parent, String parentType, String name, OperationDefinition.OperationDefinitionParameterReferencedFromComponent element, int index) {
19961    if (element == null) 
19962      return;
19963    Complex t;
19964    if (Utilities.noString(parentType))
19965      t = parent;
19966    else {
19967      t = parent.predicate("fhir:"+name,index > -1);
19968    }
19969    composeBackboneElement(t, "referencedFrom", name, element, index);
19970    if (element.hasSourceElement()) {
19971      composeString(t, "OperationDefinitionParameterReferencedFromComponent", "source", element.getSourceElement(), -1);
19972    }
19973    if (element.hasSourceIdElement()) {
19974      composeString(t, "OperationDefinitionParameterReferencedFromComponent", "sourceId", element.getSourceIdElement(), -1);
19975    }
19976  }
19977
19978  protected void composeOperationDefinitionOverloadComponent(Complex parent, String parentType, String name, OperationDefinition.OperationDefinitionOverloadComponent element, int index) {
19979    if (element == null) 
19980      return;
19981    Complex t;
19982    if (Utilities.noString(parentType))
19983      t = parent;
19984    else {
19985      t = parent.predicate("fhir:"+name,index > -1);
19986    }
19987    composeBackboneElement(t, "overload", name, element, index);
19988    for (int i = 0; i < element.getParameterName().size(); i++) {
19989      composeString(t, "OperationDefinitionOverloadComponent", "parameterName", element.getParameterName().get(i), i);
19990    }
19991    if (element.hasCommentElement()) {
19992      composeString(t, "OperationDefinitionOverloadComponent", "comment", element.getCommentElement(), -1);
19993    }
19994  }
19995
19996  protected void composeOperationOutcome(Complex parent, String parentType, String name, OperationOutcome element, int index) {
19997    if (element == null) 
19998      return;
19999    Complex t;
20000    if (Utilities.noString(parentType))
20001      t = parent;
20002    else {
20003      t = parent.predicate("fhir:"+name,index > -1);
20004    }
20005    composeDomainResource(t, "OperationOutcome", name, element, index);
20006    for (int i = 0; i < element.getIssue().size(); i++) {
20007      composeOperationOutcomeIssueComponent(t, "OperationOutcome", "issue", element.getIssue().get(i), i);
20008    }
20009  }
20010
20011  protected void composeOperationOutcomeIssueComponent(Complex parent, String parentType, String name, OperationOutcome.OperationOutcomeIssueComponent element, int index) {
20012    if (element == null) 
20013      return;
20014    Complex t;
20015    if (Utilities.noString(parentType))
20016      t = parent;
20017    else {
20018      t = parent.predicate("fhir:"+name,index > -1);
20019    }
20020    composeBackboneElement(t, "issue", name, element, index);
20021    if (element.hasSeverityElement()) {
20022      composeEnum(t, "OperationOutcomeIssueComponent", "severity", element.getSeverityElement(), -1);
20023    }
20024    if (element.hasCodeElement()) {
20025      composeEnum(t, "OperationOutcomeIssueComponent", "code", element.getCodeElement(), -1);
20026    }
20027    if (element.hasDetails()) {
20028      composeCodeableConcept(t, "OperationOutcomeIssueComponent", "details", element.getDetails(), -1);
20029    }
20030    if (element.hasDiagnosticsElement()) {
20031      composeString(t, "OperationOutcomeIssueComponent", "diagnostics", element.getDiagnosticsElement(), -1);
20032    }
20033    for (int i = 0; i < element.getLocation().size(); i++) {
20034      composeString(t, "OperationOutcomeIssueComponent", "location", element.getLocation().get(i), i);
20035    }
20036    for (int i = 0; i < element.getExpression().size(); i++) {
20037      composeString(t, "OperationOutcomeIssueComponent", "expression", element.getExpression().get(i), i);
20038    }
20039  }
20040
20041  protected void composeOrganization(Complex parent, String parentType, String name, Organization element, int index) {
20042    if (element == null) 
20043      return;
20044    Complex t;
20045    if (Utilities.noString(parentType))
20046      t = parent;
20047    else {
20048      t = parent.predicate("fhir:"+name,index > -1);
20049    }
20050    composeDomainResource(t, "Organization", name, element, index);
20051    for (int i = 0; i < element.getIdentifier().size(); i++) {
20052      composeIdentifier(t, "Organization", "identifier", element.getIdentifier().get(i), i);
20053    }
20054    if (element.hasActiveElement()) {
20055      composeBoolean(t, "Organization", "active", element.getActiveElement(), -1);
20056    }
20057    for (int i = 0; i < element.getType().size(); i++) {
20058      composeCodeableConcept(t, "Organization", "type", element.getType().get(i), i);
20059    }
20060    if (element.hasNameElement()) {
20061      composeString(t, "Organization", "name", element.getNameElement(), -1);
20062    }
20063    for (int i = 0; i < element.getAlias().size(); i++) {
20064      composeString(t, "Organization", "alias", element.getAlias().get(i), i);
20065    }
20066    if (element.hasDescriptionElement()) {
20067      composeMarkdown(t, "Organization", "description", element.getDescriptionElement(), -1);
20068    }
20069    for (int i = 0; i < element.getContact().size(); i++) {
20070      composeExtendedContactDetail(t, "Organization", "contact", element.getContact().get(i), i);
20071    }
20072    if (element.hasPartOf()) {
20073      composeReference(t, "Organization", "partOf", element.getPartOf(), -1);
20074    }
20075    for (int i = 0; i < element.getEndpoint().size(); i++) {
20076      composeReference(t, "Organization", "endpoint", element.getEndpoint().get(i), i);
20077    }
20078    for (int i = 0; i < element.getQualification().size(); i++) {
20079      composeOrganizationQualificationComponent(t, "Organization", "qualification", element.getQualification().get(i), i);
20080    }
20081  }
20082
20083  protected void composeOrganizationQualificationComponent(Complex parent, String parentType, String name, Organization.OrganizationQualificationComponent element, int index) {
20084    if (element == null) 
20085      return;
20086    Complex t;
20087    if (Utilities.noString(parentType))
20088      t = parent;
20089    else {
20090      t = parent.predicate("fhir:"+name,index > -1);
20091    }
20092    composeBackboneElement(t, "qualification", name, element, index);
20093    for (int i = 0; i < element.getIdentifier().size(); i++) {
20094      composeIdentifier(t, "OrganizationQualificationComponent", "identifier", element.getIdentifier().get(i), i);
20095    }
20096    if (element.hasCode()) {
20097      composeCodeableConcept(t, "OrganizationQualificationComponent", "code", element.getCode(), -1);
20098    }
20099    if (element.hasPeriod()) {
20100      composePeriod(t, "OrganizationQualificationComponent", "period", element.getPeriod(), -1);
20101    }
20102    if (element.hasIssuer()) {
20103      composeReference(t, "OrganizationQualificationComponent", "issuer", element.getIssuer(), -1);
20104    }
20105  }
20106
20107  protected void composeOrganizationAffiliation(Complex parent, String parentType, String name, OrganizationAffiliation element, int index) {
20108    if (element == null) 
20109      return;
20110    Complex t;
20111    if (Utilities.noString(parentType))
20112      t = parent;
20113    else {
20114      t = parent.predicate("fhir:"+name,index > -1);
20115    }
20116    composeDomainResource(t, "OrganizationAffiliation", name, element, index);
20117    for (int i = 0; i < element.getIdentifier().size(); i++) {
20118      composeIdentifier(t, "OrganizationAffiliation", "identifier", element.getIdentifier().get(i), i);
20119    }
20120    if (element.hasActiveElement()) {
20121      composeBoolean(t, "OrganizationAffiliation", "active", element.getActiveElement(), -1);
20122    }
20123    if (element.hasPeriod()) {
20124      composePeriod(t, "OrganizationAffiliation", "period", element.getPeriod(), -1);
20125    }
20126    if (element.hasOrganization()) {
20127      composeReference(t, "OrganizationAffiliation", "organization", element.getOrganization(), -1);
20128    }
20129    if (element.hasParticipatingOrganization()) {
20130      composeReference(t, "OrganizationAffiliation", "participatingOrganization", element.getParticipatingOrganization(), -1);
20131    }
20132    for (int i = 0; i < element.getNetwork().size(); i++) {
20133      composeReference(t, "OrganizationAffiliation", "network", element.getNetwork().get(i), i);
20134    }
20135    for (int i = 0; i < element.getCode().size(); i++) {
20136      composeCodeableConcept(t, "OrganizationAffiliation", "code", element.getCode().get(i), i);
20137    }
20138    for (int i = 0; i < element.getSpecialty().size(); i++) {
20139      composeCodeableConcept(t, "OrganizationAffiliation", "specialty", element.getSpecialty().get(i), i);
20140    }
20141    for (int i = 0; i < element.getLocation().size(); i++) {
20142      composeReference(t, "OrganizationAffiliation", "location", element.getLocation().get(i), i);
20143    }
20144    for (int i = 0; i < element.getHealthcareService().size(); i++) {
20145      composeReference(t, "OrganizationAffiliation", "healthcareService", element.getHealthcareService().get(i), i);
20146    }
20147    for (int i = 0; i < element.getContact().size(); i++) {
20148      composeExtendedContactDetail(t, "OrganizationAffiliation", "contact", element.getContact().get(i), i);
20149    }
20150    for (int i = 0; i < element.getEndpoint().size(); i++) {
20151      composeReference(t, "OrganizationAffiliation", "endpoint", element.getEndpoint().get(i), i);
20152    }
20153  }
20154
20155  protected void composePackagedProductDefinition(Complex parent, String parentType, String name, PackagedProductDefinition element, int index) {
20156    if (element == null) 
20157      return;
20158    Complex t;
20159    if (Utilities.noString(parentType))
20160      t = parent;
20161    else {
20162      t = parent.predicate("fhir:"+name,index > -1);
20163    }
20164    composeDomainResource(t, "PackagedProductDefinition", name, element, index);
20165    for (int i = 0; i < element.getIdentifier().size(); i++) {
20166      composeIdentifier(t, "PackagedProductDefinition", "identifier", element.getIdentifier().get(i), i);
20167    }
20168    if (element.hasNameElement()) {
20169      composeString(t, "PackagedProductDefinition", "name", element.getNameElement(), -1);
20170    }
20171    if (element.hasType()) {
20172      composeCodeableConcept(t, "PackagedProductDefinition", "type", element.getType(), -1);
20173    }
20174    for (int i = 0; i < element.getPackageFor().size(); i++) {
20175      composeReference(t, "PackagedProductDefinition", "packageFor", element.getPackageFor().get(i), i);
20176    }
20177    if (element.hasStatus()) {
20178      composeCodeableConcept(t, "PackagedProductDefinition", "status", element.getStatus(), -1);
20179    }
20180    if (element.hasStatusDateElement()) {
20181      composeDateTime(t, "PackagedProductDefinition", "statusDate", element.getStatusDateElement(), -1);
20182    }
20183    for (int i = 0; i < element.getContainedItemQuantity().size(); i++) {
20184      composeQuantity(t, "PackagedProductDefinition", "containedItemQuantity", element.getContainedItemQuantity().get(i), i);
20185    }
20186    if (element.hasDescriptionElement()) {
20187      composeMarkdown(t, "PackagedProductDefinition", "description", element.getDescriptionElement(), -1);
20188    }
20189    for (int i = 0; i < element.getLegalStatusOfSupply().size(); i++) {
20190      composePackagedProductDefinitionLegalStatusOfSupplyComponent(t, "PackagedProductDefinition", "legalStatusOfSupply", element.getLegalStatusOfSupply().get(i), i);
20191    }
20192    for (int i = 0; i < element.getMarketingStatus().size(); i++) {
20193      composeMarketingStatus(t, "PackagedProductDefinition", "marketingStatus", element.getMarketingStatus().get(i), i);
20194    }
20195    if (element.hasCopackagedIndicatorElement()) {
20196      composeBoolean(t, "PackagedProductDefinition", "copackagedIndicator", element.getCopackagedIndicatorElement(), -1);
20197    }
20198    for (int i = 0; i < element.getManufacturer().size(); i++) {
20199      composeReference(t, "PackagedProductDefinition", "manufacturer", element.getManufacturer().get(i), i);
20200    }
20201    for (int i = 0; i < element.getAttachedDocument().size(); i++) {
20202      composeReference(t, "PackagedProductDefinition", "attachedDocument", element.getAttachedDocument().get(i), i);
20203    }
20204    if (element.hasPackaging()) {
20205      composePackagedProductDefinitionPackagingComponent(t, "PackagedProductDefinition", "packaging", element.getPackaging(), -1);
20206    }
20207    for (int i = 0; i < element.getCharacteristic().size(); i++) {
20208      composePackagedProductDefinitionPackagingPropertyComponent(t, "PackagedProductDefinition", "characteristic", element.getCharacteristic().get(i), i);
20209    }
20210  }
20211
20212  protected void composePackagedProductDefinitionLegalStatusOfSupplyComponent(Complex parent, String parentType, String name, PackagedProductDefinition.PackagedProductDefinitionLegalStatusOfSupplyComponent element, int index) {
20213    if (element == null) 
20214      return;
20215    Complex t;
20216    if (Utilities.noString(parentType))
20217      t = parent;
20218    else {
20219      t = parent.predicate("fhir:"+name,index > -1);
20220    }
20221    composeBackboneElement(t, "legalStatusOfSupply", name, element, index);
20222    if (element.hasCode()) {
20223      composeCodeableConcept(t, "PackagedProductDefinitionLegalStatusOfSupplyComponent", "code", element.getCode(), -1);
20224    }
20225    if (element.hasJurisdiction()) {
20226      composeCodeableConcept(t, "PackagedProductDefinitionLegalStatusOfSupplyComponent", "jurisdiction", element.getJurisdiction(), -1);
20227    }
20228  }
20229
20230  protected void composePackagedProductDefinitionPackagingComponent(Complex parent, String parentType, String name, PackagedProductDefinition.PackagedProductDefinitionPackagingComponent element, int index) {
20231    if (element == null) 
20232      return;
20233    Complex t;
20234    if (Utilities.noString(parentType))
20235      t = parent;
20236    else {
20237      t = parent.predicate("fhir:"+name,index > -1);
20238    }
20239    composeBackboneElement(t, "packaging", name, element, index);
20240    for (int i = 0; i < element.getIdentifier().size(); i++) {
20241      composeIdentifier(t, "PackagedProductDefinitionPackagingComponent", "identifier", element.getIdentifier().get(i), i);
20242    }
20243    if (element.hasType()) {
20244      composeCodeableConcept(t, "PackagedProductDefinitionPackagingComponent", "type", element.getType(), -1);
20245    }
20246    if (element.hasComponentPartElement()) {
20247      composeBoolean(t, "PackagedProductDefinitionPackagingComponent", "componentPart", element.getComponentPartElement(), -1);
20248    }
20249    if (element.hasQuantityElement()) {
20250      composeInteger(t, "PackagedProductDefinitionPackagingComponent", "quantity", element.getQuantityElement(), -1);
20251    }
20252    for (int i = 0; i < element.getMaterial().size(); i++) {
20253      composeCodeableConcept(t, "PackagedProductDefinitionPackagingComponent", "material", element.getMaterial().get(i), i);
20254    }
20255    for (int i = 0; i < element.getAlternateMaterial().size(); i++) {
20256      composeCodeableConcept(t, "PackagedProductDefinitionPackagingComponent", "alternateMaterial", element.getAlternateMaterial().get(i), i);
20257    }
20258    for (int i = 0; i < element.getShelfLifeStorage().size(); i++) {
20259      composeProductShelfLife(t, "PackagedProductDefinitionPackagingComponent", "shelfLifeStorage", element.getShelfLifeStorage().get(i), i);
20260    }
20261    for (int i = 0; i < element.getManufacturer().size(); i++) {
20262      composeReference(t, "PackagedProductDefinitionPackagingComponent", "manufacturer", element.getManufacturer().get(i), i);
20263    }
20264    for (int i = 0; i < element.getProperty().size(); i++) {
20265      composePackagedProductDefinitionPackagingPropertyComponent(t, "PackagedProductDefinitionPackagingComponent", "property", element.getProperty().get(i), i);
20266    }
20267    for (int i = 0; i < element.getContainedItem().size(); i++) {
20268      composePackagedProductDefinitionPackagingContainedItemComponent(t, "PackagedProductDefinitionPackagingComponent", "containedItem", element.getContainedItem().get(i), i);
20269    }
20270    for (int i = 0; i < element.getPackaging().size(); i++) {
20271      composePackagedProductDefinitionPackagingComponent(t, "PackagedProductDefinitionPackagingComponent", "packaging", element.getPackaging().get(i), i);
20272    }
20273  }
20274
20275  protected void composePackagedProductDefinitionPackagingPropertyComponent(Complex parent, String parentType, String name, PackagedProductDefinition.PackagedProductDefinitionPackagingPropertyComponent element, int index) {
20276    if (element == null) 
20277      return;
20278    Complex t;
20279    if (Utilities.noString(parentType))
20280      t = parent;
20281    else {
20282      t = parent.predicate("fhir:"+name,index > -1);
20283    }
20284    composeBackboneElement(t, "property", name, element, index);
20285    if (element.hasType()) {
20286      composeCodeableConcept(t, "PackagedProductDefinitionPackagingPropertyComponent", "type", element.getType(), -1);
20287    }
20288    if (element.hasValue()) {
20289      composeType(t, "PackagedProductDefinitionPackagingPropertyComponent", "value", element.getValue(), -1);
20290    }
20291  }
20292
20293  protected void composePackagedProductDefinitionPackagingContainedItemComponent(Complex parent, String parentType, String name, PackagedProductDefinition.PackagedProductDefinitionPackagingContainedItemComponent element, int index) {
20294    if (element == null) 
20295      return;
20296    Complex t;
20297    if (Utilities.noString(parentType))
20298      t = parent;
20299    else {
20300      t = parent.predicate("fhir:"+name,index > -1);
20301    }
20302    composeBackboneElement(t, "containedItem", name, element, index);
20303    if (element.hasItem()) {
20304      composeCodeableReference(t, "PackagedProductDefinitionPackagingContainedItemComponent", "item", element.getItem(), -1);
20305    }
20306    if (element.hasAmount()) {
20307      composeQuantity(t, "PackagedProductDefinitionPackagingContainedItemComponent", "amount", element.getAmount(), -1);
20308    }
20309  }
20310
20311  protected void composeParameters(Complex parent, String parentType, String name, Parameters element, int index) {
20312    if (element == null) 
20313      return;
20314    Complex t;
20315    if (Utilities.noString(parentType))
20316      t = parent;
20317    else {
20318      t = parent.predicate("fhir:"+name,index > -1);
20319    }
20320    composeResource(t, "Parameters", name, element, index);
20321    for (int i = 0; i < element.getParameter().size(); i++) {
20322      composeParametersParameterComponent(t, "Parameters", "parameter", element.getParameter().get(i), i);
20323    }
20324  }
20325
20326  protected void composeParametersParameterComponent(Complex parent, String parentType, String name, Parameters.ParametersParameterComponent element, int index) {
20327    if (element == null) 
20328      return;
20329    Complex t;
20330    if (Utilities.noString(parentType))
20331      t = parent;
20332    else {
20333      t = parent.predicate("fhir:"+name,index > -1);
20334    }
20335    composeBackboneElement(t, "parameter", name, element, index);
20336    if (element.hasNameElement()) {
20337      composeString(t, "ParametersParameterComponent", "name", element.getNameElement(), -1);
20338    }
20339    if (element.hasValue()) {
20340      composeType(t, "ParametersParameterComponent", "value", element.getValue(), -1);
20341    }
20342    if (element.hasResource()) {
20343      composeResource(t, "ParametersParameterComponent", "resource", element.getResource(), -1);
20344    }
20345    for (int i = 0; i < element.getPart().size(); i++) {
20346      composeParametersParameterComponent(t, "ParametersParameterComponent", "part", element.getPart().get(i), i);
20347    }
20348  }
20349
20350  protected void composePatient(Complex parent, String parentType, String name, Patient element, int index) {
20351    if (element == null) 
20352      return;
20353    Complex t;
20354    if (Utilities.noString(parentType))
20355      t = parent;
20356    else {
20357      t = parent.predicate("fhir:"+name,index > -1);
20358    }
20359    composeDomainResource(t, "Patient", name, element, index);
20360    for (int i = 0; i < element.getIdentifier().size(); i++) {
20361      composeIdentifier(t, "Patient", "identifier", element.getIdentifier().get(i), i);
20362    }
20363    if (element.hasActiveElement()) {
20364      composeBoolean(t, "Patient", "active", element.getActiveElement(), -1);
20365    }
20366    for (int i = 0; i < element.getName().size(); i++) {
20367      composeHumanName(t, "Patient", "name", element.getName().get(i), i);
20368    }
20369    for (int i = 0; i < element.getTelecom().size(); i++) {
20370      composeContactPoint(t, "Patient", "telecom", element.getTelecom().get(i), i);
20371    }
20372    if (element.hasGenderElement()) {
20373      composeEnum(t, "Patient", "gender", element.getGenderElement(), -1);
20374    }
20375    if (element.hasBirthDateElement()) {
20376      composeDate(t, "Patient", "birthDate", element.getBirthDateElement(), -1);
20377    }
20378    if (element.hasDeceased()) {
20379      composeType(t, "Patient", "deceased", element.getDeceased(), -1);
20380    }
20381    for (int i = 0; i < element.getAddress().size(); i++) {
20382      composeAddress(t, "Patient", "address", element.getAddress().get(i), i);
20383    }
20384    if (element.hasMaritalStatus()) {
20385      composeCodeableConcept(t, "Patient", "maritalStatus", element.getMaritalStatus(), -1);
20386    }
20387    if (element.hasMultipleBirth()) {
20388      composeType(t, "Patient", "multipleBirth", element.getMultipleBirth(), -1);
20389    }
20390    for (int i = 0; i < element.getPhoto().size(); i++) {
20391      composeAttachment(t, "Patient", "photo", element.getPhoto().get(i), i);
20392    }
20393    for (int i = 0; i < element.getContact().size(); i++) {
20394      composePatientContactComponent(t, "Patient", "contact", element.getContact().get(i), i);
20395    }
20396    for (int i = 0; i < element.getCommunication().size(); i++) {
20397      composePatientCommunicationComponent(t, "Patient", "communication", element.getCommunication().get(i), i);
20398    }
20399    for (int i = 0; i < element.getGeneralPractitioner().size(); i++) {
20400      composeReference(t, "Patient", "generalPractitioner", element.getGeneralPractitioner().get(i), i);
20401    }
20402    if (element.hasManagingOrganization()) {
20403      composeReference(t, "Patient", "managingOrganization", element.getManagingOrganization(), -1);
20404    }
20405    for (int i = 0; i < element.getLink().size(); i++) {
20406      composePatientLinkComponent(t, "Patient", "link", element.getLink().get(i), i);
20407    }
20408  }
20409
20410  protected void composePatientContactComponent(Complex parent, String parentType, String name, Patient.ContactComponent element, int index) {
20411    if (element == null) 
20412      return;
20413    Complex t;
20414    if (Utilities.noString(parentType))
20415      t = parent;
20416    else {
20417      t = parent.predicate("fhir:"+name,index > -1);
20418    }
20419    composeBackboneElement(t, "contact", name, element, index);
20420    for (int i = 0; i < element.getRelationship().size(); i++) {
20421      composeCodeableConcept(t, "ContactComponent", "relationship", element.getRelationship().get(i), i);
20422    }
20423    if (element.hasName()) {
20424      composeHumanName(t, "ContactComponent", "name", element.getName(), -1);
20425    }
20426    for (int i = 0; i < element.getTelecom().size(); i++) {
20427      composeContactPoint(t, "ContactComponent", "telecom", element.getTelecom().get(i), i);
20428    }
20429    if (element.hasAddress()) {
20430      composeAddress(t, "ContactComponent", "address", element.getAddress(), -1);
20431    }
20432    if (element.hasGenderElement()) {
20433      composeEnum(t, "ContactComponent", "gender", element.getGenderElement(), -1);
20434    }
20435    if (element.hasOrganization()) {
20436      composeReference(t, "ContactComponent", "organization", element.getOrganization(), -1);
20437    }
20438    if (element.hasPeriod()) {
20439      composePeriod(t, "ContactComponent", "period", element.getPeriod(), -1);
20440    }
20441  }
20442
20443  protected void composePatientCommunicationComponent(Complex parent, String parentType, String name, Patient.PatientCommunicationComponent element, int index) {
20444    if (element == null) 
20445      return;
20446    Complex t;
20447    if (Utilities.noString(parentType))
20448      t = parent;
20449    else {
20450      t = parent.predicate("fhir:"+name,index > -1);
20451    }
20452    composeBackboneElement(t, "communication", name, element, index);
20453    if (element.hasLanguage()) {
20454      composeCodeableConcept(t, "PatientCommunicationComponent", "language", element.getLanguage(), -1);
20455    }
20456    if (element.hasPreferredElement()) {
20457      composeBoolean(t, "PatientCommunicationComponent", "preferred", element.getPreferredElement(), -1);
20458    }
20459  }
20460
20461  protected void composePatientLinkComponent(Complex parent, String parentType, String name, Patient.PatientLinkComponent element, int index) {
20462    if (element == null) 
20463      return;
20464    Complex t;
20465    if (Utilities.noString(parentType))
20466      t = parent;
20467    else {
20468      t = parent.predicate("fhir:"+name,index > -1);
20469    }
20470    composeBackboneElement(t, "link", name, element, index);
20471    if (element.hasOther()) {
20472      composeReference(t, "PatientLinkComponent", "other", element.getOther(), -1);
20473    }
20474    if (element.hasTypeElement()) {
20475      composeEnum(t, "PatientLinkComponent", "type", element.getTypeElement(), -1);
20476    }
20477  }
20478
20479  protected void composePaymentNotice(Complex parent, String parentType, String name, PaymentNotice element, int index) {
20480    if (element == null) 
20481      return;
20482    Complex t;
20483    if (Utilities.noString(parentType))
20484      t = parent;
20485    else {
20486      t = parent.predicate("fhir:"+name,index > -1);
20487    }
20488    composeDomainResource(t, "PaymentNotice", name, element, index);
20489    for (int i = 0; i < element.getIdentifier().size(); i++) {
20490      composeIdentifier(t, "PaymentNotice", "identifier", element.getIdentifier().get(i), i);
20491    }
20492    if (element.hasStatusElement()) {
20493      composeEnum(t, "PaymentNotice", "status", element.getStatusElement(), -1);
20494    }
20495    if (element.hasRequest()) {
20496      composeReference(t, "PaymentNotice", "request", element.getRequest(), -1);
20497    }
20498    if (element.hasResponse()) {
20499      composeReference(t, "PaymentNotice", "response", element.getResponse(), -1);
20500    }
20501    if (element.hasCreatedElement()) {
20502      composeDateTime(t, "PaymentNotice", "created", element.getCreatedElement(), -1);
20503    }
20504    if (element.hasReporter()) {
20505      composeReference(t, "PaymentNotice", "reporter", element.getReporter(), -1);
20506    }
20507    if (element.hasPayment()) {
20508      composeReference(t, "PaymentNotice", "payment", element.getPayment(), -1);
20509    }
20510    if (element.hasPaymentDateElement()) {
20511      composeDate(t, "PaymentNotice", "paymentDate", element.getPaymentDateElement(), -1);
20512    }
20513    if (element.hasPayee()) {
20514      composeReference(t, "PaymentNotice", "payee", element.getPayee(), -1);
20515    }
20516    if (element.hasRecipient()) {
20517      composeReference(t, "PaymentNotice", "recipient", element.getRecipient(), -1);
20518    }
20519    if (element.hasAmount()) {
20520      composeMoney(t, "PaymentNotice", "amount", element.getAmount(), -1);
20521    }
20522    if (element.hasPaymentStatus()) {
20523      composeCodeableConcept(t, "PaymentNotice", "paymentStatus", element.getPaymentStatus(), -1);
20524    }
20525  }
20526
20527  protected void composePaymentReconciliation(Complex parent, String parentType, String name, PaymentReconciliation element, int index) {
20528    if (element == null) 
20529      return;
20530    Complex t;
20531    if (Utilities.noString(parentType))
20532      t = parent;
20533    else {
20534      t = parent.predicate("fhir:"+name,index > -1);
20535    }
20536    composeDomainResource(t, "PaymentReconciliation", name, element, index);
20537    for (int i = 0; i < element.getIdentifier().size(); i++) {
20538      composeIdentifier(t, "PaymentReconciliation", "identifier", element.getIdentifier().get(i), i);
20539    }
20540    if (element.hasType()) {
20541      composeCodeableConcept(t, "PaymentReconciliation", "type", element.getType(), -1);
20542    }
20543    if (element.hasStatusElement()) {
20544      composeEnum(t, "PaymentReconciliation", "status", element.getStatusElement(), -1);
20545    }
20546    if (element.hasKind()) {
20547      composeCodeableConcept(t, "PaymentReconciliation", "kind", element.getKind(), -1);
20548    }
20549    if (element.hasPeriod()) {
20550      composePeriod(t, "PaymentReconciliation", "period", element.getPeriod(), -1);
20551    }
20552    if (element.hasCreatedElement()) {
20553      composeDateTime(t, "PaymentReconciliation", "created", element.getCreatedElement(), -1);
20554    }
20555    if (element.hasEnterer()) {
20556      composeReference(t, "PaymentReconciliation", "enterer", element.getEnterer(), -1);
20557    }
20558    if (element.hasIssuerType()) {
20559      composeCodeableConcept(t, "PaymentReconciliation", "issuerType", element.getIssuerType(), -1);
20560    }
20561    if (element.hasPaymentIssuer()) {
20562      composeReference(t, "PaymentReconciliation", "paymentIssuer", element.getPaymentIssuer(), -1);
20563    }
20564    if (element.hasRequest()) {
20565      composeReference(t, "PaymentReconciliation", "request", element.getRequest(), -1);
20566    }
20567    if (element.hasRequestor()) {
20568      composeReference(t, "PaymentReconciliation", "requestor", element.getRequestor(), -1);
20569    }
20570    if (element.hasOutcomeElement()) {
20571      composeEnum(t, "PaymentReconciliation", "outcome", element.getOutcomeElement(), -1);
20572    }
20573    if (element.hasDispositionElement()) {
20574      composeString(t, "PaymentReconciliation", "disposition", element.getDispositionElement(), -1);
20575    }
20576    if (element.hasDateElement()) {
20577      composeDate(t, "PaymentReconciliation", "date", element.getDateElement(), -1);
20578    }
20579    if (element.hasLocation()) {
20580      composeReference(t, "PaymentReconciliation", "location", element.getLocation(), -1);
20581    }
20582    if (element.hasMethod()) {
20583      composeCodeableConcept(t, "PaymentReconciliation", "method", element.getMethod(), -1);
20584    }
20585    if (element.hasCardBrandElement()) {
20586      composeString(t, "PaymentReconciliation", "cardBrand", element.getCardBrandElement(), -1);
20587    }
20588    if (element.hasAccountNumberElement()) {
20589      composeString(t, "PaymentReconciliation", "accountNumber", element.getAccountNumberElement(), -1);
20590    }
20591    if (element.hasExpirationDateElement()) {
20592      composeDate(t, "PaymentReconciliation", "expirationDate", element.getExpirationDateElement(), -1);
20593    }
20594    if (element.hasProcessorElement()) {
20595      composeString(t, "PaymentReconciliation", "processor", element.getProcessorElement(), -1);
20596    }
20597    if (element.hasReferenceNumberElement()) {
20598      composeString(t, "PaymentReconciliation", "referenceNumber", element.getReferenceNumberElement(), -1);
20599    }
20600    if (element.hasAuthorizationElement()) {
20601      composeString(t, "PaymentReconciliation", "authorization", element.getAuthorizationElement(), -1);
20602    }
20603    if (element.hasTenderedAmount()) {
20604      composeMoney(t, "PaymentReconciliation", "tenderedAmount", element.getTenderedAmount(), -1);
20605    }
20606    if (element.hasReturnedAmount()) {
20607      composeMoney(t, "PaymentReconciliation", "returnedAmount", element.getReturnedAmount(), -1);
20608    }
20609    if (element.hasAmount()) {
20610      composeMoney(t, "PaymentReconciliation", "amount", element.getAmount(), -1);
20611    }
20612    if (element.hasPaymentIdentifier()) {
20613      composeIdentifier(t, "PaymentReconciliation", "paymentIdentifier", element.getPaymentIdentifier(), -1);
20614    }
20615    for (int i = 0; i < element.getAllocation().size(); i++) {
20616      composePaymentReconciliationAllocationComponent(t, "PaymentReconciliation", "allocation", element.getAllocation().get(i), i);
20617    }
20618    if (element.hasFormCode()) {
20619      composeCodeableConcept(t, "PaymentReconciliation", "formCode", element.getFormCode(), -1);
20620    }
20621    for (int i = 0; i < element.getProcessNote().size(); i++) {
20622      composePaymentReconciliationNotesComponent(t, "PaymentReconciliation", "processNote", element.getProcessNote().get(i), i);
20623    }
20624  }
20625
20626  protected void composePaymentReconciliationAllocationComponent(Complex parent, String parentType, String name, PaymentReconciliation.PaymentReconciliationAllocationComponent element, int index) {
20627    if (element == null) 
20628      return;
20629    Complex t;
20630    if (Utilities.noString(parentType))
20631      t = parent;
20632    else {
20633      t = parent.predicate("fhir:"+name,index > -1);
20634    }
20635    composeBackboneElement(t, "allocation", name, element, index);
20636    if (element.hasIdentifier()) {
20637      composeIdentifier(t, "PaymentReconciliationAllocationComponent", "identifier", element.getIdentifier(), -1);
20638    }
20639    if (element.hasPredecessor()) {
20640      composeIdentifier(t, "PaymentReconciliationAllocationComponent", "predecessor", element.getPredecessor(), -1);
20641    }
20642    if (element.hasTarget()) {
20643      composeReference(t, "PaymentReconciliationAllocationComponent", "target", element.getTarget(), -1);
20644    }
20645    if (element.hasTargetItem()) {
20646      composeType(t, "PaymentReconciliationAllocationComponent", "targetItem", element.getTargetItem(), -1);
20647    }
20648    if (element.hasEncounter()) {
20649      composeReference(t, "PaymentReconciliationAllocationComponent", "encounter", element.getEncounter(), -1);
20650    }
20651    if (element.hasAccount()) {
20652      composeReference(t, "PaymentReconciliationAllocationComponent", "account", element.getAccount(), -1);
20653    }
20654    if (element.hasType()) {
20655      composeCodeableConcept(t, "PaymentReconciliationAllocationComponent", "type", element.getType(), -1);
20656    }
20657    if (element.hasSubmitter()) {
20658      composeReference(t, "PaymentReconciliationAllocationComponent", "submitter", element.getSubmitter(), -1);
20659    }
20660    if (element.hasResponse()) {
20661      composeReference(t, "PaymentReconciliationAllocationComponent", "response", element.getResponse(), -1);
20662    }
20663    if (element.hasDateElement()) {
20664      composeDate(t, "PaymentReconciliationAllocationComponent", "date", element.getDateElement(), -1);
20665    }
20666    if (element.hasResponsible()) {
20667      composeReference(t, "PaymentReconciliationAllocationComponent", "responsible", element.getResponsible(), -1);
20668    }
20669    if (element.hasPayee()) {
20670      composeReference(t, "PaymentReconciliationAllocationComponent", "payee", element.getPayee(), -1);
20671    }
20672    if (element.hasAmount()) {
20673      composeMoney(t, "PaymentReconciliationAllocationComponent", "amount", element.getAmount(), -1);
20674    }
20675  }
20676
20677  protected void composePaymentReconciliationNotesComponent(Complex parent, String parentType, String name, PaymentReconciliation.NotesComponent element, int index) {
20678    if (element == null) 
20679      return;
20680    Complex t;
20681    if (Utilities.noString(parentType))
20682      t = parent;
20683    else {
20684      t = parent.predicate("fhir:"+name,index > -1);
20685    }
20686    composeBackboneElement(t, "processNote", name, element, index);
20687    if (element.hasTypeElement()) {
20688      composeEnum(t, "NotesComponent", "type", element.getTypeElement(), -1);
20689    }
20690    if (element.hasTextElement()) {
20691      composeString(t, "NotesComponent", "text", element.getTextElement(), -1);
20692    }
20693  }
20694
20695  protected void composePermission(Complex parent, String parentType, String name, Permission element, int index) {
20696    if (element == null) 
20697      return;
20698    Complex t;
20699    if (Utilities.noString(parentType))
20700      t = parent;
20701    else {
20702      t = parent.predicate("fhir:"+name,index > -1);
20703    }
20704    composeDomainResource(t, "Permission", name, element, index);
20705    if (element.hasStatusElement()) {
20706      composeEnum(t, "Permission", "status", element.getStatusElement(), -1);
20707    }
20708    if (element.hasAsserter()) {
20709      composeReference(t, "Permission", "asserter", element.getAsserter(), -1);
20710    }
20711    for (int i = 0; i < element.getDate().size(); i++) {
20712      composeDateTime(t, "Permission", "date", element.getDate().get(i), i);
20713    }
20714    if (element.hasValidity()) {
20715      composePeriod(t, "Permission", "validity", element.getValidity(), -1);
20716    }
20717    if (element.hasJustification()) {
20718      composePermissionJustificationComponent(t, "Permission", "justification", element.getJustification(), -1);
20719    }
20720    if (element.hasCombiningElement()) {
20721      composeEnum(t, "Permission", "combining", element.getCombiningElement(), -1);
20722    }
20723    for (int i = 0; i < element.getRule().size(); i++) {
20724      composePermissionRuleComponent(t, "Permission", "rule", element.getRule().get(i), i);
20725    }
20726  }
20727
20728  protected void composePermissionJustificationComponent(Complex parent, String parentType, String name, Permission.PermissionJustificationComponent element, int index) {
20729    if (element == null) 
20730      return;
20731    Complex t;
20732    if (Utilities.noString(parentType))
20733      t = parent;
20734    else {
20735      t = parent.predicate("fhir:"+name,index > -1);
20736    }
20737    composeBackboneElement(t, "justification", name, element, index);
20738    for (int i = 0; i < element.getBasis().size(); i++) {
20739      composeCodeableConcept(t, "PermissionJustificationComponent", "basis", element.getBasis().get(i), i);
20740    }
20741    for (int i = 0; i < element.getEvidence().size(); i++) {
20742      composeReference(t, "PermissionJustificationComponent", "evidence", element.getEvidence().get(i), i);
20743    }
20744  }
20745
20746  protected void composePermissionRuleComponent(Complex parent, String parentType, String name, Permission.RuleComponent element, int index) {
20747    if (element == null) 
20748      return;
20749    Complex t;
20750    if (Utilities.noString(parentType))
20751      t = parent;
20752    else {
20753      t = parent.predicate("fhir:"+name,index > -1);
20754    }
20755    composeBackboneElement(t, "rule", name, element, index);
20756    if (element.hasTypeElement()) {
20757      composeEnum(t, "RuleComponent", "type", element.getTypeElement(), -1);
20758    }
20759    for (int i = 0; i < element.getData().size(); i++) {
20760      composePermissionRuleDataComponent(t, "RuleComponent", "data", element.getData().get(i), i);
20761    }
20762    for (int i = 0; i < element.getActivity().size(); i++) {
20763      composePermissionRuleActivityComponent(t, "RuleComponent", "activity", element.getActivity().get(i), i);
20764    }
20765    for (int i = 0; i < element.getLimit().size(); i++) {
20766      composeCodeableConcept(t, "RuleComponent", "limit", element.getLimit().get(i), i);
20767    }
20768  }
20769
20770  protected void composePermissionRuleDataComponent(Complex parent, String parentType, String name, Permission.RuleDataComponent element, int index) {
20771    if (element == null) 
20772      return;
20773    Complex t;
20774    if (Utilities.noString(parentType))
20775      t = parent;
20776    else {
20777      t = parent.predicate("fhir:"+name,index > -1);
20778    }
20779    composeBackboneElement(t, "data", name, element, index);
20780    for (int i = 0; i < element.getResource().size(); i++) {
20781      composePermissionRuleDataResourceComponent(t, "RuleDataComponent", "resource", element.getResource().get(i), i);
20782    }
20783    for (int i = 0; i < element.getSecurity().size(); i++) {
20784      composeCoding(t, "RuleDataComponent", "security", element.getSecurity().get(i), i);
20785    }
20786    for (int i = 0; i < element.getPeriod().size(); i++) {
20787      composePeriod(t, "RuleDataComponent", "period", element.getPeriod().get(i), i);
20788    }
20789    if (element.hasExpression()) {
20790      composeExpression(t, "RuleDataComponent", "expression", element.getExpression(), -1);
20791    }
20792  }
20793
20794  protected void composePermissionRuleDataResourceComponent(Complex parent, String parentType, String name, Permission.RuleDataResourceComponent element, int index) {
20795    if (element == null) 
20796      return;
20797    Complex t;
20798    if (Utilities.noString(parentType))
20799      t = parent;
20800    else {
20801      t = parent.predicate("fhir:"+name,index > -1);
20802    }
20803    composeBackboneElement(t, "resource", name, element, index);
20804    if (element.hasMeaningElement()) {
20805      composeEnum(t, "RuleDataResourceComponent", "meaning", element.getMeaningElement(), -1);
20806    }
20807    if (element.hasReference()) {
20808      composeReference(t, "RuleDataResourceComponent", "reference", element.getReference(), -1);
20809    }
20810  }
20811
20812  protected void composePermissionRuleActivityComponent(Complex parent, String parentType, String name, Permission.RuleActivityComponent element, int index) {
20813    if (element == null) 
20814      return;
20815    Complex t;
20816    if (Utilities.noString(parentType))
20817      t = parent;
20818    else {
20819      t = parent.predicate("fhir:"+name,index > -1);
20820    }
20821    composeBackboneElement(t, "activity", name, element, index);
20822    for (int i = 0; i < element.getActor().size(); i++) {
20823      composeReference(t, "RuleActivityComponent", "actor", element.getActor().get(i), i);
20824    }
20825    for (int i = 0; i < element.getAction().size(); i++) {
20826      composeCodeableConcept(t, "RuleActivityComponent", "action", element.getAction().get(i), i);
20827    }
20828    for (int i = 0; i < element.getPurpose().size(); i++) {
20829      composeCodeableConcept(t, "RuleActivityComponent", "purpose", element.getPurpose().get(i), i);
20830    }
20831  }
20832
20833  protected void composePerson(Complex parent, String parentType, String name, Person element, int index) {
20834    if (element == null) 
20835      return;
20836    Complex t;
20837    if (Utilities.noString(parentType))
20838      t = parent;
20839    else {
20840      t = parent.predicate("fhir:"+name,index > -1);
20841    }
20842    composeDomainResource(t, "Person", name, element, index);
20843    for (int i = 0; i < element.getIdentifier().size(); i++) {
20844      composeIdentifier(t, "Person", "identifier", element.getIdentifier().get(i), i);
20845    }
20846    if (element.hasActiveElement()) {
20847      composeBoolean(t, "Person", "active", element.getActiveElement(), -1);
20848    }
20849    for (int i = 0; i < element.getName().size(); i++) {
20850      composeHumanName(t, "Person", "name", element.getName().get(i), i);
20851    }
20852    for (int i = 0; i < element.getTelecom().size(); i++) {
20853      composeContactPoint(t, "Person", "telecom", element.getTelecom().get(i), i);
20854    }
20855    if (element.hasGenderElement()) {
20856      composeEnum(t, "Person", "gender", element.getGenderElement(), -1);
20857    }
20858    if (element.hasBirthDateElement()) {
20859      composeDate(t, "Person", "birthDate", element.getBirthDateElement(), -1);
20860    }
20861    if (element.hasDeceased()) {
20862      composeType(t, "Person", "deceased", element.getDeceased(), -1);
20863    }
20864    for (int i = 0; i < element.getAddress().size(); i++) {
20865      composeAddress(t, "Person", "address", element.getAddress().get(i), i);
20866    }
20867    if (element.hasMaritalStatus()) {
20868      composeCodeableConcept(t, "Person", "maritalStatus", element.getMaritalStatus(), -1);
20869    }
20870    for (int i = 0; i < element.getPhoto().size(); i++) {
20871      composeAttachment(t, "Person", "photo", element.getPhoto().get(i), i);
20872    }
20873    for (int i = 0; i < element.getCommunication().size(); i++) {
20874      composePersonCommunicationComponent(t, "Person", "communication", element.getCommunication().get(i), i);
20875    }
20876    if (element.hasManagingOrganization()) {
20877      composeReference(t, "Person", "managingOrganization", element.getManagingOrganization(), -1);
20878    }
20879    for (int i = 0; i < element.getLink().size(); i++) {
20880      composePersonLinkComponent(t, "Person", "link", element.getLink().get(i), i);
20881    }
20882  }
20883
20884  protected void composePersonCommunicationComponent(Complex parent, String parentType, String name, Person.PersonCommunicationComponent element, int index) {
20885    if (element == null) 
20886      return;
20887    Complex t;
20888    if (Utilities.noString(parentType))
20889      t = parent;
20890    else {
20891      t = parent.predicate("fhir:"+name,index > -1);
20892    }
20893    composeBackboneElement(t, "communication", name, element, index);
20894    if (element.hasLanguage()) {
20895      composeCodeableConcept(t, "PersonCommunicationComponent", "language", element.getLanguage(), -1);
20896    }
20897    if (element.hasPreferredElement()) {
20898      composeBoolean(t, "PersonCommunicationComponent", "preferred", element.getPreferredElement(), -1);
20899    }
20900  }
20901
20902  protected void composePersonLinkComponent(Complex parent, String parentType, String name, Person.PersonLinkComponent element, int index) {
20903    if (element == null) 
20904      return;
20905    Complex t;
20906    if (Utilities.noString(parentType))
20907      t = parent;
20908    else {
20909      t = parent.predicate("fhir:"+name,index > -1);
20910    }
20911    composeBackboneElement(t, "link", name, element, index);
20912    if (element.hasTarget()) {
20913      composeReference(t, "PersonLinkComponent", "target", element.getTarget(), -1);
20914    }
20915    if (element.hasAssuranceElement()) {
20916      composeEnum(t, "PersonLinkComponent", "assurance", element.getAssuranceElement(), -1);
20917    }
20918  }
20919
20920  protected void composePlanDefinition(Complex parent, String parentType, String name, PlanDefinition element, int index) {
20921    if (element == null) 
20922      return;
20923    Complex t;
20924    if (Utilities.noString(parentType))
20925      t = parent;
20926    else {
20927      t = parent.predicate("fhir:"+name,index > -1);
20928    }
20929    composeMetadataResource(t, "PlanDefinition", name, element, index);
20930    if (element.hasUrlElement()) {
20931      composeUri(t, "PlanDefinition", "url", element.getUrlElement(), -1);
20932    }
20933    for (int i = 0; i < element.getIdentifier().size(); i++) {
20934      composeIdentifier(t, "PlanDefinition", "identifier", element.getIdentifier().get(i), i);
20935    }
20936    if (element.hasVersionElement()) {
20937      composeString(t, "PlanDefinition", "version", element.getVersionElement(), -1);
20938    }
20939    if (element.hasVersionAlgorithm()) {
20940      composeType(t, "PlanDefinition", "versionAlgorithm", element.getVersionAlgorithm(), -1);
20941    }
20942    if (element.hasNameElement()) {
20943      composeString(t, "PlanDefinition", "name", element.getNameElement(), -1);
20944    }
20945    if (element.hasTitleElement()) {
20946      composeString(t, "PlanDefinition", "title", element.getTitleElement(), -1);
20947    }
20948    if (element.hasSubtitleElement()) {
20949      composeString(t, "PlanDefinition", "subtitle", element.getSubtitleElement(), -1);
20950    }
20951    if (element.hasType()) {
20952      composeCodeableConcept(t, "PlanDefinition", "type", element.getType(), -1);
20953    }
20954    if (element.hasStatusElement()) {
20955      composeEnum(t, "PlanDefinition", "status", element.getStatusElement(), -1);
20956    }
20957    if (element.hasExperimentalElement()) {
20958      composeBoolean(t, "PlanDefinition", "experimental", element.getExperimentalElement(), -1);
20959    }
20960    if (element.hasSubject()) {
20961      composeType(t, "PlanDefinition", "subject", element.getSubject(), -1);
20962    }
20963    if (element.hasDateElement()) {
20964      composeDateTime(t, "PlanDefinition", "date", element.getDateElement(), -1);
20965    }
20966    if (element.hasPublisherElement()) {
20967      composeString(t, "PlanDefinition", "publisher", element.getPublisherElement(), -1);
20968    }
20969    for (int i = 0; i < element.getContact().size(); i++) {
20970      composeContactDetail(t, "PlanDefinition", "contact", element.getContact().get(i), i);
20971    }
20972    if (element.hasDescriptionElement()) {
20973      composeMarkdown(t, "PlanDefinition", "description", element.getDescriptionElement(), -1);
20974    }
20975    for (int i = 0; i < element.getUseContext().size(); i++) {
20976      composeUsageContext(t, "PlanDefinition", "useContext", element.getUseContext().get(i), i);
20977    }
20978    for (int i = 0; i < element.getJurisdiction().size(); i++) {
20979      composeCodeableConcept(t, "PlanDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
20980    }
20981    if (element.hasPurposeElement()) {
20982      composeMarkdown(t, "PlanDefinition", "purpose", element.getPurposeElement(), -1);
20983    }
20984    if (element.hasUsageElement()) {
20985      composeMarkdown(t, "PlanDefinition", "usage", element.getUsageElement(), -1);
20986    }
20987    if (element.hasCopyrightElement()) {
20988      composeMarkdown(t, "PlanDefinition", "copyright", element.getCopyrightElement(), -1);
20989    }
20990    if (element.hasCopyrightLabelElement()) {
20991      composeString(t, "PlanDefinition", "copyrightLabel", element.getCopyrightLabelElement(), -1);
20992    }
20993    if (element.hasApprovalDateElement()) {
20994      composeDate(t, "PlanDefinition", "approvalDate", element.getApprovalDateElement(), -1);
20995    }
20996    if (element.hasLastReviewDateElement()) {
20997      composeDate(t, "PlanDefinition", "lastReviewDate", element.getLastReviewDateElement(), -1);
20998    }
20999    if (element.hasEffectivePeriod()) {
21000      composePeriod(t, "PlanDefinition", "effectivePeriod", element.getEffectivePeriod(), -1);
21001    }
21002    for (int i = 0; i < element.getTopic().size(); i++) {
21003      composeCodeableConcept(t, "PlanDefinition", "topic", element.getTopic().get(i), i);
21004    }
21005    for (int i = 0; i < element.getAuthor().size(); i++) {
21006      composeContactDetail(t, "PlanDefinition", "author", element.getAuthor().get(i), i);
21007    }
21008    for (int i = 0; i < element.getEditor().size(); i++) {
21009      composeContactDetail(t, "PlanDefinition", "editor", element.getEditor().get(i), i);
21010    }
21011    for (int i = 0; i < element.getReviewer().size(); i++) {
21012      composeContactDetail(t, "PlanDefinition", "reviewer", element.getReviewer().get(i), i);
21013    }
21014    for (int i = 0; i < element.getEndorser().size(); i++) {
21015      composeContactDetail(t, "PlanDefinition", "endorser", element.getEndorser().get(i), i);
21016    }
21017    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
21018      composeRelatedArtifact(t, "PlanDefinition", "relatedArtifact", element.getRelatedArtifact().get(i), i);
21019    }
21020    for (int i = 0; i < element.getLibrary().size(); i++) {
21021      composeCanonical(t, "PlanDefinition", "library", element.getLibrary().get(i), i);
21022    }
21023    for (int i = 0; i < element.getGoal().size(); i++) {
21024      composePlanDefinitionGoalComponent(t, "PlanDefinition", "goal", element.getGoal().get(i), i);
21025    }
21026    for (int i = 0; i < element.getActor().size(); i++) {
21027      composePlanDefinitionActorComponent(t, "PlanDefinition", "actor", element.getActor().get(i), i);
21028    }
21029    for (int i = 0; i < element.getAction().size(); i++) {
21030      composePlanDefinitionActionComponent(t, "PlanDefinition", "action", element.getAction().get(i), i);
21031    }
21032    if (element.hasAsNeeded()) {
21033      composeType(t, "PlanDefinition", "asNeeded", element.getAsNeeded(), -1);
21034    }
21035  }
21036
21037  protected void composePlanDefinitionGoalComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionGoalComponent element, int index) {
21038    if (element == null) 
21039      return;
21040    Complex t;
21041    if (Utilities.noString(parentType))
21042      t = parent;
21043    else {
21044      t = parent.predicate("fhir:"+name,index > -1);
21045    }
21046    composeBackboneElement(t, "goal", name, element, index);
21047    if (element.hasCategory()) {
21048      composeCodeableConcept(t, "PlanDefinitionGoalComponent", "category", element.getCategory(), -1);
21049    }
21050    if (element.hasDescription()) {
21051      composeCodeableConcept(t, "PlanDefinitionGoalComponent", "description", element.getDescription(), -1);
21052    }
21053    if (element.hasPriority()) {
21054      composeCodeableConcept(t, "PlanDefinitionGoalComponent", "priority", element.getPriority(), -1);
21055    }
21056    if (element.hasStart()) {
21057      composeCodeableConcept(t, "PlanDefinitionGoalComponent", "start", element.getStart(), -1);
21058    }
21059    for (int i = 0; i < element.getAddresses().size(); i++) {
21060      composeCodeableConcept(t, "PlanDefinitionGoalComponent", "addresses", element.getAddresses().get(i), i);
21061    }
21062    for (int i = 0; i < element.getDocumentation().size(); i++) {
21063      composeRelatedArtifact(t, "PlanDefinitionGoalComponent", "documentation", element.getDocumentation().get(i), i);
21064    }
21065    for (int i = 0; i < element.getTarget().size(); i++) {
21066      composePlanDefinitionGoalTargetComponent(t, "PlanDefinitionGoalComponent", "target", element.getTarget().get(i), i);
21067    }
21068  }
21069
21070  protected void composePlanDefinitionGoalTargetComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionGoalTargetComponent 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:"+name,index > -1);
21078    }
21079    composeBackboneElement(t, "target", name, element, index);
21080    if (element.hasMeasure()) {
21081      composeCodeableConcept(t, "PlanDefinitionGoalTargetComponent", "measure", element.getMeasure(), -1);
21082    }
21083    if (element.hasDetail()) {
21084      composeType(t, "PlanDefinitionGoalTargetComponent", "detail", element.getDetail(), -1);
21085    }
21086    if (element.hasDue()) {
21087      composeDuration(t, "PlanDefinitionGoalTargetComponent", "due", element.getDue(), -1);
21088    }
21089  }
21090
21091  protected void composePlanDefinitionActorComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionActorComponent element, int index) {
21092    if (element == null) 
21093      return;
21094    Complex t;
21095    if (Utilities.noString(parentType))
21096      t = parent;
21097    else {
21098      t = parent.predicate("fhir:"+name,index > -1);
21099    }
21100    composeBackboneElement(t, "actor", name, element, index);
21101    if (element.hasTitleElement()) {
21102      composeString(t, "PlanDefinitionActorComponent", "title", element.getTitleElement(), -1);
21103    }
21104    if (element.hasDescriptionElement()) {
21105      composeMarkdown(t, "PlanDefinitionActorComponent", "description", element.getDescriptionElement(), -1);
21106    }
21107    for (int i = 0; i < element.getOption().size(); i++) {
21108      composePlanDefinitionActorOptionComponent(t, "PlanDefinitionActorComponent", "option", element.getOption().get(i), i);
21109    }
21110  }
21111
21112  protected void composePlanDefinitionActorOptionComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionActorOptionComponent element, int index) {
21113    if (element == null) 
21114      return;
21115    Complex t;
21116    if (Utilities.noString(parentType))
21117      t = parent;
21118    else {
21119      t = parent.predicate("fhir:"+name,index > -1);
21120    }
21121    composeBackboneElement(t, "option", name, element, index);
21122    if (element.hasTypeElement()) {
21123      composeEnum(t, "PlanDefinitionActorOptionComponent", "type", element.getTypeElement(), -1);
21124    }
21125    if (element.hasTypeCanonicalElement()) {
21126      composeCanonical(t, "PlanDefinitionActorOptionComponent", "typeCanonical", element.getTypeCanonicalElement(), -1);
21127    }
21128    if (element.hasTypeReference()) {
21129      composeReference(t, "PlanDefinitionActorOptionComponent", "typeReference", element.getTypeReference(), -1);
21130    }
21131    if (element.hasRole()) {
21132      composeCodeableConcept(t, "PlanDefinitionActorOptionComponent", "role", element.getRole(), -1);
21133    }
21134  }
21135
21136  protected void composePlanDefinitionActionComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionActionComponent 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:"+name,index > -1);
21144    }
21145    composeBackboneElement(t, "action", name, element, index);
21146    if (element.hasLinkIdElement()) {
21147      composeString(t, "PlanDefinitionActionComponent", "linkId", element.getLinkIdElement(), -1);
21148    }
21149    if (element.hasPrefixElement()) {
21150      composeString(t, "PlanDefinitionActionComponent", "prefix", element.getPrefixElement(), -1);
21151    }
21152    if (element.hasTitleElement()) {
21153      composeString(t, "PlanDefinitionActionComponent", "title", element.getTitleElement(), -1);
21154    }
21155    if (element.hasDescriptionElement()) {
21156      composeMarkdown(t, "PlanDefinitionActionComponent", "description", element.getDescriptionElement(), -1);
21157    }
21158    if (element.hasTextEquivalentElement()) {
21159      composeMarkdown(t, "PlanDefinitionActionComponent", "textEquivalent", element.getTextEquivalentElement(), -1);
21160    }
21161    if (element.hasPriorityElement()) {
21162      composeEnum(t, "PlanDefinitionActionComponent", "priority", element.getPriorityElement(), -1);
21163    }
21164    if (element.hasCode()) {
21165      composeCodeableConcept(t, "PlanDefinitionActionComponent", "code", element.getCode(), -1);
21166    }
21167    for (int i = 0; i < element.getReason().size(); i++) {
21168      composeCodeableConcept(t, "PlanDefinitionActionComponent", "reason", element.getReason().get(i), i);
21169    }
21170    for (int i = 0; i < element.getDocumentation().size(); i++) {
21171      composeRelatedArtifact(t, "PlanDefinitionActionComponent", "documentation", element.getDocumentation().get(i), i);
21172    }
21173    for (int i = 0; i < element.getGoalId().size(); i++) {
21174      composeId(t, "PlanDefinitionActionComponent", "goalId", element.getGoalId().get(i), i);
21175    }
21176    if (element.hasSubject()) {
21177      composeType(t, "PlanDefinitionActionComponent", "subject", element.getSubject(), -1);
21178    }
21179    for (int i = 0; i < element.getTrigger().size(); i++) {
21180      composeTriggerDefinition(t, "PlanDefinitionActionComponent", "trigger", element.getTrigger().get(i), i);
21181    }
21182    for (int i = 0; i < element.getCondition().size(); i++) {
21183      composePlanDefinitionActionConditionComponent(t, "PlanDefinitionActionComponent", "condition", element.getCondition().get(i), i);
21184    }
21185    for (int i = 0; i < element.getInput().size(); i++) {
21186      composePlanDefinitionActionInputComponent(t, "PlanDefinitionActionComponent", "input", element.getInput().get(i), i);
21187    }
21188    for (int i = 0; i < element.getOutput().size(); i++) {
21189      composePlanDefinitionActionOutputComponent(t, "PlanDefinitionActionComponent", "output", element.getOutput().get(i), i);
21190    }
21191    for (int i = 0; i < element.getRelatedAction().size(); i++) {
21192      composePlanDefinitionActionRelatedActionComponent(t, "PlanDefinitionActionComponent", "relatedAction", element.getRelatedAction().get(i), i);
21193    }
21194    if (element.hasTiming()) {
21195      composeType(t, "PlanDefinitionActionComponent", "timing", element.getTiming(), -1);
21196    }
21197    if (element.hasLocation()) {
21198      composeCodeableReference(t, "PlanDefinitionActionComponent", "location", element.getLocation(), -1);
21199    }
21200    for (int i = 0; i < element.getParticipant().size(); i++) {
21201      composePlanDefinitionActionParticipantComponent(t, "PlanDefinitionActionComponent", "participant", element.getParticipant().get(i), i);
21202    }
21203    if (element.hasType()) {
21204      composeCodeableConcept(t, "PlanDefinitionActionComponent", "type", element.getType(), -1);
21205    }
21206    if (element.hasGroupingBehaviorElement()) {
21207      composeEnum(t, "PlanDefinitionActionComponent", "groupingBehavior", element.getGroupingBehaviorElement(), -1);
21208    }
21209    if (element.hasSelectionBehaviorElement()) {
21210      composeEnum(t, "PlanDefinitionActionComponent", "selectionBehavior", element.getSelectionBehaviorElement(), -1);
21211    }
21212    if (element.hasRequiredBehaviorElement()) {
21213      composeEnum(t, "PlanDefinitionActionComponent", "requiredBehavior", element.getRequiredBehaviorElement(), -1);
21214    }
21215    if (element.hasPrecheckBehaviorElement()) {
21216      composeEnum(t, "PlanDefinitionActionComponent", "precheckBehavior", element.getPrecheckBehaviorElement(), -1);
21217    }
21218    if (element.hasCardinalityBehaviorElement()) {
21219      composeEnum(t, "PlanDefinitionActionComponent", "cardinalityBehavior", element.getCardinalityBehaviorElement(), -1);
21220    }
21221    if (element.hasDefinition()) {
21222      composeType(t, "PlanDefinitionActionComponent", "definition", element.getDefinition(), -1);
21223    }
21224    if (element.hasTransformElement()) {
21225      composeCanonical(t, "PlanDefinitionActionComponent", "transform", element.getTransformElement(), -1);
21226    }
21227    for (int i = 0; i < element.getDynamicValue().size(); i++) {
21228      composePlanDefinitionActionDynamicValueComponent(t, "PlanDefinitionActionComponent", "dynamicValue", element.getDynamicValue().get(i), i);
21229    }
21230    for (int i = 0; i < element.getAction().size(); i++) {
21231      composePlanDefinitionActionComponent(t, "PlanDefinitionActionComponent", "action", element.getAction().get(i), i);
21232    }
21233  }
21234
21235  protected void composePlanDefinitionActionConditionComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionActionConditionComponent 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:"+name,index > -1);
21243    }
21244    composeBackboneElement(t, "condition", name, element, index);
21245    if (element.hasKindElement()) {
21246      composeEnum(t, "PlanDefinitionActionConditionComponent", "kind", element.getKindElement(), -1);
21247    }
21248    if (element.hasExpression()) {
21249      composeExpression(t, "PlanDefinitionActionConditionComponent", "expression", element.getExpression(), -1);
21250    }
21251  }
21252
21253  protected void composePlanDefinitionActionInputComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionActionInputComponent element, int index) {
21254    if (element == null) 
21255      return;
21256    Complex t;
21257    if (Utilities.noString(parentType))
21258      t = parent;
21259    else {
21260      t = parent.predicate("fhir:"+name,index > -1);
21261    }
21262    composeBackboneElement(t, "input", name, element, index);
21263    if (element.hasTitleElement()) {
21264      composeString(t, "PlanDefinitionActionInputComponent", "title", element.getTitleElement(), -1);
21265    }
21266    if (element.hasRequirement()) {
21267      composeDataRequirement(t, "PlanDefinitionActionInputComponent", "requirement", element.getRequirement(), -1);
21268    }
21269    if (element.hasRelatedDataElement()) {
21270      composeId(t, "PlanDefinitionActionInputComponent", "relatedData", element.getRelatedDataElement(), -1);
21271    }
21272  }
21273
21274  protected void composePlanDefinitionActionOutputComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionActionOutputComponent element, int index) {
21275    if (element == null) 
21276      return;
21277    Complex t;
21278    if (Utilities.noString(parentType))
21279      t = parent;
21280    else {
21281      t = parent.predicate("fhir:"+name,index > -1);
21282    }
21283    composeBackboneElement(t, "output", name, element, index);
21284    if (element.hasTitleElement()) {
21285      composeString(t, "PlanDefinitionActionOutputComponent", "title", element.getTitleElement(), -1);
21286    }
21287    if (element.hasRequirement()) {
21288      composeDataRequirement(t, "PlanDefinitionActionOutputComponent", "requirement", element.getRequirement(), -1);
21289    }
21290    if (element.hasRelatedDataElement()) {
21291      composeString(t, "PlanDefinitionActionOutputComponent", "relatedData", element.getRelatedDataElement(), -1);
21292    }
21293  }
21294
21295  protected void composePlanDefinitionActionRelatedActionComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionActionRelatedActionComponent element, int index) {
21296    if (element == null) 
21297      return;
21298    Complex t;
21299    if (Utilities.noString(parentType))
21300      t = parent;
21301    else {
21302      t = parent.predicate("fhir:"+name,index > -1);
21303    }
21304    composeBackboneElement(t, "relatedAction", name, element, index);
21305    if (element.hasTargetIdElement()) {
21306      composeId(t, "PlanDefinitionActionRelatedActionComponent", "targetId", element.getTargetIdElement(), -1);
21307    }
21308    if (element.hasRelationshipElement()) {
21309      composeEnum(t, "PlanDefinitionActionRelatedActionComponent", "relationship", element.getRelationshipElement(), -1);
21310    }
21311    if (element.hasEndRelationshipElement()) {
21312      composeEnum(t, "PlanDefinitionActionRelatedActionComponent", "endRelationship", element.getEndRelationshipElement(), -1);
21313    }
21314    if (element.hasOffset()) {
21315      composeType(t, "PlanDefinitionActionRelatedActionComponent", "offset", element.getOffset(), -1);
21316    }
21317  }
21318
21319  protected void composePlanDefinitionActionParticipantComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionActionParticipantComponent element, int index) {
21320    if (element == null) 
21321      return;
21322    Complex t;
21323    if (Utilities.noString(parentType))
21324      t = parent;
21325    else {
21326      t = parent.predicate("fhir:"+name,index > -1);
21327    }
21328    composeBackboneElement(t, "participant", name, element, index);
21329    if (element.hasActorIdElement()) {
21330      composeString(t, "PlanDefinitionActionParticipantComponent", "actorId", element.getActorIdElement(), -1);
21331    }
21332    if (element.hasTypeElement()) {
21333      composeEnum(t, "PlanDefinitionActionParticipantComponent", "type", element.getTypeElement(), -1);
21334    }
21335    if (element.hasTypeCanonicalElement()) {
21336      composeCanonical(t, "PlanDefinitionActionParticipantComponent", "typeCanonical", element.getTypeCanonicalElement(), -1);
21337    }
21338    if (element.hasTypeReference()) {
21339      composeReference(t, "PlanDefinitionActionParticipantComponent", "typeReference", element.getTypeReference(), -1);
21340    }
21341    if (element.hasRole()) {
21342      composeCodeableConcept(t, "PlanDefinitionActionParticipantComponent", "role", element.getRole(), -1);
21343    }
21344    if (element.hasFunction()) {
21345      composeCodeableConcept(t, "PlanDefinitionActionParticipantComponent", "function", element.getFunction(), -1);
21346    }
21347  }
21348
21349  protected void composePlanDefinitionActionDynamicValueComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionActionDynamicValueComponent element, int index) {
21350    if (element == null) 
21351      return;
21352    Complex t;
21353    if (Utilities.noString(parentType))
21354      t = parent;
21355    else {
21356      t = parent.predicate("fhir:"+name,index > -1);
21357    }
21358    composeBackboneElement(t, "dynamicValue", name, element, index);
21359    if (element.hasPathElement()) {
21360      composeString(t, "PlanDefinitionActionDynamicValueComponent", "path", element.getPathElement(), -1);
21361    }
21362    if (element.hasExpression()) {
21363      composeExpression(t, "PlanDefinitionActionDynamicValueComponent", "expression", element.getExpression(), -1);
21364    }
21365  }
21366
21367  protected void composePractitioner(Complex parent, String parentType, String name, Practitioner element, int index) {
21368    if (element == null) 
21369      return;
21370    Complex t;
21371    if (Utilities.noString(parentType))
21372      t = parent;
21373    else {
21374      t = parent.predicate("fhir:"+name,index > -1);
21375    }
21376    composeDomainResource(t, "Practitioner", name, element, index);
21377    for (int i = 0; i < element.getIdentifier().size(); i++) {
21378      composeIdentifier(t, "Practitioner", "identifier", element.getIdentifier().get(i), i);
21379    }
21380    if (element.hasActiveElement()) {
21381      composeBoolean(t, "Practitioner", "active", element.getActiveElement(), -1);
21382    }
21383    for (int i = 0; i < element.getName().size(); i++) {
21384      composeHumanName(t, "Practitioner", "name", element.getName().get(i), i);
21385    }
21386    for (int i = 0; i < element.getTelecom().size(); i++) {
21387      composeContactPoint(t, "Practitioner", "telecom", element.getTelecom().get(i), i);
21388    }
21389    if (element.hasGenderElement()) {
21390      composeEnum(t, "Practitioner", "gender", element.getGenderElement(), -1);
21391    }
21392    if (element.hasBirthDateElement()) {
21393      composeDate(t, "Practitioner", "birthDate", element.getBirthDateElement(), -1);
21394    }
21395    if (element.hasDeceased()) {
21396      composeType(t, "Practitioner", "deceased", element.getDeceased(), -1);
21397    }
21398    for (int i = 0; i < element.getAddress().size(); i++) {
21399      composeAddress(t, "Practitioner", "address", element.getAddress().get(i), i);
21400    }
21401    for (int i = 0; i < element.getPhoto().size(); i++) {
21402      composeAttachment(t, "Practitioner", "photo", element.getPhoto().get(i), i);
21403    }
21404    for (int i = 0; i < element.getQualification().size(); i++) {
21405      composePractitionerQualificationComponent(t, "Practitioner", "qualification", element.getQualification().get(i), i);
21406    }
21407    for (int i = 0; i < element.getCommunication().size(); i++) {
21408      composePractitionerCommunicationComponent(t, "Practitioner", "communication", element.getCommunication().get(i), i);
21409    }
21410  }
21411
21412  protected void composePractitionerQualificationComponent(Complex parent, String parentType, String name, Practitioner.PractitionerQualificationComponent 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:"+name,index > -1);
21420    }
21421    composeBackboneElement(t, "qualification", name, element, index);
21422    for (int i = 0; i < element.getIdentifier().size(); i++) {
21423      composeIdentifier(t, "PractitionerQualificationComponent", "identifier", element.getIdentifier().get(i), i);
21424    }
21425    if (element.hasCode()) {
21426      composeCodeableConcept(t, "PractitionerQualificationComponent", "code", element.getCode(), -1);
21427    }
21428    if (element.hasPeriod()) {
21429      composePeriod(t, "PractitionerQualificationComponent", "period", element.getPeriod(), -1);
21430    }
21431    if (element.hasIssuer()) {
21432      composeReference(t, "PractitionerQualificationComponent", "issuer", element.getIssuer(), -1);
21433    }
21434  }
21435
21436  protected void composePractitionerCommunicationComponent(Complex parent, String parentType, String name, Practitioner.PractitionerCommunicationComponent element, int index) {
21437    if (element == null) 
21438      return;
21439    Complex t;
21440    if (Utilities.noString(parentType))
21441      t = parent;
21442    else {
21443      t = parent.predicate("fhir:"+name,index > -1);
21444    }
21445    composeBackboneElement(t, "communication", name, element, index);
21446    if (element.hasLanguage()) {
21447      composeCodeableConcept(t, "PractitionerCommunicationComponent", "language", element.getLanguage(), -1);
21448    }
21449    if (element.hasPreferredElement()) {
21450      composeBoolean(t, "PractitionerCommunicationComponent", "preferred", element.getPreferredElement(), -1);
21451    }
21452  }
21453
21454  protected void composePractitionerRole(Complex parent, String parentType, String name, PractitionerRole element, int index) {
21455    if (element == null) 
21456      return;
21457    Complex t;
21458    if (Utilities.noString(parentType))
21459      t = parent;
21460    else {
21461      t = parent.predicate("fhir:"+name,index > -1);
21462    }
21463    composeDomainResource(t, "PractitionerRole", name, element, index);
21464    for (int i = 0; i < element.getIdentifier().size(); i++) {
21465      composeIdentifier(t, "PractitionerRole", "identifier", element.getIdentifier().get(i), i);
21466    }
21467    if (element.hasActiveElement()) {
21468      composeBoolean(t, "PractitionerRole", "active", element.getActiveElement(), -1);
21469    }
21470    if (element.hasPeriod()) {
21471      composePeriod(t, "PractitionerRole", "period", element.getPeriod(), -1);
21472    }
21473    if (element.hasPractitioner()) {
21474      composeReference(t, "PractitionerRole", "practitioner", element.getPractitioner(), -1);
21475    }
21476    if (element.hasOrganization()) {
21477      composeReference(t, "PractitionerRole", "organization", element.getOrganization(), -1);
21478    }
21479    for (int i = 0; i < element.getCode().size(); i++) {
21480      composeCodeableConcept(t, "PractitionerRole", "code", element.getCode().get(i), i);
21481    }
21482    for (int i = 0; i < element.getSpecialty().size(); i++) {
21483      composeCodeableConcept(t, "PractitionerRole", "specialty", element.getSpecialty().get(i), i);
21484    }
21485    for (int i = 0; i < element.getLocation().size(); i++) {
21486      composeReference(t, "PractitionerRole", "location", element.getLocation().get(i), i);
21487    }
21488    for (int i = 0; i < element.getHealthcareService().size(); i++) {
21489      composeReference(t, "PractitionerRole", "healthcareService", element.getHealthcareService().get(i), i);
21490    }
21491    for (int i = 0; i < element.getContact().size(); i++) {
21492      composeExtendedContactDetail(t, "PractitionerRole", "contact", element.getContact().get(i), i);
21493    }
21494    for (int i = 0; i < element.getCharacteristic().size(); i++) {
21495      composeCodeableConcept(t, "PractitionerRole", "characteristic", element.getCharacteristic().get(i), i);
21496    }
21497    for (int i = 0; i < element.getCommunication().size(); i++) {
21498      composeCodeableConcept(t, "PractitionerRole", "communication", element.getCommunication().get(i), i);
21499    }
21500    for (int i = 0; i < element.getAvailability().size(); i++) {
21501      composeAvailability(t, "PractitionerRole", "availability", element.getAvailability().get(i), i);
21502    }
21503    for (int i = 0; i < element.getEndpoint().size(); i++) {
21504      composeReference(t, "PractitionerRole", "endpoint", element.getEndpoint().get(i), i);
21505    }
21506  }
21507
21508  protected void composeProcedure(Complex parent, String parentType, String name, Procedure element, int index) {
21509    if (element == null) 
21510      return;
21511    Complex t;
21512    if (Utilities.noString(parentType))
21513      t = parent;
21514    else {
21515      t = parent.predicate("fhir:"+name,index > -1);
21516    }
21517    composeDomainResource(t, "Procedure", name, element, index);
21518    for (int i = 0; i < element.getIdentifier().size(); i++) {
21519      composeIdentifier(t, "Procedure", "identifier", element.getIdentifier().get(i), i);
21520    }
21521    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
21522      composeCanonical(t, "Procedure", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
21523    }
21524    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
21525      composeUri(t, "Procedure", "instantiatesUri", element.getInstantiatesUri().get(i), i);
21526    }
21527    for (int i = 0; i < element.getBasedOn().size(); i++) {
21528      composeReference(t, "Procedure", "basedOn", element.getBasedOn().get(i), i);
21529    }
21530    for (int i = 0; i < element.getPartOf().size(); i++) {
21531      composeReference(t, "Procedure", "partOf", element.getPartOf().get(i), i);
21532    }
21533    if (element.hasStatusElement()) {
21534      composeEnum(t, "Procedure", "status", element.getStatusElement(), -1);
21535    }
21536    if (element.hasStatusReason()) {
21537      composeCodeableConcept(t, "Procedure", "statusReason", element.getStatusReason(), -1);
21538    }
21539    for (int i = 0; i < element.getCategory().size(); i++) {
21540      composeCodeableConcept(t, "Procedure", "category", element.getCategory().get(i), i);
21541    }
21542    if (element.hasCode()) {
21543      composeCodeableConcept(t, "Procedure", "code", element.getCode(), -1);
21544    }
21545    if (element.hasSubject()) {
21546      composeReference(t, "Procedure", "subject", element.getSubject(), -1);
21547    }
21548    if (element.hasFocus()) {
21549      composeReference(t, "Procedure", "focus", element.getFocus(), -1);
21550    }
21551    if (element.hasEncounter()) {
21552      composeReference(t, "Procedure", "encounter", element.getEncounter(), -1);
21553    }
21554    if (element.hasOccurrence()) {
21555      composeType(t, "Procedure", "occurrence", element.getOccurrence(), -1);
21556    }
21557    if (element.hasRecordedElement()) {
21558      composeDateTime(t, "Procedure", "recorded", element.getRecordedElement(), -1);
21559    }
21560    if (element.hasRecorder()) {
21561      composeReference(t, "Procedure", "recorder", element.getRecorder(), -1);
21562    }
21563    if (element.hasReported()) {
21564      composeType(t, "Procedure", "reported", element.getReported(), -1);
21565    }
21566    for (int i = 0; i < element.getPerformer().size(); i++) {
21567      composeProcedurePerformerComponent(t, "Procedure", "performer", element.getPerformer().get(i), i);
21568    }
21569    if (element.hasLocation()) {
21570      composeReference(t, "Procedure", "location", element.getLocation(), -1);
21571    }
21572    for (int i = 0; i < element.getReason().size(); i++) {
21573      composeCodeableReference(t, "Procedure", "reason", element.getReason().get(i), i);
21574    }
21575    for (int i = 0; i < element.getBodySite().size(); i++) {
21576      composeCodeableConcept(t, "Procedure", "bodySite", element.getBodySite().get(i), i);
21577    }
21578    if (element.hasOutcome()) {
21579      composeCodeableConcept(t, "Procedure", "outcome", element.getOutcome(), -1);
21580    }
21581    for (int i = 0; i < element.getReport().size(); i++) {
21582      composeReference(t, "Procedure", "report", element.getReport().get(i), i);
21583    }
21584    for (int i = 0; i < element.getComplication().size(); i++) {
21585      composeCodeableReference(t, "Procedure", "complication", element.getComplication().get(i), i);
21586    }
21587    for (int i = 0; i < element.getFollowUp().size(); i++) {
21588      composeCodeableConcept(t, "Procedure", "followUp", element.getFollowUp().get(i), i);
21589    }
21590    for (int i = 0; i < element.getNote().size(); i++) {
21591      composeAnnotation(t, "Procedure", "note", element.getNote().get(i), i);
21592    }
21593    for (int i = 0; i < element.getFocalDevice().size(); i++) {
21594      composeProcedureFocalDeviceComponent(t, "Procedure", "focalDevice", element.getFocalDevice().get(i), i);
21595    }
21596    for (int i = 0; i < element.getUsed().size(); i++) {
21597      composeCodeableReference(t, "Procedure", "used", element.getUsed().get(i), i);
21598    }
21599    for (int i = 0; i < element.getSupportingInfo().size(); i++) {
21600      composeReference(t, "Procedure", "supportingInfo", element.getSupportingInfo().get(i), i);
21601    }
21602  }
21603
21604  protected void composeProcedurePerformerComponent(Complex parent, String parentType, String name, Procedure.ProcedurePerformerComponent element, int index) {
21605    if (element == null) 
21606      return;
21607    Complex t;
21608    if (Utilities.noString(parentType))
21609      t = parent;
21610    else {
21611      t = parent.predicate("fhir:"+name,index > -1);
21612    }
21613    composeBackboneElement(t, "performer", name, element, index);
21614    if (element.hasFunction()) {
21615      composeCodeableConcept(t, "ProcedurePerformerComponent", "function", element.getFunction(), -1);
21616    }
21617    if (element.hasActor()) {
21618      composeReference(t, "ProcedurePerformerComponent", "actor", element.getActor(), -1);
21619    }
21620    if (element.hasOnBehalfOf()) {
21621      composeReference(t, "ProcedurePerformerComponent", "onBehalfOf", element.getOnBehalfOf(), -1);
21622    }
21623    if (element.hasPeriod()) {
21624      composePeriod(t, "ProcedurePerformerComponent", "period", element.getPeriod(), -1);
21625    }
21626  }
21627
21628  protected void composeProcedureFocalDeviceComponent(Complex parent, String parentType, String name, Procedure.ProcedureFocalDeviceComponent 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:"+name,index > -1);
21636    }
21637    composeBackboneElement(t, "focalDevice", name, element, index);
21638    if (element.hasAction()) {
21639      composeCodeableConcept(t, "ProcedureFocalDeviceComponent", "action", element.getAction(), -1);
21640    }
21641    if (element.hasManipulated()) {
21642      composeReference(t, "ProcedureFocalDeviceComponent", "manipulated", element.getManipulated(), -1);
21643    }
21644  }
21645
21646  protected void composeProvenance(Complex parent, String parentType, String name, Provenance element, int index) {
21647    if (element == null) 
21648      return;
21649    Complex t;
21650    if (Utilities.noString(parentType))
21651      t = parent;
21652    else {
21653      t = parent.predicate("fhir:"+name,index > -1);
21654    }
21655    composeDomainResource(t, "Provenance", name, element, index);
21656    for (int i = 0; i < element.getTarget().size(); i++) {
21657      composeReference(t, "Provenance", "target", element.getTarget().get(i), i);
21658    }
21659    if (element.hasOccurred()) {
21660      composeType(t, "Provenance", "occurred", element.getOccurred(), -1);
21661    }
21662    if (element.hasRecordedElement()) {
21663      composeInstant(t, "Provenance", "recorded", element.getRecordedElement(), -1);
21664    }
21665    for (int i = 0; i < element.getPolicy().size(); i++) {
21666      composeUri(t, "Provenance", "policy", element.getPolicy().get(i), i);
21667    }
21668    if (element.hasLocation()) {
21669      composeReference(t, "Provenance", "location", element.getLocation(), -1);
21670    }
21671    for (int i = 0; i < element.getAuthorization().size(); i++) {
21672      composeCodeableReference(t, "Provenance", "authorization", element.getAuthorization().get(i), i);
21673    }
21674    if (element.hasActivity()) {
21675      composeCodeableConcept(t, "Provenance", "activity", element.getActivity(), -1);
21676    }
21677    for (int i = 0; i < element.getBasedOn().size(); i++) {
21678      composeReference(t, "Provenance", "basedOn", element.getBasedOn().get(i), i);
21679    }
21680    if (element.hasPatient()) {
21681      composeReference(t, "Provenance", "patient", element.getPatient(), -1);
21682    }
21683    if (element.hasEncounter()) {
21684      composeReference(t, "Provenance", "encounter", element.getEncounter(), -1);
21685    }
21686    for (int i = 0; i < element.getAgent().size(); i++) {
21687      composeProvenanceAgentComponent(t, "Provenance", "agent", element.getAgent().get(i), i);
21688    }
21689    for (int i = 0; i < element.getEntity().size(); i++) {
21690      composeProvenanceEntityComponent(t, "Provenance", "entity", element.getEntity().get(i), i);
21691    }
21692    for (int i = 0; i < element.getSignature().size(); i++) {
21693      composeSignature(t, "Provenance", "signature", element.getSignature().get(i), i);
21694    }
21695  }
21696
21697  protected void composeProvenanceAgentComponent(Complex parent, String parentType, String name, Provenance.ProvenanceAgentComponent element, int index) {
21698    if (element == null) 
21699      return;
21700    Complex t;
21701    if (Utilities.noString(parentType))
21702      t = parent;
21703    else {
21704      t = parent.predicate("fhir:"+name,index > -1);
21705    }
21706    composeBackboneElement(t, "agent", name, element, index);
21707    if (element.hasType()) {
21708      composeCodeableConcept(t, "ProvenanceAgentComponent", "type", element.getType(), -1);
21709    }
21710    for (int i = 0; i < element.getRole().size(); i++) {
21711      composeCodeableConcept(t, "ProvenanceAgentComponent", "role", element.getRole().get(i), i);
21712    }
21713    if (element.hasWho()) {
21714      composeReference(t, "ProvenanceAgentComponent", "who", element.getWho(), -1);
21715    }
21716    if (element.hasOnBehalfOf()) {
21717      composeReference(t, "ProvenanceAgentComponent", "onBehalfOf", element.getOnBehalfOf(), -1);
21718    }
21719  }
21720
21721  protected void composeProvenanceEntityComponent(Complex parent, String parentType, String name, Provenance.ProvenanceEntityComponent element, int index) {
21722    if (element == null) 
21723      return;
21724    Complex t;
21725    if (Utilities.noString(parentType))
21726      t = parent;
21727    else {
21728      t = parent.predicate("fhir:"+name,index > -1);
21729    }
21730    composeBackboneElement(t, "entity", name, element, index);
21731    if (element.hasRoleElement()) {
21732      composeEnum(t, "ProvenanceEntityComponent", "role", element.getRoleElement(), -1);
21733    }
21734    if (element.hasWhat()) {
21735      composeReference(t, "ProvenanceEntityComponent", "what", element.getWhat(), -1);
21736    }
21737    for (int i = 0; i < element.getAgent().size(); i++) {
21738      composeProvenanceAgentComponent(t, "ProvenanceEntityComponent", "agent", element.getAgent().get(i), i);
21739    }
21740  }
21741
21742  protected void composeQuestionnaire(Complex parent, String parentType, String name, Questionnaire element, int index) {
21743    if (element == null) 
21744      return;
21745    Complex t;
21746    if (Utilities.noString(parentType))
21747      t = parent;
21748    else {
21749      t = parent.predicate("fhir:"+name,index > -1);
21750    }
21751    composeMetadataResource(t, "Questionnaire", name, element, index);
21752    if (element.hasUrlElement()) {
21753      composeUri(t, "Questionnaire", "url", element.getUrlElement(), -1);
21754    }
21755    for (int i = 0; i < element.getIdentifier().size(); i++) {
21756      composeIdentifier(t, "Questionnaire", "identifier", element.getIdentifier().get(i), i);
21757    }
21758    if (element.hasVersionElement()) {
21759      composeString(t, "Questionnaire", "version", element.getVersionElement(), -1);
21760    }
21761    if (element.hasVersionAlgorithm()) {
21762      composeType(t, "Questionnaire", "versionAlgorithm", element.getVersionAlgorithm(), -1);
21763    }
21764    if (element.hasNameElement()) {
21765      composeString(t, "Questionnaire", "name", element.getNameElement(), -1);
21766    }
21767    if (element.hasTitleElement()) {
21768      composeString(t, "Questionnaire", "title", element.getTitleElement(), -1);
21769    }
21770    for (int i = 0; i < element.getDerivedFrom().size(); i++) {
21771      composeCanonical(t, "Questionnaire", "derivedFrom", element.getDerivedFrom().get(i), i);
21772    }
21773    if (element.hasStatusElement()) {
21774      composeEnum(t, "Questionnaire", "status", element.getStatusElement(), -1);
21775    }
21776    if (element.hasExperimentalElement()) {
21777      composeBoolean(t, "Questionnaire", "experimental", element.getExperimentalElement(), -1);
21778    }
21779    for (int i = 0; i < element.getSubjectType().size(); i++) {
21780      composeCode(t, "Questionnaire", "subjectType", element.getSubjectType().get(i), i);
21781    }
21782    if (element.hasDateElement()) {
21783      composeDateTime(t, "Questionnaire", "date", element.getDateElement(), -1);
21784    }
21785    if (element.hasPublisherElement()) {
21786      composeString(t, "Questionnaire", "publisher", element.getPublisherElement(), -1);
21787    }
21788    for (int i = 0; i < element.getContact().size(); i++) {
21789      composeContactDetail(t, "Questionnaire", "contact", element.getContact().get(i), i);
21790    }
21791    if (element.hasDescriptionElement()) {
21792      composeMarkdown(t, "Questionnaire", "description", element.getDescriptionElement(), -1);
21793    }
21794    for (int i = 0; i < element.getUseContext().size(); i++) {
21795      composeUsageContext(t, "Questionnaire", "useContext", element.getUseContext().get(i), i);
21796    }
21797    for (int i = 0; i < element.getJurisdiction().size(); i++) {
21798      composeCodeableConcept(t, "Questionnaire", "jurisdiction", element.getJurisdiction().get(i), i);
21799    }
21800    if (element.hasPurposeElement()) {
21801      composeMarkdown(t, "Questionnaire", "purpose", element.getPurposeElement(), -1);
21802    }
21803    if (element.hasCopyrightElement()) {
21804      composeMarkdown(t, "Questionnaire", "copyright", element.getCopyrightElement(), -1);
21805    }
21806    if (element.hasCopyrightLabelElement()) {
21807      composeString(t, "Questionnaire", "copyrightLabel", element.getCopyrightLabelElement(), -1);
21808    }
21809    if (element.hasApprovalDateElement()) {
21810      composeDate(t, "Questionnaire", "approvalDate", element.getApprovalDateElement(), -1);
21811    }
21812    if (element.hasLastReviewDateElement()) {
21813      composeDate(t, "Questionnaire", "lastReviewDate", element.getLastReviewDateElement(), -1);
21814    }
21815    if (element.hasEffectivePeriod()) {
21816      composePeriod(t, "Questionnaire", "effectivePeriod", element.getEffectivePeriod(), -1);
21817    }
21818    for (int i = 0; i < element.getCode().size(); i++) {
21819      composeCoding(t, "Questionnaire", "code", element.getCode().get(i), i);
21820    }
21821    for (int i = 0; i < element.getItem().size(); i++) {
21822      composeQuestionnaireItemComponent(t, "Questionnaire", "item", element.getItem().get(i), i);
21823    }
21824  }
21825
21826  protected void composeQuestionnaireItemComponent(Complex parent, String parentType, String name, Questionnaire.QuestionnaireItemComponent element, int index) {
21827    if (element == null) 
21828      return;
21829    Complex t;
21830    if (Utilities.noString(parentType))
21831      t = parent;
21832    else {
21833      t = parent.predicate("fhir:"+name,index > -1);
21834    }
21835    composeBackboneElement(t, "item", name, element, index);
21836    if (element.hasLinkIdElement()) {
21837      composeString(t, "QuestionnaireItemComponent", "linkId", element.getLinkIdElement(), -1);
21838    }
21839    if (element.hasDefinitionElement()) {
21840      composeUri(t, "QuestionnaireItemComponent", "definition", element.getDefinitionElement(), -1);
21841    }
21842    for (int i = 0; i < element.getCode().size(); i++) {
21843      composeCoding(t, "QuestionnaireItemComponent", "code", element.getCode().get(i), i);
21844    }
21845    if (element.hasPrefixElement()) {
21846      composeString(t, "QuestionnaireItemComponent", "prefix", element.getPrefixElement(), -1);
21847    }
21848    if (element.hasTextElement()) {
21849      composeString(t, "QuestionnaireItemComponent", "text", element.getTextElement(), -1);
21850    }
21851    if (element.hasTypeElement()) {
21852      composeEnum(t, "QuestionnaireItemComponent", "type", element.getTypeElement(), -1);
21853    }
21854    for (int i = 0; i < element.getEnableWhen().size(); i++) {
21855      composeQuestionnaireItemEnableWhenComponent(t, "QuestionnaireItemComponent", "enableWhen", element.getEnableWhen().get(i), i);
21856    }
21857    if (element.hasEnableBehaviorElement()) {
21858      composeEnum(t, "QuestionnaireItemComponent", "enableBehavior", element.getEnableBehaviorElement(), -1);
21859    }
21860    if (element.hasDisabledDisplayElement()) {
21861      composeEnum(t, "QuestionnaireItemComponent", "disabledDisplay", element.getDisabledDisplayElement(), -1);
21862    }
21863    if (element.hasRequiredElement()) {
21864      composeBoolean(t, "QuestionnaireItemComponent", "required", element.getRequiredElement(), -1);
21865    }
21866    if (element.hasRepeatsElement()) {
21867      composeBoolean(t, "QuestionnaireItemComponent", "repeats", element.getRepeatsElement(), -1);
21868    }
21869    if (element.hasReadOnlyElement()) {
21870      composeBoolean(t, "QuestionnaireItemComponent", "readOnly", element.getReadOnlyElement(), -1);
21871    }
21872    if (element.hasMaxLengthElement()) {
21873      composeInteger(t, "QuestionnaireItemComponent", "maxLength", element.getMaxLengthElement(), -1);
21874    }
21875    if (element.hasAnswerConstraintElement()) {
21876      composeEnum(t, "QuestionnaireItemComponent", "answerConstraint", element.getAnswerConstraintElement(), -1);
21877    }
21878    if (element.hasAnswerValueSetElement()) {
21879      composeCanonical(t, "QuestionnaireItemComponent", "answerValueSet", element.getAnswerValueSetElement(), -1);
21880    }
21881    for (int i = 0; i < element.getAnswerOption().size(); i++) {
21882      composeQuestionnaireItemAnswerOptionComponent(t, "QuestionnaireItemComponent", "answerOption", element.getAnswerOption().get(i), i);
21883    }
21884    for (int i = 0; i < element.getInitial().size(); i++) {
21885      composeQuestionnaireItemInitialComponent(t, "QuestionnaireItemComponent", "initial", element.getInitial().get(i), i);
21886    }
21887    for (int i = 0; i < element.getItem().size(); i++) {
21888      composeQuestionnaireItemComponent(t, "QuestionnaireItemComponent", "item", element.getItem().get(i), i);
21889    }
21890  }
21891
21892  protected void composeQuestionnaireItemEnableWhenComponent(Complex parent, String parentType, String name, Questionnaire.QuestionnaireItemEnableWhenComponent element, int index) {
21893    if (element == null) 
21894      return;
21895    Complex t;
21896    if (Utilities.noString(parentType))
21897      t = parent;
21898    else {
21899      t = parent.predicate("fhir:"+name,index > -1);
21900    }
21901    composeBackboneElement(t, "enableWhen", name, element, index);
21902    if (element.hasQuestionElement()) {
21903      composeString(t, "QuestionnaireItemEnableWhenComponent", "question", element.getQuestionElement(), -1);
21904    }
21905    if (element.hasOperatorElement()) {
21906      composeEnum(t, "QuestionnaireItemEnableWhenComponent", "operator", element.getOperatorElement(), -1);
21907    }
21908    if (element.hasAnswer()) {
21909      composeType(t, "QuestionnaireItemEnableWhenComponent", "answer", element.getAnswer(), -1);
21910    }
21911  }
21912
21913  protected void composeQuestionnaireItemAnswerOptionComponent(Complex parent, String parentType, String name, Questionnaire.QuestionnaireItemAnswerOptionComponent element, int index) {
21914    if (element == null) 
21915      return;
21916    Complex t;
21917    if (Utilities.noString(parentType))
21918      t = parent;
21919    else {
21920      t = parent.predicate("fhir:"+name,index > -1);
21921    }
21922    composeBackboneElement(t, "answerOption", name, element, index);
21923    if (element.hasValue()) {
21924      composeType(t, "QuestionnaireItemAnswerOptionComponent", "value", element.getValue(), -1);
21925    }
21926    if (element.hasInitialSelectedElement()) {
21927      composeBoolean(t, "QuestionnaireItemAnswerOptionComponent", "initialSelected", element.getInitialSelectedElement(), -1);
21928    }
21929  }
21930
21931  protected void composeQuestionnaireItemInitialComponent(Complex parent, String parentType, String name, Questionnaire.QuestionnaireItemInitialComponent element, int index) {
21932    if (element == null) 
21933      return;
21934    Complex t;
21935    if (Utilities.noString(parentType))
21936      t = parent;
21937    else {
21938      t = parent.predicate("fhir:"+name,index > -1);
21939    }
21940    composeBackboneElement(t, "initial", name, element, index);
21941    if (element.hasValue()) {
21942      composeType(t, "QuestionnaireItemInitialComponent", "value", element.getValue(), -1);
21943    }
21944  }
21945
21946  protected void composeQuestionnaireResponse(Complex parent, String parentType, String name, QuestionnaireResponse element, int index) {
21947    if (element == null) 
21948      return;
21949    Complex t;
21950    if (Utilities.noString(parentType))
21951      t = parent;
21952    else {
21953      t = parent.predicate("fhir:"+name,index > -1);
21954    }
21955    composeDomainResource(t, "QuestionnaireResponse", name, element, index);
21956    for (int i = 0; i < element.getIdentifier().size(); i++) {
21957      composeIdentifier(t, "QuestionnaireResponse", "identifier", element.getIdentifier().get(i), i);
21958    }
21959    for (int i = 0; i < element.getBasedOn().size(); i++) {
21960      composeReference(t, "QuestionnaireResponse", "basedOn", element.getBasedOn().get(i), i);
21961    }
21962    for (int i = 0; i < element.getPartOf().size(); i++) {
21963      composeReference(t, "QuestionnaireResponse", "partOf", element.getPartOf().get(i), i);
21964    }
21965    if (element.hasQuestionnaireElement()) {
21966      composeCanonical(t, "QuestionnaireResponse", "questionnaire", element.getQuestionnaireElement(), -1);
21967    }
21968    if (element.hasStatusElement()) {
21969      composeEnum(t, "QuestionnaireResponse", "status", element.getStatusElement(), -1);
21970    }
21971    if (element.hasSubject()) {
21972      composeReference(t, "QuestionnaireResponse", "subject", element.getSubject(), -1);
21973    }
21974    if (element.hasEncounter()) {
21975      composeReference(t, "QuestionnaireResponse", "encounter", element.getEncounter(), -1);
21976    }
21977    if (element.hasAuthoredElement()) {
21978      composeDateTime(t, "QuestionnaireResponse", "authored", element.getAuthoredElement(), -1);
21979    }
21980    if (element.hasAuthor()) {
21981      composeReference(t, "QuestionnaireResponse", "author", element.getAuthor(), -1);
21982    }
21983    if (element.hasSource()) {
21984      composeReference(t, "QuestionnaireResponse", "source", element.getSource(), -1);
21985    }
21986    for (int i = 0; i < element.getItem().size(); i++) {
21987      composeQuestionnaireResponseItemComponent(t, "QuestionnaireResponse", "item", element.getItem().get(i), i);
21988    }
21989  }
21990
21991  protected void composeQuestionnaireResponseItemComponent(Complex parent, String parentType, String name, QuestionnaireResponse.QuestionnaireResponseItemComponent element, int index) {
21992    if (element == null) 
21993      return;
21994    Complex t;
21995    if (Utilities.noString(parentType))
21996      t = parent;
21997    else {
21998      t = parent.predicate("fhir:"+name,index > -1);
21999    }
22000    composeBackboneElement(t, "item", name, element, index);
22001    if (element.hasLinkIdElement()) {
22002      composeString(t, "QuestionnaireResponseItemComponent", "linkId", element.getLinkIdElement(), -1);
22003    }
22004    if (element.hasDefinitionElement()) {
22005      composeUri(t, "QuestionnaireResponseItemComponent", "definition", element.getDefinitionElement(), -1);
22006    }
22007    if (element.hasTextElement()) {
22008      composeString(t, "QuestionnaireResponseItemComponent", "text", element.getTextElement(), -1);
22009    }
22010    for (int i = 0; i < element.getAnswer().size(); i++) {
22011      composeQuestionnaireResponseItemAnswerComponent(t, "QuestionnaireResponseItemComponent", "answer", element.getAnswer().get(i), i);
22012    }
22013    for (int i = 0; i < element.getItem().size(); i++) {
22014      composeQuestionnaireResponseItemComponent(t, "QuestionnaireResponseItemComponent", "item", element.getItem().get(i), i);
22015    }
22016  }
22017
22018  protected void composeQuestionnaireResponseItemAnswerComponent(Complex parent, String parentType, String name, QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent element, int index) {
22019    if (element == null) 
22020      return;
22021    Complex t;
22022    if (Utilities.noString(parentType))
22023      t = parent;
22024    else {
22025      t = parent.predicate("fhir:"+name,index > -1);
22026    }
22027    composeBackboneElement(t, "answer", name, element, index);
22028    if (element.hasValue()) {
22029      composeType(t, "QuestionnaireResponseItemAnswerComponent", "value", element.getValue(), -1);
22030    }
22031    for (int i = 0; i < element.getItem().size(); i++) {
22032      composeQuestionnaireResponseItemComponent(t, "QuestionnaireResponseItemAnswerComponent", "item", element.getItem().get(i), i);
22033    }
22034  }
22035
22036  protected void composeRegulatedAuthorization(Complex parent, String parentType, String name, RegulatedAuthorization element, int index) {
22037    if (element == null) 
22038      return;
22039    Complex t;
22040    if (Utilities.noString(parentType))
22041      t = parent;
22042    else {
22043      t = parent.predicate("fhir:"+name,index > -1);
22044    }
22045    composeDomainResource(t, "RegulatedAuthorization", name, element, index);
22046    for (int i = 0; i < element.getIdentifier().size(); i++) {
22047      composeIdentifier(t, "RegulatedAuthorization", "identifier", element.getIdentifier().get(i), i);
22048    }
22049    for (int i = 0; i < element.getSubject().size(); i++) {
22050      composeReference(t, "RegulatedAuthorization", "subject", element.getSubject().get(i), i);
22051    }
22052    if (element.hasType()) {
22053      composeCodeableConcept(t, "RegulatedAuthorization", "type", element.getType(), -1);
22054    }
22055    if (element.hasDescriptionElement()) {
22056      composeMarkdown(t, "RegulatedAuthorization", "description", element.getDescriptionElement(), -1);
22057    }
22058    for (int i = 0; i < element.getRegion().size(); i++) {
22059      composeCodeableConcept(t, "RegulatedAuthorization", "region", element.getRegion().get(i), i);
22060    }
22061    if (element.hasStatus()) {
22062      composeCodeableConcept(t, "RegulatedAuthorization", "status", element.getStatus(), -1);
22063    }
22064    if (element.hasStatusDateElement()) {
22065      composeDateTime(t, "RegulatedAuthorization", "statusDate", element.getStatusDateElement(), -1);
22066    }
22067    if (element.hasValidityPeriod()) {
22068      composePeriod(t, "RegulatedAuthorization", "validityPeriod", element.getValidityPeriod(), -1);
22069    }
22070    for (int i = 0; i < element.getIndication().size(); i++) {
22071      composeCodeableReference(t, "RegulatedAuthorization", "indication", element.getIndication().get(i), i);
22072    }
22073    if (element.hasIntendedUse()) {
22074      composeCodeableConcept(t, "RegulatedAuthorization", "intendedUse", element.getIntendedUse(), -1);
22075    }
22076    for (int i = 0; i < element.getBasis().size(); i++) {
22077      composeCodeableConcept(t, "RegulatedAuthorization", "basis", element.getBasis().get(i), i);
22078    }
22079    if (element.hasHolder()) {
22080      composeReference(t, "RegulatedAuthorization", "holder", element.getHolder(), -1);
22081    }
22082    if (element.hasRegulator()) {
22083      composeReference(t, "RegulatedAuthorization", "regulator", element.getRegulator(), -1);
22084    }
22085    for (int i = 0; i < element.getAttachedDocument().size(); i++) {
22086      composeReference(t, "RegulatedAuthorization", "attachedDocument", element.getAttachedDocument().get(i), i);
22087    }
22088    if (element.hasCase()) {
22089      composeRegulatedAuthorizationCaseComponent(t, "RegulatedAuthorization", "case", element.getCase(), -1);
22090    }
22091  }
22092
22093  protected void composeRegulatedAuthorizationCaseComponent(Complex parent, String parentType, String name, RegulatedAuthorization.RegulatedAuthorizationCaseComponent element, int index) {
22094    if (element == null) 
22095      return;
22096    Complex t;
22097    if (Utilities.noString(parentType))
22098      t = parent;
22099    else {
22100      t = parent.predicate("fhir:"+name,index > -1);
22101    }
22102    composeBackboneElement(t, "case", name, element, index);
22103    if (element.hasIdentifier()) {
22104      composeIdentifier(t, "RegulatedAuthorizationCaseComponent", "identifier", element.getIdentifier(), -1);
22105    }
22106    if (element.hasType()) {
22107      composeCodeableConcept(t, "RegulatedAuthorizationCaseComponent", "type", element.getType(), -1);
22108    }
22109    if (element.hasStatus()) {
22110      composeCodeableConcept(t, "RegulatedAuthorizationCaseComponent", "status", element.getStatus(), -1);
22111    }
22112    if (element.hasDate()) {
22113      composeType(t, "RegulatedAuthorizationCaseComponent", "date", element.getDate(), -1);
22114    }
22115    for (int i = 0; i < element.getApplication().size(); i++) {
22116      composeRegulatedAuthorizationCaseComponent(t, "RegulatedAuthorizationCaseComponent", "application", element.getApplication().get(i), i);
22117    }
22118  }
22119
22120  protected void composeRelatedPerson(Complex parent, String parentType, String name, RelatedPerson element, int index) {
22121    if (element == null) 
22122      return;
22123    Complex t;
22124    if (Utilities.noString(parentType))
22125      t = parent;
22126    else {
22127      t = parent.predicate("fhir:"+name,index > -1);
22128    }
22129    composeDomainResource(t, "RelatedPerson", name, element, index);
22130    for (int i = 0; i < element.getIdentifier().size(); i++) {
22131      composeIdentifier(t, "RelatedPerson", "identifier", element.getIdentifier().get(i), i);
22132    }
22133    if (element.hasActiveElement()) {
22134      composeBoolean(t, "RelatedPerson", "active", element.getActiveElement(), -1);
22135    }
22136    if (element.hasPatient()) {
22137      composeReference(t, "RelatedPerson", "patient", element.getPatient(), -1);
22138    }
22139    for (int i = 0; i < element.getRelationship().size(); i++) {
22140      composeCodeableConcept(t, "RelatedPerson", "relationship", element.getRelationship().get(i), i);
22141    }
22142    for (int i = 0; i < element.getName().size(); i++) {
22143      composeHumanName(t, "RelatedPerson", "name", element.getName().get(i), i);
22144    }
22145    for (int i = 0; i < element.getTelecom().size(); i++) {
22146      composeContactPoint(t, "RelatedPerson", "telecom", element.getTelecom().get(i), i);
22147    }
22148    if (element.hasGenderElement()) {
22149      composeEnum(t, "RelatedPerson", "gender", element.getGenderElement(), -1);
22150    }
22151    if (element.hasBirthDateElement()) {
22152      composeDate(t, "RelatedPerson", "birthDate", element.getBirthDateElement(), -1);
22153    }
22154    for (int i = 0; i < element.getAddress().size(); i++) {
22155      composeAddress(t, "RelatedPerson", "address", element.getAddress().get(i), i);
22156    }
22157    for (int i = 0; i < element.getPhoto().size(); i++) {
22158      composeAttachment(t, "RelatedPerson", "photo", element.getPhoto().get(i), i);
22159    }
22160    if (element.hasPeriod()) {
22161      composePeriod(t, "RelatedPerson", "period", element.getPeriod(), -1);
22162    }
22163    for (int i = 0; i < element.getCommunication().size(); i++) {
22164      composeRelatedPersonCommunicationComponent(t, "RelatedPerson", "communication", element.getCommunication().get(i), i);
22165    }
22166  }
22167
22168  protected void composeRelatedPersonCommunicationComponent(Complex parent, String parentType, String name, RelatedPerson.RelatedPersonCommunicationComponent element, int index) {
22169    if (element == null) 
22170      return;
22171    Complex t;
22172    if (Utilities.noString(parentType))
22173      t = parent;
22174    else {
22175      t = parent.predicate("fhir:"+name,index > -1);
22176    }
22177    composeBackboneElement(t, "communication", name, element, index);
22178    if (element.hasLanguage()) {
22179      composeCodeableConcept(t, "RelatedPersonCommunicationComponent", "language", element.getLanguage(), -1);
22180    }
22181    if (element.hasPreferredElement()) {
22182      composeBoolean(t, "RelatedPersonCommunicationComponent", "preferred", element.getPreferredElement(), -1);
22183    }
22184  }
22185
22186  protected void composeRequestOrchestration(Complex parent, String parentType, String name, RequestOrchestration element, int index) {
22187    if (element == null) 
22188      return;
22189    Complex t;
22190    if (Utilities.noString(parentType))
22191      t = parent;
22192    else {
22193      t = parent.predicate("fhir:"+name,index > -1);
22194    }
22195    composeDomainResource(t, "RequestOrchestration", name, element, index);
22196    for (int i = 0; i < element.getIdentifier().size(); i++) {
22197      composeIdentifier(t, "RequestOrchestration", "identifier", element.getIdentifier().get(i), i);
22198    }
22199    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
22200      composeCanonical(t, "RequestOrchestration", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
22201    }
22202    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
22203      composeUri(t, "RequestOrchestration", "instantiatesUri", element.getInstantiatesUri().get(i), i);
22204    }
22205    for (int i = 0; i < element.getBasedOn().size(); i++) {
22206      composeReference(t, "RequestOrchestration", "basedOn", element.getBasedOn().get(i), i);
22207    }
22208    for (int i = 0; i < element.getReplaces().size(); i++) {
22209      composeReference(t, "RequestOrchestration", "replaces", element.getReplaces().get(i), i);
22210    }
22211    if (element.hasGroupIdentifier()) {
22212      composeIdentifier(t, "RequestOrchestration", "groupIdentifier", element.getGroupIdentifier(), -1);
22213    }
22214    if (element.hasStatusElement()) {
22215      composeEnum(t, "RequestOrchestration", "status", element.getStatusElement(), -1);
22216    }
22217    if (element.hasIntentElement()) {
22218      composeEnum(t, "RequestOrchestration", "intent", element.getIntentElement(), -1);
22219    }
22220    if (element.hasPriorityElement()) {
22221      composeEnum(t, "RequestOrchestration", "priority", element.getPriorityElement(), -1);
22222    }
22223    if (element.hasCode()) {
22224      composeCodeableConcept(t, "RequestOrchestration", "code", element.getCode(), -1);
22225    }
22226    if (element.hasSubject()) {
22227      composeReference(t, "RequestOrchestration", "subject", element.getSubject(), -1);
22228    }
22229    if (element.hasEncounter()) {
22230      composeReference(t, "RequestOrchestration", "encounter", element.getEncounter(), -1);
22231    }
22232    if (element.hasAuthoredOnElement()) {
22233      composeDateTime(t, "RequestOrchestration", "authoredOn", element.getAuthoredOnElement(), -1);
22234    }
22235    if (element.hasAuthor()) {
22236      composeReference(t, "RequestOrchestration", "author", element.getAuthor(), -1);
22237    }
22238    for (int i = 0; i < element.getReason().size(); i++) {
22239      composeCodeableReference(t, "RequestOrchestration", "reason", element.getReason().get(i), i);
22240    }
22241    for (int i = 0; i < element.getGoal().size(); i++) {
22242      composeReference(t, "RequestOrchestration", "goal", element.getGoal().get(i), i);
22243    }
22244    for (int i = 0; i < element.getNote().size(); i++) {
22245      composeAnnotation(t, "RequestOrchestration", "note", element.getNote().get(i), i);
22246    }
22247    for (int i = 0; i < element.getAction().size(); i++) {
22248      composeRequestOrchestrationActionComponent(t, "RequestOrchestration", "action", element.getAction().get(i), i);
22249    }
22250  }
22251
22252  protected void composeRequestOrchestrationActionComponent(Complex parent, String parentType, String name, RequestOrchestration.RequestOrchestrationActionComponent element, int index) {
22253    if (element == null) 
22254      return;
22255    Complex t;
22256    if (Utilities.noString(parentType))
22257      t = parent;
22258    else {
22259      t = parent.predicate("fhir:"+name,index > -1);
22260    }
22261    composeBackboneElement(t, "action", name, element, index);
22262    if (element.hasLinkIdElement()) {
22263      composeString(t, "RequestOrchestrationActionComponent", "linkId", element.getLinkIdElement(), -1);
22264    }
22265    if (element.hasPrefixElement()) {
22266      composeString(t, "RequestOrchestrationActionComponent", "prefix", element.getPrefixElement(), -1);
22267    }
22268    if (element.hasTitleElement()) {
22269      composeString(t, "RequestOrchestrationActionComponent", "title", element.getTitleElement(), -1);
22270    }
22271    if (element.hasDescriptionElement()) {
22272      composeMarkdown(t, "RequestOrchestrationActionComponent", "description", element.getDescriptionElement(), -1);
22273    }
22274    if (element.hasTextEquivalentElement()) {
22275      composeMarkdown(t, "RequestOrchestrationActionComponent", "textEquivalent", element.getTextEquivalentElement(), -1);
22276    }
22277    if (element.hasPriorityElement()) {
22278      composeEnum(t, "RequestOrchestrationActionComponent", "priority", element.getPriorityElement(), -1);
22279    }
22280    for (int i = 0; i < element.getCode().size(); i++) {
22281      composeCodeableConcept(t, "RequestOrchestrationActionComponent", "code", element.getCode().get(i), i);
22282    }
22283    for (int i = 0; i < element.getDocumentation().size(); i++) {
22284      composeRelatedArtifact(t, "RequestOrchestrationActionComponent", "documentation", element.getDocumentation().get(i), i);
22285    }
22286    for (int i = 0; i < element.getGoal().size(); i++) {
22287      composeReference(t, "RequestOrchestrationActionComponent", "goal", element.getGoal().get(i), i);
22288    }
22289    for (int i = 0; i < element.getCondition().size(); i++) {
22290      composeRequestOrchestrationActionConditionComponent(t, "RequestOrchestrationActionComponent", "condition", element.getCondition().get(i), i);
22291    }
22292    for (int i = 0; i < element.getInput().size(); i++) {
22293      composeRequestOrchestrationActionInputComponent(t, "RequestOrchestrationActionComponent", "input", element.getInput().get(i), i);
22294    }
22295    for (int i = 0; i < element.getOutput().size(); i++) {
22296      composeRequestOrchestrationActionOutputComponent(t, "RequestOrchestrationActionComponent", "output", element.getOutput().get(i), i);
22297    }
22298    for (int i = 0; i < element.getRelatedAction().size(); i++) {
22299      composeRequestOrchestrationActionRelatedActionComponent(t, "RequestOrchestrationActionComponent", "relatedAction", element.getRelatedAction().get(i), i);
22300    }
22301    if (element.hasTiming()) {
22302      composeType(t, "RequestOrchestrationActionComponent", "timing", element.getTiming(), -1);
22303    }
22304    if (element.hasLocation()) {
22305      composeCodeableReference(t, "RequestOrchestrationActionComponent", "location", element.getLocation(), -1);
22306    }
22307    for (int i = 0; i < element.getParticipant().size(); i++) {
22308      composeRequestOrchestrationActionParticipantComponent(t, "RequestOrchestrationActionComponent", "participant", element.getParticipant().get(i), i);
22309    }
22310    if (element.hasType()) {
22311      composeCodeableConcept(t, "RequestOrchestrationActionComponent", "type", element.getType(), -1);
22312    }
22313    if (element.hasGroupingBehaviorElement()) {
22314      composeEnum(t, "RequestOrchestrationActionComponent", "groupingBehavior", element.getGroupingBehaviorElement(), -1);
22315    }
22316    if (element.hasSelectionBehaviorElement()) {
22317      composeEnum(t, "RequestOrchestrationActionComponent", "selectionBehavior", element.getSelectionBehaviorElement(), -1);
22318    }
22319    if (element.hasRequiredBehaviorElement()) {
22320      composeEnum(t, "RequestOrchestrationActionComponent", "requiredBehavior", element.getRequiredBehaviorElement(), -1);
22321    }
22322    if (element.hasPrecheckBehaviorElement()) {
22323      composeEnum(t, "RequestOrchestrationActionComponent", "precheckBehavior", element.getPrecheckBehaviorElement(), -1);
22324    }
22325    if (element.hasCardinalityBehaviorElement()) {
22326      composeEnum(t, "RequestOrchestrationActionComponent", "cardinalityBehavior", element.getCardinalityBehaviorElement(), -1);
22327    }
22328    if (element.hasResource()) {
22329      composeReference(t, "RequestOrchestrationActionComponent", "resource", element.getResource(), -1);
22330    }
22331    if (element.hasDefinition()) {
22332      composeType(t, "RequestOrchestrationActionComponent", "definition", element.getDefinition(), -1);
22333    }
22334    if (element.hasTransformElement()) {
22335      composeCanonical(t, "RequestOrchestrationActionComponent", "transform", element.getTransformElement(), -1);
22336    }
22337    for (int i = 0; i < element.getDynamicValue().size(); i++) {
22338      composeRequestOrchestrationActionDynamicValueComponent(t, "RequestOrchestrationActionComponent", "dynamicValue", element.getDynamicValue().get(i), i);
22339    }
22340    for (int i = 0; i < element.getAction().size(); i++) {
22341      composeRequestOrchestrationActionComponent(t, "RequestOrchestrationActionComponent", "action", element.getAction().get(i), i);
22342    }
22343  }
22344
22345  protected void composeRequestOrchestrationActionConditionComponent(Complex parent, String parentType, String name, RequestOrchestration.RequestOrchestrationActionConditionComponent element, int index) {
22346    if (element == null) 
22347      return;
22348    Complex t;
22349    if (Utilities.noString(parentType))
22350      t = parent;
22351    else {
22352      t = parent.predicate("fhir:"+name,index > -1);
22353    }
22354    composeBackboneElement(t, "condition", name, element, index);
22355    if (element.hasKindElement()) {
22356      composeEnum(t, "RequestOrchestrationActionConditionComponent", "kind", element.getKindElement(), -1);
22357    }
22358    if (element.hasExpression()) {
22359      composeExpression(t, "RequestOrchestrationActionConditionComponent", "expression", element.getExpression(), -1);
22360    }
22361  }
22362
22363  protected void composeRequestOrchestrationActionInputComponent(Complex parent, String parentType, String name, RequestOrchestration.RequestOrchestrationActionInputComponent element, int index) {
22364    if (element == null) 
22365      return;
22366    Complex t;
22367    if (Utilities.noString(parentType))
22368      t = parent;
22369    else {
22370      t = parent.predicate("fhir:"+name,index > -1);
22371    }
22372    composeBackboneElement(t, "input", name, element, index);
22373    if (element.hasTitleElement()) {
22374      composeString(t, "RequestOrchestrationActionInputComponent", "title", element.getTitleElement(), -1);
22375    }
22376    if (element.hasRequirement()) {
22377      composeDataRequirement(t, "RequestOrchestrationActionInputComponent", "requirement", element.getRequirement(), -1);
22378    }
22379    if (element.hasRelatedDataElement()) {
22380      composeId(t, "RequestOrchestrationActionInputComponent", "relatedData", element.getRelatedDataElement(), -1);
22381    }
22382  }
22383
22384  protected void composeRequestOrchestrationActionOutputComponent(Complex parent, String parentType, String name, RequestOrchestration.RequestOrchestrationActionOutputComponent element, int index) {
22385    if (element == null) 
22386      return;
22387    Complex t;
22388    if (Utilities.noString(parentType))
22389      t = parent;
22390    else {
22391      t = parent.predicate("fhir:"+name,index > -1);
22392    }
22393    composeBackboneElement(t, "output", name, element, index);
22394    if (element.hasTitleElement()) {
22395      composeString(t, "RequestOrchestrationActionOutputComponent", "title", element.getTitleElement(), -1);
22396    }
22397    if (element.hasRequirement()) {
22398      composeDataRequirement(t, "RequestOrchestrationActionOutputComponent", "requirement", element.getRequirement(), -1);
22399    }
22400    if (element.hasRelatedDataElement()) {
22401      composeString(t, "RequestOrchestrationActionOutputComponent", "relatedData", element.getRelatedDataElement(), -1);
22402    }
22403  }
22404
22405  protected void composeRequestOrchestrationActionRelatedActionComponent(Complex parent, String parentType, String name, RequestOrchestration.RequestOrchestrationActionRelatedActionComponent element, int index) {
22406    if (element == null) 
22407      return;
22408    Complex t;
22409    if (Utilities.noString(parentType))
22410      t = parent;
22411    else {
22412      t = parent.predicate("fhir:"+name,index > -1);
22413    }
22414    composeBackboneElement(t, "relatedAction", name, element, index);
22415    if (element.hasTargetIdElement()) {
22416      composeId(t, "RequestOrchestrationActionRelatedActionComponent", "targetId", element.getTargetIdElement(), -1);
22417    }
22418    if (element.hasRelationshipElement()) {
22419      composeEnum(t, "RequestOrchestrationActionRelatedActionComponent", "relationship", element.getRelationshipElement(), -1);
22420    }
22421    if (element.hasEndRelationshipElement()) {
22422      composeEnum(t, "RequestOrchestrationActionRelatedActionComponent", "endRelationship", element.getEndRelationshipElement(), -1);
22423    }
22424    if (element.hasOffset()) {
22425      composeType(t, "RequestOrchestrationActionRelatedActionComponent", "offset", element.getOffset(), -1);
22426    }
22427  }
22428
22429  protected void composeRequestOrchestrationActionParticipantComponent(Complex parent, String parentType, String name, RequestOrchestration.RequestOrchestrationActionParticipantComponent element, int index) {
22430    if (element == null) 
22431      return;
22432    Complex t;
22433    if (Utilities.noString(parentType))
22434      t = parent;
22435    else {
22436      t = parent.predicate("fhir:"+name,index > -1);
22437    }
22438    composeBackboneElement(t, "participant", name, element, index);
22439    if (element.hasTypeElement()) {
22440      composeEnum(t, "RequestOrchestrationActionParticipantComponent", "type", element.getTypeElement(), -1);
22441    }
22442    if (element.hasTypeCanonicalElement()) {
22443      composeCanonical(t, "RequestOrchestrationActionParticipantComponent", "typeCanonical", element.getTypeCanonicalElement(), -1);
22444    }
22445    if (element.hasTypeReference()) {
22446      composeReference(t, "RequestOrchestrationActionParticipantComponent", "typeReference", element.getTypeReference(), -1);
22447    }
22448    if (element.hasRole()) {
22449      composeCodeableConcept(t, "RequestOrchestrationActionParticipantComponent", "role", element.getRole(), -1);
22450    }
22451    if (element.hasFunction()) {
22452      composeCodeableConcept(t, "RequestOrchestrationActionParticipantComponent", "function", element.getFunction(), -1);
22453    }
22454    if (element.hasActor()) {
22455      composeType(t, "RequestOrchestrationActionParticipantComponent", "actor", element.getActor(), -1);
22456    }
22457  }
22458
22459  protected void composeRequestOrchestrationActionDynamicValueComponent(Complex parent, String parentType, String name, RequestOrchestration.RequestOrchestrationActionDynamicValueComponent element, int index) {
22460    if (element == null) 
22461      return;
22462    Complex t;
22463    if (Utilities.noString(parentType))
22464      t = parent;
22465    else {
22466      t = parent.predicate("fhir:"+name,index > -1);
22467    }
22468    composeBackboneElement(t, "dynamicValue", name, element, index);
22469    if (element.hasPathElement()) {
22470      composeString(t, "RequestOrchestrationActionDynamicValueComponent", "path", element.getPathElement(), -1);
22471    }
22472    if (element.hasExpression()) {
22473      composeExpression(t, "RequestOrchestrationActionDynamicValueComponent", "expression", element.getExpression(), -1);
22474    }
22475  }
22476
22477  protected void composeRequirements(Complex parent, String parentType, String name, Requirements element, int index) {
22478    if (element == null) 
22479      return;
22480    Complex t;
22481    if (Utilities.noString(parentType))
22482      t = parent;
22483    else {
22484      t = parent.predicate("fhir:"+name,index > -1);
22485    }
22486    composeCanonicalResource(t, "Requirements", name, element, index);
22487    if (element.hasUrlElement()) {
22488      composeUri(t, "Requirements", "url", element.getUrlElement(), -1);
22489    }
22490    for (int i = 0; i < element.getIdentifier().size(); i++) {
22491      composeIdentifier(t, "Requirements", "identifier", element.getIdentifier().get(i), i);
22492    }
22493    if (element.hasVersionElement()) {
22494      composeString(t, "Requirements", "version", element.getVersionElement(), -1);
22495    }
22496    if (element.hasVersionAlgorithm()) {
22497      composeType(t, "Requirements", "versionAlgorithm", element.getVersionAlgorithm(), -1);
22498    }
22499    if (element.hasNameElement()) {
22500      composeString(t, "Requirements", "name", element.getNameElement(), -1);
22501    }
22502    if (element.hasTitleElement()) {
22503      composeString(t, "Requirements", "title", element.getTitleElement(), -1);
22504    }
22505    if (element.hasStatusElement()) {
22506      composeEnum(t, "Requirements", "status", element.getStatusElement(), -1);
22507    }
22508    if (element.hasExperimentalElement()) {
22509      composeBoolean(t, "Requirements", "experimental", element.getExperimentalElement(), -1);
22510    }
22511    if (element.hasDateElement()) {
22512      composeDateTime(t, "Requirements", "date", element.getDateElement(), -1);
22513    }
22514    if (element.hasPublisherElement()) {
22515      composeString(t, "Requirements", "publisher", element.getPublisherElement(), -1);
22516    }
22517    for (int i = 0; i < element.getContact().size(); i++) {
22518      composeContactDetail(t, "Requirements", "contact", element.getContact().get(i), i);
22519    }
22520    if (element.hasDescriptionElement()) {
22521      composeMarkdown(t, "Requirements", "description", element.getDescriptionElement(), -1);
22522    }
22523    for (int i = 0; i < element.getUseContext().size(); i++) {
22524      composeUsageContext(t, "Requirements", "useContext", element.getUseContext().get(i), i);
22525    }
22526    for (int i = 0; i < element.getJurisdiction().size(); i++) {
22527      composeCodeableConcept(t, "Requirements", "jurisdiction", element.getJurisdiction().get(i), i);
22528    }
22529    if (element.hasPurposeElement()) {
22530      composeMarkdown(t, "Requirements", "purpose", element.getPurposeElement(), -1);
22531    }
22532    if (element.hasCopyrightElement()) {
22533      composeMarkdown(t, "Requirements", "copyright", element.getCopyrightElement(), -1);
22534    }
22535    if (element.hasCopyrightLabelElement()) {
22536      composeString(t, "Requirements", "copyrightLabel", element.getCopyrightLabelElement(), -1);
22537    }
22538    for (int i = 0; i < element.getDerivedFrom().size(); i++) {
22539      composeCanonical(t, "Requirements", "derivedFrom", element.getDerivedFrom().get(i), i);
22540    }
22541    for (int i = 0; i < element.getReference().size(); i++) {
22542      composeUrl(t, "Requirements", "reference", element.getReference().get(i), i);
22543    }
22544    for (int i = 0; i < element.getActor().size(); i++) {
22545      composeCanonical(t, "Requirements", "actor", element.getActor().get(i), i);
22546    }
22547    for (int i = 0; i < element.getStatement().size(); i++) {
22548      composeRequirementsStatementComponent(t, "Requirements", "statement", element.getStatement().get(i), i);
22549    }
22550  }
22551
22552  protected void composeRequirementsStatementComponent(Complex parent, String parentType, String name, Requirements.RequirementsStatementComponent element, int index) {
22553    if (element == null) 
22554      return;
22555    Complex t;
22556    if (Utilities.noString(parentType))
22557      t = parent;
22558    else {
22559      t = parent.predicate("fhir:"+name,index > -1);
22560    }
22561    composeBackboneElement(t, "statement", name, element, index);
22562    if (element.hasKeyElement()) {
22563      composeId(t, "RequirementsStatementComponent", "key", element.getKeyElement(), -1);
22564    }
22565    if (element.hasLabelElement()) {
22566      composeString(t, "RequirementsStatementComponent", "label", element.getLabelElement(), -1);
22567    }
22568    for (int i = 0; i < element.getConformance().size(); i++) {
22569      composeEnum(t, "RequirementsStatementComponent", "conformance", element.getConformance().get(i), i);
22570    }
22571    if (element.hasConditionalityElement()) {
22572      composeBoolean(t, "RequirementsStatementComponent", "conditionality", element.getConditionalityElement(), -1);
22573    }
22574    if (element.hasRequirementElement()) {
22575      composeMarkdown(t, "RequirementsStatementComponent", "requirement", element.getRequirementElement(), -1);
22576    }
22577    if (element.hasDerivedFromElement()) {
22578      composeString(t, "RequirementsStatementComponent", "derivedFrom", element.getDerivedFromElement(), -1);
22579    }
22580    if (element.hasParentElement()) {
22581      composeString(t, "RequirementsStatementComponent", "parent", element.getParentElement(), -1);
22582    }
22583    for (int i = 0; i < element.getSatisfiedBy().size(); i++) {
22584      composeUrl(t, "RequirementsStatementComponent", "satisfiedBy", element.getSatisfiedBy().get(i), i);
22585    }
22586    for (int i = 0; i < element.getReference().size(); i++) {
22587      composeUrl(t, "RequirementsStatementComponent", "reference", element.getReference().get(i), i);
22588    }
22589    for (int i = 0; i < element.getSource().size(); i++) {
22590      composeReference(t, "RequirementsStatementComponent", "source", element.getSource().get(i), i);
22591    }
22592  }
22593
22594  protected void composeResearchStudy(Complex parent, String parentType, String name, ResearchStudy element, int index) {
22595    if (element == null) 
22596      return;
22597    Complex t;
22598    if (Utilities.noString(parentType))
22599      t = parent;
22600    else {
22601      t = parent.predicate("fhir:"+name,index > -1);
22602    }
22603    composeDomainResource(t, "ResearchStudy", name, element, index);
22604    if (element.hasUrlElement()) {
22605      composeUri(t, "ResearchStudy", "url", element.getUrlElement(), -1);
22606    }
22607    for (int i = 0; i < element.getIdentifier().size(); i++) {
22608      composeIdentifier(t, "ResearchStudy", "identifier", element.getIdentifier().get(i), i);
22609    }
22610    if (element.hasVersionElement()) {
22611      composeString(t, "ResearchStudy", "version", element.getVersionElement(), -1);
22612    }
22613    if (element.hasNameElement()) {
22614      composeString(t, "ResearchStudy", "name", element.getNameElement(), -1);
22615    }
22616    if (element.hasTitleElement()) {
22617      composeString(t, "ResearchStudy", "title", element.getTitleElement(), -1);
22618    }
22619    for (int i = 0; i < element.getLabel().size(); i++) {
22620      composeResearchStudyLabelComponent(t, "ResearchStudy", "label", element.getLabel().get(i), i);
22621    }
22622    for (int i = 0; i < element.getProtocol().size(); i++) {
22623      composeReference(t, "ResearchStudy", "protocol", element.getProtocol().get(i), i);
22624    }
22625    for (int i = 0; i < element.getPartOf().size(); i++) {
22626      composeReference(t, "ResearchStudy", "partOf", element.getPartOf().get(i), i);
22627    }
22628    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
22629      composeRelatedArtifact(t, "ResearchStudy", "relatedArtifact", element.getRelatedArtifact().get(i), i);
22630    }
22631    if (element.hasDateElement()) {
22632      composeDateTime(t, "ResearchStudy", "date", element.getDateElement(), -1);
22633    }
22634    if (element.hasStatusElement()) {
22635      composeEnum(t, "ResearchStudy", "status", element.getStatusElement(), -1);
22636    }
22637    if (element.hasPrimaryPurposeType()) {
22638      composeCodeableConcept(t, "ResearchStudy", "primaryPurposeType", element.getPrimaryPurposeType(), -1);
22639    }
22640    if (element.hasPhase()) {
22641      composeCodeableConcept(t, "ResearchStudy", "phase", element.getPhase(), -1);
22642    }
22643    for (int i = 0; i < element.getStudyDesign().size(); i++) {
22644      composeCodeableConcept(t, "ResearchStudy", "studyDesign", element.getStudyDesign().get(i), i);
22645    }
22646    for (int i = 0; i < element.getFocus().size(); i++) {
22647      composeCodeableReference(t, "ResearchStudy", "focus", element.getFocus().get(i), i);
22648    }
22649    for (int i = 0; i < element.getCondition().size(); i++) {
22650      composeCodeableConcept(t, "ResearchStudy", "condition", element.getCondition().get(i), i);
22651    }
22652    for (int i = 0; i < element.getKeyword().size(); i++) {
22653      composeCodeableConcept(t, "ResearchStudy", "keyword", element.getKeyword().get(i), i);
22654    }
22655    for (int i = 0; i < element.getRegion().size(); i++) {
22656      composeCodeableConcept(t, "ResearchStudy", "region", element.getRegion().get(i), i);
22657    }
22658    if (element.hasDescriptionSummaryElement()) {
22659      composeMarkdown(t, "ResearchStudy", "descriptionSummary", element.getDescriptionSummaryElement(), -1);
22660    }
22661    if (element.hasDescriptionElement()) {
22662      composeMarkdown(t, "ResearchStudy", "description", element.getDescriptionElement(), -1);
22663    }
22664    if (element.hasPeriod()) {
22665      composePeriod(t, "ResearchStudy", "period", element.getPeriod(), -1);
22666    }
22667    for (int i = 0; i < element.getSite().size(); i++) {
22668      composeReference(t, "ResearchStudy", "site", element.getSite().get(i), i);
22669    }
22670    for (int i = 0; i < element.getNote().size(); i++) {
22671      composeAnnotation(t, "ResearchStudy", "note", element.getNote().get(i), i);
22672    }
22673    for (int i = 0; i < element.getClassifier().size(); i++) {
22674      composeCodeableConcept(t, "ResearchStudy", "classifier", element.getClassifier().get(i), i);
22675    }
22676    for (int i = 0; i < element.getAssociatedParty().size(); i++) {
22677      composeResearchStudyAssociatedPartyComponent(t, "ResearchStudy", "associatedParty", element.getAssociatedParty().get(i), i);
22678    }
22679    for (int i = 0; i < element.getProgressStatus().size(); i++) {
22680      composeResearchStudyProgressStatusComponent(t, "ResearchStudy", "progressStatus", element.getProgressStatus().get(i), i);
22681    }
22682    if (element.hasWhyStopped()) {
22683      composeCodeableConcept(t, "ResearchStudy", "whyStopped", element.getWhyStopped(), -1);
22684    }
22685    if (element.hasRecruitment()) {
22686      composeResearchStudyRecruitmentComponent(t, "ResearchStudy", "recruitment", element.getRecruitment(), -1);
22687    }
22688    for (int i = 0; i < element.getComparisonGroup().size(); i++) {
22689      composeResearchStudyComparisonGroupComponent(t, "ResearchStudy", "comparisonGroup", element.getComparisonGroup().get(i), i);
22690    }
22691    for (int i = 0; i < element.getObjective().size(); i++) {
22692      composeResearchStudyObjectiveComponent(t, "ResearchStudy", "objective", element.getObjective().get(i), i);
22693    }
22694    for (int i = 0; i < element.getOutcomeMeasure().size(); i++) {
22695      composeResearchStudyOutcomeMeasureComponent(t, "ResearchStudy", "outcomeMeasure", element.getOutcomeMeasure().get(i), i);
22696    }
22697    for (int i = 0; i < element.getResult().size(); i++) {
22698      composeReference(t, "ResearchStudy", "result", element.getResult().get(i), i);
22699    }
22700  }
22701
22702  protected void composeResearchStudyLabelComponent(Complex parent, String parentType, String name, ResearchStudy.ResearchStudyLabelComponent element, int index) {
22703    if (element == null) 
22704      return;
22705    Complex t;
22706    if (Utilities.noString(parentType))
22707      t = parent;
22708    else {
22709      t = parent.predicate("fhir:"+name,index > -1);
22710    }
22711    composeBackboneElement(t, "label", name, element, index);
22712    if (element.hasType()) {
22713      composeCodeableConcept(t, "ResearchStudyLabelComponent", "type", element.getType(), -1);
22714    }
22715    if (element.hasValueElement()) {
22716      composeString(t, "ResearchStudyLabelComponent", "value", element.getValueElement(), -1);
22717    }
22718  }
22719
22720  protected void composeResearchStudyAssociatedPartyComponent(Complex parent, String parentType, String name, ResearchStudy.ResearchStudyAssociatedPartyComponent element, int index) {
22721    if (element == null) 
22722      return;
22723    Complex t;
22724    if (Utilities.noString(parentType))
22725      t = parent;
22726    else {
22727      t = parent.predicate("fhir:"+name,index > -1);
22728    }
22729    composeBackboneElement(t, "associatedParty", name, element, index);
22730    if (element.hasNameElement()) {
22731      composeString(t, "ResearchStudyAssociatedPartyComponent", "name", element.getNameElement(), -1);
22732    }
22733    if (element.hasRole()) {
22734      composeCodeableConcept(t, "ResearchStudyAssociatedPartyComponent", "role", element.getRole(), -1);
22735    }
22736    for (int i = 0; i < element.getPeriod().size(); i++) {
22737      composePeriod(t, "ResearchStudyAssociatedPartyComponent", "period", element.getPeriod().get(i), i);
22738    }
22739    for (int i = 0; i < element.getClassifier().size(); i++) {
22740      composeCodeableConcept(t, "ResearchStudyAssociatedPartyComponent", "classifier", element.getClassifier().get(i), i);
22741    }
22742    if (element.hasParty()) {
22743      composeReference(t, "ResearchStudyAssociatedPartyComponent", "party", element.getParty(), -1);
22744    }
22745  }
22746
22747  protected void composeResearchStudyProgressStatusComponent(Complex parent, String parentType, String name, ResearchStudy.ResearchStudyProgressStatusComponent element, int index) {
22748    if (element == null) 
22749      return;
22750    Complex t;
22751    if (Utilities.noString(parentType))
22752      t = parent;
22753    else {
22754      t = parent.predicate("fhir:"+name,index > -1);
22755    }
22756    composeBackboneElement(t, "progressStatus", name, element, index);
22757    if (element.hasState()) {
22758      composeCodeableConcept(t, "ResearchStudyProgressStatusComponent", "state", element.getState(), -1);
22759    }
22760    if (element.hasActualElement()) {
22761      composeBoolean(t, "ResearchStudyProgressStatusComponent", "actual", element.getActualElement(), -1);
22762    }
22763    if (element.hasPeriod()) {
22764      composePeriod(t, "ResearchStudyProgressStatusComponent", "period", element.getPeriod(), -1);
22765    }
22766  }
22767
22768  protected void composeResearchStudyRecruitmentComponent(Complex parent, String parentType, String name, ResearchStudy.ResearchStudyRecruitmentComponent element, int index) {
22769    if (element == null) 
22770      return;
22771    Complex t;
22772    if (Utilities.noString(parentType))
22773      t = parent;
22774    else {
22775      t = parent.predicate("fhir:"+name,index > -1);
22776    }
22777    composeBackboneElement(t, "recruitment", name, element, index);
22778    if (element.hasTargetNumberElement()) {
22779      composeUnsignedInt(t, "ResearchStudyRecruitmentComponent", "targetNumber", element.getTargetNumberElement(), -1);
22780    }
22781    if (element.hasActualNumberElement()) {
22782      composeUnsignedInt(t, "ResearchStudyRecruitmentComponent", "actualNumber", element.getActualNumberElement(), -1);
22783    }
22784    if (element.hasEligibility()) {
22785      composeReference(t, "ResearchStudyRecruitmentComponent", "eligibility", element.getEligibility(), -1);
22786    }
22787    if (element.hasActualGroup()) {
22788      composeReference(t, "ResearchStudyRecruitmentComponent", "actualGroup", element.getActualGroup(), -1);
22789    }
22790  }
22791
22792  protected void composeResearchStudyComparisonGroupComponent(Complex parent, String parentType, String name, ResearchStudy.ResearchStudyComparisonGroupComponent element, int index) {
22793    if (element == null) 
22794      return;
22795    Complex t;
22796    if (Utilities.noString(parentType))
22797      t = parent;
22798    else {
22799      t = parent.predicate("fhir:"+name,index > -1);
22800    }
22801    composeBackboneElement(t, "comparisonGroup", name, element, index);
22802    if (element.hasLinkIdElement()) {
22803      composeId(t, "ResearchStudyComparisonGroupComponent", "linkId", element.getLinkIdElement(), -1);
22804    }
22805    if (element.hasNameElement()) {
22806      composeString(t, "ResearchStudyComparisonGroupComponent", "name", element.getNameElement(), -1);
22807    }
22808    if (element.hasType()) {
22809      composeCodeableConcept(t, "ResearchStudyComparisonGroupComponent", "type", element.getType(), -1);
22810    }
22811    if (element.hasDescriptionElement()) {
22812      composeMarkdown(t, "ResearchStudyComparisonGroupComponent", "description", element.getDescriptionElement(), -1);
22813    }
22814    for (int i = 0; i < element.getIntendedExposure().size(); i++) {
22815      composeReference(t, "ResearchStudyComparisonGroupComponent", "intendedExposure", element.getIntendedExposure().get(i), i);
22816    }
22817    if (element.hasObservedGroup()) {
22818      composeReference(t, "ResearchStudyComparisonGroupComponent", "observedGroup", element.getObservedGroup(), -1);
22819    }
22820  }
22821
22822  protected void composeResearchStudyObjectiveComponent(Complex parent, String parentType, String name, ResearchStudy.ResearchStudyObjectiveComponent element, int index) {
22823    if (element == null) 
22824      return;
22825    Complex t;
22826    if (Utilities.noString(parentType))
22827      t = parent;
22828    else {
22829      t = parent.predicate("fhir:"+name,index > -1);
22830    }
22831    composeBackboneElement(t, "objective", name, element, index);
22832    if (element.hasNameElement()) {
22833      composeString(t, "ResearchStudyObjectiveComponent", "name", element.getNameElement(), -1);
22834    }
22835    if (element.hasType()) {
22836      composeCodeableConcept(t, "ResearchStudyObjectiveComponent", "type", element.getType(), -1);
22837    }
22838    if (element.hasDescriptionElement()) {
22839      composeMarkdown(t, "ResearchStudyObjectiveComponent", "description", element.getDescriptionElement(), -1);
22840    }
22841  }
22842
22843  protected void composeResearchStudyOutcomeMeasureComponent(Complex parent, String parentType, String name, ResearchStudy.ResearchStudyOutcomeMeasureComponent element, int index) {
22844    if (element == null) 
22845      return;
22846    Complex t;
22847    if (Utilities.noString(parentType))
22848      t = parent;
22849    else {
22850      t = parent.predicate("fhir:"+name,index > -1);
22851    }
22852    composeBackboneElement(t, "outcomeMeasure", name, element, index);
22853    if (element.hasNameElement()) {
22854      composeString(t, "ResearchStudyOutcomeMeasureComponent", "name", element.getNameElement(), -1);
22855    }
22856    for (int i = 0; i < element.getType().size(); i++) {
22857      composeCodeableConcept(t, "ResearchStudyOutcomeMeasureComponent", "type", element.getType().get(i), i);
22858    }
22859    if (element.hasDescriptionElement()) {
22860      composeMarkdown(t, "ResearchStudyOutcomeMeasureComponent", "description", element.getDescriptionElement(), -1);
22861    }
22862    if (element.hasReference()) {
22863      composeReference(t, "ResearchStudyOutcomeMeasureComponent", "reference", element.getReference(), -1);
22864    }
22865  }
22866
22867  protected void composeResearchSubject(Complex parent, String parentType, String name, ResearchSubject element, int index) {
22868    if (element == null) 
22869      return;
22870    Complex t;
22871    if (Utilities.noString(parentType))
22872      t = parent;
22873    else {
22874      t = parent.predicate("fhir:"+name,index > -1);
22875    }
22876    composeDomainResource(t, "ResearchSubject", name, element, index);
22877    for (int i = 0; i < element.getIdentifier().size(); i++) {
22878      composeIdentifier(t, "ResearchSubject", "identifier", element.getIdentifier().get(i), i);
22879    }
22880    if (element.hasStatusElement()) {
22881      composeEnum(t, "ResearchSubject", "status", element.getStatusElement(), -1);
22882    }
22883    for (int i = 0; i < element.getProgress().size(); i++) {
22884      composeResearchSubjectProgressComponent(t, "ResearchSubject", "progress", element.getProgress().get(i), i);
22885    }
22886    if (element.hasPeriod()) {
22887      composePeriod(t, "ResearchSubject", "period", element.getPeriod(), -1);
22888    }
22889    if (element.hasStudy()) {
22890      composeReference(t, "ResearchSubject", "study", element.getStudy(), -1);
22891    }
22892    if (element.hasSubject()) {
22893      composeReference(t, "ResearchSubject", "subject", element.getSubject(), -1);
22894    }
22895    if (element.hasAssignedComparisonGroupElement()) {
22896      composeId(t, "ResearchSubject", "assignedComparisonGroup", element.getAssignedComparisonGroupElement(), -1);
22897    }
22898    if (element.hasActualComparisonGroupElement()) {
22899      composeId(t, "ResearchSubject", "actualComparisonGroup", element.getActualComparisonGroupElement(), -1);
22900    }
22901    for (int i = 0; i < element.getConsent().size(); i++) {
22902      composeReference(t, "ResearchSubject", "consent", element.getConsent().get(i), i);
22903    }
22904  }
22905
22906  protected void composeResearchSubjectProgressComponent(Complex parent, String parentType, String name, ResearchSubject.ResearchSubjectProgressComponent element, int index) {
22907    if (element == null) 
22908      return;
22909    Complex t;
22910    if (Utilities.noString(parentType))
22911      t = parent;
22912    else {
22913      t = parent.predicate("fhir:"+name,index > -1);
22914    }
22915    composeBackboneElement(t, "progress", name, element, index);
22916    if (element.hasType()) {
22917      composeCodeableConcept(t, "ResearchSubjectProgressComponent", "type", element.getType(), -1);
22918    }
22919    if (element.hasSubjectState()) {
22920      composeCodeableConcept(t, "ResearchSubjectProgressComponent", "subjectState", element.getSubjectState(), -1);
22921    }
22922    if (element.hasMilestone()) {
22923      composeCodeableConcept(t, "ResearchSubjectProgressComponent", "milestone", element.getMilestone(), -1);
22924    }
22925    if (element.hasReason()) {
22926      composeCodeableConcept(t, "ResearchSubjectProgressComponent", "reason", element.getReason(), -1);
22927    }
22928    if (element.hasStartDateElement()) {
22929      composeDateTime(t, "ResearchSubjectProgressComponent", "startDate", element.getStartDateElement(), -1);
22930    }
22931    if (element.hasEndDateElement()) {
22932      composeDateTime(t, "ResearchSubjectProgressComponent", "endDate", element.getEndDateElement(), -1);
22933    }
22934  }
22935
22936  protected void composeRiskAssessment(Complex parent, String parentType, String name, RiskAssessment 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:"+name,index > -1);
22944    }
22945    composeDomainResource(t, "RiskAssessment", name, element, index);
22946    for (int i = 0; i < element.getIdentifier().size(); i++) {
22947      composeIdentifier(t, "RiskAssessment", "identifier", element.getIdentifier().get(i), i);
22948    }
22949    if (element.hasBasedOn()) {
22950      composeReference(t, "RiskAssessment", "basedOn", element.getBasedOn(), -1);
22951    }
22952    if (element.hasParent()) {
22953      composeReference(t, "RiskAssessment", "parent", element.getParent(), -1);
22954    }
22955    if (element.hasStatusElement()) {
22956      composeEnum(t, "RiskAssessment", "status", element.getStatusElement(), -1);
22957    }
22958    if (element.hasMethod()) {
22959      composeCodeableConcept(t, "RiskAssessment", "method", element.getMethod(), -1);
22960    }
22961    if (element.hasCode()) {
22962      composeCodeableConcept(t, "RiskAssessment", "code", element.getCode(), -1);
22963    }
22964    if (element.hasSubject()) {
22965      composeReference(t, "RiskAssessment", "subject", element.getSubject(), -1);
22966    }
22967    if (element.hasEncounter()) {
22968      composeReference(t, "RiskAssessment", "encounter", element.getEncounter(), -1);
22969    }
22970    if (element.hasOccurrence()) {
22971      composeType(t, "RiskAssessment", "occurrence", element.getOccurrence(), -1);
22972    }
22973    if (element.hasCondition()) {
22974      composeReference(t, "RiskAssessment", "condition", element.getCondition(), -1);
22975    }
22976    if (element.hasPerformer()) {
22977      composeReference(t, "RiskAssessment", "performer", element.getPerformer(), -1);
22978    }
22979    for (int i = 0; i < element.getReason().size(); i++) {
22980      composeCodeableReference(t, "RiskAssessment", "reason", element.getReason().get(i), i);
22981    }
22982    for (int i = 0; i < element.getBasis().size(); i++) {
22983      composeReference(t, "RiskAssessment", "basis", element.getBasis().get(i), i);
22984    }
22985    for (int i = 0; i < element.getPrediction().size(); i++) {
22986      composeRiskAssessmentPredictionComponent(t, "RiskAssessment", "prediction", element.getPrediction().get(i), i);
22987    }
22988    if (element.hasMitigationElement()) {
22989      composeString(t, "RiskAssessment", "mitigation", element.getMitigationElement(), -1);
22990    }
22991    for (int i = 0; i < element.getNote().size(); i++) {
22992      composeAnnotation(t, "RiskAssessment", "note", element.getNote().get(i), i);
22993    }
22994  }
22995
22996  protected void composeRiskAssessmentPredictionComponent(Complex parent, String parentType, String name, RiskAssessment.RiskAssessmentPredictionComponent element, int index) {
22997    if (element == null) 
22998      return;
22999    Complex t;
23000    if (Utilities.noString(parentType))
23001      t = parent;
23002    else {
23003      t = parent.predicate("fhir:"+name,index > -1);
23004    }
23005    composeBackboneElement(t, "prediction", name, element, index);
23006    if (element.hasOutcome()) {
23007      composeCodeableConcept(t, "RiskAssessmentPredictionComponent", "outcome", element.getOutcome(), -1);
23008    }
23009    if (element.hasProbability()) {
23010      composeType(t, "RiskAssessmentPredictionComponent", "probability", element.getProbability(), -1);
23011    }
23012    if (element.hasQualitativeRisk()) {
23013      composeCodeableConcept(t, "RiskAssessmentPredictionComponent", "qualitativeRisk", element.getQualitativeRisk(), -1);
23014    }
23015    if (element.hasRelativeRiskElement()) {
23016      composeDecimal(t, "RiskAssessmentPredictionComponent", "relativeRisk", element.getRelativeRiskElement(), -1);
23017    }
23018    if (element.hasWhen()) {
23019      composeType(t, "RiskAssessmentPredictionComponent", "when", element.getWhen(), -1);
23020    }
23021    if (element.hasRationaleElement()) {
23022      composeString(t, "RiskAssessmentPredictionComponent", "rationale", element.getRationaleElement(), -1);
23023    }
23024  }
23025
23026  protected void composeSchedule(Complex parent, String parentType, String name, Schedule element, int index) {
23027    if (element == null) 
23028      return;
23029    Complex t;
23030    if (Utilities.noString(parentType))
23031      t = parent;
23032    else {
23033      t = parent.predicate("fhir:"+name,index > -1);
23034    }
23035    composeDomainResource(t, "Schedule", name, element, index);
23036    for (int i = 0; i < element.getIdentifier().size(); i++) {
23037      composeIdentifier(t, "Schedule", "identifier", element.getIdentifier().get(i), i);
23038    }
23039    if (element.hasActiveElement()) {
23040      composeBoolean(t, "Schedule", "active", element.getActiveElement(), -1);
23041    }
23042    for (int i = 0; i < element.getServiceCategory().size(); i++) {
23043      composeCodeableConcept(t, "Schedule", "serviceCategory", element.getServiceCategory().get(i), i);
23044    }
23045    for (int i = 0; i < element.getServiceType().size(); i++) {
23046      composeCodeableReference(t, "Schedule", "serviceType", element.getServiceType().get(i), i);
23047    }
23048    for (int i = 0; i < element.getSpecialty().size(); i++) {
23049      composeCodeableConcept(t, "Schedule", "specialty", element.getSpecialty().get(i), i);
23050    }
23051    if (element.hasNameElement()) {
23052      composeString(t, "Schedule", "name", element.getNameElement(), -1);
23053    }
23054    for (int i = 0; i < element.getActor().size(); i++) {
23055      composeReference(t, "Schedule", "actor", element.getActor().get(i), i);
23056    }
23057    if (element.hasPlanningHorizon()) {
23058      composePeriod(t, "Schedule", "planningHorizon", element.getPlanningHorizon(), -1);
23059    }
23060    if (element.hasCommentElement()) {
23061      composeMarkdown(t, "Schedule", "comment", element.getCommentElement(), -1);
23062    }
23063  }
23064
23065  protected void composeSearchParameter(Complex parent, String parentType, String name, SearchParameter element, int index) {
23066    if (element == null) 
23067      return;
23068    Complex t;
23069    if (Utilities.noString(parentType))
23070      t = parent;
23071    else {
23072      t = parent.predicate("fhir:"+name,index > -1);
23073    }
23074    composeCanonicalResource(t, "SearchParameter", name, element, index);
23075    if (element.hasUrlElement()) {
23076      composeUri(t, "SearchParameter", "url", element.getUrlElement(), -1);
23077    }
23078    for (int i = 0; i < element.getIdentifier().size(); i++) {
23079      composeIdentifier(t, "SearchParameter", "identifier", element.getIdentifier().get(i), i);
23080    }
23081    if (element.hasVersionElement()) {
23082      composeString(t, "SearchParameter", "version", element.getVersionElement(), -1);
23083    }
23084    if (element.hasVersionAlgorithm()) {
23085      composeType(t, "SearchParameter", "versionAlgorithm", element.getVersionAlgorithm(), -1);
23086    }
23087    if (element.hasNameElement()) {
23088      composeString(t, "SearchParameter", "name", element.getNameElement(), -1);
23089    }
23090    if (element.hasTitleElement()) {
23091      composeString(t, "SearchParameter", "title", element.getTitleElement(), -1);
23092    }
23093    if (element.hasDerivedFromElement()) {
23094      composeCanonical(t, "SearchParameter", "derivedFrom", element.getDerivedFromElement(), -1);
23095    }
23096    if (element.hasStatusElement()) {
23097      composeEnum(t, "SearchParameter", "status", element.getStatusElement(), -1);
23098    }
23099    if (element.hasExperimentalElement()) {
23100      composeBoolean(t, "SearchParameter", "experimental", element.getExperimentalElement(), -1);
23101    }
23102    if (element.hasDateElement()) {
23103      composeDateTime(t, "SearchParameter", "date", element.getDateElement(), -1);
23104    }
23105    if (element.hasPublisherElement()) {
23106      composeString(t, "SearchParameter", "publisher", element.getPublisherElement(), -1);
23107    }
23108    for (int i = 0; i < element.getContact().size(); i++) {
23109      composeContactDetail(t, "SearchParameter", "contact", element.getContact().get(i), i);
23110    }
23111    if (element.hasDescriptionElement()) {
23112      composeMarkdown(t, "SearchParameter", "description", element.getDescriptionElement(), -1);
23113    }
23114    for (int i = 0; i < element.getUseContext().size(); i++) {
23115      composeUsageContext(t, "SearchParameter", "useContext", element.getUseContext().get(i), i);
23116    }
23117    for (int i = 0; i < element.getJurisdiction().size(); i++) {
23118      composeCodeableConcept(t, "SearchParameter", "jurisdiction", element.getJurisdiction().get(i), i);
23119    }
23120    if (element.hasPurposeElement()) {
23121      composeMarkdown(t, "SearchParameter", "purpose", element.getPurposeElement(), -1);
23122    }
23123    if (element.hasCopyrightElement()) {
23124      composeMarkdown(t, "SearchParameter", "copyright", element.getCopyrightElement(), -1);
23125    }
23126    if (element.hasCopyrightLabelElement()) {
23127      composeString(t, "SearchParameter", "copyrightLabel", element.getCopyrightLabelElement(), -1);
23128    }
23129    if (element.hasCodeElement()) {
23130      composeCode(t, "SearchParameter", "code", element.getCodeElement(), -1);
23131    }
23132    for (int i = 0; i < element.getBase().size(); i++) {
23133      composeEnum(t, "SearchParameter", "base", element.getBase().get(i), i);
23134    }
23135    if (element.hasTypeElement()) {
23136      composeEnum(t, "SearchParameter", "type", element.getTypeElement(), -1);
23137    }
23138    if (element.hasExpressionElement()) {
23139      composeString(t, "SearchParameter", "expression", element.getExpressionElement(), -1);
23140    }
23141    if (element.hasProcessingModeElement()) {
23142      composeEnum(t, "SearchParameter", "processingMode", element.getProcessingModeElement(), -1);
23143    }
23144    if (element.hasConstraintElement()) {
23145      composeString(t, "SearchParameter", "constraint", element.getConstraintElement(), -1);
23146    }
23147    for (int i = 0; i < element.getTarget().size(); i++) {
23148      composeEnum(t, "SearchParameter", "target", element.getTarget().get(i), i);
23149    }
23150    if (element.hasMultipleOrElement()) {
23151      composeBoolean(t, "SearchParameter", "multipleOr", element.getMultipleOrElement(), -1);
23152    }
23153    if (element.hasMultipleAndElement()) {
23154      composeBoolean(t, "SearchParameter", "multipleAnd", element.getMultipleAndElement(), -1);
23155    }
23156    for (int i = 0; i < element.getComparator().size(); i++) {
23157      composeEnum(t, "SearchParameter", "comparator", element.getComparator().get(i), i);
23158    }
23159    for (int i = 0; i < element.getModifier().size(); i++) {
23160      composeEnum(t, "SearchParameter", "modifier", element.getModifier().get(i), i);
23161    }
23162    for (int i = 0; i < element.getChain().size(); i++) {
23163      composeString(t, "SearchParameter", "chain", element.getChain().get(i), i);
23164    }
23165    for (int i = 0; i < element.getComponent().size(); i++) {
23166      composeSearchParameterComponentComponent(t, "SearchParameter", "component", element.getComponent().get(i), i);
23167    }
23168  }
23169
23170  protected void composeSearchParameterComponentComponent(Complex parent, String parentType, String name, SearchParameter.SearchParameterComponentComponent element, int index) {
23171    if (element == null) 
23172      return;
23173    Complex t;
23174    if (Utilities.noString(parentType))
23175      t = parent;
23176    else {
23177      t = parent.predicate("fhir:"+name,index > -1);
23178    }
23179    composeBackboneElement(t, "component", name, element, index);
23180    if (element.hasDefinitionElement()) {
23181      composeCanonical(t, "SearchParameterComponentComponent", "definition", element.getDefinitionElement(), -1);
23182    }
23183    if (element.hasExpressionElement()) {
23184      composeString(t, "SearchParameterComponentComponent", "expression", element.getExpressionElement(), -1);
23185    }
23186  }
23187
23188  protected void composeServiceRequest(Complex parent, String parentType, String name, ServiceRequest element, int index) {
23189    if (element == null) 
23190      return;
23191    Complex t;
23192    if (Utilities.noString(parentType))
23193      t = parent;
23194    else {
23195      t = parent.predicate("fhir:"+name,index > -1);
23196    }
23197    composeDomainResource(t, "ServiceRequest", name, element, index);
23198    for (int i = 0; i < element.getIdentifier().size(); i++) {
23199      composeIdentifier(t, "ServiceRequest", "identifier", element.getIdentifier().get(i), i);
23200    }
23201    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
23202      composeCanonical(t, "ServiceRequest", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
23203    }
23204    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
23205      composeUri(t, "ServiceRequest", "instantiatesUri", element.getInstantiatesUri().get(i), i);
23206    }
23207    for (int i = 0; i < element.getBasedOn().size(); i++) {
23208      composeReference(t, "ServiceRequest", "basedOn", element.getBasedOn().get(i), i);
23209    }
23210    for (int i = 0; i < element.getReplaces().size(); i++) {
23211      composeReference(t, "ServiceRequest", "replaces", element.getReplaces().get(i), i);
23212    }
23213    if (element.hasRequisition()) {
23214      composeIdentifier(t, "ServiceRequest", "requisition", element.getRequisition(), -1);
23215    }
23216    if (element.hasStatusElement()) {
23217      composeEnum(t, "ServiceRequest", "status", element.getStatusElement(), -1);
23218    }
23219    if (element.hasIntentElement()) {
23220      composeEnum(t, "ServiceRequest", "intent", element.getIntentElement(), -1);
23221    }
23222    for (int i = 0; i < element.getCategory().size(); i++) {
23223      composeCodeableConcept(t, "ServiceRequest", "category", element.getCategory().get(i), i);
23224    }
23225    if (element.hasPriorityElement()) {
23226      composeEnum(t, "ServiceRequest", "priority", element.getPriorityElement(), -1);
23227    }
23228    if (element.hasDoNotPerformElement()) {
23229      composeBoolean(t, "ServiceRequest", "doNotPerform", element.getDoNotPerformElement(), -1);
23230    }
23231    if (element.hasCode()) {
23232      composeCodeableReference(t, "ServiceRequest", "code", element.getCode(), -1);
23233    }
23234    for (int i = 0; i < element.getOrderDetail().size(); i++) {
23235      composeServiceRequestOrderDetailComponent(t, "ServiceRequest", "orderDetail", element.getOrderDetail().get(i), i);
23236    }
23237    if (element.hasQuantity()) {
23238      composeType(t, "ServiceRequest", "quantity", element.getQuantity(), -1);
23239    }
23240    if (element.hasSubject()) {
23241      composeReference(t, "ServiceRequest", "subject", element.getSubject(), -1);
23242    }
23243    for (int i = 0; i < element.getFocus().size(); i++) {
23244      composeReference(t, "ServiceRequest", "focus", element.getFocus().get(i), i);
23245    }
23246    if (element.hasEncounter()) {
23247      composeReference(t, "ServiceRequest", "encounter", element.getEncounter(), -1);
23248    }
23249    if (element.hasOccurrence()) {
23250      composeType(t, "ServiceRequest", "occurrence", element.getOccurrence(), -1);
23251    }
23252    if (element.hasAsNeeded()) {
23253      composeType(t, "ServiceRequest", "asNeeded", element.getAsNeeded(), -1);
23254    }
23255    if (element.hasAuthoredOnElement()) {
23256      composeDateTime(t, "ServiceRequest", "authoredOn", element.getAuthoredOnElement(), -1);
23257    }
23258    if (element.hasRequester()) {
23259      composeReference(t, "ServiceRequest", "requester", element.getRequester(), -1);
23260    }
23261    if (element.hasPerformerType()) {
23262      composeCodeableConcept(t, "ServiceRequest", "performerType", element.getPerformerType(), -1);
23263    }
23264    for (int i = 0; i < element.getPerformer().size(); i++) {
23265      composeReference(t, "ServiceRequest", "performer", element.getPerformer().get(i), i);
23266    }
23267    for (int i = 0; i < element.getLocation().size(); i++) {
23268      composeCodeableReference(t, "ServiceRequest", "location", element.getLocation().get(i), i);
23269    }
23270    for (int i = 0; i < element.getReason().size(); i++) {
23271      composeCodeableReference(t, "ServiceRequest", "reason", element.getReason().get(i), i);
23272    }
23273    for (int i = 0; i < element.getInsurance().size(); i++) {
23274      composeReference(t, "ServiceRequest", "insurance", element.getInsurance().get(i), i);
23275    }
23276    for (int i = 0; i < element.getSupportingInfo().size(); i++) {
23277      composeCodeableReference(t, "ServiceRequest", "supportingInfo", element.getSupportingInfo().get(i), i);
23278    }
23279    for (int i = 0; i < element.getSpecimen().size(); i++) {
23280      composeReference(t, "ServiceRequest", "specimen", element.getSpecimen().get(i), i);
23281    }
23282    for (int i = 0; i < element.getBodySite().size(); i++) {
23283      composeCodeableConcept(t, "ServiceRequest", "bodySite", element.getBodySite().get(i), i);
23284    }
23285    if (element.hasBodyStructure()) {
23286      composeReference(t, "ServiceRequest", "bodyStructure", element.getBodyStructure(), -1);
23287    }
23288    for (int i = 0; i < element.getNote().size(); i++) {
23289      composeAnnotation(t, "ServiceRequest", "note", element.getNote().get(i), i);
23290    }
23291    for (int i = 0; i < element.getPatientInstruction().size(); i++) {
23292      composeServiceRequestPatientInstructionComponent(t, "ServiceRequest", "patientInstruction", element.getPatientInstruction().get(i), i);
23293    }
23294    for (int i = 0; i < element.getRelevantHistory().size(); i++) {
23295      composeReference(t, "ServiceRequest", "relevantHistory", element.getRelevantHistory().get(i), i);
23296    }
23297  }
23298
23299  protected void composeServiceRequestOrderDetailComponent(Complex parent, String parentType, String name, ServiceRequest.ServiceRequestOrderDetailComponent element, int index) {
23300    if (element == null) 
23301      return;
23302    Complex t;
23303    if (Utilities.noString(parentType))
23304      t = parent;
23305    else {
23306      t = parent.predicate("fhir:"+name,index > -1);
23307    }
23308    composeBackboneElement(t, "orderDetail", name, element, index);
23309    if (element.hasParameterFocus()) {
23310      composeCodeableReference(t, "ServiceRequestOrderDetailComponent", "parameterFocus", element.getParameterFocus(), -1);
23311    }
23312    for (int i = 0; i < element.getParameter().size(); i++) {
23313      composeServiceRequestOrderDetailParameterComponent(t, "ServiceRequestOrderDetailComponent", "parameter", element.getParameter().get(i), i);
23314    }
23315  }
23316
23317  protected void composeServiceRequestOrderDetailParameterComponent(Complex parent, String parentType, String name, ServiceRequest.ServiceRequestOrderDetailParameterComponent element, int index) {
23318    if (element == null) 
23319      return;
23320    Complex t;
23321    if (Utilities.noString(parentType))
23322      t = parent;
23323    else {
23324      t = parent.predicate("fhir:"+name,index > -1);
23325    }
23326    composeBackboneElement(t, "parameter", name, element, index);
23327    if (element.hasCode()) {
23328      composeCodeableConcept(t, "ServiceRequestOrderDetailParameterComponent", "code", element.getCode(), -1);
23329    }
23330    if (element.hasValue()) {
23331      composeType(t, "ServiceRequestOrderDetailParameterComponent", "value", element.getValue(), -1);
23332    }
23333  }
23334
23335  protected void composeServiceRequestPatientInstructionComponent(Complex parent, String parentType, String name, ServiceRequest.ServiceRequestPatientInstructionComponent element, int index) {
23336    if (element == null) 
23337      return;
23338    Complex t;
23339    if (Utilities.noString(parentType))
23340      t = parent;
23341    else {
23342      t = parent.predicate("fhir:"+name,index > -1);
23343    }
23344    composeBackboneElement(t, "patientInstruction", name, element, index);
23345    if (element.hasInstruction()) {
23346      composeType(t, "ServiceRequestPatientInstructionComponent", "instruction", element.getInstruction(), -1);
23347    }
23348  }
23349
23350  protected void composeSlot(Complex parent, String parentType, String name, Slot element, int index) {
23351    if (element == null) 
23352      return;
23353    Complex t;
23354    if (Utilities.noString(parentType))
23355      t = parent;
23356    else {
23357      t = parent.predicate("fhir:"+name,index > -1);
23358    }
23359    composeDomainResource(t, "Slot", name, element, index);
23360    for (int i = 0; i < element.getIdentifier().size(); i++) {
23361      composeIdentifier(t, "Slot", "identifier", element.getIdentifier().get(i), i);
23362    }
23363    for (int i = 0; i < element.getServiceCategory().size(); i++) {
23364      composeCodeableConcept(t, "Slot", "serviceCategory", element.getServiceCategory().get(i), i);
23365    }
23366    for (int i = 0; i < element.getServiceType().size(); i++) {
23367      composeCodeableReference(t, "Slot", "serviceType", element.getServiceType().get(i), i);
23368    }
23369    for (int i = 0; i < element.getSpecialty().size(); i++) {
23370      composeCodeableConcept(t, "Slot", "specialty", element.getSpecialty().get(i), i);
23371    }
23372    for (int i = 0; i < element.getAppointmentType().size(); i++) {
23373      composeCodeableConcept(t, "Slot", "appointmentType", element.getAppointmentType().get(i), i);
23374    }
23375    if (element.hasSchedule()) {
23376      composeReference(t, "Slot", "schedule", element.getSchedule(), -1);
23377    }
23378    if (element.hasStatusElement()) {
23379      composeEnum(t, "Slot", "status", element.getStatusElement(), -1);
23380    }
23381    if (element.hasStartElement()) {
23382      composeInstant(t, "Slot", "start", element.getStartElement(), -1);
23383    }
23384    if (element.hasEndElement()) {
23385      composeInstant(t, "Slot", "end", element.getEndElement(), -1);
23386    }
23387    if (element.hasOverbookedElement()) {
23388      composeBoolean(t, "Slot", "overbooked", element.getOverbookedElement(), -1);
23389    }
23390    if (element.hasCommentElement()) {
23391      composeString(t, "Slot", "comment", element.getCommentElement(), -1);
23392    }
23393  }
23394
23395  protected void composeSpecimen(Complex parent, String parentType, String name, Specimen element, int index) {
23396    if (element == null) 
23397      return;
23398    Complex t;
23399    if (Utilities.noString(parentType))
23400      t = parent;
23401    else {
23402      t = parent.predicate("fhir:"+name,index > -1);
23403    }
23404    composeDomainResource(t, "Specimen", name, element, index);
23405    for (int i = 0; i < element.getIdentifier().size(); i++) {
23406      composeIdentifier(t, "Specimen", "identifier", element.getIdentifier().get(i), i);
23407    }
23408    if (element.hasAccessionIdentifier()) {
23409      composeIdentifier(t, "Specimen", "accessionIdentifier", element.getAccessionIdentifier(), -1);
23410    }
23411    if (element.hasStatusElement()) {
23412      composeEnum(t, "Specimen", "status", element.getStatusElement(), -1);
23413    }
23414    if (element.hasType()) {
23415      composeCodeableConcept(t, "Specimen", "type", element.getType(), -1);
23416    }
23417    if (element.hasSubject()) {
23418      composeReference(t, "Specimen", "subject", element.getSubject(), -1);
23419    }
23420    if (element.hasReceivedTimeElement()) {
23421      composeDateTime(t, "Specimen", "receivedTime", element.getReceivedTimeElement(), -1);
23422    }
23423    for (int i = 0; i < element.getParent().size(); i++) {
23424      composeReference(t, "Specimen", "parent", element.getParent().get(i), i);
23425    }
23426    for (int i = 0; i < element.getRequest().size(); i++) {
23427      composeReference(t, "Specimen", "request", element.getRequest().get(i), i);
23428    }
23429    if (element.hasCombinedElement()) {
23430      composeEnum(t, "Specimen", "combined", element.getCombinedElement(), -1);
23431    }
23432    for (int i = 0; i < element.getRole().size(); i++) {
23433      composeCodeableConcept(t, "Specimen", "role", element.getRole().get(i), i);
23434    }
23435    for (int i = 0; i < element.getFeature().size(); i++) {
23436      composeSpecimenFeatureComponent(t, "Specimen", "feature", element.getFeature().get(i), i);
23437    }
23438    if (element.hasCollection()) {
23439      composeSpecimenCollectionComponent(t, "Specimen", "collection", element.getCollection(), -1);
23440    }
23441    for (int i = 0; i < element.getProcessing().size(); i++) {
23442      composeSpecimenProcessingComponent(t, "Specimen", "processing", element.getProcessing().get(i), i);
23443    }
23444    for (int i = 0; i < element.getContainer().size(); i++) {
23445      composeSpecimenContainerComponent(t, "Specimen", "container", element.getContainer().get(i), i);
23446    }
23447    for (int i = 0; i < element.getCondition().size(); i++) {
23448      composeCodeableConcept(t, "Specimen", "condition", element.getCondition().get(i), i);
23449    }
23450    for (int i = 0; i < element.getNote().size(); i++) {
23451      composeAnnotation(t, "Specimen", "note", element.getNote().get(i), i);
23452    }
23453  }
23454
23455  protected void composeSpecimenFeatureComponent(Complex parent, String parentType, String name, Specimen.SpecimenFeatureComponent element, int index) {
23456    if (element == null) 
23457      return;
23458    Complex t;
23459    if (Utilities.noString(parentType))
23460      t = parent;
23461    else {
23462      t = parent.predicate("fhir:"+name,index > -1);
23463    }
23464    composeBackboneElement(t, "feature", name, element, index);
23465    if (element.hasType()) {
23466      composeCodeableConcept(t, "SpecimenFeatureComponent", "type", element.getType(), -1);
23467    }
23468    if (element.hasDescriptionElement()) {
23469      composeString(t, "SpecimenFeatureComponent", "description", element.getDescriptionElement(), -1);
23470    }
23471  }
23472
23473  protected void composeSpecimenCollectionComponent(Complex parent, String parentType, String name, Specimen.SpecimenCollectionComponent element, int index) {
23474    if (element == null) 
23475      return;
23476    Complex t;
23477    if (Utilities.noString(parentType))
23478      t = parent;
23479    else {
23480      t = parent.predicate("fhir:"+name,index > -1);
23481    }
23482    composeBackboneElement(t, "collection", name, element, index);
23483    if (element.hasCollector()) {
23484      composeReference(t, "SpecimenCollectionComponent", "collector", element.getCollector(), -1);
23485    }
23486    if (element.hasCollected()) {
23487      composeType(t, "SpecimenCollectionComponent", "collected", element.getCollected(), -1);
23488    }
23489    if (element.hasDuration()) {
23490      composeDuration(t, "SpecimenCollectionComponent", "duration", element.getDuration(), -1);
23491    }
23492    if (element.hasQuantity()) {
23493      composeQuantity(t, "SpecimenCollectionComponent", "quantity", element.getQuantity(), -1);
23494    }
23495    if (element.hasMethod()) {
23496      composeCodeableConcept(t, "SpecimenCollectionComponent", "method", element.getMethod(), -1);
23497    }
23498    if (element.hasDevice()) {
23499      composeCodeableReference(t, "SpecimenCollectionComponent", "device", element.getDevice(), -1);
23500    }
23501    if (element.hasProcedure()) {
23502      composeReference(t, "SpecimenCollectionComponent", "procedure", element.getProcedure(), -1);
23503    }
23504    if (element.hasBodySite()) {
23505      composeCodeableReference(t, "SpecimenCollectionComponent", "bodySite", element.getBodySite(), -1);
23506    }
23507    if (element.hasFastingStatus()) {
23508      composeType(t, "SpecimenCollectionComponent", "fastingStatus", element.getFastingStatus(), -1);
23509    }
23510  }
23511
23512  protected void composeSpecimenProcessingComponent(Complex parent, String parentType, String name, Specimen.SpecimenProcessingComponent element, int index) {
23513    if (element == null) 
23514      return;
23515    Complex t;
23516    if (Utilities.noString(parentType))
23517      t = parent;
23518    else {
23519      t = parent.predicate("fhir:"+name,index > -1);
23520    }
23521    composeBackboneElement(t, "processing", name, element, index);
23522    if (element.hasDescriptionElement()) {
23523      composeString(t, "SpecimenProcessingComponent", "description", element.getDescriptionElement(), -1);
23524    }
23525    if (element.hasMethod()) {
23526      composeCodeableConcept(t, "SpecimenProcessingComponent", "method", element.getMethod(), -1);
23527    }
23528    for (int i = 0; i < element.getAdditive().size(); i++) {
23529      composeReference(t, "SpecimenProcessingComponent", "additive", element.getAdditive().get(i), i);
23530    }
23531    if (element.hasTime()) {
23532      composeType(t, "SpecimenProcessingComponent", "time", element.getTime(), -1);
23533    }
23534  }
23535
23536  protected void composeSpecimenContainerComponent(Complex parent, String parentType, String name, Specimen.SpecimenContainerComponent element, int index) {
23537    if (element == null) 
23538      return;
23539    Complex t;
23540    if (Utilities.noString(parentType))
23541      t = parent;
23542    else {
23543      t = parent.predicate("fhir:"+name,index > -1);
23544    }
23545    composeBackboneElement(t, "container", name, element, index);
23546    if (element.hasDevice()) {
23547      composeReference(t, "SpecimenContainerComponent", "device", element.getDevice(), -1);
23548    }
23549    if (element.hasLocation()) {
23550      composeReference(t, "SpecimenContainerComponent", "location", element.getLocation(), -1);
23551    }
23552    if (element.hasSpecimenQuantity()) {
23553      composeQuantity(t, "SpecimenContainerComponent", "specimenQuantity", element.getSpecimenQuantity(), -1);
23554    }
23555  }
23556
23557  protected void composeSpecimenDefinition(Complex parent, String parentType, String name, SpecimenDefinition element, int index) {
23558    if (element == null) 
23559      return;
23560    Complex t;
23561    if (Utilities.noString(parentType))
23562      t = parent;
23563    else {
23564      t = parent.predicate("fhir:"+name,index > -1);
23565    }
23566    composeDomainResource(t, "SpecimenDefinition", name, element, index);
23567    if (element.hasUrlElement()) {
23568      composeUri(t, "SpecimenDefinition", "url", element.getUrlElement(), -1);
23569    }
23570    if (element.hasIdentifier()) {
23571      composeIdentifier(t, "SpecimenDefinition", "identifier", element.getIdentifier(), -1);
23572    }
23573    if (element.hasVersionElement()) {
23574      composeString(t, "SpecimenDefinition", "version", element.getVersionElement(), -1);
23575    }
23576    if (element.hasVersionAlgorithm()) {
23577      composeType(t, "SpecimenDefinition", "versionAlgorithm", element.getVersionAlgorithm(), -1);
23578    }
23579    if (element.hasNameElement()) {
23580      composeString(t, "SpecimenDefinition", "name", element.getNameElement(), -1);
23581    }
23582    if (element.hasTitleElement()) {
23583      composeString(t, "SpecimenDefinition", "title", element.getTitleElement(), -1);
23584    }
23585    for (int i = 0; i < element.getDerivedFromCanonical().size(); i++) {
23586      composeCanonical(t, "SpecimenDefinition", "derivedFromCanonical", element.getDerivedFromCanonical().get(i), i);
23587    }
23588    for (int i = 0; i < element.getDerivedFromUri().size(); i++) {
23589      composeUri(t, "SpecimenDefinition", "derivedFromUri", element.getDerivedFromUri().get(i), i);
23590    }
23591    if (element.hasStatusElement()) {
23592      composeEnum(t, "SpecimenDefinition", "status", element.getStatusElement(), -1);
23593    }
23594    if (element.hasExperimentalElement()) {
23595      composeBoolean(t, "SpecimenDefinition", "experimental", element.getExperimentalElement(), -1);
23596    }
23597    if (element.hasSubject()) {
23598      composeType(t, "SpecimenDefinition", "subject", element.getSubject(), -1);
23599    }
23600    if (element.hasDateElement()) {
23601      composeDateTime(t, "SpecimenDefinition", "date", element.getDateElement(), -1);
23602    }
23603    if (element.hasPublisherElement()) {
23604      composeString(t, "SpecimenDefinition", "publisher", element.getPublisherElement(), -1);
23605    }
23606    for (int i = 0; i < element.getContact().size(); i++) {
23607      composeContactDetail(t, "SpecimenDefinition", "contact", element.getContact().get(i), i);
23608    }
23609    if (element.hasDescriptionElement()) {
23610      composeMarkdown(t, "SpecimenDefinition", "description", element.getDescriptionElement(), -1);
23611    }
23612    for (int i = 0; i < element.getUseContext().size(); i++) {
23613      composeUsageContext(t, "SpecimenDefinition", "useContext", element.getUseContext().get(i), i);
23614    }
23615    for (int i = 0; i < element.getJurisdiction().size(); i++) {
23616      composeCodeableConcept(t, "SpecimenDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
23617    }
23618    if (element.hasPurposeElement()) {
23619      composeMarkdown(t, "SpecimenDefinition", "purpose", element.getPurposeElement(), -1);
23620    }
23621    if (element.hasCopyrightElement()) {
23622      composeMarkdown(t, "SpecimenDefinition", "copyright", element.getCopyrightElement(), -1);
23623    }
23624    if (element.hasCopyrightLabelElement()) {
23625      composeString(t, "SpecimenDefinition", "copyrightLabel", element.getCopyrightLabelElement(), -1);
23626    }
23627    if (element.hasApprovalDateElement()) {
23628      composeDate(t, "SpecimenDefinition", "approvalDate", element.getApprovalDateElement(), -1);
23629    }
23630    if (element.hasLastReviewDateElement()) {
23631      composeDate(t, "SpecimenDefinition", "lastReviewDate", element.getLastReviewDateElement(), -1);
23632    }
23633    if (element.hasEffectivePeriod()) {
23634      composePeriod(t, "SpecimenDefinition", "effectivePeriod", element.getEffectivePeriod(), -1);
23635    }
23636    if (element.hasTypeCollected()) {
23637      composeCodeableConcept(t, "SpecimenDefinition", "typeCollected", element.getTypeCollected(), -1);
23638    }
23639    for (int i = 0; i < element.getPatientPreparation().size(); i++) {
23640      composeCodeableConcept(t, "SpecimenDefinition", "patientPreparation", element.getPatientPreparation().get(i), i);
23641    }
23642    if (element.hasTimeAspectElement()) {
23643      composeString(t, "SpecimenDefinition", "timeAspect", element.getTimeAspectElement(), -1);
23644    }
23645    for (int i = 0; i < element.getCollection().size(); i++) {
23646      composeCodeableConcept(t, "SpecimenDefinition", "collection", element.getCollection().get(i), i);
23647    }
23648    for (int i = 0; i < element.getTypeTested().size(); i++) {
23649      composeSpecimenDefinitionTypeTestedComponent(t, "SpecimenDefinition", "typeTested", element.getTypeTested().get(i), i);
23650    }
23651  }
23652
23653  protected void composeSpecimenDefinitionTypeTestedComponent(Complex parent, String parentType, String name, SpecimenDefinition.SpecimenDefinitionTypeTestedComponent element, int index) {
23654    if (element == null) 
23655      return;
23656    Complex t;
23657    if (Utilities.noString(parentType))
23658      t = parent;
23659    else {
23660      t = parent.predicate("fhir:"+name,index > -1);
23661    }
23662    composeBackboneElement(t, "typeTested", name, element, index);
23663    if (element.hasIsDerivedElement()) {
23664      composeBoolean(t, "SpecimenDefinitionTypeTestedComponent", "isDerived", element.getIsDerivedElement(), -1);
23665    }
23666    if (element.hasType()) {
23667      composeCodeableConcept(t, "SpecimenDefinitionTypeTestedComponent", "type", element.getType(), -1);
23668    }
23669    if (element.hasPreferenceElement()) {
23670      composeEnum(t, "SpecimenDefinitionTypeTestedComponent", "preference", element.getPreferenceElement(), -1);
23671    }
23672    if (element.hasContainer()) {
23673      composeSpecimenDefinitionTypeTestedContainerComponent(t, "SpecimenDefinitionTypeTestedComponent", "container", element.getContainer(), -1);
23674    }
23675    if (element.hasRequirementElement()) {
23676      composeMarkdown(t, "SpecimenDefinitionTypeTestedComponent", "requirement", element.getRequirementElement(), -1);
23677    }
23678    if (element.hasRetentionTime()) {
23679      composeDuration(t, "SpecimenDefinitionTypeTestedComponent", "retentionTime", element.getRetentionTime(), -1);
23680    }
23681    if (element.hasSingleUseElement()) {
23682      composeBoolean(t, "SpecimenDefinitionTypeTestedComponent", "singleUse", element.getSingleUseElement(), -1);
23683    }
23684    for (int i = 0; i < element.getRejectionCriterion().size(); i++) {
23685      composeCodeableConcept(t, "SpecimenDefinitionTypeTestedComponent", "rejectionCriterion", element.getRejectionCriterion().get(i), i);
23686    }
23687    for (int i = 0; i < element.getHandling().size(); i++) {
23688      composeSpecimenDefinitionTypeTestedHandlingComponent(t, "SpecimenDefinitionTypeTestedComponent", "handling", element.getHandling().get(i), i);
23689    }
23690    for (int i = 0; i < element.getTestingDestination().size(); i++) {
23691      composeCodeableConcept(t, "SpecimenDefinitionTypeTestedComponent", "testingDestination", element.getTestingDestination().get(i), i);
23692    }
23693  }
23694
23695  protected void composeSpecimenDefinitionTypeTestedContainerComponent(Complex parent, String parentType, String name, SpecimenDefinition.SpecimenDefinitionTypeTestedContainerComponent element, int index) {
23696    if (element == null) 
23697      return;
23698    Complex t;
23699    if (Utilities.noString(parentType))
23700      t = parent;
23701    else {
23702      t = parent.predicate("fhir:"+name,index > -1);
23703    }
23704    composeBackboneElement(t, "container", name, element, index);
23705    if (element.hasMaterial()) {
23706      composeCodeableConcept(t, "SpecimenDefinitionTypeTestedContainerComponent", "material", element.getMaterial(), -1);
23707    }
23708    if (element.hasType()) {
23709      composeCodeableConcept(t, "SpecimenDefinitionTypeTestedContainerComponent", "type", element.getType(), -1);
23710    }
23711    if (element.hasCap()) {
23712      composeCodeableConcept(t, "SpecimenDefinitionTypeTestedContainerComponent", "cap", element.getCap(), -1);
23713    }
23714    if (element.hasDescriptionElement()) {
23715      composeMarkdown(t, "SpecimenDefinitionTypeTestedContainerComponent", "description", element.getDescriptionElement(), -1);
23716    }
23717    if (element.hasCapacity()) {
23718      composeQuantity(t, "SpecimenDefinitionTypeTestedContainerComponent", "capacity", element.getCapacity(), -1);
23719    }
23720    if (element.hasMinimumVolume()) {
23721      composeType(t, "SpecimenDefinitionTypeTestedContainerComponent", "minimumVolume", element.getMinimumVolume(), -1);
23722    }
23723    for (int i = 0; i < element.getAdditive().size(); i++) {
23724      composeSpecimenDefinitionTypeTestedContainerAdditiveComponent(t, "SpecimenDefinitionTypeTestedContainerComponent", "additive", element.getAdditive().get(i), i);
23725    }
23726    if (element.hasPreparationElement()) {
23727      composeMarkdown(t, "SpecimenDefinitionTypeTestedContainerComponent", "preparation", element.getPreparationElement(), -1);
23728    }
23729  }
23730
23731  protected void composeSpecimenDefinitionTypeTestedContainerAdditiveComponent(Complex parent, String parentType, String name, SpecimenDefinition.SpecimenDefinitionTypeTestedContainerAdditiveComponent element, int index) {
23732    if (element == null) 
23733      return;
23734    Complex t;
23735    if (Utilities.noString(parentType))
23736      t = parent;
23737    else {
23738      t = parent.predicate("fhir:"+name,index > -1);
23739    }
23740    composeBackboneElement(t, "additive", name, element, index);
23741    if (element.hasAdditive()) {
23742      composeType(t, "SpecimenDefinitionTypeTestedContainerAdditiveComponent", "additive", element.getAdditive(), -1);
23743    }
23744  }
23745
23746  protected void composeSpecimenDefinitionTypeTestedHandlingComponent(Complex parent, String parentType, String name, SpecimenDefinition.SpecimenDefinitionTypeTestedHandlingComponent 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:"+name,index > -1);
23754    }
23755    composeBackboneElement(t, "handling", name, element, index);
23756    if (element.hasTemperatureQualifier()) {
23757      composeCodeableConcept(t, "SpecimenDefinitionTypeTestedHandlingComponent", "temperatureQualifier", element.getTemperatureQualifier(), -1);
23758    }
23759    if (element.hasTemperatureRange()) {
23760      composeRange(t, "SpecimenDefinitionTypeTestedHandlingComponent", "temperatureRange", element.getTemperatureRange(), -1);
23761    }
23762    if (element.hasMaxDuration()) {
23763      composeDuration(t, "SpecimenDefinitionTypeTestedHandlingComponent", "maxDuration", element.getMaxDuration(), -1);
23764    }
23765    if (element.hasInstructionElement()) {
23766      composeMarkdown(t, "SpecimenDefinitionTypeTestedHandlingComponent", "instruction", element.getInstructionElement(), -1);
23767    }
23768  }
23769
23770  protected void composeStructureDefinition(Complex parent, String parentType, String name, StructureDefinition element, int index) {
23771    if (element == null) 
23772      return;
23773    Complex t;
23774    if (Utilities.noString(parentType))
23775      t = parent;
23776    else {
23777      t = parent.predicate("fhir:"+name,index > -1);
23778    }
23779    composeCanonicalResource(t, "StructureDefinition", name, element, index);
23780    if (element.hasUrlElement()) {
23781      composeUri(t, "StructureDefinition", "url", element.getUrlElement(), -1);
23782    }
23783    for (int i = 0; i < element.getIdentifier().size(); i++) {
23784      composeIdentifier(t, "StructureDefinition", "identifier", element.getIdentifier().get(i), i);
23785    }
23786    if (element.hasVersionElement()) {
23787      composeString(t, "StructureDefinition", "version", element.getVersionElement(), -1);
23788    }
23789    if (element.hasVersionAlgorithm()) {
23790      composeType(t, "StructureDefinition", "versionAlgorithm", element.getVersionAlgorithm(), -1);
23791    }
23792    if (element.hasNameElement()) {
23793      composeString(t, "StructureDefinition", "name", element.getNameElement(), -1);
23794    }
23795    if (element.hasTitleElement()) {
23796      composeString(t, "StructureDefinition", "title", element.getTitleElement(), -1);
23797    }
23798    if (element.hasStatusElement()) {
23799      composeEnum(t, "StructureDefinition", "status", element.getStatusElement(), -1);
23800    }
23801    if (element.hasExperimentalElement()) {
23802      composeBoolean(t, "StructureDefinition", "experimental", element.getExperimentalElement(), -1);
23803    }
23804    if (element.hasDateElement()) {
23805      composeDateTime(t, "StructureDefinition", "date", element.getDateElement(), -1);
23806    }
23807    if (element.hasPublisherElement()) {
23808      composeString(t, "StructureDefinition", "publisher", element.getPublisherElement(), -1);
23809    }
23810    for (int i = 0; i < element.getContact().size(); i++) {
23811      composeContactDetail(t, "StructureDefinition", "contact", element.getContact().get(i), i);
23812    }
23813    if (element.hasDescriptionElement()) {
23814      composeMarkdown(t, "StructureDefinition", "description", element.getDescriptionElement(), -1);
23815    }
23816    for (int i = 0; i < element.getUseContext().size(); i++) {
23817      composeUsageContext(t, "StructureDefinition", "useContext", element.getUseContext().get(i), i);
23818    }
23819    for (int i = 0; i < element.getJurisdiction().size(); i++) {
23820      composeCodeableConcept(t, "StructureDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
23821    }
23822    if (element.hasPurposeElement()) {
23823      composeMarkdown(t, "StructureDefinition", "purpose", element.getPurposeElement(), -1);
23824    }
23825    if (element.hasCopyrightElement()) {
23826      composeMarkdown(t, "StructureDefinition", "copyright", element.getCopyrightElement(), -1);
23827    }
23828    if (element.hasCopyrightLabelElement()) {
23829      composeString(t, "StructureDefinition", "copyrightLabel", element.getCopyrightLabelElement(), -1);
23830    }
23831    for (int i = 0; i < element.getKeyword().size(); i++) {
23832      composeCoding(t, "StructureDefinition", "keyword", element.getKeyword().get(i), i);
23833    }
23834    if (element.hasFhirVersionElement()) {
23835      composeEnum(t, "StructureDefinition", "fhirVersion", element.getFhirVersionElement(), -1);
23836    }
23837    for (int i = 0; i < element.getMapping().size(); i++) {
23838      composeStructureDefinitionMappingComponent(t, "StructureDefinition", "mapping", element.getMapping().get(i), i);
23839    }
23840    if (element.hasKindElement()) {
23841      composeEnum(t, "StructureDefinition", "kind", element.getKindElement(), -1);
23842    }
23843    if (element.hasAbstractElement()) {
23844      composeBoolean(t, "StructureDefinition", "abstract", element.getAbstractElement(), -1);
23845    }
23846    for (int i = 0; i < element.getContext().size(); i++) {
23847      composeStructureDefinitionContextComponent(t, "StructureDefinition", "context", element.getContext().get(i), i);
23848    }
23849    for (int i = 0; i < element.getContextInvariant().size(); i++) {
23850      composeString(t, "StructureDefinition", "contextInvariant", element.getContextInvariant().get(i), i);
23851    }
23852    if (element.hasTypeElement()) {
23853      composeUri(t, "StructureDefinition", "type", element.getTypeElement(), -1);
23854    }
23855    if (element.hasBaseDefinitionElement()) {
23856      composeCanonical(t, "StructureDefinition", "baseDefinition", element.getBaseDefinitionElement(), -1);
23857    }
23858    if (element.hasDerivationElement()) {
23859      composeEnum(t, "StructureDefinition", "derivation", element.getDerivationElement(), -1);
23860    }
23861    if (element.hasSnapshot()) {
23862      composeStructureDefinitionSnapshotComponent(t, "StructureDefinition", "snapshot", element.getSnapshot(), -1);
23863    }
23864    if (element.hasDifferential()) {
23865      composeStructureDefinitionDifferentialComponent(t, "StructureDefinition", "differential", element.getDifferential(), -1);
23866    }
23867  }
23868
23869  protected void composeStructureDefinitionMappingComponent(Complex parent, String parentType, String name, StructureDefinition.StructureDefinitionMappingComponent element, int index) {
23870    if (element == null) 
23871      return;
23872    Complex t;
23873    if (Utilities.noString(parentType))
23874      t = parent;
23875    else {
23876      t = parent.predicate("fhir:"+name,index > -1);
23877    }
23878    composeBackboneElement(t, "mapping", name, element, index);
23879    if (element.hasIdentityElement()) {
23880      composeId(t, "StructureDefinitionMappingComponent", "identity", element.getIdentityElement(), -1);
23881    }
23882    if (element.hasUriElement()) {
23883      composeUri(t, "StructureDefinitionMappingComponent", "uri", element.getUriElement(), -1);
23884    }
23885    if (element.hasNameElement()) {
23886      composeString(t, "StructureDefinitionMappingComponent", "name", element.getNameElement(), -1);
23887    }
23888    if (element.hasCommentElement()) {
23889      composeString(t, "StructureDefinitionMappingComponent", "comment", element.getCommentElement(), -1);
23890    }
23891  }
23892
23893  protected void composeStructureDefinitionContextComponent(Complex parent, String parentType, String name, StructureDefinition.StructureDefinitionContextComponent element, int index) {
23894    if (element == null) 
23895      return;
23896    Complex t;
23897    if (Utilities.noString(parentType))
23898      t = parent;
23899    else {
23900      t = parent.predicate("fhir:"+name,index > -1);
23901    }
23902    composeBackboneElement(t, "context", name, element, index);
23903    if (element.hasTypeElement()) {
23904      composeEnum(t, "StructureDefinitionContextComponent", "type", element.getTypeElement(), -1);
23905    }
23906    if (element.hasExpressionElement()) {
23907      composeString(t, "StructureDefinitionContextComponent", "expression", element.getExpressionElement(), -1);
23908    }
23909  }
23910
23911  protected void composeStructureDefinitionSnapshotComponent(Complex parent, String parentType, String name, StructureDefinition.StructureDefinitionSnapshotComponent element, int index) {
23912    if (element == null) 
23913      return;
23914    Complex t;
23915    if (Utilities.noString(parentType))
23916      t = parent;
23917    else {
23918      t = parent.predicate("fhir:"+name,index > -1);
23919    }
23920    composeBackboneElement(t, "snapshot", name, element, index);
23921    for (int i = 0; i < element.getElement().size(); i++) {
23922      composeElementDefinition(t, "StructureDefinitionSnapshotComponent", "element", element.getElement().get(i), i);
23923    }
23924  }
23925
23926  protected void composeStructureDefinitionDifferentialComponent(Complex parent, String parentType, String name, StructureDefinition.StructureDefinitionDifferentialComponent element, int index) {
23927    if (element == null) 
23928      return;
23929    Complex t;
23930    if (Utilities.noString(parentType))
23931      t = parent;
23932    else {
23933      t = parent.predicate("fhir:"+name,index > -1);
23934    }
23935    composeBackboneElement(t, "differential", name, element, index);
23936    for (int i = 0; i < element.getElement().size(); i++) {
23937      composeElementDefinition(t, "StructureDefinitionDifferentialComponent", "element", element.getElement().get(i), i);
23938    }
23939  }
23940
23941  protected void composeStructureMap(Complex parent, String parentType, String name, StructureMap element, int index) {
23942    if (element == null) 
23943      return;
23944    Complex t;
23945    if (Utilities.noString(parentType))
23946      t = parent;
23947    else {
23948      t = parent.predicate("fhir:"+name,index > -1);
23949    }
23950    composeCanonicalResource(t, "StructureMap", name, element, index);
23951    if (element.hasUrlElement()) {
23952      composeUri(t, "StructureMap", "url", element.getUrlElement(), -1);
23953    }
23954    for (int i = 0; i < element.getIdentifier().size(); i++) {
23955      composeIdentifier(t, "StructureMap", "identifier", element.getIdentifier().get(i), i);
23956    }
23957    if (element.hasVersionElement()) {
23958      composeString(t, "StructureMap", "version", element.getVersionElement(), -1);
23959    }
23960    if (element.hasVersionAlgorithm()) {
23961      composeType(t, "StructureMap", "versionAlgorithm", element.getVersionAlgorithm(), -1);
23962    }
23963    if (element.hasNameElement()) {
23964      composeString(t, "StructureMap", "name", element.getNameElement(), -1);
23965    }
23966    if (element.hasTitleElement()) {
23967      composeString(t, "StructureMap", "title", element.getTitleElement(), -1);
23968    }
23969    if (element.hasStatusElement()) {
23970      composeEnum(t, "StructureMap", "status", element.getStatusElement(), -1);
23971    }
23972    if (element.hasExperimentalElement()) {
23973      composeBoolean(t, "StructureMap", "experimental", element.getExperimentalElement(), -1);
23974    }
23975    if (element.hasDateElement()) {
23976      composeDateTime(t, "StructureMap", "date", element.getDateElement(), -1);
23977    }
23978    if (element.hasPublisherElement()) {
23979      composeString(t, "StructureMap", "publisher", element.getPublisherElement(), -1);
23980    }
23981    for (int i = 0; i < element.getContact().size(); i++) {
23982      composeContactDetail(t, "StructureMap", "contact", element.getContact().get(i), i);
23983    }
23984    if (element.hasDescriptionElement()) {
23985      composeMarkdown(t, "StructureMap", "description", element.getDescriptionElement(), -1);
23986    }
23987    for (int i = 0; i < element.getUseContext().size(); i++) {
23988      composeUsageContext(t, "StructureMap", "useContext", element.getUseContext().get(i), i);
23989    }
23990    for (int i = 0; i < element.getJurisdiction().size(); i++) {
23991      composeCodeableConcept(t, "StructureMap", "jurisdiction", element.getJurisdiction().get(i), i);
23992    }
23993    if (element.hasPurposeElement()) {
23994      composeMarkdown(t, "StructureMap", "purpose", element.getPurposeElement(), -1);
23995    }
23996    if (element.hasCopyrightElement()) {
23997      composeMarkdown(t, "StructureMap", "copyright", element.getCopyrightElement(), -1);
23998    }
23999    if (element.hasCopyrightLabelElement()) {
24000      composeString(t, "StructureMap", "copyrightLabel", element.getCopyrightLabelElement(), -1);
24001    }
24002    for (int i = 0; i < element.getStructure().size(); i++) {
24003      composeStructureMapStructureComponent(t, "StructureMap", "structure", element.getStructure().get(i), i);
24004    }
24005    for (int i = 0; i < element.getImport().size(); i++) {
24006      composeCanonical(t, "StructureMap", "import", element.getImport().get(i), i);
24007    }
24008    for (int i = 0; i < element.getConst().size(); i++) {
24009      composeStructureMapConstComponent(t, "StructureMap", "const", element.getConst().get(i), i);
24010    }
24011    for (int i = 0; i < element.getGroup().size(); i++) {
24012      composeStructureMapGroupComponent(t, "StructureMap", "group", element.getGroup().get(i), i);
24013    }
24014  }
24015
24016  protected void composeStructureMapStructureComponent(Complex parent, String parentType, String name, StructureMap.StructureMapStructureComponent element, int index) {
24017    if (element == null) 
24018      return;
24019    Complex t;
24020    if (Utilities.noString(parentType))
24021      t = parent;
24022    else {
24023      t = parent.predicate("fhir:"+name,index > -1);
24024    }
24025    composeBackboneElement(t, "structure", name, element, index);
24026    if (element.hasUrlElement()) {
24027      composeCanonical(t, "StructureMapStructureComponent", "url", element.getUrlElement(), -1);
24028    }
24029    if (element.hasModeElement()) {
24030      composeEnum(t, "StructureMapStructureComponent", "mode", element.getModeElement(), -1);
24031    }
24032    if (element.hasAliasElement()) {
24033      composeString(t, "StructureMapStructureComponent", "alias", element.getAliasElement(), -1);
24034    }
24035    if (element.hasDocumentationElement()) {
24036      composeString(t, "StructureMapStructureComponent", "documentation", element.getDocumentationElement(), -1);
24037    }
24038  }
24039
24040  protected void composeStructureMapConstComponent(Complex parent, String parentType, String name, StructureMap.StructureMapConstComponent element, int index) {
24041    if (element == null) 
24042      return;
24043    Complex t;
24044    if (Utilities.noString(parentType))
24045      t = parent;
24046    else {
24047      t = parent.predicate("fhir:"+name,index > -1);
24048    }
24049    composeBackboneElement(t, "const", name, element, index);
24050    if (element.hasNameElement()) {
24051      composeId(t, "StructureMapConstComponent", "name", element.getNameElement(), -1);
24052    }
24053    if (element.hasValueElement()) {
24054      composeString(t, "StructureMapConstComponent", "value", element.getValueElement(), -1);
24055    }
24056  }
24057
24058  protected void composeStructureMapGroupComponent(Complex parent, String parentType, String name, StructureMap.StructureMapGroupComponent element, int index) {
24059    if (element == null) 
24060      return;
24061    Complex t;
24062    if (Utilities.noString(parentType))
24063      t = parent;
24064    else {
24065      t = parent.predicate("fhir:"+name,index > -1);
24066    }
24067    composeBackboneElement(t, "group", name, element, index);
24068    if (element.hasNameElement()) {
24069      composeId(t, "StructureMapGroupComponent", "name", element.getNameElement(), -1);
24070    }
24071    if (element.hasExtendsElement()) {
24072      composeId(t, "StructureMapGroupComponent", "extends", element.getExtendsElement(), -1);
24073    }
24074    if (element.hasTypeModeElement()) {
24075      composeEnum(t, "StructureMapGroupComponent", "typeMode", element.getTypeModeElement(), -1);
24076    }
24077    if (element.hasDocumentationElement()) {
24078      composeString(t, "StructureMapGroupComponent", "documentation", element.getDocumentationElement(), -1);
24079    }
24080    for (int i = 0; i < element.getInput().size(); i++) {
24081      composeStructureMapGroupInputComponent(t, "StructureMapGroupComponent", "input", element.getInput().get(i), i);
24082    }
24083    for (int i = 0; i < element.getRule().size(); i++) {
24084      composeStructureMapGroupRuleComponent(t, "StructureMapGroupComponent", "rule", element.getRule().get(i), i);
24085    }
24086  }
24087
24088  protected void composeStructureMapGroupInputComponent(Complex parent, String parentType, String name, StructureMap.StructureMapGroupInputComponent element, int index) {
24089    if (element == null) 
24090      return;
24091    Complex t;
24092    if (Utilities.noString(parentType))
24093      t = parent;
24094    else {
24095      t = parent.predicate("fhir:"+name,index > -1);
24096    }
24097    composeBackboneElement(t, "input", name, element, index);
24098    if (element.hasNameElement()) {
24099      composeId(t, "StructureMapGroupInputComponent", "name", element.getNameElement(), -1);
24100    }
24101    if (element.hasTypeElement()) {
24102      composeString(t, "StructureMapGroupInputComponent", "type", element.getTypeElement(), -1);
24103    }
24104    if (element.hasModeElement()) {
24105      composeEnum(t, "StructureMapGroupInputComponent", "mode", element.getModeElement(), -1);
24106    }
24107    if (element.hasDocumentationElement()) {
24108      composeString(t, "StructureMapGroupInputComponent", "documentation", element.getDocumentationElement(), -1);
24109    }
24110  }
24111
24112  protected void composeStructureMapGroupRuleComponent(Complex parent, String parentType, String name, StructureMap.StructureMapGroupRuleComponent element, int index) {
24113    if (element == null) 
24114      return;
24115    Complex t;
24116    if (Utilities.noString(parentType))
24117      t = parent;
24118    else {
24119      t = parent.predicate("fhir:"+name,index > -1);
24120    }
24121    composeBackboneElement(t, "rule", name, element, index);
24122    if (element.hasNameElement()) {
24123      composeId(t, "StructureMapGroupRuleComponent", "name", element.getNameElement(), -1);
24124    }
24125    for (int i = 0; i < element.getSource().size(); i++) {
24126      composeStructureMapGroupRuleSourceComponent(t, "StructureMapGroupRuleComponent", "source", element.getSource().get(i), i);
24127    }
24128    for (int i = 0; i < element.getTarget().size(); i++) {
24129      composeStructureMapGroupRuleTargetComponent(t, "StructureMapGroupRuleComponent", "target", element.getTarget().get(i), i);
24130    }
24131    for (int i = 0; i < element.getRule().size(); i++) {
24132      composeStructureMapGroupRuleComponent(t, "StructureMapGroupRuleComponent", "rule", element.getRule().get(i), i);
24133    }
24134    for (int i = 0; i < element.getDependent().size(); i++) {
24135      composeStructureMapGroupRuleDependentComponent(t, "StructureMapGroupRuleComponent", "dependent", element.getDependent().get(i), i);
24136    }
24137    if (element.hasDocumentationElement()) {
24138      composeString(t, "StructureMapGroupRuleComponent", "documentation", element.getDocumentationElement(), -1);
24139    }
24140  }
24141
24142  protected void composeStructureMapGroupRuleSourceComponent(Complex parent, String parentType, String name, StructureMap.StructureMapGroupRuleSourceComponent element, int index) {
24143    if (element == null) 
24144      return;
24145    Complex t;
24146    if (Utilities.noString(parentType))
24147      t = parent;
24148    else {
24149      t = parent.predicate("fhir:"+name,index > -1);
24150    }
24151    composeBackboneElement(t, "source", name, element, index);
24152    if (element.hasContextElement()) {
24153      composeId(t, "StructureMapGroupRuleSourceComponent", "context", element.getContextElement(), -1);
24154    }
24155    if (element.hasMinElement()) {
24156      composeInteger(t, "StructureMapGroupRuleSourceComponent", "min", element.getMinElement(), -1);
24157    }
24158    if (element.hasMaxElement()) {
24159      composeString(t, "StructureMapGroupRuleSourceComponent", "max", element.getMaxElement(), -1);
24160    }
24161    if (element.hasTypeElement()) {
24162      composeString(t, "StructureMapGroupRuleSourceComponent", "type", element.getTypeElement(), -1);
24163    }
24164    if (element.hasDefaultValueElement()) {
24165      composeString(t, "StructureMapGroupRuleSourceComponent", "defaultValue", element.getDefaultValueElement(), -1);
24166    }
24167    if (element.hasElementElement()) {
24168      composeString(t, "StructureMapGroupRuleSourceComponent", "element", element.getElementElement(), -1);
24169    }
24170    if (element.hasListModeElement()) {
24171      composeEnum(t, "StructureMapGroupRuleSourceComponent", "listMode", element.getListModeElement(), -1);
24172    }
24173    if (element.hasVariableElement()) {
24174      composeId(t, "StructureMapGroupRuleSourceComponent", "variable", element.getVariableElement(), -1);
24175    }
24176    if (element.hasConditionElement()) {
24177      composeString(t, "StructureMapGroupRuleSourceComponent", "condition", element.getConditionElement(), -1);
24178    }
24179    if (element.hasCheckElement()) {
24180      composeString(t, "StructureMapGroupRuleSourceComponent", "check", element.getCheckElement(), -1);
24181    }
24182    if (element.hasLogMessageElement()) {
24183      composeString(t, "StructureMapGroupRuleSourceComponent", "logMessage", element.getLogMessageElement(), -1);
24184    }
24185  }
24186
24187  protected void composeStructureMapGroupRuleTargetComponent(Complex parent, String parentType, String name, StructureMap.StructureMapGroupRuleTargetComponent element, int index) {
24188    if (element == null) 
24189      return;
24190    Complex t;
24191    if (Utilities.noString(parentType))
24192      t = parent;
24193    else {
24194      t = parent.predicate("fhir:"+name,index > -1);
24195    }
24196    composeBackboneElement(t, "target", name, element, index);
24197    if (element.hasContextElement()) {
24198      composeString(t, "StructureMapGroupRuleTargetComponent", "context", element.getContextElement(), -1);
24199    }
24200    if (element.hasElementElement()) {
24201      composeString(t, "StructureMapGroupRuleTargetComponent", "element", element.getElementElement(), -1);
24202    }
24203    if (element.hasVariableElement()) {
24204      composeId(t, "StructureMapGroupRuleTargetComponent", "variable", element.getVariableElement(), -1);
24205    }
24206    for (int i = 0; i < element.getListMode().size(); i++) {
24207      composeEnum(t, "StructureMapGroupRuleTargetComponent", "listMode", element.getListMode().get(i), i);
24208    }
24209    if (element.hasListRuleIdElement()) {
24210      composeId(t, "StructureMapGroupRuleTargetComponent", "listRuleId", element.getListRuleIdElement(), -1);
24211    }
24212    if (element.hasTransformElement()) {
24213      composeEnum(t, "StructureMapGroupRuleTargetComponent", "transform", element.getTransformElement(), -1);
24214    }
24215    for (int i = 0; i < element.getParameter().size(); i++) {
24216      composeStructureMapGroupRuleTargetParameterComponent(t, "StructureMapGroupRuleTargetComponent", "parameter", element.getParameter().get(i), i);
24217    }
24218  }
24219
24220  protected void composeStructureMapGroupRuleTargetParameterComponent(Complex parent, String parentType, String name, StructureMap.StructureMapGroupRuleTargetParameterComponent element, int index) {
24221    if (element == null) 
24222      return;
24223    Complex t;
24224    if (Utilities.noString(parentType))
24225      t = parent;
24226    else {
24227      t = parent.predicate("fhir:"+name,index > -1);
24228    }
24229    composeBackboneElement(t, "parameter", name, element, index);
24230    if (element.hasValue()) {
24231      composeType(t, "StructureMapGroupRuleTargetParameterComponent", "value", element.getValue(), -1);
24232    }
24233  }
24234
24235  protected void composeStructureMapGroupRuleDependentComponent(Complex parent, String parentType, String name, StructureMap.StructureMapGroupRuleDependentComponent element, int index) {
24236    if (element == null) 
24237      return;
24238    Complex t;
24239    if (Utilities.noString(parentType))
24240      t = parent;
24241    else {
24242      t = parent.predicate("fhir:"+name,index > -1);
24243    }
24244    composeBackboneElement(t, "dependent", name, element, index);
24245    if (element.hasNameElement()) {
24246      composeId(t, "StructureMapGroupRuleDependentComponent", "name", element.getNameElement(), -1);
24247    }
24248    for (int i = 0; i < element.getParameter().size(); i++) {
24249      composeStructureMapGroupRuleTargetParameterComponent(t, "StructureMapGroupRuleDependentComponent", "parameter", element.getParameter().get(i), i);
24250    }
24251  }
24252
24253  protected void composeSubscription(Complex parent, String parentType, String name, Subscription element, int index) {
24254    if (element == null) 
24255      return;
24256    Complex t;
24257    if (Utilities.noString(parentType))
24258      t = parent;
24259    else {
24260      t = parent.predicate("fhir:"+name,index > -1);
24261    }
24262    composeDomainResource(t, "Subscription", name, element, index);
24263    for (int i = 0; i < element.getIdentifier().size(); i++) {
24264      composeIdentifier(t, "Subscription", "identifier", element.getIdentifier().get(i), i);
24265    }
24266    if (element.hasNameElement()) {
24267      composeString(t, "Subscription", "name", element.getNameElement(), -1);
24268    }
24269    if (element.hasStatusElement()) {
24270      composeEnum(t, "Subscription", "status", element.getStatusElement(), -1);
24271    }
24272    if (element.hasTopicElement()) {
24273      composeCanonical(t, "Subscription", "topic", element.getTopicElement(), -1);
24274    }
24275    for (int i = 0; i < element.getContact().size(); i++) {
24276      composeContactPoint(t, "Subscription", "contact", element.getContact().get(i), i);
24277    }
24278    if (element.hasEndElement()) {
24279      composeInstant(t, "Subscription", "end", element.getEndElement(), -1);
24280    }
24281    if (element.hasManagingEntity()) {
24282      composeReference(t, "Subscription", "managingEntity", element.getManagingEntity(), -1);
24283    }
24284    if (element.hasReasonElement()) {
24285      composeString(t, "Subscription", "reason", element.getReasonElement(), -1);
24286    }
24287    for (int i = 0; i < element.getFilterBy().size(); i++) {
24288      composeSubscriptionFilterByComponent(t, "Subscription", "filterBy", element.getFilterBy().get(i), i);
24289    }
24290    if (element.hasChannelType()) {
24291      composeCoding(t, "Subscription", "channelType", element.getChannelType(), -1);
24292    }
24293    if (element.hasEndpointElement()) {
24294      composeUrl(t, "Subscription", "endpoint", element.getEndpointElement(), -1);
24295    }
24296    for (int i = 0; i < element.getParameter().size(); i++) {
24297      composeSubscriptionParameterComponent(t, "Subscription", "parameter", element.getParameter().get(i), i);
24298    }
24299    if (element.hasHeartbeatPeriodElement()) {
24300      composeUnsignedInt(t, "Subscription", "heartbeatPeriod", element.getHeartbeatPeriodElement(), -1);
24301    }
24302    if (element.hasTimeoutElement()) {
24303      composeUnsignedInt(t, "Subscription", "timeout", element.getTimeoutElement(), -1);
24304    }
24305    if (element.hasContentTypeElement()) {
24306      composeCode(t, "Subscription", "contentType", element.getContentTypeElement(), -1);
24307    }
24308    if (element.hasContentElement()) {
24309      composeEnum(t, "Subscription", "content", element.getContentElement(), -1);
24310    }
24311    if (element.hasMaxCountElement()) {
24312      composePositiveInt(t, "Subscription", "maxCount", element.getMaxCountElement(), -1);
24313    }
24314  }
24315
24316  protected void composeSubscriptionFilterByComponent(Complex parent, String parentType, String name, Subscription.SubscriptionFilterByComponent element, int index) {
24317    if (element == null) 
24318      return;
24319    Complex t;
24320    if (Utilities.noString(parentType))
24321      t = parent;
24322    else {
24323      t = parent.predicate("fhir:"+name,index > -1);
24324    }
24325    composeBackboneElement(t, "filterBy", name, element, index);
24326    if (element.hasResourceTypeElement()) {
24327      composeUri(t, "SubscriptionFilterByComponent", "resourceType", element.getResourceTypeElement(), -1);
24328    }
24329    if (element.hasFilterParameterElement()) {
24330      composeString(t, "SubscriptionFilterByComponent", "filterParameter", element.getFilterParameterElement(), -1);
24331    }
24332    if (element.hasComparatorElement()) {
24333      composeEnum(t, "SubscriptionFilterByComponent", "comparator", element.getComparatorElement(), -1);
24334    }
24335    if (element.hasModifierElement()) {
24336      composeEnum(t, "SubscriptionFilterByComponent", "modifier", element.getModifierElement(), -1);
24337    }
24338    if (element.hasValueElement()) {
24339      composeString(t, "SubscriptionFilterByComponent", "value", element.getValueElement(), -1);
24340    }
24341  }
24342
24343  protected void composeSubscriptionParameterComponent(Complex parent, String parentType, String name, Subscription.SubscriptionParameterComponent element, int index) {
24344    if (element == null) 
24345      return;
24346    Complex t;
24347    if (Utilities.noString(parentType))
24348      t = parent;
24349    else {
24350      t = parent.predicate("fhir:"+name,index > -1);
24351    }
24352    composeBackboneElement(t, "parameter", name, element, index);
24353    if (element.hasNameElement()) {
24354      composeString(t, "SubscriptionParameterComponent", "name", element.getNameElement(), -1);
24355    }
24356    if (element.hasValueElement()) {
24357      composeString(t, "SubscriptionParameterComponent", "value", element.getValueElement(), -1);
24358    }
24359  }
24360
24361  protected void composeSubscriptionStatus(Complex parent, String parentType, String name, SubscriptionStatus element, int index) {
24362    if (element == null) 
24363      return;
24364    Complex t;
24365    if (Utilities.noString(parentType))
24366      t = parent;
24367    else {
24368      t = parent.predicate("fhir:"+name,index > -1);
24369    }
24370    composeDomainResource(t, "SubscriptionStatus", name, element, index);
24371    if (element.hasStatusElement()) {
24372      composeEnum(t, "SubscriptionStatus", "status", element.getStatusElement(), -1);
24373    }
24374    if (element.hasTypeElement()) {
24375      composeEnum(t, "SubscriptionStatus", "type", element.getTypeElement(), -1);
24376    }
24377    if (element.hasEventsSinceSubscriptionStartElement()) {
24378      composeInteger64(t, "SubscriptionStatus", "eventsSinceSubscriptionStart", element.getEventsSinceSubscriptionStartElement(), -1);
24379    }
24380    for (int i = 0; i < element.getNotificationEvent().size(); i++) {
24381      composeSubscriptionStatusNotificationEventComponent(t, "SubscriptionStatus", "notificationEvent", element.getNotificationEvent().get(i), i);
24382    }
24383    if (element.hasSubscription()) {
24384      composeReference(t, "SubscriptionStatus", "subscription", element.getSubscription(), -1);
24385    }
24386    if (element.hasTopicElement()) {
24387      composeCanonical(t, "SubscriptionStatus", "topic", element.getTopicElement(), -1);
24388    }
24389    for (int i = 0; i < element.getError().size(); i++) {
24390      composeCodeableConcept(t, "SubscriptionStatus", "error", element.getError().get(i), i);
24391    }
24392  }
24393
24394  protected void composeSubscriptionStatusNotificationEventComponent(Complex parent, String parentType, String name, SubscriptionStatus.SubscriptionStatusNotificationEventComponent element, int index) {
24395    if (element == null) 
24396      return;
24397    Complex t;
24398    if (Utilities.noString(parentType))
24399      t = parent;
24400    else {
24401      t = parent.predicate("fhir:"+name,index > -1);
24402    }
24403    composeBackboneElement(t, "notificationEvent", name, element, index);
24404    if (element.hasEventNumberElement()) {
24405      composeInteger64(t, "SubscriptionStatusNotificationEventComponent", "eventNumber", element.getEventNumberElement(), -1);
24406    }
24407    if (element.hasTimestampElement()) {
24408      composeInstant(t, "SubscriptionStatusNotificationEventComponent", "timestamp", element.getTimestampElement(), -1);
24409    }
24410    if (element.hasFocus()) {
24411      composeReference(t, "SubscriptionStatusNotificationEventComponent", "focus", element.getFocus(), -1);
24412    }
24413    for (int i = 0; i < element.getAdditionalContext().size(); i++) {
24414      composeReference(t, "SubscriptionStatusNotificationEventComponent", "additionalContext", element.getAdditionalContext().get(i), i);
24415    }
24416  }
24417
24418  protected void composeSubscriptionTopic(Complex parent, String parentType, String name, SubscriptionTopic element, int index) {
24419    if (element == null) 
24420      return;
24421    Complex t;
24422    if (Utilities.noString(parentType))
24423      t = parent;
24424    else {
24425      t = parent.predicate("fhir:"+name,index > -1);
24426    }
24427    composeCanonicalResource(t, "SubscriptionTopic", name, element, index);
24428    if (element.hasUrlElement()) {
24429      composeUri(t, "SubscriptionTopic", "url", element.getUrlElement(), -1);
24430    }
24431    for (int i = 0; i < element.getIdentifier().size(); i++) {
24432      composeIdentifier(t, "SubscriptionTopic", "identifier", element.getIdentifier().get(i), i);
24433    }
24434    if (element.hasVersionElement()) {
24435      composeString(t, "SubscriptionTopic", "version", element.getVersionElement(), -1);
24436    }
24437    if (element.hasVersionAlgorithm()) {
24438      composeType(t, "SubscriptionTopic", "versionAlgorithm", element.getVersionAlgorithm(), -1);
24439    }
24440    if (element.hasNameElement()) {
24441      composeString(t, "SubscriptionTopic", "name", element.getNameElement(), -1);
24442    }
24443    if (element.hasTitleElement()) {
24444      composeString(t, "SubscriptionTopic", "title", element.getTitleElement(), -1);
24445    }
24446    for (int i = 0; i < element.getDerivedFrom().size(); i++) {
24447      composeCanonical(t, "SubscriptionTopic", "derivedFrom", element.getDerivedFrom().get(i), i);
24448    }
24449    if (element.hasStatusElement()) {
24450      composeEnum(t, "SubscriptionTopic", "status", element.getStatusElement(), -1);
24451    }
24452    if (element.hasExperimentalElement()) {
24453      composeBoolean(t, "SubscriptionTopic", "experimental", element.getExperimentalElement(), -1);
24454    }
24455    if (element.hasDateElement()) {
24456      composeDateTime(t, "SubscriptionTopic", "date", element.getDateElement(), -1);
24457    }
24458    if (element.hasPublisherElement()) {
24459      composeString(t, "SubscriptionTopic", "publisher", element.getPublisherElement(), -1);
24460    }
24461    for (int i = 0; i < element.getContact().size(); i++) {
24462      composeContactDetail(t, "SubscriptionTopic", "contact", element.getContact().get(i), i);
24463    }
24464    if (element.hasDescriptionElement()) {
24465      composeMarkdown(t, "SubscriptionTopic", "description", element.getDescriptionElement(), -1);
24466    }
24467    for (int i = 0; i < element.getUseContext().size(); i++) {
24468      composeUsageContext(t, "SubscriptionTopic", "useContext", element.getUseContext().get(i), i);
24469    }
24470    for (int i = 0; i < element.getJurisdiction().size(); i++) {
24471      composeCodeableConcept(t, "SubscriptionTopic", "jurisdiction", element.getJurisdiction().get(i), i);
24472    }
24473    if (element.hasPurposeElement()) {
24474      composeMarkdown(t, "SubscriptionTopic", "purpose", element.getPurposeElement(), -1);
24475    }
24476    if (element.hasCopyrightElement()) {
24477      composeMarkdown(t, "SubscriptionTopic", "copyright", element.getCopyrightElement(), -1);
24478    }
24479    if (element.hasCopyrightLabelElement()) {
24480      composeString(t, "SubscriptionTopic", "copyrightLabel", element.getCopyrightLabelElement(), -1);
24481    }
24482    if (element.hasApprovalDateElement()) {
24483      composeDate(t, "SubscriptionTopic", "approvalDate", element.getApprovalDateElement(), -1);
24484    }
24485    if (element.hasLastReviewDateElement()) {
24486      composeDate(t, "SubscriptionTopic", "lastReviewDate", element.getLastReviewDateElement(), -1);
24487    }
24488    if (element.hasEffectivePeriod()) {
24489      composePeriod(t, "SubscriptionTopic", "effectivePeriod", element.getEffectivePeriod(), -1);
24490    }
24491    for (int i = 0; i < element.getResourceTrigger().size(); i++) {
24492      composeSubscriptionTopicResourceTriggerComponent(t, "SubscriptionTopic", "resourceTrigger", element.getResourceTrigger().get(i), i);
24493    }
24494    for (int i = 0; i < element.getEventTrigger().size(); i++) {
24495      composeSubscriptionTopicEventTriggerComponent(t, "SubscriptionTopic", "eventTrigger", element.getEventTrigger().get(i), i);
24496    }
24497    for (int i = 0; i < element.getCanFilterBy().size(); i++) {
24498      composeSubscriptionTopicCanFilterByComponent(t, "SubscriptionTopic", "canFilterBy", element.getCanFilterBy().get(i), i);
24499    }
24500    for (int i = 0; i < element.getNotificationShape().size(); i++) {
24501      composeSubscriptionTopicNotificationShapeComponent(t, "SubscriptionTopic", "notificationShape", element.getNotificationShape().get(i), i);
24502    }
24503  }
24504
24505  protected void composeSubscriptionTopicResourceTriggerComponent(Complex parent, String parentType, String name, SubscriptionTopic.SubscriptionTopicResourceTriggerComponent element, int index) {
24506    if (element == null) 
24507      return;
24508    Complex t;
24509    if (Utilities.noString(parentType))
24510      t = parent;
24511    else {
24512      t = parent.predicate("fhir:"+name,index > -1);
24513    }
24514    composeBackboneElement(t, "resourceTrigger", name, element, index);
24515    if (element.hasDescriptionElement()) {
24516      composeMarkdown(t, "SubscriptionTopicResourceTriggerComponent", "description", element.getDescriptionElement(), -1);
24517    }
24518    if (element.hasResourceElement()) {
24519      composeUri(t, "SubscriptionTopicResourceTriggerComponent", "resource", element.getResourceElement(), -1);
24520    }
24521    for (int i = 0; i < element.getSupportedInteraction().size(); i++) {
24522      composeEnum(t, "SubscriptionTopicResourceTriggerComponent", "supportedInteraction", element.getSupportedInteraction().get(i), i);
24523    }
24524    if (element.hasQueryCriteria()) {
24525      composeSubscriptionTopicResourceTriggerQueryCriteriaComponent(t, "SubscriptionTopicResourceTriggerComponent", "queryCriteria", element.getQueryCriteria(), -1);
24526    }
24527    if (element.hasFhirPathCriteriaElement()) {
24528      composeString(t, "SubscriptionTopicResourceTriggerComponent", "fhirPathCriteria", element.getFhirPathCriteriaElement(), -1);
24529    }
24530  }
24531
24532  protected void composeSubscriptionTopicResourceTriggerQueryCriteriaComponent(Complex parent, String parentType, String name, SubscriptionTopic.SubscriptionTopicResourceTriggerQueryCriteriaComponent element, int index) {
24533    if (element == null) 
24534      return;
24535    Complex t;
24536    if (Utilities.noString(parentType))
24537      t = parent;
24538    else {
24539      t = parent.predicate("fhir:"+name,index > -1);
24540    }
24541    composeBackboneElement(t, "queryCriteria", name, element, index);
24542    if (element.hasPreviousElement()) {
24543      composeString(t, "SubscriptionTopicResourceTriggerQueryCriteriaComponent", "previous", element.getPreviousElement(), -1);
24544    }
24545    if (element.hasResultForCreateElement()) {
24546      composeEnum(t, "SubscriptionTopicResourceTriggerQueryCriteriaComponent", "resultForCreate", element.getResultForCreateElement(), -1);
24547    }
24548    if (element.hasCurrentElement()) {
24549      composeString(t, "SubscriptionTopicResourceTriggerQueryCriteriaComponent", "current", element.getCurrentElement(), -1);
24550    }
24551    if (element.hasResultForDeleteElement()) {
24552      composeEnum(t, "SubscriptionTopicResourceTriggerQueryCriteriaComponent", "resultForDelete", element.getResultForDeleteElement(), -1);
24553    }
24554    if (element.hasRequireBothElement()) {
24555      composeBoolean(t, "SubscriptionTopicResourceTriggerQueryCriteriaComponent", "requireBoth", element.getRequireBothElement(), -1);
24556    }
24557  }
24558
24559  protected void composeSubscriptionTopicEventTriggerComponent(Complex parent, String parentType, String name, SubscriptionTopic.SubscriptionTopicEventTriggerComponent element, int index) {
24560    if (element == null) 
24561      return;
24562    Complex t;
24563    if (Utilities.noString(parentType))
24564      t = parent;
24565    else {
24566      t = parent.predicate("fhir:"+name,index > -1);
24567    }
24568    composeBackboneElement(t, "eventTrigger", name, element, index);
24569    if (element.hasDescriptionElement()) {
24570      composeMarkdown(t, "SubscriptionTopicEventTriggerComponent", "description", element.getDescriptionElement(), -1);
24571    }
24572    if (element.hasEvent()) {
24573      composeCodeableConcept(t, "SubscriptionTopicEventTriggerComponent", "event", element.getEvent(), -1);
24574    }
24575    if (element.hasResourceElement()) {
24576      composeUri(t, "SubscriptionTopicEventTriggerComponent", "resource", element.getResourceElement(), -1);
24577    }
24578  }
24579
24580  protected void composeSubscriptionTopicCanFilterByComponent(Complex parent, String parentType, String name, SubscriptionTopic.SubscriptionTopicCanFilterByComponent element, int index) {
24581    if (element == null) 
24582      return;
24583    Complex t;
24584    if (Utilities.noString(parentType))
24585      t = parent;
24586    else {
24587      t = parent.predicate("fhir:"+name,index > -1);
24588    }
24589    composeBackboneElement(t, "canFilterBy", name, element, index);
24590    if (element.hasDescriptionElement()) {
24591      composeMarkdown(t, "SubscriptionTopicCanFilterByComponent", "description", element.getDescriptionElement(), -1);
24592    }
24593    if (element.hasResourceElement()) {
24594      composeUri(t, "SubscriptionTopicCanFilterByComponent", "resource", element.getResourceElement(), -1);
24595    }
24596    if (element.hasFilterParameterElement()) {
24597      composeString(t, "SubscriptionTopicCanFilterByComponent", "filterParameter", element.getFilterParameterElement(), -1);
24598    }
24599    if (element.hasFilterDefinitionElement()) {
24600      composeUri(t, "SubscriptionTopicCanFilterByComponent", "filterDefinition", element.getFilterDefinitionElement(), -1);
24601    }
24602    for (int i = 0; i < element.getComparator().size(); i++) {
24603      composeEnum(t, "SubscriptionTopicCanFilterByComponent", "comparator", element.getComparator().get(i), i);
24604    }
24605    for (int i = 0; i < element.getModifier().size(); i++) {
24606      composeEnum(t, "SubscriptionTopicCanFilterByComponent", "modifier", element.getModifier().get(i), i);
24607    }
24608  }
24609
24610  protected void composeSubscriptionTopicNotificationShapeComponent(Complex parent, String parentType, String name, SubscriptionTopic.SubscriptionTopicNotificationShapeComponent element, int index) {
24611    if (element == null) 
24612      return;
24613    Complex t;
24614    if (Utilities.noString(parentType))
24615      t = parent;
24616    else {
24617      t = parent.predicate("fhir:"+name,index > -1);
24618    }
24619    composeBackboneElement(t, "notificationShape", name, element, index);
24620    if (element.hasResourceElement()) {
24621      composeUri(t, "SubscriptionTopicNotificationShapeComponent", "resource", element.getResourceElement(), -1);
24622    }
24623    for (int i = 0; i < element.getInclude().size(); i++) {
24624      composeString(t, "SubscriptionTopicNotificationShapeComponent", "include", element.getInclude().get(i), i);
24625    }
24626    for (int i = 0; i < element.getRevInclude().size(); i++) {
24627      composeString(t, "SubscriptionTopicNotificationShapeComponent", "revInclude", element.getRevInclude().get(i), i);
24628    }
24629  }
24630
24631  protected void composeSubstance(Complex parent, String parentType, String name, Substance element, int index) {
24632    if (element == null) 
24633      return;
24634    Complex t;
24635    if (Utilities.noString(parentType))
24636      t = parent;
24637    else {
24638      t = parent.predicate("fhir:"+name,index > -1);
24639    }
24640    composeDomainResource(t, "Substance", name, element, index);
24641    for (int i = 0; i < element.getIdentifier().size(); i++) {
24642      composeIdentifier(t, "Substance", "identifier", element.getIdentifier().get(i), i);
24643    }
24644    if (element.hasInstanceElement()) {
24645      composeBoolean(t, "Substance", "instance", element.getInstanceElement(), -1);
24646    }
24647    if (element.hasStatusElement()) {
24648      composeEnum(t, "Substance", "status", element.getStatusElement(), -1);
24649    }
24650    for (int i = 0; i < element.getCategory().size(); i++) {
24651      composeCodeableConcept(t, "Substance", "category", element.getCategory().get(i), i);
24652    }
24653    if (element.hasCode()) {
24654      composeCodeableReference(t, "Substance", "code", element.getCode(), -1);
24655    }
24656    if (element.hasDescriptionElement()) {
24657      composeMarkdown(t, "Substance", "description", element.getDescriptionElement(), -1);
24658    }
24659    if (element.hasExpiryElement()) {
24660      composeDateTime(t, "Substance", "expiry", element.getExpiryElement(), -1);
24661    }
24662    if (element.hasQuantity()) {
24663      composeQuantity(t, "Substance", "quantity", element.getQuantity(), -1);
24664    }
24665    for (int i = 0; i < element.getIngredient().size(); i++) {
24666      composeSubstanceIngredientComponent(t, "Substance", "ingredient", element.getIngredient().get(i), i);
24667    }
24668  }
24669
24670  protected void composeSubstanceIngredientComponent(Complex parent, String parentType, String name, Substance.SubstanceIngredientComponent element, int index) {
24671    if (element == null) 
24672      return;
24673    Complex t;
24674    if (Utilities.noString(parentType))
24675      t = parent;
24676    else {
24677      t = parent.predicate("fhir:"+name,index > -1);
24678    }
24679    composeBackboneElement(t, "ingredient", name, element, index);
24680    if (element.hasQuantity()) {
24681      composeRatio(t, "SubstanceIngredientComponent", "quantity", element.getQuantity(), -1);
24682    }
24683    if (element.hasSubstance()) {
24684      composeType(t, "SubstanceIngredientComponent", "substance", element.getSubstance(), -1);
24685    }
24686  }
24687
24688  protected void composeSubstanceDefinition(Complex parent, String parentType, String name, SubstanceDefinition element, int index) {
24689    if (element == null) 
24690      return;
24691    Complex t;
24692    if (Utilities.noString(parentType))
24693      t = parent;
24694    else {
24695      t = parent.predicate("fhir:"+name,index > -1);
24696    }
24697    composeDomainResource(t, "SubstanceDefinition", name, element, index);
24698    for (int i = 0; i < element.getIdentifier().size(); i++) {
24699      composeIdentifier(t, "SubstanceDefinition", "identifier", element.getIdentifier().get(i), i);
24700    }
24701    if (element.hasVersionElement()) {
24702      composeString(t, "SubstanceDefinition", "version", element.getVersionElement(), -1);
24703    }
24704    if (element.hasStatus()) {
24705      composeCodeableConcept(t, "SubstanceDefinition", "status", element.getStatus(), -1);
24706    }
24707    for (int i = 0; i < element.getClassification().size(); i++) {
24708      composeCodeableConcept(t, "SubstanceDefinition", "classification", element.getClassification().get(i), i);
24709    }
24710    if (element.hasDomain()) {
24711      composeCodeableConcept(t, "SubstanceDefinition", "domain", element.getDomain(), -1);
24712    }
24713    for (int i = 0; i < element.getGrade().size(); i++) {
24714      composeCodeableConcept(t, "SubstanceDefinition", "grade", element.getGrade().get(i), i);
24715    }
24716    if (element.hasDescriptionElement()) {
24717      composeMarkdown(t, "SubstanceDefinition", "description", element.getDescriptionElement(), -1);
24718    }
24719    for (int i = 0; i < element.getInformationSource().size(); i++) {
24720      composeReference(t, "SubstanceDefinition", "informationSource", element.getInformationSource().get(i), i);
24721    }
24722    for (int i = 0; i < element.getNote().size(); i++) {
24723      composeAnnotation(t, "SubstanceDefinition", "note", element.getNote().get(i), i);
24724    }
24725    for (int i = 0; i < element.getManufacturer().size(); i++) {
24726      composeReference(t, "SubstanceDefinition", "manufacturer", element.getManufacturer().get(i), i);
24727    }
24728    for (int i = 0; i < element.getSupplier().size(); i++) {
24729      composeReference(t, "SubstanceDefinition", "supplier", element.getSupplier().get(i), i);
24730    }
24731    for (int i = 0; i < element.getMoiety().size(); i++) {
24732      composeSubstanceDefinitionMoietyComponent(t, "SubstanceDefinition", "moiety", element.getMoiety().get(i), i);
24733    }
24734    for (int i = 0; i < element.getCharacterization().size(); i++) {
24735      composeSubstanceDefinitionCharacterizationComponent(t, "SubstanceDefinition", "characterization", element.getCharacterization().get(i), i);
24736    }
24737    for (int i = 0; i < element.getProperty().size(); i++) {
24738      composeSubstanceDefinitionPropertyComponent(t, "SubstanceDefinition", "property", element.getProperty().get(i), i);
24739    }
24740    if (element.hasReferenceInformation()) {
24741      composeReference(t, "SubstanceDefinition", "referenceInformation", element.getReferenceInformation(), -1);
24742    }
24743    for (int i = 0; i < element.getMolecularWeight().size(); i++) {
24744      composeSubstanceDefinitionMolecularWeightComponent(t, "SubstanceDefinition", "molecularWeight", element.getMolecularWeight().get(i), i);
24745    }
24746    if (element.hasStructure()) {
24747      composeSubstanceDefinitionStructureComponent(t, "SubstanceDefinition", "structure", element.getStructure(), -1);
24748    }
24749    for (int i = 0; i < element.getCode().size(); i++) {
24750      composeSubstanceDefinitionCodeComponent(t, "SubstanceDefinition", "code", element.getCode().get(i), i);
24751    }
24752    for (int i = 0; i < element.getName().size(); i++) {
24753      composeSubstanceDefinitionNameComponent(t, "SubstanceDefinition", "name", element.getName().get(i), i);
24754    }
24755    for (int i = 0; i < element.getRelationship().size(); i++) {
24756      composeSubstanceDefinitionRelationshipComponent(t, "SubstanceDefinition", "relationship", element.getRelationship().get(i), i);
24757    }
24758    if (element.hasNucleicAcid()) {
24759      composeReference(t, "SubstanceDefinition", "nucleicAcid", element.getNucleicAcid(), -1);
24760    }
24761    if (element.hasPolymer()) {
24762      composeReference(t, "SubstanceDefinition", "polymer", element.getPolymer(), -1);
24763    }
24764    if (element.hasProtein()) {
24765      composeReference(t, "SubstanceDefinition", "protein", element.getProtein(), -1);
24766    }
24767    if (element.hasSourceMaterial()) {
24768      composeSubstanceDefinitionSourceMaterialComponent(t, "SubstanceDefinition", "sourceMaterial", element.getSourceMaterial(), -1);
24769    }
24770  }
24771
24772  protected void composeSubstanceDefinitionMoietyComponent(Complex parent, String parentType, String name, SubstanceDefinition.SubstanceDefinitionMoietyComponent element, int index) {
24773    if (element == null) 
24774      return;
24775    Complex t;
24776    if (Utilities.noString(parentType))
24777      t = parent;
24778    else {
24779      t = parent.predicate("fhir:"+name,index > -1);
24780    }
24781    composeBackboneElement(t, "moiety", name, element, index);
24782    if (element.hasRole()) {
24783      composeCodeableConcept(t, "SubstanceDefinitionMoietyComponent", "role", element.getRole(), -1);
24784    }
24785    if (element.hasIdentifier()) {
24786      composeIdentifier(t, "SubstanceDefinitionMoietyComponent", "identifier", element.getIdentifier(), -1);
24787    }
24788    if (element.hasNameElement()) {
24789      composeString(t, "SubstanceDefinitionMoietyComponent", "name", element.getNameElement(), -1);
24790    }
24791    if (element.hasStereochemistry()) {
24792      composeCodeableConcept(t, "SubstanceDefinitionMoietyComponent", "stereochemistry", element.getStereochemistry(), -1);
24793    }
24794    if (element.hasOpticalActivity()) {
24795      composeCodeableConcept(t, "SubstanceDefinitionMoietyComponent", "opticalActivity", element.getOpticalActivity(), -1);
24796    }
24797    if (element.hasMolecularFormulaElement()) {
24798      composeString(t, "SubstanceDefinitionMoietyComponent", "molecularFormula", element.getMolecularFormulaElement(), -1);
24799    }
24800    if (element.hasAmount()) {
24801      composeType(t, "SubstanceDefinitionMoietyComponent", "amount", element.getAmount(), -1);
24802    }
24803    if (element.hasMeasurementType()) {
24804      composeCodeableConcept(t, "SubstanceDefinitionMoietyComponent", "measurementType", element.getMeasurementType(), -1);
24805    }
24806  }
24807
24808  protected void composeSubstanceDefinitionCharacterizationComponent(Complex parent, String parentType, String name, SubstanceDefinition.SubstanceDefinitionCharacterizationComponent element, int index) {
24809    if (element == null) 
24810      return;
24811    Complex t;
24812    if (Utilities.noString(parentType))
24813      t = parent;
24814    else {
24815      t = parent.predicate("fhir:"+name,index > -1);
24816    }
24817    composeBackboneElement(t, "characterization", name, element, index);
24818    if (element.hasTechnique()) {
24819      composeCodeableConcept(t, "SubstanceDefinitionCharacterizationComponent", "technique", element.getTechnique(), -1);
24820    }
24821    if (element.hasForm()) {
24822      composeCodeableConcept(t, "SubstanceDefinitionCharacterizationComponent", "form", element.getForm(), -1);
24823    }
24824    if (element.hasDescriptionElement()) {
24825      composeMarkdown(t, "SubstanceDefinitionCharacterizationComponent", "description", element.getDescriptionElement(), -1);
24826    }
24827    for (int i = 0; i < element.getFile().size(); i++) {
24828      composeAttachment(t, "SubstanceDefinitionCharacterizationComponent", "file", element.getFile().get(i), i);
24829    }
24830  }
24831
24832  protected void composeSubstanceDefinitionPropertyComponent(Complex parent, String parentType, String name, SubstanceDefinition.SubstanceDefinitionPropertyComponent 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:"+name,index > -1);
24840    }
24841    composeBackboneElement(t, "property", name, element, index);
24842    if (element.hasType()) {
24843      composeCodeableConcept(t, "SubstanceDefinitionPropertyComponent", "type", element.getType(), -1);
24844    }
24845    if (element.hasValue()) {
24846      composeType(t, "SubstanceDefinitionPropertyComponent", "value", element.getValue(), -1);
24847    }
24848  }
24849
24850  protected void composeSubstanceDefinitionMolecularWeightComponent(Complex parent, String parentType, String name, SubstanceDefinition.SubstanceDefinitionMolecularWeightComponent element, int index) {
24851    if (element == null) 
24852      return;
24853    Complex t;
24854    if (Utilities.noString(parentType))
24855      t = parent;
24856    else {
24857      t = parent.predicate("fhir:"+name,index > -1);
24858    }
24859    composeBackboneElement(t, "molecularWeight", name, element, index);
24860    if (element.hasMethod()) {
24861      composeCodeableConcept(t, "SubstanceDefinitionMolecularWeightComponent", "method", element.getMethod(), -1);
24862    }
24863    if (element.hasType()) {
24864      composeCodeableConcept(t, "SubstanceDefinitionMolecularWeightComponent", "type", element.getType(), -1);
24865    }
24866    if (element.hasAmount()) {
24867      composeQuantity(t, "SubstanceDefinitionMolecularWeightComponent", "amount", element.getAmount(), -1);
24868    }
24869  }
24870
24871  protected void composeSubstanceDefinitionStructureComponent(Complex parent, String parentType, String name, SubstanceDefinition.SubstanceDefinitionStructureComponent element, int index) {
24872    if (element == null) 
24873      return;
24874    Complex t;
24875    if (Utilities.noString(parentType))
24876      t = parent;
24877    else {
24878      t = parent.predicate("fhir:"+name,index > -1);
24879    }
24880    composeBackboneElement(t, "structure", name, element, index);
24881    if (element.hasStereochemistry()) {
24882      composeCodeableConcept(t, "SubstanceDefinitionStructureComponent", "stereochemistry", element.getStereochemistry(), -1);
24883    }
24884    if (element.hasOpticalActivity()) {
24885      composeCodeableConcept(t, "SubstanceDefinitionStructureComponent", "opticalActivity", element.getOpticalActivity(), -1);
24886    }
24887    if (element.hasMolecularFormulaElement()) {
24888      composeString(t, "SubstanceDefinitionStructureComponent", "molecularFormula", element.getMolecularFormulaElement(), -1);
24889    }
24890    if (element.hasMolecularFormulaByMoietyElement()) {
24891      composeString(t, "SubstanceDefinitionStructureComponent", "molecularFormulaByMoiety", element.getMolecularFormulaByMoietyElement(), -1);
24892    }
24893    if (element.hasMolecularWeight()) {
24894      composeSubstanceDefinitionMolecularWeightComponent(t, "SubstanceDefinitionStructureComponent", "molecularWeight", element.getMolecularWeight(), -1);
24895    }
24896    for (int i = 0; i < element.getTechnique().size(); i++) {
24897      composeCodeableConcept(t, "SubstanceDefinitionStructureComponent", "technique", element.getTechnique().get(i), i);
24898    }
24899    for (int i = 0; i < element.getSourceDocument().size(); i++) {
24900      composeReference(t, "SubstanceDefinitionStructureComponent", "sourceDocument", element.getSourceDocument().get(i), i);
24901    }
24902    for (int i = 0; i < element.getRepresentation().size(); i++) {
24903      composeSubstanceDefinitionStructureRepresentationComponent(t, "SubstanceDefinitionStructureComponent", "representation", element.getRepresentation().get(i), i);
24904    }
24905  }
24906
24907  protected void composeSubstanceDefinitionStructureRepresentationComponent(Complex parent, String parentType, String name, SubstanceDefinition.SubstanceDefinitionStructureRepresentationComponent element, int index) {
24908    if (element == null) 
24909      return;
24910    Complex t;
24911    if (Utilities.noString(parentType))
24912      t = parent;
24913    else {
24914      t = parent.predicate("fhir:"+name,index > -1);
24915    }
24916    composeBackboneElement(t, "representation", name, element, index);
24917    if (element.hasType()) {
24918      composeCodeableConcept(t, "SubstanceDefinitionStructureRepresentationComponent", "type", element.getType(), -1);
24919    }
24920    if (element.hasRepresentationElement()) {
24921      composeString(t, "SubstanceDefinitionStructureRepresentationComponent", "representation", element.getRepresentationElement(), -1);
24922    }
24923    if (element.hasFormat()) {
24924      composeCodeableConcept(t, "SubstanceDefinitionStructureRepresentationComponent", "format", element.getFormat(), -1);
24925    }
24926    if (element.hasDocument()) {
24927      composeReference(t, "SubstanceDefinitionStructureRepresentationComponent", "document", element.getDocument(), -1);
24928    }
24929  }
24930
24931  protected void composeSubstanceDefinitionCodeComponent(Complex parent, String parentType, String name, SubstanceDefinition.SubstanceDefinitionCodeComponent element, int index) {
24932    if (element == null) 
24933      return;
24934    Complex t;
24935    if (Utilities.noString(parentType))
24936      t = parent;
24937    else {
24938      t = parent.predicate("fhir:"+name,index > -1);
24939    }
24940    composeBackboneElement(t, "code", name, element, index);
24941    if (element.hasCode()) {
24942      composeCodeableConcept(t, "SubstanceDefinitionCodeComponent", "code", element.getCode(), -1);
24943    }
24944    if (element.hasStatus()) {
24945      composeCodeableConcept(t, "SubstanceDefinitionCodeComponent", "status", element.getStatus(), -1);
24946    }
24947    if (element.hasStatusDateElement()) {
24948      composeDateTime(t, "SubstanceDefinitionCodeComponent", "statusDate", element.getStatusDateElement(), -1);
24949    }
24950    for (int i = 0; i < element.getNote().size(); i++) {
24951      composeAnnotation(t, "SubstanceDefinitionCodeComponent", "note", element.getNote().get(i), i);
24952    }
24953    for (int i = 0; i < element.getSource().size(); i++) {
24954      composeReference(t, "SubstanceDefinitionCodeComponent", "source", element.getSource().get(i), i);
24955    }
24956  }
24957
24958  protected void composeSubstanceDefinitionNameComponent(Complex parent, String parentType, String name, SubstanceDefinition.SubstanceDefinitionNameComponent element, int index) {
24959    if (element == null) 
24960      return;
24961    Complex t;
24962    if (Utilities.noString(parentType))
24963      t = parent;
24964    else {
24965      t = parent.predicate("fhir:"+name,index > -1);
24966    }
24967    composeBackboneElement(t, "name", name, element, index);
24968    if (element.hasNameElement()) {
24969      composeString(t, "SubstanceDefinitionNameComponent", "name", element.getNameElement(), -1);
24970    }
24971    if (element.hasType()) {
24972      composeCodeableConcept(t, "SubstanceDefinitionNameComponent", "type", element.getType(), -1);
24973    }
24974    if (element.hasStatus()) {
24975      composeCodeableConcept(t, "SubstanceDefinitionNameComponent", "status", element.getStatus(), -1);
24976    }
24977    if (element.hasPreferredElement()) {
24978      composeBoolean(t, "SubstanceDefinitionNameComponent", "preferred", element.getPreferredElement(), -1);
24979    }
24980    for (int i = 0; i < element.getLanguage().size(); i++) {
24981      composeCodeableConcept(t, "SubstanceDefinitionNameComponent", "language", element.getLanguage().get(i), i);
24982    }
24983    for (int i = 0; i < element.getDomain().size(); i++) {
24984      composeCodeableConcept(t, "SubstanceDefinitionNameComponent", "domain", element.getDomain().get(i), i);
24985    }
24986    for (int i = 0; i < element.getJurisdiction().size(); i++) {
24987      composeCodeableConcept(t, "SubstanceDefinitionNameComponent", "jurisdiction", element.getJurisdiction().get(i), i);
24988    }
24989    for (int i = 0; i < element.getSynonym().size(); i++) {
24990      composeSubstanceDefinitionNameComponent(t, "SubstanceDefinitionNameComponent", "synonym", element.getSynonym().get(i), i);
24991    }
24992    for (int i = 0; i < element.getTranslation().size(); i++) {
24993      composeSubstanceDefinitionNameComponent(t, "SubstanceDefinitionNameComponent", "translation", element.getTranslation().get(i), i);
24994    }
24995    for (int i = 0; i < element.getOfficial().size(); i++) {
24996      composeSubstanceDefinitionNameOfficialComponent(t, "SubstanceDefinitionNameComponent", "official", element.getOfficial().get(i), i);
24997    }
24998    for (int i = 0; i < element.getSource().size(); i++) {
24999      composeReference(t, "SubstanceDefinitionNameComponent", "source", element.getSource().get(i), i);
25000    }
25001  }
25002
25003  protected void composeSubstanceDefinitionNameOfficialComponent(Complex parent, String parentType, String name, SubstanceDefinition.SubstanceDefinitionNameOfficialComponent element, int index) {
25004    if (element == null) 
25005      return;
25006    Complex t;
25007    if (Utilities.noString(parentType))
25008      t = parent;
25009    else {
25010      t = parent.predicate("fhir:"+name,index > -1);
25011    }
25012    composeBackboneElement(t, "official", name, element, index);
25013    if (element.hasAuthority()) {
25014      composeCodeableConcept(t, "SubstanceDefinitionNameOfficialComponent", "authority", element.getAuthority(), -1);
25015    }
25016    if (element.hasStatus()) {
25017      composeCodeableConcept(t, "SubstanceDefinitionNameOfficialComponent", "status", element.getStatus(), -1);
25018    }
25019    if (element.hasDateElement()) {
25020      composeDateTime(t, "SubstanceDefinitionNameOfficialComponent", "date", element.getDateElement(), -1);
25021    }
25022  }
25023
25024  protected void composeSubstanceDefinitionRelationshipComponent(Complex parent, String parentType, String name, SubstanceDefinition.SubstanceDefinitionRelationshipComponent element, int index) {
25025    if (element == null) 
25026      return;
25027    Complex t;
25028    if (Utilities.noString(parentType))
25029      t = parent;
25030    else {
25031      t = parent.predicate("fhir:"+name,index > -1);
25032    }
25033    composeBackboneElement(t, "relationship", name, element, index);
25034    if (element.hasSubstanceDefinition()) {
25035      composeType(t, "SubstanceDefinitionRelationshipComponent", "substanceDefinition", element.getSubstanceDefinition(), -1);
25036    }
25037    if (element.hasType()) {
25038      composeCodeableConcept(t, "SubstanceDefinitionRelationshipComponent", "type", element.getType(), -1);
25039    }
25040    if (element.hasIsDefiningElement()) {
25041      composeBoolean(t, "SubstanceDefinitionRelationshipComponent", "isDefining", element.getIsDefiningElement(), -1);
25042    }
25043    if (element.hasAmount()) {
25044      composeType(t, "SubstanceDefinitionRelationshipComponent", "amount", element.getAmount(), -1);
25045    }
25046    if (element.hasRatioHighLimitAmount()) {
25047      composeRatio(t, "SubstanceDefinitionRelationshipComponent", "ratioHighLimitAmount", element.getRatioHighLimitAmount(), -1);
25048    }
25049    if (element.hasComparator()) {
25050      composeCodeableConcept(t, "SubstanceDefinitionRelationshipComponent", "comparator", element.getComparator(), -1);
25051    }
25052    for (int i = 0; i < element.getSource().size(); i++) {
25053      composeReference(t, "SubstanceDefinitionRelationshipComponent", "source", element.getSource().get(i), i);
25054    }
25055  }
25056
25057  protected void composeSubstanceDefinitionSourceMaterialComponent(Complex parent, String parentType, String name, SubstanceDefinition.SubstanceDefinitionSourceMaterialComponent element, int index) {
25058    if (element == null) 
25059      return;
25060    Complex t;
25061    if (Utilities.noString(parentType))
25062      t = parent;
25063    else {
25064      t = parent.predicate("fhir:"+name,index > -1);
25065    }
25066    composeBackboneElement(t, "sourceMaterial", name, element, index);
25067    if (element.hasType()) {
25068      composeCodeableConcept(t, "SubstanceDefinitionSourceMaterialComponent", "type", element.getType(), -1);
25069    }
25070    if (element.hasGenus()) {
25071      composeCodeableConcept(t, "SubstanceDefinitionSourceMaterialComponent", "genus", element.getGenus(), -1);
25072    }
25073    if (element.hasSpecies()) {
25074      composeCodeableConcept(t, "SubstanceDefinitionSourceMaterialComponent", "species", element.getSpecies(), -1);
25075    }
25076    if (element.hasPart()) {
25077      composeCodeableConcept(t, "SubstanceDefinitionSourceMaterialComponent", "part", element.getPart(), -1);
25078    }
25079    for (int i = 0; i < element.getCountryOfOrigin().size(); i++) {
25080      composeCodeableConcept(t, "SubstanceDefinitionSourceMaterialComponent", "countryOfOrigin", element.getCountryOfOrigin().get(i), i);
25081    }
25082  }
25083
25084  protected void composeSubstanceNucleicAcid(Complex parent, String parentType, String name, SubstanceNucleicAcid element, int index) {
25085    if (element == null) 
25086      return;
25087    Complex t;
25088    if (Utilities.noString(parentType))
25089      t = parent;
25090    else {
25091      t = parent.predicate("fhir:"+name,index > -1);
25092    }
25093    composeDomainResource(t, "SubstanceNucleicAcid", name, element, index);
25094    if (element.hasSequenceType()) {
25095      composeCodeableConcept(t, "SubstanceNucleicAcid", "sequenceType", element.getSequenceType(), -1);
25096    }
25097    if (element.hasNumberOfSubunitsElement()) {
25098      composeInteger(t, "SubstanceNucleicAcid", "numberOfSubunits", element.getNumberOfSubunitsElement(), -1);
25099    }
25100    if (element.hasAreaOfHybridisationElement()) {
25101      composeString(t, "SubstanceNucleicAcid", "areaOfHybridisation", element.getAreaOfHybridisationElement(), -1);
25102    }
25103    if (element.hasOligoNucleotideType()) {
25104      composeCodeableConcept(t, "SubstanceNucleicAcid", "oligoNucleotideType", element.getOligoNucleotideType(), -1);
25105    }
25106    for (int i = 0; i < element.getSubunit().size(); i++) {
25107      composeSubstanceNucleicAcidSubunitComponent(t, "SubstanceNucleicAcid", "subunit", element.getSubunit().get(i), i);
25108    }
25109  }
25110
25111  protected void composeSubstanceNucleicAcidSubunitComponent(Complex parent, String parentType, String name, SubstanceNucleicAcid.SubstanceNucleicAcidSubunitComponent element, int index) {
25112    if (element == null) 
25113      return;
25114    Complex t;
25115    if (Utilities.noString(parentType))
25116      t = parent;
25117    else {
25118      t = parent.predicate("fhir:"+name,index > -1);
25119    }
25120    composeBackboneElement(t, "subunit", name, element, index);
25121    if (element.hasSubunitElement()) {
25122      composeInteger(t, "SubstanceNucleicAcidSubunitComponent", "subunit", element.getSubunitElement(), -1);
25123    }
25124    if (element.hasSequenceElement()) {
25125      composeString(t, "SubstanceNucleicAcidSubunitComponent", "sequence", element.getSequenceElement(), -1);
25126    }
25127    if (element.hasLengthElement()) {
25128      composeInteger(t, "SubstanceNucleicAcidSubunitComponent", "length", element.getLengthElement(), -1);
25129    }
25130    if (element.hasSequenceAttachment()) {
25131      composeAttachment(t, "SubstanceNucleicAcidSubunitComponent", "sequenceAttachment", element.getSequenceAttachment(), -1);
25132    }
25133    if (element.hasFivePrime()) {
25134      composeCodeableConcept(t, "SubstanceNucleicAcidSubunitComponent", "fivePrime", element.getFivePrime(), -1);
25135    }
25136    if (element.hasThreePrime()) {
25137      composeCodeableConcept(t, "SubstanceNucleicAcidSubunitComponent", "threePrime", element.getThreePrime(), -1);
25138    }
25139    for (int i = 0; i < element.getLinkage().size(); i++) {
25140      composeSubstanceNucleicAcidSubunitLinkageComponent(t, "SubstanceNucleicAcidSubunitComponent", "linkage", element.getLinkage().get(i), i);
25141    }
25142    for (int i = 0; i < element.getSugar().size(); i++) {
25143      composeSubstanceNucleicAcidSubunitSugarComponent(t, "SubstanceNucleicAcidSubunitComponent", "sugar", element.getSugar().get(i), i);
25144    }
25145  }
25146
25147  protected void composeSubstanceNucleicAcidSubunitLinkageComponent(Complex parent, String parentType, String name, SubstanceNucleicAcid.SubstanceNucleicAcidSubunitLinkageComponent element, int index) {
25148    if (element == null) 
25149      return;
25150    Complex t;
25151    if (Utilities.noString(parentType))
25152      t = parent;
25153    else {
25154      t = parent.predicate("fhir:"+name,index > -1);
25155    }
25156    composeBackboneElement(t, "linkage", name, element, index);
25157    if (element.hasConnectivityElement()) {
25158      composeString(t, "SubstanceNucleicAcidSubunitLinkageComponent", "connectivity", element.getConnectivityElement(), -1);
25159    }
25160    if (element.hasIdentifier()) {
25161      composeIdentifier(t, "SubstanceNucleicAcidSubunitLinkageComponent", "identifier", element.getIdentifier(), -1);
25162    }
25163    if (element.hasNameElement()) {
25164      composeString(t, "SubstanceNucleicAcidSubunitLinkageComponent", "name", element.getNameElement(), -1);
25165    }
25166    if (element.hasResidueSiteElement()) {
25167      composeString(t, "SubstanceNucleicAcidSubunitLinkageComponent", "residueSite", element.getResidueSiteElement(), -1);
25168    }
25169  }
25170
25171  protected void composeSubstanceNucleicAcidSubunitSugarComponent(Complex parent, String parentType, String name, SubstanceNucleicAcid.SubstanceNucleicAcidSubunitSugarComponent element, int index) {
25172    if (element == null) 
25173      return;
25174    Complex t;
25175    if (Utilities.noString(parentType))
25176      t = parent;
25177    else {
25178      t = parent.predicate("fhir:"+name,index > -1);
25179    }
25180    composeBackboneElement(t, "sugar", name, element, index);
25181    if (element.hasIdentifier()) {
25182      composeIdentifier(t, "SubstanceNucleicAcidSubunitSugarComponent", "identifier", element.getIdentifier(), -1);
25183    }
25184    if (element.hasNameElement()) {
25185      composeString(t, "SubstanceNucleicAcidSubunitSugarComponent", "name", element.getNameElement(), -1);
25186    }
25187    if (element.hasResidueSiteElement()) {
25188      composeString(t, "SubstanceNucleicAcidSubunitSugarComponent", "residueSite", element.getResidueSiteElement(), -1);
25189    }
25190  }
25191
25192  protected void composeSubstancePolymer(Complex parent, String parentType, String name, SubstancePolymer element, int index) {
25193    if (element == null) 
25194      return;
25195    Complex t;
25196    if (Utilities.noString(parentType))
25197      t = parent;
25198    else {
25199      t = parent.predicate("fhir:"+name,index > -1);
25200    }
25201    composeDomainResource(t, "SubstancePolymer", name, element, index);
25202    if (element.hasIdentifier()) {
25203      composeIdentifier(t, "SubstancePolymer", "identifier", element.getIdentifier(), -1);
25204    }
25205    if (element.hasClass_()) {
25206      composeCodeableConcept(t, "SubstancePolymer", "class", element.getClass_(), -1);
25207    }
25208    if (element.hasGeometry()) {
25209      composeCodeableConcept(t, "SubstancePolymer", "geometry", element.getGeometry(), -1);
25210    }
25211    for (int i = 0; i < element.getCopolymerConnectivity().size(); i++) {
25212      composeCodeableConcept(t, "SubstancePolymer", "copolymerConnectivity", element.getCopolymerConnectivity().get(i), i);
25213    }
25214    if (element.hasModificationElement()) {
25215      composeString(t, "SubstancePolymer", "modification", element.getModificationElement(), -1);
25216    }
25217    for (int i = 0; i < element.getMonomerSet().size(); i++) {
25218      composeSubstancePolymerMonomerSetComponent(t, "SubstancePolymer", "monomerSet", element.getMonomerSet().get(i), i);
25219    }
25220    for (int i = 0; i < element.getRepeat().size(); i++) {
25221      composeSubstancePolymerRepeatComponent(t, "SubstancePolymer", "repeat", element.getRepeat().get(i), i);
25222    }
25223  }
25224
25225  protected void composeSubstancePolymerMonomerSetComponent(Complex parent, String parentType, String name, SubstancePolymer.SubstancePolymerMonomerSetComponent 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:"+name,index > -1);
25233    }
25234    composeBackboneElement(t, "monomerSet", name, element, index);
25235    if (element.hasRatioType()) {
25236      composeCodeableConcept(t, "SubstancePolymerMonomerSetComponent", "ratioType", element.getRatioType(), -1);
25237    }
25238    for (int i = 0; i < element.getStartingMaterial().size(); i++) {
25239      composeSubstancePolymerMonomerSetStartingMaterialComponent(t, "SubstancePolymerMonomerSetComponent", "startingMaterial", element.getStartingMaterial().get(i), i);
25240    }
25241  }
25242
25243  protected void composeSubstancePolymerMonomerSetStartingMaterialComponent(Complex parent, String parentType, String name, SubstancePolymer.SubstancePolymerMonomerSetStartingMaterialComponent 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:"+name,index > -1);
25251    }
25252    composeBackboneElement(t, "startingMaterial", name, element, index);
25253    if (element.hasCode()) {
25254      composeCodeableConcept(t, "SubstancePolymerMonomerSetStartingMaterialComponent", "code", element.getCode(), -1);
25255    }
25256    if (element.hasCategory()) {
25257      composeCodeableConcept(t, "SubstancePolymerMonomerSetStartingMaterialComponent", "category", element.getCategory(), -1);
25258    }
25259    if (element.hasIsDefiningElement()) {
25260      composeBoolean(t, "SubstancePolymerMonomerSetStartingMaterialComponent", "isDefining", element.getIsDefiningElement(), -1);
25261    }
25262    if (element.hasAmount()) {
25263      composeQuantity(t, "SubstancePolymerMonomerSetStartingMaterialComponent", "amount", element.getAmount(), -1);
25264    }
25265  }
25266
25267  protected void composeSubstancePolymerRepeatComponent(Complex parent, String parentType, String name, SubstancePolymer.SubstancePolymerRepeatComponent element, int index) {
25268    if (element == null) 
25269      return;
25270    Complex t;
25271    if (Utilities.noString(parentType))
25272      t = parent;
25273    else {
25274      t = parent.predicate("fhir:"+name,index > -1);
25275    }
25276    composeBackboneElement(t, "repeat", name, element, index);
25277    if (element.hasAverageMolecularFormulaElement()) {
25278      composeString(t, "SubstancePolymerRepeatComponent", "averageMolecularFormula", element.getAverageMolecularFormulaElement(), -1);
25279    }
25280    if (element.hasRepeatUnitAmountType()) {
25281      composeCodeableConcept(t, "SubstancePolymerRepeatComponent", "repeatUnitAmountType", element.getRepeatUnitAmountType(), -1);
25282    }
25283    for (int i = 0; i < element.getRepeatUnit().size(); i++) {
25284      composeSubstancePolymerRepeatRepeatUnitComponent(t, "SubstancePolymerRepeatComponent", "repeatUnit", element.getRepeatUnit().get(i), i);
25285    }
25286  }
25287
25288  protected void composeSubstancePolymerRepeatRepeatUnitComponent(Complex parent, String parentType, String name, SubstancePolymer.SubstancePolymerRepeatRepeatUnitComponent element, int index) {
25289    if (element == null) 
25290      return;
25291    Complex t;
25292    if (Utilities.noString(parentType))
25293      t = parent;
25294    else {
25295      t = parent.predicate("fhir:"+name,index > -1);
25296    }
25297    composeBackboneElement(t, "repeatUnit", name, element, index);
25298    if (element.hasUnitElement()) {
25299      composeString(t, "SubstancePolymerRepeatRepeatUnitComponent", "unit", element.getUnitElement(), -1);
25300    }
25301    if (element.hasOrientation()) {
25302      composeCodeableConcept(t, "SubstancePolymerRepeatRepeatUnitComponent", "orientation", element.getOrientation(), -1);
25303    }
25304    if (element.hasAmountElement()) {
25305      composeInteger(t, "SubstancePolymerRepeatRepeatUnitComponent", "amount", element.getAmountElement(), -1);
25306    }
25307    for (int i = 0; i < element.getDegreeOfPolymerisation().size(); i++) {
25308      composeSubstancePolymerRepeatRepeatUnitDegreeOfPolymerisationComponent(t, "SubstancePolymerRepeatRepeatUnitComponent", "degreeOfPolymerisation", element.getDegreeOfPolymerisation().get(i), i);
25309    }
25310    for (int i = 0; i < element.getStructuralRepresentation().size(); i++) {
25311      composeSubstancePolymerRepeatRepeatUnitStructuralRepresentationComponent(t, "SubstancePolymerRepeatRepeatUnitComponent", "structuralRepresentation", element.getStructuralRepresentation().get(i), i);
25312    }
25313  }
25314
25315  protected void composeSubstancePolymerRepeatRepeatUnitDegreeOfPolymerisationComponent(Complex parent, String parentType, String name, SubstancePolymer.SubstancePolymerRepeatRepeatUnitDegreeOfPolymerisationComponent 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:"+name,index > -1);
25323    }
25324    composeBackboneElement(t, "degreeOfPolymerisation", name, element, index);
25325    if (element.hasType()) {
25326      composeCodeableConcept(t, "SubstancePolymerRepeatRepeatUnitDegreeOfPolymerisationComponent", "type", element.getType(), -1);
25327    }
25328    if (element.hasAverageElement()) {
25329      composeInteger(t, "SubstancePolymerRepeatRepeatUnitDegreeOfPolymerisationComponent", "average", element.getAverageElement(), -1);
25330    }
25331    if (element.hasLowElement()) {
25332      composeInteger(t, "SubstancePolymerRepeatRepeatUnitDegreeOfPolymerisationComponent", "low", element.getLowElement(), -1);
25333    }
25334    if (element.hasHighElement()) {
25335      composeInteger(t, "SubstancePolymerRepeatRepeatUnitDegreeOfPolymerisationComponent", "high", element.getHighElement(), -1);
25336    }
25337  }
25338
25339  protected void composeSubstancePolymerRepeatRepeatUnitStructuralRepresentationComponent(Complex parent, String parentType, String name, SubstancePolymer.SubstancePolymerRepeatRepeatUnitStructuralRepresentationComponent element, int index) {
25340    if (element == null) 
25341      return;
25342    Complex t;
25343    if (Utilities.noString(parentType))
25344      t = parent;
25345    else {
25346      t = parent.predicate("fhir:"+name,index > -1);
25347    }
25348    composeBackboneElement(t, "structuralRepresentation", name, element, index);
25349    if (element.hasType()) {
25350      composeCodeableConcept(t, "SubstancePolymerRepeatRepeatUnitStructuralRepresentationComponent", "type", element.getType(), -1);
25351    }
25352    if (element.hasRepresentationElement()) {
25353      composeString(t, "SubstancePolymerRepeatRepeatUnitStructuralRepresentationComponent", "representation", element.getRepresentationElement(), -1);
25354    }
25355    if (element.hasFormat()) {
25356      composeCodeableConcept(t, "SubstancePolymerRepeatRepeatUnitStructuralRepresentationComponent", "format", element.getFormat(), -1);
25357    }
25358    if (element.hasAttachment()) {
25359      composeAttachment(t, "SubstancePolymerRepeatRepeatUnitStructuralRepresentationComponent", "attachment", element.getAttachment(), -1);
25360    }
25361  }
25362
25363  protected void composeSubstanceProtein(Complex parent, String parentType, String name, SubstanceProtein element, int index) {
25364    if (element == null) 
25365      return;
25366    Complex t;
25367    if (Utilities.noString(parentType))
25368      t = parent;
25369    else {
25370      t = parent.predicate("fhir:"+name,index > -1);
25371    }
25372    composeDomainResource(t, "SubstanceProtein", name, element, index);
25373    if (element.hasSequenceType()) {
25374      composeCodeableConcept(t, "SubstanceProtein", "sequenceType", element.getSequenceType(), -1);
25375    }
25376    if (element.hasNumberOfSubunitsElement()) {
25377      composeInteger(t, "SubstanceProtein", "numberOfSubunits", element.getNumberOfSubunitsElement(), -1);
25378    }
25379    for (int i = 0; i < element.getDisulfideLinkage().size(); i++) {
25380      composeString(t, "SubstanceProtein", "disulfideLinkage", element.getDisulfideLinkage().get(i), i);
25381    }
25382    for (int i = 0; i < element.getSubunit().size(); i++) {
25383      composeSubstanceProteinSubunitComponent(t, "SubstanceProtein", "subunit", element.getSubunit().get(i), i);
25384    }
25385  }
25386
25387  protected void composeSubstanceProteinSubunitComponent(Complex parent, String parentType, String name, SubstanceProtein.SubstanceProteinSubunitComponent element, int index) {
25388    if (element == null) 
25389      return;
25390    Complex t;
25391    if (Utilities.noString(parentType))
25392      t = parent;
25393    else {
25394      t = parent.predicate("fhir:"+name,index > -1);
25395    }
25396    composeBackboneElement(t, "subunit", name, element, index);
25397    if (element.hasSubunitElement()) {
25398      composeInteger(t, "SubstanceProteinSubunitComponent", "subunit", element.getSubunitElement(), -1);
25399    }
25400    if (element.hasSequenceElement()) {
25401      composeString(t, "SubstanceProteinSubunitComponent", "sequence", element.getSequenceElement(), -1);
25402    }
25403    if (element.hasLengthElement()) {
25404      composeInteger(t, "SubstanceProteinSubunitComponent", "length", element.getLengthElement(), -1);
25405    }
25406    if (element.hasSequenceAttachment()) {
25407      composeAttachment(t, "SubstanceProteinSubunitComponent", "sequenceAttachment", element.getSequenceAttachment(), -1);
25408    }
25409    if (element.hasNTerminalModificationId()) {
25410      composeIdentifier(t, "SubstanceProteinSubunitComponent", "nTerminalModificationId", element.getNTerminalModificationId(), -1);
25411    }
25412    if (element.hasNTerminalModificationElement()) {
25413      composeString(t, "SubstanceProteinSubunitComponent", "nTerminalModification", element.getNTerminalModificationElement(), -1);
25414    }
25415    if (element.hasCTerminalModificationId()) {
25416      composeIdentifier(t, "SubstanceProteinSubunitComponent", "cTerminalModificationId", element.getCTerminalModificationId(), -1);
25417    }
25418    if (element.hasCTerminalModificationElement()) {
25419      composeString(t, "SubstanceProteinSubunitComponent", "cTerminalModification", element.getCTerminalModificationElement(), -1);
25420    }
25421  }
25422
25423  protected void composeSubstanceReferenceInformation(Complex parent, String parentType, String name, SubstanceReferenceInformation 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:"+name,index > -1);
25431    }
25432    composeDomainResource(t, "SubstanceReferenceInformation", name, element, index);
25433    if (element.hasCommentElement()) {
25434      composeString(t, "SubstanceReferenceInformation", "comment", element.getCommentElement(), -1);
25435    }
25436    for (int i = 0; i < element.getGene().size(); i++) {
25437      composeSubstanceReferenceInformationGeneComponent(t, "SubstanceReferenceInformation", "gene", element.getGene().get(i), i);
25438    }
25439    for (int i = 0; i < element.getGeneElement().size(); i++) {
25440      composeSubstanceReferenceInformationGeneElementComponent(t, "SubstanceReferenceInformation", "geneElement", element.getGeneElement().get(i), i);
25441    }
25442    for (int i = 0; i < element.getTarget().size(); i++) {
25443      composeSubstanceReferenceInformationTargetComponent(t, "SubstanceReferenceInformation", "target", element.getTarget().get(i), i);
25444    }
25445  }
25446
25447  protected void composeSubstanceReferenceInformationGeneComponent(Complex parent, String parentType, String name, SubstanceReferenceInformation.SubstanceReferenceInformationGeneComponent element, int index) {
25448    if (element == null) 
25449      return;
25450    Complex t;
25451    if (Utilities.noString(parentType))
25452      t = parent;
25453    else {
25454      t = parent.predicate("fhir:"+name,index > -1);
25455    }
25456    composeBackboneElement(t, "gene", name, element, index);
25457    if (element.hasGeneSequenceOrigin()) {
25458      composeCodeableConcept(t, "SubstanceReferenceInformationGeneComponent", "geneSequenceOrigin", element.getGeneSequenceOrigin(), -1);
25459    }
25460    if (element.hasGene()) {
25461      composeCodeableConcept(t, "SubstanceReferenceInformationGeneComponent", "gene", element.getGene(), -1);
25462    }
25463    for (int i = 0; i < element.getSource().size(); i++) {
25464      composeReference(t, "SubstanceReferenceInformationGeneComponent", "source", element.getSource().get(i), i);
25465    }
25466  }
25467
25468  protected void composeSubstanceReferenceInformationGeneElementComponent(Complex parent, String parentType, String name, SubstanceReferenceInformation.SubstanceReferenceInformationGeneElementComponent element, int index) {
25469    if (element == null) 
25470      return;
25471    Complex t;
25472    if (Utilities.noString(parentType))
25473      t = parent;
25474    else {
25475      t = parent.predicate("fhir:"+name,index > -1);
25476    }
25477    composeBackboneElement(t, "geneElement", name, element, index);
25478    if (element.hasType()) {
25479      composeCodeableConcept(t, "SubstanceReferenceInformationGeneElementComponent", "type", element.getType(), -1);
25480    }
25481    if (element.hasElement()) {
25482      composeIdentifier(t, "SubstanceReferenceInformationGeneElementComponent", "element", element.getElement(), -1);
25483    }
25484    for (int i = 0; i < element.getSource().size(); i++) {
25485      composeReference(t, "SubstanceReferenceInformationGeneElementComponent", "source", element.getSource().get(i), i);
25486    }
25487  }
25488
25489  protected void composeSubstanceReferenceInformationTargetComponent(Complex parent, String parentType, String name, SubstanceReferenceInformation.SubstanceReferenceInformationTargetComponent element, int index) {
25490    if (element == null) 
25491      return;
25492    Complex t;
25493    if (Utilities.noString(parentType))
25494      t = parent;
25495    else {
25496      t = parent.predicate("fhir:"+name,index > -1);
25497    }
25498    composeBackboneElement(t, "target", name, element, index);
25499    if (element.hasTarget()) {
25500      composeIdentifier(t, "SubstanceReferenceInformationTargetComponent", "target", element.getTarget(), -1);
25501    }
25502    if (element.hasType()) {
25503      composeCodeableConcept(t, "SubstanceReferenceInformationTargetComponent", "type", element.getType(), -1);
25504    }
25505    if (element.hasInteraction()) {
25506      composeCodeableConcept(t, "SubstanceReferenceInformationTargetComponent", "interaction", element.getInteraction(), -1);
25507    }
25508    if (element.hasOrganism()) {
25509      composeCodeableConcept(t, "SubstanceReferenceInformationTargetComponent", "organism", element.getOrganism(), -1);
25510    }
25511    if (element.hasOrganismType()) {
25512      composeCodeableConcept(t, "SubstanceReferenceInformationTargetComponent", "organismType", element.getOrganismType(), -1);
25513    }
25514    if (element.hasAmount()) {
25515      composeType(t, "SubstanceReferenceInformationTargetComponent", "amount", element.getAmount(), -1);
25516    }
25517    if (element.hasAmountType()) {
25518      composeCodeableConcept(t, "SubstanceReferenceInformationTargetComponent", "amountType", element.getAmountType(), -1);
25519    }
25520    for (int i = 0; i < element.getSource().size(); i++) {
25521      composeReference(t, "SubstanceReferenceInformationTargetComponent", "source", element.getSource().get(i), i);
25522    }
25523  }
25524
25525  protected void composeSubstanceSourceMaterial(Complex parent, String parentType, String name, SubstanceSourceMaterial 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:"+name,index > -1);
25533    }
25534    composeDomainResource(t, "SubstanceSourceMaterial", name, element, index);
25535    if (element.hasSourceMaterialClass()) {
25536      composeCodeableConcept(t, "SubstanceSourceMaterial", "sourceMaterialClass", element.getSourceMaterialClass(), -1);
25537    }
25538    if (element.hasSourceMaterialType()) {
25539      composeCodeableConcept(t, "SubstanceSourceMaterial", "sourceMaterialType", element.getSourceMaterialType(), -1);
25540    }
25541    if (element.hasSourceMaterialState()) {
25542      composeCodeableConcept(t, "SubstanceSourceMaterial", "sourceMaterialState", element.getSourceMaterialState(), -1);
25543    }
25544    if (element.hasOrganismId()) {
25545      composeIdentifier(t, "SubstanceSourceMaterial", "organismId", element.getOrganismId(), -1);
25546    }
25547    if (element.hasOrganismNameElement()) {
25548      composeString(t, "SubstanceSourceMaterial", "organismName", element.getOrganismNameElement(), -1);
25549    }
25550    for (int i = 0; i < element.getParentSubstanceId().size(); i++) {
25551      composeIdentifier(t, "SubstanceSourceMaterial", "parentSubstanceId", element.getParentSubstanceId().get(i), i);
25552    }
25553    for (int i = 0; i < element.getParentSubstanceName().size(); i++) {
25554      composeString(t, "SubstanceSourceMaterial", "parentSubstanceName", element.getParentSubstanceName().get(i), i);
25555    }
25556    for (int i = 0; i < element.getCountryOfOrigin().size(); i++) {
25557      composeCodeableConcept(t, "SubstanceSourceMaterial", "countryOfOrigin", element.getCountryOfOrigin().get(i), i);
25558    }
25559    for (int i = 0; i < element.getGeographicalLocation().size(); i++) {
25560      composeString(t, "SubstanceSourceMaterial", "geographicalLocation", element.getGeographicalLocation().get(i), i);
25561    }
25562    if (element.hasDevelopmentStage()) {
25563      composeCodeableConcept(t, "SubstanceSourceMaterial", "developmentStage", element.getDevelopmentStage(), -1);
25564    }
25565    for (int i = 0; i < element.getFractionDescription().size(); i++) {
25566      composeSubstanceSourceMaterialFractionDescriptionComponent(t, "SubstanceSourceMaterial", "fractionDescription", element.getFractionDescription().get(i), i);
25567    }
25568    if (element.hasOrganism()) {
25569      composeSubstanceSourceMaterialOrganismComponent(t, "SubstanceSourceMaterial", "organism", element.getOrganism(), -1);
25570    }
25571    for (int i = 0; i < element.getPartDescription().size(); i++) {
25572      composeSubstanceSourceMaterialPartDescriptionComponent(t, "SubstanceSourceMaterial", "partDescription", element.getPartDescription().get(i), i);
25573    }
25574  }
25575
25576  protected void composeSubstanceSourceMaterialFractionDescriptionComponent(Complex parent, String parentType, String name, SubstanceSourceMaterial.SubstanceSourceMaterialFractionDescriptionComponent element, int index) {
25577    if (element == null) 
25578      return;
25579    Complex t;
25580    if (Utilities.noString(parentType))
25581      t = parent;
25582    else {
25583      t = parent.predicate("fhir:"+name,index > -1);
25584    }
25585    composeBackboneElement(t, "fractionDescription", name, element, index);
25586    if (element.hasFractionElement()) {
25587      composeString(t, "SubstanceSourceMaterialFractionDescriptionComponent", "fraction", element.getFractionElement(), -1);
25588    }
25589    if (element.hasMaterialType()) {
25590      composeCodeableConcept(t, "SubstanceSourceMaterialFractionDescriptionComponent", "materialType", element.getMaterialType(), -1);
25591    }
25592  }
25593
25594  protected void composeSubstanceSourceMaterialOrganismComponent(Complex parent, String parentType, String name, SubstanceSourceMaterial.SubstanceSourceMaterialOrganismComponent element, int index) {
25595    if (element == null) 
25596      return;
25597    Complex t;
25598    if (Utilities.noString(parentType))
25599      t = parent;
25600    else {
25601      t = parent.predicate("fhir:"+name,index > -1);
25602    }
25603    composeBackboneElement(t, "organism", name, element, index);
25604    if (element.hasFamily()) {
25605      composeCodeableConcept(t, "SubstanceSourceMaterialOrganismComponent", "family", element.getFamily(), -1);
25606    }
25607    if (element.hasGenus()) {
25608      composeCodeableConcept(t, "SubstanceSourceMaterialOrganismComponent", "genus", element.getGenus(), -1);
25609    }
25610    if (element.hasSpecies()) {
25611      composeCodeableConcept(t, "SubstanceSourceMaterialOrganismComponent", "species", element.getSpecies(), -1);
25612    }
25613    if (element.hasIntraspecificType()) {
25614      composeCodeableConcept(t, "SubstanceSourceMaterialOrganismComponent", "intraspecificType", element.getIntraspecificType(), -1);
25615    }
25616    if (element.hasIntraspecificDescriptionElement()) {
25617      composeString(t, "SubstanceSourceMaterialOrganismComponent", "intraspecificDescription", element.getIntraspecificDescriptionElement(), -1);
25618    }
25619    for (int i = 0; i < element.getAuthor().size(); i++) {
25620      composeSubstanceSourceMaterialOrganismAuthorComponent(t, "SubstanceSourceMaterialOrganismComponent", "author", element.getAuthor().get(i), i);
25621    }
25622    if (element.hasHybrid()) {
25623      composeSubstanceSourceMaterialOrganismHybridComponent(t, "SubstanceSourceMaterialOrganismComponent", "hybrid", element.getHybrid(), -1);
25624    }
25625    if (element.hasOrganismGeneral()) {
25626      composeSubstanceSourceMaterialOrganismOrganismGeneralComponent(t, "SubstanceSourceMaterialOrganismComponent", "organismGeneral", element.getOrganismGeneral(), -1);
25627    }
25628  }
25629
25630  protected void composeSubstanceSourceMaterialOrganismAuthorComponent(Complex parent, String parentType, String name, SubstanceSourceMaterial.SubstanceSourceMaterialOrganismAuthorComponent element, int index) {
25631    if (element == null) 
25632      return;
25633    Complex t;
25634    if (Utilities.noString(parentType))
25635      t = parent;
25636    else {
25637      t = parent.predicate("fhir:"+name,index > -1);
25638    }
25639    composeBackboneElement(t, "author", name, element, index);
25640    if (element.hasAuthorType()) {
25641      composeCodeableConcept(t, "SubstanceSourceMaterialOrganismAuthorComponent", "authorType", element.getAuthorType(), -1);
25642    }
25643    if (element.hasAuthorDescriptionElement()) {
25644      composeString(t, "SubstanceSourceMaterialOrganismAuthorComponent", "authorDescription", element.getAuthorDescriptionElement(), -1);
25645    }
25646  }
25647
25648  protected void composeSubstanceSourceMaterialOrganismHybridComponent(Complex parent, String parentType, String name, SubstanceSourceMaterial.SubstanceSourceMaterialOrganismHybridComponent element, int index) {
25649    if (element == null) 
25650      return;
25651    Complex t;
25652    if (Utilities.noString(parentType))
25653      t = parent;
25654    else {
25655      t = parent.predicate("fhir:"+name,index > -1);
25656    }
25657    composeBackboneElement(t, "hybrid", name, element, index);
25658    if (element.hasMaternalOrganismIdElement()) {
25659      composeString(t, "SubstanceSourceMaterialOrganismHybridComponent", "maternalOrganismId", element.getMaternalOrganismIdElement(), -1);
25660    }
25661    if (element.hasMaternalOrganismNameElement()) {
25662      composeString(t, "SubstanceSourceMaterialOrganismHybridComponent", "maternalOrganismName", element.getMaternalOrganismNameElement(), -1);
25663    }
25664    if (element.hasPaternalOrganismIdElement()) {
25665      composeString(t, "SubstanceSourceMaterialOrganismHybridComponent", "paternalOrganismId", element.getPaternalOrganismIdElement(), -1);
25666    }
25667    if (element.hasPaternalOrganismNameElement()) {
25668      composeString(t, "SubstanceSourceMaterialOrganismHybridComponent", "paternalOrganismName", element.getPaternalOrganismNameElement(), -1);
25669    }
25670    if (element.hasHybridType()) {
25671      composeCodeableConcept(t, "SubstanceSourceMaterialOrganismHybridComponent", "hybridType", element.getHybridType(), -1);
25672    }
25673  }
25674
25675  protected void composeSubstanceSourceMaterialOrganismOrganismGeneralComponent(Complex parent, String parentType, String name, SubstanceSourceMaterial.SubstanceSourceMaterialOrganismOrganismGeneralComponent element, int index) {
25676    if (element == null) 
25677      return;
25678    Complex t;
25679    if (Utilities.noString(parentType))
25680      t = parent;
25681    else {
25682      t = parent.predicate("fhir:"+name,index > -1);
25683    }
25684    composeBackboneElement(t, "organismGeneral", name, element, index);
25685    if (element.hasKingdom()) {
25686      composeCodeableConcept(t, "SubstanceSourceMaterialOrganismOrganismGeneralComponent", "kingdom", element.getKingdom(), -1);
25687    }
25688    if (element.hasPhylum()) {
25689      composeCodeableConcept(t, "SubstanceSourceMaterialOrganismOrganismGeneralComponent", "phylum", element.getPhylum(), -1);
25690    }
25691    if (element.hasClass_()) {
25692      composeCodeableConcept(t, "SubstanceSourceMaterialOrganismOrganismGeneralComponent", "class", element.getClass_(), -1);
25693    }
25694    if (element.hasOrder()) {
25695      composeCodeableConcept(t, "SubstanceSourceMaterialOrganismOrganismGeneralComponent", "order", element.getOrder(), -1);
25696    }
25697  }
25698
25699  protected void composeSubstanceSourceMaterialPartDescriptionComponent(Complex parent, String parentType, String name, SubstanceSourceMaterial.SubstanceSourceMaterialPartDescriptionComponent element, int index) {
25700    if (element == null) 
25701      return;
25702    Complex t;
25703    if (Utilities.noString(parentType))
25704      t = parent;
25705    else {
25706      t = parent.predicate("fhir:"+name,index > -1);
25707    }
25708    composeBackboneElement(t, "partDescription", name, element, index);
25709    if (element.hasPart()) {
25710      composeCodeableConcept(t, "SubstanceSourceMaterialPartDescriptionComponent", "part", element.getPart(), -1);
25711    }
25712    if (element.hasPartLocation()) {
25713      composeCodeableConcept(t, "SubstanceSourceMaterialPartDescriptionComponent", "partLocation", element.getPartLocation(), -1);
25714    }
25715  }
25716
25717  protected void composeSupplyDelivery(Complex parent, String parentType, String name, SupplyDelivery element, int index) {
25718    if (element == null) 
25719      return;
25720    Complex t;
25721    if (Utilities.noString(parentType))
25722      t = parent;
25723    else {
25724      t = parent.predicate("fhir:"+name,index > -1);
25725    }
25726    composeDomainResource(t, "SupplyDelivery", name, element, index);
25727    for (int i = 0; i < element.getIdentifier().size(); i++) {
25728      composeIdentifier(t, "SupplyDelivery", "identifier", element.getIdentifier().get(i), i);
25729    }
25730    for (int i = 0; i < element.getBasedOn().size(); i++) {
25731      composeReference(t, "SupplyDelivery", "basedOn", element.getBasedOn().get(i), i);
25732    }
25733    for (int i = 0; i < element.getPartOf().size(); i++) {
25734      composeReference(t, "SupplyDelivery", "partOf", element.getPartOf().get(i), i);
25735    }
25736    if (element.hasStatusElement()) {
25737      composeEnum(t, "SupplyDelivery", "status", element.getStatusElement(), -1);
25738    }
25739    if (element.hasPatient()) {
25740      composeReference(t, "SupplyDelivery", "patient", element.getPatient(), -1);
25741    }
25742    if (element.hasType()) {
25743      composeCodeableConcept(t, "SupplyDelivery", "type", element.getType(), -1);
25744    }
25745    for (int i = 0; i < element.getSuppliedItem().size(); i++) {
25746      composeSupplyDeliverySuppliedItemComponent(t, "SupplyDelivery", "suppliedItem", element.getSuppliedItem().get(i), i);
25747    }
25748    if (element.hasOccurrence()) {
25749      composeType(t, "SupplyDelivery", "occurrence", element.getOccurrence(), -1);
25750    }
25751    if (element.hasSupplier()) {
25752      composeReference(t, "SupplyDelivery", "supplier", element.getSupplier(), -1);
25753    }
25754    if (element.hasDestination()) {
25755      composeReference(t, "SupplyDelivery", "destination", element.getDestination(), -1);
25756    }
25757    for (int i = 0; i < element.getReceiver().size(); i++) {
25758      composeReference(t, "SupplyDelivery", "receiver", element.getReceiver().get(i), i);
25759    }
25760  }
25761
25762  protected void composeSupplyDeliverySuppliedItemComponent(Complex parent, String parentType, String name, SupplyDelivery.SupplyDeliverySuppliedItemComponent element, int index) {
25763    if (element == null) 
25764      return;
25765    Complex t;
25766    if (Utilities.noString(parentType))
25767      t = parent;
25768    else {
25769      t = parent.predicate("fhir:"+name,index > -1);
25770    }
25771    composeBackboneElement(t, "suppliedItem", name, element, index);
25772    if (element.hasQuantity()) {
25773      composeQuantity(t, "SupplyDeliverySuppliedItemComponent", "quantity", element.getQuantity(), -1);
25774    }
25775    if (element.hasItem()) {
25776      composeType(t, "SupplyDeliverySuppliedItemComponent", "item", element.getItem(), -1);
25777    }
25778  }
25779
25780  protected void composeSupplyRequest(Complex parent, String parentType, String name, SupplyRequest element, int index) {
25781    if (element == null) 
25782      return;
25783    Complex t;
25784    if (Utilities.noString(parentType))
25785      t = parent;
25786    else {
25787      t = parent.predicate("fhir:"+name,index > -1);
25788    }
25789    composeDomainResource(t, "SupplyRequest", name, element, index);
25790    for (int i = 0; i < element.getIdentifier().size(); i++) {
25791      composeIdentifier(t, "SupplyRequest", "identifier", element.getIdentifier().get(i), i);
25792    }
25793    if (element.hasStatusElement()) {
25794      composeEnum(t, "SupplyRequest", "status", element.getStatusElement(), -1);
25795    }
25796    for (int i = 0; i < element.getBasedOn().size(); i++) {
25797      composeReference(t, "SupplyRequest", "basedOn", element.getBasedOn().get(i), i);
25798    }
25799    if (element.hasCategory()) {
25800      composeCodeableConcept(t, "SupplyRequest", "category", element.getCategory(), -1);
25801    }
25802    if (element.hasPriorityElement()) {
25803      composeEnum(t, "SupplyRequest", "priority", element.getPriorityElement(), -1);
25804    }
25805    if (element.hasDeliverFor()) {
25806      composeReference(t, "SupplyRequest", "deliverFor", element.getDeliverFor(), -1);
25807    }
25808    if (element.hasItem()) {
25809      composeCodeableReference(t, "SupplyRequest", "item", element.getItem(), -1);
25810    }
25811    if (element.hasQuantity()) {
25812      composeQuantity(t, "SupplyRequest", "quantity", element.getQuantity(), -1);
25813    }
25814    for (int i = 0; i < element.getParameter().size(); i++) {
25815      composeSupplyRequestParameterComponent(t, "SupplyRequest", "parameter", element.getParameter().get(i), i);
25816    }
25817    if (element.hasOccurrence()) {
25818      composeType(t, "SupplyRequest", "occurrence", element.getOccurrence(), -1);
25819    }
25820    if (element.hasAuthoredOnElement()) {
25821      composeDateTime(t, "SupplyRequest", "authoredOn", element.getAuthoredOnElement(), -1);
25822    }
25823    if (element.hasRequester()) {
25824      composeReference(t, "SupplyRequest", "requester", element.getRequester(), -1);
25825    }
25826    for (int i = 0; i < element.getSupplier().size(); i++) {
25827      composeReference(t, "SupplyRequest", "supplier", element.getSupplier().get(i), i);
25828    }
25829    for (int i = 0; i < element.getReason().size(); i++) {
25830      composeCodeableReference(t, "SupplyRequest", "reason", element.getReason().get(i), i);
25831    }
25832    if (element.hasDeliverFrom()) {
25833      composeReference(t, "SupplyRequest", "deliverFrom", element.getDeliverFrom(), -1);
25834    }
25835    if (element.hasDeliverTo()) {
25836      composeReference(t, "SupplyRequest", "deliverTo", element.getDeliverTo(), -1);
25837    }
25838  }
25839
25840  protected void composeSupplyRequestParameterComponent(Complex parent, String parentType, String name, SupplyRequest.SupplyRequestParameterComponent 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:"+name,index > -1);
25848    }
25849    composeBackboneElement(t, "parameter", name, element, index);
25850    if (element.hasCode()) {
25851      composeCodeableConcept(t, "SupplyRequestParameterComponent", "code", element.getCode(), -1);
25852    }
25853    if (element.hasValue()) {
25854      composeType(t, "SupplyRequestParameterComponent", "value", element.getValue(), -1);
25855    }
25856  }
25857
25858  protected void composeTask(Complex parent, String parentType, String name, Task element, int index) {
25859    if (element == null) 
25860      return;
25861    Complex t;
25862    if (Utilities.noString(parentType))
25863      t = parent;
25864    else {
25865      t = parent.predicate("fhir:"+name,index > -1);
25866    }
25867    composeDomainResource(t, "Task", name, element, index);
25868    for (int i = 0; i < element.getIdentifier().size(); i++) {
25869      composeIdentifier(t, "Task", "identifier", element.getIdentifier().get(i), i);
25870    }
25871    if (element.hasInstantiatesCanonicalElement()) {
25872      composeCanonical(t, "Task", "instantiatesCanonical", element.getInstantiatesCanonicalElement(), -1);
25873    }
25874    if (element.hasInstantiatesUriElement()) {
25875      composeUri(t, "Task", "instantiatesUri", element.getInstantiatesUriElement(), -1);
25876    }
25877    for (int i = 0; i < element.getBasedOn().size(); i++) {
25878      composeReference(t, "Task", "basedOn", element.getBasedOn().get(i), i);
25879    }
25880    if (element.hasGroupIdentifier()) {
25881      composeIdentifier(t, "Task", "groupIdentifier", element.getGroupIdentifier(), -1);
25882    }
25883    for (int i = 0; i < element.getPartOf().size(); i++) {
25884      composeReference(t, "Task", "partOf", element.getPartOf().get(i), i);
25885    }
25886    if (element.hasStatusElement()) {
25887      composeEnum(t, "Task", "status", element.getStatusElement(), -1);
25888    }
25889    if (element.hasStatusReason()) {
25890      composeCodeableReference(t, "Task", "statusReason", element.getStatusReason(), -1);
25891    }
25892    if (element.hasBusinessStatus()) {
25893      composeCodeableConcept(t, "Task", "businessStatus", element.getBusinessStatus(), -1);
25894    }
25895    if (element.hasIntentElement()) {
25896      composeEnum(t, "Task", "intent", element.getIntentElement(), -1);
25897    }
25898    if (element.hasPriorityElement()) {
25899      composeEnum(t, "Task", "priority", element.getPriorityElement(), -1);
25900    }
25901    if (element.hasDoNotPerformElement()) {
25902      composeBoolean(t, "Task", "doNotPerform", element.getDoNotPerformElement(), -1);
25903    }
25904    if (element.hasCode()) {
25905      composeCodeableConcept(t, "Task", "code", element.getCode(), -1);
25906    }
25907    if (element.hasDescriptionElement()) {
25908      composeString(t, "Task", "description", element.getDescriptionElement(), -1);
25909    }
25910    if (element.hasFocus()) {
25911      composeReference(t, "Task", "focus", element.getFocus(), -1);
25912    }
25913    if (element.hasFor()) {
25914      composeReference(t, "Task", "for", element.getFor(), -1);
25915    }
25916    if (element.hasEncounter()) {
25917      composeReference(t, "Task", "encounter", element.getEncounter(), -1);
25918    }
25919    if (element.hasRequestedPeriod()) {
25920      composePeriod(t, "Task", "requestedPeriod", element.getRequestedPeriod(), -1);
25921    }
25922    if (element.hasExecutionPeriod()) {
25923      composePeriod(t, "Task", "executionPeriod", element.getExecutionPeriod(), -1);
25924    }
25925    if (element.hasAuthoredOnElement()) {
25926      composeDateTime(t, "Task", "authoredOn", element.getAuthoredOnElement(), -1);
25927    }
25928    if (element.hasLastModifiedElement()) {
25929      composeDateTime(t, "Task", "lastModified", element.getLastModifiedElement(), -1);
25930    }
25931    if (element.hasRequester()) {
25932      composeReference(t, "Task", "requester", element.getRequester(), -1);
25933    }
25934    for (int i = 0; i < element.getRequestedPerformer().size(); i++) {
25935      composeCodeableReference(t, "Task", "requestedPerformer", element.getRequestedPerformer().get(i), i);
25936    }
25937    if (element.hasOwner()) {
25938      composeReference(t, "Task", "owner", element.getOwner(), -1);
25939    }
25940    for (int i = 0; i < element.getPerformer().size(); i++) {
25941      composeTaskPerformerComponent(t, "Task", "performer", element.getPerformer().get(i), i);
25942    }
25943    if (element.hasLocation()) {
25944      composeReference(t, "Task", "location", element.getLocation(), -1);
25945    }
25946    for (int i = 0; i < element.getReason().size(); i++) {
25947      composeCodeableReference(t, "Task", "reason", element.getReason().get(i), i);
25948    }
25949    for (int i = 0; i < element.getInsurance().size(); i++) {
25950      composeReference(t, "Task", "insurance", element.getInsurance().get(i), i);
25951    }
25952    for (int i = 0; i < element.getNote().size(); i++) {
25953      composeAnnotation(t, "Task", "note", element.getNote().get(i), i);
25954    }
25955    for (int i = 0; i < element.getRelevantHistory().size(); i++) {
25956      composeReference(t, "Task", "relevantHistory", element.getRelevantHistory().get(i), i);
25957    }
25958    if (element.hasRestriction()) {
25959      composeTaskRestrictionComponent(t, "Task", "restriction", element.getRestriction(), -1);
25960    }
25961    for (int i = 0; i < element.getInput().size(); i++) {
25962      composeTaskInputComponent(t, "Task", "input", element.getInput().get(i), i);
25963    }
25964    for (int i = 0; i < element.getOutput().size(); i++) {
25965      composeTaskOutputComponent(t, "Task", "output", element.getOutput().get(i), i);
25966    }
25967  }
25968
25969  protected void composeTaskPerformerComponent(Complex parent, String parentType, String name, Task.TaskPerformerComponent element, int index) {
25970    if (element == null) 
25971      return;
25972    Complex t;
25973    if (Utilities.noString(parentType))
25974      t = parent;
25975    else {
25976      t = parent.predicate("fhir:"+name,index > -1);
25977    }
25978    composeBackboneElement(t, "performer", name, element, index);
25979    if (element.hasFunction()) {
25980      composeCodeableConcept(t, "TaskPerformerComponent", "function", element.getFunction(), -1);
25981    }
25982    if (element.hasActor()) {
25983      composeReference(t, "TaskPerformerComponent", "actor", element.getActor(), -1);
25984    }
25985  }
25986
25987  protected void composeTaskRestrictionComponent(Complex parent, String parentType, String name, Task.TaskRestrictionComponent element, int index) {
25988    if (element == null) 
25989      return;
25990    Complex t;
25991    if (Utilities.noString(parentType))
25992      t = parent;
25993    else {
25994      t = parent.predicate("fhir:"+name,index > -1);
25995    }
25996    composeBackboneElement(t, "restriction", name, element, index);
25997    if (element.hasRepetitionsElement()) {
25998      composePositiveInt(t, "TaskRestrictionComponent", "repetitions", element.getRepetitionsElement(), -1);
25999    }
26000    if (element.hasPeriod()) {
26001      composePeriod(t, "TaskRestrictionComponent", "period", element.getPeriod(), -1);
26002    }
26003    for (int i = 0; i < element.getRecipient().size(); i++) {
26004      composeReference(t, "TaskRestrictionComponent", "recipient", element.getRecipient().get(i), i);
26005    }
26006  }
26007
26008  protected void composeTaskInputComponent(Complex parent, String parentType, String name, Task.TaskInputComponent element, int index) {
26009    if (element == null) 
26010      return;
26011    Complex t;
26012    if (Utilities.noString(parentType))
26013      t = parent;
26014    else {
26015      t = parent.predicate("fhir:"+name,index > -1);
26016    }
26017    composeBackboneElement(t, "input", name, element, index);
26018    if (element.hasType()) {
26019      composeCodeableConcept(t, "TaskInputComponent", "type", element.getType(), -1);
26020    }
26021    if (element.hasValue()) {
26022      composeType(t, "TaskInputComponent", "value", element.getValue(), -1);
26023    }
26024  }
26025
26026  protected void composeTaskOutputComponent(Complex parent, String parentType, String name, Task.TaskOutputComponent element, int index) {
26027    if (element == null) 
26028      return;
26029    Complex t;
26030    if (Utilities.noString(parentType))
26031      t = parent;
26032    else {
26033      t = parent.predicate("fhir:"+name,index > -1);
26034    }
26035    composeBackboneElement(t, "output", name, element, index);
26036    if (element.hasType()) {
26037      composeCodeableConcept(t, "TaskOutputComponent", "type", element.getType(), -1);
26038    }
26039    if (element.hasValue()) {
26040      composeType(t, "TaskOutputComponent", "value", element.getValue(), -1);
26041    }
26042  }
26043
26044  protected void composeTerminologyCapabilities(Complex parent, String parentType, String name, TerminologyCapabilities element, int index) {
26045    if (element == null) 
26046      return;
26047    Complex t;
26048    if (Utilities.noString(parentType))
26049      t = parent;
26050    else {
26051      t = parent.predicate("fhir:"+name,index > -1);
26052    }
26053    composeCanonicalResource(t, "TerminologyCapabilities", name, element, index);
26054    if (element.hasUrlElement()) {
26055      composeUri(t, "TerminologyCapabilities", "url", element.getUrlElement(), -1);
26056    }
26057    for (int i = 0; i < element.getIdentifier().size(); i++) {
26058      composeIdentifier(t, "TerminologyCapabilities", "identifier", element.getIdentifier().get(i), i);
26059    }
26060    if (element.hasVersionElement()) {
26061      composeString(t, "TerminologyCapabilities", "version", element.getVersionElement(), -1);
26062    }
26063    if (element.hasVersionAlgorithm()) {
26064      composeType(t, "TerminologyCapabilities", "versionAlgorithm", element.getVersionAlgorithm(), -1);
26065    }
26066    if (element.hasNameElement()) {
26067      composeString(t, "TerminologyCapabilities", "name", element.getNameElement(), -1);
26068    }
26069    if (element.hasTitleElement()) {
26070      composeString(t, "TerminologyCapabilities", "title", element.getTitleElement(), -1);
26071    }
26072    if (element.hasStatusElement()) {
26073      composeEnum(t, "TerminologyCapabilities", "status", element.getStatusElement(), -1);
26074    }
26075    if (element.hasExperimentalElement()) {
26076      composeBoolean(t, "TerminologyCapabilities", "experimental", element.getExperimentalElement(), -1);
26077    }
26078    if (element.hasDateElement()) {
26079      composeDateTime(t, "TerminologyCapabilities", "date", element.getDateElement(), -1);
26080    }
26081    if (element.hasPublisherElement()) {
26082      composeString(t, "TerminologyCapabilities", "publisher", element.getPublisherElement(), -1);
26083    }
26084    for (int i = 0; i < element.getContact().size(); i++) {
26085      composeContactDetail(t, "TerminologyCapabilities", "contact", element.getContact().get(i), i);
26086    }
26087    if (element.hasDescriptionElement()) {
26088      composeMarkdown(t, "TerminologyCapabilities", "description", element.getDescriptionElement(), -1);
26089    }
26090    for (int i = 0; i < element.getUseContext().size(); i++) {
26091      composeUsageContext(t, "TerminologyCapabilities", "useContext", element.getUseContext().get(i), i);
26092    }
26093    for (int i = 0; i < element.getJurisdiction().size(); i++) {
26094      composeCodeableConcept(t, "TerminologyCapabilities", "jurisdiction", element.getJurisdiction().get(i), i);
26095    }
26096    if (element.hasPurposeElement()) {
26097      composeMarkdown(t, "TerminologyCapabilities", "purpose", element.getPurposeElement(), -1);
26098    }
26099    if (element.hasCopyrightElement()) {
26100      composeMarkdown(t, "TerminologyCapabilities", "copyright", element.getCopyrightElement(), -1);
26101    }
26102    if (element.hasCopyrightLabelElement()) {
26103      composeString(t, "TerminologyCapabilities", "copyrightLabel", element.getCopyrightLabelElement(), -1);
26104    }
26105    if (element.hasKindElement()) {
26106      composeEnum(t, "TerminologyCapabilities", "kind", element.getKindElement(), -1);
26107    }
26108    if (element.hasSoftware()) {
26109      composeTerminologyCapabilitiesSoftwareComponent(t, "TerminologyCapabilities", "software", element.getSoftware(), -1);
26110    }
26111    if (element.hasImplementation()) {
26112      composeTerminologyCapabilitiesImplementationComponent(t, "TerminologyCapabilities", "implementation", element.getImplementation(), -1);
26113    }
26114    if (element.hasLockedDateElement()) {
26115      composeBoolean(t, "TerminologyCapabilities", "lockedDate", element.getLockedDateElement(), -1);
26116    }
26117    for (int i = 0; i < element.getCodeSystem().size(); i++) {
26118      composeTerminologyCapabilitiesCodeSystemComponent(t, "TerminologyCapabilities", "codeSystem", element.getCodeSystem().get(i), i);
26119    }
26120    if (element.hasExpansion()) {
26121      composeTerminologyCapabilitiesExpansionComponent(t, "TerminologyCapabilities", "expansion", element.getExpansion(), -1);
26122    }
26123    if (element.hasCodeSearchElement()) {
26124      composeEnum(t, "TerminologyCapabilities", "codeSearch", element.getCodeSearchElement(), -1);
26125    }
26126    if (element.hasValidateCode()) {
26127      composeTerminologyCapabilitiesValidateCodeComponent(t, "TerminologyCapabilities", "validateCode", element.getValidateCode(), -1);
26128    }
26129    if (element.hasTranslation()) {
26130      composeTerminologyCapabilitiesTranslationComponent(t, "TerminologyCapabilities", "translation", element.getTranslation(), -1);
26131    }
26132    if (element.hasClosure()) {
26133      composeTerminologyCapabilitiesClosureComponent(t, "TerminologyCapabilities", "closure", element.getClosure(), -1);
26134    }
26135  }
26136
26137  protected void composeTerminologyCapabilitiesSoftwareComponent(Complex parent, String parentType, String name, TerminologyCapabilities.TerminologyCapabilitiesSoftwareComponent element, int index) {
26138    if (element == null) 
26139      return;
26140    Complex t;
26141    if (Utilities.noString(parentType))
26142      t = parent;
26143    else {
26144      t = parent.predicate("fhir:"+name,index > -1);
26145    }
26146    composeBackboneElement(t, "software", name, element, index);
26147    if (element.hasNameElement()) {
26148      composeString(t, "TerminologyCapabilitiesSoftwareComponent", "name", element.getNameElement(), -1);
26149    }
26150    if (element.hasVersionElement()) {
26151      composeString(t, "TerminologyCapabilitiesSoftwareComponent", "version", element.getVersionElement(), -1);
26152    }
26153  }
26154
26155  protected void composeTerminologyCapabilitiesImplementationComponent(Complex parent, String parentType, String name, TerminologyCapabilities.TerminologyCapabilitiesImplementationComponent element, int index) {
26156    if (element == null) 
26157      return;
26158    Complex t;
26159    if (Utilities.noString(parentType))
26160      t = parent;
26161    else {
26162      t = parent.predicate("fhir:"+name,index > -1);
26163    }
26164    composeBackboneElement(t, "implementation", name, element, index);
26165    if (element.hasDescriptionElement()) {
26166      composeString(t, "TerminologyCapabilitiesImplementationComponent", "description", element.getDescriptionElement(), -1);
26167    }
26168    if (element.hasUrlElement()) {
26169      composeUrl(t, "TerminologyCapabilitiesImplementationComponent", "url", element.getUrlElement(), -1);
26170    }
26171  }
26172
26173  protected void composeTerminologyCapabilitiesCodeSystemComponent(Complex parent, String parentType, String name, TerminologyCapabilities.TerminologyCapabilitiesCodeSystemComponent element, int index) {
26174    if (element == null) 
26175      return;
26176    Complex t;
26177    if (Utilities.noString(parentType))
26178      t = parent;
26179    else {
26180      t = parent.predicate("fhir:"+name,index > -1);
26181    }
26182    composeBackboneElement(t, "codeSystem", name, element, index);
26183    if (element.hasUriElement()) {
26184      composeCanonical(t, "TerminologyCapabilitiesCodeSystemComponent", "uri", element.getUriElement(), -1);
26185    }
26186    for (int i = 0; i < element.getVersion().size(); i++) {
26187      composeTerminologyCapabilitiesCodeSystemVersionComponent(t, "TerminologyCapabilitiesCodeSystemComponent", "version", element.getVersion().get(i), i);
26188    }
26189    if (element.hasContentElement()) {
26190      composeEnum(t, "TerminologyCapabilitiesCodeSystemComponent", "content", element.getContentElement(), -1);
26191    }
26192    if (element.hasSubsumptionElement()) {
26193      composeBoolean(t, "TerminologyCapabilitiesCodeSystemComponent", "subsumption", element.getSubsumptionElement(), -1);
26194    }
26195  }
26196
26197  protected void composeTerminologyCapabilitiesCodeSystemVersionComponent(Complex parent, String parentType, String name, TerminologyCapabilities.TerminologyCapabilitiesCodeSystemVersionComponent element, int index) {
26198    if (element == null) 
26199      return;
26200    Complex t;
26201    if (Utilities.noString(parentType))
26202      t = parent;
26203    else {
26204      t = parent.predicate("fhir:"+name,index > -1);
26205    }
26206    composeBackboneElement(t, "version", name, element, index);
26207    if (element.hasCodeElement()) {
26208      composeString(t, "TerminologyCapabilitiesCodeSystemVersionComponent", "code", element.getCodeElement(), -1);
26209    }
26210    if (element.hasIsDefaultElement()) {
26211      composeBoolean(t, "TerminologyCapabilitiesCodeSystemVersionComponent", "isDefault", element.getIsDefaultElement(), -1);
26212    }
26213    if (element.hasCompositionalElement()) {
26214      composeBoolean(t, "TerminologyCapabilitiesCodeSystemVersionComponent", "compositional", element.getCompositionalElement(), -1);
26215    }
26216    for (int i = 0; i < element.getLanguage().size(); i++) {
26217      composeEnum(t, "TerminologyCapabilitiesCodeSystemVersionComponent", "language", element.getLanguage().get(i), i);
26218    }
26219    for (int i = 0; i < element.getFilter().size(); i++) {
26220      composeTerminologyCapabilitiesCodeSystemVersionFilterComponent(t, "TerminologyCapabilitiesCodeSystemVersionComponent", "filter", element.getFilter().get(i), i);
26221    }
26222    for (int i = 0; i < element.getProperty().size(); i++) {
26223      composeCode(t, "TerminologyCapabilitiesCodeSystemVersionComponent", "property", element.getProperty().get(i), i);
26224    }
26225  }
26226
26227  protected void composeTerminologyCapabilitiesCodeSystemVersionFilterComponent(Complex parent, String parentType, String name, TerminologyCapabilities.TerminologyCapabilitiesCodeSystemVersionFilterComponent element, int index) {
26228    if (element == null) 
26229      return;
26230    Complex t;
26231    if (Utilities.noString(parentType))
26232      t = parent;
26233    else {
26234      t = parent.predicate("fhir:"+name,index > -1);
26235    }
26236    composeBackboneElement(t, "filter", name, element, index);
26237    if (element.hasCodeElement()) {
26238      composeCode(t, "TerminologyCapabilitiesCodeSystemVersionFilterComponent", "code", element.getCodeElement(), -1);
26239    }
26240    for (int i = 0; i < element.getOp().size(); i++) {
26241      composeCode(t, "TerminologyCapabilitiesCodeSystemVersionFilterComponent", "op", element.getOp().get(i), i);
26242    }
26243  }
26244
26245  protected void composeTerminologyCapabilitiesExpansionComponent(Complex parent, String parentType, String name, TerminologyCapabilities.TerminologyCapabilitiesExpansionComponent element, int index) {
26246    if (element == null) 
26247      return;
26248    Complex t;
26249    if (Utilities.noString(parentType))
26250      t = parent;
26251    else {
26252      t = parent.predicate("fhir:"+name,index > -1);
26253    }
26254    composeBackboneElement(t, "expansion", name, element, index);
26255    if (element.hasHierarchicalElement()) {
26256      composeBoolean(t, "TerminologyCapabilitiesExpansionComponent", "hierarchical", element.getHierarchicalElement(), -1);
26257    }
26258    if (element.hasPagingElement()) {
26259      composeBoolean(t, "TerminologyCapabilitiesExpansionComponent", "paging", element.getPagingElement(), -1);
26260    }
26261    if (element.hasIncompleteElement()) {
26262      composeBoolean(t, "TerminologyCapabilitiesExpansionComponent", "incomplete", element.getIncompleteElement(), -1);
26263    }
26264    for (int i = 0; i < element.getParameter().size(); i++) {
26265      composeTerminologyCapabilitiesExpansionParameterComponent(t, "TerminologyCapabilitiesExpansionComponent", "parameter", element.getParameter().get(i), i);
26266    }
26267    if (element.hasTextFilterElement()) {
26268      composeMarkdown(t, "TerminologyCapabilitiesExpansionComponent", "textFilter", element.getTextFilterElement(), -1);
26269    }
26270  }
26271
26272  protected void composeTerminologyCapabilitiesExpansionParameterComponent(Complex parent, String parentType, String name, TerminologyCapabilities.TerminologyCapabilitiesExpansionParameterComponent element, int index) {
26273    if (element == null) 
26274      return;
26275    Complex t;
26276    if (Utilities.noString(parentType))
26277      t = parent;
26278    else {
26279      t = parent.predicate("fhir:"+name,index > -1);
26280    }
26281    composeBackboneElement(t, "parameter", name, element, index);
26282    if (element.hasNameElement()) {
26283      composeCode(t, "TerminologyCapabilitiesExpansionParameterComponent", "name", element.getNameElement(), -1);
26284    }
26285    if (element.hasDocumentationElement()) {
26286      composeString(t, "TerminologyCapabilitiesExpansionParameterComponent", "documentation", element.getDocumentationElement(), -1);
26287    }
26288  }
26289
26290  protected void composeTerminologyCapabilitiesValidateCodeComponent(Complex parent, String parentType, String name, TerminologyCapabilities.TerminologyCapabilitiesValidateCodeComponent element, int index) {
26291    if (element == null) 
26292      return;
26293    Complex t;
26294    if (Utilities.noString(parentType))
26295      t = parent;
26296    else {
26297      t = parent.predicate("fhir:"+name,index > -1);
26298    }
26299    composeBackboneElement(t, "validateCode", name, element, index);
26300    if (element.hasTranslationsElement()) {
26301      composeBoolean(t, "TerminologyCapabilitiesValidateCodeComponent", "translations", element.getTranslationsElement(), -1);
26302    }
26303  }
26304
26305  protected void composeTerminologyCapabilitiesTranslationComponent(Complex parent, String parentType, String name, TerminologyCapabilities.TerminologyCapabilitiesTranslationComponent element, int index) {
26306    if (element == null) 
26307      return;
26308    Complex t;
26309    if (Utilities.noString(parentType))
26310      t = parent;
26311    else {
26312      t = parent.predicate("fhir:"+name,index > -1);
26313    }
26314    composeBackboneElement(t, "translation", name, element, index);
26315    if (element.hasNeedsMapElement()) {
26316      composeBoolean(t, "TerminologyCapabilitiesTranslationComponent", "needsMap", element.getNeedsMapElement(), -1);
26317    }
26318  }
26319
26320  protected void composeTerminologyCapabilitiesClosureComponent(Complex parent, String parentType, String name, TerminologyCapabilities.TerminologyCapabilitiesClosureComponent element, int index) {
26321    if (element == null) 
26322      return;
26323    Complex t;
26324    if (Utilities.noString(parentType))
26325      t = parent;
26326    else {
26327      t = parent.predicate("fhir:"+name,index > -1);
26328    }
26329    composeBackboneElement(t, "closure", name, element, index);
26330    if (element.hasTranslationElement()) {
26331      composeBoolean(t, "TerminologyCapabilitiesClosureComponent", "translation", element.getTranslationElement(), -1);
26332    }
26333  }
26334
26335  protected void composeTestPlan(Complex parent, String parentType, String name, TestPlan element, int index) {
26336    if (element == null) 
26337      return;
26338    Complex t;
26339    if (Utilities.noString(parentType))
26340      t = parent;
26341    else {
26342      t = parent.predicate("fhir:"+name,index > -1);
26343    }
26344    composeCanonicalResource(t, "TestPlan", name, element, index);
26345    if (element.hasUrlElement()) {
26346      composeUri(t, "TestPlan", "url", element.getUrlElement(), -1);
26347    }
26348    for (int i = 0; i < element.getIdentifier().size(); i++) {
26349      composeIdentifier(t, "TestPlan", "identifier", element.getIdentifier().get(i), i);
26350    }
26351    if (element.hasVersionElement()) {
26352      composeString(t, "TestPlan", "version", element.getVersionElement(), -1);
26353    }
26354    if (element.hasVersionAlgorithm()) {
26355      composeType(t, "TestPlan", "versionAlgorithm", element.getVersionAlgorithm(), -1);
26356    }
26357    if (element.hasNameElement()) {
26358      composeString(t, "TestPlan", "name", element.getNameElement(), -1);
26359    }
26360    if (element.hasTitleElement()) {
26361      composeString(t, "TestPlan", "title", element.getTitleElement(), -1);
26362    }
26363    if (element.hasStatusElement()) {
26364      composeEnum(t, "TestPlan", "status", element.getStatusElement(), -1);
26365    }
26366    if (element.hasExperimentalElement()) {
26367      composeBoolean(t, "TestPlan", "experimental", element.getExperimentalElement(), -1);
26368    }
26369    if (element.hasDateElement()) {
26370      composeDateTime(t, "TestPlan", "date", element.getDateElement(), -1);
26371    }
26372    if (element.hasPublisherElement()) {
26373      composeString(t, "TestPlan", "publisher", element.getPublisherElement(), -1);
26374    }
26375    for (int i = 0; i < element.getContact().size(); i++) {
26376      composeContactDetail(t, "TestPlan", "contact", element.getContact().get(i), i);
26377    }
26378    if (element.hasDescriptionElement()) {
26379      composeMarkdown(t, "TestPlan", "description", element.getDescriptionElement(), -1);
26380    }
26381    for (int i = 0; i < element.getUseContext().size(); i++) {
26382      composeUsageContext(t, "TestPlan", "useContext", element.getUseContext().get(i), i);
26383    }
26384    for (int i = 0; i < element.getJurisdiction().size(); i++) {
26385      composeCodeableConcept(t, "TestPlan", "jurisdiction", element.getJurisdiction().get(i), i);
26386    }
26387    if (element.hasPurposeElement()) {
26388      composeMarkdown(t, "TestPlan", "purpose", element.getPurposeElement(), -1);
26389    }
26390    if (element.hasCopyrightElement()) {
26391      composeMarkdown(t, "TestPlan", "copyright", element.getCopyrightElement(), -1);
26392    }
26393    if (element.hasCopyrightLabelElement()) {
26394      composeString(t, "TestPlan", "copyrightLabel", element.getCopyrightLabelElement(), -1);
26395    }
26396    for (int i = 0; i < element.getCategory().size(); i++) {
26397      composeCodeableConcept(t, "TestPlan", "category", element.getCategory().get(i), i);
26398    }
26399    for (int i = 0; i < element.getScope().size(); i++) {
26400      composeReference(t, "TestPlan", "scope", element.getScope().get(i), i);
26401    }
26402    if (element.hasTestToolsElement()) {
26403      composeMarkdown(t, "TestPlan", "testTools", element.getTestToolsElement(), -1);
26404    }
26405    for (int i = 0; i < element.getDependency().size(); i++) {
26406      composeTestPlanDependencyComponent(t, "TestPlan", "dependency", element.getDependency().get(i), i);
26407    }
26408    if (element.hasExitCriteriaElement()) {
26409      composeMarkdown(t, "TestPlan", "exitCriteria", element.getExitCriteriaElement(), -1);
26410    }
26411    for (int i = 0; i < element.getTestCase().size(); i++) {
26412      composeTestPlanTestCaseComponent(t, "TestPlan", "testCase", element.getTestCase().get(i), i);
26413    }
26414  }
26415
26416  protected void composeTestPlanDependencyComponent(Complex parent, String parentType, String name, TestPlan.TestPlanDependencyComponent element, int index) {
26417    if (element == null) 
26418      return;
26419    Complex t;
26420    if (Utilities.noString(parentType))
26421      t = parent;
26422    else {
26423      t = parent.predicate("fhir:"+name,index > -1);
26424    }
26425    composeBackboneElement(t, "dependency", name, element, index);
26426    if (element.hasDescriptionElement()) {
26427      composeMarkdown(t, "TestPlanDependencyComponent", "description", element.getDescriptionElement(), -1);
26428    }
26429    if (element.hasPredecessor()) {
26430      composeReference(t, "TestPlanDependencyComponent", "predecessor", element.getPredecessor(), -1);
26431    }
26432  }
26433
26434  protected void composeTestPlanTestCaseComponent(Complex parent, String parentType, String name, TestPlan.TestPlanTestCaseComponent element, int index) {
26435    if (element == null) 
26436      return;
26437    Complex t;
26438    if (Utilities.noString(parentType))
26439      t = parent;
26440    else {
26441      t = parent.predicate("fhir:"+name,index > -1);
26442    }
26443    composeBackboneElement(t, "testCase", name, element, index);
26444    if (element.hasSequenceElement()) {
26445      composeInteger(t, "TestPlanTestCaseComponent", "sequence", element.getSequenceElement(), -1);
26446    }
26447    for (int i = 0; i < element.getScope().size(); i++) {
26448      composeReference(t, "TestPlanTestCaseComponent", "scope", element.getScope().get(i), i);
26449    }
26450    for (int i = 0; i < element.getDependency().size(); i++) {
26451      composeTestPlanTestCaseDependencyComponent(t, "TestPlanTestCaseComponent", "dependency", element.getDependency().get(i), i);
26452    }
26453    for (int i = 0; i < element.getTestRun().size(); i++) {
26454      composeTestPlanTestCaseTestRunComponent(t, "TestPlanTestCaseComponent", "testRun", element.getTestRun().get(i), i);
26455    }
26456    for (int i = 0; i < element.getTestData().size(); i++) {
26457      composeTestPlanTestCaseTestDataComponent(t, "TestPlanTestCaseComponent", "testData", element.getTestData().get(i), i);
26458    }
26459    for (int i = 0; i < element.getAssertion().size(); i++) {
26460      composeTestPlanTestCaseAssertionComponent(t, "TestPlanTestCaseComponent", "assertion", element.getAssertion().get(i), i);
26461    }
26462  }
26463
26464  protected void composeTestPlanTestCaseDependencyComponent(Complex parent, String parentType, String name, TestPlan.TestCaseDependencyComponent element, int index) {
26465    if (element == null) 
26466      return;
26467    Complex t;
26468    if (Utilities.noString(parentType))
26469      t = parent;
26470    else {
26471      t = parent.predicate("fhir:"+name,index > -1);
26472    }
26473    composeBackboneElement(t, "dependency", name, element, index);
26474    if (element.hasDescriptionElement()) {
26475      composeMarkdown(t, "TestCaseDependencyComponent", "description", element.getDescriptionElement(), -1);
26476    }
26477    if (element.hasPredecessor()) {
26478      composeReference(t, "TestCaseDependencyComponent", "predecessor", element.getPredecessor(), -1);
26479    }
26480  }
26481
26482  protected void composeTestPlanTestCaseTestRunComponent(Complex parent, String parentType, String name, TestPlan.TestPlanTestCaseTestRunComponent element, int index) {
26483    if (element == null) 
26484      return;
26485    Complex t;
26486    if (Utilities.noString(parentType))
26487      t = parent;
26488    else {
26489      t = parent.predicate("fhir:"+name,index > -1);
26490    }
26491    composeBackboneElement(t, "testRun", name, element, index);
26492    if (element.hasNarrativeElement()) {
26493      composeMarkdown(t, "TestPlanTestCaseTestRunComponent", "narrative", element.getNarrativeElement(), -1);
26494    }
26495    if (element.hasScript()) {
26496      composeTestPlanTestCaseTestRunScriptComponent(t, "TestPlanTestCaseTestRunComponent", "script", element.getScript(), -1);
26497    }
26498  }
26499
26500  protected void composeTestPlanTestCaseTestRunScriptComponent(Complex parent, String parentType, String name, TestPlan.TestPlanTestCaseTestRunScriptComponent element, int index) {
26501    if (element == null) 
26502      return;
26503    Complex t;
26504    if (Utilities.noString(parentType))
26505      t = parent;
26506    else {
26507      t = parent.predicate("fhir:"+name,index > -1);
26508    }
26509    composeBackboneElement(t, "script", name, element, index);
26510    if (element.hasLanguage()) {
26511      composeCodeableConcept(t, "TestPlanTestCaseTestRunScriptComponent", "language", element.getLanguage(), -1);
26512    }
26513    if (element.hasSource()) {
26514      composeType(t, "TestPlanTestCaseTestRunScriptComponent", "source", element.getSource(), -1);
26515    }
26516  }
26517
26518  protected void composeTestPlanTestCaseTestDataComponent(Complex parent, String parentType, String name, TestPlan.TestPlanTestCaseTestDataComponent element, int index) {
26519    if (element == null) 
26520      return;
26521    Complex t;
26522    if (Utilities.noString(parentType))
26523      t = parent;
26524    else {
26525      t = parent.predicate("fhir:"+name,index > -1);
26526    }
26527    composeBackboneElement(t, "testData", name, element, index);
26528    if (element.hasType()) {
26529      composeCoding(t, "TestPlanTestCaseTestDataComponent", "type", element.getType(), -1);
26530    }
26531    if (element.hasContent()) {
26532      composeReference(t, "TestPlanTestCaseTestDataComponent", "content", element.getContent(), -1);
26533    }
26534    if (element.hasSource()) {
26535      composeType(t, "TestPlanTestCaseTestDataComponent", "source", element.getSource(), -1);
26536    }
26537  }
26538
26539  protected void composeTestPlanTestCaseAssertionComponent(Complex parent, String parentType, String name, TestPlan.TestPlanTestCaseAssertionComponent element, int index) {
26540    if (element == null) 
26541      return;
26542    Complex t;
26543    if (Utilities.noString(parentType))
26544      t = parent;
26545    else {
26546      t = parent.predicate("fhir:"+name,index > -1);
26547    }
26548    composeBackboneElement(t, "assertion", name, element, index);
26549    for (int i = 0; i < element.getType().size(); i++) {
26550      composeCodeableConcept(t, "TestPlanTestCaseAssertionComponent", "type", element.getType().get(i), i);
26551    }
26552    for (int i = 0; i < element.getObject().size(); i++) {
26553      composeCodeableReference(t, "TestPlanTestCaseAssertionComponent", "object", element.getObject().get(i), i);
26554    }
26555    for (int i = 0; i < element.getResult().size(); i++) {
26556      composeCodeableReference(t, "TestPlanTestCaseAssertionComponent", "result", element.getResult().get(i), i);
26557    }
26558  }
26559
26560  protected void composeTestReport(Complex parent, String parentType, String name, TestReport element, int index) {
26561    if (element == null) 
26562      return;
26563    Complex t;
26564    if (Utilities.noString(parentType))
26565      t = parent;
26566    else {
26567      t = parent.predicate("fhir:"+name,index > -1);
26568    }
26569    composeDomainResource(t, "TestReport", name, element, index);
26570    if (element.hasIdentifier()) {
26571      composeIdentifier(t, "TestReport", "identifier", element.getIdentifier(), -1);
26572    }
26573    if (element.hasNameElement()) {
26574      composeString(t, "TestReport", "name", element.getNameElement(), -1);
26575    }
26576    if (element.hasStatusElement()) {
26577      composeEnum(t, "TestReport", "status", element.getStatusElement(), -1);
26578    }
26579    if (element.hasTestScriptElement()) {
26580      composeCanonical(t, "TestReport", "testScript", element.getTestScriptElement(), -1);
26581    }
26582    if (element.hasResultElement()) {
26583      composeEnum(t, "TestReport", "result", element.getResultElement(), -1);
26584    }
26585    if (element.hasScoreElement()) {
26586      composeDecimal(t, "TestReport", "score", element.getScoreElement(), -1);
26587    }
26588    if (element.hasTesterElement()) {
26589      composeString(t, "TestReport", "tester", element.getTesterElement(), -1);
26590    }
26591    if (element.hasIssuedElement()) {
26592      composeDateTime(t, "TestReport", "issued", element.getIssuedElement(), -1);
26593    }
26594    for (int i = 0; i < element.getParticipant().size(); i++) {
26595      composeTestReportParticipantComponent(t, "TestReport", "participant", element.getParticipant().get(i), i);
26596    }
26597    if (element.hasSetup()) {
26598      composeTestReportSetupComponent(t, "TestReport", "setup", element.getSetup(), -1);
26599    }
26600    for (int i = 0; i < element.getTest().size(); i++) {
26601      composeTestReportTestComponent(t, "TestReport", "test", element.getTest().get(i), i);
26602    }
26603    if (element.hasTeardown()) {
26604      composeTestReportTeardownComponent(t, "TestReport", "teardown", element.getTeardown(), -1);
26605    }
26606  }
26607
26608  protected void composeTestReportParticipantComponent(Complex parent, String parentType, String name, TestReport.TestReportParticipantComponent element, int index) {
26609    if (element == null) 
26610      return;
26611    Complex t;
26612    if (Utilities.noString(parentType))
26613      t = parent;
26614    else {
26615      t = parent.predicate("fhir:"+name,index > -1);
26616    }
26617    composeBackboneElement(t, "participant", name, element, index);
26618    if (element.hasTypeElement()) {
26619      composeEnum(t, "TestReportParticipantComponent", "type", element.getTypeElement(), -1);
26620    }
26621    if (element.hasUriElement()) {
26622      composeUri(t, "TestReportParticipantComponent", "uri", element.getUriElement(), -1);
26623    }
26624    if (element.hasDisplayElement()) {
26625      composeString(t, "TestReportParticipantComponent", "display", element.getDisplayElement(), -1);
26626    }
26627  }
26628
26629  protected void composeTestReportSetupComponent(Complex parent, String parentType, String name, TestReport.TestReportSetupComponent element, int index) {
26630    if (element == null) 
26631      return;
26632    Complex t;
26633    if (Utilities.noString(parentType))
26634      t = parent;
26635    else {
26636      t = parent.predicate("fhir:"+name,index > -1);
26637    }
26638    composeBackboneElement(t, "setup", name, element, index);
26639    for (int i = 0; i < element.getAction().size(); i++) {
26640      composeTestReportSetupActionComponent(t, "TestReportSetupComponent", "action", element.getAction().get(i), i);
26641    }
26642  }
26643
26644  protected void composeTestReportSetupActionComponent(Complex parent, String parentType, String name, TestReport.SetupActionComponent element, int index) {
26645    if (element == null) 
26646      return;
26647    Complex t;
26648    if (Utilities.noString(parentType))
26649      t = parent;
26650    else {
26651      t = parent.predicate("fhir:"+name,index > -1);
26652    }
26653    composeBackboneElement(t, "action", name, element, index);
26654    if (element.hasOperation()) {
26655      composeTestReportSetupActionOperationComponent(t, "SetupActionComponent", "operation", element.getOperation(), -1);
26656    }
26657    if (element.hasAssert()) {
26658      composeTestReportSetupActionAssertComponent(t, "SetupActionComponent", "assert", element.getAssert(), -1);
26659    }
26660  }
26661
26662  protected void composeTestReportSetupActionOperationComponent(Complex parent, String parentType, String name, TestReport.SetupActionOperationComponent element, int index) {
26663    if (element == null) 
26664      return;
26665    Complex t;
26666    if (Utilities.noString(parentType))
26667      t = parent;
26668    else {
26669      t = parent.predicate("fhir:"+name,index > -1);
26670    }
26671    composeBackboneElement(t, "operation", name, element, index);
26672    if (element.hasResultElement()) {
26673      composeEnum(t, "SetupActionOperationComponent", "result", element.getResultElement(), -1);
26674    }
26675    if (element.hasMessageElement()) {
26676      composeMarkdown(t, "SetupActionOperationComponent", "message", element.getMessageElement(), -1);
26677    }
26678    if (element.hasDetailElement()) {
26679      composeUri(t, "SetupActionOperationComponent", "detail", element.getDetailElement(), -1);
26680    }
26681  }
26682
26683  protected void composeTestReportSetupActionAssertComponent(Complex parent, String parentType, String name, TestReport.SetupActionAssertComponent element, int index) {
26684    if (element == null) 
26685      return;
26686    Complex t;
26687    if (Utilities.noString(parentType))
26688      t = parent;
26689    else {
26690      t = parent.predicate("fhir:"+name,index > -1);
26691    }
26692    composeBackboneElement(t, "assert", name, element, index);
26693    if (element.hasResultElement()) {
26694      composeEnum(t, "SetupActionAssertComponent", "result", element.getResultElement(), -1);
26695    }
26696    if (element.hasMessageElement()) {
26697      composeMarkdown(t, "SetupActionAssertComponent", "message", element.getMessageElement(), -1);
26698    }
26699    if (element.hasDetailElement()) {
26700      composeString(t, "SetupActionAssertComponent", "detail", element.getDetailElement(), -1);
26701    }
26702    for (int i = 0; i < element.getRequirement().size(); i++) {
26703      composeTestReportSetupActionAssertRequirementComponent(t, "SetupActionAssertComponent", "requirement", element.getRequirement().get(i), i);
26704    }
26705  }
26706
26707  protected void composeTestReportSetupActionAssertRequirementComponent(Complex parent, String parentType, String name, TestReport.SetupActionAssertRequirementComponent element, int index) {
26708    if (element == null) 
26709      return;
26710    Complex t;
26711    if (Utilities.noString(parentType))
26712      t = parent;
26713    else {
26714      t = parent.predicate("fhir:"+name,index > -1);
26715    }
26716    composeBackboneElement(t, "requirement", name, element, index);
26717    if (element.hasLink()) {
26718      composeType(t, "SetupActionAssertRequirementComponent", "link", element.getLink(), -1);
26719    }
26720  }
26721
26722  protected void composeTestReportTestComponent(Complex parent, String parentType, String name, TestReport.TestReportTestComponent element, int index) {
26723    if (element == null) 
26724      return;
26725    Complex t;
26726    if (Utilities.noString(parentType))
26727      t = parent;
26728    else {
26729      t = parent.predicate("fhir:"+name,index > -1);
26730    }
26731    composeBackboneElement(t, "test", name, element, index);
26732    if (element.hasNameElement()) {
26733      composeString(t, "TestReportTestComponent", "name", element.getNameElement(), -1);
26734    }
26735    if (element.hasDescriptionElement()) {
26736      composeString(t, "TestReportTestComponent", "description", element.getDescriptionElement(), -1);
26737    }
26738    for (int i = 0; i < element.getAction().size(); i++) {
26739      composeTestReportTestActionComponent(t, "TestReportTestComponent", "action", element.getAction().get(i), i);
26740    }
26741  }
26742
26743  protected void composeTestReportTestActionComponent(Complex parent, String parentType, String name, TestReport.TestActionComponent element, int index) {
26744    if (element == null) 
26745      return;
26746    Complex t;
26747    if (Utilities.noString(parentType))
26748      t = parent;
26749    else {
26750      t = parent.predicate("fhir:"+name,index > -1);
26751    }
26752    composeBackboneElement(t, "action", name, element, index);
26753    if (element.hasOperation()) {
26754      composeTestReportSetupActionOperationComponent(t, "TestActionComponent", "operation", element.getOperation(), -1);
26755    }
26756    if (element.hasAssert()) {
26757      composeTestReportSetupActionAssertComponent(t, "TestActionComponent", "assert", element.getAssert(), -1);
26758    }
26759  }
26760
26761  protected void composeTestReportTeardownComponent(Complex parent, String parentType, String name, TestReport.TestReportTeardownComponent element, int index) {
26762    if (element == null) 
26763      return;
26764    Complex t;
26765    if (Utilities.noString(parentType))
26766      t = parent;
26767    else {
26768      t = parent.predicate("fhir:"+name,index > -1);
26769    }
26770    composeBackboneElement(t, "teardown", name, element, index);
26771    for (int i = 0; i < element.getAction().size(); i++) {
26772      composeTestReportTeardownActionComponent(t, "TestReportTeardownComponent", "action", element.getAction().get(i), i);
26773    }
26774  }
26775
26776  protected void composeTestReportTeardownActionComponent(Complex parent, String parentType, String name, TestReport.TeardownActionComponent element, int index) {
26777    if (element == null) 
26778      return;
26779    Complex t;
26780    if (Utilities.noString(parentType))
26781      t = parent;
26782    else {
26783      t = parent.predicate("fhir:"+name,index > -1);
26784    }
26785    composeBackboneElement(t, "action", name, element, index);
26786    if (element.hasOperation()) {
26787      composeTestReportSetupActionOperationComponent(t, "TeardownActionComponent", "operation", element.getOperation(), -1);
26788    }
26789  }
26790
26791  protected void composeTestScript(Complex parent, String parentType, String name, TestScript 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:"+name,index > -1);
26799    }
26800    composeCanonicalResource(t, "TestScript", name, element, index);
26801    if (element.hasUrlElement()) {
26802      composeUri(t, "TestScript", "url", element.getUrlElement(), -1);
26803    }
26804    for (int i = 0; i < element.getIdentifier().size(); i++) {
26805      composeIdentifier(t, "TestScript", "identifier", element.getIdentifier().get(i), i);
26806    }
26807    if (element.hasVersionElement()) {
26808      composeString(t, "TestScript", "version", element.getVersionElement(), -1);
26809    }
26810    if (element.hasVersionAlgorithm()) {
26811      composeType(t, "TestScript", "versionAlgorithm", element.getVersionAlgorithm(), -1);
26812    }
26813    if (element.hasNameElement()) {
26814      composeString(t, "TestScript", "name", element.getNameElement(), -1);
26815    }
26816    if (element.hasTitleElement()) {
26817      composeString(t, "TestScript", "title", element.getTitleElement(), -1);
26818    }
26819    if (element.hasStatusElement()) {
26820      composeEnum(t, "TestScript", "status", element.getStatusElement(), -1);
26821    }
26822    if (element.hasExperimentalElement()) {
26823      composeBoolean(t, "TestScript", "experimental", element.getExperimentalElement(), -1);
26824    }
26825    if (element.hasDateElement()) {
26826      composeDateTime(t, "TestScript", "date", element.getDateElement(), -1);
26827    }
26828    if (element.hasPublisherElement()) {
26829      composeString(t, "TestScript", "publisher", element.getPublisherElement(), -1);
26830    }
26831    for (int i = 0; i < element.getContact().size(); i++) {
26832      composeContactDetail(t, "TestScript", "contact", element.getContact().get(i), i);
26833    }
26834    if (element.hasDescriptionElement()) {
26835      composeMarkdown(t, "TestScript", "description", element.getDescriptionElement(), -1);
26836    }
26837    for (int i = 0; i < element.getUseContext().size(); i++) {
26838      composeUsageContext(t, "TestScript", "useContext", element.getUseContext().get(i), i);
26839    }
26840    for (int i = 0; i < element.getJurisdiction().size(); i++) {
26841      composeCodeableConcept(t, "TestScript", "jurisdiction", element.getJurisdiction().get(i), i);
26842    }
26843    if (element.hasPurposeElement()) {
26844      composeMarkdown(t, "TestScript", "purpose", element.getPurposeElement(), -1);
26845    }
26846    if (element.hasCopyrightElement()) {
26847      composeMarkdown(t, "TestScript", "copyright", element.getCopyrightElement(), -1);
26848    }
26849    if (element.hasCopyrightLabelElement()) {
26850      composeString(t, "TestScript", "copyrightLabel", element.getCopyrightLabelElement(), -1);
26851    }
26852    for (int i = 0; i < element.getOrigin().size(); i++) {
26853      composeTestScriptOriginComponent(t, "TestScript", "origin", element.getOrigin().get(i), i);
26854    }
26855    for (int i = 0; i < element.getDestination().size(); i++) {
26856      composeTestScriptDestinationComponent(t, "TestScript", "destination", element.getDestination().get(i), i);
26857    }
26858    if (element.hasMetadata()) {
26859      composeTestScriptMetadataComponent(t, "TestScript", "metadata", element.getMetadata(), -1);
26860    }
26861    for (int i = 0; i < element.getScope().size(); i++) {
26862      composeTestScriptScopeComponent(t, "TestScript", "scope", element.getScope().get(i), i);
26863    }
26864    for (int i = 0; i < element.getFixture().size(); i++) {
26865      composeTestScriptFixtureComponent(t, "TestScript", "fixture", element.getFixture().get(i), i);
26866    }
26867    for (int i = 0; i < element.getProfile().size(); i++) {
26868      composeCanonical(t, "TestScript", "profile", element.getProfile().get(i), i);
26869    }
26870    for (int i = 0; i < element.getVariable().size(); i++) {
26871      composeTestScriptVariableComponent(t, "TestScript", "variable", element.getVariable().get(i), i);
26872    }
26873    if (element.hasSetup()) {
26874      composeTestScriptSetupComponent(t, "TestScript", "setup", element.getSetup(), -1);
26875    }
26876    for (int i = 0; i < element.getTest().size(); i++) {
26877      composeTestScriptTestComponent(t, "TestScript", "test", element.getTest().get(i), i);
26878    }
26879    if (element.hasTeardown()) {
26880      composeTestScriptTeardownComponent(t, "TestScript", "teardown", element.getTeardown(), -1);
26881    }
26882  }
26883
26884  protected void composeTestScriptOriginComponent(Complex parent, String parentType, String name, TestScript.TestScriptOriginComponent element, int index) {
26885    if (element == null) 
26886      return;
26887    Complex t;
26888    if (Utilities.noString(parentType))
26889      t = parent;
26890    else {
26891      t = parent.predicate("fhir:"+name,index > -1);
26892    }
26893    composeBackboneElement(t, "origin", name, element, index);
26894    if (element.hasIndexElement()) {
26895      composeInteger(t, "TestScriptOriginComponent", "index", element.getIndexElement(), -1);
26896    }
26897    if (element.hasProfile()) {
26898      composeCoding(t, "TestScriptOriginComponent", "profile", element.getProfile(), -1);
26899    }
26900    if (element.hasUrlElement()) {
26901      composeUrl(t, "TestScriptOriginComponent", "url", element.getUrlElement(), -1);
26902    }
26903  }
26904
26905  protected void composeTestScriptDestinationComponent(Complex parent, String parentType, String name, TestScript.TestScriptDestinationComponent element, int index) {
26906    if (element == null) 
26907      return;
26908    Complex t;
26909    if (Utilities.noString(parentType))
26910      t = parent;
26911    else {
26912      t = parent.predicate("fhir:"+name,index > -1);
26913    }
26914    composeBackboneElement(t, "destination", name, element, index);
26915    if (element.hasIndexElement()) {
26916      composeInteger(t, "TestScriptDestinationComponent", "index", element.getIndexElement(), -1);
26917    }
26918    if (element.hasProfile()) {
26919      composeCoding(t, "TestScriptDestinationComponent", "profile", element.getProfile(), -1);
26920    }
26921    if (element.hasUrlElement()) {
26922      composeUrl(t, "TestScriptDestinationComponent", "url", element.getUrlElement(), -1);
26923    }
26924  }
26925
26926  protected void composeTestScriptMetadataComponent(Complex parent, String parentType, String name, TestScript.TestScriptMetadataComponent element, int index) {
26927    if (element == null) 
26928      return;
26929    Complex t;
26930    if (Utilities.noString(parentType))
26931      t = parent;
26932    else {
26933      t = parent.predicate("fhir:"+name,index > -1);
26934    }
26935    composeBackboneElement(t, "metadata", name, element, index);
26936    for (int i = 0; i < element.getLink().size(); i++) {
26937      composeTestScriptMetadataLinkComponent(t, "TestScriptMetadataComponent", "link", element.getLink().get(i), i);
26938    }
26939    for (int i = 0; i < element.getCapability().size(); i++) {
26940      composeTestScriptMetadataCapabilityComponent(t, "TestScriptMetadataComponent", "capability", element.getCapability().get(i), i);
26941    }
26942  }
26943
26944  protected void composeTestScriptMetadataLinkComponent(Complex parent, String parentType, String name, TestScript.TestScriptMetadataLinkComponent element, int index) {
26945    if (element == null) 
26946      return;
26947    Complex t;
26948    if (Utilities.noString(parentType))
26949      t = parent;
26950    else {
26951      t = parent.predicate("fhir:"+name,index > -1);
26952    }
26953    composeBackboneElement(t, "link", name, element, index);
26954    if (element.hasUrlElement()) {
26955      composeUri(t, "TestScriptMetadataLinkComponent", "url", element.getUrlElement(), -1);
26956    }
26957    if (element.hasDescriptionElement()) {
26958      composeString(t, "TestScriptMetadataLinkComponent", "description", element.getDescriptionElement(), -1);
26959    }
26960  }
26961
26962  protected void composeTestScriptMetadataCapabilityComponent(Complex parent, String parentType, String name, TestScript.TestScriptMetadataCapabilityComponent element, int index) {
26963    if (element == null) 
26964      return;
26965    Complex t;
26966    if (Utilities.noString(parentType))
26967      t = parent;
26968    else {
26969      t = parent.predicate("fhir:"+name,index > -1);
26970    }
26971    composeBackboneElement(t, "capability", name, element, index);
26972    if (element.hasRequiredElement()) {
26973      composeBoolean(t, "TestScriptMetadataCapabilityComponent", "required", element.getRequiredElement(), -1);
26974    }
26975    if (element.hasValidatedElement()) {
26976      composeBoolean(t, "TestScriptMetadataCapabilityComponent", "validated", element.getValidatedElement(), -1);
26977    }
26978    if (element.hasDescriptionElement()) {
26979      composeString(t, "TestScriptMetadataCapabilityComponent", "description", element.getDescriptionElement(), -1);
26980    }
26981    for (int i = 0; i < element.getOrigin().size(); i++) {
26982      composeInteger(t, "TestScriptMetadataCapabilityComponent", "origin", element.getOrigin().get(i), i);
26983    }
26984    if (element.hasDestinationElement()) {
26985      composeInteger(t, "TestScriptMetadataCapabilityComponent", "destination", element.getDestinationElement(), -1);
26986    }
26987    for (int i = 0; i < element.getLink().size(); i++) {
26988      composeUri(t, "TestScriptMetadataCapabilityComponent", "link", element.getLink().get(i), i);
26989    }
26990    if (element.hasCapabilitiesElement()) {
26991      composeCanonical(t, "TestScriptMetadataCapabilityComponent", "capabilities", element.getCapabilitiesElement(), -1);
26992    }
26993  }
26994
26995  protected void composeTestScriptScopeComponent(Complex parent, String parentType, String name, TestScript.TestScriptScopeComponent element, int index) {
26996    if (element == null) 
26997      return;
26998    Complex t;
26999    if (Utilities.noString(parentType))
27000      t = parent;
27001    else {
27002      t = parent.predicate("fhir:"+name,index > -1);
27003    }
27004    composeBackboneElement(t, "scope", name, element, index);
27005    if (element.hasArtifactElement()) {
27006      composeCanonical(t, "TestScriptScopeComponent", "artifact", element.getArtifactElement(), -1);
27007    }
27008    if (element.hasConformance()) {
27009      composeCodeableConcept(t, "TestScriptScopeComponent", "conformance", element.getConformance(), -1);
27010    }
27011    if (element.hasPhase()) {
27012      composeCodeableConcept(t, "TestScriptScopeComponent", "phase", element.getPhase(), -1);
27013    }
27014  }
27015
27016  protected void composeTestScriptFixtureComponent(Complex parent, String parentType, String name, TestScript.TestScriptFixtureComponent element, int index) {
27017    if (element == null) 
27018      return;
27019    Complex t;
27020    if (Utilities.noString(parentType))
27021      t = parent;
27022    else {
27023      t = parent.predicate("fhir:"+name,index > -1);
27024    }
27025    composeBackboneElement(t, "fixture", name, element, index);
27026    if (element.hasAutocreateElement()) {
27027      composeBoolean(t, "TestScriptFixtureComponent", "autocreate", element.getAutocreateElement(), -1);
27028    }
27029    if (element.hasAutodeleteElement()) {
27030      composeBoolean(t, "TestScriptFixtureComponent", "autodelete", element.getAutodeleteElement(), -1);
27031    }
27032    if (element.hasResource()) {
27033      composeReference(t, "TestScriptFixtureComponent", "resource", element.getResource(), -1);
27034    }
27035  }
27036
27037  protected void composeTestScriptVariableComponent(Complex parent, String parentType, String name, TestScript.TestScriptVariableComponent element, int index) {
27038    if (element == null) 
27039      return;
27040    Complex t;
27041    if (Utilities.noString(parentType))
27042      t = parent;
27043    else {
27044      t = parent.predicate("fhir:"+name,index > -1);
27045    }
27046    composeBackboneElement(t, "variable", name, element, index);
27047    if (element.hasNameElement()) {
27048      composeString(t, "TestScriptVariableComponent", "name", element.getNameElement(), -1);
27049    }
27050    if (element.hasDefaultValueElement()) {
27051      composeString(t, "TestScriptVariableComponent", "defaultValue", element.getDefaultValueElement(), -1);
27052    }
27053    if (element.hasDescriptionElement()) {
27054      composeString(t, "TestScriptVariableComponent", "description", element.getDescriptionElement(), -1);
27055    }
27056    if (element.hasExpressionElement()) {
27057      composeString(t, "TestScriptVariableComponent", "expression", element.getExpressionElement(), -1);
27058    }
27059    if (element.hasHeaderFieldElement()) {
27060      composeString(t, "TestScriptVariableComponent", "headerField", element.getHeaderFieldElement(), -1);
27061    }
27062    if (element.hasHintElement()) {
27063      composeString(t, "TestScriptVariableComponent", "hint", element.getHintElement(), -1);
27064    }
27065    if (element.hasPathElement()) {
27066      composeString(t, "TestScriptVariableComponent", "path", element.getPathElement(), -1);
27067    }
27068    if (element.hasSourceIdElement()) {
27069      composeId(t, "TestScriptVariableComponent", "sourceId", element.getSourceIdElement(), -1);
27070    }
27071  }
27072
27073  protected void composeTestScriptSetupComponent(Complex parent, String parentType, String name, TestScript.TestScriptSetupComponent element, int index) {
27074    if (element == null) 
27075      return;
27076    Complex t;
27077    if (Utilities.noString(parentType))
27078      t = parent;
27079    else {
27080      t = parent.predicate("fhir:"+name,index > -1);
27081    }
27082    composeBackboneElement(t, "setup", name, element, index);
27083    for (int i = 0; i < element.getAction().size(); i++) {
27084      composeTestScriptSetupActionComponent(t, "TestScriptSetupComponent", "action", element.getAction().get(i), i);
27085    }
27086  }
27087
27088  protected void composeTestScriptSetupActionComponent(Complex parent, String parentType, String name, TestScript.SetupActionComponent element, int index) {
27089    if (element == null) 
27090      return;
27091    Complex t;
27092    if (Utilities.noString(parentType))
27093      t = parent;
27094    else {
27095      t = parent.predicate("fhir:"+name,index > -1);
27096    }
27097    composeBackboneElement(t, "action", name, element, index);
27098    if (element.hasOperation()) {
27099      composeTestScriptSetupActionOperationComponent(t, "SetupActionComponent", "operation", element.getOperation(), -1);
27100    }
27101    if (element.hasAssert()) {
27102      composeTestScriptSetupActionAssertComponent(t, "SetupActionComponent", "assert", element.getAssert(), -1);
27103    }
27104  }
27105
27106  protected void composeTestScriptSetupActionOperationComponent(Complex parent, String parentType, String name, TestScript.SetupActionOperationComponent element, int index) {
27107    if (element == null) 
27108      return;
27109    Complex t;
27110    if (Utilities.noString(parentType))
27111      t = parent;
27112    else {
27113      t = parent.predicate("fhir:"+name,index > -1);
27114    }
27115    composeBackboneElement(t, "operation", name, element, index);
27116    if (element.hasType()) {
27117      composeCoding(t, "SetupActionOperationComponent", "type", element.getType(), -1);
27118    }
27119    if (element.hasResourceElement()) {
27120      composeUri(t, "SetupActionOperationComponent", "resource", element.getResourceElement(), -1);
27121    }
27122    if (element.hasLabelElement()) {
27123      composeString(t, "SetupActionOperationComponent", "label", element.getLabelElement(), -1);
27124    }
27125    if (element.hasDescriptionElement()) {
27126      composeString(t, "SetupActionOperationComponent", "description", element.getDescriptionElement(), -1);
27127    }
27128    if (element.hasAcceptElement()) {
27129      composeCode(t, "SetupActionOperationComponent", "accept", element.getAcceptElement(), -1);
27130    }
27131    if (element.hasContentTypeElement()) {
27132      composeCode(t, "SetupActionOperationComponent", "contentType", element.getContentTypeElement(), -1);
27133    }
27134    if (element.hasDestinationElement()) {
27135      composeInteger(t, "SetupActionOperationComponent", "destination", element.getDestinationElement(), -1);
27136    }
27137    if (element.hasEncodeRequestUrlElement()) {
27138      composeBoolean(t, "SetupActionOperationComponent", "encodeRequestUrl", element.getEncodeRequestUrlElement(), -1);
27139    }
27140    if (element.hasMethodElement()) {
27141      composeEnum(t, "SetupActionOperationComponent", "method", element.getMethodElement(), -1);
27142    }
27143    if (element.hasOriginElement()) {
27144      composeInteger(t, "SetupActionOperationComponent", "origin", element.getOriginElement(), -1);
27145    }
27146    if (element.hasParamsElement()) {
27147      composeString(t, "SetupActionOperationComponent", "params", element.getParamsElement(), -1);
27148    }
27149    for (int i = 0; i < element.getRequestHeader().size(); i++) {
27150      composeTestScriptSetupActionOperationRequestHeaderComponent(t, "SetupActionOperationComponent", "requestHeader", element.getRequestHeader().get(i), i);
27151    }
27152    if (element.hasRequestIdElement()) {
27153      composeId(t, "SetupActionOperationComponent", "requestId", element.getRequestIdElement(), -1);
27154    }
27155    if (element.hasResponseIdElement()) {
27156      composeId(t, "SetupActionOperationComponent", "responseId", element.getResponseIdElement(), -1);
27157    }
27158    if (element.hasSourceIdElement()) {
27159      composeId(t, "SetupActionOperationComponent", "sourceId", element.getSourceIdElement(), -1);
27160    }
27161    if (element.hasTargetIdElement()) {
27162      composeId(t, "SetupActionOperationComponent", "targetId", element.getTargetIdElement(), -1);
27163    }
27164    if (element.hasUrlElement()) {
27165      composeString(t, "SetupActionOperationComponent", "url", element.getUrlElement(), -1);
27166    }
27167  }
27168
27169  protected void composeTestScriptSetupActionOperationRequestHeaderComponent(Complex parent, String parentType, String name, TestScript.SetupActionOperationRequestHeaderComponent element, int index) {
27170    if (element == null) 
27171      return;
27172    Complex t;
27173    if (Utilities.noString(parentType))
27174      t = parent;
27175    else {
27176      t = parent.predicate("fhir:"+name,index > -1);
27177    }
27178    composeBackboneElement(t, "requestHeader", name, element, index);
27179    if (element.hasFieldElement()) {
27180      composeString(t, "SetupActionOperationRequestHeaderComponent", "field", element.getFieldElement(), -1);
27181    }
27182    if (element.hasValueElement()) {
27183      composeString(t, "SetupActionOperationRequestHeaderComponent", "value", element.getValueElement(), -1);
27184    }
27185  }
27186
27187  protected void composeTestScriptSetupActionAssertComponent(Complex parent, String parentType, String name, TestScript.SetupActionAssertComponent element, int index) {
27188    if (element == null) 
27189      return;
27190    Complex t;
27191    if (Utilities.noString(parentType))
27192      t = parent;
27193    else {
27194      t = parent.predicate("fhir:"+name,index > -1);
27195    }
27196    composeBackboneElement(t, "assert", name, element, index);
27197    if (element.hasLabelElement()) {
27198      composeString(t, "SetupActionAssertComponent", "label", element.getLabelElement(), -1);
27199    }
27200    if (element.hasDescriptionElement()) {
27201      composeString(t, "SetupActionAssertComponent", "description", element.getDescriptionElement(), -1);
27202    }
27203    if (element.hasDirectionElement()) {
27204      composeEnum(t, "SetupActionAssertComponent", "direction", element.getDirectionElement(), -1);
27205    }
27206    if (element.hasCompareToSourceIdElement()) {
27207      composeString(t, "SetupActionAssertComponent", "compareToSourceId", element.getCompareToSourceIdElement(), -1);
27208    }
27209    if (element.hasCompareToSourceExpressionElement()) {
27210      composeString(t, "SetupActionAssertComponent", "compareToSourceExpression", element.getCompareToSourceExpressionElement(), -1);
27211    }
27212    if (element.hasCompareToSourcePathElement()) {
27213      composeString(t, "SetupActionAssertComponent", "compareToSourcePath", element.getCompareToSourcePathElement(), -1);
27214    }
27215    if (element.hasContentTypeElement()) {
27216      composeCode(t, "SetupActionAssertComponent", "contentType", element.getContentTypeElement(), -1);
27217    }
27218    if (element.hasDefaultManualCompletionElement()) {
27219      composeEnum(t, "SetupActionAssertComponent", "defaultManualCompletion", element.getDefaultManualCompletionElement(), -1);
27220    }
27221    if (element.hasExpressionElement()) {
27222      composeString(t, "SetupActionAssertComponent", "expression", element.getExpressionElement(), -1);
27223    }
27224    if (element.hasHeaderFieldElement()) {
27225      composeString(t, "SetupActionAssertComponent", "headerField", element.getHeaderFieldElement(), -1);
27226    }
27227    if (element.hasMinimumIdElement()) {
27228      composeString(t, "SetupActionAssertComponent", "minimumId", element.getMinimumIdElement(), -1);
27229    }
27230    if (element.hasNavigationLinksElement()) {
27231      composeBoolean(t, "SetupActionAssertComponent", "navigationLinks", element.getNavigationLinksElement(), -1);
27232    }
27233    if (element.hasOperatorElement()) {
27234      composeEnum(t, "SetupActionAssertComponent", "operator", element.getOperatorElement(), -1);
27235    }
27236    if (element.hasPathElement()) {
27237      composeString(t, "SetupActionAssertComponent", "path", element.getPathElement(), -1);
27238    }
27239    if (element.hasRequestMethodElement()) {
27240      composeEnum(t, "SetupActionAssertComponent", "requestMethod", element.getRequestMethodElement(), -1);
27241    }
27242    if (element.hasRequestURLElement()) {
27243      composeString(t, "SetupActionAssertComponent", "requestURL", element.getRequestURLElement(), -1);
27244    }
27245    if (element.hasResourceElement()) {
27246      composeUri(t, "SetupActionAssertComponent", "resource", element.getResourceElement(), -1);
27247    }
27248    if (element.hasResponseElement()) {
27249      composeEnum(t, "SetupActionAssertComponent", "response", element.getResponseElement(), -1);
27250    }
27251    if (element.hasResponseCodeElement()) {
27252      composeString(t, "SetupActionAssertComponent", "responseCode", element.getResponseCodeElement(), -1);
27253    }
27254    if (element.hasSourceIdElement()) {
27255      composeId(t, "SetupActionAssertComponent", "sourceId", element.getSourceIdElement(), -1);
27256    }
27257    if (element.hasStopTestOnFailElement()) {
27258      composeBoolean(t, "SetupActionAssertComponent", "stopTestOnFail", element.getStopTestOnFailElement(), -1);
27259    }
27260    if (element.hasValidateProfileIdElement()) {
27261      composeId(t, "SetupActionAssertComponent", "validateProfileId", element.getValidateProfileIdElement(), -1);
27262    }
27263    if (element.hasValueElement()) {
27264      composeString(t, "SetupActionAssertComponent", "value", element.getValueElement(), -1);
27265    }
27266    if (element.hasWarningOnlyElement()) {
27267      composeBoolean(t, "SetupActionAssertComponent", "warningOnly", element.getWarningOnlyElement(), -1);
27268    }
27269    for (int i = 0; i < element.getRequirement().size(); i++) {
27270      composeTestScriptSetupActionAssertRequirementComponent(t, "SetupActionAssertComponent", "requirement", element.getRequirement().get(i), i);
27271    }
27272  }
27273
27274  protected void composeTestScriptSetupActionAssertRequirementComponent(Complex parent, String parentType, String name, TestScript.SetupActionAssertRequirementComponent element, int index) {
27275    if (element == null) 
27276      return;
27277    Complex t;
27278    if (Utilities.noString(parentType))
27279      t = parent;
27280    else {
27281      t = parent.predicate("fhir:"+name,index > -1);
27282    }
27283    composeBackboneElement(t, "requirement", name, element, index);
27284    if (element.hasLink()) {
27285      composeType(t, "SetupActionAssertRequirementComponent", "link", element.getLink(), -1);
27286    }
27287  }
27288
27289  protected void composeTestScriptTestComponent(Complex parent, String parentType, String name, TestScript.TestScriptTestComponent element, int index) {
27290    if (element == null) 
27291      return;
27292    Complex t;
27293    if (Utilities.noString(parentType))
27294      t = parent;
27295    else {
27296      t = parent.predicate("fhir:"+name,index > -1);
27297    }
27298    composeBackboneElement(t, "test", name, element, index);
27299    if (element.hasNameElement()) {
27300      composeString(t, "TestScriptTestComponent", "name", element.getNameElement(), -1);
27301    }
27302    if (element.hasDescriptionElement()) {
27303      composeString(t, "TestScriptTestComponent", "description", element.getDescriptionElement(), -1);
27304    }
27305    for (int i = 0; i < element.getAction().size(); i++) {
27306      composeTestScriptTestActionComponent(t, "TestScriptTestComponent", "action", element.getAction().get(i), i);
27307    }
27308  }
27309
27310  protected void composeTestScriptTestActionComponent(Complex parent, String parentType, String name, TestScript.TestActionComponent element, int index) {
27311    if (element == null) 
27312      return;
27313    Complex t;
27314    if (Utilities.noString(parentType))
27315      t = parent;
27316    else {
27317      t = parent.predicate("fhir:"+name,index > -1);
27318    }
27319    composeBackboneElement(t, "action", name, element, index);
27320    if (element.hasOperation()) {
27321      composeTestScriptSetupActionOperationComponent(t, "TestActionComponent", "operation", element.getOperation(), -1);
27322    }
27323    if (element.hasAssert()) {
27324      composeTestScriptSetupActionAssertComponent(t, "TestActionComponent", "assert", element.getAssert(), -1);
27325    }
27326  }
27327
27328  protected void composeTestScriptTeardownComponent(Complex parent, String parentType, String name, TestScript.TestScriptTeardownComponent element, int index) {
27329    if (element == null) 
27330      return;
27331    Complex t;
27332    if (Utilities.noString(parentType))
27333      t = parent;
27334    else {
27335      t = parent.predicate("fhir:"+name,index > -1);
27336    }
27337    composeBackboneElement(t, "teardown", name, element, index);
27338    for (int i = 0; i < element.getAction().size(); i++) {
27339      composeTestScriptTeardownActionComponent(t, "TestScriptTeardownComponent", "action", element.getAction().get(i), i);
27340    }
27341  }
27342
27343  protected void composeTestScriptTeardownActionComponent(Complex parent, String parentType, String name, TestScript.TeardownActionComponent element, int index) {
27344    if (element == null) 
27345      return;
27346    Complex t;
27347    if (Utilities.noString(parentType))
27348      t = parent;
27349    else {
27350      t = parent.predicate("fhir:"+name,index > -1);
27351    }
27352    composeBackboneElement(t, "action", name, element, index);
27353    if (element.hasOperation()) {
27354      composeTestScriptSetupActionOperationComponent(t, "TeardownActionComponent", "operation", element.getOperation(), -1);
27355    }
27356  }
27357
27358  protected void composeTransport(Complex parent, String parentType, String name, Transport element, int index) {
27359    if (element == null) 
27360      return;
27361    Complex t;
27362    if (Utilities.noString(parentType))
27363      t = parent;
27364    else {
27365      t = parent.predicate("fhir:"+name,index > -1);
27366    }
27367    composeDomainResource(t, "Transport", name, element, index);
27368    for (int i = 0; i < element.getIdentifier().size(); i++) {
27369      composeIdentifier(t, "Transport", "identifier", element.getIdentifier().get(i), i);
27370    }
27371    if (element.hasInstantiatesCanonicalElement()) {
27372      composeCanonical(t, "Transport", "instantiatesCanonical", element.getInstantiatesCanonicalElement(), -1);
27373    }
27374    if (element.hasInstantiatesUriElement()) {
27375      composeUri(t, "Transport", "instantiatesUri", element.getInstantiatesUriElement(), -1);
27376    }
27377    for (int i = 0; i < element.getBasedOn().size(); i++) {
27378      composeReference(t, "Transport", "basedOn", element.getBasedOn().get(i), i);
27379    }
27380    if (element.hasGroupIdentifier()) {
27381      composeIdentifier(t, "Transport", "groupIdentifier", element.getGroupIdentifier(), -1);
27382    }
27383    for (int i = 0; i < element.getPartOf().size(); i++) {
27384      composeReference(t, "Transport", "partOf", element.getPartOf().get(i), i);
27385    }
27386    if (element.hasStatusElement()) {
27387      composeEnum(t, "Transport", "status", element.getStatusElement(), -1);
27388    }
27389    if (element.hasStatusReason()) {
27390      composeCodeableConcept(t, "Transport", "statusReason", element.getStatusReason(), -1);
27391    }
27392    if (element.hasIntentElement()) {
27393      composeEnum(t, "Transport", "intent", element.getIntentElement(), -1);
27394    }
27395    if (element.hasPriorityElement()) {
27396      composeEnum(t, "Transport", "priority", element.getPriorityElement(), -1);
27397    }
27398    if (element.hasCode()) {
27399      composeCodeableConcept(t, "Transport", "code", element.getCode(), -1);
27400    }
27401    if (element.hasDescriptionElement()) {
27402      composeString(t, "Transport", "description", element.getDescriptionElement(), -1);
27403    }
27404    if (element.hasFocus()) {
27405      composeReference(t, "Transport", "focus", element.getFocus(), -1);
27406    }
27407    if (element.hasFor()) {
27408      composeReference(t, "Transport", "for", element.getFor(), -1);
27409    }
27410    if (element.hasEncounter()) {
27411      composeReference(t, "Transport", "encounter", element.getEncounter(), -1);
27412    }
27413    if (element.hasCompletionTimeElement()) {
27414      composeDateTime(t, "Transport", "completionTime", element.getCompletionTimeElement(), -1);
27415    }
27416    if (element.hasAuthoredOnElement()) {
27417      composeDateTime(t, "Transport", "authoredOn", element.getAuthoredOnElement(), -1);
27418    }
27419    if (element.hasLastModifiedElement()) {
27420      composeDateTime(t, "Transport", "lastModified", element.getLastModifiedElement(), -1);
27421    }
27422    if (element.hasRequester()) {
27423      composeReference(t, "Transport", "requester", element.getRequester(), -1);
27424    }
27425    for (int i = 0; i < element.getPerformerType().size(); i++) {
27426      composeCodeableConcept(t, "Transport", "performerType", element.getPerformerType().get(i), i);
27427    }
27428    if (element.hasOwner()) {
27429      composeReference(t, "Transport", "owner", element.getOwner(), -1);
27430    }
27431    if (element.hasLocation()) {
27432      composeReference(t, "Transport", "location", element.getLocation(), -1);
27433    }
27434    for (int i = 0; i < element.getInsurance().size(); i++) {
27435      composeReference(t, "Transport", "insurance", element.getInsurance().get(i), i);
27436    }
27437    for (int i = 0; i < element.getNote().size(); i++) {
27438      composeAnnotation(t, "Transport", "note", element.getNote().get(i), i);
27439    }
27440    for (int i = 0; i < element.getRelevantHistory().size(); i++) {
27441      composeReference(t, "Transport", "relevantHistory", element.getRelevantHistory().get(i), i);
27442    }
27443    if (element.hasRestriction()) {
27444      composeTransportRestrictionComponent(t, "Transport", "restriction", element.getRestriction(), -1);
27445    }
27446    for (int i = 0; i < element.getInput().size(); i++) {
27447      composeTransportParameterComponent(t, "Transport", "input", element.getInput().get(i), i);
27448    }
27449    for (int i = 0; i < element.getOutput().size(); i++) {
27450      composeTransportOutputComponent(t, "Transport", "output", element.getOutput().get(i), i);
27451    }
27452    if (element.hasRequestedLocation()) {
27453      composeReference(t, "Transport", "requestedLocation", element.getRequestedLocation(), -1);
27454    }
27455    if (element.hasCurrentLocation()) {
27456      composeReference(t, "Transport", "currentLocation", element.getCurrentLocation(), -1);
27457    }
27458    if (element.hasReason()) {
27459      composeCodeableReference(t, "Transport", "reason", element.getReason(), -1);
27460    }
27461    if (element.hasHistory()) {
27462      composeReference(t, "Transport", "history", element.getHistory(), -1);
27463    }
27464  }
27465
27466  protected void composeTransportRestrictionComponent(Complex parent, String parentType, String name, Transport.TransportRestrictionComponent element, int index) {
27467    if (element == null) 
27468      return;
27469    Complex t;
27470    if (Utilities.noString(parentType))
27471      t = parent;
27472    else {
27473      t = parent.predicate("fhir:"+name,index > -1);
27474    }
27475    composeBackboneElement(t, "restriction", name, element, index);
27476    if (element.hasRepetitionsElement()) {
27477      composePositiveInt(t, "TransportRestrictionComponent", "repetitions", element.getRepetitionsElement(), -1);
27478    }
27479    if (element.hasPeriod()) {
27480      composePeriod(t, "TransportRestrictionComponent", "period", element.getPeriod(), -1);
27481    }
27482    for (int i = 0; i < element.getRecipient().size(); i++) {
27483      composeReference(t, "TransportRestrictionComponent", "recipient", element.getRecipient().get(i), i);
27484    }
27485  }
27486
27487  protected void composeTransportParameterComponent(Complex parent, String parentType, String name, Transport.ParameterComponent element, int index) {
27488    if (element == null) 
27489      return;
27490    Complex t;
27491    if (Utilities.noString(parentType))
27492      t = parent;
27493    else {
27494      t = parent.predicate("fhir:"+name,index > -1);
27495    }
27496    composeBackboneElement(t, "input", name, element, index);
27497    if (element.hasType()) {
27498      composeCodeableConcept(t, "ParameterComponent", "type", element.getType(), -1);
27499    }
27500    if (element.hasValue()) {
27501      composeType(t, "ParameterComponent", "value", element.getValue(), -1);
27502    }
27503  }
27504
27505  protected void composeTransportOutputComponent(Complex parent, String parentType, String name, Transport.TransportOutputComponent element, int index) {
27506    if (element == null) 
27507      return;
27508    Complex t;
27509    if (Utilities.noString(parentType))
27510      t = parent;
27511    else {
27512      t = parent.predicate("fhir:"+name,index > -1);
27513    }
27514    composeBackboneElement(t, "output", name, element, index);
27515    if (element.hasType()) {
27516      composeCodeableConcept(t, "TransportOutputComponent", "type", element.getType(), -1);
27517    }
27518    if (element.hasValue()) {
27519      composeType(t, "TransportOutputComponent", "value", element.getValue(), -1);
27520    }
27521  }
27522
27523  protected void composeValueSet(Complex parent, String parentType, String name, ValueSet element, int index) {
27524    if (element == null) 
27525      return;
27526    Complex t;
27527    if (Utilities.noString(parentType))
27528      t = parent;
27529    else {
27530      t = parent.predicate("fhir:"+name,index > -1);
27531    }
27532    composeMetadataResource(t, "ValueSet", name, element, index);
27533    if (element.hasUrlElement()) {
27534      composeUri(t, "ValueSet", "url", element.getUrlElement(), -1);
27535    }
27536    for (int i = 0; i < element.getIdentifier().size(); i++) {
27537      composeIdentifier(t, "ValueSet", "identifier", element.getIdentifier().get(i), i);
27538    }
27539    if (element.hasVersionElement()) {
27540      composeString(t, "ValueSet", "version", element.getVersionElement(), -1);
27541    }
27542    if (element.hasVersionAlgorithm()) {
27543      composeType(t, "ValueSet", "versionAlgorithm", element.getVersionAlgorithm(), -1);
27544    }
27545    if (element.hasNameElement()) {
27546      composeString(t, "ValueSet", "name", element.getNameElement(), -1);
27547    }
27548    if (element.hasTitleElement()) {
27549      composeString(t, "ValueSet", "title", element.getTitleElement(), -1);
27550    }
27551    if (element.hasStatusElement()) {
27552      composeEnum(t, "ValueSet", "status", element.getStatusElement(), -1);
27553    }
27554    if (element.hasExperimentalElement()) {
27555      composeBoolean(t, "ValueSet", "experimental", element.getExperimentalElement(), -1);
27556    }
27557    if (element.hasDateElement()) {
27558      composeDateTime(t, "ValueSet", "date", element.getDateElement(), -1);
27559    }
27560    if (element.hasPublisherElement()) {
27561      composeString(t, "ValueSet", "publisher", element.getPublisherElement(), -1);
27562    }
27563    for (int i = 0; i < element.getContact().size(); i++) {
27564      composeContactDetail(t, "ValueSet", "contact", element.getContact().get(i), i);
27565    }
27566    if (element.hasDescriptionElement()) {
27567      composeMarkdown(t, "ValueSet", "description", element.getDescriptionElement(), -1);
27568    }
27569    for (int i = 0; i < element.getUseContext().size(); i++) {
27570      composeUsageContext(t, "ValueSet", "useContext", element.getUseContext().get(i), i);
27571    }
27572    for (int i = 0; i < element.getJurisdiction().size(); i++) {
27573      composeCodeableConcept(t, "ValueSet", "jurisdiction", element.getJurisdiction().get(i), i);
27574    }
27575    if (element.hasImmutableElement()) {
27576      composeBoolean(t, "ValueSet", "immutable", element.getImmutableElement(), -1);
27577    }
27578    if (element.hasPurposeElement()) {
27579      composeMarkdown(t, "ValueSet", "purpose", element.getPurposeElement(), -1);
27580    }
27581    if (element.hasCopyrightElement()) {
27582      composeMarkdown(t, "ValueSet", "copyright", element.getCopyrightElement(), -1);
27583    }
27584    if (element.hasCopyrightLabelElement()) {
27585      composeString(t, "ValueSet", "copyrightLabel", element.getCopyrightLabelElement(), -1);
27586    }
27587    if (element.hasApprovalDateElement()) {
27588      composeDate(t, "ValueSet", "approvalDate", element.getApprovalDateElement(), -1);
27589    }
27590    if (element.hasLastReviewDateElement()) {
27591      composeDate(t, "ValueSet", "lastReviewDate", element.getLastReviewDateElement(), -1);
27592    }
27593    if (element.hasEffectivePeriod()) {
27594      composePeriod(t, "ValueSet", "effectivePeriod", element.getEffectivePeriod(), -1);
27595    }
27596    for (int i = 0; i < element.getTopic().size(); i++) {
27597      composeCodeableConcept(t, "ValueSet", "topic", element.getTopic().get(i), i);
27598    }
27599    for (int i = 0; i < element.getAuthor().size(); i++) {
27600      composeContactDetail(t, "ValueSet", "author", element.getAuthor().get(i), i);
27601    }
27602    for (int i = 0; i < element.getEditor().size(); i++) {
27603      composeContactDetail(t, "ValueSet", "editor", element.getEditor().get(i), i);
27604    }
27605    for (int i = 0; i < element.getReviewer().size(); i++) {
27606      composeContactDetail(t, "ValueSet", "reviewer", element.getReviewer().get(i), i);
27607    }
27608    for (int i = 0; i < element.getEndorser().size(); i++) {
27609      composeContactDetail(t, "ValueSet", "endorser", element.getEndorser().get(i), i);
27610    }
27611    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
27612      composeRelatedArtifact(t, "ValueSet", "relatedArtifact", element.getRelatedArtifact().get(i), i);
27613    }
27614    if (element.hasCompose()) {
27615      composeValueSetComposeComponent(t, "ValueSet", "compose", element.getCompose(), -1);
27616    }
27617    if (element.hasExpansion()) {
27618      composeValueSetExpansionComponent(t, "ValueSet", "expansion", element.getExpansion(), -1);
27619    }
27620    if (element.hasScope()) {
27621      composeValueSetScopeComponent(t, "ValueSet", "scope", element.getScope(), -1);
27622    }
27623  }
27624
27625  protected void composeValueSetComposeComponent(Complex parent, String parentType, String name, ValueSet.ValueSetComposeComponent element, int index) {
27626    if (element == null) 
27627      return;
27628    Complex t;
27629    if (Utilities.noString(parentType))
27630      t = parent;
27631    else {
27632      t = parent.predicate("fhir:"+name,index > -1);
27633    }
27634    composeBackboneElement(t, "compose", name, element, index);
27635    if (element.hasLockedDateElement()) {
27636      composeDate(t, "ValueSetComposeComponent", "lockedDate", element.getLockedDateElement(), -1);
27637    }
27638    if (element.hasInactiveElement()) {
27639      composeBoolean(t, "ValueSetComposeComponent", "inactive", element.getInactiveElement(), -1);
27640    }
27641    for (int i = 0; i < element.getInclude().size(); i++) {
27642      composeValueSetConceptSetComponent(t, "ValueSetComposeComponent", "include", element.getInclude().get(i), i);
27643    }
27644    for (int i = 0; i < element.getExclude().size(); i++) {
27645      composeValueSetConceptSetComponent(t, "ValueSetComposeComponent", "exclude", element.getExclude().get(i), i);
27646    }
27647    for (int i = 0; i < element.getProperty().size(); i++) {
27648      composeString(t, "ValueSetComposeComponent", "property", element.getProperty().get(i), i);
27649    }
27650  }
27651
27652  protected void composeValueSetConceptSetComponent(Complex parent, String parentType, String name, ValueSet.ConceptSetComponent element, int index) {
27653    if (element == null) 
27654      return;
27655    Complex t;
27656    if (Utilities.noString(parentType))
27657      t = parent;
27658    else {
27659      t = parent.predicate("fhir:"+name,index > -1);
27660    }
27661    composeBackboneElement(t, "include", name, element, index);
27662    if (element.hasSystemElement()) {
27663      composeUri(t, "ConceptSetComponent", "system", element.getSystemElement(), -1);
27664    }
27665    if (element.hasVersionElement()) {
27666      composeString(t, "ConceptSetComponent", "version", element.getVersionElement(), -1);
27667    }
27668    for (int i = 0; i < element.getConcept().size(); i++) {
27669      composeValueSetConceptReferenceComponent(t, "ConceptSetComponent", "concept", element.getConcept().get(i), i);
27670    }
27671    for (int i = 0; i < element.getFilter().size(); i++) {
27672      composeValueSetConceptSetFilterComponent(t, "ConceptSetComponent", "filter", element.getFilter().get(i), i);
27673    }
27674    for (int i = 0; i < element.getValueSet().size(); i++) {
27675      composeCanonical(t, "ConceptSetComponent", "valueSet", element.getValueSet().get(i), i);
27676    }
27677    if (element.hasCopyrightElement()) {
27678      composeString(t, "ConceptSetComponent", "copyright", element.getCopyrightElement(), -1);
27679    }
27680  }
27681
27682  protected void composeValueSetConceptReferenceComponent(Complex parent, String parentType, String name, ValueSet.ConceptReferenceComponent element, int index) {
27683    if (element == null) 
27684      return;
27685    Complex t;
27686    if (Utilities.noString(parentType))
27687      t = parent;
27688    else {
27689      t = parent.predicate("fhir:"+name,index > -1);
27690    }
27691    composeBackboneElement(t, "concept", name, element, index);
27692    if (element.hasCodeElement()) {
27693      composeCode(t, "ConceptReferenceComponent", "code", element.getCodeElement(), -1);
27694    }
27695    if (element.hasDisplayElement()) {
27696      composeString(t, "ConceptReferenceComponent", "display", element.getDisplayElement(), -1);
27697    }
27698    for (int i = 0; i < element.getDesignation().size(); i++) {
27699      composeValueSetConceptReferenceDesignationComponent(t, "ConceptReferenceComponent", "designation", element.getDesignation().get(i), i);
27700    }
27701  }
27702
27703  protected void composeValueSetConceptReferenceDesignationComponent(Complex parent, String parentType, String name, ValueSet.ConceptReferenceDesignationComponent element, int index) {
27704    if (element == null) 
27705      return;
27706    Complex t;
27707    if (Utilities.noString(parentType))
27708      t = parent;
27709    else {
27710      t = parent.predicate("fhir:"+name,index > -1);
27711    }
27712    composeBackboneElement(t, "designation", name, element, index);
27713    if (element.hasLanguageElement()) {
27714      composeCode(t, "ConceptReferenceDesignationComponent", "language", element.getLanguageElement(), -1);
27715    }
27716    if (element.hasUse()) {
27717      composeCoding(t, "ConceptReferenceDesignationComponent", "use", element.getUse(), -1);
27718    }
27719    for (int i = 0; i < element.getAdditionalUse().size(); i++) {
27720      composeCoding(t, "ConceptReferenceDesignationComponent", "additionalUse", element.getAdditionalUse().get(i), i);
27721    }
27722    if (element.hasValueElement()) {
27723      composeString(t, "ConceptReferenceDesignationComponent", "value", element.getValueElement(), -1);
27724    }
27725  }
27726
27727  protected void composeValueSetConceptSetFilterComponent(Complex parent, String parentType, String name, ValueSet.ConceptSetFilterComponent element, int index) {
27728    if (element == null) 
27729      return;
27730    Complex t;
27731    if (Utilities.noString(parentType))
27732      t = parent;
27733    else {
27734      t = parent.predicate("fhir:"+name,index > -1);
27735    }
27736    composeBackboneElement(t, "filter", name, element, index);
27737    if (element.hasPropertyElement()) {
27738      composeCode(t, "ConceptSetFilterComponent", "property", element.getPropertyElement(), -1);
27739    }
27740    if (element.hasOpElement()) {
27741      composeEnum(t, "ConceptSetFilterComponent", "op", element.getOpElement(), -1);
27742    }
27743    if (element.hasValueElement()) {
27744      composeString(t, "ConceptSetFilterComponent", "value", element.getValueElement(), -1);
27745    }
27746  }
27747
27748  protected void composeValueSetExpansionComponent(Complex parent, String parentType, String name, ValueSet.ValueSetExpansionComponent element, int index) {
27749    if (element == null) 
27750      return;
27751    Complex t;
27752    if (Utilities.noString(parentType))
27753      t = parent;
27754    else {
27755      t = parent.predicate("fhir:"+name,index > -1);
27756    }
27757    composeBackboneElement(t, "expansion", name, element, index);
27758    if (element.hasIdentifierElement()) {
27759      composeUri(t, "ValueSetExpansionComponent", "identifier", element.getIdentifierElement(), -1);
27760    }
27761    if (element.hasNextElement()) {
27762      composeUri(t, "ValueSetExpansionComponent", "next", element.getNextElement(), -1);
27763    }
27764    if (element.hasTimestampElement()) {
27765      composeDateTime(t, "ValueSetExpansionComponent", "timestamp", element.getTimestampElement(), -1);
27766    }
27767    if (element.hasTotalElement()) {
27768      composeInteger(t, "ValueSetExpansionComponent", "total", element.getTotalElement(), -1);
27769    }
27770    if (element.hasOffsetElement()) {
27771      composeInteger(t, "ValueSetExpansionComponent", "offset", element.getOffsetElement(), -1);
27772    }
27773    for (int i = 0; i < element.getParameter().size(); i++) {
27774      composeValueSetExpansionParameterComponent(t, "ValueSetExpansionComponent", "parameter", element.getParameter().get(i), i);
27775    }
27776    for (int i = 0; i < element.getProperty().size(); i++) {
27777      composeValueSetExpansionPropertyComponent(t, "ValueSetExpansionComponent", "property", element.getProperty().get(i), i);
27778    }
27779    for (int i = 0; i < element.getContains().size(); i++) {
27780      composeValueSetExpansionContainsComponent(t, "ValueSetExpansionComponent", "contains", element.getContains().get(i), i);
27781    }
27782  }
27783
27784  protected void composeValueSetExpansionParameterComponent(Complex parent, String parentType, String name, ValueSet.ValueSetExpansionParameterComponent element, int index) {
27785    if (element == null) 
27786      return;
27787    Complex t;
27788    if (Utilities.noString(parentType))
27789      t = parent;
27790    else {
27791      t = parent.predicate("fhir:"+name,index > -1);
27792    }
27793    composeBackboneElement(t, "parameter", name, element, index);
27794    if (element.hasNameElement()) {
27795      composeString(t, "ValueSetExpansionParameterComponent", "name", element.getNameElement(), -1);
27796    }
27797    if (element.hasValue()) {
27798      composeType(t, "ValueSetExpansionParameterComponent", "value", element.getValue(), -1);
27799    }
27800  }
27801
27802  protected void composeValueSetExpansionPropertyComponent(Complex parent, String parentType, String name, ValueSet.ValueSetExpansionPropertyComponent element, int index) {
27803    if (element == null) 
27804      return;
27805    Complex t;
27806    if (Utilities.noString(parentType))
27807      t = parent;
27808    else {
27809      t = parent.predicate("fhir:"+name,index > -1);
27810    }
27811    composeBackboneElement(t, "property", name, element, index);
27812    if (element.hasCodeElement()) {
27813      composeCode(t, "ValueSetExpansionPropertyComponent", "code", element.getCodeElement(), -1);
27814    }
27815    if (element.hasUriElement()) {
27816      composeUri(t, "ValueSetExpansionPropertyComponent", "uri", element.getUriElement(), -1);
27817    }
27818  }
27819
27820  protected void composeValueSetExpansionContainsComponent(Complex parent, String parentType, String name, ValueSet.ValueSetExpansionContainsComponent element, int index) {
27821    if (element == null) 
27822      return;
27823    Complex t;
27824    if (Utilities.noString(parentType))
27825      t = parent;
27826    else {
27827      t = parent.predicate("fhir:"+name,index > -1);
27828    }
27829    composeBackboneElement(t, "contains", name, element, index);
27830    if (element.hasSystemElement()) {
27831      composeUri(t, "ValueSetExpansionContainsComponent", "system", element.getSystemElement(), -1);
27832    }
27833    if (element.hasAbstractElement()) {
27834      composeBoolean(t, "ValueSetExpansionContainsComponent", "abstract", element.getAbstractElement(), -1);
27835    }
27836    if (element.hasInactiveElement()) {
27837      composeBoolean(t, "ValueSetExpansionContainsComponent", "inactive", element.getInactiveElement(), -1);
27838    }
27839    if (element.hasVersionElement()) {
27840      composeString(t, "ValueSetExpansionContainsComponent", "version", element.getVersionElement(), -1);
27841    }
27842    if (element.hasCodeElement()) {
27843      composeCode(t, "ValueSetExpansionContainsComponent", "code", element.getCodeElement(), -1);
27844    }
27845    if (element.hasDisplayElement()) {
27846      composeString(t, "ValueSetExpansionContainsComponent", "display", element.getDisplayElement(), -1);
27847    }
27848    for (int i = 0; i < element.getDesignation().size(); i++) {
27849      composeValueSetConceptReferenceDesignationComponent(t, "ValueSetExpansionContainsComponent", "designation", element.getDesignation().get(i), i);
27850    }
27851    for (int i = 0; i < element.getProperty().size(); i++) {
27852      composeValueSetConceptPropertyComponent(t, "ValueSetExpansionContainsComponent", "property", element.getProperty().get(i), i);
27853    }
27854    for (int i = 0; i < element.getContains().size(); i++) {
27855      composeValueSetExpansionContainsComponent(t, "ValueSetExpansionContainsComponent", "contains", element.getContains().get(i), i);
27856    }
27857  }
27858
27859  protected void composeValueSetConceptPropertyComponent(Complex parent, String parentType, String name, ValueSet.ConceptPropertyComponent element, int index) {
27860    if (element == null) 
27861      return;
27862    Complex t;
27863    if (Utilities.noString(parentType))
27864      t = parent;
27865    else {
27866      t = parent.predicate("fhir:"+name,index > -1);
27867    }
27868    composeBackboneElement(t, "property", name, element, index);
27869    if (element.hasCodeElement()) {
27870      composeCode(t, "ConceptPropertyComponent", "code", element.getCodeElement(), -1);
27871    }
27872    if (element.hasValue()) {
27873      composeType(t, "ConceptPropertyComponent", "value", element.getValue(), -1);
27874    }
27875    for (int i = 0; i < element.getSubProperty().size(); i++) {
27876      composeValueSetConceptSubPropertyComponent(t, "ConceptPropertyComponent", "subProperty", element.getSubProperty().get(i), i);
27877    }
27878  }
27879
27880  protected void composeValueSetConceptSubPropertyComponent(Complex parent, String parentType, String name, ValueSet.ConceptSubPropertyComponent element, int index) {
27881    if (element == null) 
27882      return;
27883    Complex t;
27884    if (Utilities.noString(parentType))
27885      t = parent;
27886    else {
27887      t = parent.predicate("fhir:"+name,index > -1);
27888    }
27889    composeBackboneElement(t, "subProperty", name, element, index);
27890    if (element.hasCodeElement()) {
27891      composeCode(t, "ConceptSubPropertyComponent", "code", element.getCodeElement(), -1);
27892    }
27893    if (element.hasValue()) {
27894      composeType(t, "ConceptSubPropertyComponent", "value", element.getValue(), -1);
27895    }
27896  }
27897
27898  protected void composeValueSetScopeComponent(Complex parent, String parentType, String name, ValueSet.ValueSetScopeComponent element, int index) {
27899    if (element == null) 
27900      return;
27901    Complex t;
27902    if (Utilities.noString(parentType))
27903      t = parent;
27904    else {
27905      t = parent.predicate("fhir:"+name,index > -1);
27906    }
27907    composeBackboneElement(t, "scope", name, element, index);
27908    if (element.hasInclusionCriteriaElement()) {
27909      composeString(t, "ValueSetScopeComponent", "inclusionCriteria", element.getInclusionCriteriaElement(), -1);
27910    }
27911    if (element.hasExclusionCriteriaElement()) {
27912      composeString(t, "ValueSetScopeComponent", "exclusionCriteria", element.getExclusionCriteriaElement(), -1);
27913    }
27914  }
27915
27916  protected void composeVerificationResult(Complex parent, String parentType, String name, VerificationResult element, int index) {
27917    if (element == null) 
27918      return;
27919    Complex t;
27920    if (Utilities.noString(parentType))
27921      t = parent;
27922    else {
27923      t = parent.predicate("fhir:"+name,index > -1);
27924    }
27925    composeDomainResource(t, "VerificationResult", name, element, index);
27926    for (int i = 0; i < element.getTarget().size(); i++) {
27927      composeReference(t, "VerificationResult", "target", element.getTarget().get(i), i);
27928    }
27929    for (int i = 0; i < element.getTargetLocation().size(); i++) {
27930      composeString(t, "VerificationResult", "targetLocation", element.getTargetLocation().get(i), i);
27931    }
27932    if (element.hasNeed()) {
27933      composeCodeableConcept(t, "VerificationResult", "need", element.getNeed(), -1);
27934    }
27935    if (element.hasStatusElement()) {
27936      composeEnum(t, "VerificationResult", "status", element.getStatusElement(), -1);
27937    }
27938    if (element.hasStatusDateElement()) {
27939      composeDateTime(t, "VerificationResult", "statusDate", element.getStatusDateElement(), -1);
27940    }
27941    if (element.hasValidationType()) {
27942      composeCodeableConcept(t, "VerificationResult", "validationType", element.getValidationType(), -1);
27943    }
27944    for (int i = 0; i < element.getValidationProcess().size(); i++) {
27945      composeCodeableConcept(t, "VerificationResult", "validationProcess", element.getValidationProcess().get(i), i);
27946    }
27947    if (element.hasFrequency()) {
27948      composeTiming(t, "VerificationResult", "frequency", element.getFrequency(), -1);
27949    }
27950    if (element.hasLastPerformedElement()) {
27951      composeDateTime(t, "VerificationResult", "lastPerformed", element.getLastPerformedElement(), -1);
27952    }
27953    if (element.hasNextScheduledElement()) {
27954      composeDate(t, "VerificationResult", "nextScheduled", element.getNextScheduledElement(), -1);
27955    }
27956    if (element.hasFailureAction()) {
27957      composeCodeableConcept(t, "VerificationResult", "failureAction", element.getFailureAction(), -1);
27958    }
27959    for (int i = 0; i < element.getPrimarySource().size(); i++) {
27960      composeVerificationResultPrimarySourceComponent(t, "VerificationResult", "primarySource", element.getPrimarySource().get(i), i);
27961    }
27962    if (element.hasAttestation()) {
27963      composeVerificationResultAttestationComponent(t, "VerificationResult", "attestation", element.getAttestation(), -1);
27964    }
27965    for (int i = 0; i < element.getValidator().size(); i++) {
27966      composeVerificationResultValidatorComponent(t, "VerificationResult", "validator", element.getValidator().get(i), i);
27967    }
27968  }
27969
27970  protected void composeVerificationResultPrimarySourceComponent(Complex parent, String parentType, String name, VerificationResult.VerificationResultPrimarySourceComponent element, int index) {
27971    if (element == null) 
27972      return;
27973    Complex t;
27974    if (Utilities.noString(parentType))
27975      t = parent;
27976    else {
27977      t = parent.predicate("fhir:"+name,index > -1);
27978    }
27979    composeBackboneElement(t, "primarySource", name, element, index);
27980    if (element.hasWho()) {
27981      composeReference(t, "VerificationResultPrimarySourceComponent", "who", element.getWho(), -1);
27982    }
27983    for (int i = 0; i < element.getType().size(); i++) {
27984      composeCodeableConcept(t, "VerificationResultPrimarySourceComponent", "type", element.getType().get(i), i);
27985    }
27986    for (int i = 0; i < element.getCommunicationMethod().size(); i++) {
27987      composeCodeableConcept(t, "VerificationResultPrimarySourceComponent", "communicationMethod", element.getCommunicationMethod().get(i), i);
27988    }
27989    if (element.hasValidationStatus()) {
27990      composeCodeableConcept(t, "VerificationResultPrimarySourceComponent", "validationStatus", element.getValidationStatus(), -1);
27991    }
27992    if (element.hasValidationDateElement()) {
27993      composeDateTime(t, "VerificationResultPrimarySourceComponent", "validationDate", element.getValidationDateElement(), -1);
27994    }
27995    if (element.hasCanPushUpdates()) {
27996      composeCodeableConcept(t, "VerificationResultPrimarySourceComponent", "canPushUpdates", element.getCanPushUpdates(), -1);
27997    }
27998    for (int i = 0; i < element.getPushTypeAvailable().size(); i++) {
27999      composeCodeableConcept(t, "VerificationResultPrimarySourceComponent", "pushTypeAvailable", element.getPushTypeAvailable().get(i), i);
28000    }
28001  }
28002
28003  protected void composeVerificationResultAttestationComponent(Complex parent, String parentType, String name, VerificationResult.VerificationResultAttestationComponent element, int index) {
28004    if (element == null) 
28005      return;
28006    Complex t;
28007    if (Utilities.noString(parentType))
28008      t = parent;
28009    else {
28010      t = parent.predicate("fhir:"+name,index > -1);
28011    }
28012    composeBackboneElement(t, "attestation", name, element, index);
28013    if (element.hasWho()) {
28014      composeReference(t, "VerificationResultAttestationComponent", "who", element.getWho(), -1);
28015    }
28016    if (element.hasOnBehalfOf()) {
28017      composeReference(t, "VerificationResultAttestationComponent", "onBehalfOf", element.getOnBehalfOf(), -1);
28018    }
28019    if (element.hasCommunicationMethod()) {
28020      composeCodeableConcept(t, "VerificationResultAttestationComponent", "communicationMethod", element.getCommunicationMethod(), -1);
28021    }
28022    if (element.hasDateElement()) {
28023      composeDate(t, "VerificationResultAttestationComponent", "date", element.getDateElement(), -1);
28024    }
28025    if (element.hasSourceIdentityCertificateElement()) {
28026      composeString(t, "VerificationResultAttestationComponent", "sourceIdentityCertificate", element.getSourceIdentityCertificateElement(), -1);
28027    }
28028    if (element.hasProxyIdentityCertificateElement()) {
28029      composeString(t, "VerificationResultAttestationComponent", "proxyIdentityCertificate", element.getProxyIdentityCertificateElement(), -1);
28030    }
28031    if (element.hasProxySignature()) {
28032      composeSignature(t, "VerificationResultAttestationComponent", "proxySignature", element.getProxySignature(), -1);
28033    }
28034    if (element.hasSourceSignature()) {
28035      composeSignature(t, "VerificationResultAttestationComponent", "sourceSignature", element.getSourceSignature(), -1);
28036    }
28037  }
28038
28039  protected void composeVerificationResultValidatorComponent(Complex parent, String parentType, String name, VerificationResult.VerificationResultValidatorComponent element, int index) {
28040    if (element == null) 
28041      return;
28042    Complex t;
28043    if (Utilities.noString(parentType))
28044      t = parent;
28045    else {
28046      t = parent.predicate("fhir:"+name,index > -1);
28047    }
28048    composeBackboneElement(t, "validator", name, element, index);
28049    if (element.hasOrganization()) {
28050      composeReference(t, "VerificationResultValidatorComponent", "organization", element.getOrganization(), -1);
28051    }
28052    if (element.hasIdentityCertificateElement()) {
28053      composeString(t, "VerificationResultValidatorComponent", "identityCertificate", element.getIdentityCertificateElement(), -1);
28054    }
28055    if (element.hasAttestationSignature()) {
28056      composeSignature(t, "VerificationResultValidatorComponent", "attestationSignature", element.getAttestationSignature(), -1);
28057    }
28058  }
28059
28060  protected void composeVisionPrescription(Complex parent, String parentType, String name, VisionPrescription element, int index) {
28061    if (element == null) 
28062      return;
28063    Complex t;
28064    if (Utilities.noString(parentType))
28065      t = parent;
28066    else {
28067      t = parent.predicate("fhir:"+name,index > -1);
28068    }
28069    composeDomainResource(t, "VisionPrescription", name, element, index);
28070    for (int i = 0; i < element.getIdentifier().size(); i++) {
28071      composeIdentifier(t, "VisionPrescription", "identifier", element.getIdentifier().get(i), i);
28072    }
28073    if (element.hasStatusElement()) {
28074      composeEnum(t, "VisionPrescription", "status", element.getStatusElement(), -1);
28075    }
28076    if (element.hasCreatedElement()) {
28077      composeDateTime(t, "VisionPrescription", "created", element.getCreatedElement(), -1);
28078    }
28079    if (element.hasPatient()) {
28080      composeReference(t, "VisionPrescription", "patient", element.getPatient(), -1);
28081    }
28082    if (element.hasEncounter()) {
28083      composeReference(t, "VisionPrescription", "encounter", element.getEncounter(), -1);
28084    }
28085    if (element.hasDateWrittenElement()) {
28086      composeDateTime(t, "VisionPrescription", "dateWritten", element.getDateWrittenElement(), -1);
28087    }
28088    if (element.hasPrescriber()) {
28089      composeReference(t, "VisionPrescription", "prescriber", element.getPrescriber(), -1);
28090    }
28091    for (int i = 0; i < element.getLensSpecification().size(); i++) {
28092      composeVisionPrescriptionLensSpecificationComponent(t, "VisionPrescription", "lensSpecification", element.getLensSpecification().get(i), i);
28093    }
28094  }
28095
28096  protected void composeVisionPrescriptionLensSpecificationComponent(Complex parent, String parentType, String name, VisionPrescription.VisionPrescriptionLensSpecificationComponent element, int index) {
28097    if (element == null) 
28098      return;
28099    Complex t;
28100    if (Utilities.noString(parentType))
28101      t = parent;
28102    else {
28103      t = parent.predicate("fhir:"+name,index > -1);
28104    }
28105    composeBackboneElement(t, "lensSpecification", name, element, index);
28106    if (element.hasProduct()) {
28107      composeCodeableConcept(t, "VisionPrescriptionLensSpecificationComponent", "product", element.getProduct(), -1);
28108    }
28109    if (element.hasEyeElement()) {
28110      composeEnum(t, "VisionPrescriptionLensSpecificationComponent", "eye", element.getEyeElement(), -1);
28111    }
28112    if (element.hasSphereElement()) {
28113      composeDecimal(t, "VisionPrescriptionLensSpecificationComponent", "sphere", element.getSphereElement(), -1);
28114    }
28115    if (element.hasCylinderElement()) {
28116      composeDecimal(t, "VisionPrescriptionLensSpecificationComponent", "cylinder", element.getCylinderElement(), -1);
28117    }
28118    if (element.hasAxisElement()) {
28119      composeInteger(t, "VisionPrescriptionLensSpecificationComponent", "axis", element.getAxisElement(), -1);
28120    }
28121    for (int i = 0; i < element.getPrism().size(); i++) {
28122      composeVisionPrescriptionPrismComponent(t, "VisionPrescriptionLensSpecificationComponent", "prism", element.getPrism().get(i), i);
28123    }
28124    if (element.hasAddElement()) {
28125      composeDecimal(t, "VisionPrescriptionLensSpecificationComponent", "add", element.getAddElement(), -1);
28126    }
28127    if (element.hasPowerElement()) {
28128      composeDecimal(t, "VisionPrescriptionLensSpecificationComponent", "power", element.getPowerElement(), -1);
28129    }
28130    if (element.hasBackCurveElement()) {
28131      composeDecimal(t, "VisionPrescriptionLensSpecificationComponent", "backCurve", element.getBackCurveElement(), -1);
28132    }
28133    if (element.hasDiameterElement()) {
28134      composeDecimal(t, "VisionPrescriptionLensSpecificationComponent", "diameter", element.getDiameterElement(), -1);
28135    }
28136    if (element.hasDuration()) {
28137      composeQuantity(t, "VisionPrescriptionLensSpecificationComponent", "duration", element.getDuration(), -1);
28138    }
28139    if (element.hasColorElement()) {
28140      composeString(t, "VisionPrescriptionLensSpecificationComponent", "color", element.getColorElement(), -1);
28141    }
28142    if (element.hasBrandElement()) {
28143      composeString(t, "VisionPrescriptionLensSpecificationComponent", "brand", element.getBrandElement(), -1);
28144    }
28145    for (int i = 0; i < element.getNote().size(); i++) {
28146      composeAnnotation(t, "VisionPrescriptionLensSpecificationComponent", "note", element.getNote().get(i), i);
28147    }
28148  }
28149
28150  protected void composeVisionPrescriptionPrismComponent(Complex parent, String parentType, String name, VisionPrescription.PrismComponent element, int index) {
28151    if (element == null) 
28152      return;
28153    Complex t;
28154    if (Utilities.noString(parentType))
28155      t = parent;
28156    else {
28157      t = parent.predicate("fhir:"+name,index > -1);
28158    }
28159    composeBackboneElement(t, "prism", name, element, index);
28160    if (element.hasAmountElement()) {
28161      composeDecimal(t, "PrismComponent", "amount", element.getAmountElement(), -1);
28162    }
28163    if (element.hasBaseElement()) {
28164      composeEnum(t, "PrismComponent", "base", element.getBaseElement(), -1);
28165    }
28166  }
28167
28168
28169
28170
28171  @Override
28172  protected void composeResource(Complex parent, Resource resource) {
28173    if (parent == null) {
28174      throw new Error("parent == null");
28175    } else if (resource == null) {
28176      throw new Error("resource == null");
28177    } else if (resource instanceof Account) {
28178      composeAccount(parent, null, "Account", (Account)resource, -1);
28179    } else if (resource instanceof ActivityDefinition) {
28180      composeActivityDefinition(parent, null, "ActivityDefinition", (ActivityDefinition)resource, -1);
28181    } else if (resource instanceof ActorDefinition) {
28182      composeActorDefinition(parent, null, "ActorDefinition", (ActorDefinition)resource, -1);
28183    } else if (resource instanceof AdministrableProductDefinition) {
28184      composeAdministrableProductDefinition(parent, null, "AdministrableProductDefinition", (AdministrableProductDefinition)resource, -1);
28185    } else if (resource instanceof AdverseEvent) {
28186      composeAdverseEvent(parent, null, "AdverseEvent", (AdverseEvent)resource, -1);
28187    } else if (resource instanceof AllergyIntolerance) {
28188      composeAllergyIntolerance(parent, null, "AllergyIntolerance", (AllergyIntolerance)resource, -1);
28189    } else if (resource instanceof Appointment) {
28190      composeAppointment(parent, null, "Appointment", (Appointment)resource, -1);
28191    } else if (resource instanceof AppointmentResponse) {
28192      composeAppointmentResponse(parent, null, "AppointmentResponse", (AppointmentResponse)resource, -1);
28193    } else if (resource instanceof ArtifactAssessment) {
28194      composeArtifactAssessment(parent, null, "ArtifactAssessment", (ArtifactAssessment)resource, -1);
28195    } else if (resource instanceof AuditEvent) {
28196      composeAuditEvent(parent, null, "AuditEvent", (AuditEvent)resource, -1);
28197    } else if (resource instanceof Basic) {
28198      composeBasic(parent, null, "Basic", (Basic)resource, -1);
28199    } else if (resource instanceof Binary) {
28200      composeBinary(parent, null, "Binary", (Binary)resource, -1);
28201    } else if (resource instanceof BiologicallyDerivedProduct) {
28202      composeBiologicallyDerivedProduct(parent, null, "BiologicallyDerivedProduct", (BiologicallyDerivedProduct)resource, -1);
28203    } else if (resource instanceof BiologicallyDerivedProductDispense) {
28204      composeBiologicallyDerivedProductDispense(parent, null, "BiologicallyDerivedProductDispense", (BiologicallyDerivedProductDispense)resource, -1);
28205    } else if (resource instanceof BodyStructure) {
28206      composeBodyStructure(parent, null, "BodyStructure", (BodyStructure)resource, -1);
28207    } else if (resource instanceof Bundle) {
28208      composeBundle(parent, null, "Bundle", (Bundle)resource, -1);
28209    } else if (resource instanceof CapabilityStatement) {
28210      composeCapabilityStatement(parent, null, "CapabilityStatement", (CapabilityStatement)resource, -1);
28211    } else if (resource instanceof CarePlan) {
28212      composeCarePlan(parent, null, "CarePlan", (CarePlan)resource, -1);
28213    } else if (resource instanceof CareTeam) {
28214      composeCareTeam(parent, null, "CareTeam", (CareTeam)resource, -1);
28215    } else if (resource instanceof ChargeItem) {
28216      composeChargeItem(parent, null, "ChargeItem", (ChargeItem)resource, -1);
28217    } else if (resource instanceof ChargeItemDefinition) {
28218      composeChargeItemDefinition(parent, null, "ChargeItemDefinition", (ChargeItemDefinition)resource, -1);
28219    } else if (resource instanceof Citation) {
28220      composeCitation(parent, null, "Citation", (Citation)resource, -1);
28221    } else if (resource instanceof Claim) {
28222      composeClaim(parent, null, "Claim", (Claim)resource, -1);
28223    } else if (resource instanceof ClaimResponse) {
28224      composeClaimResponse(parent, null, "ClaimResponse", (ClaimResponse)resource, -1);
28225    } else if (resource instanceof ClinicalImpression) {
28226      composeClinicalImpression(parent, null, "ClinicalImpression", (ClinicalImpression)resource, -1);
28227    } else if (resource instanceof ClinicalUseDefinition) {
28228      composeClinicalUseDefinition(parent, null, "ClinicalUseDefinition", (ClinicalUseDefinition)resource, -1);
28229    } else if (resource instanceof CodeSystem) {
28230      composeCodeSystem(parent, null, "CodeSystem", (CodeSystem)resource, -1);
28231    } else if (resource instanceof Communication) {
28232      composeCommunication(parent, null, "Communication", (Communication)resource, -1);
28233    } else if (resource instanceof CommunicationRequest) {
28234      composeCommunicationRequest(parent, null, "CommunicationRequest", (CommunicationRequest)resource, -1);
28235    } else if (resource instanceof CompartmentDefinition) {
28236      composeCompartmentDefinition(parent, null, "CompartmentDefinition", (CompartmentDefinition)resource, -1);
28237    } else if (resource instanceof Composition) {
28238      composeComposition(parent, null, "Composition", (Composition)resource, -1);
28239    } else if (resource instanceof ConceptMap) {
28240      composeConceptMap(parent, null, "ConceptMap", (ConceptMap)resource, -1);
28241    } else if (resource instanceof Condition) {
28242      composeCondition(parent, null, "Condition", (Condition)resource, -1);
28243    } else if (resource instanceof ConditionDefinition) {
28244      composeConditionDefinition(parent, null, "ConditionDefinition", (ConditionDefinition)resource, -1);
28245    } else if (resource instanceof Consent) {
28246      composeConsent(parent, null, "Consent", (Consent)resource, -1);
28247    } else if (resource instanceof Contract) {
28248      composeContract(parent, null, "Contract", (Contract)resource, -1);
28249    } else if (resource instanceof Coverage) {
28250      composeCoverage(parent, null, "Coverage", (Coverage)resource, -1);
28251    } else if (resource instanceof CoverageEligibilityRequest) {
28252      composeCoverageEligibilityRequest(parent, null, "CoverageEligibilityRequest", (CoverageEligibilityRequest)resource, -1);
28253    } else if (resource instanceof CoverageEligibilityResponse) {
28254      composeCoverageEligibilityResponse(parent, null, "CoverageEligibilityResponse", (CoverageEligibilityResponse)resource, -1);
28255    } else if (resource instanceof DetectedIssue) {
28256      composeDetectedIssue(parent, null, "DetectedIssue", (DetectedIssue)resource, -1);
28257    } else if (resource instanceof Device) {
28258      composeDevice(parent, null, "Device", (Device)resource, -1);
28259    } else if (resource instanceof DeviceAssociation) {
28260      composeDeviceAssociation(parent, null, "DeviceAssociation", (DeviceAssociation)resource, -1);
28261    } else if (resource instanceof DeviceDefinition) {
28262      composeDeviceDefinition(parent, null, "DeviceDefinition", (DeviceDefinition)resource, -1);
28263    } else if (resource instanceof DeviceDispense) {
28264      composeDeviceDispense(parent, null, "DeviceDispense", (DeviceDispense)resource, -1);
28265    } else if (resource instanceof DeviceMetric) {
28266      composeDeviceMetric(parent, null, "DeviceMetric", (DeviceMetric)resource, -1);
28267    } else if (resource instanceof DeviceRequest) {
28268      composeDeviceRequest(parent, null, "DeviceRequest", (DeviceRequest)resource, -1);
28269    } else if (resource instanceof DeviceUsage) {
28270      composeDeviceUsage(parent, null, "DeviceUsage", (DeviceUsage)resource, -1);
28271    } else if (resource instanceof DiagnosticReport) {
28272      composeDiagnosticReport(parent, null, "DiagnosticReport", (DiagnosticReport)resource, -1);
28273    } else if (resource instanceof DocumentReference) {
28274      composeDocumentReference(parent, null, "DocumentReference", (DocumentReference)resource, -1);
28275    } else if (resource instanceof Encounter) {
28276      composeEncounter(parent, null, "Encounter", (Encounter)resource, -1);
28277    } else if (resource instanceof EncounterHistory) {
28278      composeEncounterHistory(parent, null, "EncounterHistory", (EncounterHistory)resource, -1);
28279    } else if (resource instanceof Endpoint) {
28280      composeEndpoint(parent, null, "Endpoint", (Endpoint)resource, -1);
28281    } else if (resource instanceof EnrollmentRequest) {
28282      composeEnrollmentRequest(parent, null, "EnrollmentRequest", (EnrollmentRequest)resource, -1);
28283    } else if (resource instanceof EnrollmentResponse) {
28284      composeEnrollmentResponse(parent, null, "EnrollmentResponse", (EnrollmentResponse)resource, -1);
28285    } else if (resource instanceof EpisodeOfCare) {
28286      composeEpisodeOfCare(parent, null, "EpisodeOfCare", (EpisodeOfCare)resource, -1);
28287    } else if (resource instanceof EventDefinition) {
28288      composeEventDefinition(parent, null, "EventDefinition", (EventDefinition)resource, -1);
28289    } else if (resource instanceof Evidence) {
28290      composeEvidence(parent, null, "Evidence", (Evidence)resource, -1);
28291    } else if (resource instanceof EvidenceReport) {
28292      composeEvidenceReport(parent, null, "EvidenceReport", (EvidenceReport)resource, -1);
28293    } else if (resource instanceof EvidenceVariable) {
28294      composeEvidenceVariable(parent, null, "EvidenceVariable", (EvidenceVariable)resource, -1);
28295    } else if (resource instanceof ExampleScenario) {
28296      composeExampleScenario(parent, null, "ExampleScenario", (ExampleScenario)resource, -1);
28297    } else if (resource instanceof ExplanationOfBenefit) {
28298      composeExplanationOfBenefit(parent, null, "ExplanationOfBenefit", (ExplanationOfBenefit)resource, -1);
28299    } else if (resource instanceof FamilyMemberHistory) {
28300      composeFamilyMemberHistory(parent, null, "FamilyMemberHistory", (FamilyMemberHistory)resource, -1);
28301    } else if (resource instanceof Flag) {
28302      composeFlag(parent, null, "Flag", (Flag)resource, -1);
28303    } else if (resource instanceof FormularyItem) {
28304      composeFormularyItem(parent, null, "FormularyItem", (FormularyItem)resource, -1);
28305    } else if (resource instanceof GenomicStudy) {
28306      composeGenomicStudy(parent, null, "GenomicStudy", (GenomicStudy)resource, -1);
28307    } else if (resource instanceof Goal) {
28308      composeGoal(parent, null, "Goal", (Goal)resource, -1);
28309    } else if (resource instanceof GraphDefinition) {
28310      composeGraphDefinition(parent, null, "GraphDefinition", (GraphDefinition)resource, -1);
28311    } else if (resource instanceof Group) {
28312      composeGroup(parent, null, "Group", (Group)resource, -1);
28313    } else if (resource instanceof GuidanceResponse) {
28314      composeGuidanceResponse(parent, null, "GuidanceResponse", (GuidanceResponse)resource, -1);
28315    } else if (resource instanceof HealthcareService) {
28316      composeHealthcareService(parent, null, "HealthcareService", (HealthcareService)resource, -1);
28317    } else if (resource instanceof ImagingSelection) {
28318      composeImagingSelection(parent, null, "ImagingSelection", (ImagingSelection)resource, -1);
28319    } else if (resource instanceof ImagingStudy) {
28320      composeImagingStudy(parent, null, "ImagingStudy", (ImagingStudy)resource, -1);
28321    } else if (resource instanceof Immunization) {
28322      composeImmunization(parent, null, "Immunization", (Immunization)resource, -1);
28323    } else if (resource instanceof ImmunizationEvaluation) {
28324      composeImmunizationEvaluation(parent, null, "ImmunizationEvaluation", (ImmunizationEvaluation)resource, -1);
28325    } else if (resource instanceof ImmunizationRecommendation) {
28326      composeImmunizationRecommendation(parent, null, "ImmunizationRecommendation", (ImmunizationRecommendation)resource, -1);
28327    } else if (resource instanceof ImplementationGuide) {
28328      composeImplementationGuide(parent, null, "ImplementationGuide", (ImplementationGuide)resource, -1);
28329    } else if (resource instanceof Ingredient) {
28330      composeIngredient(parent, null, "Ingredient", (Ingredient)resource, -1);
28331    } else if (resource instanceof InsurancePlan) {
28332      composeInsurancePlan(parent, null, "InsurancePlan", (InsurancePlan)resource, -1);
28333    } else if (resource instanceof InventoryItem) {
28334      composeInventoryItem(parent, null, "InventoryItem", (InventoryItem)resource, -1);
28335    } else if (resource instanceof InventoryReport) {
28336      composeInventoryReport(parent, null, "InventoryReport", (InventoryReport)resource, -1);
28337    } else if (resource instanceof Invoice) {
28338      composeInvoice(parent, null, "Invoice", (Invoice)resource, -1);
28339    } else if (resource instanceof Library) {
28340      composeLibrary(parent, null, "Library", (Library)resource, -1);
28341    } else if (resource instanceof Linkage) {
28342      composeLinkage(parent, null, "Linkage", (Linkage)resource, -1);
28343    } else if (resource instanceof ListResource) {
28344      composeListResource(parent, null, "List", (ListResource)resource, -1);
28345    } else if (resource instanceof Location) {
28346      composeLocation(parent, null, "Location", (Location)resource, -1);
28347    } else if (resource instanceof ManufacturedItemDefinition) {
28348      composeManufacturedItemDefinition(parent, null, "ManufacturedItemDefinition", (ManufacturedItemDefinition)resource, -1);
28349    } else if (resource instanceof Measure) {
28350      composeMeasure(parent, null, "Measure", (Measure)resource, -1);
28351    } else if (resource instanceof MeasureReport) {
28352      composeMeasureReport(parent, null, "MeasureReport", (MeasureReport)resource, -1);
28353    } else if (resource instanceof Medication) {
28354      composeMedication(parent, null, "Medication", (Medication)resource, -1);
28355    } else if (resource instanceof MedicationAdministration) {
28356      composeMedicationAdministration(parent, null, "MedicationAdministration", (MedicationAdministration)resource, -1);
28357    } else if (resource instanceof MedicationDispense) {
28358      composeMedicationDispense(parent, null, "MedicationDispense", (MedicationDispense)resource, -1);
28359    } else if (resource instanceof MedicationKnowledge) {
28360      composeMedicationKnowledge(parent, null, "MedicationKnowledge", (MedicationKnowledge)resource, -1);
28361    } else if (resource instanceof MedicationRequest) {
28362      composeMedicationRequest(parent, null, "MedicationRequest", (MedicationRequest)resource, -1);
28363    } else if (resource instanceof MedicationStatement) {
28364      composeMedicationStatement(parent, null, "MedicationStatement", (MedicationStatement)resource, -1);
28365    } else if (resource instanceof MedicinalProductDefinition) {
28366      composeMedicinalProductDefinition(parent, null, "MedicinalProductDefinition", (MedicinalProductDefinition)resource, -1);
28367    } else if (resource instanceof MessageDefinition) {
28368      composeMessageDefinition(parent, null, "MessageDefinition", (MessageDefinition)resource, -1);
28369    } else if (resource instanceof MessageHeader) {
28370      composeMessageHeader(parent, null, "MessageHeader", (MessageHeader)resource, -1);
28371    } else if (resource instanceof MolecularSequence) {
28372      composeMolecularSequence(parent, null, "MolecularSequence", (MolecularSequence)resource, -1);
28373    } else if (resource instanceof NamingSystem) {
28374      composeNamingSystem(parent, null, "NamingSystem", (NamingSystem)resource, -1);
28375    } else if (resource instanceof NutritionIntake) {
28376      composeNutritionIntake(parent, null, "NutritionIntake", (NutritionIntake)resource, -1);
28377    } else if (resource instanceof NutritionOrder) {
28378      composeNutritionOrder(parent, null, "NutritionOrder", (NutritionOrder)resource, -1);
28379    } else if (resource instanceof NutritionProduct) {
28380      composeNutritionProduct(parent, null, "NutritionProduct", (NutritionProduct)resource, -1);
28381    } else if (resource instanceof Observation) {
28382      composeObservation(parent, null, "Observation", (Observation)resource, -1);
28383    } else if (resource instanceof ObservationDefinition) {
28384      composeObservationDefinition(parent, null, "ObservationDefinition", (ObservationDefinition)resource, -1);
28385    } else if (resource instanceof OperationDefinition) {
28386      composeOperationDefinition(parent, null, "OperationDefinition", (OperationDefinition)resource, -1);
28387    } else if (resource instanceof OperationOutcome) {
28388      composeOperationOutcome(parent, null, "OperationOutcome", (OperationOutcome)resource, -1);
28389    } else if (resource instanceof Organization) {
28390      composeOrganization(parent, null, "Organization", (Organization)resource, -1);
28391    } else if (resource instanceof OrganizationAffiliation) {
28392      composeOrganizationAffiliation(parent, null, "OrganizationAffiliation", (OrganizationAffiliation)resource, -1);
28393    } else if (resource instanceof PackagedProductDefinition) {
28394      composePackagedProductDefinition(parent, null, "PackagedProductDefinition", (PackagedProductDefinition)resource, -1);
28395    } else if (resource instanceof Parameters) {
28396      composeParameters(parent, null, "Parameters", (Parameters)resource, -1);
28397    } else if (resource instanceof Patient) {
28398      composePatient(parent, null, "Patient", (Patient)resource, -1);
28399    } else if (resource instanceof PaymentNotice) {
28400      composePaymentNotice(parent, null, "PaymentNotice", (PaymentNotice)resource, -1);
28401    } else if (resource instanceof PaymentReconciliation) {
28402      composePaymentReconciliation(parent, null, "PaymentReconciliation", (PaymentReconciliation)resource, -1);
28403    } else if (resource instanceof Permission) {
28404      composePermission(parent, null, "Permission", (Permission)resource, -1);
28405    } else if (resource instanceof Person) {
28406      composePerson(parent, null, "Person", (Person)resource, -1);
28407    } else if (resource instanceof PlanDefinition) {
28408      composePlanDefinition(parent, null, "PlanDefinition", (PlanDefinition)resource, -1);
28409    } else if (resource instanceof Practitioner) {
28410      composePractitioner(parent, null, "Practitioner", (Practitioner)resource, -1);
28411    } else if (resource instanceof PractitionerRole) {
28412      composePractitionerRole(parent, null, "PractitionerRole", (PractitionerRole)resource, -1);
28413    } else if (resource instanceof Procedure) {
28414      composeProcedure(parent, null, "Procedure", (Procedure)resource, -1);
28415    } else if (resource instanceof Provenance) {
28416      composeProvenance(parent, null, "Provenance", (Provenance)resource, -1);
28417    } else if (resource instanceof Questionnaire) {
28418      composeQuestionnaire(parent, null, "Questionnaire", (Questionnaire)resource, -1);
28419    } else if (resource instanceof QuestionnaireResponse) {
28420      composeQuestionnaireResponse(parent, null, "QuestionnaireResponse", (QuestionnaireResponse)resource, -1);
28421    } else if (resource instanceof RegulatedAuthorization) {
28422      composeRegulatedAuthorization(parent, null, "RegulatedAuthorization", (RegulatedAuthorization)resource, -1);
28423    } else if (resource instanceof RelatedPerson) {
28424      composeRelatedPerson(parent, null, "RelatedPerson", (RelatedPerson)resource, -1);
28425    } else if (resource instanceof RequestOrchestration) {
28426      composeRequestOrchestration(parent, null, "RequestOrchestration", (RequestOrchestration)resource, -1);
28427    } else if (resource instanceof Requirements) {
28428      composeRequirements(parent, null, "Requirements", (Requirements)resource, -1);
28429    } else if (resource instanceof ResearchStudy) {
28430      composeResearchStudy(parent, null, "ResearchStudy", (ResearchStudy)resource, -1);
28431    } else if (resource instanceof ResearchSubject) {
28432      composeResearchSubject(parent, null, "ResearchSubject", (ResearchSubject)resource, -1);
28433    } else if (resource instanceof RiskAssessment) {
28434      composeRiskAssessment(parent, null, "RiskAssessment", (RiskAssessment)resource, -1);
28435    } else if (resource instanceof Schedule) {
28436      composeSchedule(parent, null, "Schedule", (Schedule)resource, -1);
28437    } else if (resource instanceof SearchParameter) {
28438      composeSearchParameter(parent, null, "SearchParameter", (SearchParameter)resource, -1);
28439    } else if (resource instanceof ServiceRequest) {
28440      composeServiceRequest(parent, null, "ServiceRequest", (ServiceRequest)resource, -1);
28441    } else if (resource instanceof Slot) {
28442      composeSlot(parent, null, "Slot", (Slot)resource, -1);
28443    } else if (resource instanceof Specimen) {
28444      composeSpecimen(parent, null, "Specimen", (Specimen)resource, -1);
28445    } else if (resource instanceof SpecimenDefinition) {
28446      composeSpecimenDefinition(parent, null, "SpecimenDefinition", (SpecimenDefinition)resource, -1);
28447    } else if (resource instanceof StructureDefinition) {
28448      composeStructureDefinition(parent, null, "StructureDefinition", (StructureDefinition)resource, -1);
28449    } else if (resource instanceof StructureMap) {
28450      composeStructureMap(parent, null, "StructureMap", (StructureMap)resource, -1);
28451    } else if (resource instanceof Subscription) {
28452      composeSubscription(parent, null, "Subscription", (Subscription)resource, -1);
28453    } else if (resource instanceof SubscriptionStatus) {
28454      composeSubscriptionStatus(parent, null, "SubscriptionStatus", (SubscriptionStatus)resource, -1);
28455    } else if (resource instanceof SubscriptionTopic) {
28456      composeSubscriptionTopic(parent, null, "SubscriptionTopic", (SubscriptionTopic)resource, -1);
28457    } else if (resource instanceof Substance) {
28458      composeSubstance(parent, null, "Substance", (Substance)resource, -1);
28459    } else if (resource instanceof SubstanceDefinition) {
28460      composeSubstanceDefinition(parent, null, "SubstanceDefinition", (SubstanceDefinition)resource, -1);
28461    } else if (resource instanceof SubstanceNucleicAcid) {
28462      composeSubstanceNucleicAcid(parent, null, "SubstanceNucleicAcid", (SubstanceNucleicAcid)resource, -1);
28463    } else if (resource instanceof SubstancePolymer) {
28464      composeSubstancePolymer(parent, null, "SubstancePolymer", (SubstancePolymer)resource, -1);
28465    } else if (resource instanceof SubstanceProtein) {
28466      composeSubstanceProtein(parent, null, "SubstanceProtein", (SubstanceProtein)resource, -1);
28467    } else if (resource instanceof SubstanceReferenceInformation) {
28468      composeSubstanceReferenceInformation(parent, null, "SubstanceReferenceInformation", (SubstanceReferenceInformation)resource, -1);
28469    } else if (resource instanceof SubstanceSourceMaterial) {
28470      composeSubstanceSourceMaterial(parent, null, "SubstanceSourceMaterial", (SubstanceSourceMaterial)resource, -1);
28471    } else if (resource instanceof SupplyDelivery) {
28472      composeSupplyDelivery(parent, null, "SupplyDelivery", (SupplyDelivery)resource, -1);
28473    } else if (resource instanceof SupplyRequest) {
28474      composeSupplyRequest(parent, null, "SupplyRequest", (SupplyRequest)resource, -1);
28475    } else if (resource instanceof Task) {
28476      composeTask(parent, null, "Task", (Task)resource, -1);
28477    } else if (resource instanceof TerminologyCapabilities) {
28478      composeTerminologyCapabilities(parent, null, "TerminologyCapabilities", (TerminologyCapabilities)resource, -1);
28479    } else if (resource instanceof TestPlan) {
28480      composeTestPlan(parent, null, "TestPlan", (TestPlan)resource, -1);
28481    } else if (resource instanceof TestReport) {
28482      composeTestReport(parent, null, "TestReport", (TestReport)resource, -1);
28483    } else if (resource instanceof TestScript) {
28484      composeTestScript(parent, null, "TestScript", (TestScript)resource, -1);
28485    } else if (resource instanceof Transport) {
28486      composeTransport(parent, null, "Transport", (Transport)resource, -1);
28487    } else if (resource instanceof ValueSet) {
28488      composeValueSet(parent, null, "ValueSet", (ValueSet)resource, -1);
28489    } else if (resource instanceof VerificationResult) {
28490      composeVerificationResult(parent, null, "VerificationResult", (VerificationResult)resource, -1);
28491    } else if (resource instanceof VisionPrescription) {
28492      composeVisionPrescription(parent, null, "VisionPrescription", (VisionPrescription)resource, -1);
28493      
28494    } else {
28495      throw new Error("Unhandled resource type "+resource.getClass().getName());
28496    }
28497  }
28498
28499  protected void composeType(Complex parent, String parentType, String name, DataType value, int index) {
28500    if (parent == null) {
28501      throw new Error("parent == null");
28502    } else if (parentType == null) {
28503      throw new Error("parentType == null");
28504    } else if (name == null) {
28505      throw new Error("name == null");
28506    } else if (value == null) {
28507      throw new Error("value == null");
28508    } else if (value instanceof DateType) {
28509      composeDate(parent, parentType, name, (DateType)value, index);
28510    } else if (value instanceof DateTimeType) {
28511      composeDateTime(parent, parentType, name, (DateTimeType)value, index);
28512    } else if (value instanceof CodeType) {
28513      composeCode(parent, parentType, name, (CodeType)value, index);
28514    } else if (value instanceof StringType) {
28515      composeString(parent, parentType, name, (StringType)value, index);
28516    } else if (value instanceof IntegerType) {
28517      composeInteger(parent, parentType, name, (IntegerType)value, index);
28518    } else if (value instanceof Integer64Type) {
28519      composeInteger64(parent, parentType, name, (Integer64Type)value, index);
28520    } else if (value instanceof OidType) {
28521      composeOid(parent, parentType, name, (OidType)value, index);
28522    } else if (value instanceof CanonicalType) {
28523      composeCanonical(parent, parentType, name, (CanonicalType)value, index);
28524    } else if (value instanceof UriType) {
28525      composeUri(parent, parentType, name, (UriType)value, index);
28526    } else if (value instanceof UuidType) {
28527      composeUuid(parent, parentType, name, (UuidType)value, index);
28528    } else if (value instanceof UrlType) {
28529      composeUrl(parent, parentType, name, (UrlType)value, index);
28530    } else if (value instanceof InstantType) {
28531      composeInstant(parent, parentType, name, (InstantType)value, index);
28532    } else if (value instanceof BooleanType) {
28533      composeBoolean(parent, parentType, name, (BooleanType)value, index);
28534    } else if (value instanceof Base64BinaryType) {
28535      composeBase64Binary(parent, parentType, name, (Base64BinaryType)value, index);
28536    } else if (value instanceof UnsignedIntType) {
28537      composeUnsignedInt(parent, parentType, name, (UnsignedIntType)value, index);
28538    } else if (value instanceof MarkdownType) {
28539      composeMarkdown(parent, parentType, name, (MarkdownType)value, index);
28540    } else if (value instanceof TimeType) {
28541      composeTime(parent, parentType, name, (TimeType)value, index);
28542    } else if (value instanceof IdType) {
28543      composeId(parent, parentType, name, (IdType)value, index);
28544    } else if (value instanceof PositiveIntType) {
28545      composePositiveInt(parent, parentType, name, (PositiveIntType)value, index);
28546    } else if (value instanceof DecimalType) {
28547      composeDecimal(parent, parentType, name, (DecimalType)value, index);
28548    } else if (value instanceof Address) {
28549      composeAddress(parent, parentType, name, (Address)value, index);
28550    } else if (value instanceof Age) {
28551      composeAge(parent, parentType, name, (Age)value, index);
28552    } else if (value instanceof Annotation) {
28553      composeAnnotation(parent, parentType, name, (Annotation)value, index);
28554    } else if (value instanceof Attachment) {
28555      composeAttachment(parent, parentType, name, (Attachment)value, index);
28556    } else if (value instanceof Availability) {
28557      composeAvailability(parent, parentType, name, (Availability)value, index);
28558    } else if (value instanceof CodeableConcept) {
28559      composeCodeableConcept(parent, parentType, name, (CodeableConcept)value, index);
28560    } else if (value instanceof CodeableReference) {
28561      composeCodeableReference(parent, parentType, name, (CodeableReference)value, index);
28562    } else if (value instanceof Coding) {
28563      composeCoding(parent, parentType, name, (Coding)value, index);
28564    } else if (value instanceof ContactDetail) {
28565      composeContactDetail(parent, parentType, name, (ContactDetail)value, index);
28566    } else if (value instanceof ContactPoint) {
28567      composeContactPoint(parent, parentType, name, (ContactPoint)value, index);
28568    } else if (value instanceof Contributor) {
28569      composeContributor(parent, parentType, name, (Contributor)value, index);
28570    } else if (value instanceof Count) {
28571      composeCount(parent, parentType, name, (Count)value, index);
28572    } else if (value instanceof DataRequirement) {
28573      composeDataRequirement(parent, parentType, name, (DataRequirement)value, index);
28574    } else if (value instanceof Distance) {
28575      composeDistance(parent, parentType, name, (Distance)value, index);
28576    } else if (value instanceof Dosage) {
28577      composeDosage(parent, parentType, name, (Dosage)value, index);
28578    } else if (value instanceof Duration) {
28579      composeDuration(parent, parentType, name, (Duration)value, index);
28580    } else if (value instanceof ElementDefinition) {
28581      composeElementDefinition(parent, parentType, name, (ElementDefinition)value, index);
28582    } else if (value instanceof Expression) {
28583      composeExpression(parent, parentType, name, (Expression)value, index);
28584    } else if (value instanceof ExtendedContactDetail) {
28585      composeExtendedContactDetail(parent, parentType, name, (ExtendedContactDetail)value, index);
28586    } else if (value instanceof Extension) {
28587      composeExtension(parent, parentType, name, (Extension)value, index);
28588    } else if (value instanceof HumanName) {
28589      composeHumanName(parent, parentType, name, (HumanName)value, index);
28590    } else if (value instanceof Identifier) {
28591      composeIdentifier(parent, parentType, name, (Identifier)value, index);
28592    } else if (value instanceof MarketingStatus) {
28593      composeMarketingStatus(parent, parentType, name, (MarketingStatus)value, index);
28594    } else if (value instanceof Meta) {
28595      composeMeta(parent, parentType, name, (Meta)value, index);
28596    } else if (value instanceof MonetaryComponent) {
28597      composeMonetaryComponent(parent, parentType, name, (MonetaryComponent)value, index);
28598    } else if (value instanceof Money) {
28599      composeMoney(parent, parentType, name, (Money)value, index);
28600    } else if (value instanceof Narrative) {
28601      composeNarrative(parent, parentType, name, (Narrative)value, index);
28602    } else if (value instanceof ParameterDefinition) {
28603      composeParameterDefinition(parent, parentType, name, (ParameterDefinition)value, index);
28604    } else if (value instanceof Period) {
28605      composePeriod(parent, parentType, name, (Period)value, index);
28606    } else if (value instanceof ProductShelfLife) {
28607      composeProductShelfLife(parent, parentType, name, (ProductShelfLife)value, index);
28608    } else if (value instanceof Quantity) {
28609      composeQuantity(parent, parentType, name, (Quantity)value, index);
28610    } else if (value instanceof Range) {
28611      composeRange(parent, parentType, name, (Range)value, index);
28612    } else if (value instanceof Ratio) {
28613      composeRatio(parent, parentType, name, (Ratio)value, index);
28614    } else if (value instanceof RatioRange) {
28615      composeRatioRange(parent, parentType, name, (RatioRange)value, index);
28616    } else if (value instanceof Reference) {
28617      composeReference(parent, parentType, name, (Reference)value, index);
28618    } else if (value instanceof RelatedArtifact) {
28619      composeRelatedArtifact(parent, parentType, name, (RelatedArtifact)value, index);
28620    } else if (value instanceof SampledData) {
28621      composeSampledData(parent, parentType, name, (SampledData)value, index);
28622    } else if (value instanceof Signature) {
28623      composeSignature(parent, parentType, name, (Signature)value, index);
28624    } else if (value instanceof Timing) {
28625      composeTiming(parent, parentType, name, (Timing)value, index);
28626    } else if (value instanceof TriggerDefinition) {
28627      composeTriggerDefinition(parent, parentType, name, (TriggerDefinition)value, index);
28628    } else if (value instanceof UsageContext) {
28629      composeUsageContext(parent, parentType, name, (UsageContext)value, index);
28630    } else if (value instanceof VirtualServiceDetail) {
28631      composeVirtualServiceDetail(parent, parentType, name, (VirtualServiceDetail)value, index);
28632      
28633    } else {
28634      throw new Error("Unhandled type");
28635    }
28636  }
28637
28638}