001package org.hl7.fhir.r5.formats;
002
003
004// generated
005
006/*
007  Copyright (c) 2011+, HL7, Inc.
008  All rights reserved.
009  
010  Redistribution and use in source and binary forms, with or without modification, \
011  are permitted provided that the following conditions are met:
012  
013   * Redistributions of source code must retain the above copyright notice, this \
014     list of conditions and the following disclaimer.
015   * Redistributions in binary form must reproduce the above copyright notice, \
016     this list of conditions and the following disclaimer in the documentation \
017     and/or other materials provided with the distribution.
018   * Neither the name of HL7 nor the names of its contributors may be used to 
019     endorse or promote products derived from this software without specific 
020     prior written permission.
021  
022  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND \
023  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED \
024  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \
025  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, \
026  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT \
027  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR \
028  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, \
029  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \
030  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \
031  POSSIBILITY OF SUCH DAMAGE.
032  */
033
034// Generated on Tue, Dec 21, 2021 05:44+1100 for FHIR v5.0.0-snapshot1
035
036
037
038import org.hl7.fhir.r5.model.*;
039import org.hl7.fhir.r5.model.StringType;
040import org.hl7.fhir.utilities.Utilities;
041import org.hl7.fhir.exceptions.FHIRFormatError;
042import org.hl7.fhir.exceptions.FHIRException;
043import org.hl7.fhir.utilities.turtle.Turtle.*;
044import java.io.IOException;
045
046public class RdfParser extends RdfParserBase {
047
048  public RdfParser() {
049    super();
050  }
051
052  public RdfParser(boolean allowUnknownContent) {
053    super();
054    setAllowUnknownContent(allowUnknownContent);
055  }
056
057  private void composeEnum(Complex parent, String parentType, String name, Enumeration<? extends Enum> value, int index) {
058    if (value == null)
059      return;
060    Complex t = parent.predicate("fhir:"+parentType+"."+name);
061    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
062    composeElement(t, parentType, name, value, index);
063    decorateCode(t, value);
064  }
065
066
067  protected void composeDate(Complex parent, String parentType, String name, DateType value, int index) {
068    if (value == null)
069      return;
070    Complex t = parent.predicate("fhir:"+parentType+"."+name);
071    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
072    composeElement(t, parentType, name, value, index);
073  }
074
075  protected void composeDateTime(Complex parent, String parentType, String name, DateTimeType value, int index) {
076    if (value == null)
077      return;
078    Complex t = parent.predicate("fhir:"+parentType+"."+name);
079    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
080    composeElement(t, parentType, name, value, index);
081  }
082
083  protected void composeCode(Complex parent, String parentType, String name, CodeType value, int index) {
084    if (value == null)
085      return;
086    Complex t = parent.predicate("fhir:"+parentType+"."+name);
087    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
088    composeElement(t, parentType, name, value, index);
089    decorateCode(t, value);
090  }
091
092  protected void composeString(Complex parent, String parentType, String name, StringType value, int index) {
093    if (value == null)
094      return;
095    Complex t = parent.predicate("fhir:"+parentType+"."+name);
096    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
097    composeElement(t, parentType, name, value, index);
098  }
099
100  protected void composeInteger(Complex parent, String parentType, String name, IntegerType value, int index) {
101    if (value == null)
102      return;
103    Complex t = parent.predicate("fhir:"+parentType+"."+name);
104    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
105    composeElement(t, parentType, name, value, index);
106  }
107
108  protected void composeInteger64(Complex parent, String parentType, String name, Integer64Type value, int index) {
109    if (value == null)
110      return;
111    Complex t = parent.predicate("fhir:"+parentType+"."+name);
112    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
113    composeElement(t, parentType, name, value, index);
114  }
115
116  protected void composeOid(Complex parent, String parentType, String name, OidType value, int index) {
117    if (value == null)
118      return;
119    Complex t = parent.predicate("fhir:"+parentType+"."+name);
120    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
121    composeElement(t, parentType, name, value, index);
122  }
123
124  protected void composeCanonical(Complex parent, String parentType, String name, CanonicalType value, int index) {
125    if (value == null)
126      return;
127    Complex t = parent.predicate("fhir:"+parentType+"."+name);
128    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
129    composeElement(t, parentType, name, value, index);
130  }
131
132  protected void composeUri(Complex parent, String parentType, String name, UriType value, int index) {
133    if (value == null)
134      return;
135    Complex t = parent.predicate("fhir:"+parentType+"."+name);
136    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
137    composeElement(t, parentType, name, value, index);
138  }
139
140  protected void composeUuid(Complex parent, String parentType, String name, UuidType value, int index) {
141    if (value == null)
142      return;
143    Complex t = parent.predicate("fhir:"+parentType+"."+name);
144    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
145    composeElement(t, parentType, name, value, index);
146  }
147
148  protected void composeUrl(Complex parent, String parentType, String name, UrlType value, int index) {
149    if (value == null)
150      return;
151    Complex t = parent.predicate("fhir:"+parentType+"."+name);
152    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
153    composeElement(t, parentType, name, value, index);
154  }
155
156  protected void composeInstant(Complex parent, String parentType, String name, InstantType value, int index) {
157    if (value == null)
158      return;
159    Complex t = parent.predicate("fhir:"+parentType+"."+name);
160    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
161    composeElement(t, parentType, name, value, index);
162  }
163
164  protected void composeBoolean(Complex parent, String parentType, String name, BooleanType value, int index) {
165    if (value == null)
166      return;
167    Complex t = parent.predicate("fhir:"+parentType+"."+name);
168    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
169    composeElement(t, parentType, name, value, index);
170  }
171
172  protected void composeBase64Binary(Complex parent, String parentType, String name, Base64BinaryType value, int index) {
173    if (value == null)
174      return;
175    Complex t = parent.predicate("fhir:"+parentType+"."+name);
176    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
177    composeElement(t, parentType, name, value, index);
178  }
179
180  protected void composeUnsignedInt(Complex parent, String parentType, String name, UnsignedIntType value, int index) {
181    if (value == null)
182      return;
183    Complex t = parent.predicate("fhir:"+parentType+"."+name);
184    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
185    composeElement(t, parentType, name, value, index);
186  }
187
188  protected void composeMarkdown(Complex parent, String parentType, String name, MarkdownType value, int index) {
189    if (value == null)
190      return;
191    Complex t = parent.predicate("fhir:"+parentType+"."+name);
192    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
193    composeElement(t, parentType, name, value, index);
194  }
195
196  protected void composeTime(Complex parent, String parentType, String name, TimeType value, int index) {
197    if (value == null)
198      return;
199    Complex t = parent.predicate("fhir:"+parentType+"."+name);
200    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
201    composeElement(t, parentType, name, value, index);
202  }
203
204  protected void composeId(Complex parent, String parentType, String name, IdType value, int index) {
205    if (value == null)
206      return;
207    Complex t = parent.predicate("fhir:"+parentType+"."+name);
208    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
209    composeElement(t, parentType, name, value, index);
210  }
211
212  protected void composePositiveInt(Complex parent, String parentType, String name, PositiveIntType value, int index) {
213    if (value == null)
214      return;
215    Complex t = parent.predicate("fhir:"+parentType+"."+name);
216    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
217    composeElement(t, parentType, name, value, index);
218  }
219
220  protected void composeDecimal(Complex parent, String parentType, String name, DecimalType value, int index) {
221    if (value == null)
222      return;
223    Complex t = parent.predicate("fhir:"+parentType+"."+name);
224    t.predicate("fhir:value", ttlLiteral(value.asStringValue()));
225    composeElement(t, parentType, name, value, index);
226  }
227
228  protected void composeBackboneElement(Complex t, String parentType, String name, BackboneElement element, int index) {
229    composeElement(t, parentType, name, element, index);
230    for (int i = 0; i < element.getModifierExtension().size(); i++) {
231      composeExtension(t, "BackboneElement", "modifierExtension", element.getModifierExtension().get(i), i);
232    }
233  }
234
235  protected void composeBackboneType(Complex t, String parentType, String name, BackboneType element, int index) {
236    composeDataType(t, parentType, name, element, index);
237    for (int i = 0; i < element.getModifierExtension().size(); i++) {
238      composeExtension(t, "BackboneType", "modifierExtension", element.getModifierExtension().get(i), i);
239    }
240  }
241
242  protected void composeDataType(Complex t, String parentType, String name, DataType element, int index) {
243    composeElement(t, parentType, name, element, index);
244  }
245
246  protected void composeElement(Complex t, String parentType, String name, Element element, int index) {
247    composeBase(t, parentType, name, element, index);
248    if (element.hasIdElement()) {
249      composeString(t, "Element", "id", element.getIdElement(), -1);
250    }
251    for (int i = 0; i < element.getExtension().size(); i++) {
252      composeExtension(t, "Element", "extension", element.getExtension().get(i), i);
253    }
254  }
255
256  protected void composeAddress(Complex parent, String parentType, String name, Address element, int index) {
257    if (element == null) 
258      return;
259    Complex t;
260    if (Utilities.noString(parentType))
261      t = parent;
262    else {
263      t = parent.predicate("fhir:"+parentType+'.'+name);
264    }
265    composeDataType(t, "Address", name, element, index);
266    if (element.hasUseElement()) {
267      composeEnum(t, "Address", "use", element.getUseElement(), -1);
268    }
269    if (element.hasTypeElement()) {
270      composeEnum(t, "Address", "type", element.getTypeElement(), -1);
271    }
272    if (element.hasTextElement()) {
273      composeString(t, "Address", "text", element.getTextElement(), -1);
274    }
275    for (int i = 0; i < element.getLine().size(); i++) {
276      composeString(t, "Address", "line", element.getLine().get(i), i);
277    }
278    if (element.hasCityElement()) {
279      composeString(t, "Address", "city", element.getCityElement(), -1);
280    }
281    if (element.hasDistrictElement()) {
282      composeString(t, "Address", "district", element.getDistrictElement(), -1);
283    }
284    if (element.hasStateElement()) {
285      composeString(t, "Address", "state", element.getStateElement(), -1);
286    }
287    if (element.hasPostalCodeElement()) {
288      composeString(t, "Address", "postalCode", element.getPostalCodeElement(), -1);
289    }
290    if (element.hasCountryElement()) {
291      composeString(t, "Address", "country", element.getCountryElement(), -1);
292    }
293    if (element.hasPeriod()) {
294      composePeriod(t, "Address", "period", element.getPeriod(), -1);
295    }
296  }
297
298  protected void composeAge(Complex parent, String parentType, String name, Age element, int index) {
299    if (element == null) 
300      return;
301    Complex t;
302    if (Utilities.noString(parentType))
303      t = parent;
304    else {
305      t = parent.predicate("fhir:"+parentType+'.'+name);
306    }
307    composeQuantity(t, "Age", name, element, index);
308  }
309
310  protected void composeAnnotation(Complex parent, String parentType, String name, Annotation element, int index) {
311    if (element == null) 
312      return;
313    Complex t;
314    if (Utilities.noString(parentType))
315      t = parent;
316    else {
317      t = parent.predicate("fhir:"+parentType+'.'+name);
318    }
319    composeDataType(t, "Annotation", name, element, index);
320    if (element.hasAuthor()) {
321      composeType(t, "Annotation", "author", element.getAuthor(), -1);
322    }
323    if (element.hasTimeElement()) {
324      composeDateTime(t, "Annotation", "time", element.getTimeElement(), -1);
325    }
326    if (element.hasTextElement()) {
327      composeMarkdown(t, "Annotation", "text", element.getTextElement(), -1);
328    }
329  }
330
331  protected void composeAttachment(Complex parent, String parentType, String name, Attachment element, int index) {
332    if (element == null) 
333      return;
334    Complex t;
335    if (Utilities.noString(parentType))
336      t = parent;
337    else {
338      t = parent.predicate("fhir:"+parentType+'.'+name);
339    }
340    composeDataType(t, "Attachment", name, element, index);
341    if (element.hasContentTypeElement()) {
342      composeCode(t, "Attachment", "contentType", element.getContentTypeElement(), -1);
343    }
344    if (element.hasLanguageElement()) {
345      composeCode(t, "Attachment", "language", element.getLanguageElement(), -1);
346    }
347    if (element.hasDataElement()) {
348      composeBase64Binary(t, "Attachment", "data", element.getDataElement(), -1);
349    }
350    if (element.hasUrlElement()) {
351      composeUrl(t, "Attachment", "url", element.getUrlElement(), -1);
352    }
353    if (element.hasSizeElement()) {
354      composeInteger64(t, "Attachment", "size", element.getSizeElement(), -1);
355    }
356    if (element.hasHashElement()) {
357      composeBase64Binary(t, "Attachment", "hash", element.getHashElement(), -1);
358    }
359    if (element.hasTitleElement()) {
360      composeString(t, "Attachment", "title", element.getTitleElement(), -1);
361    }
362    if (element.hasCreationElement()) {
363      composeDateTime(t, "Attachment", "creation", element.getCreationElement(), -1);
364    }
365    if (element.hasHeightElement()) {
366      composePositiveInt(t, "Attachment", "height", element.getHeightElement(), -1);
367    }
368    if (element.hasWidthElement()) {
369      composePositiveInt(t, "Attachment", "width", element.getWidthElement(), -1);
370    }
371    if (element.hasFramesElement()) {
372      composePositiveInt(t, "Attachment", "frames", element.getFramesElement(), -1);
373    }
374    if (element.hasDurationElement()) {
375      composeDecimal(t, "Attachment", "duration", element.getDurationElement(), -1);
376    }
377    if (element.hasPagesElement()) {
378      composePositiveInt(t, "Attachment", "pages", element.getPagesElement(), -1);
379    }
380  }
381
382  protected void composeCodeableConcept(Complex parent, String parentType, String name, CodeableConcept element, int index) {
383    if (element == null) 
384      return;
385    Complex t;
386    if (Utilities.noString(parentType))
387      t = parent;
388    else {
389      t = parent.predicate("fhir:"+parentType+'.'+name);
390    }
391    composeDataType(t, "CodeableConcept", name, element, index);
392    decorateCodeableConcept(t, element);
393    for (int i = 0; i < element.getCoding().size(); i++) {
394      composeCoding(t, "CodeableConcept", "coding", element.getCoding().get(i), i);
395    }
396    if (element.hasTextElement()) {
397      composeString(t, "CodeableConcept", "text", element.getTextElement(), -1);
398    }
399  }
400
401  protected void composeCodeableReference(Complex parent, String parentType, String name, CodeableReference element, int index) {
402    if (element == null) 
403      return;
404    Complex t;
405    if (Utilities.noString(parentType))
406      t = parent;
407    else {
408      t = parent.predicate("fhir:"+parentType+'.'+name);
409    }
410    composeDataType(t, "CodeableReference", name, element, index);
411    if (element.hasConcept()) {
412      composeCodeableConcept(t, "CodeableReference", "concept", element.getConcept(), -1);
413    }
414    if (element.hasReference()) {
415      composeReference(t, "CodeableReference", "reference", element.getReference(), -1);
416    }
417  }
418
419  protected void composeCoding(Complex parent, String parentType, String name, Coding element, int index) {
420    if (element == null) 
421      return;
422    Complex t;
423    if (Utilities.noString(parentType))
424      t = parent;
425    else {
426      t = parent.predicate("fhir:"+parentType+'.'+name);
427    }
428    composeDataType(t, "Coding", name, element, index);
429    decorateCoding(t, element);
430    if (element.hasSystemElement()) {
431      composeUri(t, "Coding", "system", element.getSystemElement(), -1);
432    }
433    if (element.hasVersionElement()) {
434      composeString(t, "Coding", "version", element.getVersionElement(), -1);
435    }
436    if (element.hasCodeElement()) {
437      composeCode(t, "Coding", "code", element.getCodeElement(), -1);
438    }
439    if (element.hasDisplayElement()) {
440      composeString(t, "Coding", "display", element.getDisplayElement(), -1);
441    }
442    if (element.hasUserSelectedElement()) {
443      composeBoolean(t, "Coding", "userSelected", element.getUserSelectedElement(), -1);
444    }
445  }
446
447  protected void composeContactDetail(Complex parent, String parentType, String name, ContactDetail element, int index) {
448    if (element == null) 
449      return;
450    Complex t;
451    if (Utilities.noString(parentType))
452      t = parent;
453    else {
454      t = parent.predicate("fhir:"+parentType+'.'+name);
455    }
456    composeDataType(t, "ContactDetail", name, element, index);
457    if (element.hasNameElement()) {
458      composeString(t, "ContactDetail", "name", element.getNameElement(), -1);
459    }
460    for (int i = 0; i < element.getTelecom().size(); i++) {
461      composeContactPoint(t, "ContactDetail", "telecom", element.getTelecom().get(i), i);
462    }
463  }
464
465  protected void composeContactPoint(Complex parent, String parentType, String name, ContactPoint element, int index) {
466    if (element == null) 
467      return;
468    Complex t;
469    if (Utilities.noString(parentType))
470      t = parent;
471    else {
472      t = parent.predicate("fhir:"+parentType+'.'+name);
473    }
474    composeDataType(t, "ContactPoint", name, element, index);
475    if (element.hasSystemElement()) {
476      composeEnum(t, "ContactPoint", "system", element.getSystemElement(), -1);
477    }
478    if (element.hasValueElement()) {
479      composeString(t, "ContactPoint", "value", element.getValueElement(), -1);
480    }
481    if (element.hasUseElement()) {
482      composeEnum(t, "ContactPoint", "use", element.getUseElement(), -1);
483    }
484    if (element.hasRankElement()) {
485      composePositiveInt(t, "ContactPoint", "rank", element.getRankElement(), -1);
486    }
487    if (element.hasPeriod()) {
488      composePeriod(t, "ContactPoint", "period", element.getPeriod(), -1);
489    }
490  }
491
492  protected void composeContributor(Complex parent, String parentType, String name, Contributor element, int index) {
493    if (element == null) 
494      return;
495    Complex t;
496    if (Utilities.noString(parentType))
497      t = parent;
498    else {
499      t = parent.predicate("fhir:"+parentType+'.'+name);
500    }
501    composeDataType(t, "Contributor", name, element, index);
502    if (element.hasTypeElement()) {
503      composeEnum(t, "Contributor", "type", element.getTypeElement(), -1);
504    }
505    if (element.hasNameElement()) {
506      composeString(t, "Contributor", "name", element.getNameElement(), -1);
507    }
508    for (int i = 0; i < element.getContact().size(); i++) {
509      composeContactDetail(t, "Contributor", "contact", element.getContact().get(i), i);
510    }
511  }
512
513  protected void composeCount(Complex parent, String parentType, String name, Count element, int index) {
514    if (element == null) 
515      return;
516    Complex t;
517    if (Utilities.noString(parentType))
518      t = parent;
519    else {
520      t = parent.predicate("fhir:"+parentType+'.'+name);
521    }
522    composeQuantity(t, "Count", name, element, index);
523  }
524
525  protected void composeDataRequirement(Complex parent, String parentType, String name, DataRequirement element, int index) {
526    if (element == null) 
527      return;
528    Complex t;
529    if (Utilities.noString(parentType))
530      t = parent;
531    else {
532      t = parent.predicate("fhir:"+parentType+'.'+name);
533    }
534    composeDataType(t, "DataRequirement", name, element, index);
535    if (element.hasTypeElement()) {
536      composeEnum(t, "DataRequirement", "type", element.getTypeElement(), -1);
537    }
538    for (int i = 0; i < element.getProfile().size(); i++) {
539      composeCanonical(t, "DataRequirement", "profile", element.getProfile().get(i), i);
540    }
541    if (element.hasSubject()) {
542      composeType(t, "DataRequirement", "subject", element.getSubject(), -1);
543    }
544    for (int i = 0; i < element.getMustSupport().size(); i++) {
545      composeString(t, "DataRequirement", "mustSupport", element.getMustSupport().get(i), i);
546    }
547    for (int i = 0; i < element.getCodeFilter().size(); i++) {
548      composeDataRequirementCodeFilterComponent(t, "DataRequirement", "codeFilter", element.getCodeFilter().get(i), i);
549    }
550    for (int i = 0; i < element.getDateFilter().size(); i++) {
551      composeDataRequirementDateFilterComponent(t, "DataRequirement", "dateFilter", element.getDateFilter().get(i), i);
552    }
553    if (element.hasLimitElement()) {
554      composePositiveInt(t, "DataRequirement", "limit", element.getLimitElement(), -1);
555    }
556    for (int i = 0; i < element.getSort().size(); i++) {
557      composeDataRequirementSortComponent(t, "DataRequirement", "sort", element.getSort().get(i), i);
558    }
559  }
560
561  protected void composeDataRequirementCodeFilterComponent(Complex parent, String parentType, String name, DataRequirement.DataRequirementCodeFilterComponent element, int index) {
562    if (element == null) 
563      return;
564    Complex t;
565    if (Utilities.noString(parentType))
566      t = parent;
567    else {
568      t = parent.predicate("fhir:"+parentType+'.'+name);
569    }
570    composeElement(t, "codeFilter", name, element, index);
571    if (element.hasPathElement()) {
572      composeString(t, "DataRequirementCodeFilterComponent", "path", element.getPathElement(), -1);
573    }
574    if (element.hasSearchParamElement()) {
575      composeString(t, "DataRequirementCodeFilterComponent", "searchParam", element.getSearchParamElement(), -1);
576    }
577    if (element.hasValueSetElement()) {
578      composeCanonical(t, "DataRequirementCodeFilterComponent", "valueSet", element.getValueSetElement(), -1);
579    }
580    for (int i = 0; i < element.getCode().size(); i++) {
581      composeCoding(t, "DataRequirementCodeFilterComponent", "code", element.getCode().get(i), i);
582    }
583  }
584
585  protected void composeDataRequirementDateFilterComponent(Complex parent, String parentType, String name, DataRequirement.DataRequirementDateFilterComponent element, int index) {
586    if (element == null) 
587      return;
588    Complex t;
589    if (Utilities.noString(parentType))
590      t = parent;
591    else {
592      t = parent.predicate("fhir:"+parentType+'.'+name);
593    }
594    composeElement(t, "dateFilter", name, element, index);
595    if (element.hasPathElement()) {
596      composeString(t, "DataRequirementDateFilterComponent", "path", element.getPathElement(), -1);
597    }
598    if (element.hasSearchParamElement()) {
599      composeString(t, "DataRequirementDateFilterComponent", "searchParam", element.getSearchParamElement(), -1);
600    }
601    if (element.hasValue()) {
602      composeType(t, "DataRequirementDateFilterComponent", "value", element.getValue(), -1);
603    }
604  }
605
606  protected void composeDataRequirementSortComponent(Complex parent, String parentType, String name, DataRequirement.DataRequirementSortComponent element, int index) {
607    if (element == null) 
608      return;
609    Complex t;
610    if (Utilities.noString(parentType))
611      t = parent;
612    else {
613      t = parent.predicate("fhir:"+parentType+'.'+name);
614    }
615    composeElement(t, "sort", name, element, index);
616    if (element.hasPathElement()) {
617      composeString(t, "DataRequirementSortComponent", "path", element.getPathElement(), -1);
618    }
619    if (element.hasDirectionElement()) {
620      composeEnum(t, "DataRequirementSortComponent", "direction", element.getDirectionElement(), -1);
621    }
622  }
623
624  protected void composeDistance(Complex parent, String parentType, String name, Distance element, int index) {
625    if (element == null) 
626      return;
627    Complex t;
628    if (Utilities.noString(parentType))
629      t = parent;
630    else {
631      t = parent.predicate("fhir:"+parentType+'.'+name);
632    }
633    composeQuantity(t, "Distance", name, element, index);
634  }
635
636  protected void composeDosage(Complex parent, String parentType, String name, Dosage element, int index) {
637    if (element == null) 
638      return;
639    Complex t;
640    if (Utilities.noString(parentType))
641      t = parent;
642    else {
643      t = parent.predicate("fhir:"+parentType+'.'+name);
644    }
645    composeBackboneType(t, "Dosage", name, element, index);
646    if (element.hasSequenceElement()) {
647      composeInteger(t, "Dosage", "sequence", element.getSequenceElement(), -1);
648    }
649    if (element.hasTextElement()) {
650      composeString(t, "Dosage", "text", element.getTextElement(), -1);
651    }
652    for (int i = 0; i < element.getAdditionalInstruction().size(); i++) {
653      composeCodeableConcept(t, "Dosage", "additionalInstruction", element.getAdditionalInstruction().get(i), i);
654    }
655    if (element.hasPatientInstructionElement()) {
656      composeString(t, "Dosage", "patientInstruction", element.getPatientInstructionElement(), -1);
657    }
658    if (element.hasTiming()) {
659      composeTiming(t, "Dosage", "timing", element.getTiming(), -1);
660    }
661    if (element.hasAsNeeded()) {
662      composeType(t, "Dosage", "asNeeded", element.getAsNeeded(), -1);
663    }
664    if (element.hasSite()) {
665      composeCodeableConcept(t, "Dosage", "site", element.getSite(), -1);
666    }
667    if (element.hasRoute()) {
668      composeCodeableConcept(t, "Dosage", "route", element.getRoute(), -1);
669    }
670    if (element.hasMethod()) {
671      composeCodeableConcept(t, "Dosage", "method", element.getMethod(), -1);
672    }
673    for (int i = 0; i < element.getDoseAndRate().size(); i++) {
674      composeDosageDoseAndRateComponent(t, "Dosage", "doseAndRate", element.getDoseAndRate().get(i), i);
675    }
676    if (element.hasMaxDosePerPeriod()) {
677      composeRatio(t, "Dosage", "maxDosePerPeriod", element.getMaxDosePerPeriod(), -1);
678    }
679    if (element.hasMaxDosePerAdministration()) {
680      composeQuantity(t, "Dosage", "maxDosePerAdministration", element.getMaxDosePerAdministration(), -1);
681    }
682    if (element.hasMaxDosePerLifetime()) {
683      composeQuantity(t, "Dosage", "maxDosePerLifetime", element.getMaxDosePerLifetime(), -1);
684    }
685  }
686
687  protected void composeDosageDoseAndRateComponent(Complex parent, String parentType, String name, Dosage.DosageDoseAndRateComponent element, int index) {
688    if (element == null) 
689      return;
690    Complex t;
691    if (Utilities.noString(parentType))
692      t = parent;
693    else {
694      t = parent.predicate("fhir:"+parentType+'.'+name);
695    }
696    composeElement(t, "doseAndRate", name, element, index);
697    if (element.hasType()) {
698      composeCodeableConcept(t, "DosageDoseAndRateComponent", "type", element.getType(), -1);
699    }
700    if (element.hasDose()) {
701      composeType(t, "DosageDoseAndRateComponent", "dose", element.getDose(), -1);
702    }
703    if (element.hasRate()) {
704      composeType(t, "DosageDoseAndRateComponent", "rate", element.getRate(), -1);
705    }
706  }
707
708  protected void composeDuration(Complex parent, String parentType, String name, Duration element, int index) {
709    if (element == null) 
710      return;
711    Complex t;
712    if (Utilities.noString(parentType))
713      t = parent;
714    else {
715      t = parent.predicate("fhir:"+parentType+'.'+name);
716    }
717    composeQuantity(t, "Duration", name, element, index);
718  }
719
720  protected void composeElementDefinition(Complex parent, String parentType, String name, ElementDefinition element, int index) {
721    if (element == null) 
722      return;
723    Complex t;
724    if (Utilities.noString(parentType))
725      t = parent;
726    else {
727      t = parent.predicate("fhir:"+parentType+'.'+name);
728    }
729    composeBackboneType(t, "ElementDefinition", name, element, index);
730    if (element.hasPathElement()) {
731      composeString(t, "ElementDefinition", "path", element.getPathElement(), -1);
732    }
733    for (int i = 0; i < element.getRepresentation().size(); i++) {
734      composeEnum(t, "ElementDefinition", "representation", element.getRepresentation().get(i), i);
735    }
736    if (element.hasSliceNameElement()) {
737      composeString(t, "ElementDefinition", "sliceName", element.getSliceNameElement(), -1);
738    }
739    if (element.hasSliceIsConstrainingElement()) {
740      composeBoolean(t, "ElementDefinition", "sliceIsConstraining", element.getSliceIsConstrainingElement(), -1);
741    }
742    if (element.hasLabelElement()) {
743      composeString(t, "ElementDefinition", "label", element.getLabelElement(), -1);
744    }
745    for (int i = 0; i < element.getCode().size(); i++) {
746      composeCoding(t, "ElementDefinition", "code", element.getCode().get(i), i);
747    }
748    if (element.hasSlicing()) {
749      composeElementDefinitionSlicingComponent(t, "ElementDefinition", "slicing", element.getSlicing(), -1);
750    }
751    if (element.hasShortElement()) {
752      composeString(t, "ElementDefinition", "short", element.getShortElement(), -1);
753    }
754    if (element.hasDefinitionElement()) {
755      composeMarkdown(t, "ElementDefinition", "definition", element.getDefinitionElement(), -1);
756    }
757    if (element.hasCommentElement()) {
758      composeMarkdown(t, "ElementDefinition", "comment", element.getCommentElement(), -1);
759    }
760    if (element.hasRequirementsElement()) {
761      composeMarkdown(t, "ElementDefinition", "requirements", element.getRequirementsElement(), -1);
762    }
763    for (int i = 0; i < element.getAlias().size(); i++) {
764      composeString(t, "ElementDefinition", "alias", element.getAlias().get(i), i);
765    }
766    if (element.hasMinElement()) {
767      composeUnsignedInt(t, "ElementDefinition", "min", element.getMinElement(), -1);
768    }
769    if (element.hasMaxElement()) {
770      composeString(t, "ElementDefinition", "max", element.getMaxElement(), -1);
771    }
772    if (element.hasBase()) {
773      composeElementDefinitionBaseComponent(t, "ElementDefinition", "base", element.getBase(), -1);
774    }
775    if (element.hasContentReferenceElement()) {
776      composeUri(t, "ElementDefinition", "contentReference", element.getContentReferenceElement(), -1);
777    }
778    for (int i = 0; i < element.getType().size(); i++) {
779      composeElementDefinitionTypeRefComponent(t, "ElementDefinition", "type", element.getType().get(i), i);
780    }
781    if (element.hasDefaultValue()) {
782      composeType(t, "ElementDefinition", "defaultValue", element.getDefaultValue(), -1);
783    }
784    if (element.hasMeaningWhenMissingElement()) {
785      composeMarkdown(t, "ElementDefinition", "meaningWhenMissing", element.getMeaningWhenMissingElement(), -1);
786    }
787    if (element.hasOrderMeaningElement()) {
788      composeString(t, "ElementDefinition", "orderMeaning", element.getOrderMeaningElement(), -1);
789    }
790    if (element.hasFixed()) {
791      composeType(t, "ElementDefinition", "fixed", element.getFixed(), -1);
792    }
793    if (element.hasPattern()) {
794      composeType(t, "ElementDefinition", "pattern", element.getPattern(), -1);
795    }
796    for (int i = 0; i < element.getExample().size(); i++) {
797      composeElementDefinitionExampleComponent(t, "ElementDefinition", "example", element.getExample().get(i), i);
798    }
799    if (element.hasMinValue()) {
800      composeType(t, "ElementDefinition", "minValue", element.getMinValue(), -1);
801    }
802    if (element.hasMaxValue()) {
803      composeType(t, "ElementDefinition", "maxValue", element.getMaxValue(), -1);
804    }
805    if (element.hasMaxLengthElement()) {
806      composeInteger(t, "ElementDefinition", "maxLength", element.getMaxLengthElement(), -1);
807    }
808    for (int i = 0; i < element.getCondition().size(); i++) {
809      composeId(t, "ElementDefinition", "condition", element.getCondition().get(i), i);
810    }
811    for (int i = 0; i < element.getConstraint().size(); i++) {
812      composeElementDefinitionConstraintComponent(t, "ElementDefinition", "constraint", element.getConstraint().get(i), i);
813    }
814    if (element.hasMustSupportElement()) {
815      composeBoolean(t, "ElementDefinition", "mustSupport", element.getMustSupportElement(), -1);
816    }
817    if (element.hasIsModifierElement()) {
818      composeBoolean(t, "ElementDefinition", "isModifier", element.getIsModifierElement(), -1);
819    }
820    if (element.hasIsModifierReasonElement()) {
821      composeString(t, "ElementDefinition", "isModifierReason", element.getIsModifierReasonElement(), -1);
822    }
823    if (element.hasIsSummaryElement()) {
824      composeBoolean(t, "ElementDefinition", "isSummary", element.getIsSummaryElement(), -1);
825    }
826    if (element.hasBinding()) {
827      composeElementDefinitionBindingComponent(t, "ElementDefinition", "binding", element.getBinding(), -1);
828    }
829    for (int i = 0; i < element.getMapping().size(); i++) {
830      composeElementDefinitionMappingComponent(t, "ElementDefinition", "mapping", element.getMapping().get(i), i);
831    }
832  }
833
834  protected void composeElementDefinitionSlicingComponent(Complex parent, String parentType, String name, ElementDefinition.ElementDefinitionSlicingComponent element, int index) {
835    if (element == null) 
836      return;
837    Complex t;
838    if (Utilities.noString(parentType))
839      t = parent;
840    else {
841      t = parent.predicate("fhir:"+parentType+'.'+name);
842    }
843    composeElement(t, "slicing", name, element, index);
844    for (int i = 0; i < element.getDiscriminator().size(); i++) {
845      composeElementDefinitionSlicingDiscriminatorComponent(t, "ElementDefinitionSlicingComponent", "discriminator", element.getDiscriminator().get(i), i);
846    }
847    if (element.hasDescriptionElement()) {
848      composeString(t, "ElementDefinitionSlicingComponent", "description", element.getDescriptionElement(), -1);
849    }
850    if (element.hasOrderedElement()) {
851      composeBoolean(t, "ElementDefinitionSlicingComponent", "ordered", element.getOrderedElement(), -1);
852    }
853    if (element.hasRulesElement()) {
854      composeEnum(t, "ElementDefinitionSlicingComponent", "rules", element.getRulesElement(), -1);
855    }
856  }
857
858  protected void composeElementDefinitionSlicingDiscriminatorComponent(Complex parent, String parentType, String name, ElementDefinition.ElementDefinitionSlicingDiscriminatorComponent element, int index) {
859    if (element == null) 
860      return;
861    Complex t;
862    if (Utilities.noString(parentType))
863      t = parent;
864    else {
865      t = parent.predicate("fhir:"+parentType+'.'+name);
866    }
867    composeElement(t, "discriminator", name, element, index);
868    if (element.hasTypeElement()) {
869      composeEnum(t, "ElementDefinitionSlicingDiscriminatorComponent", "type", element.getTypeElement(), -1);
870    }
871    if (element.hasPathElement()) {
872      composeString(t, "ElementDefinitionSlicingDiscriminatorComponent", "path", element.getPathElement(), -1);
873    }
874  }
875
876  protected void composeElementDefinitionBaseComponent(Complex parent, String parentType, String name, ElementDefinition.ElementDefinitionBaseComponent element, int index) {
877    if (element == null) 
878      return;
879    Complex t;
880    if (Utilities.noString(parentType))
881      t = parent;
882    else {
883      t = parent.predicate("fhir:"+parentType+'.'+name);
884    }
885    composeElement(t, "base", name, element, index);
886    if (element.hasPathElement()) {
887      composeString(t, "ElementDefinitionBaseComponent", "path", element.getPathElement(), -1);
888    }
889    if (element.hasMinElement()) {
890      composeUnsignedInt(t, "ElementDefinitionBaseComponent", "min", element.getMinElement(), -1);
891    }
892    if (element.hasMaxElement()) {
893      composeString(t, "ElementDefinitionBaseComponent", "max", element.getMaxElement(), -1);
894    }
895  }
896
897  protected void composeElementDefinitionTypeRefComponent(Complex parent, String parentType, String name, ElementDefinition.TypeRefComponent element, int index) {
898    if (element == null) 
899      return;
900    Complex t;
901    if (Utilities.noString(parentType))
902      t = parent;
903    else {
904      t = parent.predicate("fhir:"+parentType+'.'+name);
905    }
906    composeElement(t, "type", name, element, index);
907    if (element.hasCodeElement()) {
908      composeUri(t, "TypeRefComponent", "code", element.getCodeElement(), -1);
909    }
910    for (int i = 0; i < element.getProfile().size(); i++) {
911      composeCanonical(t, "TypeRefComponent", "profile", element.getProfile().get(i), i);
912    }
913    for (int i = 0; i < element.getTargetProfile().size(); i++) {
914      composeCanonical(t, "TypeRefComponent", "targetProfile", element.getTargetProfile().get(i), i);
915    }
916    for (int i = 0; i < element.getAggregation().size(); i++) {
917      composeEnum(t, "TypeRefComponent", "aggregation", element.getAggregation().get(i), i);
918    }
919    if (element.hasVersioningElement()) {
920      composeEnum(t, "TypeRefComponent", "versioning", element.getVersioningElement(), -1);
921    }
922  }
923
924  protected void composeElementDefinitionExampleComponent(Complex parent, String parentType, String name, ElementDefinition.ElementDefinitionExampleComponent element, int index) {
925    if (element == null) 
926      return;
927    Complex t;
928    if (Utilities.noString(parentType))
929      t = parent;
930    else {
931      t = parent.predicate("fhir:"+parentType+'.'+name);
932    }
933    composeElement(t, "example", name, element, index);
934    if (element.hasLabelElement()) {
935      composeString(t, "ElementDefinitionExampleComponent", "label", element.getLabelElement(), -1);
936    }
937    if (element.hasValue()) {
938      composeType(t, "ElementDefinitionExampleComponent", "value", element.getValue(), -1);
939    }
940  }
941
942  protected void composeElementDefinitionConstraintComponent(Complex parent, String parentType, String name, ElementDefinition.ElementDefinitionConstraintComponent element, int index) {
943    if (element == null) 
944      return;
945    Complex t;
946    if (Utilities.noString(parentType))
947      t = parent;
948    else {
949      t = parent.predicate("fhir:"+parentType+'.'+name);
950    }
951    composeElement(t, "constraint", name, element, index);
952    if (element.hasKeyElement()) {
953      composeId(t, "ElementDefinitionConstraintComponent", "key", element.getKeyElement(), -1);
954    }
955    if (element.hasRequirementsElement()) {
956      composeString(t, "ElementDefinitionConstraintComponent", "requirements", element.getRequirementsElement(), -1);
957    }
958    if (element.hasSeverityElement()) {
959      composeEnum(t, "ElementDefinitionConstraintComponent", "severity", element.getSeverityElement(), -1);
960    }
961    if (element.hasHumanElement()) {
962      composeString(t, "ElementDefinitionConstraintComponent", "human", element.getHumanElement(), -1);
963    }
964    if (element.hasExpressionElement()) {
965      composeString(t, "ElementDefinitionConstraintComponent", "expression", element.getExpressionElement(), -1);
966    }
967    if (element.hasXpathElement()) {
968      composeString(t, "ElementDefinitionConstraintComponent", "xpath", element.getXpathElement(), -1);
969    }
970    if (element.hasSourceElement()) {
971      composeCanonical(t, "ElementDefinitionConstraintComponent", "source", element.getSourceElement(), -1);
972    }
973  }
974
975  protected void composeElementDefinitionBindingComponent(Complex parent, String parentType, String name, ElementDefinition.ElementDefinitionBindingComponent element, int index) {
976    if (element == null) 
977      return;
978    Complex t;
979    if (Utilities.noString(parentType))
980      t = parent;
981    else {
982      t = parent.predicate("fhir:"+parentType+'.'+name);
983    }
984    composeElement(t, "binding", name, element, index);
985    if (element.hasStrengthElement()) {
986      composeEnum(t, "ElementDefinitionBindingComponent", "strength", element.getStrengthElement(), -1);
987    }
988    if (element.hasDescriptionElement()) {
989      composeString(t, "ElementDefinitionBindingComponent", "description", element.getDescriptionElement(), -1);
990    }
991    if (element.hasValueSetElement()) {
992      composeCanonical(t, "ElementDefinitionBindingComponent", "valueSet", element.getValueSetElement(), -1);
993    }
994  }
995
996  protected void composeElementDefinitionMappingComponent(Complex parent, String parentType, String name, ElementDefinition.ElementDefinitionMappingComponent element, int index) {
997    if (element == null) 
998      return;
999    Complex t;
1000    if (Utilities.noString(parentType))
1001      t = parent;
1002    else {
1003      t = parent.predicate("fhir:"+parentType+'.'+name);
1004    }
1005    composeElement(t, "mapping", name, element, index);
1006    if (element.hasIdentityElement()) {
1007      composeId(t, "ElementDefinitionMappingComponent", "identity", element.getIdentityElement(), -1);
1008    }
1009    if (element.hasLanguageElement()) {
1010      composeCode(t, "ElementDefinitionMappingComponent", "language", element.getLanguageElement(), -1);
1011    }
1012    if (element.hasMapElement()) {
1013      composeString(t, "ElementDefinitionMappingComponent", "map", element.getMapElement(), -1);
1014    }
1015    if (element.hasCommentElement()) {
1016      composeString(t, "ElementDefinitionMappingComponent", "comment", element.getCommentElement(), -1);
1017    }
1018  }
1019
1020  protected void composeExpression(Complex parent, String parentType, String name, Expression 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:"+parentType+'.'+name);
1028    }
1029    composeDataType(t, "Expression", name, element, index);
1030    if (element.hasDescriptionElement()) {
1031      composeString(t, "Expression", "description", element.getDescriptionElement(), -1);
1032    }
1033    if (element.hasNameElement()) {
1034      composeId(t, "Expression", "name", element.getNameElement(), -1);
1035    }
1036    if (element.hasLanguageElement()) {
1037      composeCode(t, "Expression", "language", element.getLanguageElement(), -1);
1038    }
1039    if (element.hasExpressionElement()) {
1040      composeString(t, "Expression", "expression", element.getExpressionElement(), -1);
1041    }
1042    if (element.hasReferenceElement()) {
1043      composeUri(t, "Expression", "reference", element.getReferenceElement(), -1);
1044    }
1045  }
1046
1047  protected void composeExtension(Complex parent, String parentType, String name, Extension element, int index) {
1048    if (element == null) 
1049      return;
1050    Complex t;
1051    if (Utilities.noString(parentType))
1052      t = parent;
1053    else {
1054      t = parent.predicate("fhir:"+parentType+'.'+name);
1055    }
1056    composeDataType(t, "Extension", name, element, index);
1057    if (element.hasUrlElement()) {
1058      composeUri(t, "Extension", "url", element.getUrlElement(), -1);
1059    }
1060    if (element.hasValue()) {
1061      composeType(t, "Extension", "value", element.getValue(), -1);
1062    }
1063  }
1064
1065  protected void composeHumanName(Complex parent, String parentType, String name, HumanName element, int index) {
1066    if (element == null) 
1067      return;
1068    Complex t;
1069    if (Utilities.noString(parentType))
1070      t = parent;
1071    else {
1072      t = parent.predicate("fhir:"+parentType+'.'+name);
1073    }
1074    composeDataType(t, "HumanName", name, element, index);
1075    if (element.hasUseElement()) {
1076      composeEnum(t, "HumanName", "use", element.getUseElement(), -1);
1077    }
1078    if (element.hasTextElement()) {
1079      composeString(t, "HumanName", "text", element.getTextElement(), -1);
1080    }
1081    if (element.hasFamilyElement()) {
1082      composeString(t, "HumanName", "family", element.getFamilyElement(), -1);
1083    }
1084    for (int i = 0; i < element.getGiven().size(); i++) {
1085      composeString(t, "HumanName", "given", element.getGiven().get(i), i);
1086    }
1087    for (int i = 0; i < element.getPrefix().size(); i++) {
1088      composeString(t, "HumanName", "prefix", element.getPrefix().get(i), i);
1089    }
1090    for (int i = 0; i < element.getSuffix().size(); i++) {
1091      composeString(t, "HumanName", "suffix", element.getSuffix().get(i), i);
1092    }
1093    if (element.hasPeriod()) {
1094      composePeriod(t, "HumanName", "period", element.getPeriod(), -1);
1095    }
1096  }
1097
1098  protected void composeIdentifier(Complex parent, String parentType, String name, Identifier element, int index) {
1099    if (element == null) 
1100      return;
1101    Complex t;
1102    if (Utilities.noString(parentType))
1103      t = parent;
1104    else {
1105      t = parent.predicate("fhir:"+parentType+'.'+name);
1106    }
1107    composeDataType(t, "Identifier", name, element, index);
1108    if (element.hasUseElement()) {
1109      composeEnum(t, "Identifier", "use", element.getUseElement(), -1);
1110    }
1111    if (element.hasType()) {
1112      composeCodeableConcept(t, "Identifier", "type", element.getType(), -1);
1113    }
1114    if (element.hasSystemElement()) {
1115      composeUri(t, "Identifier", "system", element.getSystemElement(), -1);
1116    }
1117    if (element.hasValueElement()) {
1118      composeString(t, "Identifier", "value", element.getValueElement(), -1);
1119    }
1120    if (element.hasPeriod()) {
1121      composePeriod(t, "Identifier", "period", element.getPeriod(), -1);
1122    }
1123    if (element.hasAssigner()) {
1124      composeReference(t, "Identifier", "assigner", element.getAssigner(), -1);
1125    }
1126  }
1127
1128  protected void composeMarketingStatus(Complex parent, String parentType, String name, MarketingStatus element, int index) {
1129    if (element == null) 
1130      return;
1131    Complex t;
1132    if (Utilities.noString(parentType))
1133      t = parent;
1134    else {
1135      t = parent.predicate("fhir:"+parentType+'.'+name);
1136    }
1137    composeBackboneType(t, "MarketingStatus", name, element, index);
1138    if (element.hasCountry()) {
1139      composeCodeableConcept(t, "MarketingStatus", "country", element.getCountry(), -1);
1140    }
1141    if (element.hasJurisdiction()) {
1142      composeCodeableConcept(t, "MarketingStatus", "jurisdiction", element.getJurisdiction(), -1);
1143    }
1144    if (element.hasStatus()) {
1145      composeCodeableConcept(t, "MarketingStatus", "status", element.getStatus(), -1);
1146    }
1147    if (element.hasDateRange()) {
1148      composePeriod(t, "MarketingStatus", "dateRange", element.getDateRange(), -1);
1149    }
1150    if (element.hasRestoreDateElement()) {
1151      composeDateTime(t, "MarketingStatus", "restoreDate", element.getRestoreDateElement(), -1);
1152    }
1153  }
1154
1155  protected void composeMeta(Complex parent, String parentType, String name, Meta element, int index) {
1156    if (element == null) 
1157      return;
1158    Complex t;
1159    if (Utilities.noString(parentType))
1160      t = parent;
1161    else {
1162      t = parent.predicate("fhir:"+parentType+'.'+name);
1163    }
1164    composeDataType(t, "Meta", name, element, index);
1165    if (element.hasVersionIdElement()) {
1166      composeId(t, "Meta", "versionId", element.getVersionIdElement(), -1);
1167    }
1168    if (element.hasLastUpdatedElement()) {
1169      composeInstant(t, "Meta", "lastUpdated", element.getLastUpdatedElement(), -1);
1170    }
1171    if (element.hasSourceElement()) {
1172      composeUri(t, "Meta", "source", element.getSourceElement(), -1);
1173    }
1174    for (int i = 0; i < element.getProfile().size(); i++) {
1175      composeCanonical(t, "Meta", "profile", element.getProfile().get(i), i);
1176    }
1177    for (int i = 0; i < element.getSecurity().size(); i++) {
1178      composeCoding(t, "Meta", "security", element.getSecurity().get(i), i);
1179    }
1180    for (int i = 0; i < element.getTag().size(); i++) {
1181      composeCoding(t, "Meta", "tag", element.getTag().get(i), i);
1182    }
1183  }
1184
1185  protected void composeMoney(Complex parent, String parentType, String name, Money element, int index) {
1186    if (element == null) 
1187      return;
1188    Complex t;
1189    if (Utilities.noString(parentType))
1190      t = parent;
1191    else {
1192      t = parent.predicate("fhir:"+parentType+'.'+name);
1193    }
1194    composeDataType(t, "Money", name, element, index);
1195    if (element.hasValueElement()) {
1196      composeDecimal(t, "Money", "value", element.getValueElement(), -1);
1197    }
1198    if (element.hasCurrencyElement()) {
1199      composeCode(t, "Money", "currency", element.getCurrencyElement(), -1);
1200    }
1201  }
1202
1203  protected void composeNarrative(Complex parent, String parentType, String name, Narrative element, int index) {
1204    if (element == null) 
1205      return;
1206    Complex t;
1207    if (Utilities.noString(parentType))
1208      t = parent;
1209    else {
1210      t = parent.predicate("fhir:"+parentType+'.'+name);
1211    }
1212    composeDataType(t, "Narrative", name, element, index);
1213    if (element.hasStatusElement()) {
1214      composeEnum(t, "Narrative", "status", element.getStatusElement(), -1);
1215    }
1216    if (element.hasDiv()) {
1217      composeXhtmlNode(t, "Narrative", "div", element.getDiv(), -1);
1218    }
1219  }
1220
1221  protected void composeParameterDefinition(Complex parent, String parentType, String name, ParameterDefinition element, int index) {
1222    if (element == null) 
1223      return;
1224    Complex t;
1225    if (Utilities.noString(parentType))
1226      t = parent;
1227    else {
1228      t = parent.predicate("fhir:"+parentType+'.'+name);
1229    }
1230    composeDataType(t, "ParameterDefinition", name, element, index);
1231    if (element.hasNameElement()) {
1232      composeCode(t, "ParameterDefinition", "name", element.getNameElement(), -1);
1233    }
1234    if (element.hasUseElement()) {
1235      composeEnum(t, "ParameterDefinition", "use", element.getUseElement(), -1);
1236    }
1237    if (element.hasMinElement()) {
1238      composeInteger(t, "ParameterDefinition", "min", element.getMinElement(), -1);
1239    }
1240    if (element.hasMaxElement()) {
1241      composeString(t, "ParameterDefinition", "max", element.getMaxElement(), -1);
1242    }
1243    if (element.hasDocumentationElement()) {
1244      composeString(t, "ParameterDefinition", "documentation", element.getDocumentationElement(), -1);
1245    }
1246    if (element.hasTypeElement()) {
1247      composeEnum(t, "ParameterDefinition", "type", element.getTypeElement(), -1);
1248    }
1249    if (element.hasProfileElement()) {
1250      composeCanonical(t, "ParameterDefinition", "profile", element.getProfileElement(), -1);
1251    }
1252  }
1253
1254  protected void composePeriod(Complex parent, String parentType, String name, Period element, int index) {
1255    if (element == null) 
1256      return;
1257    Complex t;
1258    if (Utilities.noString(parentType))
1259      t = parent;
1260    else {
1261      t = parent.predicate("fhir:"+parentType+'.'+name);
1262    }
1263    composeDataType(t, "Period", name, element, index);
1264    if (element.hasStartElement()) {
1265      composeDateTime(t, "Period", "start", element.getStartElement(), -1);
1266    }
1267    if (element.hasEndElement()) {
1268      composeDateTime(t, "Period", "end", element.getEndElement(), -1);
1269    }
1270  }
1271
1272  protected void composePopulation(Complex parent, String parentType, String name, Population element, int index) {
1273    if (element == null) 
1274      return;
1275    Complex t;
1276    if (Utilities.noString(parentType))
1277      t = parent;
1278    else {
1279      t = parent.predicate("fhir:"+parentType+'.'+name);
1280    }
1281    composeBackboneType(t, "Population", name, element, index);
1282    if (element.hasAge()) {
1283      composeType(t, "Population", "age", element.getAge(), -1);
1284    }
1285    if (element.hasGender()) {
1286      composeCodeableConcept(t, "Population", "gender", element.getGender(), -1);
1287    }
1288    if (element.hasRace()) {
1289      composeCodeableConcept(t, "Population", "race", element.getRace(), -1);
1290    }
1291    if (element.hasPhysiologicalCondition()) {
1292      composeCodeableConcept(t, "Population", "physiologicalCondition", element.getPhysiologicalCondition(), -1);
1293    }
1294  }
1295
1296  protected void composeProdCharacteristic(Complex parent, String parentType, String name, ProdCharacteristic element, int index) {
1297    if (element == null) 
1298      return;
1299    Complex t;
1300    if (Utilities.noString(parentType))
1301      t = parent;
1302    else {
1303      t = parent.predicate("fhir:"+parentType+'.'+name);
1304    }
1305    composeBackboneType(t, "ProdCharacteristic", name, element, index);
1306    if (element.hasHeight()) {
1307      composeQuantity(t, "ProdCharacteristic", "height", element.getHeight(), -1);
1308    }
1309    if (element.hasWidth()) {
1310      composeQuantity(t, "ProdCharacteristic", "width", element.getWidth(), -1);
1311    }
1312    if (element.hasDepth()) {
1313      composeQuantity(t, "ProdCharacteristic", "depth", element.getDepth(), -1);
1314    }
1315    if (element.hasWeight()) {
1316      composeQuantity(t, "ProdCharacteristic", "weight", element.getWeight(), -1);
1317    }
1318    if (element.hasNominalVolume()) {
1319      composeQuantity(t, "ProdCharacteristic", "nominalVolume", element.getNominalVolume(), -1);
1320    }
1321    if (element.hasExternalDiameter()) {
1322      composeQuantity(t, "ProdCharacteristic", "externalDiameter", element.getExternalDiameter(), -1);
1323    }
1324    if (element.hasShapeElement()) {
1325      composeString(t, "ProdCharacteristic", "shape", element.getShapeElement(), -1);
1326    }
1327    for (int i = 0; i < element.getColor().size(); i++) {
1328      composeString(t, "ProdCharacteristic", "color", element.getColor().get(i), i);
1329    }
1330    for (int i = 0; i < element.getImprint().size(); i++) {
1331      composeString(t, "ProdCharacteristic", "imprint", element.getImprint().get(i), i);
1332    }
1333    for (int i = 0; i < element.getImage().size(); i++) {
1334      composeAttachment(t, "ProdCharacteristic", "image", element.getImage().get(i), i);
1335    }
1336    if (element.hasScoring()) {
1337      composeCodeableConcept(t, "ProdCharacteristic", "scoring", element.getScoring(), -1);
1338    }
1339  }
1340
1341  protected void composeProductShelfLife(Complex parent, String parentType, String name, ProductShelfLife element, int index) {
1342    if (element == null) 
1343      return;
1344    Complex t;
1345    if (Utilities.noString(parentType))
1346      t = parent;
1347    else {
1348      t = parent.predicate("fhir:"+parentType+'.'+name);
1349    }
1350    composeBackboneType(t, "ProductShelfLife", name, element, index);
1351    if (element.hasType()) {
1352      composeCodeableConcept(t, "ProductShelfLife", "type", element.getType(), -1);
1353    }
1354    if (element.hasPeriod()) {
1355      composeType(t, "ProductShelfLife", "period", element.getPeriod(), -1);
1356    }
1357    for (int i = 0; i < element.getSpecialPrecautionsForStorage().size(); i++) {
1358      composeCodeableConcept(t, "ProductShelfLife", "specialPrecautionsForStorage", element.getSpecialPrecautionsForStorage().get(i), i);
1359    }
1360  }
1361
1362  protected void composeQuantity(Complex parent, String parentType, String name, Quantity element, int index) {
1363    if (element == null) 
1364      return;
1365    Complex t;
1366    if (Utilities.noString(parentType))
1367      t = parent;
1368    else {
1369      t = parent.predicate("fhir:"+parentType+'.'+name);
1370    }
1371    composeDataType(t, "Quantity", name, element, index);
1372    if (element.hasValueElement()) {
1373      composeDecimal(t, "Quantity", "value", element.getValueElement(), -1);
1374    }
1375    if (element.hasComparatorElement()) {
1376      composeEnum(t, "Quantity", "comparator", element.getComparatorElement(), -1);
1377    }
1378    if (element.hasUnitElement()) {
1379      composeString(t, "Quantity", "unit", element.getUnitElement(), -1);
1380    }
1381    if (element.hasSystemElement()) {
1382      composeUri(t, "Quantity", "system", element.getSystemElement(), -1);
1383    }
1384    if (element.hasCodeElement()) {
1385      composeCode(t, "Quantity", "code", element.getCodeElement(), -1);
1386    }
1387  }
1388
1389  protected void composeRange(Complex parent, String parentType, String name, Range element, int index) {
1390    if (element == null) 
1391      return;
1392    Complex t;
1393    if (Utilities.noString(parentType))
1394      t = parent;
1395    else {
1396      t = parent.predicate("fhir:"+parentType+'.'+name);
1397    }
1398    composeDataType(t, "Range", name, element, index);
1399    if (element.hasLow()) {
1400      composeQuantity(t, "Range", "low", element.getLow(), -1);
1401    }
1402    if (element.hasHigh()) {
1403      composeQuantity(t, "Range", "high", element.getHigh(), -1);
1404    }
1405  }
1406
1407  protected void composeRatio(Complex parent, String parentType, String name, Ratio element, int index) {
1408    if (element == null) 
1409      return;
1410    Complex t;
1411    if (Utilities.noString(parentType))
1412      t = parent;
1413    else {
1414      t = parent.predicate("fhir:"+parentType+'.'+name);
1415    }
1416    composeDataType(t, "Ratio", name, element, index);
1417    if (element.hasNumerator()) {
1418      composeQuantity(t, "Ratio", "numerator", element.getNumerator(), -1);
1419    }
1420    if (element.hasDenominator()) {
1421      composeQuantity(t, "Ratio", "denominator", element.getDenominator(), -1);
1422    }
1423  }
1424
1425  protected void composeRatioRange(Complex parent, String parentType, String name, RatioRange element, int index) {
1426    if (element == null) 
1427      return;
1428    Complex t;
1429    if (Utilities.noString(parentType))
1430      t = parent;
1431    else {
1432      t = parent.predicate("fhir:"+parentType+'.'+name);
1433    }
1434    composeDataType(t, "RatioRange", name, element, index);
1435    if (element.hasLowNumerator()) {
1436      composeQuantity(t, "RatioRange", "lowNumerator", element.getLowNumerator(), -1);
1437    }
1438    if (element.hasHighNumerator()) {
1439      composeQuantity(t, "RatioRange", "highNumerator", element.getHighNumerator(), -1);
1440    }
1441    if (element.hasDenominator()) {
1442      composeQuantity(t, "RatioRange", "denominator", element.getDenominator(), -1);
1443    }
1444  }
1445
1446  protected void composeReference(Complex parent, String parentType, String name, Reference element, int index) {
1447    if (element == null) 
1448      return;
1449    Complex t;
1450    if (Utilities.noString(parentType))
1451      t = parent;
1452    else {
1453      t = parent.predicate("fhir:"+parentType+'.'+name);
1454    }
1455    composeDataType(t, "Reference", name, element, index);
1456    if (element.hasReferenceElement()) {
1457      composeString(t, "Reference", "reference", element.getReferenceElement_(), -1);
1458    }
1459    if (element.hasTypeElement()) {
1460      composeUri(t, "Reference", "type", element.getTypeElement(), -1);
1461    }
1462    if (element.hasIdentifier()) {
1463      composeIdentifier(t, "Reference", "identifier", element.getIdentifier(), -1);
1464    }
1465    if (element.hasDisplayElement()) {
1466      composeString(t, "Reference", "display", element.getDisplayElement(), -1);
1467    }
1468  }
1469
1470  protected void composeRelatedArtifact(Complex parent, String parentType, String name, RelatedArtifact element, int index) {
1471    if (element == null) 
1472      return;
1473    Complex t;
1474    if (Utilities.noString(parentType))
1475      t = parent;
1476    else {
1477      t = parent.predicate("fhir:"+parentType+'.'+name);
1478    }
1479    composeDataType(t, "RelatedArtifact", name, element, index);
1480    if (element.hasTypeElement()) {
1481      composeEnum(t, "RelatedArtifact", "type", element.getTypeElement(), -1);
1482    }
1483    for (int i = 0; i < element.getClassifier().size(); i++) {
1484      composeCodeableConcept(t, "RelatedArtifact", "classifier", element.getClassifier().get(i), i);
1485    }
1486    if (element.hasLabelElement()) {
1487      composeString(t, "RelatedArtifact", "label", element.getLabelElement(), -1);
1488    }
1489    if (element.hasDisplayElement()) {
1490      composeString(t, "RelatedArtifact", "display", element.getDisplayElement(), -1);
1491    }
1492    if (element.hasCitationElement()) {
1493      composeMarkdown(t, "RelatedArtifact", "citation", element.getCitationElement(), -1);
1494    }
1495    if (element.hasDocument()) {
1496      composeAttachment(t, "RelatedArtifact", "document", element.getDocument(), -1);
1497    }
1498    if (element.hasResourceElement()) {
1499      composeCanonical(t, "RelatedArtifact", "resource", element.getResourceElement(), -1);
1500    }
1501    if (element.hasResourceReference()) {
1502      composeReference(t, "RelatedArtifact", "resourceReference", element.getResourceReference(), -1);
1503    }
1504  }
1505
1506  protected void composeSampledData(Complex parent, String parentType, String name, SampledData element, int index) {
1507    if (element == null) 
1508      return;
1509    Complex t;
1510    if (Utilities.noString(parentType))
1511      t = parent;
1512    else {
1513      t = parent.predicate("fhir:"+parentType+'.'+name);
1514    }
1515    composeDataType(t, "SampledData", name, element, index);
1516    if (element.hasOrigin()) {
1517      composeQuantity(t, "SampledData", "origin", element.getOrigin(), -1);
1518    }
1519    if (element.hasPeriodElement()) {
1520      composeDecimal(t, "SampledData", "period", element.getPeriodElement(), -1);
1521    }
1522    if (element.hasFactorElement()) {
1523      composeDecimal(t, "SampledData", "factor", element.getFactorElement(), -1);
1524    }
1525    if (element.hasLowerLimitElement()) {
1526      composeDecimal(t, "SampledData", "lowerLimit", element.getLowerLimitElement(), -1);
1527    }
1528    if (element.hasUpperLimitElement()) {
1529      composeDecimal(t, "SampledData", "upperLimit", element.getUpperLimitElement(), -1);
1530    }
1531    if (element.hasDimensionsElement()) {
1532      composePositiveInt(t, "SampledData", "dimensions", element.getDimensionsElement(), -1);
1533    }
1534    if (element.hasDataElement()) {
1535      composeString(t, "SampledData", "data", element.getDataElement(), -1);
1536    }
1537  }
1538
1539  protected void composeSignature(Complex parent, String parentType, String name, Signature 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:"+parentType+'.'+name);
1547    }
1548    composeDataType(t, "Signature", name, element, index);
1549    for (int i = 0; i < element.getType().size(); i++) {
1550      composeCoding(t, "Signature", "type", element.getType().get(i), i);
1551    }
1552    if (element.hasWhenElement()) {
1553      composeInstant(t, "Signature", "when", element.getWhenElement(), -1);
1554    }
1555    if (element.hasWho()) {
1556      composeReference(t, "Signature", "who", element.getWho(), -1);
1557    }
1558    if (element.hasOnBehalfOf()) {
1559      composeReference(t, "Signature", "onBehalfOf", element.getOnBehalfOf(), -1);
1560    }
1561    if (element.hasTargetFormatElement()) {
1562      composeCode(t, "Signature", "targetFormat", element.getTargetFormatElement(), -1);
1563    }
1564    if (element.hasSigFormatElement()) {
1565      composeCode(t, "Signature", "sigFormat", element.getSigFormatElement(), -1);
1566    }
1567    if (element.hasDataElement()) {
1568      composeBase64Binary(t, "Signature", "data", element.getDataElement(), -1);
1569    }
1570  }
1571
1572  protected void composeTiming(Complex parent, String parentType, String name, Timing element, int index) {
1573    if (element == null) 
1574      return;
1575    Complex t;
1576    if (Utilities.noString(parentType))
1577      t = parent;
1578    else {
1579      t = parent.predicate("fhir:"+parentType+'.'+name);
1580    }
1581    composeBackboneType(t, "Timing", name, element, index);
1582    for (int i = 0; i < element.getEvent().size(); i++) {
1583      composeDateTime(t, "Timing", "event", element.getEvent().get(i), i);
1584    }
1585    if (element.hasRepeat()) {
1586      composeTimingRepeatComponent(t, "Timing", "repeat", element.getRepeat(), -1);
1587    }
1588    if (element.hasCode()) {
1589      composeCodeableConcept(t, "Timing", "code", element.getCode(), -1);
1590    }
1591  }
1592
1593  protected void composeTimingRepeatComponent(Complex parent, String parentType, String name, Timing.TimingRepeatComponent element, int index) {
1594    if (element == null) 
1595      return;
1596    Complex t;
1597    if (Utilities.noString(parentType))
1598      t = parent;
1599    else {
1600      t = parent.predicate("fhir:"+parentType+'.'+name);
1601    }
1602    composeElement(t, "repeat", name, element, index);
1603    if (element.hasBounds()) {
1604      composeType(t, "TimingRepeatComponent", "bounds", element.getBounds(), -1);
1605    }
1606    if (element.hasCountElement()) {
1607      composePositiveInt(t, "TimingRepeatComponent", "count", element.getCountElement(), -1);
1608    }
1609    if (element.hasCountMaxElement()) {
1610      composePositiveInt(t, "TimingRepeatComponent", "countMax", element.getCountMaxElement(), -1);
1611    }
1612    if (element.hasDurationElement()) {
1613      composeDecimal(t, "TimingRepeatComponent", "duration", element.getDurationElement(), -1);
1614    }
1615    if (element.hasDurationMaxElement()) {
1616      composeDecimal(t, "TimingRepeatComponent", "durationMax", element.getDurationMaxElement(), -1);
1617    }
1618    if (element.hasDurationUnitElement()) {
1619      composeEnum(t, "TimingRepeatComponent", "durationUnit", element.getDurationUnitElement(), -1);
1620    }
1621    if (element.hasFrequencyElement()) {
1622      composePositiveInt(t, "TimingRepeatComponent", "frequency", element.getFrequencyElement(), -1);
1623    }
1624    if (element.hasFrequencyMaxElement()) {
1625      composePositiveInt(t, "TimingRepeatComponent", "frequencyMax", element.getFrequencyMaxElement(), -1);
1626    }
1627    if (element.hasPeriodElement()) {
1628      composeDecimal(t, "TimingRepeatComponent", "period", element.getPeriodElement(), -1);
1629    }
1630    if (element.hasPeriodMaxElement()) {
1631      composeDecimal(t, "TimingRepeatComponent", "periodMax", element.getPeriodMaxElement(), -1);
1632    }
1633    if (element.hasPeriodUnitElement()) {
1634      composeEnum(t, "TimingRepeatComponent", "periodUnit", element.getPeriodUnitElement(), -1);
1635    }
1636    for (int i = 0; i < element.getDayOfWeek().size(); i++) {
1637      composeEnum(t, "TimingRepeatComponent", "dayOfWeek", element.getDayOfWeek().get(i), i);
1638    }
1639    for (int i = 0; i < element.getTimeOfDay().size(); i++) {
1640      composeTime(t, "TimingRepeatComponent", "timeOfDay", element.getTimeOfDay().get(i), i);
1641    }
1642    for (int i = 0; i < element.getWhen().size(); i++) {
1643      composeEnum(t, "TimingRepeatComponent", "when", element.getWhen().get(i), i);
1644    }
1645    if (element.hasOffsetElement()) {
1646      composeUnsignedInt(t, "TimingRepeatComponent", "offset", element.getOffsetElement(), -1);
1647    }
1648  }
1649
1650  protected void composeTriggerDefinition(Complex parent, String parentType, String name, TriggerDefinition element, int index) {
1651    if (element == null) 
1652      return;
1653    Complex t;
1654    if (Utilities.noString(parentType))
1655      t = parent;
1656    else {
1657      t = parent.predicate("fhir:"+parentType+'.'+name);
1658    }
1659    composeDataType(t, "TriggerDefinition", name, element, index);
1660    if (element.hasTypeElement()) {
1661      composeEnum(t, "TriggerDefinition", "type", element.getTypeElement(), -1);
1662    }
1663    if (element.hasNameElement()) {
1664      composeString(t, "TriggerDefinition", "name", element.getNameElement(), -1);
1665    }
1666    if (element.hasTiming()) {
1667      composeType(t, "TriggerDefinition", "timing", element.getTiming(), -1);
1668    }
1669    for (int i = 0; i < element.getData().size(); i++) {
1670      composeDataRequirement(t, "TriggerDefinition", "data", element.getData().get(i), i);
1671    }
1672    if (element.hasCondition()) {
1673      composeExpression(t, "TriggerDefinition", "condition", element.getCondition(), -1);
1674    }
1675  }
1676
1677  protected void composeUsageContext(Complex parent, String parentType, String name, UsageContext element, int index) {
1678    if (element == null) 
1679      return;
1680    Complex t;
1681    if (Utilities.noString(parentType))
1682      t = parent;
1683    else {
1684      t = parent.predicate("fhir:"+parentType+'.'+name);
1685    }
1686    composeDataType(t, "UsageContext", name, element, index);
1687    if (element.hasCode()) {
1688      composeCoding(t, "UsageContext", "code", element.getCode(), -1);
1689    }
1690    if (element.hasValue()) {
1691      composeType(t, "UsageContext", "value", element.getValue(), -1);
1692    }
1693  }
1694
1695  protected void composeCanonicalResource(Complex t, String parentType, String name, CanonicalResource element, int index) {
1696    composeDomainResource(t, parentType, name, element, index);
1697    if (element.hasUrlElement()) {
1698      composeUri(t, "CanonicalResource", "url", element.getUrlElement(), -1);
1699    }
1700    for (int i = 0; i < element.getIdentifier().size(); i++) {
1701      composeIdentifier(t, "CanonicalResource", "identifier", element.getIdentifier().get(i), i);
1702    }
1703    if (element.hasVersionElement()) {
1704      composeString(t, "CanonicalResource", "version", element.getVersionElement(), -1);
1705    }
1706    if (element.hasNameElement()) {
1707      composeString(t, "CanonicalResource", "name", element.getNameElement(), -1);
1708    }
1709    if (element.hasTitleElement()) {
1710      composeString(t, "CanonicalResource", "title", element.getTitleElement(), -1);
1711    }
1712    if (element.hasStatusElement()) {
1713      composeEnum(t, "CanonicalResource", "status", element.getStatusElement(), -1);
1714    }
1715    if (element.hasExperimentalElement()) {
1716      composeBoolean(t, "CanonicalResource", "experimental", element.getExperimentalElement(), -1);
1717    }
1718    if (element.hasDateElement()) {
1719      composeDateTime(t, "CanonicalResource", "date", element.getDateElement(), -1);
1720    }
1721    if (element.hasPublisherElement()) {
1722      composeString(t, "CanonicalResource", "publisher", element.getPublisherElement(), -1);
1723    }
1724    for (int i = 0; i < element.getContact().size(); i++) {
1725      composeContactDetail(t, "CanonicalResource", "contact", element.getContact().get(i), i);
1726    }
1727    if (element.hasDescriptionElement()) {
1728      composeMarkdown(t, "CanonicalResource", "description", element.getDescriptionElement(), -1);
1729    }
1730    for (int i = 0; i < element.getUseContext().size(); i++) {
1731      composeUsageContext(t, "CanonicalResource", "useContext", element.getUseContext().get(i), i);
1732    }
1733    for (int i = 0; i < element.getJurisdiction().size(); i++) {
1734      composeCodeableConcept(t, "CanonicalResource", "jurisdiction", element.getJurisdiction().get(i), i);
1735    }
1736    if (element.hasPurposeElement()) {
1737      composeMarkdown(t, "CanonicalResource", "purpose", element.getPurposeElement(), -1);
1738    }
1739    if (element.hasCopyrightElement()) {
1740      composeMarkdown(t, "CanonicalResource", "copyright", element.getCopyrightElement(), -1);
1741    }
1742  }
1743
1744  protected void composeDomainResource(Complex t, String parentType, String name, DomainResource element, int index) {
1745    composeResource(t, parentType, name, element, index);
1746    if (element.hasText()) {
1747      composeNarrative(t, "DomainResource", "text", element.getText(), -1);
1748    }
1749    for (int i = 0; i < element.getContained().size(); i++) {
1750      composeResource(t, "DomainResource", "contained", element.getContained().get(i), i);
1751    }
1752    for (int i = 0; i < element.getExtension().size(); i++) {
1753      composeExtension(t, "DomainResource", "extension", element.getExtension().get(i), i);
1754    }
1755    for (int i = 0; i < element.getModifierExtension().size(); i++) {
1756      composeExtension(t, "DomainResource", "modifierExtension", element.getModifierExtension().get(i), i);
1757    }
1758  }
1759
1760  protected void composeMetadataResource(Complex t, String parentType, String name, MetadataResource element, int index) {
1761    composeCanonicalResource(t, parentType, name, element, index);
1762    if (element.hasApprovalDateElement()) {
1763      composeDate(t, "MetadataResource", "approvalDate", element.getApprovalDateElement(), -1);
1764    }
1765    if (element.hasLastReviewDateElement()) {
1766      composeDate(t, "MetadataResource", "lastReviewDate", element.getLastReviewDateElement(), -1);
1767    }
1768    if (element.hasEffectivePeriod()) {
1769      composePeriod(t, "MetadataResource", "effectivePeriod", element.getEffectivePeriod(), -1);
1770    }
1771    for (int i = 0; i < element.getTopic().size(); i++) {
1772      composeCodeableConcept(t, "MetadataResource", "topic", element.getTopic().get(i), i);
1773    }
1774    for (int i = 0; i < element.getAuthor().size(); i++) {
1775      composeContactDetail(t, "MetadataResource", "author", element.getAuthor().get(i), i);
1776    }
1777    for (int i = 0; i < element.getEditor().size(); i++) {
1778      composeContactDetail(t, "MetadataResource", "editor", element.getEditor().get(i), i);
1779    }
1780    for (int i = 0; i < element.getReviewer().size(); i++) {
1781      composeContactDetail(t, "MetadataResource", "reviewer", element.getReviewer().get(i), i);
1782    }
1783    for (int i = 0; i < element.getEndorser().size(); i++) {
1784      composeContactDetail(t, "MetadataResource", "endorser", element.getEndorser().get(i), i);
1785    }
1786    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
1787      composeRelatedArtifact(t, "MetadataResource", "relatedArtifact", element.getRelatedArtifact().get(i), i);
1788    }
1789  }
1790
1791  protected void composeResource(Complex t, String parentType, String name, Resource element, int index) {
1792    composeBase(t, parentType, name, element, index);
1793    if (element.hasIdElement()) {
1794      composeId(t, "Resource", "id", element.getIdElement(), -1);
1795    }
1796    if (element.hasMeta()) {
1797      composeMeta(t, "Resource", "meta", element.getMeta(), -1);
1798    }
1799    if (element.hasImplicitRulesElement()) {
1800      composeUri(t, "Resource", "implicitRules", element.getImplicitRulesElement(), -1);
1801    }
1802    if (element.hasLanguageElement()) {
1803      composeCode(t, "Resource", "language", element.getLanguageElement(), -1);
1804    }
1805  }
1806
1807  protected void composeAccount(Complex parent, String parentType, String name, Account element, int index) {
1808    if (element == null) 
1809      return;
1810    Complex t;
1811    if (Utilities.noString(parentType))
1812      t = parent;
1813    else {
1814      t = parent.predicate("fhir:"+parentType+'.'+name);
1815    }
1816    composeDomainResource(t, "Account", name, element, index);
1817    for (int i = 0; i < element.getIdentifier().size(); i++) {
1818      composeIdentifier(t, "Account", "identifier", element.getIdentifier().get(i), i);
1819    }
1820    if (element.hasStatusElement()) {
1821      composeEnum(t, "Account", "status", element.getStatusElement(), -1);
1822    }
1823    if (element.hasBillingStatus()) {
1824      composeCodeableConcept(t, "Account", "billingStatus", element.getBillingStatus(), -1);
1825    }
1826    if (element.hasType()) {
1827      composeCodeableConcept(t, "Account", "type", element.getType(), -1);
1828    }
1829    if (element.hasNameElement()) {
1830      composeString(t, "Account", "name", element.getNameElement(), -1);
1831    }
1832    for (int i = 0; i < element.getSubject().size(); i++) {
1833      composeReference(t, "Account", "subject", element.getSubject().get(i), i);
1834    }
1835    if (element.hasServicePeriod()) {
1836      composePeriod(t, "Account", "servicePeriod", element.getServicePeriod(), -1);
1837    }
1838    for (int i = 0; i < element.getCoverage().size(); i++) {
1839      composeAccountCoverageComponent(t, "Account", "coverage", element.getCoverage().get(i), i);
1840    }
1841    if (element.hasOwner()) {
1842      composeReference(t, "Account", "owner", element.getOwner(), -1);
1843    }
1844    if (element.hasDescriptionElement()) {
1845      composeString(t, "Account", "description", element.getDescriptionElement(), -1);
1846    }
1847    for (int i = 0; i < element.getGuarantor().size(); i++) {
1848      composeAccountGuarantorComponent(t, "Account", "guarantor", element.getGuarantor().get(i), i);
1849    }
1850    if (element.hasPartOf()) {
1851      composeReference(t, "Account", "partOf", element.getPartOf(), -1);
1852    }
1853  }
1854
1855  protected void composeAccountCoverageComponent(Complex parent, String parentType, String name, Account.CoverageComponent element, int index) {
1856    if (element == null) 
1857      return;
1858    Complex t;
1859    if (Utilities.noString(parentType))
1860      t = parent;
1861    else {
1862      t = parent.predicate("fhir:"+parentType+'.'+name);
1863    }
1864    composeBackboneElement(t, "coverage", name, element, index);
1865    if (element.hasCoverage()) {
1866      composeReference(t, "CoverageComponent", "coverage", element.getCoverage(), -1);
1867    }
1868    if (element.hasPriorityElement()) {
1869      composePositiveInt(t, "CoverageComponent", "priority", element.getPriorityElement(), -1);
1870    }
1871  }
1872
1873  protected void composeAccountGuarantorComponent(Complex parent, String parentType, String name, Account.GuarantorComponent element, int index) {
1874    if (element == null) 
1875      return;
1876    Complex t;
1877    if (Utilities.noString(parentType))
1878      t = parent;
1879    else {
1880      t = parent.predicate("fhir:"+parentType+'.'+name);
1881    }
1882    composeBackboneElement(t, "guarantor", name, element, index);
1883    if (element.hasParty()) {
1884      composeReference(t, "GuarantorComponent", "party", element.getParty(), -1);
1885    }
1886    if (element.hasOnHoldElement()) {
1887      composeBoolean(t, "GuarantorComponent", "onHold", element.getOnHoldElement(), -1);
1888    }
1889    if (element.hasPeriod()) {
1890      composePeriod(t, "GuarantorComponent", "period", element.getPeriod(), -1);
1891    }
1892  }
1893
1894  protected void composeActivityDefinition(Complex parent, String parentType, String name, ActivityDefinition element, int index) {
1895    if (element == null) 
1896      return;
1897    Complex t;
1898    if (Utilities.noString(parentType))
1899      t = parent;
1900    else {
1901      t = parent.predicate("fhir:"+parentType+'.'+name);
1902    }
1903    composeMetadataResource(t, "ActivityDefinition", name, element, index);
1904    if (element.hasUrlElement()) {
1905      composeUri(t, "ActivityDefinition", "url", element.getUrlElement(), -1);
1906    }
1907    for (int i = 0; i < element.getIdentifier().size(); i++) {
1908      composeIdentifier(t, "ActivityDefinition", "identifier", element.getIdentifier().get(i), i);
1909    }
1910    if (element.hasVersionElement()) {
1911      composeString(t, "ActivityDefinition", "version", element.getVersionElement(), -1);
1912    }
1913    if (element.hasNameElement()) {
1914      composeString(t, "ActivityDefinition", "name", element.getNameElement(), -1);
1915    }
1916    if (element.hasTitleElement()) {
1917      composeString(t, "ActivityDefinition", "title", element.getTitleElement(), -1);
1918    }
1919    if (element.hasSubtitleElement()) {
1920      composeString(t, "ActivityDefinition", "subtitle", element.getSubtitleElement(), -1);
1921    }
1922    if (element.hasStatusElement()) {
1923      composeEnum(t, "ActivityDefinition", "status", element.getStatusElement(), -1);
1924    }
1925    if (element.hasExperimentalElement()) {
1926      composeBoolean(t, "ActivityDefinition", "experimental", element.getExperimentalElement(), -1);
1927    }
1928    if (element.hasSubject()) {
1929      composeType(t, "ActivityDefinition", "subject", element.getSubject(), -1);
1930    }
1931    if (element.hasDateElement()) {
1932      composeDateTime(t, "ActivityDefinition", "date", element.getDateElement(), -1);
1933    }
1934    if (element.hasPublisherElement()) {
1935      composeString(t, "ActivityDefinition", "publisher", element.getPublisherElement(), -1);
1936    }
1937    for (int i = 0; i < element.getContact().size(); i++) {
1938      composeContactDetail(t, "ActivityDefinition", "contact", element.getContact().get(i), i);
1939    }
1940    if (element.hasDescriptionElement()) {
1941      composeMarkdown(t, "ActivityDefinition", "description", element.getDescriptionElement(), -1);
1942    }
1943    for (int i = 0; i < element.getUseContext().size(); i++) {
1944      composeUsageContext(t, "ActivityDefinition", "useContext", element.getUseContext().get(i), i);
1945    }
1946    for (int i = 0; i < element.getJurisdiction().size(); i++) {
1947      composeCodeableConcept(t, "ActivityDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
1948    }
1949    if (element.hasPurposeElement()) {
1950      composeMarkdown(t, "ActivityDefinition", "purpose", element.getPurposeElement(), -1);
1951    }
1952    if (element.hasUsageElement()) {
1953      composeString(t, "ActivityDefinition", "usage", element.getUsageElement(), -1);
1954    }
1955    if (element.hasCopyrightElement()) {
1956      composeMarkdown(t, "ActivityDefinition", "copyright", element.getCopyrightElement(), -1);
1957    }
1958    if (element.hasApprovalDateElement()) {
1959      composeDate(t, "ActivityDefinition", "approvalDate", element.getApprovalDateElement(), -1);
1960    }
1961    if (element.hasLastReviewDateElement()) {
1962      composeDate(t, "ActivityDefinition", "lastReviewDate", element.getLastReviewDateElement(), -1);
1963    }
1964    if (element.hasEffectivePeriod()) {
1965      composePeriod(t, "ActivityDefinition", "effectivePeriod", element.getEffectivePeriod(), -1);
1966    }
1967    for (int i = 0; i < element.getTopic().size(); i++) {
1968      composeCodeableConcept(t, "ActivityDefinition", "topic", element.getTopic().get(i), i);
1969    }
1970    for (int i = 0; i < element.getAuthor().size(); i++) {
1971      composeContactDetail(t, "ActivityDefinition", "author", element.getAuthor().get(i), i);
1972    }
1973    for (int i = 0; i < element.getEditor().size(); i++) {
1974      composeContactDetail(t, "ActivityDefinition", "editor", element.getEditor().get(i), i);
1975    }
1976    for (int i = 0; i < element.getReviewer().size(); i++) {
1977      composeContactDetail(t, "ActivityDefinition", "reviewer", element.getReviewer().get(i), i);
1978    }
1979    for (int i = 0; i < element.getEndorser().size(); i++) {
1980      composeContactDetail(t, "ActivityDefinition", "endorser", element.getEndorser().get(i), i);
1981    }
1982    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
1983      composeRelatedArtifact(t, "ActivityDefinition", "relatedArtifact", element.getRelatedArtifact().get(i), i);
1984    }
1985    for (int i = 0; i < element.getLibrary().size(); i++) {
1986      composeCanonical(t, "ActivityDefinition", "library", element.getLibrary().get(i), i);
1987    }
1988    if (element.hasKindElement()) {
1989      composeEnum(t, "ActivityDefinition", "kind", element.getKindElement(), -1);
1990    }
1991    if (element.hasProfileElement()) {
1992      composeCanonical(t, "ActivityDefinition", "profile", element.getProfileElement(), -1);
1993    }
1994    if (element.hasCode()) {
1995      composeCodeableConcept(t, "ActivityDefinition", "code", element.getCode(), -1);
1996    }
1997    if (element.hasIntentElement()) {
1998      composeEnum(t, "ActivityDefinition", "intent", element.getIntentElement(), -1);
1999    }
2000    if (element.hasPriorityElement()) {
2001      composeEnum(t, "ActivityDefinition", "priority", element.getPriorityElement(), -1);
2002    }
2003    if (element.hasDoNotPerformElement()) {
2004      composeBoolean(t, "ActivityDefinition", "doNotPerform", element.getDoNotPerformElement(), -1);
2005    }
2006    if (element.hasTiming()) {
2007      composeType(t, "ActivityDefinition", "timing", element.getTiming(), -1);
2008    }
2009    if (element.hasLocation()) {
2010      composeCodeableReference(t, "ActivityDefinition", "location", element.getLocation(), -1);
2011    }
2012    for (int i = 0; i < element.getParticipant().size(); i++) {
2013      composeActivityDefinitionParticipantComponent(t, "ActivityDefinition", "participant", element.getParticipant().get(i), i);
2014    }
2015    if (element.hasProduct()) {
2016      composeType(t, "ActivityDefinition", "product", element.getProduct(), -1);
2017    }
2018    if (element.hasQuantity()) {
2019      composeQuantity(t, "ActivityDefinition", "quantity", element.getQuantity(), -1);
2020    }
2021    for (int i = 0; i < element.getDosage().size(); i++) {
2022      composeDosage(t, "ActivityDefinition", "dosage", element.getDosage().get(i), i);
2023    }
2024    for (int i = 0; i < element.getBodySite().size(); i++) {
2025      composeCodeableConcept(t, "ActivityDefinition", "bodySite", element.getBodySite().get(i), i);
2026    }
2027    for (int i = 0; i < element.getSpecimenRequirement().size(); i++) {
2028      composeReference(t, "ActivityDefinition", "specimenRequirement", element.getSpecimenRequirement().get(i), i);
2029    }
2030    for (int i = 0; i < element.getObservationRequirement().size(); i++) {
2031      composeReference(t, "ActivityDefinition", "observationRequirement", element.getObservationRequirement().get(i), i);
2032    }
2033    for (int i = 0; i < element.getObservationResultRequirement().size(); i++) {
2034      composeReference(t, "ActivityDefinition", "observationResultRequirement", element.getObservationResultRequirement().get(i), i);
2035    }
2036    if (element.hasTransformElement()) {
2037      composeCanonical(t, "ActivityDefinition", "transform", element.getTransformElement(), -1);
2038    }
2039    for (int i = 0; i < element.getDynamicValue().size(); i++) {
2040      composeActivityDefinitionDynamicValueComponent(t, "ActivityDefinition", "dynamicValue", element.getDynamicValue().get(i), i);
2041    }
2042  }
2043
2044  protected void composeActivityDefinitionParticipantComponent(Complex parent, String parentType, String name, ActivityDefinition.ActivityDefinitionParticipantComponent element, int index) {
2045    if (element == null) 
2046      return;
2047    Complex t;
2048    if (Utilities.noString(parentType))
2049      t = parent;
2050    else {
2051      t = parent.predicate("fhir:"+parentType+'.'+name);
2052    }
2053    composeBackboneElement(t, "participant", name, element, index);
2054    if (element.hasTypeElement()) {
2055      composeEnum(t, "ActivityDefinitionParticipantComponent", "type", element.getTypeElement(), -1);
2056    }
2057    if (element.hasTypeReference()) {
2058      composeReference(t, "ActivityDefinitionParticipantComponent", "typeReference", element.getTypeReference(), -1);
2059    }
2060    if (element.hasRole()) {
2061      composeCodeableConcept(t, "ActivityDefinitionParticipantComponent", "role", element.getRole(), -1);
2062    }
2063    if (element.hasFunction()) {
2064      composeCodeableConcept(t, "ActivityDefinitionParticipantComponent", "function", element.getFunction(), -1);
2065    }
2066  }
2067
2068  protected void composeActivityDefinitionDynamicValueComponent(Complex parent, String parentType, String name, ActivityDefinition.ActivityDefinitionDynamicValueComponent element, int index) {
2069    if (element == null) 
2070      return;
2071    Complex t;
2072    if (Utilities.noString(parentType))
2073      t = parent;
2074    else {
2075      t = parent.predicate("fhir:"+parentType+'.'+name);
2076    }
2077    composeBackboneElement(t, "dynamicValue", name, element, index);
2078    if (element.hasPathElement()) {
2079      composeString(t, "ActivityDefinitionDynamicValueComponent", "path", element.getPathElement(), -1);
2080    }
2081    if (element.hasExpression()) {
2082      composeExpression(t, "ActivityDefinitionDynamicValueComponent", "expression", element.getExpression(), -1);
2083    }
2084  }
2085
2086  protected void composeAdministrableProductDefinition(Complex parent, String parentType, String name, AdministrableProductDefinition element, int index) {
2087    if (element == null) 
2088      return;
2089    Complex t;
2090    if (Utilities.noString(parentType))
2091      t = parent;
2092    else {
2093      t = parent.predicate("fhir:"+parentType+'.'+name);
2094    }
2095    composeDomainResource(t, "AdministrableProductDefinition", name, element, index);
2096    for (int i = 0; i < element.getIdentifier().size(); i++) {
2097      composeIdentifier(t, "AdministrableProductDefinition", "identifier", element.getIdentifier().get(i), i);
2098    }
2099    if (element.hasStatusElement()) {
2100      composeEnum(t, "AdministrableProductDefinition", "status", element.getStatusElement(), -1);
2101    }
2102    for (int i = 0; i < element.getFormOf().size(); i++) {
2103      composeReference(t, "AdministrableProductDefinition", "formOf", element.getFormOf().get(i), i);
2104    }
2105    if (element.hasAdministrableDoseForm()) {
2106      composeCodeableConcept(t, "AdministrableProductDefinition", "administrableDoseForm", element.getAdministrableDoseForm(), -1);
2107    }
2108    if (element.hasUnitOfPresentation()) {
2109      composeCodeableConcept(t, "AdministrableProductDefinition", "unitOfPresentation", element.getUnitOfPresentation(), -1);
2110    }
2111    for (int i = 0; i < element.getProducedFrom().size(); i++) {
2112      composeReference(t, "AdministrableProductDefinition", "producedFrom", element.getProducedFrom().get(i), i);
2113    }
2114    for (int i = 0; i < element.getIngredient().size(); i++) {
2115      composeCodeableConcept(t, "AdministrableProductDefinition", "ingredient", element.getIngredient().get(i), i);
2116    }
2117    if (element.hasDevice()) {
2118      composeReference(t, "AdministrableProductDefinition", "device", element.getDevice(), -1);
2119    }
2120    for (int i = 0; i < element.getProperty().size(); i++) {
2121      composeAdministrableProductDefinitionPropertyComponent(t, "AdministrableProductDefinition", "property", element.getProperty().get(i), i);
2122    }
2123    for (int i = 0; i < element.getRouteOfAdministration().size(); i++) {
2124      composeAdministrableProductDefinitionRouteOfAdministrationComponent(t, "AdministrableProductDefinition", "routeOfAdministration", element.getRouteOfAdministration().get(i), i);
2125    }
2126  }
2127
2128  protected void composeAdministrableProductDefinitionPropertyComponent(Complex parent, String parentType, String name, AdministrableProductDefinition.AdministrableProductDefinitionPropertyComponent element, int index) {
2129    if (element == null) 
2130      return;
2131    Complex t;
2132    if (Utilities.noString(parentType))
2133      t = parent;
2134    else {
2135      t = parent.predicate("fhir:"+parentType+'.'+name);
2136    }
2137    composeBackboneElement(t, "property", name, element, index);
2138    if (element.hasType()) {
2139      composeCodeableConcept(t, "AdministrableProductDefinitionPropertyComponent", "type", element.getType(), -1);
2140    }
2141    if (element.hasValue()) {
2142      composeType(t, "AdministrableProductDefinitionPropertyComponent", "value", element.getValue(), -1);
2143    }
2144    if (element.hasStatus()) {
2145      composeCodeableConcept(t, "AdministrableProductDefinitionPropertyComponent", "status", element.getStatus(), -1);
2146    }
2147  }
2148
2149  protected void composeAdministrableProductDefinitionRouteOfAdministrationComponent(Complex parent, String parentType, String name, AdministrableProductDefinition.AdministrableProductDefinitionRouteOfAdministrationComponent element, int index) {
2150    if (element == null) 
2151      return;
2152    Complex t;
2153    if (Utilities.noString(parentType))
2154      t = parent;
2155    else {
2156      t = parent.predicate("fhir:"+parentType+'.'+name);
2157    }
2158    composeBackboneElement(t, "routeOfAdministration", name, element, index);
2159    if (element.hasCode()) {
2160      composeCodeableConcept(t, "AdministrableProductDefinitionRouteOfAdministrationComponent", "code", element.getCode(), -1);
2161    }
2162    if (element.hasFirstDose()) {
2163      composeQuantity(t, "AdministrableProductDefinitionRouteOfAdministrationComponent", "firstDose", element.getFirstDose(), -1);
2164    }
2165    if (element.hasMaxSingleDose()) {
2166      composeQuantity(t, "AdministrableProductDefinitionRouteOfAdministrationComponent", "maxSingleDose", element.getMaxSingleDose(), -1);
2167    }
2168    if (element.hasMaxDosePerDay()) {
2169      composeQuantity(t, "AdministrableProductDefinitionRouteOfAdministrationComponent", "maxDosePerDay", element.getMaxDosePerDay(), -1);
2170    }
2171    if (element.hasMaxDosePerTreatmentPeriod()) {
2172      composeRatio(t, "AdministrableProductDefinitionRouteOfAdministrationComponent", "maxDosePerTreatmentPeriod", element.getMaxDosePerTreatmentPeriod(), -1);
2173    }
2174    if (element.hasMaxTreatmentPeriod()) {
2175      composeDuration(t, "AdministrableProductDefinitionRouteOfAdministrationComponent", "maxTreatmentPeriod", element.getMaxTreatmentPeriod(), -1);
2176    }
2177    for (int i = 0; i < element.getTargetSpecies().size(); i++) {
2178      composeAdministrableProductDefinitionRouteOfAdministrationTargetSpeciesComponent(t, "AdministrableProductDefinitionRouteOfAdministrationComponent", "targetSpecies", element.getTargetSpecies().get(i), i);
2179    }
2180  }
2181
2182  protected void composeAdministrableProductDefinitionRouteOfAdministrationTargetSpeciesComponent(Complex parent, String parentType, String name, AdministrableProductDefinition.AdministrableProductDefinitionRouteOfAdministrationTargetSpeciesComponent element, int index) {
2183    if (element == null) 
2184      return;
2185    Complex t;
2186    if (Utilities.noString(parentType))
2187      t = parent;
2188    else {
2189      t = parent.predicate("fhir:"+parentType+'.'+name);
2190    }
2191    composeBackboneElement(t, "targetSpecies", name, element, index);
2192    if (element.hasCode()) {
2193      composeCodeableConcept(t, "AdministrableProductDefinitionRouteOfAdministrationTargetSpeciesComponent", "code", element.getCode(), -1);
2194    }
2195    for (int i = 0; i < element.getWithdrawalPeriod().size(); i++) {
2196      composeAdministrableProductDefinitionRouteOfAdministrationTargetSpeciesWithdrawalPeriodComponent(t, "AdministrableProductDefinitionRouteOfAdministrationTargetSpeciesComponent", "withdrawalPeriod", element.getWithdrawalPeriod().get(i), i);
2197    }
2198  }
2199
2200  protected void composeAdministrableProductDefinitionRouteOfAdministrationTargetSpeciesWithdrawalPeriodComponent(Complex parent, String parentType, String name, AdministrableProductDefinition.AdministrableProductDefinitionRouteOfAdministrationTargetSpeciesWithdrawalPeriodComponent element, int index) {
2201    if (element == null) 
2202      return;
2203    Complex t;
2204    if (Utilities.noString(parentType))
2205      t = parent;
2206    else {
2207      t = parent.predicate("fhir:"+parentType+'.'+name);
2208    }
2209    composeBackboneElement(t, "withdrawalPeriod", name, element, index);
2210    if (element.hasTissue()) {
2211      composeCodeableConcept(t, "AdministrableProductDefinitionRouteOfAdministrationTargetSpeciesWithdrawalPeriodComponent", "tissue", element.getTissue(), -1);
2212    }
2213    if (element.hasValue()) {
2214      composeQuantity(t, "AdministrableProductDefinitionRouteOfAdministrationTargetSpeciesWithdrawalPeriodComponent", "value", element.getValue(), -1);
2215    }
2216    if (element.hasSupportingInformationElement()) {
2217      composeString(t, "AdministrableProductDefinitionRouteOfAdministrationTargetSpeciesWithdrawalPeriodComponent", "supportingInformation", element.getSupportingInformationElement(), -1);
2218    }
2219  }
2220
2221  protected void composeAdverseEvent(Complex parent, String parentType, String name, AdverseEvent element, int index) {
2222    if (element == null) 
2223      return;
2224    Complex t;
2225    if (Utilities.noString(parentType))
2226      t = parent;
2227    else {
2228      t = parent.predicate("fhir:"+parentType+'.'+name);
2229    }
2230    composeDomainResource(t, "AdverseEvent", name, element, index);
2231    for (int i = 0; i < element.getIdentifier().size(); i++) {
2232      composeIdentifier(t, "AdverseEvent", "identifier", element.getIdentifier().get(i), i);
2233    }
2234    if (element.hasStatusElement()) {
2235      composeEnum(t, "AdverseEvent", "status", element.getStatusElement(), -1);
2236    }
2237    if (element.hasActualityElement()) {
2238      composeEnum(t, "AdverseEvent", "actuality", element.getActualityElement(), -1);
2239    }
2240    for (int i = 0; i < element.getCategory().size(); i++) {
2241      composeCodeableConcept(t, "AdverseEvent", "category", element.getCategory().get(i), i);
2242    }
2243    if (element.hasCode()) {
2244      composeCodeableConcept(t, "AdverseEvent", "code", element.getCode(), -1);
2245    }
2246    if (element.hasSubject()) {
2247      composeReference(t, "AdverseEvent", "subject", element.getSubject(), -1);
2248    }
2249    if (element.hasEncounter()) {
2250      composeReference(t, "AdverseEvent", "encounter", element.getEncounter(), -1);
2251    }
2252    if (element.hasOccurrence()) {
2253      composeType(t, "AdverseEvent", "occurrence", element.getOccurrence(), -1);
2254    }
2255    if (element.hasDetectedElement()) {
2256      composeDateTime(t, "AdverseEvent", "detected", element.getDetectedElement(), -1);
2257    }
2258    if (element.hasRecordedDateElement()) {
2259      composeDateTime(t, "AdverseEvent", "recordedDate", element.getRecordedDateElement(), -1);
2260    }
2261    for (int i = 0; i < element.getResultingCondition().size(); i++) {
2262      composeReference(t, "AdverseEvent", "resultingCondition", element.getResultingCondition().get(i), i);
2263    }
2264    if (element.hasLocation()) {
2265      composeReference(t, "AdverseEvent", "location", element.getLocation(), -1);
2266    }
2267    if (element.hasSeriousness()) {
2268      composeCodeableConcept(t, "AdverseEvent", "seriousness", element.getSeriousness(), -1);
2269    }
2270    for (int i = 0; i < element.getOutcome().size(); i++) {
2271      composeCodeableConcept(t, "AdverseEvent", "outcome", element.getOutcome().get(i), i);
2272    }
2273    if (element.hasRecorder()) {
2274      composeReference(t, "AdverseEvent", "recorder", element.getRecorder(), -1);
2275    }
2276    for (int i = 0; i < element.getParticipant().size(); i++) {
2277      composeAdverseEventParticipantComponent(t, "AdverseEvent", "participant", element.getParticipant().get(i), i);
2278    }
2279    for (int i = 0; i < element.getSuspectEntity().size(); i++) {
2280      composeAdverseEventSuspectEntityComponent(t, "AdverseEvent", "suspectEntity", element.getSuspectEntity().get(i), i);
2281    }
2282    for (int i = 0; i < element.getContributingFactor().size(); i++) {
2283      composeAdverseEventContributingFactorComponent(t, "AdverseEvent", "contributingFactor", element.getContributingFactor().get(i), i);
2284    }
2285    for (int i = 0; i < element.getPreventiveAction().size(); i++) {
2286      composeAdverseEventPreventiveActionComponent(t, "AdverseEvent", "preventiveAction", element.getPreventiveAction().get(i), i);
2287    }
2288    for (int i = 0; i < element.getMitigatingAction().size(); i++) {
2289      composeAdverseEventMitigatingActionComponent(t, "AdverseEvent", "mitigatingAction", element.getMitigatingAction().get(i), i);
2290    }
2291    for (int i = 0; i < element.getSupportingInfo().size(); i++) {
2292      composeAdverseEventSupportingInfoComponent(t, "AdverseEvent", "supportingInfo", element.getSupportingInfo().get(i), i);
2293    }
2294    for (int i = 0; i < element.getStudy().size(); i++) {
2295      composeReference(t, "AdverseEvent", "study", element.getStudy().get(i), i);
2296    }
2297  }
2298
2299  protected void composeAdverseEventParticipantComponent(Complex parent, String parentType, String name, AdverseEvent.AdverseEventParticipantComponent element, int index) {
2300    if (element == null) 
2301      return;
2302    Complex t;
2303    if (Utilities.noString(parentType))
2304      t = parent;
2305    else {
2306      t = parent.predicate("fhir:"+parentType+'.'+name);
2307    }
2308    composeBackboneElement(t, "participant", name, element, index);
2309    if (element.hasFunction()) {
2310      composeCodeableConcept(t, "AdverseEventParticipantComponent", "function", element.getFunction(), -1);
2311    }
2312    if (element.hasActor()) {
2313      composeReference(t, "AdverseEventParticipantComponent", "actor", element.getActor(), -1);
2314    }
2315  }
2316
2317  protected void composeAdverseEventSuspectEntityComponent(Complex parent, String parentType, String name, AdverseEvent.AdverseEventSuspectEntityComponent element, int index) {
2318    if (element == null) 
2319      return;
2320    Complex t;
2321    if (Utilities.noString(parentType))
2322      t = parent;
2323    else {
2324      t = parent.predicate("fhir:"+parentType+'.'+name);
2325    }
2326    composeBackboneElement(t, "suspectEntity", name, element, index);
2327    if (element.hasInstance()) {
2328      composeType(t, "AdverseEventSuspectEntityComponent", "instance", element.getInstance(), -1);
2329    }
2330    if (element.hasCausality()) {
2331      composeAdverseEventSuspectEntityCausalityComponent(t, "AdverseEventSuspectEntityComponent", "causality", element.getCausality(), -1);
2332    }
2333  }
2334
2335  protected void composeAdverseEventSuspectEntityCausalityComponent(Complex parent, String parentType, String name, AdverseEvent.AdverseEventSuspectEntityCausalityComponent element, int index) {
2336    if (element == null) 
2337      return;
2338    Complex t;
2339    if (Utilities.noString(parentType))
2340      t = parent;
2341    else {
2342      t = parent.predicate("fhir:"+parentType+'.'+name);
2343    }
2344    composeBackboneElement(t, "causality", name, element, index);
2345    if (element.hasAssessmentMethod()) {
2346      composeCodeableConcept(t, "AdverseEventSuspectEntityCausalityComponent", "assessmentMethod", element.getAssessmentMethod(), -1);
2347    }
2348    if (element.hasEntityRelatedness()) {
2349      composeCodeableConcept(t, "AdverseEventSuspectEntityCausalityComponent", "entityRelatedness", element.getEntityRelatedness(), -1);
2350    }
2351    if (element.hasAuthor()) {
2352      composeReference(t, "AdverseEventSuspectEntityCausalityComponent", "author", element.getAuthor(), -1);
2353    }
2354  }
2355
2356  protected void composeAdverseEventContributingFactorComponent(Complex parent, String parentType, String name, AdverseEvent.AdverseEventContributingFactorComponent element, int index) {
2357    if (element == null) 
2358      return;
2359    Complex t;
2360    if (Utilities.noString(parentType))
2361      t = parent;
2362    else {
2363      t = parent.predicate("fhir:"+parentType+'.'+name);
2364    }
2365    composeBackboneElement(t, "contributingFactor", name, element, index);
2366    if (element.hasItem()) {
2367      composeType(t, "AdverseEventContributingFactorComponent", "item", element.getItem(), -1);
2368    }
2369  }
2370
2371  protected void composeAdverseEventPreventiveActionComponent(Complex parent, String parentType, String name, AdverseEvent.AdverseEventPreventiveActionComponent element, int index) {
2372    if (element == null) 
2373      return;
2374    Complex t;
2375    if (Utilities.noString(parentType))
2376      t = parent;
2377    else {
2378      t = parent.predicate("fhir:"+parentType+'.'+name);
2379    }
2380    composeBackboneElement(t, "preventiveAction", name, element, index);
2381    if (element.hasItem()) {
2382      composeType(t, "AdverseEventPreventiveActionComponent", "item", element.getItem(), -1);
2383    }
2384  }
2385
2386  protected void composeAdverseEventMitigatingActionComponent(Complex parent, String parentType, String name, AdverseEvent.AdverseEventMitigatingActionComponent element, int index) {
2387    if (element == null) 
2388      return;
2389    Complex t;
2390    if (Utilities.noString(parentType))
2391      t = parent;
2392    else {
2393      t = parent.predicate("fhir:"+parentType+'.'+name);
2394    }
2395    composeBackboneElement(t, "mitigatingAction", name, element, index);
2396    if (element.hasItem()) {
2397      composeType(t, "AdverseEventMitigatingActionComponent", "item", element.getItem(), -1);
2398    }
2399  }
2400
2401  protected void composeAdverseEventSupportingInfoComponent(Complex parent, String parentType, String name, AdverseEvent.AdverseEventSupportingInfoComponent element, int index) {
2402    if (element == null) 
2403      return;
2404    Complex t;
2405    if (Utilities.noString(parentType))
2406      t = parent;
2407    else {
2408      t = parent.predicate("fhir:"+parentType+'.'+name);
2409    }
2410    composeBackboneElement(t, "supportingInfo", name, element, index);
2411    if (element.hasItem()) {
2412      composeType(t, "AdverseEventSupportingInfoComponent", "item", element.getItem(), -1);
2413    }
2414  }
2415
2416  protected void composeAllergyIntolerance(Complex parent, String parentType, String name, AllergyIntolerance element, int index) {
2417    if (element == null) 
2418      return;
2419    Complex t;
2420    if (Utilities.noString(parentType))
2421      t = parent;
2422    else {
2423      t = parent.predicate("fhir:"+parentType+'.'+name);
2424    }
2425    composeDomainResource(t, "AllergyIntolerance", name, element, index);
2426    for (int i = 0; i < element.getIdentifier().size(); i++) {
2427      composeIdentifier(t, "AllergyIntolerance", "identifier", element.getIdentifier().get(i), i);
2428    }
2429    if (element.hasClinicalStatus()) {
2430      composeCodeableConcept(t, "AllergyIntolerance", "clinicalStatus", element.getClinicalStatus(), -1);
2431    }
2432    if (element.hasVerificationStatus()) {
2433      composeCodeableConcept(t, "AllergyIntolerance", "verificationStatus", element.getVerificationStatus(), -1);
2434    }
2435    if (element.hasTypeElement()) {
2436      composeEnum(t, "AllergyIntolerance", "type", element.getTypeElement(), -1);
2437    }
2438    for (int i = 0; i < element.getCategory().size(); i++) {
2439      composeEnum(t, "AllergyIntolerance", "category", element.getCategory().get(i), i);
2440    }
2441    if (element.hasCriticalityElement()) {
2442      composeEnum(t, "AllergyIntolerance", "criticality", element.getCriticalityElement(), -1);
2443    }
2444    if (element.hasCode()) {
2445      composeCodeableConcept(t, "AllergyIntolerance", "code", element.getCode(), -1);
2446    }
2447    if (element.hasPatient()) {
2448      composeReference(t, "AllergyIntolerance", "patient", element.getPatient(), -1);
2449    }
2450    if (element.hasEncounter()) {
2451      composeReference(t, "AllergyIntolerance", "encounter", element.getEncounter(), -1);
2452    }
2453    if (element.hasOnset()) {
2454      composeType(t, "AllergyIntolerance", "onset", element.getOnset(), -1);
2455    }
2456    if (element.hasRecordedDateElement()) {
2457      composeDateTime(t, "AllergyIntolerance", "recordedDate", element.getRecordedDateElement(), -1);
2458    }
2459    if (element.hasRecorder()) {
2460      composeReference(t, "AllergyIntolerance", "recorder", element.getRecorder(), -1);
2461    }
2462    if (element.hasAsserter()) {
2463      composeReference(t, "AllergyIntolerance", "asserter", element.getAsserter(), -1);
2464    }
2465    if (element.hasLastOccurrenceElement()) {
2466      composeDateTime(t, "AllergyIntolerance", "lastOccurrence", element.getLastOccurrenceElement(), -1);
2467    }
2468    for (int i = 0; i < element.getNote().size(); i++) {
2469      composeAnnotation(t, "AllergyIntolerance", "note", element.getNote().get(i), i);
2470    }
2471    for (int i = 0; i < element.getReaction().size(); i++) {
2472      composeAllergyIntoleranceReactionComponent(t, "AllergyIntolerance", "reaction", element.getReaction().get(i), i);
2473    }
2474  }
2475
2476  protected void composeAllergyIntoleranceReactionComponent(Complex parent, String parentType, String name, AllergyIntolerance.AllergyIntoleranceReactionComponent element, int index) {
2477    if (element == null) 
2478      return;
2479    Complex t;
2480    if (Utilities.noString(parentType))
2481      t = parent;
2482    else {
2483      t = parent.predicate("fhir:"+parentType+'.'+name);
2484    }
2485    composeBackboneElement(t, "reaction", name, element, index);
2486    if (element.hasSubstance()) {
2487      composeCodeableConcept(t, "AllergyIntoleranceReactionComponent", "substance", element.getSubstance(), -1);
2488    }
2489    for (int i = 0; i < element.getManifestation().size(); i++) {
2490      composeCodeableReference(t, "AllergyIntoleranceReactionComponent", "manifestation", element.getManifestation().get(i), i);
2491    }
2492    if (element.hasDescriptionElement()) {
2493      composeString(t, "AllergyIntoleranceReactionComponent", "description", element.getDescriptionElement(), -1);
2494    }
2495    if (element.hasOnsetElement()) {
2496      composeDateTime(t, "AllergyIntoleranceReactionComponent", "onset", element.getOnsetElement(), -1);
2497    }
2498    if (element.hasSeverityElement()) {
2499      composeEnum(t, "AllergyIntoleranceReactionComponent", "severity", element.getSeverityElement(), -1);
2500    }
2501    if (element.hasExposureRoute()) {
2502      composeCodeableConcept(t, "AllergyIntoleranceReactionComponent", "exposureRoute", element.getExposureRoute(), -1);
2503    }
2504    for (int i = 0; i < element.getNote().size(); i++) {
2505      composeAnnotation(t, "AllergyIntoleranceReactionComponent", "note", element.getNote().get(i), i);
2506    }
2507  }
2508
2509  protected void composeAppointment(Complex parent, String parentType, String name, Appointment element, int index) {
2510    if (element == null) 
2511      return;
2512    Complex t;
2513    if (Utilities.noString(parentType))
2514      t = parent;
2515    else {
2516      t = parent.predicate("fhir:"+parentType+'.'+name);
2517    }
2518    composeDomainResource(t, "Appointment", name, element, index);
2519    for (int i = 0; i < element.getIdentifier().size(); i++) {
2520      composeIdentifier(t, "Appointment", "identifier", element.getIdentifier().get(i), i);
2521    }
2522    if (element.hasStatusElement()) {
2523      composeEnum(t, "Appointment", "status", element.getStatusElement(), -1);
2524    }
2525    if (element.hasCancellationReason()) {
2526      composeCodeableConcept(t, "Appointment", "cancellationReason", element.getCancellationReason(), -1);
2527    }
2528    for (int i = 0; i < element.getServiceCategory().size(); i++) {
2529      composeCodeableConcept(t, "Appointment", "serviceCategory", element.getServiceCategory().get(i), i);
2530    }
2531    for (int i = 0; i < element.getServiceType().size(); i++) {
2532      composeCodeableConcept(t, "Appointment", "serviceType", element.getServiceType().get(i), i);
2533    }
2534    for (int i = 0; i < element.getSpecialty().size(); i++) {
2535      composeCodeableConcept(t, "Appointment", "specialty", element.getSpecialty().get(i), i);
2536    }
2537    if (element.hasAppointmentType()) {
2538      composeCodeableConcept(t, "Appointment", "appointmentType", element.getAppointmentType(), -1);
2539    }
2540    for (int i = 0; i < element.getReason().size(); i++) {
2541      composeCodeableReference(t, "Appointment", "reason", element.getReason().get(i), i);
2542    }
2543    if (element.hasPriority()) {
2544      composeCodeableConcept(t, "Appointment", "priority", element.getPriority(), -1);
2545    }
2546    if (element.hasDescriptionElement()) {
2547      composeString(t, "Appointment", "description", element.getDescriptionElement(), -1);
2548    }
2549    for (int i = 0; i < element.getReplaces().size(); i++) {
2550      composeReference(t, "Appointment", "replaces", element.getReplaces().get(i), i);
2551    }
2552    for (int i = 0; i < element.getSupportingInformation().size(); i++) {
2553      composeReference(t, "Appointment", "supportingInformation", element.getSupportingInformation().get(i), i);
2554    }
2555    if (element.hasStartElement()) {
2556      composeInstant(t, "Appointment", "start", element.getStartElement(), -1);
2557    }
2558    if (element.hasEndElement()) {
2559      composeInstant(t, "Appointment", "end", element.getEndElement(), -1);
2560    }
2561    if (element.hasMinutesDurationElement()) {
2562      composePositiveInt(t, "Appointment", "minutesDuration", element.getMinutesDurationElement(), -1);
2563    }
2564    for (int i = 0; i < element.getSlot().size(); i++) {
2565      composeReference(t, "Appointment", "slot", element.getSlot().get(i), i);
2566    }
2567    for (int i = 0; i < element.getAccount().size(); i++) {
2568      composeReference(t, "Appointment", "account", element.getAccount().get(i), i);
2569    }
2570    if (element.hasCreatedElement()) {
2571      composeDateTime(t, "Appointment", "created", element.getCreatedElement(), -1);
2572    }
2573    for (int i = 0; i < element.getNote().size(); i++) {
2574      composeAnnotation(t, "Appointment", "note", element.getNote().get(i), i);
2575    }
2576    for (int i = 0; i < element.getPatientInstruction().size(); i++) {
2577      composeCodeableReference(t, "Appointment", "patientInstruction", element.getPatientInstruction().get(i), i);
2578    }
2579    for (int i = 0; i < element.getBasedOn().size(); i++) {
2580      composeReference(t, "Appointment", "basedOn", element.getBasedOn().get(i), i);
2581    }
2582    if (element.hasSubject()) {
2583      composeReference(t, "Appointment", "subject", element.getSubject(), -1);
2584    }
2585    for (int i = 0; i < element.getParticipant().size(); i++) {
2586      composeAppointmentParticipantComponent(t, "Appointment", "participant", element.getParticipant().get(i), i);
2587    }
2588    for (int i = 0; i < element.getRequestedPeriod().size(); i++) {
2589      composePeriod(t, "Appointment", "requestedPeriod", element.getRequestedPeriod().get(i), i);
2590    }
2591  }
2592
2593  protected void composeAppointmentParticipantComponent(Complex parent, String parentType, String name, Appointment.AppointmentParticipantComponent element, int index) {
2594    if (element == null) 
2595      return;
2596    Complex t;
2597    if (Utilities.noString(parentType))
2598      t = parent;
2599    else {
2600      t = parent.predicate("fhir:"+parentType+'.'+name);
2601    }
2602    composeBackboneElement(t, "participant", name, element, index);
2603    for (int i = 0; i < element.getType().size(); i++) {
2604      composeCodeableConcept(t, "AppointmentParticipantComponent", "type", element.getType().get(i), i);
2605    }
2606    if (element.hasPeriod()) {
2607      composePeriod(t, "AppointmentParticipantComponent", "period", element.getPeriod(), -1);
2608    }
2609    if (element.hasActor()) {
2610      composeReference(t, "AppointmentParticipantComponent", "actor", element.getActor(), -1);
2611    }
2612    if (element.hasRequiredElement()) {
2613      composeBoolean(t, "AppointmentParticipantComponent", "required", element.getRequiredElement(), -1);
2614    }
2615    if (element.hasStatusElement()) {
2616      composeEnum(t, "AppointmentParticipantComponent", "status", element.getStatusElement(), -1);
2617    }
2618  }
2619
2620  protected void composeAppointmentResponse(Complex parent, String parentType, String name, AppointmentResponse element, int index) {
2621    if (element == null) 
2622      return;
2623    Complex t;
2624    if (Utilities.noString(parentType))
2625      t = parent;
2626    else {
2627      t = parent.predicate("fhir:"+parentType+'.'+name);
2628    }
2629    composeDomainResource(t, "AppointmentResponse", name, element, index);
2630    for (int i = 0; i < element.getIdentifier().size(); i++) {
2631      composeIdentifier(t, "AppointmentResponse", "identifier", element.getIdentifier().get(i), i);
2632    }
2633    if (element.hasAppointment()) {
2634      composeReference(t, "AppointmentResponse", "appointment", element.getAppointment(), -1);
2635    }
2636    if (element.hasStartElement()) {
2637      composeInstant(t, "AppointmentResponse", "start", element.getStartElement(), -1);
2638    }
2639    if (element.hasEndElement()) {
2640      composeInstant(t, "AppointmentResponse", "end", element.getEndElement(), -1);
2641    }
2642    for (int i = 0; i < element.getParticipantType().size(); i++) {
2643      composeCodeableConcept(t, "AppointmentResponse", "participantType", element.getParticipantType().get(i), i);
2644    }
2645    if (element.hasActor()) {
2646      composeReference(t, "AppointmentResponse", "actor", element.getActor(), -1);
2647    }
2648    if (element.hasParticipantStatusElement()) {
2649      composeEnum(t, "AppointmentResponse", "participantStatus", element.getParticipantStatusElement(), -1);
2650    }
2651    if (element.hasCommentElement()) {
2652      composeString(t, "AppointmentResponse", "comment", element.getCommentElement(), -1);
2653    }
2654  }
2655
2656  protected void composeArtifactAssessment(Complex parent, String parentType, String name, ArtifactAssessment element, int index) {
2657    if (element == null) 
2658      return;
2659    Complex t;
2660    if (Utilities.noString(parentType))
2661      t = parent;
2662    else {
2663      t = parent.predicate("fhir:"+parentType+'.'+name);
2664    }
2665    composeMetadataResource(t, "ArtifactAssessment", name, element, index);
2666    for (int i = 0; i < element.getIdentifier().size(); i++) {
2667      composeIdentifier(t, "ArtifactAssessment", "identifier", element.getIdentifier().get(i), i);
2668    }
2669    if (element.hasCiteAs()) {
2670      composeType(t, "ArtifactAssessment", "citeAs", element.getCiteAs(), -1);
2671    }
2672    if (element.hasDateElement()) {
2673      composeDateTime(t, "ArtifactAssessment", "date", element.getDateElement(), -1);
2674    }
2675    if (element.hasCopyrightElement()) {
2676      composeMarkdown(t, "ArtifactAssessment", "copyright", element.getCopyrightElement(), -1);
2677    }
2678    if (element.hasApprovalDateElement()) {
2679      composeDate(t, "ArtifactAssessment", "approvalDate", element.getApprovalDateElement(), -1);
2680    }
2681    if (element.hasLastReviewDateElement()) {
2682      composeDate(t, "ArtifactAssessment", "lastReviewDate", element.getLastReviewDateElement(), -1);
2683    }
2684    if (element.hasArtifact()) {
2685      composeType(t, "ArtifactAssessment", "artifact", element.getArtifact(), -1);
2686    }
2687    for (int i = 0; i < element.getContent().size(); i++) {
2688      composeArtifactAssessmentContentComponent(t, "ArtifactAssessment", "content", element.getContent().get(i), i);
2689    }
2690    if (element.hasWorkflowStatusElement()) {
2691      composeEnum(t, "ArtifactAssessment", "workflowStatus", element.getWorkflowStatusElement(), -1);
2692    }
2693    if (element.hasDispositionElement()) {
2694      composeEnum(t, "ArtifactAssessment", "disposition", element.getDispositionElement(), -1);
2695    }
2696  }
2697
2698  protected void composeArtifactAssessmentContentComponent(Complex parent, String parentType, String name, ArtifactAssessment.ArtifactAssessmentContentComponent element, int index) {
2699    if (element == null) 
2700      return;
2701    Complex t;
2702    if (Utilities.noString(parentType))
2703      t = parent;
2704    else {
2705      t = parent.predicate("fhir:"+parentType+'.'+name);
2706    }
2707    composeBackboneElement(t, "content", name, element, index);
2708    if (element.hasInformationTypeElement()) {
2709      composeEnum(t, "ArtifactAssessmentContentComponent", "informationType", element.getInformationTypeElement(), -1);
2710    }
2711    if (element.hasSummaryElement()) {
2712      composeMarkdown(t, "ArtifactAssessmentContentComponent", "summary", element.getSummaryElement(), -1);
2713    }
2714    if (element.hasType()) {
2715      composeCodeableConcept(t, "ArtifactAssessmentContentComponent", "type", element.getType(), -1);
2716    }
2717    for (int i = 0; i < element.getClassifier().size(); i++) {
2718      composeCodeableConcept(t, "ArtifactAssessmentContentComponent", "classifier", element.getClassifier().get(i), i);
2719    }
2720    if (element.hasAuthor()) {
2721      composeReference(t, "ArtifactAssessmentContentComponent", "author", element.getAuthor(), -1);
2722    }
2723    for (int i = 0; i < element.getPath().size(); i++) {
2724      composeUri(t, "ArtifactAssessmentContentComponent", "path", element.getPath().get(i), i);
2725    }
2726    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
2727      composeRelatedArtifact(t, "ArtifactAssessmentContentComponent", "relatedArtifact", element.getRelatedArtifact().get(i), i);
2728    }
2729    if (element.hasFreeToShareElement()) {
2730      composeBoolean(t, "ArtifactAssessmentContentComponent", "freeToShare", element.getFreeToShareElement(), -1);
2731    }
2732    for (int i = 0; i < element.getComponent().size(); i++) {
2733      composeArtifactAssessmentContentComponent(t, "ArtifactAssessmentContentComponent", "component", element.getComponent().get(i), i);
2734    }
2735  }
2736
2737  protected void composeAuditEvent(Complex parent, String parentType, String name, AuditEvent element, int index) {
2738    if (element == null) 
2739      return;
2740    Complex t;
2741    if (Utilities.noString(parentType))
2742      t = parent;
2743    else {
2744      t = parent.predicate("fhir:"+parentType+'.'+name);
2745    }
2746    composeDomainResource(t, "AuditEvent", name, element, index);
2747    for (int i = 0; i < element.getCategory().size(); i++) {
2748      composeCodeableConcept(t, "AuditEvent", "category", element.getCategory().get(i), i);
2749    }
2750    if (element.hasCode()) {
2751      composeCodeableConcept(t, "AuditEvent", "code", element.getCode(), -1);
2752    }
2753    if (element.hasActionElement()) {
2754      composeEnum(t, "AuditEvent", "action", element.getActionElement(), -1);
2755    }
2756    if (element.hasSeverityElement()) {
2757      composeEnum(t, "AuditEvent", "severity", element.getSeverityElement(), -1);
2758    }
2759    if (element.hasOccurred()) {
2760      composeType(t, "AuditEvent", "occurred", element.getOccurred(), -1);
2761    }
2762    if (element.hasRecordedElement()) {
2763      composeInstant(t, "AuditEvent", "recorded", element.getRecordedElement(), -1);
2764    }
2765    if (element.hasOutcome()) {
2766      composeAuditEventOutcomeComponent(t, "AuditEvent", "outcome", element.getOutcome(), -1);
2767    }
2768    for (int i = 0; i < element.getAuthorization().size(); i++) {
2769      composeCodeableConcept(t, "AuditEvent", "authorization", element.getAuthorization().get(i), i);
2770    }
2771    for (int i = 0; i < element.getBasedOn().size(); i++) {
2772      composeReference(t, "AuditEvent", "basedOn", element.getBasedOn().get(i), i);
2773    }
2774    if (element.hasEncounter()) {
2775      composeReference(t, "AuditEvent", "encounter", element.getEncounter(), -1);
2776    }
2777    for (int i = 0; i < element.getAgent().size(); i++) {
2778      composeAuditEventAgentComponent(t, "AuditEvent", "agent", element.getAgent().get(i), i);
2779    }
2780    if (element.hasSource()) {
2781      composeAuditEventSourceComponent(t, "AuditEvent", "source", element.getSource(), -1);
2782    }
2783    for (int i = 0; i < element.getEntity().size(); i++) {
2784      composeAuditEventEntityComponent(t, "AuditEvent", "entity", element.getEntity().get(i), i);
2785    }
2786  }
2787
2788  protected void composeAuditEventOutcomeComponent(Complex parent, String parentType, String name, AuditEvent.AuditEventOutcomeComponent element, int index) {
2789    if (element == null) 
2790      return;
2791    Complex t;
2792    if (Utilities.noString(parentType))
2793      t = parent;
2794    else {
2795      t = parent.predicate("fhir:"+parentType+'.'+name);
2796    }
2797    composeBackboneElement(t, "outcome", name, element, index);
2798    if (element.hasCode()) {
2799      composeCoding(t, "AuditEventOutcomeComponent", "code", element.getCode(), -1);
2800    }
2801    for (int i = 0; i < element.getDetail().size(); i++) {
2802      composeCodeableConcept(t, "AuditEventOutcomeComponent", "detail", element.getDetail().get(i), i);
2803    }
2804  }
2805
2806  protected void composeAuditEventAgentComponent(Complex parent, String parentType, String name, AuditEvent.AuditEventAgentComponent element, int index) {
2807    if (element == null) 
2808      return;
2809    Complex t;
2810    if (Utilities.noString(parentType))
2811      t = parent;
2812    else {
2813      t = parent.predicate("fhir:"+parentType+'.'+name);
2814    }
2815    composeBackboneElement(t, "agent", name, element, index);
2816    if (element.hasType()) {
2817      composeCodeableConcept(t, "AuditEventAgentComponent", "type", element.getType(), -1);
2818    }
2819    for (int i = 0; i < element.getRole().size(); i++) {
2820      composeCodeableConcept(t, "AuditEventAgentComponent", "role", element.getRole().get(i), i);
2821    }
2822    if (element.hasWho()) {
2823      composeReference(t, "AuditEventAgentComponent", "who", element.getWho(), -1);
2824    }
2825    if (element.hasRequestorElement()) {
2826      composeBoolean(t, "AuditEventAgentComponent", "requestor", element.getRequestorElement(), -1);
2827    }
2828    if (element.hasLocation()) {
2829      composeReference(t, "AuditEventAgentComponent", "location", element.getLocation(), -1);
2830    }
2831    for (int i = 0; i < element.getPolicy().size(); i++) {
2832      composeUri(t, "AuditEventAgentComponent", "policy", element.getPolicy().get(i), i);
2833    }
2834    if (element.hasNetwork()) {
2835      composeType(t, "AuditEventAgentComponent", "network", element.getNetwork(), -1);
2836    }
2837    for (int i = 0; i < element.getAuthorization().size(); i++) {
2838      composeCodeableConcept(t, "AuditEventAgentComponent", "authorization", element.getAuthorization().get(i), i);
2839    }
2840  }
2841
2842  protected void composeAuditEventSourceComponent(Complex parent, String parentType, String name, AuditEvent.AuditEventSourceComponent element, int index) {
2843    if (element == null) 
2844      return;
2845    Complex t;
2846    if (Utilities.noString(parentType))
2847      t = parent;
2848    else {
2849      t = parent.predicate("fhir:"+parentType+'.'+name);
2850    }
2851    composeBackboneElement(t, "source", name, element, index);
2852    if (element.hasSite()) {
2853      composeReference(t, "AuditEventSourceComponent", "site", element.getSite(), -1);
2854    }
2855    if (element.hasObserver()) {
2856      composeReference(t, "AuditEventSourceComponent", "observer", element.getObserver(), -1);
2857    }
2858    for (int i = 0; i < element.getType().size(); i++) {
2859      composeCodeableConcept(t, "AuditEventSourceComponent", "type", element.getType().get(i), i);
2860    }
2861  }
2862
2863  protected void composeAuditEventEntityComponent(Complex parent, String parentType, String name, AuditEvent.AuditEventEntityComponent element, int index) {
2864    if (element == null) 
2865      return;
2866    Complex t;
2867    if (Utilities.noString(parentType))
2868      t = parent;
2869    else {
2870      t = parent.predicate("fhir:"+parentType+'.'+name);
2871    }
2872    composeBackboneElement(t, "entity", name, element, index);
2873    if (element.hasWhat()) {
2874      composeReference(t, "AuditEventEntityComponent", "what", element.getWhat(), -1);
2875    }
2876    if (element.hasRole()) {
2877      composeCodeableConcept(t, "AuditEventEntityComponent", "role", element.getRole(), -1);
2878    }
2879    for (int i = 0; i < element.getSecurityLabel().size(); i++) {
2880      composeCodeableConcept(t, "AuditEventEntityComponent", "securityLabel", element.getSecurityLabel().get(i), i);
2881    }
2882    if (element.hasQueryElement()) {
2883      composeBase64Binary(t, "AuditEventEntityComponent", "query", element.getQueryElement(), -1);
2884    }
2885    for (int i = 0; i < element.getDetail().size(); i++) {
2886      composeAuditEventEntityDetailComponent(t, "AuditEventEntityComponent", "detail", element.getDetail().get(i), i);
2887    }
2888    for (int i = 0; i < element.getAgent().size(); i++) {
2889      composeAuditEventAgentComponent(t, "AuditEventEntityComponent", "agent", element.getAgent().get(i), i);
2890    }
2891  }
2892
2893  protected void composeAuditEventEntityDetailComponent(Complex parent, String parentType, String name, AuditEvent.AuditEventEntityDetailComponent element, int index) {
2894    if (element == null) 
2895      return;
2896    Complex t;
2897    if (Utilities.noString(parentType))
2898      t = parent;
2899    else {
2900      t = parent.predicate("fhir:"+parentType+'.'+name);
2901    }
2902    composeBackboneElement(t, "detail", name, element, index);
2903    if (element.hasType()) {
2904      composeCodeableConcept(t, "AuditEventEntityDetailComponent", "type", element.getType(), -1);
2905    }
2906    if (element.hasValue()) {
2907      composeType(t, "AuditEventEntityDetailComponent", "value", element.getValue(), -1);
2908    }
2909  }
2910
2911  protected void composeBasic(Complex parent, String parentType, String name, Basic element, int index) {
2912    if (element == null) 
2913      return;
2914    Complex t;
2915    if (Utilities.noString(parentType))
2916      t = parent;
2917    else {
2918      t = parent.predicate("fhir:"+parentType+'.'+name);
2919    }
2920    composeDomainResource(t, "Basic", name, element, index);
2921    for (int i = 0; i < element.getIdentifier().size(); i++) {
2922      composeIdentifier(t, "Basic", "identifier", element.getIdentifier().get(i), i);
2923    }
2924    if (element.hasCode()) {
2925      composeCodeableConcept(t, "Basic", "code", element.getCode(), -1);
2926    }
2927    if (element.hasSubject()) {
2928      composeReference(t, "Basic", "subject", element.getSubject(), -1);
2929    }
2930    if (element.hasCreatedElement()) {
2931      composeDate(t, "Basic", "created", element.getCreatedElement(), -1);
2932    }
2933    if (element.hasAuthor()) {
2934      composeReference(t, "Basic", "author", element.getAuthor(), -1);
2935    }
2936  }
2937
2938  protected void composeBinary(Complex parent, String parentType, String name, Binary element, int index) {
2939    if (element == null) 
2940      return;
2941    Complex t;
2942    if (Utilities.noString(parentType))
2943      t = parent;
2944    else {
2945      t = parent.predicate("fhir:"+parentType+'.'+name);
2946    }
2947    composeResource(t, "Binary", name, element, index);
2948    if (element.hasContentTypeElement()) {
2949      composeCode(t, "Binary", "contentType", element.getContentTypeElement(), -1);
2950    }
2951    if (element.hasSecurityContext()) {
2952      composeReference(t, "Binary", "securityContext", element.getSecurityContext(), -1);
2953    }
2954    if (element.hasDataElement()) {
2955      composeBase64Binary(t, "Binary", "data", element.getDataElement(), -1);
2956    }
2957  }
2958
2959  protected void composeBiologicallyDerivedProduct(Complex parent, String parentType, String name, BiologicallyDerivedProduct element, int index) {
2960    if (element == null) 
2961      return;
2962    Complex t;
2963    if (Utilities.noString(parentType))
2964      t = parent;
2965    else {
2966      t = parent.predicate("fhir:"+parentType+'.'+name);
2967    }
2968    composeDomainResource(t, "BiologicallyDerivedProduct", name, element, index);
2969    if (element.hasProductCategoryElement()) {
2970      composeEnum(t, "BiologicallyDerivedProduct", "productCategory", element.getProductCategoryElement(), -1);
2971    }
2972    if (element.hasProductCode()) {
2973      composeCodeableConcept(t, "BiologicallyDerivedProduct", "productCode", element.getProductCode(), -1);
2974    }
2975    for (int i = 0; i < element.getParent().size(); i++) {
2976      composeReference(t, "BiologicallyDerivedProduct", "parent", element.getParent().get(i), i);
2977    }
2978    for (int i = 0; i < element.getRequest().size(); i++) {
2979      composeReference(t, "BiologicallyDerivedProduct", "request", element.getRequest().get(i), i);
2980    }
2981    for (int i = 0; i < element.getIdentifier().size(); i++) {
2982      composeIdentifier(t, "BiologicallyDerivedProduct", "identifier", element.getIdentifier().get(i), i);
2983    }
2984    if (element.hasBiologicalSource()) {
2985      composeIdentifier(t, "BiologicallyDerivedProduct", "biologicalSource", element.getBiologicalSource(), -1);
2986    }
2987    for (int i = 0; i < element.getProcessingFacility().size(); i++) {
2988      composeReference(t, "BiologicallyDerivedProduct", "processingFacility", element.getProcessingFacility().get(i), i);
2989    }
2990    if (element.hasDivisionElement()) {
2991      composeString(t, "BiologicallyDerivedProduct", "division", element.getDivisionElement(), -1);
2992    }
2993    if (element.hasStatusElement()) {
2994      composeEnum(t, "BiologicallyDerivedProduct", "status", element.getStatusElement(), -1);
2995    }
2996    if (element.hasExpirationDateElement()) {
2997      composeDateTime(t, "BiologicallyDerivedProduct", "expirationDate", element.getExpirationDateElement(), -1);
2998    }
2999    if (element.hasCollection()) {
3000      composeBiologicallyDerivedProductCollectionComponent(t, "BiologicallyDerivedProduct", "collection", element.getCollection(), -1);
3001    }
3002    if (element.hasStorageTempRequirements()) {
3003      composeRange(t, "BiologicallyDerivedProduct", "storageTempRequirements", element.getStorageTempRequirements(), -1);
3004    }
3005    for (int i = 0; i < element.getProperty().size(); i++) {
3006      composeBiologicallyDerivedProductPropertyComponent(t, "BiologicallyDerivedProduct", "property", element.getProperty().get(i), i);
3007    }
3008  }
3009
3010  protected void composeBiologicallyDerivedProductCollectionComponent(Complex parent, String parentType, String name, BiologicallyDerivedProduct.BiologicallyDerivedProductCollectionComponent element, int index) {
3011    if (element == null) 
3012      return;
3013    Complex t;
3014    if (Utilities.noString(parentType))
3015      t = parent;
3016    else {
3017      t = parent.predicate("fhir:"+parentType+'.'+name);
3018    }
3019    composeBackboneElement(t, "collection", name, element, index);
3020    if (element.hasCollector()) {
3021      composeReference(t, "BiologicallyDerivedProductCollectionComponent", "collector", element.getCollector(), -1);
3022    }
3023    if (element.hasSource()) {
3024      composeReference(t, "BiologicallyDerivedProductCollectionComponent", "source", element.getSource(), -1);
3025    }
3026    if (element.hasCollected()) {
3027      composeType(t, "BiologicallyDerivedProductCollectionComponent", "collected", element.getCollected(), -1);
3028    }
3029  }
3030
3031  protected void composeBiologicallyDerivedProductPropertyComponent(Complex parent, String parentType, String name, BiologicallyDerivedProduct.BiologicallyDerivedProductPropertyComponent element, int index) {
3032    if (element == null) 
3033      return;
3034    Complex t;
3035    if (Utilities.noString(parentType))
3036      t = parent;
3037    else {
3038      t = parent.predicate("fhir:"+parentType+'.'+name);
3039    }
3040    composeBackboneElement(t, "property", name, element, index);
3041    if (element.hasType()) {
3042      composeCodeableConcept(t, "BiologicallyDerivedProductPropertyComponent", "type", element.getType(), -1);
3043    }
3044    if (element.hasValue()) {
3045      composeType(t, "BiologicallyDerivedProductPropertyComponent", "value", element.getValue(), -1);
3046    }
3047  }
3048
3049  protected void composeBodyStructure(Complex parent, String parentType, String name, BodyStructure element, int index) {
3050    if (element == null) 
3051      return;
3052    Complex t;
3053    if (Utilities.noString(parentType))
3054      t = parent;
3055    else {
3056      t = parent.predicate("fhir:"+parentType+'.'+name);
3057    }
3058    composeDomainResource(t, "BodyStructure", name, element, index);
3059    for (int i = 0; i < element.getIdentifier().size(); i++) {
3060      composeIdentifier(t, "BodyStructure", "identifier", element.getIdentifier().get(i), i);
3061    }
3062    if (element.hasActiveElement()) {
3063      composeBoolean(t, "BodyStructure", "active", element.getActiveElement(), -1);
3064    }
3065    if (element.hasMorphology()) {
3066      composeCodeableConcept(t, "BodyStructure", "morphology", element.getMorphology(), -1);
3067    }
3068    if (element.hasLocation()) {
3069      composeCodeableConcept(t, "BodyStructure", "location", element.getLocation(), -1);
3070    }
3071    for (int i = 0; i < element.getIncludedStructure().size(); i++) {
3072      composeBodyStructureIncludedStructureComponent(t, "BodyStructure", "includedStructure", element.getIncludedStructure().get(i), i);
3073    }
3074    for (int i = 0; i < element.getExcludedStructure().size(); i++) {
3075      composeBodyStructureExcludedStructureComponent(t, "BodyStructure", "excludedStructure", element.getExcludedStructure().get(i), i);
3076    }
3077    if (element.hasDescriptionElement()) {
3078      composeString(t, "BodyStructure", "description", element.getDescriptionElement(), -1);
3079    }
3080    for (int i = 0; i < element.getImage().size(); i++) {
3081      composeAttachment(t, "BodyStructure", "image", element.getImage().get(i), i);
3082    }
3083    if (element.hasPatient()) {
3084      composeReference(t, "BodyStructure", "patient", element.getPatient(), -1);
3085    }
3086  }
3087
3088  protected void composeBodyStructureIncludedStructureComponent(Complex parent, String parentType, String name, BodyStructure.BodyStructureIncludedStructureComponent element, int index) {
3089    if (element == null) 
3090      return;
3091    Complex t;
3092    if (Utilities.noString(parentType))
3093      t = parent;
3094    else {
3095      t = parent.predicate("fhir:"+parentType+'.'+name);
3096    }
3097    composeBackboneElement(t, "includedStructure", name, element, index);
3098    if (element.hasStructure()) {
3099      composeCodeableConcept(t, "BodyStructureIncludedStructureComponent", "structure", element.getStructure(), -1);
3100    }
3101    if (element.hasLaterality()) {
3102      composeCodeableConcept(t, "BodyStructureIncludedStructureComponent", "laterality", element.getLaterality(), -1);
3103    }
3104    for (int i = 0; i < element.getQualifier().size(); i++) {
3105      composeCodeableConcept(t, "BodyStructureIncludedStructureComponent", "qualifier", element.getQualifier().get(i), i);
3106    }
3107  }
3108
3109  protected void composeBodyStructureExcludedStructureComponent(Complex parent, String parentType, String name, BodyStructure.BodyStructureExcludedStructureComponent element, int index) {
3110    if (element == null) 
3111      return;
3112    Complex t;
3113    if (Utilities.noString(parentType))
3114      t = parent;
3115    else {
3116      t = parent.predicate("fhir:"+parentType+'.'+name);
3117    }
3118    composeBackboneElement(t, "excludedStructure", name, element, index);
3119    if (element.hasStructure()) {
3120      composeCodeableConcept(t, "BodyStructureExcludedStructureComponent", "structure", element.getStructure(), -1);
3121    }
3122    if (element.hasLaterality()) {
3123      composeCodeableConcept(t, "BodyStructureExcludedStructureComponent", "laterality", element.getLaterality(), -1);
3124    }
3125    for (int i = 0; i < element.getQualifier().size(); i++) {
3126      composeCodeableConcept(t, "BodyStructureExcludedStructureComponent", "qualifier", element.getQualifier().get(i), i);
3127    }
3128  }
3129
3130  protected void composeBundle(Complex parent, String parentType, String name, Bundle element, int index) {
3131    if (element == null) 
3132      return;
3133    Complex t;
3134    if (Utilities.noString(parentType))
3135      t = parent;
3136    else {
3137      t = parent.predicate("fhir:"+parentType+'.'+name);
3138    }
3139    composeResource(t, "Bundle", name, element, index);
3140    if (element.hasIdentifier()) {
3141      composeIdentifier(t, "Bundle", "identifier", element.getIdentifier(), -1);
3142    }
3143    if (element.hasTypeElement()) {
3144      composeEnum(t, "Bundle", "type", element.getTypeElement(), -1);
3145    }
3146    if (element.hasTimestampElement()) {
3147      composeInstant(t, "Bundle", "timestamp", element.getTimestampElement(), -1);
3148    }
3149    if (element.hasTotalElement()) {
3150      composeUnsignedInt(t, "Bundle", "total", element.getTotalElement(), -1);
3151    }
3152    for (int i = 0; i < element.getLink().size(); i++) {
3153      composeBundleLinkComponent(t, "Bundle", "link", element.getLink().get(i), i);
3154    }
3155    for (int i = 0; i < element.getEntry().size(); i++) {
3156      composeBundleEntryComponent(t, "Bundle", "entry", element.getEntry().get(i), i);
3157    }
3158    if (element.hasSignature()) {
3159      composeSignature(t, "Bundle", "signature", element.getSignature(), -1);
3160    }
3161  }
3162
3163  protected void composeBundleLinkComponent(Complex parent, String parentType, String name, Bundle.BundleLinkComponent element, int index) {
3164    if (element == null) 
3165      return;
3166    Complex t;
3167    if (Utilities.noString(parentType))
3168      t = parent;
3169    else {
3170      t = parent.predicate("fhir:"+parentType+'.'+name);
3171    }
3172    composeBackboneElement(t, "link", name, element, index);
3173    if (element.hasRelationElement()) {
3174      composeString(t, "BundleLinkComponent", "relation", element.getRelationElement(), -1);
3175    }
3176    if (element.hasUrlElement()) {
3177      composeUri(t, "BundleLinkComponent", "url", element.getUrlElement(), -1);
3178    }
3179  }
3180
3181  protected void composeBundleEntryComponent(Complex parent, String parentType, String name, Bundle.BundleEntryComponent element, int index) {
3182    if (element == null) 
3183      return;
3184    Complex t;
3185    if (Utilities.noString(parentType))
3186      t = parent;
3187    else {
3188      t = parent.predicate("fhir:"+parentType+'.'+name);
3189    }
3190    composeBackboneElement(t, "entry", name, element, index);
3191    for (int i = 0; i < element.getLink().size(); i++) {
3192      composeBundleLinkComponent(t, "BundleEntryComponent", "link", element.getLink().get(i), i);
3193    }
3194    if (element.hasFullUrlElement()) {
3195      composeUri(t, "BundleEntryComponent", "fullUrl", element.getFullUrlElement(), -1);
3196    }
3197    if (element.hasResource()) {
3198      composeResource(t, "BundleEntryComponent", "resource", element.getResource(), -1);
3199    }
3200    if (element.hasSearch()) {
3201      composeBundleEntrySearchComponent(t, "BundleEntryComponent", "search", element.getSearch(), -1);
3202    }
3203    if (element.hasRequest()) {
3204      composeBundleEntryRequestComponent(t, "BundleEntryComponent", "request", element.getRequest(), -1);
3205    }
3206    if (element.hasResponse()) {
3207      composeBundleEntryResponseComponent(t, "BundleEntryComponent", "response", element.getResponse(), -1);
3208    }
3209  }
3210
3211  protected void composeBundleEntrySearchComponent(Complex parent, String parentType, String name, Bundle.BundleEntrySearchComponent element, int index) {
3212    if (element == null) 
3213      return;
3214    Complex t;
3215    if (Utilities.noString(parentType))
3216      t = parent;
3217    else {
3218      t = parent.predicate("fhir:"+parentType+'.'+name);
3219    }
3220    composeBackboneElement(t, "search", name, element, index);
3221    if (element.hasModeElement()) {
3222      composeEnum(t, "BundleEntrySearchComponent", "mode", element.getModeElement(), -1);
3223    }
3224    if (element.hasScoreElement()) {
3225      composeDecimal(t, "BundleEntrySearchComponent", "score", element.getScoreElement(), -1);
3226    }
3227  }
3228
3229  protected void composeBundleEntryRequestComponent(Complex parent, String parentType, String name, Bundle.BundleEntryRequestComponent element, int index) {
3230    if (element == null) 
3231      return;
3232    Complex t;
3233    if (Utilities.noString(parentType))
3234      t = parent;
3235    else {
3236      t = parent.predicate("fhir:"+parentType+'.'+name);
3237    }
3238    composeBackboneElement(t, "request", name, element, index);
3239    if (element.hasMethodElement()) {
3240      composeEnum(t, "BundleEntryRequestComponent", "method", element.getMethodElement(), -1);
3241    }
3242    if (element.hasUrlElement()) {
3243      composeUri(t, "BundleEntryRequestComponent", "url", element.getUrlElement(), -1);
3244    }
3245    if (element.hasIfNoneMatchElement()) {
3246      composeString(t, "BundleEntryRequestComponent", "ifNoneMatch", element.getIfNoneMatchElement(), -1);
3247    }
3248    if (element.hasIfModifiedSinceElement()) {
3249      composeInstant(t, "BundleEntryRequestComponent", "ifModifiedSince", element.getIfModifiedSinceElement(), -1);
3250    }
3251    if (element.hasIfMatchElement()) {
3252      composeString(t, "BundleEntryRequestComponent", "ifMatch", element.getIfMatchElement(), -1);
3253    }
3254    if (element.hasIfNoneExistElement()) {
3255      composeString(t, "BundleEntryRequestComponent", "ifNoneExist", element.getIfNoneExistElement(), -1);
3256    }
3257  }
3258
3259  protected void composeBundleEntryResponseComponent(Complex parent, String parentType, String name, Bundle.BundleEntryResponseComponent element, int index) {
3260    if (element == null) 
3261      return;
3262    Complex t;
3263    if (Utilities.noString(parentType))
3264      t = parent;
3265    else {
3266      t = parent.predicate("fhir:"+parentType+'.'+name);
3267    }
3268    composeBackboneElement(t, "response", name, element, index);
3269    if (element.hasStatusElement()) {
3270      composeString(t, "BundleEntryResponseComponent", "status", element.getStatusElement(), -1);
3271    }
3272    if (element.hasLocationElement()) {
3273      composeUri(t, "BundleEntryResponseComponent", "location", element.getLocationElement(), -1);
3274    }
3275    if (element.hasEtagElement()) {
3276      composeString(t, "BundleEntryResponseComponent", "etag", element.getEtagElement(), -1);
3277    }
3278    if (element.hasLastModifiedElement()) {
3279      composeInstant(t, "BundleEntryResponseComponent", "lastModified", element.getLastModifiedElement(), -1);
3280    }
3281    if (element.hasOutcome()) {
3282      composeResource(t, "BundleEntryResponseComponent", "outcome", element.getOutcome(), -1);
3283    }
3284  }
3285
3286  protected void composeCapabilityStatement(Complex parent, String parentType, String name, CapabilityStatement element, int index) {
3287    if (element == null) 
3288      return;
3289    Complex t;
3290    if (Utilities.noString(parentType))
3291      t = parent;
3292    else {
3293      t = parent.predicate("fhir:"+parentType+'.'+name);
3294    }
3295    composeCanonicalResource(t, "CapabilityStatement", name, element, index);
3296    if (element.hasUrlElement()) {
3297      composeUri(t, "CapabilityStatement", "url", element.getUrlElement(), -1);
3298    }
3299    if (element.hasVersionElement()) {
3300      composeString(t, "CapabilityStatement", "version", element.getVersionElement(), -1);
3301    }
3302    if (element.hasNameElement()) {
3303      composeString(t, "CapabilityStatement", "name", element.getNameElement(), -1);
3304    }
3305    if (element.hasTitleElement()) {
3306      composeString(t, "CapabilityStatement", "title", element.getTitleElement(), -1);
3307    }
3308    if (element.hasStatusElement()) {
3309      composeEnum(t, "CapabilityStatement", "status", element.getStatusElement(), -1);
3310    }
3311    if (element.hasExperimentalElement()) {
3312      composeBoolean(t, "CapabilityStatement", "experimental", element.getExperimentalElement(), -1);
3313    }
3314    if (element.hasDateElement()) {
3315      composeDateTime(t, "CapabilityStatement", "date", element.getDateElement(), -1);
3316    }
3317    if (element.hasPublisherElement()) {
3318      composeString(t, "CapabilityStatement", "publisher", element.getPublisherElement(), -1);
3319    }
3320    for (int i = 0; i < element.getContact().size(); i++) {
3321      composeContactDetail(t, "CapabilityStatement", "contact", element.getContact().get(i), i);
3322    }
3323    if (element.hasDescriptionElement()) {
3324      composeMarkdown(t, "CapabilityStatement", "description", element.getDescriptionElement(), -1);
3325    }
3326    for (int i = 0; i < element.getUseContext().size(); i++) {
3327      composeUsageContext(t, "CapabilityStatement", "useContext", element.getUseContext().get(i), i);
3328    }
3329    for (int i = 0; i < element.getJurisdiction().size(); i++) {
3330      composeCodeableConcept(t, "CapabilityStatement", "jurisdiction", element.getJurisdiction().get(i), i);
3331    }
3332    if (element.hasPurposeElement()) {
3333      composeMarkdown(t, "CapabilityStatement", "purpose", element.getPurposeElement(), -1);
3334    }
3335    if (element.hasCopyrightElement()) {
3336      composeMarkdown(t, "CapabilityStatement", "copyright", element.getCopyrightElement(), -1);
3337    }
3338    if (element.hasKindElement()) {
3339      composeEnum(t, "CapabilityStatement", "kind", element.getKindElement(), -1);
3340    }
3341    for (int i = 0; i < element.getInstantiates().size(); i++) {
3342      composeCanonical(t, "CapabilityStatement", "instantiates", element.getInstantiates().get(i), i);
3343    }
3344    for (int i = 0; i < element.getImports().size(); i++) {
3345      composeCanonical(t, "CapabilityStatement", "imports", element.getImports().get(i), i);
3346    }
3347    if (element.hasSoftware()) {
3348      composeCapabilityStatementSoftwareComponent(t, "CapabilityStatement", "software", element.getSoftware(), -1);
3349    }
3350    if (element.hasImplementation()) {
3351      composeCapabilityStatementImplementationComponent(t, "CapabilityStatement", "implementation", element.getImplementation(), -1);
3352    }
3353    if (element.hasFhirVersionElement()) {
3354      composeEnum(t, "CapabilityStatement", "fhirVersion", element.getFhirVersionElement(), -1);
3355    }
3356    for (int i = 0; i < element.getFormat().size(); i++) {
3357      composeCode(t, "CapabilityStatement", "format", element.getFormat().get(i), i);
3358    }
3359    for (int i = 0; i < element.getPatchFormat().size(); i++) {
3360      composeCode(t, "CapabilityStatement", "patchFormat", element.getPatchFormat().get(i), i);
3361    }
3362    for (int i = 0; i < element.getImplementationGuide().size(); i++) {
3363      composeCanonical(t, "CapabilityStatement", "implementationGuide", element.getImplementationGuide().get(i), i);
3364    }
3365    for (int i = 0; i < element.getRest().size(); i++) {
3366      composeCapabilityStatementRestComponent(t, "CapabilityStatement", "rest", element.getRest().get(i), i);
3367    }
3368    for (int i = 0; i < element.getMessaging().size(); i++) {
3369      composeCapabilityStatementMessagingComponent(t, "CapabilityStatement", "messaging", element.getMessaging().get(i), i);
3370    }
3371    for (int i = 0; i < element.getDocument().size(); i++) {
3372      composeCapabilityStatementDocumentComponent(t, "CapabilityStatement", "document", element.getDocument().get(i), i);
3373    }
3374  }
3375
3376  protected void composeCapabilityStatementSoftwareComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementSoftwareComponent element, int index) {
3377    if (element == null) 
3378      return;
3379    Complex t;
3380    if (Utilities.noString(parentType))
3381      t = parent;
3382    else {
3383      t = parent.predicate("fhir:"+parentType+'.'+name);
3384    }
3385    composeBackboneElement(t, "software", name, element, index);
3386    if (element.hasNameElement()) {
3387      composeString(t, "CapabilityStatementSoftwareComponent", "name", element.getNameElement(), -1);
3388    }
3389    if (element.hasVersionElement()) {
3390      composeString(t, "CapabilityStatementSoftwareComponent", "version", element.getVersionElement(), -1);
3391    }
3392    if (element.hasReleaseDateElement()) {
3393      composeDateTime(t, "CapabilityStatementSoftwareComponent", "releaseDate", element.getReleaseDateElement(), -1);
3394    }
3395  }
3396
3397  protected void composeCapabilityStatementImplementationComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementImplementationComponent element, int index) {
3398    if (element == null) 
3399      return;
3400    Complex t;
3401    if (Utilities.noString(parentType))
3402      t = parent;
3403    else {
3404      t = parent.predicate("fhir:"+parentType+'.'+name);
3405    }
3406    composeBackboneElement(t, "implementation", name, element, index);
3407    if (element.hasDescriptionElement()) {
3408      composeString(t, "CapabilityStatementImplementationComponent", "description", element.getDescriptionElement(), -1);
3409    }
3410    if (element.hasUrlElement()) {
3411      composeUrl(t, "CapabilityStatementImplementationComponent", "url", element.getUrlElement(), -1);
3412    }
3413    if (element.hasCustodian()) {
3414      composeReference(t, "CapabilityStatementImplementationComponent", "custodian", element.getCustodian(), -1);
3415    }
3416  }
3417
3418  protected void composeCapabilityStatementRestComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementRestComponent element, int index) {
3419    if (element == null) 
3420      return;
3421    Complex t;
3422    if (Utilities.noString(parentType))
3423      t = parent;
3424    else {
3425      t = parent.predicate("fhir:"+parentType+'.'+name);
3426    }
3427    composeBackboneElement(t, "rest", name, element, index);
3428    if (element.hasModeElement()) {
3429      composeEnum(t, "CapabilityStatementRestComponent", "mode", element.getModeElement(), -1);
3430    }
3431    if (element.hasDocumentationElement()) {
3432      composeMarkdown(t, "CapabilityStatementRestComponent", "documentation", element.getDocumentationElement(), -1);
3433    }
3434    if (element.hasSecurity()) {
3435      composeCapabilityStatementRestSecurityComponent(t, "CapabilityStatementRestComponent", "security", element.getSecurity(), -1);
3436    }
3437    for (int i = 0; i < element.getResource().size(); i++) {
3438      composeCapabilityStatementRestResourceComponent(t, "CapabilityStatementRestComponent", "resource", element.getResource().get(i), i);
3439    }
3440    for (int i = 0; i < element.getInteraction().size(); i++) {
3441      composeCapabilityStatementSystemInteractionComponent(t, "CapabilityStatementRestComponent", "interaction", element.getInteraction().get(i), i);
3442    }
3443    for (int i = 0; i < element.getSearchParam().size(); i++) {
3444      composeCapabilityStatementRestResourceSearchParamComponent(t, "CapabilityStatementRestComponent", "searchParam", element.getSearchParam().get(i), i);
3445    }
3446    for (int i = 0; i < element.getOperation().size(); i++) {
3447      composeCapabilityStatementRestResourceOperationComponent(t, "CapabilityStatementRestComponent", "operation", element.getOperation().get(i), i);
3448    }
3449    for (int i = 0; i < element.getCompartment().size(); i++) {
3450      composeCanonical(t, "CapabilityStatementRestComponent", "compartment", element.getCompartment().get(i), i);
3451    }
3452  }
3453
3454  protected void composeCapabilityStatementRestSecurityComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementRestSecurityComponent 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:"+parentType+'.'+name);
3462    }
3463    composeBackboneElement(t, "security", name, element, index);
3464    if (element.hasCorsElement()) {
3465      composeBoolean(t, "CapabilityStatementRestSecurityComponent", "cors", element.getCorsElement(), -1);
3466    }
3467    for (int i = 0; i < element.getService().size(); i++) {
3468      composeCodeableConcept(t, "CapabilityStatementRestSecurityComponent", "service", element.getService().get(i), i);
3469    }
3470    if (element.hasDescriptionElement()) {
3471      composeMarkdown(t, "CapabilityStatementRestSecurityComponent", "description", element.getDescriptionElement(), -1);
3472    }
3473  }
3474
3475  protected void composeCapabilityStatementRestResourceComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementRestResourceComponent element, int index) {
3476    if (element == null) 
3477      return;
3478    Complex t;
3479    if (Utilities.noString(parentType))
3480      t = parent;
3481    else {
3482      t = parent.predicate("fhir:"+parentType+'.'+name);
3483    }
3484    composeBackboneElement(t, "resource", name, element, index);
3485    if (element.hasTypeElement()) {
3486      composeCode(t, "CapabilityStatementRestResourceComponent", "type", element.getTypeElement(), -1);
3487    }
3488    if (element.hasProfileElement()) {
3489      composeCanonical(t, "CapabilityStatementRestResourceComponent", "profile", element.getProfileElement(), -1);
3490    }
3491    for (int i = 0; i < element.getSupportedProfile().size(); i++) {
3492      composeCanonical(t, "CapabilityStatementRestResourceComponent", "supportedProfile", element.getSupportedProfile().get(i), i);
3493    }
3494    if (element.hasDocumentationElement()) {
3495      composeMarkdown(t, "CapabilityStatementRestResourceComponent", "documentation", element.getDocumentationElement(), -1);
3496    }
3497    for (int i = 0; i < element.getInteraction().size(); i++) {
3498      composeCapabilityStatementResourceInteractionComponent(t, "CapabilityStatementRestResourceComponent", "interaction", element.getInteraction().get(i), i);
3499    }
3500    if (element.hasVersioningElement()) {
3501      composeEnum(t, "CapabilityStatementRestResourceComponent", "versioning", element.getVersioningElement(), -1);
3502    }
3503    if (element.hasReadHistoryElement()) {
3504      composeBoolean(t, "CapabilityStatementRestResourceComponent", "readHistory", element.getReadHistoryElement(), -1);
3505    }
3506    if (element.hasUpdateCreateElement()) {
3507      composeBoolean(t, "CapabilityStatementRestResourceComponent", "updateCreate", element.getUpdateCreateElement(), -1);
3508    }
3509    if (element.hasConditionalCreateElement()) {
3510      composeBoolean(t, "CapabilityStatementRestResourceComponent", "conditionalCreate", element.getConditionalCreateElement(), -1);
3511    }
3512    if (element.hasConditionalReadElement()) {
3513      composeEnum(t, "CapabilityStatementRestResourceComponent", "conditionalRead", element.getConditionalReadElement(), -1);
3514    }
3515    if (element.hasConditionalUpdateElement()) {
3516      composeBoolean(t, "CapabilityStatementRestResourceComponent", "conditionalUpdate", element.getConditionalUpdateElement(), -1);
3517    }
3518    if (element.hasConditionalDeleteElement()) {
3519      composeEnum(t, "CapabilityStatementRestResourceComponent", "conditionalDelete", element.getConditionalDeleteElement(), -1);
3520    }
3521    for (int i = 0; i < element.getReferencePolicy().size(); i++) {
3522      composeEnum(t, "CapabilityStatementRestResourceComponent", "referencePolicy", element.getReferencePolicy().get(i), i);
3523    }
3524    for (int i = 0; i < element.getSearchInclude().size(); i++) {
3525      composeString(t, "CapabilityStatementRestResourceComponent", "searchInclude", element.getSearchInclude().get(i), i);
3526    }
3527    for (int i = 0; i < element.getSearchRevInclude().size(); i++) {
3528      composeString(t, "CapabilityStatementRestResourceComponent", "searchRevInclude", element.getSearchRevInclude().get(i), i);
3529    }
3530    for (int i = 0; i < element.getSearchParam().size(); i++) {
3531      composeCapabilityStatementRestResourceSearchParamComponent(t, "CapabilityStatementRestResourceComponent", "searchParam", element.getSearchParam().get(i), i);
3532    }
3533    for (int i = 0; i < element.getOperation().size(); i++) {
3534      composeCapabilityStatementRestResourceOperationComponent(t, "CapabilityStatementRestResourceComponent", "operation", element.getOperation().get(i), i);
3535    }
3536  }
3537
3538  protected void composeCapabilityStatementResourceInteractionComponent(Complex parent, String parentType, String name, CapabilityStatement.ResourceInteractionComponent element, int index) {
3539    if (element == null) 
3540      return;
3541    Complex t;
3542    if (Utilities.noString(parentType))
3543      t = parent;
3544    else {
3545      t = parent.predicate("fhir:"+parentType+'.'+name);
3546    }
3547    composeBackboneElement(t, "interaction", name, element, index);
3548    if (element.hasCodeElement()) {
3549      composeEnum(t, "ResourceInteractionComponent", "code", element.getCodeElement(), -1);
3550    }
3551    if (element.hasDocumentationElement()) {
3552      composeMarkdown(t, "ResourceInteractionComponent", "documentation", element.getDocumentationElement(), -1);
3553    }
3554  }
3555
3556  protected void composeCapabilityStatementRestResourceSearchParamComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementRestResourceSearchParamComponent element, int index) {
3557    if (element == null) 
3558      return;
3559    Complex t;
3560    if (Utilities.noString(parentType))
3561      t = parent;
3562    else {
3563      t = parent.predicate("fhir:"+parentType+'.'+name);
3564    }
3565    composeBackboneElement(t, "searchParam", name, element, index);
3566    if (element.hasNameElement()) {
3567      composeString(t, "CapabilityStatementRestResourceSearchParamComponent", "name", element.getNameElement(), -1);
3568    }
3569    if (element.hasDefinitionElement()) {
3570      composeCanonical(t, "CapabilityStatementRestResourceSearchParamComponent", "definition", element.getDefinitionElement(), -1);
3571    }
3572    if (element.hasTypeElement()) {
3573      composeEnum(t, "CapabilityStatementRestResourceSearchParamComponent", "type", element.getTypeElement(), -1);
3574    }
3575    if (element.hasDocumentationElement()) {
3576      composeMarkdown(t, "CapabilityStatementRestResourceSearchParamComponent", "documentation", element.getDocumentationElement(), -1);
3577    }
3578  }
3579
3580  protected void composeCapabilityStatementRestResourceOperationComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementRestResourceOperationComponent element, int index) {
3581    if (element == null) 
3582      return;
3583    Complex t;
3584    if (Utilities.noString(parentType))
3585      t = parent;
3586    else {
3587      t = parent.predicate("fhir:"+parentType+'.'+name);
3588    }
3589    composeBackboneElement(t, "operation", name, element, index);
3590    if (element.hasNameElement()) {
3591      composeString(t, "CapabilityStatementRestResourceOperationComponent", "name", element.getNameElement(), -1);
3592    }
3593    if (element.hasDefinitionElement()) {
3594      composeCanonical(t, "CapabilityStatementRestResourceOperationComponent", "definition", element.getDefinitionElement(), -1);
3595    }
3596    if (element.hasDocumentationElement()) {
3597      composeMarkdown(t, "CapabilityStatementRestResourceOperationComponent", "documentation", element.getDocumentationElement(), -1);
3598    }
3599  }
3600
3601  protected void composeCapabilityStatementSystemInteractionComponent(Complex parent, String parentType, String name, CapabilityStatement.SystemInteractionComponent element, int index) {
3602    if (element == null) 
3603      return;
3604    Complex t;
3605    if (Utilities.noString(parentType))
3606      t = parent;
3607    else {
3608      t = parent.predicate("fhir:"+parentType+'.'+name);
3609    }
3610    composeBackboneElement(t, "interaction", name, element, index);
3611    if (element.hasCodeElement()) {
3612      composeEnum(t, "SystemInteractionComponent", "code", element.getCodeElement(), -1);
3613    }
3614    if (element.hasDocumentationElement()) {
3615      composeMarkdown(t, "SystemInteractionComponent", "documentation", element.getDocumentationElement(), -1);
3616    }
3617  }
3618
3619  protected void composeCapabilityStatementMessagingComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementMessagingComponent element, int index) {
3620    if (element == null) 
3621      return;
3622    Complex t;
3623    if (Utilities.noString(parentType))
3624      t = parent;
3625    else {
3626      t = parent.predicate("fhir:"+parentType+'.'+name);
3627    }
3628    composeBackboneElement(t, "messaging", name, element, index);
3629    for (int i = 0; i < element.getEndpoint().size(); i++) {
3630      composeCapabilityStatementMessagingEndpointComponent(t, "CapabilityStatementMessagingComponent", "endpoint", element.getEndpoint().get(i), i);
3631    }
3632    if (element.hasReliableCacheElement()) {
3633      composeUnsignedInt(t, "CapabilityStatementMessagingComponent", "reliableCache", element.getReliableCacheElement(), -1);
3634    }
3635    if (element.hasDocumentationElement()) {
3636      composeMarkdown(t, "CapabilityStatementMessagingComponent", "documentation", element.getDocumentationElement(), -1);
3637    }
3638    for (int i = 0; i < element.getSupportedMessage().size(); i++) {
3639      composeCapabilityStatementMessagingSupportedMessageComponent(t, "CapabilityStatementMessagingComponent", "supportedMessage", element.getSupportedMessage().get(i), i);
3640    }
3641  }
3642
3643  protected void composeCapabilityStatementMessagingEndpointComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementMessagingEndpointComponent element, int index) {
3644    if (element == null) 
3645      return;
3646    Complex t;
3647    if (Utilities.noString(parentType))
3648      t = parent;
3649    else {
3650      t = parent.predicate("fhir:"+parentType+'.'+name);
3651    }
3652    composeBackboneElement(t, "endpoint", name, element, index);
3653    if (element.hasProtocol()) {
3654      composeCoding(t, "CapabilityStatementMessagingEndpointComponent", "protocol", element.getProtocol(), -1);
3655    }
3656    if (element.hasAddressElement()) {
3657      composeUrl(t, "CapabilityStatementMessagingEndpointComponent", "address", element.getAddressElement(), -1);
3658    }
3659  }
3660
3661  protected void composeCapabilityStatementMessagingSupportedMessageComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementMessagingSupportedMessageComponent element, int index) {
3662    if (element == null) 
3663      return;
3664    Complex t;
3665    if (Utilities.noString(parentType))
3666      t = parent;
3667    else {
3668      t = parent.predicate("fhir:"+parentType+'.'+name);
3669    }
3670    composeBackboneElement(t, "supportedMessage", name, element, index);
3671    if (element.hasModeElement()) {
3672      composeEnum(t, "CapabilityStatementMessagingSupportedMessageComponent", "mode", element.getModeElement(), -1);
3673    }
3674    if (element.hasDefinitionElement()) {
3675      composeCanonical(t, "CapabilityStatementMessagingSupportedMessageComponent", "definition", element.getDefinitionElement(), -1);
3676    }
3677  }
3678
3679  protected void composeCapabilityStatementDocumentComponent(Complex parent, String parentType, String name, CapabilityStatement.CapabilityStatementDocumentComponent element, int index) {
3680    if (element == null) 
3681      return;
3682    Complex t;
3683    if (Utilities.noString(parentType))
3684      t = parent;
3685    else {
3686      t = parent.predicate("fhir:"+parentType+'.'+name);
3687    }
3688    composeBackboneElement(t, "document", name, element, index);
3689    if (element.hasModeElement()) {
3690      composeEnum(t, "CapabilityStatementDocumentComponent", "mode", element.getModeElement(), -1);
3691    }
3692    if (element.hasDocumentationElement()) {
3693      composeMarkdown(t, "CapabilityStatementDocumentComponent", "documentation", element.getDocumentationElement(), -1);
3694    }
3695    if (element.hasProfileElement()) {
3696      composeCanonical(t, "CapabilityStatementDocumentComponent", "profile", element.getProfileElement(), -1);
3697    }
3698  }
3699
3700  protected void composeCapabilityStatement2(Complex parent, String parentType, String name, CapabilityStatement2 element, int index) {
3701    if (element == null) 
3702      return;
3703    Complex t;
3704    if (Utilities.noString(parentType))
3705      t = parent;
3706    else {
3707      t = parent.predicate("fhir:"+parentType+'.'+name);
3708    }
3709    composeCanonicalResource(t, "CapabilityStatement2", name, element, index);
3710    if (element.hasUrlElement()) {
3711      composeUri(t, "CapabilityStatement2", "url", element.getUrlElement(), -1);
3712    }
3713    if (element.hasVersionElement()) {
3714      composeString(t, "CapabilityStatement2", "version", element.getVersionElement(), -1);
3715    }
3716    if (element.hasNameElement()) {
3717      composeString(t, "CapabilityStatement2", "name", element.getNameElement(), -1);
3718    }
3719    if (element.hasTitleElement()) {
3720      composeString(t, "CapabilityStatement2", "title", element.getTitleElement(), -1);
3721    }
3722    if (element.hasStatusElement()) {
3723      composeEnum(t, "CapabilityStatement2", "status", element.getStatusElement(), -1);
3724    }
3725    if (element.hasExperimentalElement()) {
3726      composeBoolean(t, "CapabilityStatement2", "experimental", element.getExperimentalElement(), -1);
3727    }
3728    if (element.hasDateElement()) {
3729      composeDateTime(t, "CapabilityStatement2", "date", element.getDateElement(), -1);
3730    }
3731    if (element.hasPublisherElement()) {
3732      composeString(t, "CapabilityStatement2", "publisher", element.getPublisherElement(), -1);
3733    }
3734    for (int i = 0; i < element.getContact().size(); i++) {
3735      composeContactDetail(t, "CapabilityStatement2", "contact", element.getContact().get(i), i);
3736    }
3737    if (element.hasDescriptionElement()) {
3738      composeMarkdown(t, "CapabilityStatement2", "description", element.getDescriptionElement(), -1);
3739    }
3740    for (int i = 0; i < element.getUseContext().size(); i++) {
3741      composeUsageContext(t, "CapabilityStatement2", "useContext", element.getUseContext().get(i), i);
3742    }
3743    for (int i = 0; i < element.getJurisdiction().size(); i++) {
3744      composeCodeableConcept(t, "CapabilityStatement2", "jurisdiction", element.getJurisdiction().get(i), i);
3745    }
3746    if (element.hasPurposeElement()) {
3747      composeMarkdown(t, "CapabilityStatement2", "purpose", element.getPurposeElement(), -1);
3748    }
3749    if (element.hasCopyrightElement()) {
3750      composeMarkdown(t, "CapabilityStatement2", "copyright", element.getCopyrightElement(), -1);
3751    }
3752    if (element.hasKindElement()) {
3753      composeEnum(t, "CapabilityStatement2", "kind", element.getKindElement(), -1);
3754    }
3755    for (int i = 0; i < element.getInstantiates().size(); i++) {
3756      composeCanonical(t, "CapabilityStatement2", "instantiates", element.getInstantiates().get(i), i);
3757    }
3758    for (int i = 0; i < element.getImports().size(); i++) {
3759      composeCanonical(t, "CapabilityStatement2", "imports", element.getImports().get(i), i);
3760    }
3761    if (element.hasSoftware()) {
3762      composeCapabilityStatement2SoftwareComponent(t, "CapabilityStatement2", "software", element.getSoftware(), -1);
3763    }
3764    if (element.hasImplementation()) {
3765      composeCapabilityStatement2ImplementationComponent(t, "CapabilityStatement2", "implementation", element.getImplementation(), -1);
3766    }
3767    if (element.hasFhirVersionElement()) {
3768      composeEnum(t, "CapabilityStatement2", "fhirVersion", element.getFhirVersionElement(), -1);
3769    }
3770    for (int i = 0; i < element.getFormat().size(); i++) {
3771      composeCode(t, "CapabilityStatement2", "format", element.getFormat().get(i), i);
3772    }
3773    for (int i = 0; i < element.getPatchFormat().size(); i++) {
3774      composeCode(t, "CapabilityStatement2", "patchFormat", element.getPatchFormat().get(i), i);
3775    }
3776    for (int i = 0; i < element.getImplementationGuide().size(); i++) {
3777      composeCanonical(t, "CapabilityStatement2", "implementationGuide", element.getImplementationGuide().get(i), i);
3778    }
3779    for (int i = 0; i < element.getRest().size(); i++) {
3780      composeCapabilityStatement2RestComponent(t, "CapabilityStatement2", "rest", element.getRest().get(i), i);
3781    }
3782  }
3783
3784  protected void composeCapabilityStatement2SoftwareComponent(Complex parent, String parentType, String name, CapabilityStatement2.CapabilityStatement2SoftwareComponent element, int index) {
3785    if (element == null) 
3786      return;
3787    Complex t;
3788    if (Utilities.noString(parentType))
3789      t = parent;
3790    else {
3791      t = parent.predicate("fhir:"+parentType+'.'+name);
3792    }
3793    composeBackboneElement(t, "software", name, element, index);
3794    if (element.hasNameElement()) {
3795      composeString(t, "CapabilityStatement2SoftwareComponent", "name", element.getNameElement(), -1);
3796    }
3797    if (element.hasVersionElement()) {
3798      composeString(t, "CapabilityStatement2SoftwareComponent", "version", element.getVersionElement(), -1);
3799    }
3800    if (element.hasReleaseDateElement()) {
3801      composeDateTime(t, "CapabilityStatement2SoftwareComponent", "releaseDate", element.getReleaseDateElement(), -1);
3802    }
3803  }
3804
3805  protected void composeCapabilityStatement2ImplementationComponent(Complex parent, String parentType, String name, CapabilityStatement2.CapabilityStatement2ImplementationComponent element, int index) {
3806    if (element == null) 
3807      return;
3808    Complex t;
3809    if (Utilities.noString(parentType))
3810      t = parent;
3811    else {
3812      t = parent.predicate("fhir:"+parentType+'.'+name);
3813    }
3814    composeBackboneElement(t, "implementation", name, element, index);
3815    if (element.hasDescriptionElement()) {
3816      composeString(t, "CapabilityStatement2ImplementationComponent", "description", element.getDescriptionElement(), -1);
3817    }
3818    if (element.hasUrlElement()) {
3819      composeUrl(t, "CapabilityStatement2ImplementationComponent", "url", element.getUrlElement(), -1);
3820    }
3821    if (element.hasCustodian()) {
3822      composeReference(t, "CapabilityStatement2ImplementationComponent", "custodian", element.getCustodian(), -1);
3823    }
3824  }
3825
3826  protected void composeCapabilityStatement2RestComponent(Complex parent, String parentType, String name, CapabilityStatement2.CapabilityStatement2RestComponent element, int index) {
3827    if (element == null) 
3828      return;
3829    Complex t;
3830    if (Utilities.noString(parentType))
3831      t = parent;
3832    else {
3833      t = parent.predicate("fhir:"+parentType+'.'+name);
3834    }
3835    composeBackboneElement(t, "rest", name, element, index);
3836    if (element.hasModeElement()) {
3837      composeEnum(t, "CapabilityStatement2RestComponent", "mode", element.getModeElement(), -1);
3838    }
3839    if (element.hasDocumentationElement()) {
3840      composeMarkdown(t, "CapabilityStatement2RestComponent", "documentation", element.getDocumentationElement(), -1);
3841    }
3842    for (int i = 0; i < element.getFeature().size(); i++) {
3843      composeCapabilityStatement2RestFeatureComponent(t, "CapabilityStatement2RestComponent", "feature", element.getFeature().get(i), i);
3844    }
3845    for (int i = 0; i < element.getResource().size(); i++) {
3846      composeCapabilityStatement2RestResourceComponent(t, "CapabilityStatement2RestComponent", "resource", element.getResource().get(i), i);
3847    }
3848    for (int i = 0; i < element.getInteraction().size(); i++) {
3849      composeCapabilityStatement2SystemInteractionComponent(t, "CapabilityStatement2RestComponent", "interaction", element.getInteraction().get(i), i);
3850    }
3851    for (int i = 0; i < element.getSearchParam().size(); i++) {
3852      composeCapabilityStatement2RestResourceSearchParamComponent(t, "CapabilityStatement2RestComponent", "searchParam", element.getSearchParam().get(i), i);
3853    }
3854    for (int i = 0; i < element.getOperation().size(); i++) {
3855      composeCapabilityStatement2RestResourceOperationComponent(t, "CapabilityStatement2RestComponent", "operation", element.getOperation().get(i), i);
3856    }
3857    for (int i = 0; i < element.getCompartment().size(); i++) {
3858      composeCanonical(t, "CapabilityStatement2RestComponent", "compartment", element.getCompartment().get(i), i);
3859    }
3860  }
3861
3862  protected void composeCapabilityStatement2RestFeatureComponent(Complex parent, String parentType, String name, CapabilityStatement2.CapabilityStatement2RestFeatureComponent element, int index) {
3863    if (element == null) 
3864      return;
3865    Complex t;
3866    if (Utilities.noString(parentType))
3867      t = parent;
3868    else {
3869      t = parent.predicate("fhir:"+parentType+'.'+name);
3870    }
3871    composeBackboneElement(t, "feature", name, element, index);
3872    if (element.hasCodeElement()) {
3873      composeEnum(t, "CapabilityStatement2RestFeatureComponent", "code", element.getCodeElement(), -1);
3874    }
3875    if (element.hasValueElement()) {
3876      composeEnum(t, "CapabilityStatement2RestFeatureComponent", "value", element.getValueElement(), -1);
3877    }
3878  }
3879
3880  protected void composeCapabilityStatement2RestResourceComponent(Complex parent, String parentType, String name, CapabilityStatement2.CapabilityStatement2RestResourceComponent element, int index) {
3881    if (element == null) 
3882      return;
3883    Complex t;
3884    if (Utilities.noString(parentType))
3885      t = parent;
3886    else {
3887      t = parent.predicate("fhir:"+parentType+'.'+name);
3888    }
3889    composeBackboneElement(t, "resource", name, element, index);
3890    if (element.hasTypeElement()) {
3891      composeCode(t, "CapabilityStatement2RestResourceComponent", "type", element.getTypeElement(), -1);
3892    }
3893    if (element.hasProfileElement()) {
3894      composeCanonical(t, "CapabilityStatement2RestResourceComponent", "profile", element.getProfileElement(), -1);
3895    }
3896    for (int i = 0; i < element.getSupportedProfile().size(); i++) {
3897      composeCanonical(t, "CapabilityStatement2RestResourceComponent", "supportedProfile", element.getSupportedProfile().get(i), i);
3898    }
3899    if (element.hasDocumentationElement()) {
3900      composeMarkdown(t, "CapabilityStatement2RestResourceComponent", "documentation", element.getDocumentationElement(), -1);
3901    }
3902    for (int i = 0; i < element.getFeature().size(); i++) {
3903      composeCapabilityStatement2RestFeatureComponent(t, "CapabilityStatement2RestResourceComponent", "feature", element.getFeature().get(i), i);
3904    }
3905    for (int i = 0; i < element.getInteraction().size(); i++) {
3906      composeCapabilityStatement2ResourceInteractionComponent(t, "CapabilityStatement2RestResourceComponent", "interaction", element.getInteraction().get(i), i);
3907    }
3908    for (int i = 0; i < element.getSearchParam().size(); i++) {
3909      composeCapabilityStatement2RestResourceSearchParamComponent(t, "CapabilityStatement2RestResourceComponent", "searchParam", element.getSearchParam().get(i), i);
3910    }
3911    for (int i = 0; i < element.getOperation().size(); i++) {
3912      composeCapabilityStatement2RestResourceOperationComponent(t, "CapabilityStatement2RestResourceComponent", "operation", element.getOperation().get(i), i);
3913    }
3914  }
3915
3916  protected void composeCapabilityStatement2ResourceInteractionComponent(Complex parent, String parentType, String name, CapabilityStatement2.ResourceInteractionComponent element, int index) {
3917    if (element == null) 
3918      return;
3919    Complex t;
3920    if (Utilities.noString(parentType))
3921      t = parent;
3922    else {
3923      t = parent.predicate("fhir:"+parentType+'.'+name);
3924    }
3925    composeBackboneElement(t, "interaction", name, element, index);
3926    if (element.hasCodeElement()) {
3927      composeEnum(t, "ResourceInteractionComponent", "code", element.getCodeElement(), -1);
3928    }
3929    if (element.hasDocumentationElement()) {
3930      composeMarkdown(t, "ResourceInteractionComponent", "documentation", element.getDocumentationElement(), -1);
3931    }
3932    for (int i = 0; i < element.getFeature().size(); i++) {
3933      composeCapabilityStatement2RestFeatureComponent(t, "ResourceInteractionComponent", "feature", element.getFeature().get(i), i);
3934    }
3935  }
3936
3937  protected void composeCapabilityStatement2RestResourceSearchParamComponent(Complex parent, String parentType, String name, CapabilityStatement2.CapabilityStatement2RestResourceSearchParamComponent element, int index) {
3938    if (element == null) 
3939      return;
3940    Complex t;
3941    if (Utilities.noString(parentType))
3942      t = parent;
3943    else {
3944      t = parent.predicate("fhir:"+parentType+'.'+name);
3945    }
3946    composeBackboneElement(t, "searchParam", name, element, index);
3947    if (element.hasNameElement()) {
3948      composeString(t, "CapabilityStatement2RestResourceSearchParamComponent", "name", element.getNameElement(), -1);
3949    }
3950    if (element.hasDefinitionElement()) {
3951      composeCanonical(t, "CapabilityStatement2RestResourceSearchParamComponent", "definition", element.getDefinitionElement(), -1);
3952    }
3953    if (element.hasTypeElement()) {
3954      composeEnum(t, "CapabilityStatement2RestResourceSearchParamComponent", "type", element.getTypeElement(), -1);
3955    }
3956    if (element.hasDocumentationElement()) {
3957      composeMarkdown(t, "CapabilityStatement2RestResourceSearchParamComponent", "documentation", element.getDocumentationElement(), -1);
3958    }
3959    for (int i = 0; i < element.getFeature().size(); i++) {
3960      composeCapabilityStatement2RestFeatureComponent(t, "CapabilityStatement2RestResourceSearchParamComponent", "feature", element.getFeature().get(i), i);
3961    }
3962  }
3963
3964  protected void composeCapabilityStatement2RestResourceOperationComponent(Complex parent, String parentType, String name, CapabilityStatement2.CapabilityStatement2RestResourceOperationComponent element, int index) {
3965    if (element == null) 
3966      return;
3967    Complex t;
3968    if (Utilities.noString(parentType))
3969      t = parent;
3970    else {
3971      t = parent.predicate("fhir:"+parentType+'.'+name);
3972    }
3973    composeBackboneElement(t, "operation", name, element, index);
3974    if (element.hasNameElement()) {
3975      composeString(t, "CapabilityStatement2RestResourceOperationComponent", "name", element.getNameElement(), -1);
3976    }
3977    if (element.hasDefinitionElement()) {
3978      composeCanonical(t, "CapabilityStatement2RestResourceOperationComponent", "definition", element.getDefinitionElement(), -1);
3979    }
3980    if (element.hasDocumentationElement()) {
3981      composeMarkdown(t, "CapabilityStatement2RestResourceOperationComponent", "documentation", element.getDocumentationElement(), -1);
3982    }
3983    for (int i = 0; i < element.getFeature().size(); i++) {
3984      composeCapabilityStatement2RestFeatureComponent(t, "CapabilityStatement2RestResourceOperationComponent", "feature", element.getFeature().get(i), i);
3985    }
3986  }
3987
3988  protected void composeCapabilityStatement2SystemInteractionComponent(Complex parent, String parentType, String name, CapabilityStatement2.SystemInteractionComponent element, int index) {
3989    if (element == null) 
3990      return;
3991    Complex t;
3992    if (Utilities.noString(parentType))
3993      t = parent;
3994    else {
3995      t = parent.predicate("fhir:"+parentType+'.'+name);
3996    }
3997    composeBackboneElement(t, "interaction", name, element, index);
3998    if (element.hasCodeElement()) {
3999      composeEnum(t, "SystemInteractionComponent", "code", element.getCodeElement(), -1);
4000    }
4001    if (element.hasDocumentationElement()) {
4002      composeMarkdown(t, "SystemInteractionComponent", "documentation", element.getDocumentationElement(), -1);
4003    }
4004    for (int i = 0; i < element.getFeature().size(); i++) {
4005      composeCapabilityStatement2RestFeatureComponent(t, "SystemInteractionComponent", "feature", element.getFeature().get(i), i);
4006    }
4007  }
4008
4009  protected void composeCarePlan(Complex parent, String parentType, String name, CarePlan element, int index) {
4010    if (element == null) 
4011      return;
4012    Complex t;
4013    if (Utilities.noString(parentType))
4014      t = parent;
4015    else {
4016      t = parent.predicate("fhir:"+parentType+'.'+name);
4017    }
4018    composeDomainResource(t, "CarePlan", name, element, index);
4019    for (int i = 0; i < element.getIdentifier().size(); i++) {
4020      composeIdentifier(t, "CarePlan", "identifier", element.getIdentifier().get(i), i);
4021    }
4022    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
4023      composeCanonical(t, "CarePlan", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
4024    }
4025    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
4026      composeUri(t, "CarePlan", "instantiatesUri", element.getInstantiatesUri().get(i), i);
4027    }
4028    for (int i = 0; i < element.getBasedOn().size(); i++) {
4029      composeReference(t, "CarePlan", "basedOn", element.getBasedOn().get(i), i);
4030    }
4031    for (int i = 0; i < element.getReplaces().size(); i++) {
4032      composeReference(t, "CarePlan", "replaces", element.getReplaces().get(i), i);
4033    }
4034    for (int i = 0; i < element.getPartOf().size(); i++) {
4035      composeReference(t, "CarePlan", "partOf", element.getPartOf().get(i), i);
4036    }
4037    if (element.hasStatusElement()) {
4038      composeEnum(t, "CarePlan", "status", element.getStatusElement(), -1);
4039    }
4040    if (element.hasIntentElement()) {
4041      composeEnum(t, "CarePlan", "intent", element.getIntentElement(), -1);
4042    }
4043    for (int i = 0; i < element.getCategory().size(); i++) {
4044      composeCodeableConcept(t, "CarePlan", "category", element.getCategory().get(i), i);
4045    }
4046    if (element.hasTitleElement()) {
4047      composeString(t, "CarePlan", "title", element.getTitleElement(), -1);
4048    }
4049    if (element.hasDescriptionElement()) {
4050      composeString(t, "CarePlan", "description", element.getDescriptionElement(), -1);
4051    }
4052    if (element.hasSubject()) {
4053      composeReference(t, "CarePlan", "subject", element.getSubject(), -1);
4054    }
4055    if (element.hasEncounter()) {
4056      composeReference(t, "CarePlan", "encounter", element.getEncounter(), -1);
4057    }
4058    if (element.hasPeriod()) {
4059      composePeriod(t, "CarePlan", "period", element.getPeriod(), -1);
4060    }
4061    if (element.hasCreatedElement()) {
4062      composeDateTime(t, "CarePlan", "created", element.getCreatedElement(), -1);
4063    }
4064    if (element.hasAuthor()) {
4065      composeReference(t, "CarePlan", "author", element.getAuthor(), -1);
4066    }
4067    for (int i = 0; i < element.getContributor().size(); i++) {
4068      composeReference(t, "CarePlan", "contributor", element.getContributor().get(i), i);
4069    }
4070    for (int i = 0; i < element.getCareTeam().size(); i++) {
4071      composeReference(t, "CarePlan", "careTeam", element.getCareTeam().get(i), i);
4072    }
4073    for (int i = 0; i < element.getAddresses().size(); i++) {
4074      composeCodeableReference(t, "CarePlan", "addresses", element.getAddresses().get(i), i);
4075    }
4076    for (int i = 0; i < element.getSupportingInfo().size(); i++) {
4077      composeReference(t, "CarePlan", "supportingInfo", element.getSupportingInfo().get(i), i);
4078    }
4079    for (int i = 0; i < element.getGoal().size(); i++) {
4080      composeReference(t, "CarePlan", "goal", element.getGoal().get(i), i);
4081    }
4082    for (int i = 0; i < element.getActivity().size(); i++) {
4083      composeCarePlanActivityComponent(t, "CarePlan", "activity", element.getActivity().get(i), i);
4084    }
4085    for (int i = 0; i < element.getNote().size(); i++) {
4086      composeAnnotation(t, "CarePlan", "note", element.getNote().get(i), i);
4087    }
4088  }
4089
4090  protected void composeCarePlanActivityComponent(Complex parent, String parentType, String name, CarePlan.CarePlanActivityComponent element, int index) {
4091    if (element == null) 
4092      return;
4093    Complex t;
4094    if (Utilities.noString(parentType))
4095      t = parent;
4096    else {
4097      t = parent.predicate("fhir:"+parentType+'.'+name);
4098    }
4099    composeBackboneElement(t, "activity", name, element, index);
4100    for (int i = 0; i < element.getPerformedActivity().size(); i++) {
4101      composeCodeableReference(t, "CarePlanActivityComponent", "performedActivity", element.getPerformedActivity().get(i), i);
4102    }
4103    for (int i = 0; i < element.getProgress().size(); i++) {
4104      composeAnnotation(t, "CarePlanActivityComponent", "progress", element.getProgress().get(i), i);
4105    }
4106    if (element.hasPlannedActivityReference()) {
4107      composeReference(t, "CarePlanActivityComponent", "plannedActivityReference", element.getPlannedActivityReference(), -1);
4108    }
4109    if (element.hasPlannedActivityDetail()) {
4110      composeCarePlanActivityPlannedActivityDetailComponent(t, "CarePlanActivityComponent", "plannedActivityDetail", element.getPlannedActivityDetail(), -1);
4111    }
4112  }
4113
4114  protected void composeCarePlanActivityPlannedActivityDetailComponent(Complex parent, String parentType, String name, CarePlan.CarePlanActivityPlannedActivityDetailComponent element, int index) {
4115    if (element == null) 
4116      return;
4117    Complex t;
4118    if (Utilities.noString(parentType))
4119      t = parent;
4120    else {
4121      t = parent.predicate("fhir:"+parentType+'.'+name);
4122    }
4123    composeBackboneElement(t, "plannedActivityDetail", name, element, index);
4124    if (element.hasKindElement()) {
4125      composeEnum(t, "CarePlanActivityPlannedActivityDetailComponent", "kind", element.getKindElement(), -1);
4126    }
4127    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
4128      composeCanonical(t, "CarePlanActivityPlannedActivityDetailComponent", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
4129    }
4130    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
4131      composeUri(t, "CarePlanActivityPlannedActivityDetailComponent", "instantiatesUri", element.getInstantiatesUri().get(i), i);
4132    }
4133    if (element.hasCode()) {
4134      composeCodeableConcept(t, "CarePlanActivityPlannedActivityDetailComponent", "code", element.getCode(), -1);
4135    }
4136    for (int i = 0; i < element.getReason().size(); i++) {
4137      composeCodeableReference(t, "CarePlanActivityPlannedActivityDetailComponent", "reason", element.getReason().get(i), i);
4138    }
4139    for (int i = 0; i < element.getGoal().size(); i++) {
4140      composeReference(t, "CarePlanActivityPlannedActivityDetailComponent", "goal", element.getGoal().get(i), i);
4141    }
4142    if (element.hasStatusElement()) {
4143      composeEnum(t, "CarePlanActivityPlannedActivityDetailComponent", "status", element.getStatusElement(), -1);
4144    }
4145    if (element.hasStatusReason()) {
4146      composeCodeableConcept(t, "CarePlanActivityPlannedActivityDetailComponent", "statusReason", element.getStatusReason(), -1);
4147    }
4148    if (element.hasDoNotPerformElement()) {
4149      composeBoolean(t, "CarePlanActivityPlannedActivityDetailComponent", "doNotPerform", element.getDoNotPerformElement(), -1);
4150    }
4151    if (element.hasScheduled()) {
4152      composeType(t, "CarePlanActivityPlannedActivityDetailComponent", "scheduled", element.getScheduled(), -1);
4153    }
4154    if (element.hasLocation()) {
4155      composeCodeableReference(t, "CarePlanActivityPlannedActivityDetailComponent", "location", element.getLocation(), -1);
4156    }
4157    if (element.hasReported()) {
4158      composeType(t, "CarePlanActivityPlannedActivityDetailComponent", "reported", element.getReported(), -1);
4159    }
4160    for (int i = 0; i < element.getPerformer().size(); i++) {
4161      composeReference(t, "CarePlanActivityPlannedActivityDetailComponent", "performer", element.getPerformer().get(i), i);
4162    }
4163    if (element.hasProduct()) {
4164      composeType(t, "CarePlanActivityPlannedActivityDetailComponent", "product", element.getProduct(), -1);
4165    }
4166    if (element.hasDailyAmount()) {
4167      composeQuantity(t, "CarePlanActivityPlannedActivityDetailComponent", "dailyAmount", element.getDailyAmount(), -1);
4168    }
4169    if (element.hasQuantity()) {
4170      composeQuantity(t, "CarePlanActivityPlannedActivityDetailComponent", "quantity", element.getQuantity(), -1);
4171    }
4172    if (element.hasDescriptionElement()) {
4173      composeString(t, "CarePlanActivityPlannedActivityDetailComponent", "description", element.getDescriptionElement(), -1);
4174    }
4175  }
4176
4177  protected void composeCareTeam(Complex parent, String parentType, String name, CareTeam element, int index) {
4178    if (element == null) 
4179      return;
4180    Complex t;
4181    if (Utilities.noString(parentType))
4182      t = parent;
4183    else {
4184      t = parent.predicate("fhir:"+parentType+'.'+name);
4185    }
4186    composeDomainResource(t, "CareTeam", name, element, index);
4187    for (int i = 0; i < element.getIdentifier().size(); i++) {
4188      composeIdentifier(t, "CareTeam", "identifier", element.getIdentifier().get(i), i);
4189    }
4190    if (element.hasStatusElement()) {
4191      composeEnum(t, "CareTeam", "status", element.getStatusElement(), -1);
4192    }
4193    for (int i = 0; i < element.getCategory().size(); i++) {
4194      composeCodeableConcept(t, "CareTeam", "category", element.getCategory().get(i), i);
4195    }
4196    if (element.hasNameElement()) {
4197      composeString(t, "CareTeam", "name", element.getNameElement(), -1);
4198    }
4199    if (element.hasSubject()) {
4200      composeReference(t, "CareTeam", "subject", element.getSubject(), -1);
4201    }
4202    if (element.hasPeriod()) {
4203      composePeriod(t, "CareTeam", "period", element.getPeriod(), -1);
4204    }
4205    for (int i = 0; i < element.getParticipant().size(); i++) {
4206      composeCareTeamParticipantComponent(t, "CareTeam", "participant", element.getParticipant().get(i), i);
4207    }
4208    for (int i = 0; i < element.getReason().size(); i++) {
4209      composeCodeableReference(t, "CareTeam", "reason", element.getReason().get(i), i);
4210    }
4211    for (int i = 0; i < element.getManagingOrganization().size(); i++) {
4212      composeReference(t, "CareTeam", "managingOrganization", element.getManagingOrganization().get(i), i);
4213    }
4214    for (int i = 0; i < element.getTelecom().size(); i++) {
4215      composeContactPoint(t, "CareTeam", "telecom", element.getTelecom().get(i), i);
4216    }
4217    for (int i = 0; i < element.getNote().size(); i++) {
4218      composeAnnotation(t, "CareTeam", "note", element.getNote().get(i), i);
4219    }
4220  }
4221
4222  protected void composeCareTeamParticipantComponent(Complex parent, String parentType, String name, CareTeam.CareTeamParticipantComponent element, int index) {
4223    if (element == null) 
4224      return;
4225    Complex t;
4226    if (Utilities.noString(parentType))
4227      t = parent;
4228    else {
4229      t = parent.predicate("fhir:"+parentType+'.'+name);
4230    }
4231    composeBackboneElement(t, "participant", name, element, index);
4232    if (element.hasRole()) {
4233      composeCodeableConcept(t, "CareTeamParticipantComponent", "role", element.getRole(), -1);
4234    }
4235    if (element.hasMember()) {
4236      composeReference(t, "CareTeamParticipantComponent", "member", element.getMember(), -1);
4237    }
4238    if (element.hasOnBehalfOf()) {
4239      composeReference(t, "CareTeamParticipantComponent", "onBehalfOf", element.getOnBehalfOf(), -1);
4240    }
4241    if (element.hasCoverage()) {
4242      composeType(t, "CareTeamParticipantComponent", "coverage", element.getCoverage(), -1);
4243    }
4244  }
4245
4246  protected void composeChargeItem(Complex parent, String parentType, String name, ChargeItem element, int index) {
4247    if (element == null) 
4248      return;
4249    Complex t;
4250    if (Utilities.noString(parentType))
4251      t = parent;
4252    else {
4253      t = parent.predicate("fhir:"+parentType+'.'+name);
4254    }
4255    composeDomainResource(t, "ChargeItem", name, element, index);
4256    for (int i = 0; i < element.getIdentifier().size(); i++) {
4257      composeIdentifier(t, "ChargeItem", "identifier", element.getIdentifier().get(i), i);
4258    }
4259    for (int i = 0; i < element.getDefinitionUri().size(); i++) {
4260      composeUri(t, "ChargeItem", "definitionUri", element.getDefinitionUri().get(i), i);
4261    }
4262    for (int i = 0; i < element.getDefinitionCanonical().size(); i++) {
4263      composeCanonical(t, "ChargeItem", "definitionCanonical", element.getDefinitionCanonical().get(i), i);
4264    }
4265    if (element.hasStatusElement()) {
4266      composeEnum(t, "ChargeItem", "status", element.getStatusElement(), -1);
4267    }
4268    for (int i = 0; i < element.getPartOf().size(); i++) {
4269      composeReference(t, "ChargeItem", "partOf", element.getPartOf().get(i), i);
4270    }
4271    if (element.hasCode()) {
4272      composeCodeableConcept(t, "ChargeItem", "code", element.getCode(), -1);
4273    }
4274    if (element.hasSubject()) {
4275      composeReference(t, "ChargeItem", "subject", element.getSubject(), -1);
4276    }
4277    if (element.hasContext()) {
4278      composeReference(t, "ChargeItem", "context", element.getContext(), -1);
4279    }
4280    if (element.hasOccurrence()) {
4281      composeType(t, "ChargeItem", "occurrence", element.getOccurrence(), -1);
4282    }
4283    for (int i = 0; i < element.getPerformer().size(); i++) {
4284      composeChargeItemPerformerComponent(t, "ChargeItem", "performer", element.getPerformer().get(i), i);
4285    }
4286    if (element.hasPerformingOrganization()) {
4287      composeReference(t, "ChargeItem", "performingOrganization", element.getPerformingOrganization(), -1);
4288    }
4289    if (element.hasRequestingOrganization()) {
4290      composeReference(t, "ChargeItem", "requestingOrganization", element.getRequestingOrganization(), -1);
4291    }
4292    if (element.hasCostCenter()) {
4293      composeReference(t, "ChargeItem", "costCenter", element.getCostCenter(), -1);
4294    }
4295    if (element.hasQuantity()) {
4296      composeQuantity(t, "ChargeItem", "quantity", element.getQuantity(), -1);
4297    }
4298    for (int i = 0; i < element.getBodysite().size(); i++) {
4299      composeCodeableConcept(t, "ChargeItem", "bodysite", element.getBodysite().get(i), i);
4300    }
4301    if (element.hasFactorOverrideElement()) {
4302      composeDecimal(t, "ChargeItem", "factorOverride", element.getFactorOverrideElement(), -1);
4303    }
4304    if (element.hasPriceOverride()) {
4305      composeMoney(t, "ChargeItem", "priceOverride", element.getPriceOverride(), -1);
4306    }
4307    if (element.hasOverrideReasonElement()) {
4308      composeString(t, "ChargeItem", "overrideReason", element.getOverrideReasonElement(), -1);
4309    }
4310    if (element.hasEnterer()) {
4311      composeReference(t, "ChargeItem", "enterer", element.getEnterer(), -1);
4312    }
4313    if (element.hasEnteredDateElement()) {
4314      composeDateTime(t, "ChargeItem", "enteredDate", element.getEnteredDateElement(), -1);
4315    }
4316    for (int i = 0; i < element.getReason().size(); i++) {
4317      composeCodeableConcept(t, "ChargeItem", "reason", element.getReason().get(i), i);
4318    }
4319    for (int i = 0; i < element.getService().size(); i++) {
4320      composeReference(t, "ChargeItem", "service", element.getService().get(i), i);
4321    }
4322    for (int i = 0; i < element.getProduct().size(); i++) {
4323      composeCodeableReference(t, "ChargeItem", "product", element.getProduct().get(i), i);
4324    }
4325    for (int i = 0; i < element.getAccount().size(); i++) {
4326      composeReference(t, "ChargeItem", "account", element.getAccount().get(i), i);
4327    }
4328    for (int i = 0; i < element.getNote().size(); i++) {
4329      composeAnnotation(t, "ChargeItem", "note", element.getNote().get(i), i);
4330    }
4331    for (int i = 0; i < element.getSupportingInformation().size(); i++) {
4332      composeReference(t, "ChargeItem", "supportingInformation", element.getSupportingInformation().get(i), i);
4333    }
4334  }
4335
4336  protected void composeChargeItemPerformerComponent(Complex parent, String parentType, String name, ChargeItem.ChargeItemPerformerComponent element, int index) {
4337    if (element == null) 
4338      return;
4339    Complex t;
4340    if (Utilities.noString(parentType))
4341      t = parent;
4342    else {
4343      t = parent.predicate("fhir:"+parentType+'.'+name);
4344    }
4345    composeBackboneElement(t, "performer", name, element, index);
4346    if (element.hasFunction()) {
4347      composeCodeableConcept(t, "ChargeItemPerformerComponent", "function", element.getFunction(), -1);
4348    }
4349    if (element.hasActor()) {
4350      composeReference(t, "ChargeItemPerformerComponent", "actor", element.getActor(), -1);
4351    }
4352  }
4353
4354  protected void composeChargeItemDefinition(Complex parent, String parentType, String name, ChargeItemDefinition element, int index) {
4355    if (element == null) 
4356      return;
4357    Complex t;
4358    if (Utilities.noString(parentType))
4359      t = parent;
4360    else {
4361      t = parent.predicate("fhir:"+parentType+'.'+name);
4362    }
4363    composeMetadataResource(t, "ChargeItemDefinition", name, element, index);
4364    if (element.hasUrlElement()) {
4365      composeUri(t, "ChargeItemDefinition", "url", element.getUrlElement(), -1);
4366    }
4367    for (int i = 0; i < element.getIdentifier().size(); i++) {
4368      composeIdentifier(t, "ChargeItemDefinition", "identifier", element.getIdentifier().get(i), i);
4369    }
4370    if (element.hasVersionElement()) {
4371      composeString(t, "ChargeItemDefinition", "version", element.getVersionElement(), -1);
4372    }
4373    if (element.hasTitleElement()) {
4374      composeString(t, "ChargeItemDefinition", "title", element.getTitleElement(), -1);
4375    }
4376    for (int i = 0; i < element.getDerivedFromUri().size(); i++) {
4377      composeUri(t, "ChargeItemDefinition", "derivedFromUri", element.getDerivedFromUri().get(i), i);
4378    }
4379    for (int i = 0; i < element.getPartOf().size(); i++) {
4380      composeCanonical(t, "ChargeItemDefinition", "partOf", element.getPartOf().get(i), i);
4381    }
4382    for (int i = 0; i < element.getReplaces().size(); i++) {
4383      composeCanonical(t, "ChargeItemDefinition", "replaces", element.getReplaces().get(i), i);
4384    }
4385    if (element.hasStatusElement()) {
4386      composeEnum(t, "ChargeItemDefinition", "status", element.getStatusElement(), -1);
4387    }
4388    if (element.hasExperimentalElement()) {
4389      composeBoolean(t, "ChargeItemDefinition", "experimental", element.getExperimentalElement(), -1);
4390    }
4391    if (element.hasDateElement()) {
4392      composeDateTime(t, "ChargeItemDefinition", "date", element.getDateElement(), -1);
4393    }
4394    if (element.hasPublisherElement()) {
4395      composeString(t, "ChargeItemDefinition", "publisher", element.getPublisherElement(), -1);
4396    }
4397    for (int i = 0; i < element.getContact().size(); i++) {
4398      composeContactDetail(t, "ChargeItemDefinition", "contact", element.getContact().get(i), i);
4399    }
4400    if (element.hasDescriptionElement()) {
4401      composeMarkdown(t, "ChargeItemDefinition", "description", element.getDescriptionElement(), -1);
4402    }
4403    for (int i = 0; i < element.getUseContext().size(); i++) {
4404      composeUsageContext(t, "ChargeItemDefinition", "useContext", element.getUseContext().get(i), i);
4405    }
4406    for (int i = 0; i < element.getJurisdiction().size(); i++) {
4407      composeCodeableConcept(t, "ChargeItemDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
4408    }
4409    if (element.hasCopyrightElement()) {
4410      composeMarkdown(t, "ChargeItemDefinition", "copyright", element.getCopyrightElement(), -1);
4411    }
4412    if (element.hasApprovalDateElement()) {
4413      composeDate(t, "ChargeItemDefinition", "approvalDate", element.getApprovalDateElement(), -1);
4414    }
4415    if (element.hasLastReviewDateElement()) {
4416      composeDate(t, "ChargeItemDefinition", "lastReviewDate", element.getLastReviewDateElement(), -1);
4417    }
4418    if (element.hasEffectivePeriod()) {
4419      composePeriod(t, "ChargeItemDefinition", "effectivePeriod", element.getEffectivePeriod(), -1);
4420    }
4421    if (element.hasCode()) {
4422      composeCodeableConcept(t, "ChargeItemDefinition", "code", element.getCode(), -1);
4423    }
4424    for (int i = 0; i < element.getInstance().size(); i++) {
4425      composeReference(t, "ChargeItemDefinition", "instance", element.getInstance().get(i), i);
4426    }
4427    for (int i = 0; i < element.getApplicability().size(); i++) {
4428      composeChargeItemDefinitionApplicabilityComponent(t, "ChargeItemDefinition", "applicability", element.getApplicability().get(i), i);
4429    }
4430    for (int i = 0; i < element.getPropertyGroup().size(); i++) {
4431      composeChargeItemDefinitionPropertyGroupComponent(t, "ChargeItemDefinition", "propertyGroup", element.getPropertyGroup().get(i), i);
4432    }
4433  }
4434
4435  protected void composeChargeItemDefinitionApplicabilityComponent(Complex parent, String parentType, String name, ChargeItemDefinition.ChargeItemDefinitionApplicabilityComponent element, int index) {
4436    if (element == null) 
4437      return;
4438    Complex t;
4439    if (Utilities.noString(parentType))
4440      t = parent;
4441    else {
4442      t = parent.predicate("fhir:"+parentType+'.'+name);
4443    }
4444    composeBackboneElement(t, "applicability", name, element, index);
4445    if (element.hasDescriptionElement()) {
4446      composeString(t, "ChargeItemDefinitionApplicabilityComponent", "description", element.getDescriptionElement(), -1);
4447    }
4448    if (element.hasLanguageElement()) {
4449      composeString(t, "ChargeItemDefinitionApplicabilityComponent", "language", element.getLanguageElement(), -1);
4450    }
4451    if (element.hasExpressionElement()) {
4452      composeString(t, "ChargeItemDefinitionApplicabilityComponent", "expression", element.getExpressionElement(), -1);
4453    }
4454  }
4455
4456  protected void composeChargeItemDefinitionPropertyGroupComponent(Complex parent, String parentType, String name, ChargeItemDefinition.ChargeItemDefinitionPropertyGroupComponent element, int index) {
4457    if (element == null) 
4458      return;
4459    Complex t;
4460    if (Utilities.noString(parentType))
4461      t = parent;
4462    else {
4463      t = parent.predicate("fhir:"+parentType+'.'+name);
4464    }
4465    composeBackboneElement(t, "propertyGroup", name, element, index);
4466    for (int i = 0; i < element.getApplicability().size(); i++) {
4467      composeChargeItemDefinitionApplicabilityComponent(t, "ChargeItemDefinitionPropertyGroupComponent", "applicability", element.getApplicability().get(i), i);
4468    }
4469    for (int i = 0; i < element.getPriceComponent().size(); i++) {
4470      composeChargeItemDefinitionPropertyGroupPriceComponentComponent(t, "ChargeItemDefinitionPropertyGroupComponent", "priceComponent", element.getPriceComponent().get(i), i);
4471    }
4472  }
4473
4474  protected void composeChargeItemDefinitionPropertyGroupPriceComponentComponent(Complex parent, String parentType, String name, ChargeItemDefinition.ChargeItemDefinitionPropertyGroupPriceComponentComponent element, int index) {
4475    if (element == null) 
4476      return;
4477    Complex t;
4478    if (Utilities.noString(parentType))
4479      t = parent;
4480    else {
4481      t = parent.predicate("fhir:"+parentType+'.'+name);
4482    }
4483    composeBackboneElement(t, "priceComponent", name, element, index);
4484    if (element.hasTypeElement()) {
4485      composeEnum(t, "ChargeItemDefinitionPropertyGroupPriceComponentComponent", "type", element.getTypeElement(), -1);
4486    }
4487    if (element.hasCode()) {
4488      composeCodeableConcept(t, "ChargeItemDefinitionPropertyGroupPriceComponentComponent", "code", element.getCode(), -1);
4489    }
4490    if (element.hasFactorElement()) {
4491      composeDecimal(t, "ChargeItemDefinitionPropertyGroupPriceComponentComponent", "factor", element.getFactorElement(), -1);
4492    }
4493    if (element.hasAmount()) {
4494      composeMoney(t, "ChargeItemDefinitionPropertyGroupPriceComponentComponent", "amount", element.getAmount(), -1);
4495    }
4496  }
4497
4498  protected void composeCitation(Complex parent, String parentType, String name, Citation element, int index) {
4499    if (element == null) 
4500      return;
4501    Complex t;
4502    if (Utilities.noString(parentType))
4503      t = parent;
4504    else {
4505      t = parent.predicate("fhir:"+parentType+'.'+name);
4506    }
4507    composeMetadataResource(t, "Citation", name, element, index);
4508    if (element.hasUrlElement()) {
4509      composeUri(t, "Citation", "url", element.getUrlElement(), -1);
4510    }
4511    for (int i = 0; i < element.getIdentifier().size(); i++) {
4512      composeIdentifier(t, "Citation", "identifier", element.getIdentifier().get(i), i);
4513    }
4514    if (element.hasVersionElement()) {
4515      composeString(t, "Citation", "version", element.getVersionElement(), -1);
4516    }
4517    if (element.hasNameElement()) {
4518      composeString(t, "Citation", "name", element.getNameElement(), -1);
4519    }
4520    if (element.hasTitleElement()) {
4521      composeString(t, "Citation", "title", element.getTitleElement(), -1);
4522    }
4523    if (element.hasStatusElement()) {
4524      composeEnum(t, "Citation", "status", element.getStatusElement(), -1);
4525    }
4526    if (element.hasExperimentalElement()) {
4527      composeBoolean(t, "Citation", "experimental", element.getExperimentalElement(), -1);
4528    }
4529    if (element.hasDateElement()) {
4530      composeDateTime(t, "Citation", "date", element.getDateElement(), -1);
4531    }
4532    if (element.hasPublisherElement()) {
4533      composeString(t, "Citation", "publisher", element.getPublisherElement(), -1);
4534    }
4535    for (int i = 0; i < element.getContact().size(); i++) {
4536      composeContactDetail(t, "Citation", "contact", element.getContact().get(i), i);
4537    }
4538    if (element.hasDescriptionElement()) {
4539      composeMarkdown(t, "Citation", "description", element.getDescriptionElement(), -1);
4540    }
4541    for (int i = 0; i < element.getUseContext().size(); i++) {
4542      composeUsageContext(t, "Citation", "useContext", element.getUseContext().get(i), i);
4543    }
4544    for (int i = 0; i < element.getJurisdiction().size(); i++) {
4545      composeCodeableConcept(t, "Citation", "jurisdiction", element.getJurisdiction().get(i), i);
4546    }
4547    if (element.hasPurposeElement()) {
4548      composeMarkdown(t, "Citation", "purpose", element.getPurposeElement(), -1);
4549    }
4550    if (element.hasCopyrightElement()) {
4551      composeMarkdown(t, "Citation", "copyright", element.getCopyrightElement(), -1);
4552    }
4553    if (element.hasApprovalDateElement()) {
4554      composeDate(t, "Citation", "approvalDate", element.getApprovalDateElement(), -1);
4555    }
4556    if (element.hasLastReviewDateElement()) {
4557      composeDate(t, "Citation", "lastReviewDate", element.getLastReviewDateElement(), -1);
4558    }
4559    if (element.hasEffectivePeriod()) {
4560      composePeriod(t, "Citation", "effectivePeriod", element.getEffectivePeriod(), -1);
4561    }
4562    for (int i = 0; i < element.getAuthor().size(); i++) {
4563      composeContactDetail(t, "Citation", "author", element.getAuthor().get(i), i);
4564    }
4565    for (int i = 0; i < element.getEditor().size(); i++) {
4566      composeContactDetail(t, "Citation", "editor", element.getEditor().get(i), i);
4567    }
4568    for (int i = 0; i < element.getReviewer().size(); i++) {
4569      composeContactDetail(t, "Citation", "reviewer", element.getReviewer().get(i), i);
4570    }
4571    for (int i = 0; i < element.getEndorser().size(); i++) {
4572      composeContactDetail(t, "Citation", "endorser", element.getEndorser().get(i), i);
4573    }
4574    for (int i = 0; i < element.getSummary().size(); i++) {
4575      composeCitationSummaryComponent(t, "Citation", "summary", element.getSummary().get(i), i);
4576    }
4577    for (int i = 0; i < element.getClassification().size(); i++) {
4578      composeCitationClassificationComponent(t, "Citation", "classification", element.getClassification().get(i), i);
4579    }
4580    for (int i = 0; i < element.getNote().size(); i++) {
4581      composeAnnotation(t, "Citation", "note", element.getNote().get(i), i);
4582    }
4583    for (int i = 0; i < element.getCurrentState().size(); i++) {
4584      composeCodeableConcept(t, "Citation", "currentState", element.getCurrentState().get(i), i);
4585    }
4586    for (int i = 0; i < element.getStatusDate().size(); i++) {
4587      composeCitationStatusDateComponent(t, "Citation", "statusDate", element.getStatusDate().get(i), i);
4588    }
4589    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
4590      composeRelatedArtifact(t, "Citation", "relatedArtifact", element.getRelatedArtifact().get(i), i);
4591    }
4592    if (element.hasCitedArtifact()) {
4593      composeCitationCitedArtifactComponent(t, "Citation", "citedArtifact", element.getCitedArtifact(), -1);
4594    }
4595  }
4596
4597  protected void composeCitationSummaryComponent(Complex parent, String parentType, String name, Citation.CitationSummaryComponent element, int index) {
4598    if (element == null) 
4599      return;
4600    Complex t;
4601    if (Utilities.noString(parentType))
4602      t = parent;
4603    else {
4604      t = parent.predicate("fhir:"+parentType+'.'+name);
4605    }
4606    composeBackboneElement(t, "summary", name, element, index);
4607    if (element.hasStyle()) {
4608      composeCodeableConcept(t, "CitationSummaryComponent", "style", element.getStyle(), -1);
4609    }
4610    if (element.hasTextElement()) {
4611      composeMarkdown(t, "CitationSummaryComponent", "text", element.getTextElement(), -1);
4612    }
4613  }
4614
4615  protected void composeCitationClassificationComponent(Complex parent, String parentType, String name, Citation.CitationClassificationComponent element, int index) {
4616    if (element == null) 
4617      return;
4618    Complex t;
4619    if (Utilities.noString(parentType))
4620      t = parent;
4621    else {
4622      t = parent.predicate("fhir:"+parentType+'.'+name);
4623    }
4624    composeBackboneElement(t, "classification", name, element, index);
4625    if (element.hasType()) {
4626      composeCodeableConcept(t, "CitationClassificationComponent", "type", element.getType(), -1);
4627    }
4628    for (int i = 0; i < element.getClassifier().size(); i++) {
4629      composeCodeableConcept(t, "CitationClassificationComponent", "classifier", element.getClassifier().get(i), i);
4630    }
4631  }
4632
4633  protected void composeCitationStatusDateComponent(Complex parent, String parentType, String name, Citation.CitationStatusDateComponent element, int index) {
4634    if (element == null) 
4635      return;
4636    Complex t;
4637    if (Utilities.noString(parentType))
4638      t = parent;
4639    else {
4640      t = parent.predicate("fhir:"+parentType+'.'+name);
4641    }
4642    composeBackboneElement(t, "statusDate", name, element, index);
4643    if (element.hasActivity()) {
4644      composeCodeableConcept(t, "CitationStatusDateComponent", "activity", element.getActivity(), -1);
4645    }
4646    if (element.hasActualElement()) {
4647      composeBoolean(t, "CitationStatusDateComponent", "actual", element.getActualElement(), -1);
4648    }
4649    if (element.hasPeriod()) {
4650      composePeriod(t, "CitationStatusDateComponent", "period", element.getPeriod(), -1);
4651    }
4652  }
4653
4654  protected void composeCitationCitedArtifactComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactComponent element, int index) {
4655    if (element == null) 
4656      return;
4657    Complex t;
4658    if (Utilities.noString(parentType))
4659      t = parent;
4660    else {
4661      t = parent.predicate("fhir:"+parentType+'.'+name);
4662    }
4663    composeBackboneElement(t, "citedArtifact", name, element, index);
4664    for (int i = 0; i < element.getIdentifier().size(); i++) {
4665      composeIdentifier(t, "CitationCitedArtifactComponent", "identifier", element.getIdentifier().get(i), i);
4666    }
4667    for (int i = 0; i < element.getRelatedIdentifier().size(); i++) {
4668      composeIdentifier(t, "CitationCitedArtifactComponent", "relatedIdentifier", element.getRelatedIdentifier().get(i), i);
4669    }
4670    if (element.hasDateAccessedElement()) {
4671      composeDateTime(t, "CitationCitedArtifactComponent", "dateAccessed", element.getDateAccessedElement(), -1);
4672    }
4673    if (element.hasVersion()) {
4674      composeCitationCitedArtifactVersionComponent(t, "CitationCitedArtifactComponent", "version", element.getVersion(), -1);
4675    }
4676    for (int i = 0; i < element.getCurrentState().size(); i++) {
4677      composeCodeableConcept(t, "CitationCitedArtifactComponent", "currentState", element.getCurrentState().get(i), i);
4678    }
4679    for (int i = 0; i < element.getStatusDate().size(); i++) {
4680      composeCitationCitedArtifactStatusDateComponent(t, "CitationCitedArtifactComponent", "statusDate", element.getStatusDate().get(i), i);
4681    }
4682    for (int i = 0; i < element.getTitle().size(); i++) {
4683      composeCitationCitedArtifactTitleComponent(t, "CitationCitedArtifactComponent", "title", element.getTitle().get(i), i);
4684    }
4685    for (int i = 0; i < element.getAbstract().size(); i++) {
4686      composeCitationCitedArtifactAbstractComponent(t, "CitationCitedArtifactComponent", "abstract", element.getAbstract().get(i), i);
4687    }
4688    if (element.hasPart()) {
4689      composeCitationCitedArtifactPartComponent(t, "CitationCitedArtifactComponent", "part", element.getPart(), -1);
4690    }
4691    for (int i = 0; i < element.getRelatesTo().size(); i++) {
4692      composeRelatedArtifact(t, "CitationCitedArtifactComponent", "relatesTo", element.getRelatesTo().get(i), i);
4693    }
4694    for (int i = 0; i < element.getPublicationForm().size(); i++) {
4695      composeCitationCitedArtifactPublicationFormComponent(t, "CitationCitedArtifactComponent", "publicationForm", element.getPublicationForm().get(i), i);
4696    }
4697    for (int i = 0; i < element.getWebLocation().size(); i++) {
4698      composeCitationCitedArtifactWebLocationComponent(t, "CitationCitedArtifactComponent", "webLocation", element.getWebLocation().get(i), i);
4699    }
4700    for (int i = 0; i < element.getClassification().size(); i++) {
4701      composeCitationCitedArtifactClassificationComponent(t, "CitationCitedArtifactComponent", "classification", element.getClassification().get(i), i);
4702    }
4703    if (element.hasContributorship()) {
4704      composeCitationCitedArtifactContributorshipComponent(t, "CitationCitedArtifactComponent", "contributorship", element.getContributorship(), -1);
4705    }
4706    for (int i = 0; i < element.getNote().size(); i++) {
4707      composeAnnotation(t, "CitationCitedArtifactComponent", "note", element.getNote().get(i), i);
4708    }
4709  }
4710
4711  protected void composeCitationCitedArtifactVersionComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactVersionComponent element, int index) {
4712    if (element == null) 
4713      return;
4714    Complex t;
4715    if (Utilities.noString(parentType))
4716      t = parent;
4717    else {
4718      t = parent.predicate("fhir:"+parentType+'.'+name);
4719    }
4720    composeBackboneElement(t, "version", name, element, index);
4721    if (element.hasValueElement()) {
4722      composeString(t, "CitationCitedArtifactVersionComponent", "value", element.getValueElement(), -1);
4723    }
4724    if (element.hasBaseCitation()) {
4725      composeReference(t, "CitationCitedArtifactVersionComponent", "baseCitation", element.getBaseCitation(), -1);
4726    }
4727  }
4728
4729  protected void composeCitationCitedArtifactStatusDateComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactStatusDateComponent element, int index) {
4730    if (element == null) 
4731      return;
4732    Complex t;
4733    if (Utilities.noString(parentType))
4734      t = parent;
4735    else {
4736      t = parent.predicate("fhir:"+parentType+'.'+name);
4737    }
4738    composeBackboneElement(t, "statusDate", name, element, index);
4739    if (element.hasActivity()) {
4740      composeCodeableConcept(t, "CitationCitedArtifactStatusDateComponent", "activity", element.getActivity(), -1);
4741    }
4742    if (element.hasActualElement()) {
4743      composeBoolean(t, "CitationCitedArtifactStatusDateComponent", "actual", element.getActualElement(), -1);
4744    }
4745    if (element.hasPeriod()) {
4746      composePeriod(t, "CitationCitedArtifactStatusDateComponent", "period", element.getPeriod(), -1);
4747    }
4748  }
4749
4750  protected void composeCitationCitedArtifactTitleComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactTitleComponent 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:"+parentType+'.'+name);
4758    }
4759    composeBackboneElement(t, "title", name, element, index);
4760    for (int i = 0; i < element.getType().size(); i++) {
4761      composeCodeableConcept(t, "CitationCitedArtifactTitleComponent", "type", element.getType().get(i), i);
4762    }
4763    if (element.hasLanguage()) {
4764      composeCodeableConcept(t, "CitationCitedArtifactTitleComponent", "language", element.getLanguage(), -1);
4765    }
4766    if (element.hasTextElement()) {
4767      composeMarkdown(t, "CitationCitedArtifactTitleComponent", "text", element.getTextElement(), -1);
4768    }
4769  }
4770
4771  protected void composeCitationCitedArtifactAbstractComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactAbstractComponent 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:"+parentType+'.'+name);
4779    }
4780    composeBackboneElement(t, "abstract", name, element, index);
4781    if (element.hasType()) {
4782      composeCodeableConcept(t, "CitationCitedArtifactAbstractComponent", "type", element.getType(), -1);
4783    }
4784    if (element.hasLanguage()) {
4785      composeCodeableConcept(t, "CitationCitedArtifactAbstractComponent", "language", element.getLanguage(), -1);
4786    }
4787    if (element.hasTextElement()) {
4788      composeMarkdown(t, "CitationCitedArtifactAbstractComponent", "text", element.getTextElement(), -1);
4789    }
4790    if (element.hasCopyrightElement()) {
4791      composeMarkdown(t, "CitationCitedArtifactAbstractComponent", "copyright", element.getCopyrightElement(), -1);
4792    }
4793  }
4794
4795  protected void composeCitationCitedArtifactPartComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactPartComponent element, int index) {
4796    if (element == null) 
4797      return;
4798    Complex t;
4799    if (Utilities.noString(parentType))
4800      t = parent;
4801    else {
4802      t = parent.predicate("fhir:"+parentType+'.'+name);
4803    }
4804    composeBackboneElement(t, "part", name, element, index);
4805    if (element.hasType()) {
4806      composeCodeableConcept(t, "CitationCitedArtifactPartComponent", "type", element.getType(), -1);
4807    }
4808    if (element.hasValueElement()) {
4809      composeString(t, "CitationCitedArtifactPartComponent", "value", element.getValueElement(), -1);
4810    }
4811    if (element.hasBaseCitation()) {
4812      composeReference(t, "CitationCitedArtifactPartComponent", "baseCitation", element.getBaseCitation(), -1);
4813    }
4814  }
4815
4816  protected void composeCitationCitedArtifactPublicationFormComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactPublicationFormComponent element, int index) {
4817    if (element == null) 
4818      return;
4819    Complex t;
4820    if (Utilities.noString(parentType))
4821      t = parent;
4822    else {
4823      t = parent.predicate("fhir:"+parentType+'.'+name);
4824    }
4825    composeBackboneElement(t, "publicationForm", name, element, index);
4826    if (element.hasPublishedIn()) {
4827      composeCitationCitedArtifactPublicationFormPublishedInComponent(t, "CitationCitedArtifactPublicationFormComponent", "publishedIn", element.getPublishedIn(), -1);
4828    }
4829    if (element.hasPeriodicRelease()) {
4830      composeCitationCitedArtifactPublicationFormPeriodicReleaseComponent(t, "CitationCitedArtifactPublicationFormComponent", "periodicRelease", element.getPeriodicRelease(), -1);
4831    }
4832    if (element.hasArticleDateElement()) {
4833      composeDateTime(t, "CitationCitedArtifactPublicationFormComponent", "articleDate", element.getArticleDateElement(), -1);
4834    }
4835    if (element.hasLastRevisionDateElement()) {
4836      composeDateTime(t, "CitationCitedArtifactPublicationFormComponent", "lastRevisionDate", element.getLastRevisionDateElement(), -1);
4837    }
4838    for (int i = 0; i < element.getLanguage().size(); i++) {
4839      composeCodeableConcept(t, "CitationCitedArtifactPublicationFormComponent", "language", element.getLanguage().get(i), i);
4840    }
4841    if (element.hasAccessionNumberElement()) {
4842      composeString(t, "CitationCitedArtifactPublicationFormComponent", "accessionNumber", element.getAccessionNumberElement(), -1);
4843    }
4844    if (element.hasPageStringElement()) {
4845      composeString(t, "CitationCitedArtifactPublicationFormComponent", "pageString", element.getPageStringElement(), -1);
4846    }
4847    if (element.hasFirstPageElement()) {
4848      composeString(t, "CitationCitedArtifactPublicationFormComponent", "firstPage", element.getFirstPageElement(), -1);
4849    }
4850    if (element.hasLastPageElement()) {
4851      composeString(t, "CitationCitedArtifactPublicationFormComponent", "lastPage", element.getLastPageElement(), -1);
4852    }
4853    if (element.hasPageCountElement()) {
4854      composeString(t, "CitationCitedArtifactPublicationFormComponent", "pageCount", element.getPageCountElement(), -1);
4855    }
4856    if (element.hasCopyrightElement()) {
4857      composeMarkdown(t, "CitationCitedArtifactPublicationFormComponent", "copyright", element.getCopyrightElement(), -1);
4858    }
4859  }
4860
4861  protected void composeCitationCitedArtifactPublicationFormPublishedInComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactPublicationFormPublishedInComponent element, int index) {
4862    if (element == null) 
4863      return;
4864    Complex t;
4865    if (Utilities.noString(parentType))
4866      t = parent;
4867    else {
4868      t = parent.predicate("fhir:"+parentType+'.'+name);
4869    }
4870    composeBackboneElement(t, "publishedIn", name, element, index);
4871    if (element.hasType()) {
4872      composeCodeableConcept(t, "CitationCitedArtifactPublicationFormPublishedInComponent", "type", element.getType(), -1);
4873    }
4874    for (int i = 0; i < element.getIdentifier().size(); i++) {
4875      composeIdentifier(t, "CitationCitedArtifactPublicationFormPublishedInComponent", "identifier", element.getIdentifier().get(i), i);
4876    }
4877    if (element.hasTitleElement()) {
4878      composeString(t, "CitationCitedArtifactPublicationFormPublishedInComponent", "title", element.getTitleElement(), -1);
4879    }
4880    if (element.hasPublisher()) {
4881      composeReference(t, "CitationCitedArtifactPublicationFormPublishedInComponent", "publisher", element.getPublisher(), -1);
4882    }
4883    if (element.hasPublisherLocationElement()) {
4884      composeString(t, "CitationCitedArtifactPublicationFormPublishedInComponent", "publisherLocation", element.getPublisherLocationElement(), -1);
4885    }
4886  }
4887
4888  protected void composeCitationCitedArtifactPublicationFormPeriodicReleaseComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactPublicationFormPeriodicReleaseComponent element, int index) {
4889    if (element == null) 
4890      return;
4891    Complex t;
4892    if (Utilities.noString(parentType))
4893      t = parent;
4894    else {
4895      t = parent.predicate("fhir:"+parentType+'.'+name);
4896    }
4897    composeBackboneElement(t, "periodicRelease", name, element, index);
4898    if (element.hasCitedMedium()) {
4899      composeCodeableConcept(t, "CitationCitedArtifactPublicationFormPeriodicReleaseComponent", "citedMedium", element.getCitedMedium(), -1);
4900    }
4901    if (element.hasVolumeElement()) {
4902      composeString(t, "CitationCitedArtifactPublicationFormPeriodicReleaseComponent", "volume", element.getVolumeElement(), -1);
4903    }
4904    if (element.hasIssueElement()) {
4905      composeString(t, "CitationCitedArtifactPublicationFormPeriodicReleaseComponent", "issue", element.getIssueElement(), -1);
4906    }
4907    if (element.hasDateOfPublication()) {
4908      composeCitationCitedArtifactPublicationFormPeriodicReleaseDateOfPublicationComponent(t, "CitationCitedArtifactPublicationFormPeriodicReleaseComponent", "dateOfPublication", element.getDateOfPublication(), -1);
4909    }
4910  }
4911
4912  protected void composeCitationCitedArtifactPublicationFormPeriodicReleaseDateOfPublicationComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactPublicationFormPeriodicReleaseDateOfPublicationComponent 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:"+parentType+'.'+name);
4920    }
4921    composeBackboneElement(t, "dateOfPublication", name, element, index);
4922    if (element.hasDateElement()) {
4923      composeDate(t, "CitationCitedArtifactPublicationFormPeriodicReleaseDateOfPublicationComponent", "date", element.getDateElement(), -1);
4924    }
4925    if (element.hasYearElement()) {
4926      composeString(t, "CitationCitedArtifactPublicationFormPeriodicReleaseDateOfPublicationComponent", "year", element.getYearElement(), -1);
4927    }
4928    if (element.hasMonthElement()) {
4929      composeString(t, "CitationCitedArtifactPublicationFormPeriodicReleaseDateOfPublicationComponent", "month", element.getMonthElement(), -1);
4930    }
4931    if (element.hasDayElement()) {
4932      composeString(t, "CitationCitedArtifactPublicationFormPeriodicReleaseDateOfPublicationComponent", "day", element.getDayElement(), -1);
4933    }
4934    if (element.hasSeasonElement()) {
4935      composeString(t, "CitationCitedArtifactPublicationFormPeriodicReleaseDateOfPublicationComponent", "season", element.getSeasonElement(), -1);
4936    }
4937    if (element.hasTextElement()) {
4938      composeString(t, "CitationCitedArtifactPublicationFormPeriodicReleaseDateOfPublicationComponent", "text", element.getTextElement(), -1);
4939    }
4940  }
4941
4942  protected void composeCitationCitedArtifactWebLocationComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactWebLocationComponent element, int index) {
4943    if (element == null) 
4944      return;
4945    Complex t;
4946    if (Utilities.noString(parentType))
4947      t = parent;
4948    else {
4949      t = parent.predicate("fhir:"+parentType+'.'+name);
4950    }
4951    composeBackboneElement(t, "webLocation", name, element, index);
4952    for (int i = 0; i < element.getClassifier().size(); i++) {
4953      composeCodeableConcept(t, "CitationCitedArtifactWebLocationComponent", "classifier", element.getClassifier().get(i), i);
4954    }
4955    if (element.hasUrlElement()) {
4956      composeUri(t, "CitationCitedArtifactWebLocationComponent", "url", element.getUrlElement(), -1);
4957    }
4958  }
4959
4960  protected void composeCitationCitedArtifactClassificationComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactClassificationComponent element, int index) {
4961    if (element == null) 
4962      return;
4963    Complex t;
4964    if (Utilities.noString(parentType))
4965      t = parent;
4966    else {
4967      t = parent.predicate("fhir:"+parentType+'.'+name);
4968    }
4969    composeBackboneElement(t, "classification", name, element, index);
4970    if (element.hasType()) {
4971      composeCodeableConcept(t, "CitationCitedArtifactClassificationComponent", "type", element.getType(), -1);
4972    }
4973    for (int i = 0; i < element.getClassifier().size(); i++) {
4974      composeCodeableConcept(t, "CitationCitedArtifactClassificationComponent", "classifier", element.getClassifier().get(i), i);
4975    }
4976    if (element.hasWhoClassified()) {
4977      composeCitationCitedArtifactClassificationWhoClassifiedComponent(t, "CitationCitedArtifactClassificationComponent", "whoClassified", element.getWhoClassified(), -1);
4978    }
4979  }
4980
4981  protected void composeCitationCitedArtifactClassificationWhoClassifiedComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactClassificationWhoClassifiedComponent element, int index) {
4982    if (element == null) 
4983      return;
4984    Complex t;
4985    if (Utilities.noString(parentType))
4986      t = parent;
4987    else {
4988      t = parent.predicate("fhir:"+parentType+'.'+name);
4989    }
4990    composeBackboneElement(t, "whoClassified", name, element, index);
4991    if (element.hasPerson()) {
4992      composeReference(t, "CitationCitedArtifactClassificationWhoClassifiedComponent", "person", element.getPerson(), -1);
4993    }
4994    if (element.hasOrganization()) {
4995      composeReference(t, "CitationCitedArtifactClassificationWhoClassifiedComponent", "organization", element.getOrganization(), -1);
4996    }
4997    if (element.hasPublisher()) {
4998      composeReference(t, "CitationCitedArtifactClassificationWhoClassifiedComponent", "publisher", element.getPublisher(), -1);
4999    }
5000    if (element.hasClassifierCopyrightElement()) {
5001      composeString(t, "CitationCitedArtifactClassificationWhoClassifiedComponent", "classifierCopyright", element.getClassifierCopyrightElement(), -1);
5002    }
5003    if (element.hasFreeToShareElement()) {
5004      composeBoolean(t, "CitationCitedArtifactClassificationWhoClassifiedComponent", "freeToShare", element.getFreeToShareElement(), -1);
5005    }
5006  }
5007
5008  protected void composeCitationCitedArtifactContributorshipComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactContributorshipComponent 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:"+parentType+'.'+name);
5016    }
5017    composeBackboneElement(t, "contributorship", name, element, index);
5018    if (element.hasCompleteElement()) {
5019      composeBoolean(t, "CitationCitedArtifactContributorshipComponent", "complete", element.getCompleteElement(), -1);
5020    }
5021    for (int i = 0; i < element.getEntry().size(); i++) {
5022      composeCitationCitedArtifactContributorshipEntryComponent(t, "CitationCitedArtifactContributorshipComponent", "entry", element.getEntry().get(i), i);
5023    }
5024    for (int i = 0; i < element.getSummary().size(); i++) {
5025      composeCitationCitedArtifactContributorshipSummaryComponent(t, "CitationCitedArtifactContributorshipComponent", "summary", element.getSummary().get(i), i);
5026    }
5027  }
5028
5029  protected void composeCitationCitedArtifactContributorshipEntryComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactContributorshipEntryComponent element, int index) {
5030    if (element == null) 
5031      return;
5032    Complex t;
5033    if (Utilities.noString(parentType))
5034      t = parent;
5035    else {
5036      t = parent.predicate("fhir:"+parentType+'.'+name);
5037    }
5038    composeBackboneElement(t, "entry", name, element, index);
5039    if (element.hasName()) {
5040      composeHumanName(t, "CitationCitedArtifactContributorshipEntryComponent", "name", element.getName(), -1);
5041    }
5042    if (element.hasInitialsElement()) {
5043      composeString(t, "CitationCitedArtifactContributorshipEntryComponent", "initials", element.getInitialsElement(), -1);
5044    }
5045    if (element.hasCollectiveNameElement()) {
5046      composeString(t, "CitationCitedArtifactContributorshipEntryComponent", "collectiveName", element.getCollectiveNameElement(), -1);
5047    }
5048    for (int i = 0; i < element.getIdentifier().size(); i++) {
5049      composeIdentifier(t, "CitationCitedArtifactContributorshipEntryComponent", "identifier", element.getIdentifier().get(i), i);
5050    }
5051    for (int i = 0; i < element.getAffiliationInfo().size(); i++) {
5052      composeCitationCitedArtifactContributorshipEntryAffiliationInfoComponent(t, "CitationCitedArtifactContributorshipEntryComponent", "affiliationInfo", element.getAffiliationInfo().get(i), i);
5053    }
5054    for (int i = 0; i < element.getAddress().size(); i++) {
5055      composeAddress(t, "CitationCitedArtifactContributorshipEntryComponent", "address", element.getAddress().get(i), i);
5056    }
5057    for (int i = 0; i < element.getTelecom().size(); i++) {
5058      composeContactPoint(t, "CitationCitedArtifactContributorshipEntryComponent", "telecom", element.getTelecom().get(i), i);
5059    }
5060    for (int i = 0; i < element.getContributionType().size(); i++) {
5061      composeCodeableConcept(t, "CitationCitedArtifactContributorshipEntryComponent", "contributionType", element.getContributionType().get(i), i);
5062    }
5063    if (element.hasRole()) {
5064      composeCodeableConcept(t, "CitationCitedArtifactContributorshipEntryComponent", "role", element.getRole(), -1);
5065    }
5066    for (int i = 0; i < element.getContributionInstance().size(); i++) {
5067      composeCitationCitedArtifactContributorshipEntryContributionInstanceComponent(t, "CitationCitedArtifactContributorshipEntryComponent", "contributionInstance", element.getContributionInstance().get(i), i);
5068    }
5069    if (element.hasCorrespondingContactElement()) {
5070      composeBoolean(t, "CitationCitedArtifactContributorshipEntryComponent", "correspondingContact", element.getCorrespondingContactElement(), -1);
5071    }
5072    if (element.hasRankingOrderElement()) {
5073      composePositiveInt(t, "CitationCitedArtifactContributorshipEntryComponent", "rankingOrder", element.getRankingOrderElement(), -1);
5074    }
5075  }
5076
5077  protected void composeCitationCitedArtifactContributorshipEntryAffiliationInfoComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactContributorshipEntryAffiliationInfoComponent element, int index) {
5078    if (element == null) 
5079      return;
5080    Complex t;
5081    if (Utilities.noString(parentType))
5082      t = parent;
5083    else {
5084      t = parent.predicate("fhir:"+parentType+'.'+name);
5085    }
5086    composeBackboneElement(t, "affiliationInfo", name, element, index);
5087    if (element.hasAffiliationElement()) {
5088      composeString(t, "CitationCitedArtifactContributorshipEntryAffiliationInfoComponent", "affiliation", element.getAffiliationElement(), -1);
5089    }
5090    if (element.hasRoleElement()) {
5091      composeString(t, "CitationCitedArtifactContributorshipEntryAffiliationInfoComponent", "role", element.getRoleElement(), -1);
5092    }
5093    for (int i = 0; i < element.getIdentifier().size(); i++) {
5094      composeIdentifier(t, "CitationCitedArtifactContributorshipEntryAffiliationInfoComponent", "identifier", element.getIdentifier().get(i), i);
5095    }
5096  }
5097
5098  protected void composeCitationCitedArtifactContributorshipEntryContributionInstanceComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactContributorshipEntryContributionInstanceComponent element, int index) {
5099    if (element == null) 
5100      return;
5101    Complex t;
5102    if (Utilities.noString(parentType))
5103      t = parent;
5104    else {
5105      t = parent.predicate("fhir:"+parentType+'.'+name);
5106    }
5107    composeBackboneElement(t, "contributionInstance", name, element, index);
5108    if (element.hasType()) {
5109      composeCodeableConcept(t, "CitationCitedArtifactContributorshipEntryContributionInstanceComponent", "type", element.getType(), -1);
5110    }
5111    if (element.hasTimeElement()) {
5112      composeDateTime(t, "CitationCitedArtifactContributorshipEntryContributionInstanceComponent", "time", element.getTimeElement(), -1);
5113    }
5114  }
5115
5116  protected void composeCitationCitedArtifactContributorshipSummaryComponent(Complex parent, String parentType, String name, Citation.CitationCitedArtifactContributorshipSummaryComponent element, int index) {
5117    if (element == null) 
5118      return;
5119    Complex t;
5120    if (Utilities.noString(parentType))
5121      t = parent;
5122    else {
5123      t = parent.predicate("fhir:"+parentType+'.'+name);
5124    }
5125    composeBackboneElement(t, "summary", name, element, index);
5126    if (element.hasType()) {
5127      composeCodeableConcept(t, "CitationCitedArtifactContributorshipSummaryComponent", "type", element.getType(), -1);
5128    }
5129    if (element.hasStyle()) {
5130      composeCodeableConcept(t, "CitationCitedArtifactContributorshipSummaryComponent", "style", element.getStyle(), -1);
5131    }
5132    if (element.hasSource()) {
5133      composeCodeableConcept(t, "CitationCitedArtifactContributorshipSummaryComponent", "source", element.getSource(), -1);
5134    }
5135    if (element.hasValueElement()) {
5136      composeMarkdown(t, "CitationCitedArtifactContributorshipSummaryComponent", "value", element.getValueElement(), -1);
5137    }
5138  }
5139
5140  protected void composeClaim(Complex parent, String parentType, String name, Claim element, int index) {
5141    if (element == null) 
5142      return;
5143    Complex t;
5144    if (Utilities.noString(parentType))
5145      t = parent;
5146    else {
5147      t = parent.predicate("fhir:"+parentType+'.'+name);
5148    }
5149    composeDomainResource(t, "Claim", name, element, index);
5150    for (int i = 0; i < element.getIdentifier().size(); i++) {
5151      composeIdentifier(t, "Claim", "identifier", element.getIdentifier().get(i), i);
5152    }
5153    if (element.hasStatusElement()) {
5154      composeEnum(t, "Claim", "status", element.getStatusElement(), -1);
5155    }
5156    if (element.hasType()) {
5157      composeCodeableConcept(t, "Claim", "type", element.getType(), -1);
5158    }
5159    if (element.hasSubType()) {
5160      composeCodeableConcept(t, "Claim", "subType", element.getSubType(), -1);
5161    }
5162    if (element.hasUseElement()) {
5163      composeEnum(t, "Claim", "use", element.getUseElement(), -1);
5164    }
5165    if (element.hasPatient()) {
5166      composeReference(t, "Claim", "patient", element.getPatient(), -1);
5167    }
5168    if (element.hasBillablePeriod()) {
5169      composePeriod(t, "Claim", "billablePeriod", element.getBillablePeriod(), -1);
5170    }
5171    if (element.hasCreatedElement()) {
5172      composeDateTime(t, "Claim", "created", element.getCreatedElement(), -1);
5173    }
5174    if (element.hasEnterer()) {
5175      composeReference(t, "Claim", "enterer", element.getEnterer(), -1);
5176    }
5177    if (element.hasInsurer()) {
5178      composeReference(t, "Claim", "insurer", element.getInsurer(), -1);
5179    }
5180    if (element.hasProvider()) {
5181      composeReference(t, "Claim", "provider", element.getProvider(), -1);
5182    }
5183    if (element.hasPriority()) {
5184      composeCodeableConcept(t, "Claim", "priority", element.getPriority(), -1);
5185    }
5186    if (element.hasFundsReserve()) {
5187      composeCodeableConcept(t, "Claim", "fundsReserve", element.getFundsReserve(), -1);
5188    }
5189    for (int i = 0; i < element.getRelated().size(); i++) {
5190      composeClaimRelatedClaimComponent(t, "Claim", "related", element.getRelated().get(i), i);
5191    }
5192    if (element.hasPrescription()) {
5193      composeReference(t, "Claim", "prescription", element.getPrescription(), -1);
5194    }
5195    if (element.hasOriginalPrescription()) {
5196      composeReference(t, "Claim", "originalPrescription", element.getOriginalPrescription(), -1);
5197    }
5198    if (element.hasPayee()) {
5199      composeClaimPayeeComponent(t, "Claim", "payee", element.getPayee(), -1);
5200    }
5201    if (element.hasReferral()) {
5202      composeReference(t, "Claim", "referral", element.getReferral(), -1);
5203    }
5204    if (element.hasFacility()) {
5205      composeReference(t, "Claim", "facility", element.getFacility(), -1);
5206    }
5207    for (int i = 0; i < element.getCareTeam().size(); i++) {
5208      composeClaimCareTeamComponent(t, "Claim", "careTeam", element.getCareTeam().get(i), i);
5209    }
5210    for (int i = 0; i < element.getSupportingInfo().size(); i++) {
5211      composeClaimSupportingInformationComponent(t, "Claim", "supportingInfo", element.getSupportingInfo().get(i), i);
5212    }
5213    for (int i = 0; i < element.getDiagnosis().size(); i++) {
5214      composeClaimDiagnosisComponent(t, "Claim", "diagnosis", element.getDiagnosis().get(i), i);
5215    }
5216    for (int i = 0; i < element.getProcedure().size(); i++) {
5217      composeClaimProcedureComponent(t, "Claim", "procedure", element.getProcedure().get(i), i);
5218    }
5219    for (int i = 0; i < element.getInsurance().size(); i++) {
5220      composeClaimInsuranceComponent(t, "Claim", "insurance", element.getInsurance().get(i), i);
5221    }
5222    if (element.hasAccident()) {
5223      composeClaimAccidentComponent(t, "Claim", "accident", element.getAccident(), -1);
5224    }
5225    for (int i = 0; i < element.getItem().size(); i++) {
5226      composeClaimItemComponent(t, "Claim", "item", element.getItem().get(i), i);
5227    }
5228    if (element.hasTotal()) {
5229      composeMoney(t, "Claim", "total", element.getTotal(), -1);
5230    }
5231  }
5232
5233  protected void composeClaimRelatedClaimComponent(Complex parent, String parentType, String name, Claim.RelatedClaimComponent 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:"+parentType+'.'+name);
5241    }
5242    composeBackboneElement(t, "related", name, element, index);
5243    if (element.hasClaim()) {
5244      composeReference(t, "RelatedClaimComponent", "claim", element.getClaim(), -1);
5245    }
5246    if (element.hasRelationship()) {
5247      composeCodeableConcept(t, "RelatedClaimComponent", "relationship", element.getRelationship(), -1);
5248    }
5249    if (element.hasReference()) {
5250      composeIdentifier(t, "RelatedClaimComponent", "reference", element.getReference(), -1);
5251    }
5252  }
5253
5254  protected void composeClaimPayeeComponent(Complex parent, String parentType, String name, Claim.PayeeComponent element, int index) {
5255    if (element == null) 
5256      return;
5257    Complex t;
5258    if (Utilities.noString(parentType))
5259      t = parent;
5260    else {
5261      t = parent.predicate("fhir:"+parentType+'.'+name);
5262    }
5263    composeBackboneElement(t, "payee", name, element, index);
5264    if (element.hasType()) {
5265      composeCodeableConcept(t, "PayeeComponent", "type", element.getType(), -1);
5266    }
5267    if (element.hasParty()) {
5268      composeReference(t, "PayeeComponent", "party", element.getParty(), -1);
5269    }
5270  }
5271
5272  protected void composeClaimCareTeamComponent(Complex parent, String parentType, String name, Claim.CareTeamComponent 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:"+parentType+'.'+name);
5280    }
5281    composeBackboneElement(t, "careTeam", name, element, index);
5282    if (element.hasSequenceElement()) {
5283      composePositiveInt(t, "CareTeamComponent", "sequence", element.getSequenceElement(), -1);
5284    }
5285    if (element.hasProvider()) {
5286      composeReference(t, "CareTeamComponent", "provider", element.getProvider(), -1);
5287    }
5288    if (element.hasResponsibleElement()) {
5289      composeBoolean(t, "CareTeamComponent", "responsible", element.getResponsibleElement(), -1);
5290    }
5291    if (element.hasRole()) {
5292      composeCodeableConcept(t, "CareTeamComponent", "role", element.getRole(), -1);
5293    }
5294    if (element.hasQualification()) {
5295      composeCodeableConcept(t, "CareTeamComponent", "qualification", element.getQualification(), -1);
5296    }
5297  }
5298
5299  protected void composeClaimSupportingInformationComponent(Complex parent, String parentType, String name, Claim.SupportingInformationComponent element, int index) {
5300    if (element == null) 
5301      return;
5302    Complex t;
5303    if (Utilities.noString(parentType))
5304      t = parent;
5305    else {
5306      t = parent.predicate("fhir:"+parentType+'.'+name);
5307    }
5308    composeBackboneElement(t, "supportingInfo", name, element, index);
5309    if (element.hasSequenceElement()) {
5310      composePositiveInt(t, "SupportingInformationComponent", "sequence", element.getSequenceElement(), -1);
5311    }
5312    if (element.hasCategory()) {
5313      composeCodeableConcept(t, "SupportingInformationComponent", "category", element.getCategory(), -1);
5314    }
5315    if (element.hasCode()) {
5316      composeCodeableConcept(t, "SupportingInformationComponent", "code", element.getCode(), -1);
5317    }
5318    if (element.hasTiming()) {
5319      composeType(t, "SupportingInformationComponent", "timing", element.getTiming(), -1);
5320    }
5321    if (element.hasValue()) {
5322      composeType(t, "SupportingInformationComponent", "value", element.getValue(), -1);
5323    }
5324    if (element.hasReason()) {
5325      composeCodeableConcept(t, "SupportingInformationComponent", "reason", element.getReason(), -1);
5326    }
5327  }
5328
5329  protected void composeClaimDiagnosisComponent(Complex parent, String parentType, String name, Claim.DiagnosisComponent 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:"+parentType+'.'+name);
5337    }
5338    composeBackboneElement(t, "diagnosis", name, element, index);
5339    if (element.hasSequenceElement()) {
5340      composePositiveInt(t, "DiagnosisComponent", "sequence", element.getSequenceElement(), -1);
5341    }
5342    if (element.hasDiagnosis()) {
5343      composeType(t, "DiagnosisComponent", "diagnosis", element.getDiagnosis(), -1);
5344    }
5345    for (int i = 0; i < element.getType().size(); i++) {
5346      composeCodeableConcept(t, "DiagnosisComponent", "type", element.getType().get(i), i);
5347    }
5348    if (element.hasOnAdmission()) {
5349      composeCodeableConcept(t, "DiagnosisComponent", "onAdmission", element.getOnAdmission(), -1);
5350    }
5351    if (element.hasPackageCode()) {
5352      composeCodeableConcept(t, "DiagnosisComponent", "packageCode", element.getPackageCode(), -1);
5353    }
5354  }
5355
5356  protected void composeClaimProcedureComponent(Complex parent, String parentType, String name, Claim.ProcedureComponent element, int index) {
5357    if (element == null) 
5358      return;
5359    Complex t;
5360    if (Utilities.noString(parentType))
5361      t = parent;
5362    else {
5363      t = parent.predicate("fhir:"+parentType+'.'+name);
5364    }
5365    composeBackboneElement(t, "procedure", name, element, index);
5366    if (element.hasSequenceElement()) {
5367      composePositiveInt(t, "ProcedureComponent", "sequence", element.getSequenceElement(), -1);
5368    }
5369    for (int i = 0; i < element.getType().size(); i++) {
5370      composeCodeableConcept(t, "ProcedureComponent", "type", element.getType().get(i), i);
5371    }
5372    if (element.hasDateElement()) {
5373      composeDateTime(t, "ProcedureComponent", "date", element.getDateElement(), -1);
5374    }
5375    if (element.hasProcedure()) {
5376      composeType(t, "ProcedureComponent", "procedure", element.getProcedure(), -1);
5377    }
5378    for (int i = 0; i < element.getUdi().size(); i++) {
5379      composeReference(t, "ProcedureComponent", "udi", element.getUdi().get(i), i);
5380    }
5381  }
5382
5383  protected void composeClaimInsuranceComponent(Complex parent, String parentType, String name, Claim.InsuranceComponent element, int index) {
5384    if (element == null) 
5385      return;
5386    Complex t;
5387    if (Utilities.noString(parentType))
5388      t = parent;
5389    else {
5390      t = parent.predicate("fhir:"+parentType+'.'+name);
5391    }
5392    composeBackboneElement(t, "insurance", name, element, index);
5393    if (element.hasSequenceElement()) {
5394      composePositiveInt(t, "InsuranceComponent", "sequence", element.getSequenceElement(), -1);
5395    }
5396    if (element.hasFocalElement()) {
5397      composeBoolean(t, "InsuranceComponent", "focal", element.getFocalElement(), -1);
5398    }
5399    if (element.hasIdentifier()) {
5400      composeIdentifier(t, "InsuranceComponent", "identifier", element.getIdentifier(), -1);
5401    }
5402    if (element.hasCoverage()) {
5403      composeReference(t, "InsuranceComponent", "coverage", element.getCoverage(), -1);
5404    }
5405    if (element.hasBusinessArrangementElement()) {
5406      composeString(t, "InsuranceComponent", "businessArrangement", element.getBusinessArrangementElement(), -1);
5407    }
5408    for (int i = 0; i < element.getPreAuthRef().size(); i++) {
5409      composeString(t, "InsuranceComponent", "preAuthRef", element.getPreAuthRef().get(i), i);
5410    }
5411    if (element.hasClaimResponse()) {
5412      composeReference(t, "InsuranceComponent", "claimResponse", element.getClaimResponse(), -1);
5413    }
5414  }
5415
5416  protected void composeClaimAccidentComponent(Complex parent, String parentType, String name, Claim.AccidentComponent element, int index) {
5417    if (element == null) 
5418      return;
5419    Complex t;
5420    if (Utilities.noString(parentType))
5421      t = parent;
5422    else {
5423      t = parent.predicate("fhir:"+parentType+'.'+name);
5424    }
5425    composeBackboneElement(t, "accident", name, element, index);
5426    if (element.hasDateElement()) {
5427      composeDate(t, "AccidentComponent", "date", element.getDateElement(), -1);
5428    }
5429    if (element.hasType()) {
5430      composeCodeableConcept(t, "AccidentComponent", "type", element.getType(), -1);
5431    }
5432    if (element.hasLocation()) {
5433      composeType(t, "AccidentComponent", "location", element.getLocation(), -1);
5434    }
5435  }
5436
5437  protected void composeClaimItemComponent(Complex parent, String parentType, String name, Claim.ItemComponent element, int index) {
5438    if (element == null) 
5439      return;
5440    Complex t;
5441    if (Utilities.noString(parentType))
5442      t = parent;
5443    else {
5444      t = parent.predicate("fhir:"+parentType+'.'+name);
5445    }
5446    composeBackboneElement(t, "item", name, element, index);
5447    if (element.hasSequenceElement()) {
5448      composePositiveInt(t, "ItemComponent", "sequence", element.getSequenceElement(), -1);
5449    }
5450    for (int i = 0; i < element.getCareTeamSequence().size(); i++) {
5451      composePositiveInt(t, "ItemComponent", "careTeamSequence", element.getCareTeamSequence().get(i), i);
5452    }
5453    for (int i = 0; i < element.getDiagnosisSequence().size(); i++) {
5454      composePositiveInt(t, "ItemComponent", "diagnosisSequence", element.getDiagnosisSequence().get(i), i);
5455    }
5456    for (int i = 0; i < element.getProcedureSequence().size(); i++) {
5457      composePositiveInt(t, "ItemComponent", "procedureSequence", element.getProcedureSequence().get(i), i);
5458    }
5459    for (int i = 0; i < element.getInformationSequence().size(); i++) {
5460      composePositiveInt(t, "ItemComponent", "informationSequence", element.getInformationSequence().get(i), i);
5461    }
5462    if (element.hasRevenue()) {
5463      composeCodeableConcept(t, "ItemComponent", "revenue", element.getRevenue(), -1);
5464    }
5465    if (element.hasCategory()) {
5466      composeCodeableConcept(t, "ItemComponent", "category", element.getCategory(), -1);
5467    }
5468    if (element.hasProductOrService()) {
5469      composeCodeableConcept(t, "ItemComponent", "productOrService", element.getProductOrService(), -1);
5470    }
5471    for (int i = 0; i < element.getModifier().size(); i++) {
5472      composeCodeableConcept(t, "ItemComponent", "modifier", element.getModifier().get(i), i);
5473    }
5474    for (int i = 0; i < element.getProgramCode().size(); i++) {
5475      composeCodeableConcept(t, "ItemComponent", "programCode", element.getProgramCode().get(i), i);
5476    }
5477    if (element.hasServiced()) {
5478      composeType(t, "ItemComponent", "serviced", element.getServiced(), -1);
5479    }
5480    if (element.hasLocation()) {
5481      composeType(t, "ItemComponent", "location", element.getLocation(), -1);
5482    }
5483    if (element.hasQuantity()) {
5484      composeQuantity(t, "ItemComponent", "quantity", element.getQuantity(), -1);
5485    }
5486    if (element.hasUnitPrice()) {
5487      composeMoney(t, "ItemComponent", "unitPrice", element.getUnitPrice(), -1);
5488    }
5489    if (element.hasFactorElement()) {
5490      composeDecimal(t, "ItemComponent", "factor", element.getFactorElement(), -1);
5491    }
5492    if (element.hasNet()) {
5493      composeMoney(t, "ItemComponent", "net", element.getNet(), -1);
5494    }
5495    for (int i = 0; i < element.getUdi().size(); i++) {
5496      composeReference(t, "ItemComponent", "udi", element.getUdi().get(i), i);
5497    }
5498    if (element.hasBodySite()) {
5499      composeCodeableConcept(t, "ItemComponent", "bodySite", element.getBodySite(), -1);
5500    }
5501    for (int i = 0; i < element.getSubSite().size(); i++) {
5502      composeCodeableConcept(t, "ItemComponent", "subSite", element.getSubSite().get(i), i);
5503    }
5504    for (int i = 0; i < element.getEncounter().size(); i++) {
5505      composeReference(t, "ItemComponent", "encounter", element.getEncounter().get(i), i);
5506    }
5507    for (int i = 0; i < element.getDetail().size(); i++) {
5508      composeClaimDetailComponent(t, "ItemComponent", "detail", element.getDetail().get(i), i);
5509    }
5510  }
5511
5512  protected void composeClaimDetailComponent(Complex parent, String parentType, String name, Claim.DetailComponent element, int index) {
5513    if (element == null) 
5514      return;
5515    Complex t;
5516    if (Utilities.noString(parentType))
5517      t = parent;
5518    else {
5519      t = parent.predicate("fhir:"+parentType+'.'+name);
5520    }
5521    composeBackboneElement(t, "detail", name, element, index);
5522    if (element.hasSequenceElement()) {
5523      composePositiveInt(t, "DetailComponent", "sequence", element.getSequenceElement(), -1);
5524    }
5525    if (element.hasRevenue()) {
5526      composeCodeableConcept(t, "DetailComponent", "revenue", element.getRevenue(), -1);
5527    }
5528    if (element.hasCategory()) {
5529      composeCodeableConcept(t, "DetailComponent", "category", element.getCategory(), -1);
5530    }
5531    if (element.hasProductOrService()) {
5532      composeCodeableConcept(t, "DetailComponent", "productOrService", element.getProductOrService(), -1);
5533    }
5534    for (int i = 0; i < element.getModifier().size(); i++) {
5535      composeCodeableConcept(t, "DetailComponent", "modifier", element.getModifier().get(i), i);
5536    }
5537    for (int i = 0; i < element.getProgramCode().size(); i++) {
5538      composeCodeableConcept(t, "DetailComponent", "programCode", element.getProgramCode().get(i), i);
5539    }
5540    if (element.hasQuantity()) {
5541      composeQuantity(t, "DetailComponent", "quantity", element.getQuantity(), -1);
5542    }
5543    if (element.hasUnitPrice()) {
5544      composeMoney(t, "DetailComponent", "unitPrice", element.getUnitPrice(), -1);
5545    }
5546    if (element.hasFactorElement()) {
5547      composeDecimal(t, "DetailComponent", "factor", element.getFactorElement(), -1);
5548    }
5549    if (element.hasNet()) {
5550      composeMoney(t, "DetailComponent", "net", element.getNet(), -1);
5551    }
5552    for (int i = 0; i < element.getUdi().size(); i++) {
5553      composeReference(t, "DetailComponent", "udi", element.getUdi().get(i), i);
5554    }
5555    for (int i = 0; i < element.getSubDetail().size(); i++) {
5556      composeClaimSubDetailComponent(t, "DetailComponent", "subDetail", element.getSubDetail().get(i), i);
5557    }
5558  }
5559
5560  protected void composeClaimSubDetailComponent(Complex parent, String parentType, String name, Claim.SubDetailComponent element, int index) {
5561    if (element == null) 
5562      return;
5563    Complex t;
5564    if (Utilities.noString(parentType))
5565      t = parent;
5566    else {
5567      t = parent.predicate("fhir:"+parentType+'.'+name);
5568    }
5569    composeBackboneElement(t, "subDetail", name, element, index);
5570    if (element.hasSequenceElement()) {
5571      composePositiveInt(t, "SubDetailComponent", "sequence", element.getSequenceElement(), -1);
5572    }
5573    if (element.hasRevenue()) {
5574      composeCodeableConcept(t, "SubDetailComponent", "revenue", element.getRevenue(), -1);
5575    }
5576    if (element.hasCategory()) {
5577      composeCodeableConcept(t, "SubDetailComponent", "category", element.getCategory(), -1);
5578    }
5579    if (element.hasProductOrService()) {
5580      composeCodeableConcept(t, "SubDetailComponent", "productOrService", element.getProductOrService(), -1);
5581    }
5582    for (int i = 0; i < element.getModifier().size(); i++) {
5583      composeCodeableConcept(t, "SubDetailComponent", "modifier", element.getModifier().get(i), i);
5584    }
5585    for (int i = 0; i < element.getProgramCode().size(); i++) {
5586      composeCodeableConcept(t, "SubDetailComponent", "programCode", element.getProgramCode().get(i), i);
5587    }
5588    if (element.hasQuantity()) {
5589      composeQuantity(t, "SubDetailComponent", "quantity", element.getQuantity(), -1);
5590    }
5591    if (element.hasUnitPrice()) {
5592      composeMoney(t, "SubDetailComponent", "unitPrice", element.getUnitPrice(), -1);
5593    }
5594    if (element.hasFactorElement()) {
5595      composeDecimal(t, "SubDetailComponent", "factor", element.getFactorElement(), -1);
5596    }
5597    if (element.hasNet()) {
5598      composeMoney(t, "SubDetailComponent", "net", element.getNet(), -1);
5599    }
5600    for (int i = 0; i < element.getUdi().size(); i++) {
5601      composeReference(t, "SubDetailComponent", "udi", element.getUdi().get(i), i);
5602    }
5603  }
5604
5605  protected void composeClaimResponse(Complex parent, String parentType, String name, ClaimResponse element, int index) {
5606    if (element == null) 
5607      return;
5608    Complex t;
5609    if (Utilities.noString(parentType))
5610      t = parent;
5611    else {
5612      t = parent.predicate("fhir:"+parentType+'.'+name);
5613    }
5614    composeDomainResource(t, "ClaimResponse", name, element, index);
5615    for (int i = 0; i < element.getIdentifier().size(); i++) {
5616      composeIdentifier(t, "ClaimResponse", "identifier", element.getIdentifier().get(i), i);
5617    }
5618    if (element.hasStatusElement()) {
5619      composeEnum(t, "ClaimResponse", "status", element.getStatusElement(), -1);
5620    }
5621    if (element.hasType()) {
5622      composeCodeableConcept(t, "ClaimResponse", "type", element.getType(), -1);
5623    }
5624    if (element.hasSubType()) {
5625      composeCodeableConcept(t, "ClaimResponse", "subType", element.getSubType(), -1);
5626    }
5627    if (element.hasUseElement()) {
5628      composeEnum(t, "ClaimResponse", "use", element.getUseElement(), -1);
5629    }
5630    if (element.hasPatient()) {
5631      composeReference(t, "ClaimResponse", "patient", element.getPatient(), -1);
5632    }
5633    if (element.hasCreatedElement()) {
5634      composeDateTime(t, "ClaimResponse", "created", element.getCreatedElement(), -1);
5635    }
5636    if (element.hasInsurer()) {
5637      composeReference(t, "ClaimResponse", "insurer", element.getInsurer(), -1);
5638    }
5639    if (element.hasRequestor()) {
5640      composeReference(t, "ClaimResponse", "requestor", element.getRequestor(), -1);
5641    }
5642    if (element.hasRequest()) {
5643      composeReference(t, "ClaimResponse", "request", element.getRequest(), -1);
5644    }
5645    if (element.hasOutcomeElement()) {
5646      composeEnum(t, "ClaimResponse", "outcome", element.getOutcomeElement(), -1);
5647    }
5648    if (element.hasDispositionElement()) {
5649      composeString(t, "ClaimResponse", "disposition", element.getDispositionElement(), -1);
5650    }
5651    if (element.hasPreAuthRefElement()) {
5652      composeString(t, "ClaimResponse", "preAuthRef", element.getPreAuthRefElement(), -1);
5653    }
5654    if (element.hasPreAuthPeriod()) {
5655      composePeriod(t, "ClaimResponse", "preAuthPeriod", element.getPreAuthPeriod(), -1);
5656    }
5657    if (element.hasPayeeType()) {
5658      composeCodeableConcept(t, "ClaimResponse", "payeeType", element.getPayeeType(), -1);
5659    }
5660    for (int i = 0; i < element.getItem().size(); i++) {
5661      composeClaimResponseItemComponent(t, "ClaimResponse", "item", element.getItem().get(i), i);
5662    }
5663    for (int i = 0; i < element.getAddItem().size(); i++) {
5664      composeClaimResponseAddedItemComponent(t, "ClaimResponse", "addItem", element.getAddItem().get(i), i);
5665    }
5666    for (int i = 0; i < element.getAdjudication().size(); i++) {
5667      composeClaimResponseAdjudicationComponent(t, "ClaimResponse", "adjudication", element.getAdjudication().get(i), i);
5668    }
5669    for (int i = 0; i < element.getTotal().size(); i++) {
5670      composeClaimResponseTotalComponent(t, "ClaimResponse", "total", element.getTotal().get(i), i);
5671    }
5672    if (element.hasPayment()) {
5673      composeClaimResponsePaymentComponent(t, "ClaimResponse", "payment", element.getPayment(), -1);
5674    }
5675    if (element.hasFundsReserve()) {
5676      composeCodeableConcept(t, "ClaimResponse", "fundsReserve", element.getFundsReserve(), -1);
5677    }
5678    if (element.hasFormCode()) {
5679      composeCodeableConcept(t, "ClaimResponse", "formCode", element.getFormCode(), -1);
5680    }
5681    if (element.hasForm()) {
5682      composeAttachment(t, "ClaimResponse", "form", element.getForm(), -1);
5683    }
5684    for (int i = 0; i < element.getProcessNote().size(); i++) {
5685      composeClaimResponseNoteComponent(t, "ClaimResponse", "processNote", element.getProcessNote().get(i), i);
5686    }
5687    for (int i = 0; i < element.getCommunicationRequest().size(); i++) {
5688      composeReference(t, "ClaimResponse", "communicationRequest", element.getCommunicationRequest().get(i), i);
5689    }
5690    for (int i = 0; i < element.getInsurance().size(); i++) {
5691      composeClaimResponseInsuranceComponent(t, "ClaimResponse", "insurance", element.getInsurance().get(i), i);
5692    }
5693    for (int i = 0; i < element.getError().size(); i++) {
5694      composeClaimResponseErrorComponent(t, "ClaimResponse", "error", element.getError().get(i), i);
5695    }
5696  }
5697
5698  protected void composeClaimResponseItemComponent(Complex parent, String parentType, String name, ClaimResponse.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:"+parentType+'.'+name);
5706    }
5707    composeBackboneElement(t, "item", name, element, index);
5708    if (element.hasItemSequenceElement()) {
5709      composePositiveInt(t, "ItemComponent", "itemSequence", element.getItemSequenceElement(), -1);
5710    }
5711    for (int i = 0; i < element.getNoteNumber().size(); i++) {
5712      composePositiveInt(t, "ItemComponent", "noteNumber", element.getNoteNumber().get(i), i);
5713    }
5714    for (int i = 0; i < element.getAdjudication().size(); i++) {
5715      composeClaimResponseAdjudicationComponent(t, "ItemComponent", "adjudication", element.getAdjudication().get(i), i);
5716    }
5717    for (int i = 0; i < element.getDetail().size(); i++) {
5718      composeClaimResponseItemDetailComponent(t, "ItemComponent", "detail", element.getDetail().get(i), i);
5719    }
5720  }
5721
5722  protected void composeClaimResponseAdjudicationComponent(Complex parent, String parentType, String name, ClaimResponse.AdjudicationComponent element, int index) {
5723    if (element == null) 
5724      return;
5725    Complex t;
5726    if (Utilities.noString(parentType))
5727      t = parent;
5728    else {
5729      t = parent.predicate("fhir:"+parentType+'.'+name);
5730    }
5731    composeBackboneElement(t, "adjudication", name, element, index);
5732    if (element.hasCategory()) {
5733      composeCodeableConcept(t, "AdjudicationComponent", "category", element.getCategory(), -1);
5734    }
5735    if (element.hasReason()) {
5736      composeCodeableConcept(t, "AdjudicationComponent", "reason", element.getReason(), -1);
5737    }
5738    if (element.hasAmount()) {
5739      composeMoney(t, "AdjudicationComponent", "amount", element.getAmount(), -1);
5740    }
5741    if (element.hasValueElement()) {
5742      composeDecimal(t, "AdjudicationComponent", "value", element.getValueElement(), -1);
5743    }
5744  }
5745
5746  protected void composeClaimResponseItemDetailComponent(Complex parent, String parentType, String name, ClaimResponse.ItemDetailComponent element, int index) {
5747    if (element == null) 
5748      return;
5749    Complex t;
5750    if (Utilities.noString(parentType))
5751      t = parent;
5752    else {
5753      t = parent.predicate("fhir:"+parentType+'.'+name);
5754    }
5755    composeBackboneElement(t, "detail", name, element, index);
5756    if (element.hasDetailSequenceElement()) {
5757      composePositiveInt(t, "ItemDetailComponent", "detailSequence", element.getDetailSequenceElement(), -1);
5758    }
5759    for (int i = 0; i < element.getNoteNumber().size(); i++) {
5760      composePositiveInt(t, "ItemDetailComponent", "noteNumber", element.getNoteNumber().get(i), i);
5761    }
5762    for (int i = 0; i < element.getAdjudication().size(); i++) {
5763      composeClaimResponseAdjudicationComponent(t, "ItemDetailComponent", "adjudication", element.getAdjudication().get(i), i);
5764    }
5765    for (int i = 0; i < element.getSubDetail().size(); i++) {
5766      composeClaimResponseSubDetailComponent(t, "ItemDetailComponent", "subDetail", element.getSubDetail().get(i), i);
5767    }
5768  }
5769
5770  protected void composeClaimResponseSubDetailComponent(Complex parent, String parentType, String name, ClaimResponse.SubDetailComponent element, int index) {
5771    if (element == null) 
5772      return;
5773    Complex t;
5774    if (Utilities.noString(parentType))
5775      t = parent;
5776    else {
5777      t = parent.predicate("fhir:"+parentType+'.'+name);
5778    }
5779    composeBackboneElement(t, "subDetail", name, element, index);
5780    if (element.hasSubDetailSequenceElement()) {
5781      composePositiveInt(t, "SubDetailComponent", "subDetailSequence", element.getSubDetailSequenceElement(), -1);
5782    }
5783    for (int i = 0; i < element.getNoteNumber().size(); i++) {
5784      composePositiveInt(t, "SubDetailComponent", "noteNumber", element.getNoteNumber().get(i), i);
5785    }
5786    for (int i = 0; i < element.getAdjudication().size(); i++) {
5787      composeClaimResponseAdjudicationComponent(t, "SubDetailComponent", "adjudication", element.getAdjudication().get(i), i);
5788    }
5789  }
5790
5791  protected void composeClaimResponseAddedItemComponent(Complex parent, String parentType, String name, ClaimResponse.AddedItemComponent element, int index) {
5792    if (element == null) 
5793      return;
5794    Complex t;
5795    if (Utilities.noString(parentType))
5796      t = parent;
5797    else {
5798      t = parent.predicate("fhir:"+parentType+'.'+name);
5799    }
5800    composeBackboneElement(t, "addItem", name, element, index);
5801    for (int i = 0; i < element.getItemSequence().size(); i++) {
5802      composePositiveInt(t, "AddedItemComponent", "itemSequence", element.getItemSequence().get(i), i);
5803    }
5804    for (int i = 0; i < element.getDetailSequence().size(); i++) {
5805      composePositiveInt(t, "AddedItemComponent", "detailSequence", element.getDetailSequence().get(i), i);
5806    }
5807    for (int i = 0; i < element.getSubdetailSequence().size(); i++) {
5808      composePositiveInt(t, "AddedItemComponent", "subdetailSequence", element.getSubdetailSequence().get(i), i);
5809    }
5810    for (int i = 0; i < element.getProvider().size(); i++) {
5811      composeReference(t, "AddedItemComponent", "provider", element.getProvider().get(i), i);
5812    }
5813    if (element.hasProductOrService()) {
5814      composeCodeableConcept(t, "AddedItemComponent", "productOrService", element.getProductOrService(), -1);
5815    }
5816    for (int i = 0; i < element.getModifier().size(); i++) {
5817      composeCodeableConcept(t, "AddedItemComponent", "modifier", element.getModifier().get(i), i);
5818    }
5819    for (int i = 0; i < element.getProgramCode().size(); i++) {
5820      composeCodeableConcept(t, "AddedItemComponent", "programCode", element.getProgramCode().get(i), i);
5821    }
5822    if (element.hasServiced()) {
5823      composeType(t, "AddedItemComponent", "serviced", element.getServiced(), -1);
5824    }
5825    if (element.hasLocation()) {
5826      composeType(t, "AddedItemComponent", "location", element.getLocation(), -1);
5827    }
5828    if (element.hasQuantity()) {
5829      composeQuantity(t, "AddedItemComponent", "quantity", element.getQuantity(), -1);
5830    }
5831    if (element.hasUnitPrice()) {
5832      composeMoney(t, "AddedItemComponent", "unitPrice", element.getUnitPrice(), -1);
5833    }
5834    if (element.hasFactorElement()) {
5835      composeDecimal(t, "AddedItemComponent", "factor", element.getFactorElement(), -1);
5836    }
5837    if (element.hasNet()) {
5838      composeMoney(t, "AddedItemComponent", "net", element.getNet(), -1);
5839    }
5840    if (element.hasBodySite()) {
5841      composeCodeableConcept(t, "AddedItemComponent", "bodySite", element.getBodySite(), -1);
5842    }
5843    for (int i = 0; i < element.getSubSite().size(); i++) {
5844      composeCodeableConcept(t, "AddedItemComponent", "subSite", element.getSubSite().get(i), i);
5845    }
5846    for (int i = 0; i < element.getNoteNumber().size(); i++) {
5847      composePositiveInt(t, "AddedItemComponent", "noteNumber", element.getNoteNumber().get(i), i);
5848    }
5849    for (int i = 0; i < element.getAdjudication().size(); i++) {
5850      composeClaimResponseAdjudicationComponent(t, "AddedItemComponent", "adjudication", element.getAdjudication().get(i), i);
5851    }
5852    for (int i = 0; i < element.getDetail().size(); i++) {
5853      composeClaimResponseAddedItemDetailComponent(t, "AddedItemComponent", "detail", element.getDetail().get(i), i);
5854    }
5855  }
5856
5857  protected void composeClaimResponseAddedItemDetailComponent(Complex parent, String parentType, String name, ClaimResponse.AddedItemDetailComponent element, int index) {
5858    if (element == null) 
5859      return;
5860    Complex t;
5861    if (Utilities.noString(parentType))
5862      t = parent;
5863    else {
5864      t = parent.predicate("fhir:"+parentType+'.'+name);
5865    }
5866    composeBackboneElement(t, "detail", name, element, index);
5867    if (element.hasProductOrService()) {
5868      composeCodeableConcept(t, "AddedItemDetailComponent", "productOrService", element.getProductOrService(), -1);
5869    }
5870    for (int i = 0; i < element.getModifier().size(); i++) {
5871      composeCodeableConcept(t, "AddedItemDetailComponent", "modifier", element.getModifier().get(i), i);
5872    }
5873    if (element.hasQuantity()) {
5874      composeQuantity(t, "AddedItemDetailComponent", "quantity", element.getQuantity(), -1);
5875    }
5876    if (element.hasUnitPrice()) {
5877      composeMoney(t, "AddedItemDetailComponent", "unitPrice", element.getUnitPrice(), -1);
5878    }
5879    if (element.hasFactorElement()) {
5880      composeDecimal(t, "AddedItemDetailComponent", "factor", element.getFactorElement(), -1);
5881    }
5882    if (element.hasNet()) {
5883      composeMoney(t, "AddedItemDetailComponent", "net", element.getNet(), -1);
5884    }
5885    for (int i = 0; i < element.getNoteNumber().size(); i++) {
5886      composePositiveInt(t, "AddedItemDetailComponent", "noteNumber", element.getNoteNumber().get(i), i);
5887    }
5888    for (int i = 0; i < element.getAdjudication().size(); i++) {
5889      composeClaimResponseAdjudicationComponent(t, "AddedItemDetailComponent", "adjudication", element.getAdjudication().get(i), i);
5890    }
5891    for (int i = 0; i < element.getSubDetail().size(); i++) {
5892      composeClaimResponseAddedItemSubDetailComponent(t, "AddedItemDetailComponent", "subDetail", element.getSubDetail().get(i), i);
5893    }
5894  }
5895
5896  protected void composeClaimResponseAddedItemSubDetailComponent(Complex parent, String parentType, String name, ClaimResponse.AddedItemSubDetailComponent element, int index) {
5897    if (element == null) 
5898      return;
5899    Complex t;
5900    if (Utilities.noString(parentType))
5901      t = parent;
5902    else {
5903      t = parent.predicate("fhir:"+parentType+'.'+name);
5904    }
5905    composeBackboneElement(t, "subDetail", name, element, index);
5906    if (element.hasProductOrService()) {
5907      composeCodeableConcept(t, "AddedItemSubDetailComponent", "productOrService", element.getProductOrService(), -1);
5908    }
5909    for (int i = 0; i < element.getModifier().size(); i++) {
5910      composeCodeableConcept(t, "AddedItemSubDetailComponent", "modifier", element.getModifier().get(i), i);
5911    }
5912    if (element.hasQuantity()) {
5913      composeQuantity(t, "AddedItemSubDetailComponent", "quantity", element.getQuantity(), -1);
5914    }
5915    if (element.hasUnitPrice()) {
5916      composeMoney(t, "AddedItemSubDetailComponent", "unitPrice", element.getUnitPrice(), -1);
5917    }
5918    if (element.hasFactorElement()) {
5919      composeDecimal(t, "AddedItemSubDetailComponent", "factor", element.getFactorElement(), -1);
5920    }
5921    if (element.hasNet()) {
5922      composeMoney(t, "AddedItemSubDetailComponent", "net", element.getNet(), -1);
5923    }
5924    for (int i = 0; i < element.getNoteNumber().size(); i++) {
5925      composePositiveInt(t, "AddedItemSubDetailComponent", "noteNumber", element.getNoteNumber().get(i), i);
5926    }
5927    for (int i = 0; i < element.getAdjudication().size(); i++) {
5928      composeClaimResponseAdjudicationComponent(t, "AddedItemSubDetailComponent", "adjudication", element.getAdjudication().get(i), i);
5929    }
5930  }
5931
5932  protected void composeClaimResponseTotalComponent(Complex parent, String parentType, String name, ClaimResponse.TotalComponent element, int index) {
5933    if (element == null) 
5934      return;
5935    Complex t;
5936    if (Utilities.noString(parentType))
5937      t = parent;
5938    else {
5939      t = parent.predicate("fhir:"+parentType+'.'+name);
5940    }
5941    composeBackboneElement(t, "total", name, element, index);
5942    if (element.hasCategory()) {
5943      composeCodeableConcept(t, "TotalComponent", "category", element.getCategory(), -1);
5944    }
5945    if (element.hasAmount()) {
5946      composeMoney(t, "TotalComponent", "amount", element.getAmount(), -1);
5947    }
5948  }
5949
5950  protected void composeClaimResponsePaymentComponent(Complex parent, String parentType, String name, ClaimResponse.PaymentComponent element, int index) {
5951    if (element == null) 
5952      return;
5953    Complex t;
5954    if (Utilities.noString(parentType))
5955      t = parent;
5956    else {
5957      t = parent.predicate("fhir:"+parentType+'.'+name);
5958    }
5959    composeBackboneElement(t, "payment", name, element, index);
5960    if (element.hasType()) {
5961      composeCodeableConcept(t, "PaymentComponent", "type", element.getType(), -1);
5962    }
5963    if (element.hasAdjustment()) {
5964      composeMoney(t, "PaymentComponent", "adjustment", element.getAdjustment(), -1);
5965    }
5966    if (element.hasAdjustmentReason()) {
5967      composeCodeableConcept(t, "PaymentComponent", "adjustmentReason", element.getAdjustmentReason(), -1);
5968    }
5969    if (element.hasDateElement()) {
5970      composeDate(t, "PaymentComponent", "date", element.getDateElement(), -1);
5971    }
5972    if (element.hasAmount()) {
5973      composeMoney(t, "PaymentComponent", "amount", element.getAmount(), -1);
5974    }
5975    if (element.hasIdentifier()) {
5976      composeIdentifier(t, "PaymentComponent", "identifier", element.getIdentifier(), -1);
5977    }
5978  }
5979
5980  protected void composeClaimResponseNoteComponent(Complex parent, String parentType, String name, ClaimResponse.NoteComponent element, int index) {
5981    if (element == null) 
5982      return;
5983    Complex t;
5984    if (Utilities.noString(parentType))
5985      t = parent;
5986    else {
5987      t = parent.predicate("fhir:"+parentType+'.'+name);
5988    }
5989    composeBackboneElement(t, "processNote", name, element, index);
5990    if (element.hasNumberElement()) {
5991      composePositiveInt(t, "NoteComponent", "number", element.getNumberElement(), -1);
5992    }
5993    if (element.hasTypeElement()) {
5994      composeEnum(t, "NoteComponent", "type", element.getTypeElement(), -1);
5995    }
5996    if (element.hasTextElement()) {
5997      composeString(t, "NoteComponent", "text", element.getTextElement(), -1);
5998    }
5999    if (element.hasLanguage()) {
6000      composeCodeableConcept(t, "NoteComponent", "language", element.getLanguage(), -1);
6001    }
6002  }
6003
6004  protected void composeClaimResponseInsuranceComponent(Complex parent, String parentType, String name, ClaimResponse.InsuranceComponent element, int index) {
6005    if (element == null) 
6006      return;
6007    Complex t;
6008    if (Utilities.noString(parentType))
6009      t = parent;
6010    else {
6011      t = parent.predicate("fhir:"+parentType+'.'+name);
6012    }
6013    composeBackboneElement(t, "insurance", name, element, index);
6014    if (element.hasSequenceElement()) {
6015      composePositiveInt(t, "InsuranceComponent", "sequence", element.getSequenceElement(), -1);
6016    }
6017    if (element.hasFocalElement()) {
6018      composeBoolean(t, "InsuranceComponent", "focal", element.getFocalElement(), -1);
6019    }
6020    if (element.hasCoverage()) {
6021      composeReference(t, "InsuranceComponent", "coverage", element.getCoverage(), -1);
6022    }
6023    if (element.hasBusinessArrangementElement()) {
6024      composeString(t, "InsuranceComponent", "businessArrangement", element.getBusinessArrangementElement(), -1);
6025    }
6026    if (element.hasClaimResponse()) {
6027      composeReference(t, "InsuranceComponent", "claimResponse", element.getClaimResponse(), -1);
6028    }
6029  }
6030
6031  protected void composeClaimResponseErrorComponent(Complex parent, String parentType, String name, ClaimResponse.ErrorComponent element, int index) {
6032    if (element == null) 
6033      return;
6034    Complex t;
6035    if (Utilities.noString(parentType))
6036      t = parent;
6037    else {
6038      t = parent.predicate("fhir:"+parentType+'.'+name);
6039    }
6040    composeBackboneElement(t, "error", name, element, index);
6041    if (element.hasItemSequenceElement()) {
6042      composePositiveInt(t, "ErrorComponent", "itemSequence", element.getItemSequenceElement(), -1);
6043    }
6044    if (element.hasDetailSequenceElement()) {
6045      composePositiveInt(t, "ErrorComponent", "detailSequence", element.getDetailSequenceElement(), -1);
6046    }
6047    if (element.hasSubDetailSequenceElement()) {
6048      composePositiveInt(t, "ErrorComponent", "subDetailSequence", element.getSubDetailSequenceElement(), -1);
6049    }
6050    if (element.hasCode()) {
6051      composeCodeableConcept(t, "ErrorComponent", "code", element.getCode(), -1);
6052    }
6053  }
6054
6055  protected void composeClinicalImpression(Complex parent, String parentType, String name, ClinicalImpression element, int index) {
6056    if (element == null) 
6057      return;
6058    Complex t;
6059    if (Utilities.noString(parentType))
6060      t = parent;
6061    else {
6062      t = parent.predicate("fhir:"+parentType+'.'+name);
6063    }
6064    composeDomainResource(t, "ClinicalImpression", name, element, index);
6065    for (int i = 0; i < element.getIdentifier().size(); i++) {
6066      composeIdentifier(t, "ClinicalImpression", "identifier", element.getIdentifier().get(i), i);
6067    }
6068    if (element.hasStatusElement()) {
6069      composeEnum(t, "ClinicalImpression", "status", element.getStatusElement(), -1);
6070    }
6071    if (element.hasStatusReason()) {
6072      composeCodeableConcept(t, "ClinicalImpression", "statusReason", element.getStatusReason(), -1);
6073    }
6074    if (element.hasDescriptionElement()) {
6075      composeString(t, "ClinicalImpression", "description", element.getDescriptionElement(), -1);
6076    }
6077    if (element.hasSubject()) {
6078      composeReference(t, "ClinicalImpression", "subject", element.getSubject(), -1);
6079    }
6080    if (element.hasEncounter()) {
6081      composeReference(t, "ClinicalImpression", "encounter", element.getEncounter(), -1);
6082    }
6083    if (element.hasEffective()) {
6084      composeType(t, "ClinicalImpression", "effective", element.getEffective(), -1);
6085    }
6086    if (element.hasDateElement()) {
6087      composeDateTime(t, "ClinicalImpression", "date", element.getDateElement(), -1);
6088    }
6089    if (element.hasPerformer()) {
6090      composeReference(t, "ClinicalImpression", "performer", element.getPerformer(), -1);
6091    }
6092    if (element.hasPrevious()) {
6093      composeReference(t, "ClinicalImpression", "previous", element.getPrevious(), -1);
6094    }
6095    for (int i = 0; i < element.getProblem().size(); i++) {
6096      composeReference(t, "ClinicalImpression", "problem", element.getProblem().get(i), i);
6097    }
6098    for (int i = 0; i < element.getProtocol().size(); i++) {
6099      composeUri(t, "ClinicalImpression", "protocol", element.getProtocol().get(i), i);
6100    }
6101    if (element.hasSummaryElement()) {
6102      composeString(t, "ClinicalImpression", "summary", element.getSummaryElement(), -1);
6103    }
6104    for (int i = 0; i < element.getFinding().size(); i++) {
6105      composeClinicalImpressionFindingComponent(t, "ClinicalImpression", "finding", element.getFinding().get(i), i);
6106    }
6107    for (int i = 0; i < element.getPrognosisCodeableConcept().size(); i++) {
6108      composeCodeableConcept(t, "ClinicalImpression", "prognosisCodeableConcept", element.getPrognosisCodeableConcept().get(i), i);
6109    }
6110    for (int i = 0; i < element.getPrognosisReference().size(); i++) {
6111      composeReference(t, "ClinicalImpression", "prognosisReference", element.getPrognosisReference().get(i), i);
6112    }
6113    for (int i = 0; i < element.getSupportingInfo().size(); i++) {
6114      composeReference(t, "ClinicalImpression", "supportingInfo", element.getSupportingInfo().get(i), i);
6115    }
6116    for (int i = 0; i < element.getNote().size(); i++) {
6117      composeAnnotation(t, "ClinicalImpression", "note", element.getNote().get(i), i);
6118    }
6119  }
6120
6121  protected void composeClinicalImpressionFindingComponent(Complex parent, String parentType, String name, ClinicalImpression.ClinicalImpressionFindingComponent element, int index) {
6122    if (element == null) 
6123      return;
6124    Complex t;
6125    if (Utilities.noString(parentType))
6126      t = parent;
6127    else {
6128      t = parent.predicate("fhir:"+parentType+'.'+name);
6129    }
6130    composeBackboneElement(t, "finding", name, element, index);
6131    if (element.hasItem()) {
6132      composeCodeableReference(t, "ClinicalImpressionFindingComponent", "item", element.getItem(), -1);
6133    }
6134    if (element.hasBasisElement()) {
6135      composeString(t, "ClinicalImpressionFindingComponent", "basis", element.getBasisElement(), -1);
6136    }
6137  }
6138
6139  protected void composeClinicalUseDefinition(Complex parent, String parentType, String name, ClinicalUseDefinition element, int index) {
6140    if (element == null) 
6141      return;
6142    Complex t;
6143    if (Utilities.noString(parentType))
6144      t = parent;
6145    else {
6146      t = parent.predicate("fhir:"+parentType+'.'+name);
6147    }
6148    composeDomainResource(t, "ClinicalUseDefinition", name, element, index);
6149    for (int i = 0; i < element.getIdentifier().size(); i++) {
6150      composeIdentifier(t, "ClinicalUseDefinition", "identifier", element.getIdentifier().get(i), i);
6151    }
6152    if (element.hasTypeElement()) {
6153      composeEnum(t, "ClinicalUseDefinition", "type", element.getTypeElement(), -1);
6154    }
6155    for (int i = 0; i < element.getCategory().size(); i++) {
6156      composeCodeableConcept(t, "ClinicalUseDefinition", "category", element.getCategory().get(i), i);
6157    }
6158    for (int i = 0; i < element.getSubject().size(); i++) {
6159      composeReference(t, "ClinicalUseDefinition", "subject", element.getSubject().get(i), i);
6160    }
6161    if (element.hasStatus()) {
6162      composeCodeableConcept(t, "ClinicalUseDefinition", "status", element.getStatus(), -1);
6163    }
6164    if (element.hasContraindication()) {
6165      composeClinicalUseDefinitionContraindicationComponent(t, "ClinicalUseDefinition", "contraindication", element.getContraindication(), -1);
6166    }
6167    if (element.hasIndication()) {
6168      composeClinicalUseDefinitionIndicationComponent(t, "ClinicalUseDefinition", "indication", element.getIndication(), -1);
6169    }
6170    if (element.hasInteraction()) {
6171      composeClinicalUseDefinitionInteractionComponent(t, "ClinicalUseDefinition", "interaction", element.getInteraction(), -1);
6172    }
6173    for (int i = 0; i < element.getPopulation().size(); i++) {
6174      composeReference(t, "ClinicalUseDefinition", "population", element.getPopulation().get(i), i);
6175    }
6176    if (element.hasUndesirableEffect()) {
6177      composeClinicalUseDefinitionUndesirableEffectComponent(t, "ClinicalUseDefinition", "undesirableEffect", element.getUndesirableEffect(), -1);
6178    }
6179    if (element.hasWarning()) {
6180      composeClinicalUseDefinitionWarningComponent(t, "ClinicalUseDefinition", "warning", element.getWarning(), -1);
6181    }
6182  }
6183
6184  protected void composeClinicalUseDefinitionContraindicationComponent(Complex parent, String parentType, String name, ClinicalUseDefinition.ClinicalUseDefinitionContraindicationComponent element, int index) {
6185    if (element == null) 
6186      return;
6187    Complex t;
6188    if (Utilities.noString(parentType))
6189      t = parent;
6190    else {
6191      t = parent.predicate("fhir:"+parentType+'.'+name);
6192    }
6193    composeBackboneElement(t, "contraindication", name, element, index);
6194    if (element.hasDiseaseSymptomProcedure()) {
6195      composeCodeableReference(t, "ClinicalUseDefinitionContraindicationComponent", "diseaseSymptomProcedure", element.getDiseaseSymptomProcedure(), -1);
6196    }
6197    if (element.hasDiseaseStatus()) {
6198      composeCodeableReference(t, "ClinicalUseDefinitionContraindicationComponent", "diseaseStatus", element.getDiseaseStatus(), -1);
6199    }
6200    for (int i = 0; i < element.getComorbidity().size(); i++) {
6201      composeCodeableReference(t, "ClinicalUseDefinitionContraindicationComponent", "comorbidity", element.getComorbidity().get(i), i);
6202    }
6203    for (int i = 0; i < element.getIndication().size(); i++) {
6204      composeReference(t, "ClinicalUseDefinitionContraindicationComponent", "indication", element.getIndication().get(i), i);
6205    }
6206    for (int i = 0; i < element.getOtherTherapy().size(); i++) {
6207      composeClinicalUseDefinitionContraindicationOtherTherapyComponent(t, "ClinicalUseDefinitionContraindicationComponent", "otherTherapy", element.getOtherTherapy().get(i), i);
6208    }
6209  }
6210
6211  protected void composeClinicalUseDefinitionContraindicationOtherTherapyComponent(Complex parent, String parentType, String name, ClinicalUseDefinition.ClinicalUseDefinitionContraindicationOtherTherapyComponent element, int index) {
6212    if (element == null) 
6213      return;
6214    Complex t;
6215    if (Utilities.noString(parentType))
6216      t = parent;
6217    else {
6218      t = parent.predicate("fhir:"+parentType+'.'+name);
6219    }
6220    composeBackboneElement(t, "otherTherapy", name, element, index);
6221    if (element.hasRelationshipType()) {
6222      composeCodeableConcept(t, "ClinicalUseDefinitionContraindicationOtherTherapyComponent", "relationshipType", element.getRelationshipType(), -1);
6223    }
6224    if (element.hasTherapy()) {
6225      composeCodeableReference(t, "ClinicalUseDefinitionContraindicationOtherTherapyComponent", "therapy", element.getTherapy(), -1);
6226    }
6227  }
6228
6229  protected void composeClinicalUseDefinitionIndicationComponent(Complex parent, String parentType, String name, ClinicalUseDefinition.ClinicalUseDefinitionIndicationComponent element, int index) {
6230    if (element == null) 
6231      return;
6232    Complex t;
6233    if (Utilities.noString(parentType))
6234      t = parent;
6235    else {
6236      t = parent.predicate("fhir:"+parentType+'.'+name);
6237    }
6238    composeBackboneElement(t, "indication", name, element, index);
6239    if (element.hasDiseaseSymptomProcedure()) {
6240      composeCodeableReference(t, "ClinicalUseDefinitionIndicationComponent", "diseaseSymptomProcedure", element.getDiseaseSymptomProcedure(), -1);
6241    }
6242    if (element.hasDiseaseStatus()) {
6243      composeCodeableReference(t, "ClinicalUseDefinitionIndicationComponent", "diseaseStatus", element.getDiseaseStatus(), -1);
6244    }
6245    for (int i = 0; i < element.getComorbidity().size(); i++) {
6246      composeCodeableReference(t, "ClinicalUseDefinitionIndicationComponent", "comorbidity", element.getComorbidity().get(i), i);
6247    }
6248    if (element.hasIntendedEffect()) {
6249      composeCodeableReference(t, "ClinicalUseDefinitionIndicationComponent", "intendedEffect", element.getIntendedEffect(), -1);
6250    }
6251    if (element.hasDuration()) {
6252      composeQuantity(t, "ClinicalUseDefinitionIndicationComponent", "duration", element.getDuration(), -1);
6253    }
6254    for (int i = 0; i < element.getUndesirableEffect().size(); i++) {
6255      composeReference(t, "ClinicalUseDefinitionIndicationComponent", "undesirableEffect", element.getUndesirableEffect().get(i), i);
6256    }
6257    for (int i = 0; i < element.getOtherTherapy().size(); i++) {
6258      composeClinicalUseDefinitionContraindicationOtherTherapyComponent(t, "ClinicalUseDefinitionIndicationComponent", "otherTherapy", element.getOtherTherapy().get(i), i);
6259    }
6260  }
6261
6262  protected void composeClinicalUseDefinitionInteractionComponent(Complex parent, String parentType, String name, ClinicalUseDefinition.ClinicalUseDefinitionInteractionComponent 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:"+parentType+'.'+name);
6270    }
6271    composeBackboneElement(t, "interaction", name, element, index);
6272    for (int i = 0; i < element.getInteractant().size(); i++) {
6273      composeClinicalUseDefinitionInteractionInteractantComponent(t, "ClinicalUseDefinitionInteractionComponent", "interactant", element.getInteractant().get(i), i);
6274    }
6275    if (element.hasType()) {
6276      composeCodeableConcept(t, "ClinicalUseDefinitionInteractionComponent", "type", element.getType(), -1);
6277    }
6278    if (element.hasEffect()) {
6279      composeCodeableReference(t, "ClinicalUseDefinitionInteractionComponent", "effect", element.getEffect(), -1);
6280    }
6281    if (element.hasIncidence()) {
6282      composeCodeableConcept(t, "ClinicalUseDefinitionInteractionComponent", "incidence", element.getIncidence(), -1);
6283    }
6284    for (int i = 0; i < element.getManagement().size(); i++) {
6285      composeCodeableConcept(t, "ClinicalUseDefinitionInteractionComponent", "management", element.getManagement().get(i), i);
6286    }
6287  }
6288
6289  protected void composeClinicalUseDefinitionInteractionInteractantComponent(Complex parent, String parentType, String name, ClinicalUseDefinition.ClinicalUseDefinitionInteractionInteractantComponent element, int index) {
6290    if (element == null) 
6291      return;
6292    Complex t;
6293    if (Utilities.noString(parentType))
6294      t = parent;
6295    else {
6296      t = parent.predicate("fhir:"+parentType+'.'+name);
6297    }
6298    composeBackboneElement(t, "interactant", name, element, index);
6299    if (element.hasItem()) {
6300      composeType(t, "ClinicalUseDefinitionInteractionInteractantComponent", "item", element.getItem(), -1);
6301    }
6302  }
6303
6304  protected void composeClinicalUseDefinitionUndesirableEffectComponent(Complex parent, String parentType, String name, ClinicalUseDefinition.ClinicalUseDefinitionUndesirableEffectComponent element, int index) {
6305    if (element == null) 
6306      return;
6307    Complex t;
6308    if (Utilities.noString(parentType))
6309      t = parent;
6310    else {
6311      t = parent.predicate("fhir:"+parentType+'.'+name);
6312    }
6313    composeBackboneElement(t, "undesirableEffect", name, element, index);
6314    if (element.hasSymptomConditionEffect()) {
6315      composeCodeableReference(t, "ClinicalUseDefinitionUndesirableEffectComponent", "symptomConditionEffect", element.getSymptomConditionEffect(), -1);
6316    }
6317    if (element.hasClassification()) {
6318      composeCodeableConcept(t, "ClinicalUseDefinitionUndesirableEffectComponent", "classification", element.getClassification(), -1);
6319    }
6320    if (element.hasFrequencyOfOccurrence()) {
6321      composeCodeableConcept(t, "ClinicalUseDefinitionUndesirableEffectComponent", "frequencyOfOccurrence", element.getFrequencyOfOccurrence(), -1);
6322    }
6323  }
6324
6325  protected void composeClinicalUseDefinitionWarningComponent(Complex parent, String parentType, String name, ClinicalUseDefinition.ClinicalUseDefinitionWarningComponent element, int index) {
6326    if (element == null) 
6327      return;
6328    Complex t;
6329    if (Utilities.noString(parentType))
6330      t = parent;
6331    else {
6332      t = parent.predicate("fhir:"+parentType+'.'+name);
6333    }
6334    composeBackboneElement(t, "warning", name, element, index);
6335    if (element.hasDescriptionElement()) {
6336      composeMarkdown(t, "ClinicalUseDefinitionWarningComponent", "description", element.getDescriptionElement(), -1);
6337    }
6338    if (element.hasCode()) {
6339      composeCodeableConcept(t, "ClinicalUseDefinitionWarningComponent", "code", element.getCode(), -1);
6340    }
6341  }
6342
6343  protected void composeClinicalUseIssue(Complex parent, String parentType, String name, ClinicalUseIssue element, int index) {
6344    if (element == null) 
6345      return;
6346    Complex t;
6347    if (Utilities.noString(parentType))
6348      t = parent;
6349    else {
6350      t = parent.predicate("fhir:"+parentType+'.'+name);
6351    }
6352    composeDomainResource(t, "ClinicalUseIssue", name, element, index);
6353    for (int i = 0; i < element.getIdentifier().size(); i++) {
6354      composeIdentifier(t, "ClinicalUseIssue", "identifier", element.getIdentifier().get(i), i);
6355    }
6356    if (element.hasTypeElement()) {
6357      composeEnum(t, "ClinicalUseIssue", "type", element.getTypeElement(), -1);
6358    }
6359    for (int i = 0; i < element.getCategory().size(); i++) {
6360      composeCodeableConcept(t, "ClinicalUseIssue", "category", element.getCategory().get(i), i);
6361    }
6362    for (int i = 0; i < element.getSubject().size(); i++) {
6363      composeReference(t, "ClinicalUseIssue", "subject", element.getSubject().get(i), i);
6364    }
6365    if (element.hasStatus()) {
6366      composeCodeableConcept(t, "ClinicalUseIssue", "status", element.getStatus(), -1);
6367    }
6368    if (element.hasDescriptionElement()) {
6369      composeMarkdown(t, "ClinicalUseIssue", "description", element.getDescriptionElement(), -1);
6370    }
6371    if (element.hasContraindication()) {
6372      composeClinicalUseIssueContraindicationComponent(t, "ClinicalUseIssue", "contraindication", element.getContraindication(), -1);
6373    }
6374    if (element.hasIndication()) {
6375      composeClinicalUseIssueIndicationComponent(t, "ClinicalUseIssue", "indication", element.getIndication(), -1);
6376    }
6377    if (element.hasInteraction()) {
6378      composeClinicalUseIssueInteractionComponent(t, "ClinicalUseIssue", "interaction", element.getInteraction(), -1);
6379    }
6380    for (int i = 0; i < element.getPopulation().size(); i++) {
6381      composePopulation(t, "ClinicalUseIssue", "population", element.getPopulation().get(i), i);
6382    }
6383    if (element.hasUndesirableEffect()) {
6384      composeClinicalUseIssueUndesirableEffectComponent(t, "ClinicalUseIssue", "undesirableEffect", element.getUndesirableEffect(), -1);
6385    }
6386  }
6387
6388  protected void composeClinicalUseIssueContraindicationComponent(Complex parent, String parentType, String name, ClinicalUseIssue.ClinicalUseIssueContraindicationComponent element, int index) {
6389    if (element == null) 
6390      return;
6391    Complex t;
6392    if (Utilities.noString(parentType))
6393      t = parent;
6394    else {
6395      t = parent.predicate("fhir:"+parentType+'.'+name);
6396    }
6397    composeBackboneElement(t, "contraindication", name, element, index);
6398    if (element.hasDiseaseSymptomProcedure()) {
6399      composeCodeableReference(t, "ClinicalUseIssueContraindicationComponent", "diseaseSymptomProcedure", element.getDiseaseSymptomProcedure(), -1);
6400    }
6401    if (element.hasDiseaseStatus()) {
6402      composeCodeableReference(t, "ClinicalUseIssueContraindicationComponent", "diseaseStatus", element.getDiseaseStatus(), -1);
6403    }
6404    for (int i = 0; i < element.getComorbidity().size(); i++) {
6405      composeCodeableReference(t, "ClinicalUseIssueContraindicationComponent", "comorbidity", element.getComorbidity().get(i), i);
6406    }
6407    for (int i = 0; i < element.getIndication().size(); i++) {
6408      composeReference(t, "ClinicalUseIssueContraindicationComponent", "indication", element.getIndication().get(i), i);
6409    }
6410    for (int i = 0; i < element.getOtherTherapy().size(); i++) {
6411      composeClinicalUseIssueContraindicationOtherTherapyComponent(t, "ClinicalUseIssueContraindicationComponent", "otherTherapy", element.getOtherTherapy().get(i), i);
6412    }
6413  }
6414
6415  protected void composeClinicalUseIssueContraindicationOtherTherapyComponent(Complex parent, String parentType, String name, ClinicalUseIssue.ClinicalUseIssueContraindicationOtherTherapyComponent element, int index) {
6416    if (element == null) 
6417      return;
6418    Complex t;
6419    if (Utilities.noString(parentType))
6420      t = parent;
6421    else {
6422      t = parent.predicate("fhir:"+parentType+'.'+name);
6423    }
6424    composeBackboneElement(t, "otherTherapy", name, element, index);
6425    if (element.hasRelationshipType()) {
6426      composeCodeableConcept(t, "ClinicalUseIssueContraindicationOtherTherapyComponent", "relationshipType", element.getRelationshipType(), -1);
6427    }
6428    if (element.hasTherapy()) {
6429      composeCodeableReference(t, "ClinicalUseIssueContraindicationOtherTherapyComponent", "therapy", element.getTherapy(), -1);
6430    }
6431  }
6432
6433  protected void composeClinicalUseIssueIndicationComponent(Complex parent, String parentType, String name, ClinicalUseIssue.ClinicalUseIssueIndicationComponent 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:"+parentType+'.'+name);
6441    }
6442    composeBackboneElement(t, "indication", name, element, index);
6443    if (element.hasDiseaseSymptomProcedure()) {
6444      composeCodeableReference(t, "ClinicalUseIssueIndicationComponent", "diseaseSymptomProcedure", element.getDiseaseSymptomProcedure(), -1);
6445    }
6446    if (element.hasDiseaseStatus()) {
6447      composeCodeableReference(t, "ClinicalUseIssueIndicationComponent", "diseaseStatus", element.getDiseaseStatus(), -1);
6448    }
6449    for (int i = 0; i < element.getComorbidity().size(); i++) {
6450      composeCodeableReference(t, "ClinicalUseIssueIndicationComponent", "comorbidity", element.getComorbidity().get(i), i);
6451    }
6452    if (element.hasIntendedEffect()) {
6453      composeCodeableReference(t, "ClinicalUseIssueIndicationComponent", "intendedEffect", element.getIntendedEffect(), -1);
6454    }
6455    if (element.hasDuration()) {
6456      composeQuantity(t, "ClinicalUseIssueIndicationComponent", "duration", element.getDuration(), -1);
6457    }
6458    for (int i = 0; i < element.getUndesirableEffect().size(); i++) {
6459      composeReference(t, "ClinicalUseIssueIndicationComponent", "undesirableEffect", element.getUndesirableEffect().get(i), i);
6460    }
6461    for (int i = 0; i < element.getOtherTherapy().size(); i++) {
6462      composeClinicalUseIssueContraindicationOtherTherapyComponent(t, "ClinicalUseIssueIndicationComponent", "otherTherapy", element.getOtherTherapy().get(i), i);
6463    }
6464  }
6465
6466  protected void composeClinicalUseIssueInteractionComponent(Complex parent, String parentType, String name, ClinicalUseIssue.ClinicalUseIssueInteractionComponent element, int index) {
6467    if (element == null) 
6468      return;
6469    Complex t;
6470    if (Utilities.noString(parentType))
6471      t = parent;
6472    else {
6473      t = parent.predicate("fhir:"+parentType+'.'+name);
6474    }
6475    composeBackboneElement(t, "interaction", name, element, index);
6476    for (int i = 0; i < element.getInteractant().size(); i++) {
6477      composeClinicalUseIssueInteractionInteractantComponent(t, "ClinicalUseIssueInteractionComponent", "interactant", element.getInteractant().get(i), i);
6478    }
6479    if (element.hasType()) {
6480      composeCodeableConcept(t, "ClinicalUseIssueInteractionComponent", "type", element.getType(), -1);
6481    }
6482    if (element.hasEffect()) {
6483      composeCodeableReference(t, "ClinicalUseIssueInteractionComponent", "effect", element.getEffect(), -1);
6484    }
6485    if (element.hasIncidence()) {
6486      composeCodeableConcept(t, "ClinicalUseIssueInteractionComponent", "incidence", element.getIncidence(), -1);
6487    }
6488    for (int i = 0; i < element.getManagement().size(); i++) {
6489      composeCodeableConcept(t, "ClinicalUseIssueInteractionComponent", "management", element.getManagement().get(i), i);
6490    }
6491  }
6492
6493  protected void composeClinicalUseIssueInteractionInteractantComponent(Complex parent, String parentType, String name, ClinicalUseIssue.ClinicalUseIssueInteractionInteractantComponent element, int index) {
6494    if (element == null) 
6495      return;
6496    Complex t;
6497    if (Utilities.noString(parentType))
6498      t = parent;
6499    else {
6500      t = parent.predicate("fhir:"+parentType+'.'+name);
6501    }
6502    composeBackboneElement(t, "interactant", name, element, index);
6503    if (element.hasItem()) {
6504      composeType(t, "ClinicalUseIssueInteractionInteractantComponent", "item", element.getItem(), -1);
6505    }
6506  }
6507
6508  protected void composeClinicalUseIssueUndesirableEffectComponent(Complex parent, String parentType, String name, ClinicalUseIssue.ClinicalUseIssueUndesirableEffectComponent element, int index) {
6509    if (element == null) 
6510      return;
6511    Complex t;
6512    if (Utilities.noString(parentType))
6513      t = parent;
6514    else {
6515      t = parent.predicate("fhir:"+parentType+'.'+name);
6516    }
6517    composeBackboneElement(t, "undesirableEffect", name, element, index);
6518    if (element.hasSymptomConditionEffect()) {
6519      composeCodeableReference(t, "ClinicalUseIssueUndesirableEffectComponent", "symptomConditionEffect", element.getSymptomConditionEffect(), -1);
6520    }
6521    if (element.hasClassification()) {
6522      composeCodeableConcept(t, "ClinicalUseIssueUndesirableEffectComponent", "classification", element.getClassification(), -1);
6523    }
6524    if (element.hasFrequencyOfOccurrence()) {
6525      composeCodeableConcept(t, "ClinicalUseIssueUndesirableEffectComponent", "frequencyOfOccurrence", element.getFrequencyOfOccurrence(), -1);
6526    }
6527  }
6528
6529  protected void composeCodeSystem(Complex parent, String parentType, String name, CodeSystem element, int index) {
6530    if (element == null) 
6531      return;
6532    Complex t;
6533    if (Utilities.noString(parentType))
6534      t = parent;
6535    else {
6536      t = parent.predicate("fhir:"+parentType+'.'+name);
6537    }
6538    composeCanonicalResource(t, "CodeSystem", name, element, index);
6539    if (element.hasUrlElement()) {
6540      composeUri(t, "CodeSystem", "url", element.getUrlElement(), -1);
6541    }
6542    for (int i = 0; i < element.getIdentifier().size(); i++) {
6543      composeIdentifier(t, "CodeSystem", "identifier", element.getIdentifier().get(i), i);
6544    }
6545    if (element.hasVersionElement()) {
6546      composeString(t, "CodeSystem", "version", element.getVersionElement(), -1);
6547    }
6548    if (element.hasNameElement()) {
6549      composeString(t, "CodeSystem", "name", element.getNameElement(), -1);
6550    }
6551    if (element.hasTitleElement()) {
6552      composeString(t, "CodeSystem", "title", element.getTitleElement(), -1);
6553    }
6554    if (element.hasStatusElement()) {
6555      composeEnum(t, "CodeSystem", "status", element.getStatusElement(), -1);
6556    }
6557    if (element.hasExperimentalElement()) {
6558      composeBoolean(t, "CodeSystem", "experimental", element.getExperimentalElement(), -1);
6559    }
6560    if (element.hasDateElement()) {
6561      composeDateTime(t, "CodeSystem", "date", element.getDateElement(), -1);
6562    }
6563    if (element.hasPublisherElement()) {
6564      composeString(t, "CodeSystem", "publisher", element.getPublisherElement(), -1);
6565    }
6566    for (int i = 0; i < element.getContact().size(); i++) {
6567      composeContactDetail(t, "CodeSystem", "contact", element.getContact().get(i), i);
6568    }
6569    if (element.hasDescriptionElement()) {
6570      composeMarkdown(t, "CodeSystem", "description", element.getDescriptionElement(), -1);
6571    }
6572    for (int i = 0; i < element.getUseContext().size(); i++) {
6573      composeUsageContext(t, "CodeSystem", "useContext", element.getUseContext().get(i), i);
6574    }
6575    for (int i = 0; i < element.getJurisdiction().size(); i++) {
6576      composeCodeableConcept(t, "CodeSystem", "jurisdiction", element.getJurisdiction().get(i), i);
6577    }
6578    if (element.hasPurposeElement()) {
6579      composeMarkdown(t, "CodeSystem", "purpose", element.getPurposeElement(), -1);
6580    }
6581    if (element.hasCopyrightElement()) {
6582      composeMarkdown(t, "CodeSystem", "copyright", element.getCopyrightElement(), -1);
6583    }
6584    if (element.hasCaseSensitiveElement()) {
6585      composeBoolean(t, "CodeSystem", "caseSensitive", element.getCaseSensitiveElement(), -1);
6586    }
6587    if (element.hasValueSetElement()) {
6588      composeCanonical(t, "CodeSystem", "valueSet", element.getValueSetElement(), -1);
6589    }
6590    if (element.hasHierarchyMeaningElement()) {
6591      composeEnum(t, "CodeSystem", "hierarchyMeaning", element.getHierarchyMeaningElement(), -1);
6592    }
6593    if (element.hasCompositionalElement()) {
6594      composeBoolean(t, "CodeSystem", "compositional", element.getCompositionalElement(), -1);
6595    }
6596    if (element.hasVersionNeededElement()) {
6597      composeBoolean(t, "CodeSystem", "versionNeeded", element.getVersionNeededElement(), -1);
6598    }
6599    if (element.hasContentElement()) {
6600      composeEnum(t, "CodeSystem", "content", element.getContentElement(), -1);
6601    }
6602    if (element.hasSupplementsElement()) {
6603      composeCanonical(t, "CodeSystem", "supplements", element.getSupplementsElement(), -1);
6604    }
6605    if (element.hasCountElement()) {
6606      composeUnsignedInt(t, "CodeSystem", "count", element.getCountElement(), -1);
6607    }
6608    for (int i = 0; i < element.getFilter().size(); i++) {
6609      composeCodeSystemFilterComponent(t, "CodeSystem", "filter", element.getFilter().get(i), i);
6610    }
6611    for (int i = 0; i < element.getProperty().size(); i++) {
6612      composeCodeSystemPropertyComponent(t, "CodeSystem", "property", element.getProperty().get(i), i);
6613    }
6614    for (int i = 0; i < element.getConcept().size(); i++) {
6615      composeCodeSystemConceptDefinitionComponent(t, "CodeSystem", "concept", element.getConcept().get(i), i);
6616    }
6617  }
6618
6619  protected void composeCodeSystemFilterComponent(Complex parent, String parentType, String name, CodeSystem.CodeSystemFilterComponent element, int index) {
6620    if (element == null) 
6621      return;
6622    Complex t;
6623    if (Utilities.noString(parentType))
6624      t = parent;
6625    else {
6626      t = parent.predicate("fhir:"+parentType+'.'+name);
6627    }
6628    composeBackboneElement(t, "filter", name, element, index);
6629    if (element.hasCodeElement()) {
6630      composeCode(t, "CodeSystemFilterComponent", "code", element.getCodeElement(), -1);
6631    }
6632    if (element.hasDescriptionElement()) {
6633      composeString(t, "CodeSystemFilterComponent", "description", element.getDescriptionElement(), -1);
6634    }
6635    for (int i = 0; i < element.getOperator().size(); i++) {
6636      composeEnum(t, "CodeSystemFilterComponent", "operator", element.getOperator().get(i), i);
6637    }
6638    if (element.hasValueElement()) {
6639      composeString(t, "CodeSystemFilterComponent", "value", element.getValueElement(), -1);
6640    }
6641  }
6642
6643  protected void composeCodeSystemPropertyComponent(Complex parent, String parentType, String name, CodeSystem.PropertyComponent element, int index) {
6644    if (element == null) 
6645      return;
6646    Complex t;
6647    if (Utilities.noString(parentType))
6648      t = parent;
6649    else {
6650      t = parent.predicate("fhir:"+parentType+'.'+name);
6651    }
6652    composeBackboneElement(t, "property", name, element, index);
6653    if (element.hasCodeElement()) {
6654      composeCode(t, "PropertyComponent", "code", element.getCodeElement(), -1);
6655    }
6656    if (element.hasUriElement()) {
6657      composeUri(t, "PropertyComponent", "uri", element.getUriElement(), -1);
6658    }
6659    if (element.hasDescriptionElement()) {
6660      composeString(t, "PropertyComponent", "description", element.getDescriptionElement(), -1);
6661    }
6662    if (element.hasTypeElement()) {
6663      composeEnum(t, "PropertyComponent", "type", element.getTypeElement(), -1);
6664    }
6665  }
6666
6667  protected void composeCodeSystemConceptDefinitionComponent(Complex parent, String parentType, String name, CodeSystem.ConceptDefinitionComponent element, int index) {
6668    if (element == null) 
6669      return;
6670    Complex t;
6671    if (Utilities.noString(parentType))
6672      t = parent;
6673    else {
6674      t = parent.predicate("fhir:"+parentType+'.'+name);
6675    }
6676    composeBackboneElement(t, "concept", name, element, index);
6677    if (element.hasCodeElement()) {
6678      composeCode(t, "ConceptDefinitionComponent", "code", element.getCodeElement(), -1);
6679    }
6680    if (element.hasDisplayElement()) {
6681      composeString(t, "ConceptDefinitionComponent", "display", element.getDisplayElement(), -1);
6682    }
6683    if (element.hasDefinitionElement()) {
6684      composeString(t, "ConceptDefinitionComponent", "definition", element.getDefinitionElement(), -1);
6685    }
6686    for (int i = 0; i < element.getDesignation().size(); i++) {
6687      composeCodeSystemConceptDefinitionDesignationComponent(t, "ConceptDefinitionComponent", "designation", element.getDesignation().get(i), i);
6688    }
6689    for (int i = 0; i < element.getProperty().size(); i++) {
6690      composeCodeSystemConceptPropertyComponent(t, "ConceptDefinitionComponent", "property", element.getProperty().get(i), i);
6691    }
6692    for (int i = 0; i < element.getConcept().size(); i++) {
6693      composeCodeSystemConceptDefinitionComponent(t, "ConceptDefinitionComponent", "concept", element.getConcept().get(i), i);
6694    }
6695  }
6696
6697  protected void composeCodeSystemConceptDefinitionDesignationComponent(Complex parent, String parentType, String name, CodeSystem.ConceptDefinitionDesignationComponent element, int index) {
6698    if (element == null) 
6699      return;
6700    Complex t;
6701    if (Utilities.noString(parentType))
6702      t = parent;
6703    else {
6704      t = parent.predicate("fhir:"+parentType+'.'+name);
6705    }
6706    composeBackboneElement(t, "designation", name, element, index);
6707    if (element.hasLanguageElement()) {
6708      composeCode(t, "ConceptDefinitionDesignationComponent", "language", element.getLanguageElement(), -1);
6709    }
6710    if (element.hasUse()) {
6711      composeCoding(t, "ConceptDefinitionDesignationComponent", "use", element.getUse(), -1);
6712    }
6713    if (element.hasValueElement()) {
6714      composeString(t, "ConceptDefinitionDesignationComponent", "value", element.getValueElement(), -1);
6715    }
6716  }
6717
6718  protected void composeCodeSystemConceptPropertyComponent(Complex parent, String parentType, String name, CodeSystem.ConceptPropertyComponent element, int index) {
6719    if (element == null) 
6720      return;
6721    Complex t;
6722    if (Utilities.noString(parentType))
6723      t = parent;
6724    else {
6725      t = parent.predicate("fhir:"+parentType+'.'+name);
6726    }
6727    composeBackboneElement(t, "property", name, element, index);
6728    if (element.hasCodeElement()) {
6729      composeCode(t, "ConceptPropertyComponent", "code", element.getCodeElement(), -1);
6730    }
6731    if (element.hasValue()) {
6732      composeType(t, "ConceptPropertyComponent", "value", element.getValue(), -1);
6733    }
6734  }
6735
6736  protected void composeCommunication(Complex parent, String parentType, String name, Communication element, int index) {
6737    if (element == null) 
6738      return;
6739    Complex t;
6740    if (Utilities.noString(parentType))
6741      t = parent;
6742    else {
6743      t = parent.predicate("fhir:"+parentType+'.'+name);
6744    }
6745    composeDomainResource(t, "Communication", name, element, index);
6746    for (int i = 0; i < element.getIdentifier().size(); i++) {
6747      composeIdentifier(t, "Communication", "identifier", element.getIdentifier().get(i), i);
6748    }
6749    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
6750      composeCanonical(t, "Communication", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
6751    }
6752    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
6753      composeUri(t, "Communication", "instantiatesUri", element.getInstantiatesUri().get(i), i);
6754    }
6755    for (int i = 0; i < element.getBasedOn().size(); i++) {
6756      composeReference(t, "Communication", "basedOn", element.getBasedOn().get(i), i);
6757    }
6758    for (int i = 0; i < element.getPartOf().size(); i++) {
6759      composeReference(t, "Communication", "partOf", element.getPartOf().get(i), i);
6760    }
6761    for (int i = 0; i < element.getInResponseTo().size(); i++) {
6762      composeReference(t, "Communication", "inResponseTo", element.getInResponseTo().get(i), i);
6763    }
6764    if (element.hasStatusElement()) {
6765      composeEnum(t, "Communication", "status", element.getStatusElement(), -1);
6766    }
6767    if (element.hasStatusReason()) {
6768      composeCodeableConcept(t, "Communication", "statusReason", element.getStatusReason(), -1);
6769    }
6770    for (int i = 0; i < element.getCategory().size(); i++) {
6771      composeCodeableConcept(t, "Communication", "category", element.getCategory().get(i), i);
6772    }
6773    if (element.hasPriorityElement()) {
6774      composeEnum(t, "Communication", "priority", element.getPriorityElement(), -1);
6775    }
6776    for (int i = 0; i < element.getMedium().size(); i++) {
6777      composeCodeableConcept(t, "Communication", "medium", element.getMedium().get(i), i);
6778    }
6779    if (element.hasSubject()) {
6780      composeReference(t, "Communication", "subject", element.getSubject(), -1);
6781    }
6782    if (element.hasTopic()) {
6783      composeCodeableConcept(t, "Communication", "topic", element.getTopic(), -1);
6784    }
6785    for (int i = 0; i < element.getAbout().size(); i++) {
6786      composeReference(t, "Communication", "about", element.getAbout().get(i), i);
6787    }
6788    if (element.hasEncounter()) {
6789      composeReference(t, "Communication", "encounter", element.getEncounter(), -1);
6790    }
6791    if (element.hasSentElement()) {
6792      composeDateTime(t, "Communication", "sent", element.getSentElement(), -1);
6793    }
6794    if (element.hasReceivedElement()) {
6795      composeDateTime(t, "Communication", "received", element.getReceivedElement(), -1);
6796    }
6797    for (int i = 0; i < element.getRecipient().size(); i++) {
6798      composeReference(t, "Communication", "recipient", element.getRecipient().get(i), i);
6799    }
6800    if (element.hasSender()) {
6801      composeReference(t, "Communication", "sender", element.getSender(), -1);
6802    }
6803    for (int i = 0; i < element.getReason().size(); i++) {
6804      composeCodeableReference(t, "Communication", "reason", element.getReason().get(i), i);
6805    }
6806    for (int i = 0; i < element.getPayload().size(); i++) {
6807      composeCommunicationPayloadComponent(t, "Communication", "payload", element.getPayload().get(i), i);
6808    }
6809    for (int i = 0; i < element.getNote().size(); i++) {
6810      composeAnnotation(t, "Communication", "note", element.getNote().get(i), i);
6811    }
6812  }
6813
6814  protected void composeCommunicationPayloadComponent(Complex parent, String parentType, String name, Communication.CommunicationPayloadComponent element, int index) {
6815    if (element == null) 
6816      return;
6817    Complex t;
6818    if (Utilities.noString(parentType))
6819      t = parent;
6820    else {
6821      t = parent.predicate("fhir:"+parentType+'.'+name);
6822    }
6823    composeBackboneElement(t, "payload", name, element, index);
6824    if (element.hasContent()) {
6825      composeType(t, "CommunicationPayloadComponent", "content", element.getContent(), -1);
6826    }
6827  }
6828
6829  protected void composeCommunicationRequest(Complex parent, String parentType, String name, CommunicationRequest element, int index) {
6830    if (element == null) 
6831      return;
6832    Complex t;
6833    if (Utilities.noString(parentType))
6834      t = parent;
6835    else {
6836      t = parent.predicate("fhir:"+parentType+'.'+name);
6837    }
6838    composeDomainResource(t, "CommunicationRequest", name, element, index);
6839    for (int i = 0; i < element.getIdentifier().size(); i++) {
6840      composeIdentifier(t, "CommunicationRequest", "identifier", element.getIdentifier().get(i), i);
6841    }
6842    for (int i = 0; i < element.getBasedOn().size(); i++) {
6843      composeReference(t, "CommunicationRequest", "basedOn", element.getBasedOn().get(i), i);
6844    }
6845    for (int i = 0; i < element.getReplaces().size(); i++) {
6846      composeReference(t, "CommunicationRequest", "replaces", element.getReplaces().get(i), i);
6847    }
6848    if (element.hasGroupIdentifier()) {
6849      composeIdentifier(t, "CommunicationRequest", "groupIdentifier", element.getGroupIdentifier(), -1);
6850    }
6851    if (element.hasStatusElement()) {
6852      composeEnum(t, "CommunicationRequest", "status", element.getStatusElement(), -1);
6853    }
6854    if (element.hasStatusReason()) {
6855      composeCodeableConcept(t, "CommunicationRequest", "statusReason", element.getStatusReason(), -1);
6856    }
6857    if (element.hasIntentElement()) {
6858      composeEnum(t, "CommunicationRequest", "intent", element.getIntentElement(), -1);
6859    }
6860    for (int i = 0; i < element.getCategory().size(); i++) {
6861      composeCodeableConcept(t, "CommunicationRequest", "category", element.getCategory().get(i), i);
6862    }
6863    if (element.hasPriorityElement()) {
6864      composeEnum(t, "CommunicationRequest", "priority", element.getPriorityElement(), -1);
6865    }
6866    if (element.hasDoNotPerformElement()) {
6867      composeBoolean(t, "CommunicationRequest", "doNotPerform", element.getDoNotPerformElement(), -1);
6868    }
6869    for (int i = 0; i < element.getMedium().size(); i++) {
6870      composeCodeableConcept(t, "CommunicationRequest", "medium", element.getMedium().get(i), i);
6871    }
6872    if (element.hasSubject()) {
6873      composeReference(t, "CommunicationRequest", "subject", element.getSubject(), -1);
6874    }
6875    for (int i = 0; i < element.getAbout().size(); i++) {
6876      composeReference(t, "CommunicationRequest", "about", element.getAbout().get(i), i);
6877    }
6878    if (element.hasEncounter()) {
6879      composeReference(t, "CommunicationRequest", "encounter", element.getEncounter(), -1);
6880    }
6881    for (int i = 0; i < element.getPayload().size(); i++) {
6882      composeCommunicationRequestPayloadComponent(t, "CommunicationRequest", "payload", element.getPayload().get(i), i);
6883    }
6884    if (element.hasOccurrence()) {
6885      composeType(t, "CommunicationRequest", "occurrence", element.getOccurrence(), -1);
6886    }
6887    if (element.hasAuthoredOnElement()) {
6888      composeDateTime(t, "CommunicationRequest", "authoredOn", element.getAuthoredOnElement(), -1);
6889    }
6890    if (element.hasRequester()) {
6891      composeReference(t, "CommunicationRequest", "requester", element.getRequester(), -1);
6892    }
6893    for (int i = 0; i < element.getRecipient().size(); i++) {
6894      composeReference(t, "CommunicationRequest", "recipient", element.getRecipient().get(i), i);
6895    }
6896    for (int i = 0; i < element.getInformationProvider().size(); i++) {
6897      composeReference(t, "CommunicationRequest", "informationProvider", element.getInformationProvider().get(i), i);
6898    }
6899    for (int i = 0; i < element.getReason().size(); i++) {
6900      composeCodeableReference(t, "CommunicationRequest", "reason", element.getReason().get(i), i);
6901    }
6902    for (int i = 0; i < element.getNote().size(); i++) {
6903      composeAnnotation(t, "CommunicationRequest", "note", element.getNote().get(i), i);
6904    }
6905  }
6906
6907  protected void composeCommunicationRequestPayloadComponent(Complex parent, String parentType, String name, CommunicationRequest.CommunicationRequestPayloadComponent element, int index) {
6908    if (element == null) 
6909      return;
6910    Complex t;
6911    if (Utilities.noString(parentType))
6912      t = parent;
6913    else {
6914      t = parent.predicate("fhir:"+parentType+'.'+name);
6915    }
6916    composeBackboneElement(t, "payload", name, element, index);
6917    if (element.hasContent()) {
6918      composeType(t, "CommunicationRequestPayloadComponent", "content", element.getContent(), -1);
6919    }
6920  }
6921
6922  protected void composeCompartmentDefinition(Complex parent, String parentType, String name, CompartmentDefinition element, int index) {
6923    if (element == null) 
6924      return;
6925    Complex t;
6926    if (Utilities.noString(parentType))
6927      t = parent;
6928    else {
6929      t = parent.predicate("fhir:"+parentType+'.'+name);
6930    }
6931    composeCanonicalResource(t, "CompartmentDefinition", name, element, index);
6932    if (element.hasUrlElement()) {
6933      composeUri(t, "CompartmentDefinition", "url", element.getUrlElement(), -1);
6934    }
6935    if (element.hasVersionElement()) {
6936      composeString(t, "CompartmentDefinition", "version", element.getVersionElement(), -1);
6937    }
6938    if (element.hasNameElement()) {
6939      composeString(t, "CompartmentDefinition", "name", element.getNameElement(), -1);
6940    }
6941    if (element.hasStatusElement()) {
6942      composeEnum(t, "CompartmentDefinition", "status", element.getStatusElement(), -1);
6943    }
6944    if (element.hasExperimentalElement()) {
6945      composeBoolean(t, "CompartmentDefinition", "experimental", element.getExperimentalElement(), -1);
6946    }
6947    if (element.hasDateElement()) {
6948      composeDateTime(t, "CompartmentDefinition", "date", element.getDateElement(), -1);
6949    }
6950    if (element.hasPublisherElement()) {
6951      composeString(t, "CompartmentDefinition", "publisher", element.getPublisherElement(), -1);
6952    }
6953    for (int i = 0; i < element.getContact().size(); i++) {
6954      composeContactDetail(t, "CompartmentDefinition", "contact", element.getContact().get(i), i);
6955    }
6956    if (element.hasDescriptionElement()) {
6957      composeMarkdown(t, "CompartmentDefinition", "description", element.getDescriptionElement(), -1);
6958    }
6959    for (int i = 0; i < element.getUseContext().size(); i++) {
6960      composeUsageContext(t, "CompartmentDefinition", "useContext", element.getUseContext().get(i), i);
6961    }
6962    if (element.hasPurposeElement()) {
6963      composeMarkdown(t, "CompartmentDefinition", "purpose", element.getPurposeElement(), -1);
6964    }
6965    if (element.hasCodeElement()) {
6966      composeEnum(t, "CompartmentDefinition", "code", element.getCodeElement(), -1);
6967    }
6968    if (element.hasSearchElement()) {
6969      composeBoolean(t, "CompartmentDefinition", "search", element.getSearchElement(), -1);
6970    }
6971    for (int i = 0; i < element.getResource().size(); i++) {
6972      composeCompartmentDefinitionResourceComponent(t, "CompartmentDefinition", "resource", element.getResource().get(i), i);
6973    }
6974  }
6975
6976  protected void composeCompartmentDefinitionResourceComponent(Complex parent, String parentType, String name, CompartmentDefinition.CompartmentDefinitionResourceComponent element, int index) {
6977    if (element == null) 
6978      return;
6979    Complex t;
6980    if (Utilities.noString(parentType))
6981      t = parent;
6982    else {
6983      t = parent.predicate("fhir:"+parentType+'.'+name);
6984    }
6985    composeBackboneElement(t, "resource", name, element, index);
6986    if (element.hasCodeElement()) {
6987      composeCode(t, "CompartmentDefinitionResourceComponent", "code", element.getCodeElement(), -1);
6988    }
6989    for (int i = 0; i < element.getParam().size(); i++) {
6990      composeString(t, "CompartmentDefinitionResourceComponent", "param", element.getParam().get(i), i);
6991    }
6992    if (element.hasDocumentationElement()) {
6993      composeString(t, "CompartmentDefinitionResourceComponent", "documentation", element.getDocumentationElement(), -1);
6994    }
6995  }
6996
6997  protected void composeComposition(Complex parent, String parentType, String name, Composition element, int index) {
6998    if (element == null) 
6999      return;
7000    Complex t;
7001    if (Utilities.noString(parentType))
7002      t = parent;
7003    else {
7004      t = parent.predicate("fhir:"+parentType+'.'+name);
7005    }
7006    composeDomainResource(t, "Composition", name, element, index);
7007    if (element.hasIdentifier()) {
7008      composeIdentifier(t, "Composition", "identifier", element.getIdentifier(), -1);
7009    }
7010    if (element.hasStatusElement()) {
7011      composeEnum(t, "Composition", "status", element.getStatusElement(), -1);
7012    }
7013    if (element.hasType()) {
7014      composeCodeableConcept(t, "Composition", "type", element.getType(), -1);
7015    }
7016    for (int i = 0; i < element.getCategory().size(); i++) {
7017      composeCodeableConcept(t, "Composition", "category", element.getCategory().get(i), i);
7018    }
7019    if (element.hasSubject()) {
7020      composeReference(t, "Composition", "subject", element.getSubject(), -1);
7021    }
7022    if (element.hasEncounter()) {
7023      composeReference(t, "Composition", "encounter", element.getEncounter(), -1);
7024    }
7025    if (element.hasDateElement()) {
7026      composeDateTime(t, "Composition", "date", element.getDateElement(), -1);
7027    }
7028    for (int i = 0; i < element.getAuthor().size(); i++) {
7029      composeReference(t, "Composition", "author", element.getAuthor().get(i), i);
7030    }
7031    if (element.hasTitleElement()) {
7032      composeString(t, "Composition", "title", element.getTitleElement(), -1);
7033    }
7034    if (element.hasConfidentialityElement()) {
7035      composeCode(t, "Composition", "confidentiality", element.getConfidentialityElement(), -1);
7036    }
7037    for (int i = 0; i < element.getAttester().size(); i++) {
7038      composeCompositionAttesterComponent(t, "Composition", "attester", element.getAttester().get(i), i);
7039    }
7040    if (element.hasCustodian()) {
7041      composeReference(t, "Composition", "custodian", element.getCustodian(), -1);
7042    }
7043    for (int i = 0; i < element.getRelatesTo().size(); i++) {
7044      composeRelatedArtifact(t, "Composition", "relatesTo", element.getRelatesTo().get(i), i);
7045    }
7046    for (int i = 0; i < element.getEvent().size(); i++) {
7047      composeCompositionEventComponent(t, "Composition", "event", element.getEvent().get(i), i);
7048    }
7049    for (int i = 0; i < element.getSection().size(); i++) {
7050      composeCompositionSectionComponent(t, "Composition", "section", element.getSection().get(i), i);
7051    }
7052  }
7053
7054  protected void composeCompositionAttesterComponent(Complex parent, String parentType, String name, Composition.CompositionAttesterComponent 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:"+parentType+'.'+name);
7062    }
7063    composeBackboneElement(t, "attester", name, element, index);
7064    if (element.hasMode()) {
7065      composeCodeableConcept(t, "CompositionAttesterComponent", "mode", element.getMode(), -1);
7066    }
7067    if (element.hasTimeElement()) {
7068      composeDateTime(t, "CompositionAttesterComponent", "time", element.getTimeElement(), -1);
7069    }
7070    if (element.hasParty()) {
7071      composeReference(t, "CompositionAttesterComponent", "party", element.getParty(), -1);
7072    }
7073  }
7074
7075  protected void composeCompositionEventComponent(Complex parent, String parentType, String name, Composition.CompositionEventComponent element, int index) {
7076    if (element == null) 
7077      return;
7078    Complex t;
7079    if (Utilities.noString(parentType))
7080      t = parent;
7081    else {
7082      t = parent.predicate("fhir:"+parentType+'.'+name);
7083    }
7084    composeBackboneElement(t, "event", name, element, index);
7085    for (int i = 0; i < element.getCode().size(); i++) {
7086      composeCodeableConcept(t, "CompositionEventComponent", "code", element.getCode().get(i), i);
7087    }
7088    if (element.hasPeriod()) {
7089      composePeriod(t, "CompositionEventComponent", "period", element.getPeriod(), -1);
7090    }
7091    for (int i = 0; i < element.getDetail().size(); i++) {
7092      composeReference(t, "CompositionEventComponent", "detail", element.getDetail().get(i), i);
7093    }
7094  }
7095
7096  protected void composeCompositionSectionComponent(Complex parent, String parentType, String name, Composition.SectionComponent element, int index) {
7097    if (element == null) 
7098      return;
7099    Complex t;
7100    if (Utilities.noString(parentType))
7101      t = parent;
7102    else {
7103      t = parent.predicate("fhir:"+parentType+'.'+name);
7104    }
7105    composeBackboneElement(t, "section", name, element, index);
7106    if (element.hasTitleElement()) {
7107      composeString(t, "SectionComponent", "title", element.getTitleElement(), -1);
7108    }
7109    if (element.hasCode()) {
7110      composeCodeableConcept(t, "SectionComponent", "code", element.getCode(), -1);
7111    }
7112    for (int i = 0; i < element.getAuthor().size(); i++) {
7113      composeReference(t, "SectionComponent", "author", element.getAuthor().get(i), i);
7114    }
7115    if (element.hasFocus()) {
7116      composeReference(t, "SectionComponent", "focus", element.getFocus(), -1);
7117    }
7118    if (element.hasText()) {
7119      composeNarrative(t, "SectionComponent", "text", element.getText(), -1);
7120    }
7121    if (element.hasModeElement()) {
7122      composeEnum(t, "SectionComponent", "mode", element.getModeElement(), -1);
7123    }
7124    if (element.hasOrderedBy()) {
7125      composeCodeableConcept(t, "SectionComponent", "orderedBy", element.getOrderedBy(), -1);
7126    }
7127    for (int i = 0; i < element.getEntry().size(); i++) {
7128      composeReference(t, "SectionComponent", "entry", element.getEntry().get(i), i);
7129    }
7130    if (element.hasEmptyReason()) {
7131      composeCodeableConcept(t, "SectionComponent", "emptyReason", element.getEmptyReason(), -1);
7132    }
7133    for (int i = 0; i < element.getSection().size(); i++) {
7134      composeCompositionSectionComponent(t, "SectionComponent", "section", element.getSection().get(i), i);
7135    }
7136  }
7137
7138  protected void composeConceptMap(Complex parent, String parentType, String name, ConceptMap element, int index) {
7139    if (element == null) 
7140      return;
7141    Complex t;
7142    if (Utilities.noString(parentType))
7143      t = parent;
7144    else {
7145      t = parent.predicate("fhir:"+parentType+'.'+name);
7146    }
7147    composeCanonicalResource(t, "ConceptMap", name, element, index);
7148    if (element.hasUrlElement()) {
7149      composeUri(t, "ConceptMap", "url", element.getUrlElement(), -1);
7150    }
7151    for (int i = 0; i < element.getIdentifier().size(); i++) {
7152      composeIdentifier(t, "ConceptMap", "identifier", element.getIdentifier().get(i), i);
7153    }
7154    if (element.hasVersionElement()) {
7155      composeString(t, "ConceptMap", "version", element.getVersionElement(), -1);
7156    }
7157    if (element.hasNameElement()) {
7158      composeString(t, "ConceptMap", "name", element.getNameElement(), -1);
7159    }
7160    if (element.hasTitleElement()) {
7161      composeString(t, "ConceptMap", "title", element.getTitleElement(), -1);
7162    }
7163    if (element.hasStatusElement()) {
7164      composeEnum(t, "ConceptMap", "status", element.getStatusElement(), -1);
7165    }
7166    if (element.hasExperimentalElement()) {
7167      composeBoolean(t, "ConceptMap", "experimental", element.getExperimentalElement(), -1);
7168    }
7169    if (element.hasDateElement()) {
7170      composeDateTime(t, "ConceptMap", "date", element.getDateElement(), -1);
7171    }
7172    if (element.hasPublisherElement()) {
7173      composeString(t, "ConceptMap", "publisher", element.getPublisherElement(), -1);
7174    }
7175    for (int i = 0; i < element.getContact().size(); i++) {
7176      composeContactDetail(t, "ConceptMap", "contact", element.getContact().get(i), i);
7177    }
7178    if (element.hasDescriptionElement()) {
7179      composeMarkdown(t, "ConceptMap", "description", element.getDescriptionElement(), -1);
7180    }
7181    for (int i = 0; i < element.getUseContext().size(); i++) {
7182      composeUsageContext(t, "ConceptMap", "useContext", element.getUseContext().get(i), i);
7183    }
7184    for (int i = 0; i < element.getJurisdiction().size(); i++) {
7185      composeCodeableConcept(t, "ConceptMap", "jurisdiction", element.getJurisdiction().get(i), i);
7186    }
7187    if (element.hasPurposeElement()) {
7188      composeMarkdown(t, "ConceptMap", "purpose", element.getPurposeElement(), -1);
7189    }
7190    if (element.hasCopyrightElement()) {
7191      composeMarkdown(t, "ConceptMap", "copyright", element.getCopyrightElement(), -1);
7192    }
7193    if (element.hasSource()) {
7194      composeType(t, "ConceptMap", "source", element.getSource(), -1);
7195    }
7196    if (element.hasTarget()) {
7197      composeType(t, "ConceptMap", "target", element.getTarget(), -1);
7198    }
7199    for (int i = 0; i < element.getGroup().size(); i++) {
7200      composeConceptMapGroupComponent(t, "ConceptMap", "group", element.getGroup().get(i), i);
7201    }
7202  }
7203
7204  protected void composeConceptMapGroupComponent(Complex parent, String parentType, String name, ConceptMap.ConceptMapGroupComponent element, int index) {
7205    if (element == null) 
7206      return;
7207    Complex t;
7208    if (Utilities.noString(parentType))
7209      t = parent;
7210    else {
7211      t = parent.predicate("fhir:"+parentType+'.'+name);
7212    }
7213    composeBackboneElement(t, "group", name, element, index);
7214    if (element.hasSourceElement()) {
7215      composeCanonical(t, "ConceptMapGroupComponent", "source", element.getSourceElement(), -1);
7216    }
7217    if (element.hasTargetElement()) {
7218      composeCanonical(t, "ConceptMapGroupComponent", "target", element.getTargetElement(), -1);
7219    }
7220    for (int i = 0; i < element.getElement().size(); i++) {
7221      composeConceptMapSourceElementComponent(t, "ConceptMapGroupComponent", "element", element.getElement().get(i), i);
7222    }
7223    if (element.hasUnmapped()) {
7224      composeConceptMapGroupUnmappedComponent(t, "ConceptMapGroupComponent", "unmapped", element.getUnmapped(), -1);
7225    }
7226  }
7227
7228  protected void composeConceptMapSourceElementComponent(Complex parent, String parentType, String name, ConceptMap.SourceElementComponent element, int index) {
7229    if (element == null) 
7230      return;
7231    Complex t;
7232    if (Utilities.noString(parentType))
7233      t = parent;
7234    else {
7235      t = parent.predicate("fhir:"+parentType+'.'+name);
7236    }
7237    composeBackboneElement(t, "element", name, element, index);
7238    if (element.hasCodeElement()) {
7239      composeCode(t, "SourceElementComponent", "code", element.getCodeElement(), -1);
7240    }
7241    if (element.hasDisplayElement()) {
7242      composeString(t, "SourceElementComponent", "display", element.getDisplayElement(), -1);
7243    }
7244    if (element.hasNoMapElement()) {
7245      composeBoolean(t, "SourceElementComponent", "noMap", element.getNoMapElement(), -1);
7246    }
7247    for (int i = 0; i < element.getTarget().size(); i++) {
7248      composeConceptMapTargetElementComponent(t, "SourceElementComponent", "target", element.getTarget().get(i), i);
7249    }
7250  }
7251
7252  protected void composeConceptMapTargetElementComponent(Complex parent, String parentType, String name, ConceptMap.TargetElementComponent element, int index) {
7253    if (element == null) 
7254      return;
7255    Complex t;
7256    if (Utilities.noString(parentType))
7257      t = parent;
7258    else {
7259      t = parent.predicate("fhir:"+parentType+'.'+name);
7260    }
7261    composeBackboneElement(t, "target", name, element, index);
7262    if (element.hasCodeElement()) {
7263      composeCode(t, "TargetElementComponent", "code", element.getCodeElement(), -1);
7264    }
7265    if (element.hasDisplayElement()) {
7266      composeString(t, "TargetElementComponent", "display", element.getDisplayElement(), -1);
7267    }
7268    if (element.hasRelationshipElement()) {
7269      composeEnum(t, "TargetElementComponent", "relationship", element.getRelationshipElement(), -1);
7270    }
7271    if (element.hasCommentElement()) {
7272      composeString(t, "TargetElementComponent", "comment", element.getCommentElement(), -1);
7273    }
7274    for (int i = 0; i < element.getDependsOn().size(); i++) {
7275      composeConceptMapOtherElementComponent(t, "TargetElementComponent", "dependsOn", element.getDependsOn().get(i), i);
7276    }
7277    for (int i = 0; i < element.getProduct().size(); i++) {
7278      composeConceptMapOtherElementComponent(t, "TargetElementComponent", "product", element.getProduct().get(i), i);
7279    }
7280  }
7281
7282  protected void composeConceptMapOtherElementComponent(Complex parent, String parentType, String name, ConceptMap.OtherElementComponent element, int index) {
7283    if (element == null) 
7284      return;
7285    Complex t;
7286    if (Utilities.noString(parentType))
7287      t = parent;
7288    else {
7289      t = parent.predicate("fhir:"+parentType+'.'+name);
7290    }
7291    composeBackboneElement(t, "dependsOn", name, element, index);
7292    if (element.hasPropertyElement()) {
7293      composeUri(t, "OtherElementComponent", "property", element.getPropertyElement(), -1);
7294    }
7295    if (element.hasSystemElement()) {
7296      composeCanonical(t, "OtherElementComponent", "system", element.getSystemElement(), -1);
7297    }
7298    if (element.hasValueElement()) {
7299      composeString(t, "OtherElementComponent", "value", element.getValueElement(), -1);
7300    }
7301    if (element.hasDisplayElement()) {
7302      composeString(t, "OtherElementComponent", "display", element.getDisplayElement(), -1);
7303    }
7304  }
7305
7306  protected void composeConceptMapGroupUnmappedComponent(Complex parent, String parentType, String name, ConceptMap.ConceptMapGroupUnmappedComponent element, int index) {
7307    if (element == null) 
7308      return;
7309    Complex t;
7310    if (Utilities.noString(parentType))
7311      t = parent;
7312    else {
7313      t = parent.predicate("fhir:"+parentType+'.'+name);
7314    }
7315    composeBackboneElement(t, "unmapped", name, element, index);
7316    if (element.hasModeElement()) {
7317      composeEnum(t, "ConceptMapGroupUnmappedComponent", "mode", element.getModeElement(), -1);
7318    }
7319    if (element.hasCodeElement()) {
7320      composeCode(t, "ConceptMapGroupUnmappedComponent", "code", element.getCodeElement(), -1);
7321    }
7322    if (element.hasDisplayElement()) {
7323      composeString(t, "ConceptMapGroupUnmappedComponent", "display", element.getDisplayElement(), -1);
7324    }
7325    if (element.hasUrlElement()) {
7326      composeCanonical(t, "ConceptMapGroupUnmappedComponent", "url", element.getUrlElement(), -1);
7327    }
7328  }
7329
7330  protected void composeConceptMap2(Complex parent, String parentType, String name, ConceptMap2 element, int index) {
7331    if (element == null) 
7332      return;
7333    Complex t;
7334    if (Utilities.noString(parentType))
7335      t = parent;
7336    else {
7337      t = parent.predicate("fhir:"+parentType+'.'+name);
7338    }
7339    composeCanonicalResource(t, "ConceptMap2", name, element, index);
7340    if (element.hasUrlElement()) {
7341      composeUri(t, "ConceptMap2", "url", element.getUrlElement(), -1);
7342    }
7343    for (int i = 0; i < element.getIdentifier().size(); i++) {
7344      composeIdentifier(t, "ConceptMap2", "identifier", element.getIdentifier().get(i), i);
7345    }
7346    if (element.hasVersionElement()) {
7347      composeString(t, "ConceptMap2", "version", element.getVersionElement(), -1);
7348    }
7349    if (element.hasNameElement()) {
7350      composeString(t, "ConceptMap2", "name", element.getNameElement(), -1);
7351    }
7352    if (element.hasTitleElement()) {
7353      composeString(t, "ConceptMap2", "title", element.getTitleElement(), -1);
7354    }
7355    if (element.hasStatusElement()) {
7356      composeEnum(t, "ConceptMap2", "status", element.getStatusElement(), -1);
7357    }
7358    if (element.hasExperimentalElement()) {
7359      composeBoolean(t, "ConceptMap2", "experimental", element.getExperimentalElement(), -1);
7360    }
7361    if (element.hasDateElement()) {
7362      composeDateTime(t, "ConceptMap2", "date", element.getDateElement(), -1);
7363    }
7364    if (element.hasPublisherElement()) {
7365      composeString(t, "ConceptMap2", "publisher", element.getPublisherElement(), -1);
7366    }
7367    for (int i = 0; i < element.getContact().size(); i++) {
7368      composeContactDetail(t, "ConceptMap2", "contact", element.getContact().get(i), i);
7369    }
7370    if (element.hasDescriptionElement()) {
7371      composeMarkdown(t, "ConceptMap2", "description", element.getDescriptionElement(), -1);
7372    }
7373    for (int i = 0; i < element.getUseContext().size(); i++) {
7374      composeUsageContext(t, "ConceptMap2", "useContext", element.getUseContext().get(i), i);
7375    }
7376    for (int i = 0; i < element.getJurisdiction().size(); i++) {
7377      composeCodeableConcept(t, "ConceptMap2", "jurisdiction", element.getJurisdiction().get(i), i);
7378    }
7379    if (element.hasPurposeElement()) {
7380      composeMarkdown(t, "ConceptMap2", "purpose", element.getPurposeElement(), -1);
7381    }
7382    if (element.hasCopyrightElement()) {
7383      composeMarkdown(t, "ConceptMap2", "copyright", element.getCopyrightElement(), -1);
7384    }
7385    if (element.hasSource()) {
7386      composeType(t, "ConceptMap2", "source", element.getSource(), -1);
7387    }
7388    if (element.hasTarget()) {
7389      composeType(t, "ConceptMap2", "target", element.getTarget(), -1);
7390    }
7391    for (int i = 0; i < element.getGroup().size(); i++) {
7392      composeConceptMap2GroupComponent(t, "ConceptMap2", "group", element.getGroup().get(i), i);
7393    }
7394  }
7395
7396  protected void composeConceptMap2GroupComponent(Complex parent, String parentType, String name, ConceptMap2.ConceptMap2GroupComponent 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:"+parentType+'.'+name);
7404    }
7405    composeBackboneElement(t, "group", name, element, index);
7406    if (element.hasSourceElement()) {
7407      composeCanonical(t, "ConceptMap2GroupComponent", "source", element.getSourceElement(), -1);
7408    }
7409    if (element.hasTargetElement()) {
7410      composeCanonical(t, "ConceptMap2GroupComponent", "target", element.getTargetElement(), -1);
7411    }
7412    for (int i = 0; i < element.getElement().size(); i++) {
7413      composeConceptMap2SourceElementComponent(t, "ConceptMap2GroupComponent", "element", element.getElement().get(i), i);
7414    }
7415    if (element.hasUnmapped()) {
7416      composeConceptMap2GroupUnmappedComponent(t, "ConceptMap2GroupComponent", "unmapped", element.getUnmapped(), -1);
7417    }
7418  }
7419
7420  protected void composeConceptMap2SourceElementComponent(Complex parent, String parentType, String name, ConceptMap2.SourceElementComponent element, int index) {
7421    if (element == null) 
7422      return;
7423    Complex t;
7424    if (Utilities.noString(parentType))
7425      t = parent;
7426    else {
7427      t = parent.predicate("fhir:"+parentType+'.'+name);
7428    }
7429    composeBackboneElement(t, "element", name, element, index);
7430    if (element.hasCodeElement()) {
7431      composeCode(t, "SourceElementComponent", "code", element.getCodeElement(), -1);
7432    }
7433    if (element.hasDisplayElement()) {
7434      composeString(t, "SourceElementComponent", "display", element.getDisplayElement(), -1);
7435    }
7436    if (element.hasValueSetElement()) {
7437      composeCanonical(t, "SourceElementComponent", "valueSet", element.getValueSetElement(), -1);
7438    }
7439    if (element.hasNoMapElement()) {
7440      composeBoolean(t, "SourceElementComponent", "noMap", element.getNoMapElement(), -1);
7441    }
7442    for (int i = 0; i < element.getTarget().size(); i++) {
7443      composeConceptMap2TargetElementComponent(t, "SourceElementComponent", "target", element.getTarget().get(i), i);
7444    }
7445  }
7446
7447  protected void composeConceptMap2TargetElementComponent(Complex parent, String parentType, String name, ConceptMap2.TargetElementComponent element, int index) {
7448    if (element == null) 
7449      return;
7450    Complex t;
7451    if (Utilities.noString(parentType))
7452      t = parent;
7453    else {
7454      t = parent.predicate("fhir:"+parentType+'.'+name);
7455    }
7456    composeBackboneElement(t, "target", name, element, index);
7457    if (element.hasCodeElement()) {
7458      composeCode(t, "TargetElementComponent", "code", element.getCodeElement(), -1);
7459    }
7460    if (element.hasDisplayElement()) {
7461      composeString(t, "TargetElementComponent", "display", element.getDisplayElement(), -1);
7462    }
7463    if (element.hasValueSetElement()) {
7464      composeCanonical(t, "TargetElementComponent", "valueSet", element.getValueSetElement(), -1);
7465    }
7466    if (element.hasRelationshipElement()) {
7467      composeEnum(t, "TargetElementComponent", "relationship", element.getRelationshipElement(), -1);
7468    }
7469    if (element.hasCommentElement()) {
7470      composeString(t, "TargetElementComponent", "comment", element.getCommentElement(), -1);
7471    }
7472    for (int i = 0; i < element.getDependsOn().size(); i++) {
7473      composeConceptMap2OtherElementComponent(t, "TargetElementComponent", "dependsOn", element.getDependsOn().get(i), i);
7474    }
7475    for (int i = 0; i < element.getProduct().size(); i++) {
7476      composeConceptMap2OtherElementComponent(t, "TargetElementComponent", "product", element.getProduct().get(i), i);
7477    }
7478  }
7479
7480  protected void composeConceptMap2OtherElementComponent(Complex parent, String parentType, String name, ConceptMap2.OtherElementComponent element, int index) {
7481    if (element == null) 
7482      return;
7483    Complex t;
7484    if (Utilities.noString(parentType))
7485      t = parent;
7486    else {
7487      t = parent.predicate("fhir:"+parentType+'.'+name);
7488    }
7489    composeBackboneElement(t, "dependsOn", name, element, index);
7490    if (element.hasPropertyElement()) {
7491      composeUri(t, "OtherElementComponent", "property", element.getPropertyElement(), -1);
7492    }
7493    if (element.hasValue()) {
7494      composeType(t, "OtherElementComponent", "value", element.getValue(), -1);
7495    }
7496  }
7497
7498  protected void composeConceptMap2GroupUnmappedComponent(Complex parent, String parentType, String name, ConceptMap2.ConceptMap2GroupUnmappedComponent element, int index) {
7499    if (element == null) 
7500      return;
7501    Complex t;
7502    if (Utilities.noString(parentType))
7503      t = parent;
7504    else {
7505      t = parent.predicate("fhir:"+parentType+'.'+name);
7506    }
7507    composeBackboneElement(t, "unmapped", name, element, index);
7508    if (element.hasModeElement()) {
7509      composeEnum(t, "ConceptMap2GroupUnmappedComponent", "mode", element.getModeElement(), -1);
7510    }
7511    if (element.hasCodeElement()) {
7512      composeCode(t, "ConceptMap2GroupUnmappedComponent", "code", element.getCodeElement(), -1);
7513    }
7514    if (element.hasDisplayElement()) {
7515      composeString(t, "ConceptMap2GroupUnmappedComponent", "display", element.getDisplayElement(), -1);
7516    }
7517    if (element.hasValueSetElement()) {
7518      composeCanonical(t, "ConceptMap2GroupUnmappedComponent", "valueSet", element.getValueSetElement(), -1);
7519    }
7520    if (element.hasUrlElement()) {
7521      composeCanonical(t, "ConceptMap2GroupUnmappedComponent", "url", element.getUrlElement(), -1);
7522    }
7523  }
7524
7525  protected void composeCondition(Complex parent, String parentType, String name, Condition element, int index) {
7526    if (element == null) 
7527      return;
7528    Complex t;
7529    if (Utilities.noString(parentType))
7530      t = parent;
7531    else {
7532      t = parent.predicate("fhir:"+parentType+'.'+name);
7533    }
7534    composeDomainResource(t, "Condition", name, element, index);
7535    for (int i = 0; i < element.getIdentifier().size(); i++) {
7536      composeIdentifier(t, "Condition", "identifier", element.getIdentifier().get(i), i);
7537    }
7538    if (element.hasClinicalStatus()) {
7539      composeCodeableConcept(t, "Condition", "clinicalStatus", element.getClinicalStatus(), -1);
7540    }
7541    if (element.hasVerificationStatus()) {
7542      composeCodeableConcept(t, "Condition", "verificationStatus", element.getVerificationStatus(), -1);
7543    }
7544    for (int i = 0; i < element.getCategory().size(); i++) {
7545      composeCodeableConcept(t, "Condition", "category", element.getCategory().get(i), i);
7546    }
7547    if (element.hasSeverity()) {
7548      composeCodeableConcept(t, "Condition", "severity", element.getSeverity(), -1);
7549    }
7550    if (element.hasCode()) {
7551      composeCodeableConcept(t, "Condition", "code", element.getCode(), -1);
7552    }
7553    for (int i = 0; i < element.getBodySite().size(); i++) {
7554      composeCodeableConcept(t, "Condition", "bodySite", element.getBodySite().get(i), i);
7555    }
7556    if (element.hasSubject()) {
7557      composeReference(t, "Condition", "subject", element.getSubject(), -1);
7558    }
7559    if (element.hasEncounter()) {
7560      composeReference(t, "Condition", "encounter", element.getEncounter(), -1);
7561    }
7562    if (element.hasOnset()) {
7563      composeType(t, "Condition", "onset", element.getOnset(), -1);
7564    }
7565    if (element.hasAbatement()) {
7566      composeType(t, "Condition", "abatement", element.getAbatement(), -1);
7567    }
7568    if (element.hasRecordedDateElement()) {
7569      composeDateTime(t, "Condition", "recordedDate", element.getRecordedDateElement(), -1);
7570    }
7571    if (element.hasRecorder()) {
7572      composeReference(t, "Condition", "recorder", element.getRecorder(), -1);
7573    }
7574    if (element.hasAsserter()) {
7575      composeReference(t, "Condition", "asserter", element.getAsserter(), -1);
7576    }
7577    for (int i = 0; i < element.getStage().size(); i++) {
7578      composeConditionStageComponent(t, "Condition", "stage", element.getStage().get(i), i);
7579    }
7580    for (int i = 0; i < element.getEvidence().size(); i++) {
7581      composeConditionEvidenceComponent(t, "Condition", "evidence", element.getEvidence().get(i), i);
7582    }
7583    for (int i = 0; i < element.getNote().size(); i++) {
7584      composeAnnotation(t, "Condition", "note", element.getNote().get(i), i);
7585    }
7586  }
7587
7588  protected void composeConditionStageComponent(Complex parent, String parentType, String name, Condition.ConditionStageComponent element, int index) {
7589    if (element == null) 
7590      return;
7591    Complex t;
7592    if (Utilities.noString(parentType))
7593      t = parent;
7594    else {
7595      t = parent.predicate("fhir:"+parentType+'.'+name);
7596    }
7597    composeBackboneElement(t, "stage", name, element, index);
7598    if (element.hasSummary()) {
7599      composeCodeableConcept(t, "ConditionStageComponent", "summary", element.getSummary(), -1);
7600    }
7601    for (int i = 0; i < element.getAssessment().size(); i++) {
7602      composeReference(t, "ConditionStageComponent", "assessment", element.getAssessment().get(i), i);
7603    }
7604    if (element.hasType()) {
7605      composeCodeableConcept(t, "ConditionStageComponent", "type", element.getType(), -1);
7606    }
7607  }
7608
7609  protected void composeConditionEvidenceComponent(Complex parent, String parentType, String name, Condition.ConditionEvidenceComponent element, int index) {
7610    if (element == null) 
7611      return;
7612    Complex t;
7613    if (Utilities.noString(parentType))
7614      t = parent;
7615    else {
7616      t = parent.predicate("fhir:"+parentType+'.'+name);
7617    }
7618    composeBackboneElement(t, "evidence", name, element, index);
7619    for (int i = 0; i < element.getCode().size(); i++) {
7620      composeCodeableConcept(t, "ConditionEvidenceComponent", "code", element.getCode().get(i), i);
7621    }
7622    for (int i = 0; i < element.getDetail().size(); i++) {
7623      composeReference(t, "ConditionEvidenceComponent", "detail", element.getDetail().get(i), i);
7624    }
7625  }
7626
7627  protected void composeConditionDefinition(Complex parent, String parentType, String name, ConditionDefinition element, int index) {
7628    if (element == null) 
7629      return;
7630    Complex t;
7631    if (Utilities.noString(parentType))
7632      t = parent;
7633    else {
7634      t = parent.predicate("fhir:"+parentType+'.'+name);
7635    }
7636    composeMetadataResource(t, "ConditionDefinition", name, element, index);
7637    if (element.hasUrlElement()) {
7638      composeUri(t, "ConditionDefinition", "url", element.getUrlElement(), -1);
7639    }
7640    for (int i = 0; i < element.getIdentifier().size(); i++) {
7641      composeIdentifier(t, "ConditionDefinition", "identifier", element.getIdentifier().get(i), i);
7642    }
7643    if (element.hasVersionElement()) {
7644      composeString(t, "ConditionDefinition", "version", element.getVersionElement(), -1);
7645    }
7646    if (element.hasNameElement()) {
7647      composeString(t, "ConditionDefinition", "name", element.getNameElement(), -1);
7648    }
7649    if (element.hasTitleElement()) {
7650      composeString(t, "ConditionDefinition", "title", element.getTitleElement(), -1);
7651    }
7652    if (element.hasSubtitleElement()) {
7653      composeString(t, "ConditionDefinition", "subtitle", element.getSubtitleElement(), -1);
7654    }
7655    if (element.hasStatusElement()) {
7656      composeEnum(t, "ConditionDefinition", "status", element.getStatusElement(), -1);
7657    }
7658    if (element.hasExperimentalElement()) {
7659      composeBoolean(t, "ConditionDefinition", "experimental", element.getExperimentalElement(), -1);
7660    }
7661    if (element.hasDateElement()) {
7662      composeDateTime(t, "ConditionDefinition", "date", element.getDateElement(), -1);
7663    }
7664    if (element.hasPublisherElement()) {
7665      composeString(t, "ConditionDefinition", "publisher", element.getPublisherElement(), -1);
7666    }
7667    for (int i = 0; i < element.getContact().size(); i++) {
7668      composeContactDetail(t, "ConditionDefinition", "contact", element.getContact().get(i), i);
7669    }
7670    if (element.hasDescriptionElement()) {
7671      composeMarkdown(t, "ConditionDefinition", "description", element.getDescriptionElement(), -1);
7672    }
7673    for (int i = 0; i < element.getUseContext().size(); i++) {
7674      composeUsageContext(t, "ConditionDefinition", "useContext", element.getUseContext().get(i), i);
7675    }
7676    for (int i = 0; i < element.getJurisdiction().size(); i++) {
7677      composeCodeableConcept(t, "ConditionDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
7678    }
7679    if (element.hasCode()) {
7680      composeCodeableConcept(t, "ConditionDefinition", "code", element.getCode(), -1);
7681    }
7682    if (element.hasSeverity()) {
7683      composeCodeableConcept(t, "ConditionDefinition", "severity", element.getSeverity(), -1);
7684    }
7685    if (element.hasBodySite()) {
7686      composeCodeableConcept(t, "ConditionDefinition", "bodySite", element.getBodySite(), -1);
7687    }
7688    if (element.hasStage()) {
7689      composeCodeableConcept(t, "ConditionDefinition", "stage", element.getStage(), -1);
7690    }
7691    if (element.hasHasSeverityElement()) {
7692      composeBoolean(t, "ConditionDefinition", "hasSeverity", element.getHasSeverityElement(), -1);
7693    }
7694    if (element.hasHasBodySiteElement()) {
7695      composeBoolean(t, "ConditionDefinition", "hasBodySite", element.getHasBodySiteElement(), -1);
7696    }
7697    if (element.hasHasStageElement()) {
7698      composeBoolean(t, "ConditionDefinition", "hasStage", element.getHasStageElement(), -1);
7699    }
7700    for (int i = 0; i < element.getDefinition().size(); i++) {
7701      composeUri(t, "ConditionDefinition", "definition", element.getDefinition().get(i), i);
7702    }
7703    for (int i = 0; i < element.getObservation().size(); i++) {
7704      composeConditionDefinitionObservationComponent(t, "ConditionDefinition", "observation", element.getObservation().get(i), i);
7705    }
7706    for (int i = 0; i < element.getMedication().size(); i++) {
7707      composeConditionDefinitionMedicationComponent(t, "ConditionDefinition", "medication", element.getMedication().get(i), i);
7708    }
7709    for (int i = 0; i < element.getPrecondition().size(); i++) {
7710      composeConditionDefinitionPreconditionComponent(t, "ConditionDefinition", "precondition", element.getPrecondition().get(i), i);
7711    }
7712    for (int i = 0; i < element.getTeam().size(); i++) {
7713      composeReference(t, "ConditionDefinition", "team", element.getTeam().get(i), i);
7714    }
7715    for (int i = 0; i < element.getQuestionnaire().size(); i++) {
7716      composeConditionDefinitionQuestionnaireComponent(t, "ConditionDefinition", "questionnaire", element.getQuestionnaire().get(i), i);
7717    }
7718    for (int i = 0; i < element.getPlan().size(); i++) {
7719      composeConditionDefinitionPlanComponent(t, "ConditionDefinition", "plan", element.getPlan().get(i), i);
7720    }
7721  }
7722
7723  protected void composeConditionDefinitionObservationComponent(Complex parent, String parentType, String name, ConditionDefinition.ConditionDefinitionObservationComponent element, int index) {
7724    if (element == null) 
7725      return;
7726    Complex t;
7727    if (Utilities.noString(parentType))
7728      t = parent;
7729    else {
7730      t = parent.predicate("fhir:"+parentType+'.'+name);
7731    }
7732    composeBackboneElement(t, "observation", name, element, index);
7733    if (element.hasCategory()) {
7734      composeCodeableConcept(t, "ConditionDefinitionObservationComponent", "category", element.getCategory(), -1);
7735    }
7736    if (element.hasCode()) {
7737      composeCodeableConcept(t, "ConditionDefinitionObservationComponent", "code", element.getCode(), -1);
7738    }
7739  }
7740
7741  protected void composeConditionDefinitionMedicationComponent(Complex parent, String parentType, String name, ConditionDefinition.ConditionDefinitionMedicationComponent element, int index) {
7742    if (element == null) 
7743      return;
7744    Complex t;
7745    if (Utilities.noString(parentType))
7746      t = parent;
7747    else {
7748      t = parent.predicate("fhir:"+parentType+'.'+name);
7749    }
7750    composeBackboneElement(t, "medication", name, element, index);
7751    if (element.hasCategory()) {
7752      composeCodeableConcept(t, "ConditionDefinitionMedicationComponent", "category", element.getCategory(), -1);
7753    }
7754    if (element.hasCode()) {
7755      composeCodeableConcept(t, "ConditionDefinitionMedicationComponent", "code", element.getCode(), -1);
7756    }
7757  }
7758
7759  protected void composeConditionDefinitionPreconditionComponent(Complex parent, String parentType, String name, ConditionDefinition.ConditionDefinitionPreconditionComponent element, int index) {
7760    if (element == null) 
7761      return;
7762    Complex t;
7763    if (Utilities.noString(parentType))
7764      t = parent;
7765    else {
7766      t = parent.predicate("fhir:"+parentType+'.'+name);
7767    }
7768    composeBackboneElement(t, "precondition", name, element, index);
7769    if (element.hasTypeElement()) {
7770      composeEnum(t, "ConditionDefinitionPreconditionComponent", "type", element.getTypeElement(), -1);
7771    }
7772    if (element.hasCode()) {
7773      composeCodeableConcept(t, "ConditionDefinitionPreconditionComponent", "code", element.getCode(), -1);
7774    }
7775    if (element.hasValue()) {
7776      composeType(t, "ConditionDefinitionPreconditionComponent", "value", element.getValue(), -1);
7777    }
7778  }
7779
7780  protected void composeConditionDefinitionQuestionnaireComponent(Complex parent, String parentType, String name, ConditionDefinition.ConditionDefinitionQuestionnaireComponent element, int index) {
7781    if (element == null) 
7782      return;
7783    Complex t;
7784    if (Utilities.noString(parentType))
7785      t = parent;
7786    else {
7787      t = parent.predicate("fhir:"+parentType+'.'+name);
7788    }
7789    composeBackboneElement(t, "questionnaire", name, element, index);
7790    if (element.hasPurposeElement()) {
7791      composeEnum(t, "ConditionDefinitionQuestionnaireComponent", "purpose", element.getPurposeElement(), -1);
7792    }
7793    if (element.hasReference()) {
7794      composeReference(t, "ConditionDefinitionQuestionnaireComponent", "reference", element.getReference(), -1);
7795    }
7796  }
7797
7798  protected void composeConditionDefinitionPlanComponent(Complex parent, String parentType, String name, ConditionDefinition.ConditionDefinitionPlanComponent element, int index) {
7799    if (element == null) 
7800      return;
7801    Complex t;
7802    if (Utilities.noString(parentType))
7803      t = parent;
7804    else {
7805      t = parent.predicate("fhir:"+parentType+'.'+name);
7806    }
7807    composeBackboneElement(t, "plan", name, element, index);
7808    if (element.hasRole()) {
7809      composeCodeableConcept(t, "ConditionDefinitionPlanComponent", "role", element.getRole(), -1);
7810    }
7811    if (element.hasReference()) {
7812      composeReference(t, "ConditionDefinitionPlanComponent", "reference", element.getReference(), -1);
7813    }
7814  }
7815
7816  protected void composeConsent(Complex parent, String parentType, String name, Consent element, int index) {
7817    if (element == null) 
7818      return;
7819    Complex t;
7820    if (Utilities.noString(parentType))
7821      t = parent;
7822    else {
7823      t = parent.predicate("fhir:"+parentType+'.'+name);
7824    }
7825    composeDomainResource(t, "Consent", name, element, index);
7826    for (int i = 0; i < element.getIdentifier().size(); i++) {
7827      composeIdentifier(t, "Consent", "identifier", element.getIdentifier().get(i), i);
7828    }
7829    if (element.hasStatusElement()) {
7830      composeEnum(t, "Consent", "status", element.getStatusElement(), -1);
7831    }
7832    for (int i = 0; i < element.getCategory().size(); i++) {
7833      composeCodeableConcept(t, "Consent", "category", element.getCategory().get(i), i);
7834    }
7835    if (element.hasSubject()) {
7836      composeReference(t, "Consent", "subject", element.getSubject(), -1);
7837    }
7838    if (element.hasDateTimeElement()) {
7839      composeDateTime(t, "Consent", "dateTime", element.getDateTimeElement(), -1);
7840    }
7841    for (int i = 0; i < element.getGrantor().size(); i++) {
7842      composeReference(t, "Consent", "grantor", element.getGrantor().get(i), i);
7843    }
7844    for (int i = 0; i < element.getGrantee().size(); i++) {
7845      composeReference(t, "Consent", "grantee", element.getGrantee().get(i), i);
7846    }
7847    for (int i = 0; i < element.getManager().size(); i++) {
7848      composeReference(t, "Consent", "manager", element.getManager().get(i), i);
7849    }
7850    for (int i = 0; i < element.getController().size(); i++) {
7851      composeReference(t, "Consent", "controller", element.getController().get(i), i);
7852    }
7853    for (int i = 0; i < element.getSourceAttachment().size(); i++) {
7854      composeAttachment(t, "Consent", "sourceAttachment", element.getSourceAttachment().get(i), i);
7855    }
7856    for (int i = 0; i < element.getSourceReference().size(); i++) {
7857      composeReference(t, "Consent", "sourceReference", element.getSourceReference().get(i), i);
7858    }
7859    for (int i = 0; i < element.getPolicy().size(); i++) {
7860      composeConsentPolicyComponent(t, "Consent", "policy", element.getPolicy().get(i), i);
7861    }
7862    if (element.hasPolicyRule()) {
7863      composeCodeableConcept(t, "Consent", "policyRule", element.getPolicyRule(), -1);
7864    }
7865    for (int i = 0; i < element.getVerification().size(); i++) {
7866      composeConsentVerificationComponent(t, "Consent", "verification", element.getVerification().get(i), i);
7867    }
7868    if (element.hasProvision()) {
7869      composeConsentProvisionComponent(t, "Consent", "provision", element.getProvision(), -1);
7870    }
7871  }
7872
7873  protected void composeConsentPolicyComponent(Complex parent, String parentType, String name, Consent.ConsentPolicyComponent element, int index) {
7874    if (element == null) 
7875      return;
7876    Complex t;
7877    if (Utilities.noString(parentType))
7878      t = parent;
7879    else {
7880      t = parent.predicate("fhir:"+parentType+'.'+name);
7881    }
7882    composeBackboneElement(t, "policy", name, element, index);
7883    if (element.hasAuthorityElement()) {
7884      composeUri(t, "ConsentPolicyComponent", "authority", element.getAuthorityElement(), -1);
7885    }
7886    if (element.hasUriElement()) {
7887      composeUri(t, "ConsentPolicyComponent", "uri", element.getUriElement(), -1);
7888    }
7889  }
7890
7891  protected void composeConsentVerificationComponent(Complex parent, String parentType, String name, Consent.ConsentVerificationComponent element, int index) {
7892    if (element == null) 
7893      return;
7894    Complex t;
7895    if (Utilities.noString(parentType))
7896      t = parent;
7897    else {
7898      t = parent.predicate("fhir:"+parentType+'.'+name);
7899    }
7900    composeBackboneElement(t, "verification", name, element, index);
7901    if (element.hasVerifiedElement()) {
7902      composeBoolean(t, "ConsentVerificationComponent", "verified", element.getVerifiedElement(), -1);
7903    }
7904    if (element.hasVerificationType()) {
7905      composeCodeableConcept(t, "ConsentVerificationComponent", "verificationType", element.getVerificationType(), -1);
7906    }
7907    if (element.hasVerifiedBy()) {
7908      composeReference(t, "ConsentVerificationComponent", "verifiedBy", element.getVerifiedBy(), -1);
7909    }
7910    if (element.hasVerifiedWith()) {
7911      composeReference(t, "ConsentVerificationComponent", "verifiedWith", element.getVerifiedWith(), -1);
7912    }
7913    for (int i = 0; i < element.getVerificationDate().size(); i++) {
7914      composeDateTime(t, "ConsentVerificationComponent", "verificationDate", element.getVerificationDate().get(i), i);
7915    }
7916  }
7917
7918  protected void composeConsentProvisionComponent(Complex parent, String parentType, String name, Consent.ProvisionComponent element, int index) {
7919    if (element == null) 
7920      return;
7921    Complex t;
7922    if (Utilities.noString(parentType))
7923      t = parent;
7924    else {
7925      t = parent.predicate("fhir:"+parentType+'.'+name);
7926    }
7927    composeBackboneElement(t, "provision", name, element, index);
7928    if (element.hasTypeElement()) {
7929      composeEnum(t, "ProvisionComponent", "type", element.getTypeElement(), -1);
7930    }
7931    if (element.hasPeriod()) {
7932      composePeriod(t, "ProvisionComponent", "period", element.getPeriod(), -1);
7933    }
7934    for (int i = 0; i < element.getActor().size(); i++) {
7935      composeConsentProvisionActorComponent(t, "ProvisionComponent", "actor", element.getActor().get(i), i);
7936    }
7937    for (int i = 0; i < element.getAction().size(); i++) {
7938      composeCodeableConcept(t, "ProvisionComponent", "action", element.getAction().get(i), i);
7939    }
7940    for (int i = 0; i < element.getSecurityLabel().size(); i++) {
7941      composeCoding(t, "ProvisionComponent", "securityLabel", element.getSecurityLabel().get(i), i);
7942    }
7943    for (int i = 0; i < element.getPurpose().size(); i++) {
7944      composeCoding(t, "ProvisionComponent", "purpose", element.getPurpose().get(i), i);
7945    }
7946    for (int i = 0; i < element.getClass_().size(); i++) {
7947      composeCoding(t, "ProvisionComponent", "class", element.getClass_().get(i), i);
7948    }
7949    for (int i = 0; i < element.getCode().size(); i++) {
7950      composeCodeableConcept(t, "ProvisionComponent", "code", element.getCode().get(i), i);
7951    }
7952    if (element.hasDataPeriod()) {
7953      composePeriod(t, "ProvisionComponent", "dataPeriod", element.getDataPeriod(), -1);
7954    }
7955    for (int i = 0; i < element.getData().size(); i++) {
7956      composeConsentProvisionDataComponent(t, "ProvisionComponent", "data", element.getData().get(i), i);
7957    }
7958    if (element.hasExpression()) {
7959      composeExpression(t, "ProvisionComponent", "expression", element.getExpression(), -1);
7960    }
7961    for (int i = 0; i < element.getProvision().size(); i++) {
7962      composeConsentProvisionComponent(t, "ProvisionComponent", "provision", element.getProvision().get(i), i);
7963    }
7964  }
7965
7966  protected void composeConsentProvisionActorComponent(Complex parent, String parentType, String name, Consent.ProvisionActorComponent element, int index) {
7967    if (element == null) 
7968      return;
7969    Complex t;
7970    if (Utilities.noString(parentType))
7971      t = parent;
7972    else {
7973      t = parent.predicate("fhir:"+parentType+'.'+name);
7974    }
7975    composeBackboneElement(t, "actor", name, element, index);
7976    if (element.hasRole()) {
7977      composeCodeableConcept(t, "ProvisionActorComponent", "role", element.getRole(), -1);
7978    }
7979    if (element.hasReference()) {
7980      composeReference(t, "ProvisionActorComponent", "reference", element.getReference(), -1);
7981    }
7982  }
7983
7984  protected void composeConsentProvisionDataComponent(Complex parent, String parentType, String name, Consent.ProvisionDataComponent 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:"+parentType+'.'+name);
7992    }
7993    composeBackboneElement(t, "data", name, element, index);
7994    if (element.hasMeaningElement()) {
7995      composeEnum(t, "ProvisionDataComponent", "meaning", element.getMeaningElement(), -1);
7996    }
7997    if (element.hasReference()) {
7998      composeReference(t, "ProvisionDataComponent", "reference", element.getReference(), -1);
7999    }
8000  }
8001
8002  protected void composeContract(Complex parent, String parentType, String name, Contract 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:"+parentType+'.'+name);
8010    }
8011    composeDomainResource(t, "Contract", name, element, index);
8012    for (int i = 0; i < element.getIdentifier().size(); i++) {
8013      composeIdentifier(t, "Contract", "identifier", element.getIdentifier().get(i), i);
8014    }
8015    if (element.hasUrlElement()) {
8016      composeUri(t, "Contract", "url", element.getUrlElement(), -1);
8017    }
8018    if (element.hasVersionElement()) {
8019      composeString(t, "Contract", "version", element.getVersionElement(), -1);
8020    }
8021    if (element.hasStatusElement()) {
8022      composeEnum(t, "Contract", "status", element.getStatusElement(), -1);
8023    }
8024    if (element.hasLegalState()) {
8025      composeCodeableConcept(t, "Contract", "legalState", element.getLegalState(), -1);
8026    }
8027    if (element.hasInstantiatesCanonical()) {
8028      composeReference(t, "Contract", "instantiatesCanonical", element.getInstantiatesCanonical(), -1);
8029    }
8030    if (element.hasInstantiatesUriElement()) {
8031      composeUri(t, "Contract", "instantiatesUri", element.getInstantiatesUriElement(), -1);
8032    }
8033    if (element.hasContentDerivative()) {
8034      composeCodeableConcept(t, "Contract", "contentDerivative", element.getContentDerivative(), -1);
8035    }
8036    if (element.hasIssuedElement()) {
8037      composeDateTime(t, "Contract", "issued", element.getIssuedElement(), -1);
8038    }
8039    if (element.hasApplies()) {
8040      composePeriod(t, "Contract", "applies", element.getApplies(), -1);
8041    }
8042    if (element.hasExpirationType()) {
8043      composeCodeableConcept(t, "Contract", "expirationType", element.getExpirationType(), -1);
8044    }
8045    for (int i = 0; i < element.getSubject().size(); i++) {
8046      composeReference(t, "Contract", "subject", element.getSubject().get(i), i);
8047    }
8048    for (int i = 0; i < element.getAuthority().size(); i++) {
8049      composeReference(t, "Contract", "authority", element.getAuthority().get(i), i);
8050    }
8051    for (int i = 0; i < element.getDomain().size(); i++) {
8052      composeReference(t, "Contract", "domain", element.getDomain().get(i), i);
8053    }
8054    for (int i = 0; i < element.getSite().size(); i++) {
8055      composeReference(t, "Contract", "site", element.getSite().get(i), i);
8056    }
8057    if (element.hasNameElement()) {
8058      composeString(t, "Contract", "name", element.getNameElement(), -1);
8059    }
8060    if (element.hasTitleElement()) {
8061      composeString(t, "Contract", "title", element.getTitleElement(), -1);
8062    }
8063    if (element.hasSubtitleElement()) {
8064      composeString(t, "Contract", "subtitle", element.getSubtitleElement(), -1);
8065    }
8066    for (int i = 0; i < element.getAlias().size(); i++) {
8067      composeString(t, "Contract", "alias", element.getAlias().get(i), i);
8068    }
8069    if (element.hasAuthor()) {
8070      composeReference(t, "Contract", "author", element.getAuthor(), -1);
8071    }
8072    if (element.hasScope()) {
8073      composeCodeableConcept(t, "Contract", "scope", element.getScope(), -1);
8074    }
8075    if (element.hasTopic()) {
8076      composeType(t, "Contract", "topic", element.getTopic(), -1);
8077    }
8078    if (element.hasType()) {
8079      composeCodeableConcept(t, "Contract", "type", element.getType(), -1);
8080    }
8081    for (int i = 0; i < element.getSubType().size(); i++) {
8082      composeCodeableConcept(t, "Contract", "subType", element.getSubType().get(i), i);
8083    }
8084    if (element.hasContentDefinition()) {
8085      composeContractContentDefinitionComponent(t, "Contract", "contentDefinition", element.getContentDefinition(), -1);
8086    }
8087    for (int i = 0; i < element.getTerm().size(); i++) {
8088      composeContractTermComponent(t, "Contract", "term", element.getTerm().get(i), i);
8089    }
8090    for (int i = 0; i < element.getSupportingInfo().size(); i++) {
8091      composeReference(t, "Contract", "supportingInfo", element.getSupportingInfo().get(i), i);
8092    }
8093    for (int i = 0; i < element.getRelevantHistory().size(); i++) {
8094      composeReference(t, "Contract", "relevantHistory", element.getRelevantHistory().get(i), i);
8095    }
8096    for (int i = 0; i < element.getSigner().size(); i++) {
8097      composeContractSignatoryComponent(t, "Contract", "signer", element.getSigner().get(i), i);
8098    }
8099    for (int i = 0; i < element.getFriendly().size(); i++) {
8100      composeContractFriendlyLanguageComponent(t, "Contract", "friendly", element.getFriendly().get(i), i);
8101    }
8102    for (int i = 0; i < element.getLegal().size(); i++) {
8103      composeContractLegalLanguageComponent(t, "Contract", "legal", element.getLegal().get(i), i);
8104    }
8105    for (int i = 0; i < element.getRule().size(); i++) {
8106      composeContractComputableLanguageComponent(t, "Contract", "rule", element.getRule().get(i), i);
8107    }
8108    if (element.hasLegallyBinding()) {
8109      composeType(t, "Contract", "legallyBinding", element.getLegallyBinding(), -1);
8110    }
8111  }
8112
8113  protected void composeContractContentDefinitionComponent(Complex parent, String parentType, String name, Contract.ContentDefinitionComponent element, int index) {
8114    if (element == null) 
8115      return;
8116    Complex t;
8117    if (Utilities.noString(parentType))
8118      t = parent;
8119    else {
8120      t = parent.predicate("fhir:"+parentType+'.'+name);
8121    }
8122    composeBackboneElement(t, "contentDefinition", name, element, index);
8123    if (element.hasType()) {
8124      composeCodeableConcept(t, "ContentDefinitionComponent", "type", element.getType(), -1);
8125    }
8126    if (element.hasSubType()) {
8127      composeCodeableConcept(t, "ContentDefinitionComponent", "subType", element.getSubType(), -1);
8128    }
8129    if (element.hasPublisher()) {
8130      composeReference(t, "ContentDefinitionComponent", "publisher", element.getPublisher(), -1);
8131    }
8132    if (element.hasPublicationDateElement()) {
8133      composeDateTime(t, "ContentDefinitionComponent", "publicationDate", element.getPublicationDateElement(), -1);
8134    }
8135    if (element.hasPublicationStatusElement()) {
8136      composeEnum(t, "ContentDefinitionComponent", "publicationStatus", element.getPublicationStatusElement(), -1);
8137    }
8138    if (element.hasCopyrightElement()) {
8139      composeMarkdown(t, "ContentDefinitionComponent", "copyright", element.getCopyrightElement(), -1);
8140    }
8141  }
8142
8143  protected void composeContractTermComponent(Complex parent, String parentType, String name, Contract.TermComponent 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:"+parentType+'.'+name);
8151    }
8152    composeBackboneElement(t, "term", name, element, index);
8153    if (element.hasIdentifier()) {
8154      composeIdentifier(t, "TermComponent", "identifier", element.getIdentifier(), -1);
8155    }
8156    if (element.hasIssuedElement()) {
8157      composeDateTime(t, "TermComponent", "issued", element.getIssuedElement(), -1);
8158    }
8159    if (element.hasApplies()) {
8160      composePeriod(t, "TermComponent", "applies", element.getApplies(), -1);
8161    }
8162    if (element.hasTopic()) {
8163      composeType(t, "TermComponent", "topic", element.getTopic(), -1);
8164    }
8165    if (element.hasType()) {
8166      composeCodeableConcept(t, "TermComponent", "type", element.getType(), -1);
8167    }
8168    if (element.hasSubType()) {
8169      composeCodeableConcept(t, "TermComponent", "subType", element.getSubType(), -1);
8170    }
8171    if (element.hasTextElement()) {
8172      composeString(t, "TermComponent", "text", element.getTextElement(), -1);
8173    }
8174    for (int i = 0; i < element.getSecurityLabel().size(); i++) {
8175      composeContractSecurityLabelComponent(t, "TermComponent", "securityLabel", element.getSecurityLabel().get(i), i);
8176    }
8177    if (element.hasOffer()) {
8178      composeContractOfferComponent(t, "TermComponent", "offer", element.getOffer(), -1);
8179    }
8180    for (int i = 0; i < element.getAsset().size(); i++) {
8181      composeContractAssetComponent(t, "TermComponent", "asset", element.getAsset().get(i), i);
8182    }
8183    for (int i = 0; i < element.getAction().size(); i++) {
8184      composeContractActionComponent(t, "TermComponent", "action", element.getAction().get(i), i);
8185    }
8186    for (int i = 0; i < element.getGroup().size(); i++) {
8187      composeContractTermComponent(t, "TermComponent", "group", element.getGroup().get(i), i);
8188    }
8189  }
8190
8191  protected void composeContractSecurityLabelComponent(Complex parent, String parentType, String name, Contract.SecurityLabelComponent element, int index) {
8192    if (element == null) 
8193      return;
8194    Complex t;
8195    if (Utilities.noString(parentType))
8196      t = parent;
8197    else {
8198      t = parent.predicate("fhir:"+parentType+'.'+name);
8199    }
8200    composeBackboneElement(t, "securityLabel", name, element, index);
8201    for (int i = 0; i < element.getNumber().size(); i++) {
8202      composeUnsignedInt(t, "SecurityLabelComponent", "number", element.getNumber().get(i), i);
8203    }
8204    if (element.hasClassification()) {
8205      composeCoding(t, "SecurityLabelComponent", "classification", element.getClassification(), -1);
8206    }
8207    for (int i = 0; i < element.getCategory().size(); i++) {
8208      composeCoding(t, "SecurityLabelComponent", "category", element.getCategory().get(i), i);
8209    }
8210    for (int i = 0; i < element.getControl().size(); i++) {
8211      composeCoding(t, "SecurityLabelComponent", "control", element.getControl().get(i), i);
8212    }
8213  }
8214
8215  protected void composeContractOfferComponent(Complex parent, String parentType, String name, Contract.ContractOfferComponent element, int index) {
8216    if (element == null) 
8217      return;
8218    Complex t;
8219    if (Utilities.noString(parentType))
8220      t = parent;
8221    else {
8222      t = parent.predicate("fhir:"+parentType+'.'+name);
8223    }
8224    composeBackboneElement(t, "offer", name, element, index);
8225    for (int i = 0; i < element.getIdentifier().size(); i++) {
8226      composeIdentifier(t, "ContractOfferComponent", "identifier", element.getIdentifier().get(i), i);
8227    }
8228    for (int i = 0; i < element.getParty().size(); i++) {
8229      composeContractPartyComponent(t, "ContractOfferComponent", "party", element.getParty().get(i), i);
8230    }
8231    if (element.hasTopic()) {
8232      composeReference(t, "ContractOfferComponent", "topic", element.getTopic(), -1);
8233    }
8234    if (element.hasType()) {
8235      composeCodeableConcept(t, "ContractOfferComponent", "type", element.getType(), -1);
8236    }
8237    if (element.hasDecision()) {
8238      composeCodeableConcept(t, "ContractOfferComponent", "decision", element.getDecision(), -1);
8239    }
8240    for (int i = 0; i < element.getDecisionMode().size(); i++) {
8241      composeCodeableConcept(t, "ContractOfferComponent", "decisionMode", element.getDecisionMode().get(i), i);
8242    }
8243    for (int i = 0; i < element.getAnswer().size(); i++) {
8244      composeContractAnswerComponent(t, "ContractOfferComponent", "answer", element.getAnswer().get(i), i);
8245    }
8246    if (element.hasTextElement()) {
8247      composeString(t, "ContractOfferComponent", "text", element.getTextElement(), -1);
8248    }
8249    for (int i = 0; i < element.getLinkId().size(); i++) {
8250      composeString(t, "ContractOfferComponent", "linkId", element.getLinkId().get(i), i);
8251    }
8252    for (int i = 0; i < element.getSecurityLabelNumber().size(); i++) {
8253      composeUnsignedInt(t, "ContractOfferComponent", "securityLabelNumber", element.getSecurityLabelNumber().get(i), i);
8254    }
8255  }
8256
8257  protected void composeContractPartyComponent(Complex parent, String parentType, String name, Contract.ContractPartyComponent element, int index) {
8258    if (element == null) 
8259      return;
8260    Complex t;
8261    if (Utilities.noString(parentType))
8262      t = parent;
8263    else {
8264      t = parent.predicate("fhir:"+parentType+'.'+name);
8265    }
8266    composeBackboneElement(t, "party", name, element, index);
8267    for (int i = 0; i < element.getReference().size(); i++) {
8268      composeReference(t, "ContractPartyComponent", "reference", element.getReference().get(i), i);
8269    }
8270    if (element.hasRole()) {
8271      composeCodeableConcept(t, "ContractPartyComponent", "role", element.getRole(), -1);
8272    }
8273  }
8274
8275  protected void composeContractAnswerComponent(Complex parent, String parentType, String name, Contract.AnswerComponent element, int index) {
8276    if (element == null) 
8277      return;
8278    Complex t;
8279    if (Utilities.noString(parentType))
8280      t = parent;
8281    else {
8282      t = parent.predicate("fhir:"+parentType+'.'+name);
8283    }
8284    composeBackboneElement(t, "answer", name, element, index);
8285    if (element.hasValue()) {
8286      composeType(t, "AnswerComponent", "value", element.getValue(), -1);
8287    }
8288  }
8289
8290  protected void composeContractAssetComponent(Complex parent, String parentType, String name, Contract.ContractAssetComponent element, int index) {
8291    if (element == null) 
8292      return;
8293    Complex t;
8294    if (Utilities.noString(parentType))
8295      t = parent;
8296    else {
8297      t = parent.predicate("fhir:"+parentType+'.'+name);
8298    }
8299    composeBackboneElement(t, "asset", name, element, index);
8300    if (element.hasScope()) {
8301      composeCodeableConcept(t, "ContractAssetComponent", "scope", element.getScope(), -1);
8302    }
8303    for (int i = 0; i < element.getType().size(); i++) {
8304      composeCodeableConcept(t, "ContractAssetComponent", "type", element.getType().get(i), i);
8305    }
8306    for (int i = 0; i < element.getTypeReference().size(); i++) {
8307      composeReference(t, "ContractAssetComponent", "typeReference", element.getTypeReference().get(i), i);
8308    }
8309    for (int i = 0; i < element.getSubtype().size(); i++) {
8310      composeCodeableConcept(t, "ContractAssetComponent", "subtype", element.getSubtype().get(i), i);
8311    }
8312    if (element.hasRelationship()) {
8313      composeCoding(t, "ContractAssetComponent", "relationship", element.getRelationship(), -1);
8314    }
8315    for (int i = 0; i < element.getContext().size(); i++) {
8316      composeContractAssetContextComponent(t, "ContractAssetComponent", "context", element.getContext().get(i), i);
8317    }
8318    if (element.hasConditionElement()) {
8319      composeString(t, "ContractAssetComponent", "condition", element.getConditionElement(), -1);
8320    }
8321    for (int i = 0; i < element.getPeriodType().size(); i++) {
8322      composeCodeableConcept(t, "ContractAssetComponent", "periodType", element.getPeriodType().get(i), i);
8323    }
8324    for (int i = 0; i < element.getPeriod().size(); i++) {
8325      composePeriod(t, "ContractAssetComponent", "period", element.getPeriod().get(i), i);
8326    }
8327    for (int i = 0; i < element.getUsePeriod().size(); i++) {
8328      composePeriod(t, "ContractAssetComponent", "usePeriod", element.getUsePeriod().get(i), i);
8329    }
8330    if (element.hasTextElement()) {
8331      composeString(t, "ContractAssetComponent", "text", element.getTextElement(), -1);
8332    }
8333    for (int i = 0; i < element.getLinkId().size(); i++) {
8334      composeString(t, "ContractAssetComponent", "linkId", element.getLinkId().get(i), i);
8335    }
8336    for (int i = 0; i < element.getAnswer().size(); i++) {
8337      composeContractAnswerComponent(t, "ContractAssetComponent", "answer", element.getAnswer().get(i), i);
8338    }
8339    for (int i = 0; i < element.getSecurityLabelNumber().size(); i++) {
8340      composeUnsignedInt(t, "ContractAssetComponent", "securityLabelNumber", element.getSecurityLabelNumber().get(i), i);
8341    }
8342    for (int i = 0; i < element.getValuedItem().size(); i++) {
8343      composeContractValuedItemComponent(t, "ContractAssetComponent", "valuedItem", element.getValuedItem().get(i), i);
8344    }
8345  }
8346
8347  protected void composeContractAssetContextComponent(Complex parent, String parentType, String name, Contract.AssetContextComponent element, int index) {
8348    if (element == null) 
8349      return;
8350    Complex t;
8351    if (Utilities.noString(parentType))
8352      t = parent;
8353    else {
8354      t = parent.predicate("fhir:"+parentType+'.'+name);
8355    }
8356    composeBackboneElement(t, "context", name, element, index);
8357    if (element.hasReference()) {
8358      composeReference(t, "AssetContextComponent", "reference", element.getReference(), -1);
8359    }
8360    for (int i = 0; i < element.getCode().size(); i++) {
8361      composeCodeableConcept(t, "AssetContextComponent", "code", element.getCode().get(i), i);
8362    }
8363    if (element.hasTextElement()) {
8364      composeString(t, "AssetContextComponent", "text", element.getTextElement(), -1);
8365    }
8366  }
8367
8368  protected void composeContractValuedItemComponent(Complex parent, String parentType, String name, Contract.ValuedItemComponent element, int index) {
8369    if (element == null) 
8370      return;
8371    Complex t;
8372    if (Utilities.noString(parentType))
8373      t = parent;
8374    else {
8375      t = parent.predicate("fhir:"+parentType+'.'+name);
8376    }
8377    composeBackboneElement(t, "valuedItem", name, element, index);
8378    if (element.hasEntity()) {
8379      composeType(t, "ValuedItemComponent", "entity", element.getEntity(), -1);
8380    }
8381    if (element.hasIdentifier()) {
8382      composeIdentifier(t, "ValuedItemComponent", "identifier", element.getIdentifier(), -1);
8383    }
8384    if (element.hasEffectiveTimeElement()) {
8385      composeDateTime(t, "ValuedItemComponent", "effectiveTime", element.getEffectiveTimeElement(), -1);
8386    }
8387    if (element.hasQuantity()) {
8388      composeQuantity(t, "ValuedItemComponent", "quantity", element.getQuantity(), -1);
8389    }
8390    if (element.hasUnitPrice()) {
8391      composeMoney(t, "ValuedItemComponent", "unitPrice", element.getUnitPrice(), -1);
8392    }
8393    if (element.hasFactorElement()) {
8394      composeDecimal(t, "ValuedItemComponent", "factor", element.getFactorElement(), -1);
8395    }
8396    if (element.hasPointsElement()) {
8397      composeDecimal(t, "ValuedItemComponent", "points", element.getPointsElement(), -1);
8398    }
8399    if (element.hasNet()) {
8400      composeMoney(t, "ValuedItemComponent", "net", element.getNet(), -1);
8401    }
8402    if (element.hasPaymentElement()) {
8403      composeString(t, "ValuedItemComponent", "payment", element.getPaymentElement(), -1);
8404    }
8405    if (element.hasPaymentDateElement()) {
8406      composeDateTime(t, "ValuedItemComponent", "paymentDate", element.getPaymentDateElement(), -1);
8407    }
8408    if (element.hasResponsible()) {
8409      composeReference(t, "ValuedItemComponent", "responsible", element.getResponsible(), -1);
8410    }
8411    if (element.hasRecipient()) {
8412      composeReference(t, "ValuedItemComponent", "recipient", element.getRecipient(), -1);
8413    }
8414    for (int i = 0; i < element.getLinkId().size(); i++) {
8415      composeString(t, "ValuedItemComponent", "linkId", element.getLinkId().get(i), i);
8416    }
8417    for (int i = 0; i < element.getSecurityLabelNumber().size(); i++) {
8418      composeUnsignedInt(t, "ValuedItemComponent", "securityLabelNumber", element.getSecurityLabelNumber().get(i), i);
8419    }
8420  }
8421
8422  protected void composeContractActionComponent(Complex parent, String parentType, String name, Contract.ActionComponent element, int index) {
8423    if (element == null) 
8424      return;
8425    Complex t;
8426    if (Utilities.noString(parentType))
8427      t = parent;
8428    else {
8429      t = parent.predicate("fhir:"+parentType+'.'+name);
8430    }
8431    composeBackboneElement(t, "action", name, element, index);
8432    if (element.hasDoNotPerformElement()) {
8433      composeBoolean(t, "ActionComponent", "doNotPerform", element.getDoNotPerformElement(), -1);
8434    }
8435    if (element.hasType()) {
8436      composeCodeableConcept(t, "ActionComponent", "type", element.getType(), -1);
8437    }
8438    for (int i = 0; i < element.getSubject().size(); i++) {
8439      composeContractActionSubjectComponent(t, "ActionComponent", "subject", element.getSubject().get(i), i);
8440    }
8441    if (element.hasIntent()) {
8442      composeCodeableConcept(t, "ActionComponent", "intent", element.getIntent(), -1);
8443    }
8444    for (int i = 0; i < element.getLinkId().size(); i++) {
8445      composeString(t, "ActionComponent", "linkId", element.getLinkId().get(i), i);
8446    }
8447    if (element.hasStatus()) {
8448      composeCodeableConcept(t, "ActionComponent", "status", element.getStatus(), -1);
8449    }
8450    if (element.hasContext()) {
8451      composeReference(t, "ActionComponent", "context", element.getContext(), -1);
8452    }
8453    for (int i = 0; i < element.getContextLinkId().size(); i++) {
8454      composeString(t, "ActionComponent", "contextLinkId", element.getContextLinkId().get(i), i);
8455    }
8456    if (element.hasOccurrence()) {
8457      composeType(t, "ActionComponent", "occurrence", element.getOccurrence(), -1);
8458    }
8459    for (int i = 0; i < element.getRequester().size(); i++) {
8460      composeReference(t, "ActionComponent", "requester", element.getRequester().get(i), i);
8461    }
8462    for (int i = 0; i < element.getRequesterLinkId().size(); i++) {
8463      composeString(t, "ActionComponent", "requesterLinkId", element.getRequesterLinkId().get(i), i);
8464    }
8465    for (int i = 0; i < element.getPerformerType().size(); i++) {
8466      composeCodeableConcept(t, "ActionComponent", "performerType", element.getPerformerType().get(i), i);
8467    }
8468    if (element.hasPerformerRole()) {
8469      composeCodeableConcept(t, "ActionComponent", "performerRole", element.getPerformerRole(), -1);
8470    }
8471    if (element.hasPerformer()) {
8472      composeReference(t, "ActionComponent", "performer", element.getPerformer(), -1);
8473    }
8474    for (int i = 0; i < element.getPerformerLinkId().size(); i++) {
8475      composeString(t, "ActionComponent", "performerLinkId", element.getPerformerLinkId().get(i), i);
8476    }
8477    for (int i = 0; i < element.getReason().size(); i++) {
8478      composeCodeableReference(t, "ActionComponent", "reason", element.getReason().get(i), i);
8479    }
8480    for (int i = 0; i < element.getReasonLinkId().size(); i++) {
8481      composeString(t, "ActionComponent", "reasonLinkId", element.getReasonLinkId().get(i), i);
8482    }
8483    for (int i = 0; i < element.getNote().size(); i++) {
8484      composeAnnotation(t, "ActionComponent", "note", element.getNote().get(i), i);
8485    }
8486    for (int i = 0; i < element.getSecurityLabelNumber().size(); i++) {
8487      composeUnsignedInt(t, "ActionComponent", "securityLabelNumber", element.getSecurityLabelNumber().get(i), i);
8488    }
8489  }
8490
8491  protected void composeContractActionSubjectComponent(Complex parent, String parentType, String name, Contract.ActionSubjectComponent element, int index) {
8492    if (element == null) 
8493      return;
8494    Complex t;
8495    if (Utilities.noString(parentType))
8496      t = parent;
8497    else {
8498      t = parent.predicate("fhir:"+parentType+'.'+name);
8499    }
8500    composeBackboneElement(t, "subject", name, element, index);
8501    for (int i = 0; i < element.getReference().size(); i++) {
8502      composeReference(t, "ActionSubjectComponent", "reference", element.getReference().get(i), i);
8503    }
8504    if (element.hasRole()) {
8505      composeCodeableConcept(t, "ActionSubjectComponent", "role", element.getRole(), -1);
8506    }
8507  }
8508
8509  protected void composeContractSignatoryComponent(Complex parent, String parentType, String name, Contract.SignatoryComponent element, int index) {
8510    if (element == null) 
8511      return;
8512    Complex t;
8513    if (Utilities.noString(parentType))
8514      t = parent;
8515    else {
8516      t = parent.predicate("fhir:"+parentType+'.'+name);
8517    }
8518    composeBackboneElement(t, "signer", name, element, index);
8519    if (element.hasType()) {
8520      composeCoding(t, "SignatoryComponent", "type", element.getType(), -1);
8521    }
8522    if (element.hasParty()) {
8523      composeReference(t, "SignatoryComponent", "party", element.getParty(), -1);
8524    }
8525    for (int i = 0; i < element.getSignature().size(); i++) {
8526      composeSignature(t, "SignatoryComponent", "signature", element.getSignature().get(i), i);
8527    }
8528  }
8529
8530  protected void composeContractFriendlyLanguageComponent(Complex parent, String parentType, String name, Contract.FriendlyLanguageComponent element, int index) {
8531    if (element == null) 
8532      return;
8533    Complex t;
8534    if (Utilities.noString(parentType))
8535      t = parent;
8536    else {
8537      t = parent.predicate("fhir:"+parentType+'.'+name);
8538    }
8539    composeBackboneElement(t, "friendly", name, element, index);
8540    if (element.hasContent()) {
8541      composeType(t, "FriendlyLanguageComponent", "content", element.getContent(), -1);
8542    }
8543  }
8544
8545  protected void composeContractLegalLanguageComponent(Complex parent, String parentType, String name, Contract.LegalLanguageComponent 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:"+parentType+'.'+name);
8553    }
8554    composeBackboneElement(t, "legal", name, element, index);
8555    if (element.hasContent()) {
8556      composeType(t, "LegalLanguageComponent", "content", element.getContent(), -1);
8557    }
8558  }
8559
8560  protected void composeContractComputableLanguageComponent(Complex parent, String parentType, String name, Contract.ComputableLanguageComponent 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:"+parentType+'.'+name);
8568    }
8569    composeBackboneElement(t, "rule", name, element, index);
8570    if (element.hasContent()) {
8571      composeType(t, "ComputableLanguageComponent", "content", element.getContent(), -1);
8572    }
8573  }
8574
8575  protected void composeCoverage(Complex parent, String parentType, String name, Coverage element, int index) {
8576    if (element == null) 
8577      return;
8578    Complex t;
8579    if (Utilities.noString(parentType))
8580      t = parent;
8581    else {
8582      t = parent.predicate("fhir:"+parentType+'.'+name);
8583    }
8584    composeDomainResource(t, "Coverage", name, element, index);
8585    for (int i = 0; i < element.getIdentifier().size(); i++) {
8586      composeIdentifier(t, "Coverage", "identifier", element.getIdentifier().get(i), i);
8587    }
8588    if (element.hasStatusElement()) {
8589      composeEnum(t, "Coverage", "status", element.getStatusElement(), -1);
8590    }
8591    if (element.hasType()) {
8592      composeCodeableConcept(t, "Coverage", "type", element.getType(), -1);
8593    }
8594    if (element.hasPolicyHolder()) {
8595      composeReference(t, "Coverage", "policyHolder", element.getPolicyHolder(), -1);
8596    }
8597    if (element.hasSubscriber()) {
8598      composeReference(t, "Coverage", "subscriber", element.getSubscriber(), -1);
8599    }
8600    if (element.hasSubscriberId()) {
8601      composeIdentifier(t, "Coverage", "subscriberId", element.getSubscriberId(), -1);
8602    }
8603    if (element.hasBeneficiary()) {
8604      composeReference(t, "Coverage", "beneficiary", element.getBeneficiary(), -1);
8605    }
8606    if (element.hasDependentElement()) {
8607      composeString(t, "Coverage", "dependent", element.getDependentElement(), -1);
8608    }
8609    if (element.hasRelationship()) {
8610      composeCodeableConcept(t, "Coverage", "relationship", element.getRelationship(), -1);
8611    }
8612    if (element.hasPeriod()) {
8613      composePeriod(t, "Coverage", "period", element.getPeriod(), -1);
8614    }
8615    for (int i = 0; i < element.getPayor().size(); i++) {
8616      composeReference(t, "Coverage", "payor", element.getPayor().get(i), i);
8617    }
8618    for (int i = 0; i < element.getClass_().size(); i++) {
8619      composeCoverageClassComponent(t, "Coverage", "class", element.getClass_().get(i), i);
8620    }
8621    if (element.hasOrderElement()) {
8622      composePositiveInt(t, "Coverage", "order", element.getOrderElement(), -1);
8623    }
8624    if (element.hasNetworkElement()) {
8625      composeString(t, "Coverage", "network", element.getNetworkElement(), -1);
8626    }
8627    for (int i = 0; i < element.getCostToBeneficiary().size(); i++) {
8628      composeCoverageCostToBeneficiaryComponent(t, "Coverage", "costToBeneficiary", element.getCostToBeneficiary().get(i), i);
8629    }
8630    if (element.hasSubrogationElement()) {
8631      composeBoolean(t, "Coverage", "subrogation", element.getSubrogationElement(), -1);
8632    }
8633    for (int i = 0; i < element.getContract().size(); i++) {
8634      composeReference(t, "Coverage", "contract", element.getContract().get(i), i);
8635    }
8636  }
8637
8638  protected void composeCoverageClassComponent(Complex parent, String parentType, String name, Coverage.ClassComponent 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:"+parentType+'.'+name);
8646    }
8647    composeBackboneElement(t, "class", name, element, index);
8648    if (element.hasType()) {
8649      composeCodeableConcept(t, "ClassComponent", "type", element.getType(), -1);
8650    }
8651    if (element.hasValueElement()) {
8652      composeString(t, "ClassComponent", "value", element.getValueElement(), -1);
8653    }
8654    if (element.hasNameElement()) {
8655      composeString(t, "ClassComponent", "name", element.getNameElement(), -1);
8656    }
8657  }
8658
8659  protected void composeCoverageCostToBeneficiaryComponent(Complex parent, String parentType, String name, Coverage.CostToBeneficiaryComponent element, int index) {
8660    if (element == null) 
8661      return;
8662    Complex t;
8663    if (Utilities.noString(parentType))
8664      t = parent;
8665    else {
8666      t = parent.predicate("fhir:"+parentType+'.'+name);
8667    }
8668    composeBackboneElement(t, "costToBeneficiary", name, element, index);
8669    if (element.hasType()) {
8670      composeCodeableConcept(t, "CostToBeneficiaryComponent", "type", element.getType(), -1);
8671    }
8672    if (element.hasValue()) {
8673      composeType(t, "CostToBeneficiaryComponent", "value", element.getValue(), -1);
8674    }
8675    for (int i = 0; i < element.getException().size(); i++) {
8676      composeCoverageExemptionComponent(t, "CostToBeneficiaryComponent", "exception", element.getException().get(i), i);
8677    }
8678  }
8679
8680  protected void composeCoverageExemptionComponent(Complex parent, String parentType, String name, Coverage.ExemptionComponent element, int index) {
8681    if (element == null) 
8682      return;
8683    Complex t;
8684    if (Utilities.noString(parentType))
8685      t = parent;
8686    else {
8687      t = parent.predicate("fhir:"+parentType+'.'+name);
8688    }
8689    composeBackboneElement(t, "exception", name, element, index);
8690    if (element.hasType()) {
8691      composeCodeableConcept(t, "ExemptionComponent", "type", element.getType(), -1);
8692    }
8693    if (element.hasPeriod()) {
8694      composePeriod(t, "ExemptionComponent", "period", element.getPeriod(), -1);
8695    }
8696  }
8697
8698  protected void composeCoverageEligibilityRequest(Complex parent, String parentType, String name, CoverageEligibilityRequest element, int index) {
8699    if (element == null) 
8700      return;
8701    Complex t;
8702    if (Utilities.noString(parentType))
8703      t = parent;
8704    else {
8705      t = parent.predicate("fhir:"+parentType+'.'+name);
8706    }
8707    composeDomainResource(t, "CoverageEligibilityRequest", name, element, index);
8708    for (int i = 0; i < element.getIdentifier().size(); i++) {
8709      composeIdentifier(t, "CoverageEligibilityRequest", "identifier", element.getIdentifier().get(i), i);
8710    }
8711    if (element.hasStatusElement()) {
8712      composeEnum(t, "CoverageEligibilityRequest", "status", element.getStatusElement(), -1);
8713    }
8714    if (element.hasPriority()) {
8715      composeCodeableConcept(t, "CoverageEligibilityRequest", "priority", element.getPriority(), -1);
8716    }
8717    for (int i = 0; i < element.getPurpose().size(); i++) {
8718      composeEnum(t, "CoverageEligibilityRequest", "purpose", element.getPurpose().get(i), i);
8719    }
8720    if (element.hasPatient()) {
8721      composeReference(t, "CoverageEligibilityRequest", "patient", element.getPatient(), -1);
8722    }
8723    if (element.hasServiced()) {
8724      composeType(t, "CoverageEligibilityRequest", "serviced", element.getServiced(), -1);
8725    }
8726    if (element.hasCreatedElement()) {
8727      composeDateTime(t, "CoverageEligibilityRequest", "created", element.getCreatedElement(), -1);
8728    }
8729    if (element.hasEnterer()) {
8730      composeReference(t, "CoverageEligibilityRequest", "enterer", element.getEnterer(), -1);
8731    }
8732    if (element.hasProvider()) {
8733      composeReference(t, "CoverageEligibilityRequest", "provider", element.getProvider(), -1);
8734    }
8735    if (element.hasInsurer()) {
8736      composeReference(t, "CoverageEligibilityRequest", "insurer", element.getInsurer(), -1);
8737    }
8738    if (element.hasFacility()) {
8739      composeReference(t, "CoverageEligibilityRequest", "facility", element.getFacility(), -1);
8740    }
8741    for (int i = 0; i < element.getSupportingInfo().size(); i++) {
8742      composeCoverageEligibilityRequestSupportingInformationComponent(t, "CoverageEligibilityRequest", "supportingInfo", element.getSupportingInfo().get(i), i);
8743    }
8744    for (int i = 0; i < element.getInsurance().size(); i++) {
8745      composeCoverageEligibilityRequestInsuranceComponent(t, "CoverageEligibilityRequest", "insurance", element.getInsurance().get(i), i);
8746    }
8747    for (int i = 0; i < element.getItem().size(); i++) {
8748      composeCoverageEligibilityRequestDetailsComponent(t, "CoverageEligibilityRequest", "item", element.getItem().get(i), i);
8749    }
8750  }
8751
8752  protected void composeCoverageEligibilityRequestSupportingInformationComponent(Complex parent, String parentType, String name, CoverageEligibilityRequest.SupportingInformationComponent element, int index) {
8753    if (element == null) 
8754      return;
8755    Complex t;
8756    if (Utilities.noString(parentType))
8757      t = parent;
8758    else {
8759      t = parent.predicate("fhir:"+parentType+'.'+name);
8760    }
8761    composeBackboneElement(t, "supportingInfo", name, element, index);
8762    if (element.hasSequenceElement()) {
8763      composePositiveInt(t, "SupportingInformationComponent", "sequence", element.getSequenceElement(), -1);
8764    }
8765    if (element.hasInformation()) {
8766      composeReference(t, "SupportingInformationComponent", "information", element.getInformation(), -1);
8767    }
8768    if (element.hasAppliesToAllElement()) {
8769      composeBoolean(t, "SupportingInformationComponent", "appliesToAll", element.getAppliesToAllElement(), -1);
8770    }
8771  }
8772
8773  protected void composeCoverageEligibilityRequestInsuranceComponent(Complex parent, String parentType, String name, CoverageEligibilityRequest.InsuranceComponent element, int index) {
8774    if (element == null) 
8775      return;
8776    Complex t;
8777    if (Utilities.noString(parentType))
8778      t = parent;
8779    else {
8780      t = parent.predicate("fhir:"+parentType+'.'+name);
8781    }
8782    composeBackboneElement(t, "insurance", name, element, index);
8783    if (element.hasFocalElement()) {
8784      composeBoolean(t, "InsuranceComponent", "focal", element.getFocalElement(), -1);
8785    }
8786    if (element.hasCoverage()) {
8787      composeReference(t, "InsuranceComponent", "coverage", element.getCoverage(), -1);
8788    }
8789    if (element.hasBusinessArrangementElement()) {
8790      composeString(t, "InsuranceComponent", "businessArrangement", element.getBusinessArrangementElement(), -1);
8791    }
8792  }
8793
8794  protected void composeCoverageEligibilityRequestDetailsComponent(Complex parent, String parentType, String name, CoverageEligibilityRequest.DetailsComponent element, int index) {
8795    if (element == null) 
8796      return;
8797    Complex t;
8798    if (Utilities.noString(parentType))
8799      t = parent;
8800    else {
8801      t = parent.predicate("fhir:"+parentType+'.'+name);
8802    }
8803    composeBackboneElement(t, "item", name, element, index);
8804    for (int i = 0; i < element.getSupportingInfoSequence().size(); i++) {
8805      composePositiveInt(t, "DetailsComponent", "supportingInfoSequence", element.getSupportingInfoSequence().get(i), i);
8806    }
8807    if (element.hasCategory()) {
8808      composeCodeableConcept(t, "DetailsComponent", "category", element.getCategory(), -1);
8809    }
8810    if (element.hasProductOrService()) {
8811      composeCodeableConcept(t, "DetailsComponent", "productOrService", element.getProductOrService(), -1);
8812    }
8813    for (int i = 0; i < element.getModifier().size(); i++) {
8814      composeCodeableConcept(t, "DetailsComponent", "modifier", element.getModifier().get(i), i);
8815    }
8816    if (element.hasProvider()) {
8817      composeReference(t, "DetailsComponent", "provider", element.getProvider(), -1);
8818    }
8819    if (element.hasQuantity()) {
8820      composeQuantity(t, "DetailsComponent", "quantity", element.getQuantity(), -1);
8821    }
8822    if (element.hasUnitPrice()) {
8823      composeMoney(t, "DetailsComponent", "unitPrice", element.getUnitPrice(), -1);
8824    }
8825    if (element.hasFacility()) {
8826      composeReference(t, "DetailsComponent", "facility", element.getFacility(), -1);
8827    }
8828    for (int i = 0; i < element.getDiagnosis().size(); i++) {
8829      composeCoverageEligibilityRequestDiagnosisComponent(t, "DetailsComponent", "diagnosis", element.getDiagnosis().get(i), i);
8830    }
8831    for (int i = 0; i < element.getDetail().size(); i++) {
8832      composeReference(t, "DetailsComponent", "detail", element.getDetail().get(i), i);
8833    }
8834  }
8835
8836  protected void composeCoverageEligibilityRequestDiagnosisComponent(Complex parent, String parentType, String name, CoverageEligibilityRequest.DiagnosisComponent element, int index) {
8837    if (element == null) 
8838      return;
8839    Complex t;
8840    if (Utilities.noString(parentType))
8841      t = parent;
8842    else {
8843      t = parent.predicate("fhir:"+parentType+'.'+name);
8844    }
8845    composeBackboneElement(t, "diagnosis", name, element, index);
8846    if (element.hasDiagnosis()) {
8847      composeType(t, "DiagnosisComponent", "diagnosis", element.getDiagnosis(), -1);
8848    }
8849  }
8850
8851  protected void composeCoverageEligibilityResponse(Complex parent, String parentType, String name, CoverageEligibilityResponse element, int index) {
8852    if (element == null) 
8853      return;
8854    Complex t;
8855    if (Utilities.noString(parentType))
8856      t = parent;
8857    else {
8858      t = parent.predicate("fhir:"+parentType+'.'+name);
8859    }
8860    composeDomainResource(t, "CoverageEligibilityResponse", name, element, index);
8861    for (int i = 0; i < element.getIdentifier().size(); i++) {
8862      composeIdentifier(t, "CoverageEligibilityResponse", "identifier", element.getIdentifier().get(i), i);
8863    }
8864    if (element.hasStatusElement()) {
8865      composeEnum(t, "CoverageEligibilityResponse", "status", element.getStatusElement(), -1);
8866    }
8867    for (int i = 0; i < element.getPurpose().size(); i++) {
8868      composeEnum(t, "CoverageEligibilityResponse", "purpose", element.getPurpose().get(i), i);
8869    }
8870    if (element.hasPatient()) {
8871      composeReference(t, "CoverageEligibilityResponse", "patient", element.getPatient(), -1);
8872    }
8873    if (element.hasServiced()) {
8874      composeType(t, "CoverageEligibilityResponse", "serviced", element.getServiced(), -1);
8875    }
8876    if (element.hasCreatedElement()) {
8877      composeDateTime(t, "CoverageEligibilityResponse", "created", element.getCreatedElement(), -1);
8878    }
8879    if (element.hasRequestor()) {
8880      composeReference(t, "CoverageEligibilityResponse", "requestor", element.getRequestor(), -1);
8881    }
8882    if (element.hasRequest()) {
8883      composeReference(t, "CoverageEligibilityResponse", "request", element.getRequest(), -1);
8884    }
8885    if (element.hasOutcomeElement()) {
8886      composeEnum(t, "CoverageEligibilityResponse", "outcome", element.getOutcomeElement(), -1);
8887    }
8888    if (element.hasDispositionElement()) {
8889      composeString(t, "CoverageEligibilityResponse", "disposition", element.getDispositionElement(), -1);
8890    }
8891    if (element.hasInsurer()) {
8892      composeReference(t, "CoverageEligibilityResponse", "insurer", element.getInsurer(), -1);
8893    }
8894    for (int i = 0; i < element.getInsurance().size(); i++) {
8895      composeCoverageEligibilityResponseInsuranceComponent(t, "CoverageEligibilityResponse", "insurance", element.getInsurance().get(i), i);
8896    }
8897    if (element.hasPreAuthRefElement()) {
8898      composeString(t, "CoverageEligibilityResponse", "preAuthRef", element.getPreAuthRefElement(), -1);
8899    }
8900    if (element.hasForm()) {
8901      composeCodeableConcept(t, "CoverageEligibilityResponse", "form", element.getForm(), -1);
8902    }
8903    for (int i = 0; i < element.getError().size(); i++) {
8904      composeCoverageEligibilityResponseErrorsComponent(t, "CoverageEligibilityResponse", "error", element.getError().get(i), i);
8905    }
8906  }
8907
8908  protected void composeCoverageEligibilityResponseInsuranceComponent(Complex parent, String parentType, String name, CoverageEligibilityResponse.InsuranceComponent element, int index) {
8909    if (element == null) 
8910      return;
8911    Complex t;
8912    if (Utilities.noString(parentType))
8913      t = parent;
8914    else {
8915      t = parent.predicate("fhir:"+parentType+'.'+name);
8916    }
8917    composeBackboneElement(t, "insurance", name, element, index);
8918    if (element.hasCoverage()) {
8919      composeReference(t, "InsuranceComponent", "coverage", element.getCoverage(), -1);
8920    }
8921    if (element.hasInforceElement()) {
8922      composeBoolean(t, "InsuranceComponent", "inforce", element.getInforceElement(), -1);
8923    }
8924    if (element.hasBenefitPeriod()) {
8925      composePeriod(t, "InsuranceComponent", "benefitPeriod", element.getBenefitPeriod(), -1);
8926    }
8927    for (int i = 0; i < element.getItem().size(); i++) {
8928      composeCoverageEligibilityResponseItemsComponent(t, "InsuranceComponent", "item", element.getItem().get(i), i);
8929    }
8930  }
8931
8932  protected void composeCoverageEligibilityResponseItemsComponent(Complex parent, String parentType, String name, CoverageEligibilityResponse.ItemsComponent element, int index) {
8933    if (element == null) 
8934      return;
8935    Complex t;
8936    if (Utilities.noString(parentType))
8937      t = parent;
8938    else {
8939      t = parent.predicate("fhir:"+parentType+'.'+name);
8940    }
8941    composeBackboneElement(t, "item", name, element, index);
8942    if (element.hasCategory()) {
8943      composeCodeableConcept(t, "ItemsComponent", "category", element.getCategory(), -1);
8944    }
8945    if (element.hasProductOrService()) {
8946      composeCodeableConcept(t, "ItemsComponent", "productOrService", element.getProductOrService(), -1);
8947    }
8948    for (int i = 0; i < element.getModifier().size(); i++) {
8949      composeCodeableConcept(t, "ItemsComponent", "modifier", element.getModifier().get(i), i);
8950    }
8951    if (element.hasProvider()) {
8952      composeReference(t, "ItemsComponent", "provider", element.getProvider(), -1);
8953    }
8954    if (element.hasExcludedElement()) {
8955      composeBoolean(t, "ItemsComponent", "excluded", element.getExcludedElement(), -1);
8956    }
8957    if (element.hasNameElement()) {
8958      composeString(t, "ItemsComponent", "name", element.getNameElement(), -1);
8959    }
8960    if (element.hasDescriptionElement()) {
8961      composeString(t, "ItemsComponent", "description", element.getDescriptionElement(), -1);
8962    }
8963    if (element.hasNetwork()) {
8964      composeCodeableConcept(t, "ItemsComponent", "network", element.getNetwork(), -1);
8965    }
8966    if (element.hasUnit()) {
8967      composeCodeableConcept(t, "ItemsComponent", "unit", element.getUnit(), -1);
8968    }
8969    if (element.hasTerm()) {
8970      composeCodeableConcept(t, "ItemsComponent", "term", element.getTerm(), -1);
8971    }
8972    for (int i = 0; i < element.getBenefit().size(); i++) {
8973      composeCoverageEligibilityResponseBenefitComponent(t, "ItemsComponent", "benefit", element.getBenefit().get(i), i);
8974    }
8975    if (element.hasAuthorizationRequiredElement()) {
8976      composeBoolean(t, "ItemsComponent", "authorizationRequired", element.getAuthorizationRequiredElement(), -1);
8977    }
8978    for (int i = 0; i < element.getAuthorizationSupporting().size(); i++) {
8979      composeCodeableConcept(t, "ItemsComponent", "authorizationSupporting", element.getAuthorizationSupporting().get(i), i);
8980    }
8981    if (element.hasAuthorizationUrlElement()) {
8982      composeUri(t, "ItemsComponent", "authorizationUrl", element.getAuthorizationUrlElement(), -1);
8983    }
8984  }
8985
8986  protected void composeCoverageEligibilityResponseBenefitComponent(Complex parent, String parentType, String name, CoverageEligibilityResponse.BenefitComponent element, int index) {
8987    if (element == null) 
8988      return;
8989    Complex t;
8990    if (Utilities.noString(parentType))
8991      t = parent;
8992    else {
8993      t = parent.predicate("fhir:"+parentType+'.'+name);
8994    }
8995    composeBackboneElement(t, "benefit", name, element, index);
8996    if (element.hasType()) {
8997      composeCodeableConcept(t, "BenefitComponent", "type", element.getType(), -1);
8998    }
8999    if (element.hasAllowed()) {
9000      composeType(t, "BenefitComponent", "allowed", element.getAllowed(), -1);
9001    }
9002    if (element.hasUsed()) {
9003      composeType(t, "BenefitComponent", "used", element.getUsed(), -1);
9004    }
9005  }
9006
9007  protected void composeCoverageEligibilityResponseErrorsComponent(Complex parent, String parentType, String name, CoverageEligibilityResponse.ErrorsComponent 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:"+parentType+'.'+name);
9015    }
9016    composeBackboneElement(t, "error", name, element, index);
9017    if (element.hasCode()) {
9018      composeCodeableConcept(t, "ErrorsComponent", "code", element.getCode(), -1);
9019    }
9020  }
9021
9022  protected void composeDetectedIssue(Complex parent, String parentType, String name, DetectedIssue element, int index) {
9023    if (element == null) 
9024      return;
9025    Complex t;
9026    if (Utilities.noString(parentType))
9027      t = parent;
9028    else {
9029      t = parent.predicate("fhir:"+parentType+'.'+name);
9030    }
9031    composeDomainResource(t, "DetectedIssue", name, element, index);
9032    for (int i = 0; i < element.getIdentifier().size(); i++) {
9033      composeIdentifier(t, "DetectedIssue", "identifier", element.getIdentifier().get(i), i);
9034    }
9035    if (element.hasStatusElement()) {
9036      composeEnum(t, "DetectedIssue", "status", element.getStatusElement(), -1);
9037    }
9038    if (element.hasCode()) {
9039      composeCodeableConcept(t, "DetectedIssue", "code", element.getCode(), -1);
9040    }
9041    if (element.hasSeverityElement()) {
9042      composeEnum(t, "DetectedIssue", "severity", element.getSeverityElement(), -1);
9043    }
9044    if (element.hasPatient()) {
9045      composeReference(t, "DetectedIssue", "patient", element.getPatient(), -1);
9046    }
9047    if (element.hasIdentified()) {
9048      composeType(t, "DetectedIssue", "identified", element.getIdentified(), -1);
9049    }
9050    if (element.hasAuthor()) {
9051      composeReference(t, "DetectedIssue", "author", element.getAuthor(), -1);
9052    }
9053    for (int i = 0; i < element.getImplicated().size(); i++) {
9054      composeReference(t, "DetectedIssue", "implicated", element.getImplicated().get(i), i);
9055    }
9056    for (int i = 0; i < element.getEvidence().size(); i++) {
9057      composeDetectedIssueEvidenceComponent(t, "DetectedIssue", "evidence", element.getEvidence().get(i), i);
9058    }
9059    if (element.hasDetailElement()) {
9060      composeString(t, "DetectedIssue", "detail", element.getDetailElement(), -1);
9061    }
9062    if (element.hasReferenceElement()) {
9063      composeUri(t, "DetectedIssue", "reference", element.getReferenceElement(), -1);
9064    }
9065    for (int i = 0; i < element.getMitigation().size(); i++) {
9066      composeDetectedIssueMitigationComponent(t, "DetectedIssue", "mitigation", element.getMitigation().get(i), i);
9067    }
9068  }
9069
9070  protected void composeDetectedIssueEvidenceComponent(Complex parent, String parentType, String name, DetectedIssue.DetectedIssueEvidenceComponent element, int index) {
9071    if (element == null) 
9072      return;
9073    Complex t;
9074    if (Utilities.noString(parentType))
9075      t = parent;
9076    else {
9077      t = parent.predicate("fhir:"+parentType+'.'+name);
9078    }
9079    composeBackboneElement(t, "evidence", name, element, index);
9080    for (int i = 0; i < element.getCode().size(); i++) {
9081      composeCodeableConcept(t, "DetectedIssueEvidenceComponent", "code", element.getCode().get(i), i);
9082    }
9083    for (int i = 0; i < element.getDetail().size(); i++) {
9084      composeReference(t, "DetectedIssueEvidenceComponent", "detail", element.getDetail().get(i), i);
9085    }
9086  }
9087
9088  protected void composeDetectedIssueMitigationComponent(Complex parent, String parentType, String name, DetectedIssue.DetectedIssueMitigationComponent element, int index) {
9089    if (element == null) 
9090      return;
9091    Complex t;
9092    if (Utilities.noString(parentType))
9093      t = parent;
9094    else {
9095      t = parent.predicate("fhir:"+parentType+'.'+name);
9096    }
9097    composeBackboneElement(t, "mitigation", name, element, index);
9098    if (element.hasAction()) {
9099      composeCodeableConcept(t, "DetectedIssueMitigationComponent", "action", element.getAction(), -1);
9100    }
9101    if (element.hasDateElement()) {
9102      composeDateTime(t, "DetectedIssueMitigationComponent", "date", element.getDateElement(), -1);
9103    }
9104    if (element.hasAuthor()) {
9105      composeReference(t, "DetectedIssueMitigationComponent", "author", element.getAuthor(), -1);
9106    }
9107  }
9108
9109  protected void composeDevice(Complex parent, String parentType, String name, Device element, int index) {
9110    if (element == null) 
9111      return;
9112    Complex t;
9113    if (Utilities.noString(parentType))
9114      t = parent;
9115    else {
9116      t = parent.predicate("fhir:"+parentType+'.'+name);
9117    }
9118    composeDomainResource(t, "Device", name, element, index);
9119    for (int i = 0; i < element.getIdentifier().size(); i++) {
9120      composeIdentifier(t, "Device", "identifier", element.getIdentifier().get(i), i);
9121    }
9122    if (element.hasDisplayNameElement()) {
9123      composeString(t, "Device", "displayName", element.getDisplayNameElement(), -1);
9124    }
9125    if (element.hasDefinition()) {
9126      composeCodeableReference(t, "Device", "definition", element.getDefinition(), -1);
9127    }
9128    for (int i = 0; i < element.getUdiCarrier().size(); i++) {
9129      composeDeviceUdiCarrierComponent(t, "Device", "udiCarrier", element.getUdiCarrier().get(i), i);
9130    }
9131    if (element.hasStatusElement()) {
9132      composeEnum(t, "Device", "status", element.getStatusElement(), -1);
9133    }
9134    for (int i = 0; i < element.getStatusReason().size(); i++) {
9135      composeCodeableConcept(t, "Device", "statusReason", element.getStatusReason().get(i), i);
9136    }
9137    if (element.hasBiologicalSource()) {
9138      composeIdentifier(t, "Device", "biologicalSource", element.getBiologicalSource(), -1);
9139    }
9140    if (element.hasManufacturerElement()) {
9141      composeString(t, "Device", "manufacturer", element.getManufacturerElement(), -1);
9142    }
9143    if (element.hasManufactureDateElement()) {
9144      composeDateTime(t, "Device", "manufactureDate", element.getManufactureDateElement(), -1);
9145    }
9146    if (element.hasExpirationDateElement()) {
9147      composeDateTime(t, "Device", "expirationDate", element.getExpirationDateElement(), -1);
9148    }
9149    if (element.hasLotNumberElement()) {
9150      composeString(t, "Device", "lotNumber", element.getLotNumberElement(), -1);
9151    }
9152    if (element.hasSerialNumberElement()) {
9153      composeString(t, "Device", "serialNumber", element.getSerialNumberElement(), -1);
9154    }
9155    for (int i = 0; i < element.getDeviceName().size(); i++) {
9156      composeDeviceDeviceNameComponent(t, "Device", "deviceName", element.getDeviceName().get(i), i);
9157    }
9158    if (element.hasModelNumberElement()) {
9159      composeString(t, "Device", "modelNumber", element.getModelNumberElement(), -1);
9160    }
9161    if (element.hasPartNumberElement()) {
9162      composeString(t, "Device", "partNumber", element.getPartNumberElement(), -1);
9163    }
9164    for (int i = 0; i < element.getType().size(); i++) {
9165      composeCodeableConcept(t, "Device", "type", element.getType().get(i), i);
9166    }
9167    for (int i = 0; i < element.getVersion().size(); i++) {
9168      composeDeviceVersionComponent(t, "Device", "version", element.getVersion().get(i), i);
9169    }
9170    for (int i = 0; i < element.getProperty().size(); i++) {
9171      composeDevicePropertyComponent(t, "Device", "property", element.getProperty().get(i), i);
9172    }
9173    if (element.hasSubject()) {
9174      composeReference(t, "Device", "subject", element.getSubject(), -1);
9175    }
9176    if (element.hasOperationalStatus()) {
9177      composeDeviceOperationalStatusComponent(t, "Device", "operationalStatus", element.getOperationalStatus(), -1);
9178    }
9179    if (element.hasAssociationStatus()) {
9180      composeDeviceAssociationStatusComponent(t, "Device", "associationStatus", element.getAssociationStatus(), -1);
9181    }
9182    if (element.hasOwner()) {
9183      composeReference(t, "Device", "owner", element.getOwner(), -1);
9184    }
9185    for (int i = 0; i < element.getContact().size(); i++) {
9186      composeContactPoint(t, "Device", "contact", element.getContact().get(i), i);
9187    }
9188    if (element.hasLocation()) {
9189      composeReference(t, "Device", "location", element.getLocation(), -1);
9190    }
9191    if (element.hasUrlElement()) {
9192      composeUri(t, "Device", "url", element.getUrlElement(), -1);
9193    }
9194    for (int i = 0; i < element.getEndpoint().size(); i++) {
9195      composeReference(t, "Device", "endpoint", element.getEndpoint().get(i), i);
9196    }
9197    for (int i = 0; i < element.getLink().size(); i++) {
9198      composeDeviceLinkComponent(t, "Device", "link", element.getLink().get(i), i);
9199    }
9200    for (int i = 0; i < element.getNote().size(); i++) {
9201      composeAnnotation(t, "Device", "note", element.getNote().get(i), i);
9202    }
9203    for (int i = 0; i < element.getSafety().size(); i++) {
9204      composeCodeableConcept(t, "Device", "safety", element.getSafety().get(i), i);
9205    }
9206    if (element.hasParent()) {
9207      composeReference(t, "Device", "parent", element.getParent(), -1);
9208    }
9209  }
9210
9211  protected void composeDeviceUdiCarrierComponent(Complex parent, String parentType, String name, Device.DeviceUdiCarrierComponent element, int index) {
9212    if (element == null) 
9213      return;
9214    Complex t;
9215    if (Utilities.noString(parentType))
9216      t = parent;
9217    else {
9218      t = parent.predicate("fhir:"+parentType+'.'+name);
9219    }
9220    composeBackboneElement(t, "udiCarrier", name, element, index);
9221    if (element.hasDeviceIdentifierElement()) {
9222      composeString(t, "DeviceUdiCarrierComponent", "deviceIdentifier", element.getDeviceIdentifierElement(), -1);
9223    }
9224    if (element.hasIssuerElement()) {
9225      composeUri(t, "DeviceUdiCarrierComponent", "issuer", element.getIssuerElement(), -1);
9226    }
9227    if (element.hasJurisdictionElement()) {
9228      composeUri(t, "DeviceUdiCarrierComponent", "jurisdiction", element.getJurisdictionElement(), -1);
9229    }
9230    if (element.hasCarrierAIDCElement()) {
9231      composeBase64Binary(t, "DeviceUdiCarrierComponent", "carrierAIDC", element.getCarrierAIDCElement(), -1);
9232    }
9233    if (element.hasCarrierHRFElement()) {
9234      composeString(t, "DeviceUdiCarrierComponent", "carrierHRF", element.getCarrierHRFElement(), -1);
9235    }
9236    if (element.hasEntryTypeElement()) {
9237      composeEnum(t, "DeviceUdiCarrierComponent", "entryType", element.getEntryTypeElement(), -1);
9238    }
9239  }
9240
9241  protected void composeDeviceDeviceNameComponent(Complex parent, String parentType, String name, Device.DeviceDeviceNameComponent 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:"+parentType+'.'+name);
9249    }
9250    composeBackboneElement(t, "deviceName", name, element, index);
9251    if (element.hasNameElement()) {
9252      composeString(t, "DeviceDeviceNameComponent", "name", element.getNameElement(), -1);
9253    }
9254    if (element.hasTypeElement()) {
9255      composeEnum(t, "DeviceDeviceNameComponent", "type", element.getTypeElement(), -1);
9256    }
9257  }
9258
9259  protected void composeDeviceVersionComponent(Complex parent, String parentType, String name, Device.DeviceVersionComponent 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:"+parentType+'.'+name);
9267    }
9268    composeBackboneElement(t, "version", name, element, index);
9269    if (element.hasType()) {
9270      composeCodeableConcept(t, "DeviceVersionComponent", "type", element.getType(), -1);
9271    }
9272    if (element.hasComponent()) {
9273      composeIdentifier(t, "DeviceVersionComponent", "component", element.getComponent(), -1);
9274    }
9275    if (element.hasValueElement()) {
9276      composeString(t, "DeviceVersionComponent", "value", element.getValueElement(), -1);
9277    }
9278  }
9279
9280  protected void composeDevicePropertyComponent(Complex parent, String parentType, String name, Device.DevicePropertyComponent element, int index) {
9281    if (element == null) 
9282      return;
9283    Complex t;
9284    if (Utilities.noString(parentType))
9285      t = parent;
9286    else {
9287      t = parent.predicate("fhir:"+parentType+'.'+name);
9288    }
9289    composeBackboneElement(t, "property", name, element, index);
9290    if (element.hasType()) {
9291      composeCodeableConcept(t, "DevicePropertyComponent", "type", element.getType(), -1);
9292    }
9293    if (element.hasValue()) {
9294      composeType(t, "DevicePropertyComponent", "value", element.getValue(), -1);
9295    }
9296  }
9297
9298  protected void composeDeviceOperationalStatusComponent(Complex parent, String parentType, String name, Device.DeviceOperationalStatusComponent element, int index) {
9299    if (element == null) 
9300      return;
9301    Complex t;
9302    if (Utilities.noString(parentType))
9303      t = parent;
9304    else {
9305      t = parent.predicate("fhir:"+parentType+'.'+name);
9306    }
9307    composeBackboneElement(t, "operationalStatus", name, element, index);
9308    if (element.hasValue()) {
9309      composeCodeableConcept(t, "DeviceOperationalStatusComponent", "value", element.getValue(), -1);
9310    }
9311    for (int i = 0; i < element.getReason().size(); i++) {
9312      composeCodeableConcept(t, "DeviceOperationalStatusComponent", "reason", element.getReason().get(i), i);
9313    }
9314  }
9315
9316  protected void composeDeviceAssociationStatusComponent(Complex parent, String parentType, String name, Device.DeviceAssociationStatusComponent element, int index) {
9317    if (element == null) 
9318      return;
9319    Complex t;
9320    if (Utilities.noString(parentType))
9321      t = parent;
9322    else {
9323      t = parent.predicate("fhir:"+parentType+'.'+name);
9324    }
9325    composeBackboneElement(t, "associationStatus", name, element, index);
9326    if (element.hasValue()) {
9327      composeCodeableConcept(t, "DeviceAssociationStatusComponent", "value", element.getValue(), -1);
9328    }
9329    for (int i = 0; i < element.getReason().size(); i++) {
9330      composeCodeableConcept(t, "DeviceAssociationStatusComponent", "reason", element.getReason().get(i), i);
9331    }
9332  }
9333
9334  protected void composeDeviceLinkComponent(Complex parent, String parentType, String name, Device.DeviceLinkComponent element, int index) {
9335    if (element == null) 
9336      return;
9337    Complex t;
9338    if (Utilities.noString(parentType))
9339      t = parent;
9340    else {
9341      t = parent.predicate("fhir:"+parentType+'.'+name);
9342    }
9343    composeBackboneElement(t, "link", name, element, index);
9344    if (element.hasRelation()) {
9345      composeCoding(t, "DeviceLinkComponent", "relation", element.getRelation(), -1);
9346    }
9347    if (element.hasRelatedDevice()) {
9348      composeCodeableReference(t, "DeviceLinkComponent", "relatedDevice", element.getRelatedDevice(), -1);
9349    }
9350  }
9351
9352  protected void composeDeviceDefinition(Complex parent, String parentType, String name, DeviceDefinition element, int index) {
9353    if (element == null) 
9354      return;
9355    Complex t;
9356    if (Utilities.noString(parentType))
9357      t = parent;
9358    else {
9359      t = parent.predicate("fhir:"+parentType+'.'+name);
9360    }
9361    composeDomainResource(t, "DeviceDefinition", name, element, index);
9362    if (element.hasDescriptionElement()) {
9363      composeMarkdown(t, "DeviceDefinition", "description", element.getDescriptionElement(), -1);
9364    }
9365    for (int i = 0; i < element.getIdentifier().size(); i++) {
9366      composeIdentifier(t, "DeviceDefinition", "identifier", element.getIdentifier().get(i), i);
9367    }
9368    for (int i = 0; i < element.getUdiDeviceIdentifier().size(); i++) {
9369      composeDeviceDefinitionUdiDeviceIdentifierComponent(t, "DeviceDefinition", "udiDeviceIdentifier", element.getUdiDeviceIdentifier().get(i), i);
9370    }
9371    if (element.hasPartNumberElement()) {
9372      composeString(t, "DeviceDefinition", "partNumber", element.getPartNumberElement(), -1);
9373    }
9374    if (element.hasManufacturer()) {
9375      composeType(t, "DeviceDefinition", "manufacturer", element.getManufacturer(), -1);
9376    }
9377    for (int i = 0; i < element.getDeviceName().size(); i++) {
9378      composeDeviceDefinitionDeviceNameComponent(t, "DeviceDefinition", "deviceName", element.getDeviceName().get(i), i);
9379    }
9380    if (element.hasModelNumberElement()) {
9381      composeString(t, "DeviceDefinition", "modelNumber", element.getModelNumberElement(), -1);
9382    }
9383    for (int i = 0; i < element.getClassification().size(); i++) {
9384      composeDeviceDefinitionClassificationComponent(t, "DeviceDefinition", "classification", element.getClassification().get(i), i);
9385    }
9386    for (int i = 0; i < element.getSpecialization().size(); i++) {
9387      composeRelatedArtifact(t, "DeviceDefinition", "specialization", element.getSpecialization().get(i), i);
9388    }
9389    for (int i = 0; i < element.getHasPart().size(); i++) {
9390      composeDeviceDefinitionHasPartComponent(t, "DeviceDefinition", "hasPart", element.getHasPart().get(i), i);
9391    }
9392    for (int i = 0; i < element.getPackaging().size(); i++) {
9393      composeDeviceDefinitionPackagingComponent(t, "DeviceDefinition", "packaging", element.getPackaging().get(i), i);
9394    }
9395    for (int i = 0; i < element.getVersion().size(); i++) {
9396      composeDeviceDefinitionVersionComponent(t, "DeviceDefinition", "version", element.getVersion().get(i), i);
9397    }
9398    for (int i = 0; i < element.getSafety().size(); i++) {
9399      composeCodeableConcept(t, "DeviceDefinition", "safety", element.getSafety().get(i), i);
9400    }
9401    for (int i = 0; i < element.getShelfLifeStorage().size(); i++) {
9402      composeProductShelfLife(t, "DeviceDefinition", "shelfLifeStorage", element.getShelfLifeStorage().get(i), i);
9403    }
9404    for (int i = 0; i < element.getLanguageCode().size(); i++) {
9405      composeCodeableConcept(t, "DeviceDefinition", "languageCode", element.getLanguageCode().get(i), i);
9406    }
9407    for (int i = 0; i < element.getProperty().size(); i++) {
9408      composeDeviceDefinitionPropertyComponent(t, "DeviceDefinition", "property", element.getProperty().get(i), i);
9409    }
9410    if (element.hasOwner()) {
9411      composeReference(t, "DeviceDefinition", "owner", element.getOwner(), -1);
9412    }
9413    for (int i = 0; i < element.getContact().size(); i++) {
9414      composeContactPoint(t, "DeviceDefinition", "contact", element.getContact().get(i), i);
9415    }
9416    for (int i = 0; i < element.getLink().size(); i++) {
9417      composeDeviceDefinitionLinkComponent(t, "DeviceDefinition", "link", element.getLink().get(i), i);
9418    }
9419    for (int i = 0; i < element.getNote().size(); i++) {
9420      composeAnnotation(t, "DeviceDefinition", "note", element.getNote().get(i), i);
9421    }
9422    if (element.hasParentDevice()) {
9423      composeReference(t, "DeviceDefinition", "parentDevice", element.getParentDevice(), -1);
9424    }
9425    for (int i = 0; i < element.getMaterial().size(); i++) {
9426      composeDeviceDefinitionMaterialComponent(t, "DeviceDefinition", "material", element.getMaterial().get(i), i);
9427    }
9428    for (int i = 0; i < element.getProductionIdentifierInUDI().size(); i++) {
9429      composeEnum(t, "DeviceDefinition", "productionIdentifierInUDI", element.getProductionIdentifierInUDI().get(i), i);
9430    }
9431    if (element.hasGuideline()) {
9432      composeDeviceDefinitionGuidelineComponent(t, "DeviceDefinition", "guideline", element.getGuideline(), -1);
9433    }
9434    if (element.hasCorrectiveAction()) {
9435      composeDeviceDefinitionCorrectiveActionComponent(t, "DeviceDefinition", "correctiveAction", element.getCorrectiveAction(), -1);
9436    }
9437    for (int i = 0; i < element.getChargeItem().size(); i++) {
9438      composeDeviceDefinitionChargeItemComponent(t, "DeviceDefinition", "chargeItem", element.getChargeItem().get(i), i);
9439    }
9440  }
9441
9442  protected void composeDeviceDefinitionUdiDeviceIdentifierComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionUdiDeviceIdentifierComponent element, int index) {
9443    if (element == null) 
9444      return;
9445    Complex t;
9446    if (Utilities.noString(parentType))
9447      t = parent;
9448    else {
9449      t = parent.predicate("fhir:"+parentType+'.'+name);
9450    }
9451    composeBackboneElement(t, "udiDeviceIdentifier", name, element, index);
9452    if (element.hasDeviceIdentifierElement()) {
9453      composeString(t, "DeviceDefinitionUdiDeviceIdentifierComponent", "deviceIdentifier", element.getDeviceIdentifierElement(), -1);
9454    }
9455    if (element.hasIssuerElement()) {
9456      composeUri(t, "DeviceDefinitionUdiDeviceIdentifierComponent", "issuer", element.getIssuerElement(), -1);
9457    }
9458    if (element.hasJurisdictionElement()) {
9459      composeUri(t, "DeviceDefinitionUdiDeviceIdentifierComponent", "jurisdiction", element.getJurisdictionElement(), -1);
9460    }
9461    for (int i = 0; i < element.getMarketDistribution().size(); i++) {
9462      composeDeviceDefinitionUdiDeviceIdentifierMarketDistributionComponent(t, "DeviceDefinitionUdiDeviceIdentifierComponent", "marketDistribution", element.getMarketDistribution().get(i), i);
9463    }
9464  }
9465
9466  protected void composeDeviceDefinitionUdiDeviceIdentifierMarketDistributionComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionUdiDeviceIdentifierMarketDistributionComponent element, int index) {
9467    if (element == null) 
9468      return;
9469    Complex t;
9470    if (Utilities.noString(parentType))
9471      t = parent;
9472    else {
9473      t = parent.predicate("fhir:"+parentType+'.'+name);
9474    }
9475    composeBackboneElement(t, "marketDistribution", name, element, index);
9476    if (element.hasMarketPeriod()) {
9477      composePeriod(t, "DeviceDefinitionUdiDeviceIdentifierMarketDistributionComponent", "marketPeriod", element.getMarketPeriod(), -1);
9478    }
9479    if (element.hasSubJurisdictionElement()) {
9480      composeUri(t, "DeviceDefinitionUdiDeviceIdentifierMarketDistributionComponent", "subJurisdiction", element.getSubJurisdictionElement(), -1);
9481    }
9482  }
9483
9484  protected void composeDeviceDefinitionDeviceNameComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionDeviceNameComponent element, int index) {
9485    if (element == null) 
9486      return;
9487    Complex t;
9488    if (Utilities.noString(parentType))
9489      t = parent;
9490    else {
9491      t = parent.predicate("fhir:"+parentType+'.'+name);
9492    }
9493    composeBackboneElement(t, "deviceName", name, element, index);
9494    if (element.hasNameElement()) {
9495      composeString(t, "DeviceDefinitionDeviceNameComponent", "name", element.getNameElement(), -1);
9496    }
9497    if (element.hasTypeElement()) {
9498      composeEnum(t, "DeviceDefinitionDeviceNameComponent", "type", element.getTypeElement(), -1);
9499    }
9500  }
9501
9502  protected void composeDeviceDefinitionClassificationComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionClassificationComponent element, int index) {
9503    if (element == null) 
9504      return;
9505    Complex t;
9506    if (Utilities.noString(parentType))
9507      t = parent;
9508    else {
9509      t = parent.predicate("fhir:"+parentType+'.'+name);
9510    }
9511    composeBackboneElement(t, "classification", name, element, index);
9512    if (element.hasType()) {
9513      composeCodeableConcept(t, "DeviceDefinitionClassificationComponent", "type", element.getType(), -1);
9514    }
9515    for (int i = 0; i < element.getJustification().size(); i++) {
9516      composeRelatedArtifact(t, "DeviceDefinitionClassificationComponent", "justification", element.getJustification().get(i), i);
9517    }
9518  }
9519
9520  protected void composeDeviceDefinitionHasPartComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionHasPartComponent element, int index) {
9521    if (element == null) 
9522      return;
9523    Complex t;
9524    if (Utilities.noString(parentType))
9525      t = parent;
9526    else {
9527      t = parent.predicate("fhir:"+parentType+'.'+name);
9528    }
9529    composeBackboneElement(t, "hasPart", name, element, index);
9530    if (element.hasReference()) {
9531      composeReference(t, "DeviceDefinitionHasPartComponent", "reference", element.getReference(), -1);
9532    }
9533    if (element.hasCountElement()) {
9534      composeInteger(t, "DeviceDefinitionHasPartComponent", "count", element.getCountElement(), -1);
9535    }
9536  }
9537
9538  protected void composeDeviceDefinitionPackagingComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionPackagingComponent element, int index) {
9539    if (element == null) 
9540      return;
9541    Complex t;
9542    if (Utilities.noString(parentType))
9543      t = parent;
9544    else {
9545      t = parent.predicate("fhir:"+parentType+'.'+name);
9546    }
9547    composeBackboneElement(t, "packaging", name, element, index);
9548    if (element.hasIdentifier()) {
9549      composeIdentifier(t, "DeviceDefinitionPackagingComponent", "identifier", element.getIdentifier(), -1);
9550    }
9551    if (element.hasType()) {
9552      composeCodeableConcept(t, "DeviceDefinitionPackagingComponent", "type", element.getType(), -1);
9553    }
9554    if (element.hasCountElement()) {
9555      composeInteger(t, "DeviceDefinitionPackagingComponent", "count", element.getCountElement(), -1);
9556    }
9557    for (int i = 0; i < element.getDistributor().size(); i++) {
9558      composeDeviceDefinitionPackagingDistributorComponent(t, "DeviceDefinitionPackagingComponent", "distributor", element.getDistributor().get(i), i);
9559    }
9560    for (int i = 0; i < element.getUdiDeviceIdentifier().size(); i++) {
9561      composeDeviceDefinitionPackagingUdiDeviceIdentifierComponent(t, "DeviceDefinitionPackagingComponent", "udiDeviceIdentifier", element.getUdiDeviceIdentifier().get(i), i);
9562    }
9563    for (int i = 0; i < element.getPackaging().size(); i++) {
9564      composeDeviceDefinitionPackagingComponent(t, "DeviceDefinitionPackagingComponent", "packaging", element.getPackaging().get(i), i);
9565    }
9566  }
9567
9568  protected void composeDeviceDefinitionPackagingDistributorComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionPackagingDistributorComponent element, int index) {
9569    if (element == null) 
9570      return;
9571    Complex t;
9572    if (Utilities.noString(parentType))
9573      t = parent;
9574    else {
9575      t = parent.predicate("fhir:"+parentType+'.'+name);
9576    }
9577    composeBackboneElement(t, "distributor", name, element, index);
9578    if (element.hasNameElement()) {
9579      composeString(t, "DeviceDefinitionPackagingDistributorComponent", "name", element.getNameElement(), -1);
9580    }
9581    for (int i = 0; i < element.getOrganizationReference().size(); i++) {
9582      composeReference(t, "DeviceDefinitionPackagingDistributorComponent", "organizationReference", element.getOrganizationReference().get(i), i);
9583    }
9584  }
9585
9586  protected void composeDeviceDefinitionPackagingUdiDeviceIdentifierComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionPackagingUdiDeviceIdentifierComponent element, int index) {
9587    if (element == null) 
9588      return;
9589    Complex t;
9590    if (Utilities.noString(parentType))
9591      t = parent;
9592    else {
9593      t = parent.predicate("fhir:"+parentType+'.'+name);
9594    }
9595    composeBackboneElement(t, "udiDeviceIdentifier", name, element, index);
9596    if (element.hasDeviceIdentifierElement()) {
9597      composeString(t, "DeviceDefinitionPackagingUdiDeviceIdentifierComponent", "deviceIdentifier", element.getDeviceIdentifierElement(), -1);
9598    }
9599    if (element.hasIssuerElement()) {
9600      composeUri(t, "DeviceDefinitionPackagingUdiDeviceIdentifierComponent", "issuer", element.getIssuerElement(), -1);
9601    }
9602    if (element.hasJurisdictionElement()) {
9603      composeUri(t, "DeviceDefinitionPackagingUdiDeviceIdentifierComponent", "jurisdiction", element.getJurisdictionElement(), -1);
9604    }
9605    if (element.hasMarketDistribution()) {
9606      composeDeviceDefinitionPackagingUdiDeviceIdentifierMarketDistributionComponent(t, "DeviceDefinitionPackagingUdiDeviceIdentifierComponent", "marketDistribution", element.getMarketDistribution(), -1);
9607    }
9608  }
9609
9610  protected void composeDeviceDefinitionPackagingUdiDeviceIdentifierMarketDistributionComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionPackagingUdiDeviceIdentifierMarketDistributionComponent 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:"+parentType+'.'+name);
9618    }
9619    composeBackboneElement(t, "marketDistribution", name, element, index);
9620    if (element.hasMarketPeriod()) {
9621      composePeriod(t, "DeviceDefinitionPackagingUdiDeviceIdentifierMarketDistributionComponent", "marketPeriod", element.getMarketPeriod(), -1);
9622    }
9623    if (element.hasSubJurisdictionElement()) {
9624      composeUri(t, "DeviceDefinitionPackagingUdiDeviceIdentifierMarketDistributionComponent", "subJurisdiction", element.getSubJurisdictionElement(), -1);
9625    }
9626  }
9627
9628  protected void composeDeviceDefinitionVersionComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionVersionComponent element, int index) {
9629    if (element == null) 
9630      return;
9631    Complex t;
9632    if (Utilities.noString(parentType))
9633      t = parent;
9634    else {
9635      t = parent.predicate("fhir:"+parentType+'.'+name);
9636    }
9637    composeBackboneElement(t, "version", name, element, index);
9638    if (element.hasType()) {
9639      composeCodeableConcept(t, "DeviceDefinitionVersionComponent", "type", element.getType(), -1);
9640    }
9641    if (element.hasComponent()) {
9642      composeIdentifier(t, "DeviceDefinitionVersionComponent", "component", element.getComponent(), -1);
9643    }
9644    if (element.hasValueElement()) {
9645      composeString(t, "DeviceDefinitionVersionComponent", "value", element.getValueElement(), -1);
9646    }
9647  }
9648
9649  protected void composeDeviceDefinitionPropertyComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionPropertyComponent element, int index) {
9650    if (element == null) 
9651      return;
9652    Complex t;
9653    if (Utilities.noString(parentType))
9654      t = parent;
9655    else {
9656      t = parent.predicate("fhir:"+parentType+'.'+name);
9657    }
9658    composeBackboneElement(t, "property", name, element, index);
9659    if (element.hasType()) {
9660      composeCodeableConcept(t, "DeviceDefinitionPropertyComponent", "type", element.getType(), -1);
9661    }
9662    if (element.hasValue()) {
9663      composeType(t, "DeviceDefinitionPropertyComponent", "value", element.getValue(), -1);
9664    }
9665  }
9666
9667  protected void composeDeviceDefinitionLinkComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionLinkComponent element, int index) {
9668    if (element == null) 
9669      return;
9670    Complex t;
9671    if (Utilities.noString(parentType))
9672      t = parent;
9673    else {
9674      t = parent.predicate("fhir:"+parentType+'.'+name);
9675    }
9676    composeBackboneElement(t, "link", name, element, index);
9677    if (element.hasRelation()) {
9678      composeCoding(t, "DeviceDefinitionLinkComponent", "relation", element.getRelation(), -1);
9679    }
9680    if (element.hasRelatedDevice()) {
9681      composeCodeableReference(t, "DeviceDefinitionLinkComponent", "relatedDevice", element.getRelatedDevice(), -1);
9682    }
9683  }
9684
9685  protected void composeDeviceDefinitionMaterialComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionMaterialComponent element, int index) {
9686    if (element == null) 
9687      return;
9688    Complex t;
9689    if (Utilities.noString(parentType))
9690      t = parent;
9691    else {
9692      t = parent.predicate("fhir:"+parentType+'.'+name);
9693    }
9694    composeBackboneElement(t, "material", name, element, index);
9695    if (element.hasSubstance()) {
9696      composeCodeableConcept(t, "DeviceDefinitionMaterialComponent", "substance", element.getSubstance(), -1);
9697    }
9698    if (element.hasAlternateElement()) {
9699      composeBoolean(t, "DeviceDefinitionMaterialComponent", "alternate", element.getAlternateElement(), -1);
9700    }
9701    if (element.hasAllergenicIndicatorElement()) {
9702      composeBoolean(t, "DeviceDefinitionMaterialComponent", "allergenicIndicator", element.getAllergenicIndicatorElement(), -1);
9703    }
9704  }
9705
9706  protected void composeDeviceDefinitionGuidelineComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionGuidelineComponent element, int index) {
9707    if (element == null) 
9708      return;
9709    Complex t;
9710    if (Utilities.noString(parentType))
9711      t = parent;
9712    else {
9713      t = parent.predicate("fhir:"+parentType+'.'+name);
9714    }
9715    composeBackboneElement(t, "guideline", name, element, index);
9716    for (int i = 0; i < element.getUseContext().size(); i++) {
9717      composeUsageContext(t, "DeviceDefinitionGuidelineComponent", "useContext", element.getUseContext().get(i), i);
9718    }
9719    if (element.hasUsageInstructionElement()) {
9720      composeMarkdown(t, "DeviceDefinitionGuidelineComponent", "usageInstruction", element.getUsageInstructionElement(), -1);
9721    }
9722    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
9723      composeRelatedArtifact(t, "DeviceDefinitionGuidelineComponent", "relatedArtifact", element.getRelatedArtifact().get(i), i);
9724    }
9725    for (int i = 0; i < element.getIndication().size(); i++) {
9726      composeCodeableReference(t, "DeviceDefinitionGuidelineComponent", "indication", element.getIndication().get(i), i);
9727    }
9728    for (int i = 0; i < element.getContraindication().size(); i++) {
9729      composeCodeableReference(t, "DeviceDefinitionGuidelineComponent", "contraindication", element.getContraindication().get(i), i);
9730    }
9731    for (int i = 0; i < element.getWarning().size(); i++) {
9732      composeCodeableReference(t, "DeviceDefinitionGuidelineComponent", "warning", element.getWarning().get(i), i);
9733    }
9734    if (element.hasIntendedUseElement()) {
9735      composeString(t, "DeviceDefinitionGuidelineComponent", "intendedUse", element.getIntendedUseElement(), -1);
9736    }
9737  }
9738
9739  protected void composeDeviceDefinitionCorrectiveActionComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionCorrectiveActionComponent element, int index) {
9740    if (element == null) 
9741      return;
9742    Complex t;
9743    if (Utilities.noString(parentType))
9744      t = parent;
9745    else {
9746      t = parent.predicate("fhir:"+parentType+'.'+name);
9747    }
9748    composeBackboneElement(t, "correctiveAction", name, element, index);
9749    if (element.hasRecallElement()) {
9750      composeBoolean(t, "DeviceDefinitionCorrectiveActionComponent", "recall", element.getRecallElement(), -1);
9751    }
9752    if (element.hasScopeElement()) {
9753      composeEnum(t, "DeviceDefinitionCorrectiveActionComponent", "scope", element.getScopeElement(), -1);
9754    }
9755    if (element.hasPeriod()) {
9756      composePeriod(t, "DeviceDefinitionCorrectiveActionComponent", "period", element.getPeriod(), -1);
9757    }
9758  }
9759
9760  protected void composeDeviceDefinitionChargeItemComponent(Complex parent, String parentType, String name, DeviceDefinition.DeviceDefinitionChargeItemComponent element, int index) {
9761    if (element == null) 
9762      return;
9763    Complex t;
9764    if (Utilities.noString(parentType))
9765      t = parent;
9766    else {
9767      t = parent.predicate("fhir:"+parentType+'.'+name);
9768    }
9769    composeBackboneElement(t, "chargeItem", name, element, index);
9770    if (element.hasChargeItemCode()) {
9771      composeCodeableReference(t, "DeviceDefinitionChargeItemComponent", "chargeItemCode", element.getChargeItemCode(), -1);
9772    }
9773    if (element.hasCount()) {
9774      composeQuantity(t, "DeviceDefinitionChargeItemComponent", "count", element.getCount(), -1);
9775    }
9776    if (element.hasEffectivePeriod()) {
9777      composePeriod(t, "DeviceDefinitionChargeItemComponent", "effectivePeriod", element.getEffectivePeriod(), -1);
9778    }
9779    for (int i = 0; i < element.getUseContext().size(); i++) {
9780      composeUsageContext(t, "DeviceDefinitionChargeItemComponent", "useContext", element.getUseContext().get(i), i);
9781    }
9782  }
9783
9784  protected void composeDeviceDispense(Complex parent, String parentType, String name, DeviceDispense element, int index) {
9785    if (element == null) 
9786      return;
9787    Complex t;
9788    if (Utilities.noString(parentType))
9789      t = parent;
9790    else {
9791      t = parent.predicate("fhir:"+parentType+'.'+name);
9792    }
9793    composeDomainResource(t, "DeviceDispense", name, element, index);
9794    for (int i = 0; i < element.getIdentifier().size(); i++) {
9795      composeIdentifier(t, "DeviceDispense", "identifier", element.getIdentifier().get(i), i);
9796    }
9797    for (int i = 0; i < element.getBasedOn().size(); i++) {
9798      composeReference(t, "DeviceDispense", "basedOn", element.getBasedOn().get(i), i);
9799    }
9800    for (int i = 0; i < element.getPartOf().size(); i++) {
9801      composeReference(t, "DeviceDispense", "partOf", element.getPartOf().get(i), i);
9802    }
9803    if (element.hasStatusElement()) {
9804      composeEnum(t, "DeviceDispense", "status", element.getStatusElement(), -1);
9805    }
9806    if (element.hasStatusReason()) {
9807      composeCodeableReference(t, "DeviceDispense", "statusReason", element.getStatusReason(), -1);
9808    }
9809    for (int i = 0; i < element.getCategory().size(); i++) {
9810      composeCodeableConcept(t, "DeviceDispense", "category", element.getCategory().get(i), i);
9811    }
9812    if (element.hasDevice()) {
9813      composeCodeableReference(t, "DeviceDispense", "device", element.getDevice(), -1);
9814    }
9815    if (element.hasSubject()) {
9816      composeReference(t, "DeviceDispense", "subject", element.getSubject(), -1);
9817    }
9818    if (element.hasEncounter()) {
9819      composeReference(t, "DeviceDispense", "encounter", element.getEncounter(), -1);
9820    }
9821    for (int i = 0; i < element.getSupportingInformation().size(); i++) {
9822      composeReference(t, "DeviceDispense", "supportingInformation", element.getSupportingInformation().get(i), i);
9823    }
9824    for (int i = 0; i < element.getPerformer().size(); i++) {
9825      composeDeviceDispensePerformerComponent(t, "DeviceDispense", "performer", element.getPerformer().get(i), i);
9826    }
9827    if (element.hasLocation()) {
9828      composeReference(t, "DeviceDispense", "location", element.getLocation(), -1);
9829    }
9830    if (element.hasType()) {
9831      composeCodeableConcept(t, "DeviceDispense", "type", element.getType(), -1);
9832    }
9833    if (element.hasQuantity()) {
9834      composeQuantity(t, "DeviceDispense", "quantity", element.getQuantity(), -1);
9835    }
9836    if (element.hasPreparedDateElement()) {
9837      composeDateTime(t, "DeviceDispense", "preparedDate", element.getPreparedDateElement(), -1);
9838    }
9839    if (element.hasWhenHandedOverElement()) {
9840      composeDateTime(t, "DeviceDispense", "whenHandedOver", element.getWhenHandedOverElement(), -1);
9841    }
9842    if (element.hasDestination()) {
9843      composeReference(t, "DeviceDispense", "destination", element.getDestination(), -1);
9844    }
9845    for (int i = 0; i < element.getNote().size(); i++) {
9846      composeAnnotation(t, "DeviceDispense", "note", element.getNote().get(i), i);
9847    }
9848    if (element.hasUsageInstructionElement()) {
9849      composeString(t, "DeviceDispense", "usageInstruction", element.getUsageInstructionElement(), -1);
9850    }
9851    for (int i = 0; i < element.getEventHistory().size(); i++) {
9852      composeReference(t, "DeviceDispense", "eventHistory", element.getEventHistory().get(i), i);
9853    }
9854  }
9855
9856  protected void composeDeviceDispensePerformerComponent(Complex parent, String parentType, String name, DeviceDispense.DeviceDispensePerformerComponent element, int index) {
9857    if (element == null) 
9858      return;
9859    Complex t;
9860    if (Utilities.noString(parentType))
9861      t = parent;
9862    else {
9863      t = parent.predicate("fhir:"+parentType+'.'+name);
9864    }
9865    composeBackboneElement(t, "performer", name, element, index);
9866    if (element.hasFunction()) {
9867      composeCodeableConcept(t, "DeviceDispensePerformerComponent", "function", element.getFunction(), -1);
9868    }
9869    if (element.hasActor()) {
9870      composeReference(t, "DeviceDispensePerformerComponent", "actor", element.getActor(), -1);
9871    }
9872  }
9873
9874  protected void composeDeviceMetric(Complex parent, String parentType, String name, DeviceMetric element, int index) {
9875    if (element == null) 
9876      return;
9877    Complex t;
9878    if (Utilities.noString(parentType))
9879      t = parent;
9880    else {
9881      t = parent.predicate("fhir:"+parentType+'.'+name);
9882    }
9883    composeDomainResource(t, "DeviceMetric", name, element, index);
9884    for (int i = 0; i < element.getIdentifier().size(); i++) {
9885      composeIdentifier(t, "DeviceMetric", "identifier", element.getIdentifier().get(i), i);
9886    }
9887    if (element.hasType()) {
9888      composeCodeableConcept(t, "DeviceMetric", "type", element.getType(), -1);
9889    }
9890    if (element.hasUnit()) {
9891      composeCodeableConcept(t, "DeviceMetric", "unit", element.getUnit(), -1);
9892    }
9893    if (element.hasSource()) {
9894      composeReference(t, "DeviceMetric", "source", element.getSource(), -1);
9895    }
9896    if (element.hasParent()) {
9897      composeReference(t, "DeviceMetric", "parent", element.getParent(), -1);
9898    }
9899    if (element.hasOperationalStatusElement()) {
9900      composeEnum(t, "DeviceMetric", "operationalStatus", element.getOperationalStatusElement(), -1);
9901    }
9902    if (element.hasColorElement()) {
9903      composeEnum(t, "DeviceMetric", "color", element.getColorElement(), -1);
9904    }
9905    if (element.hasCategoryElement()) {
9906      composeEnum(t, "DeviceMetric", "category", element.getCategoryElement(), -1);
9907    }
9908    if (element.hasMeasurementPeriod()) {
9909      composeTiming(t, "DeviceMetric", "measurementPeriod", element.getMeasurementPeriod(), -1);
9910    }
9911    for (int i = 0; i < element.getCalibration().size(); i++) {
9912      composeDeviceMetricCalibrationComponent(t, "DeviceMetric", "calibration", element.getCalibration().get(i), i);
9913    }
9914  }
9915
9916  protected void composeDeviceMetricCalibrationComponent(Complex parent, String parentType, String name, DeviceMetric.DeviceMetricCalibrationComponent element, int index) {
9917    if (element == null) 
9918      return;
9919    Complex t;
9920    if (Utilities.noString(parentType))
9921      t = parent;
9922    else {
9923      t = parent.predicate("fhir:"+parentType+'.'+name);
9924    }
9925    composeBackboneElement(t, "calibration", name, element, index);
9926    if (element.hasTypeElement()) {
9927      composeEnum(t, "DeviceMetricCalibrationComponent", "type", element.getTypeElement(), -1);
9928    }
9929    if (element.hasStateElement()) {
9930      composeEnum(t, "DeviceMetricCalibrationComponent", "state", element.getStateElement(), -1);
9931    }
9932    if (element.hasTimeElement()) {
9933      composeInstant(t, "DeviceMetricCalibrationComponent", "time", element.getTimeElement(), -1);
9934    }
9935  }
9936
9937  protected void composeDeviceRequest(Complex parent, String parentType, String name, DeviceRequest element, int index) {
9938    if (element == null) 
9939      return;
9940    Complex t;
9941    if (Utilities.noString(parentType))
9942      t = parent;
9943    else {
9944      t = parent.predicate("fhir:"+parentType+'.'+name);
9945    }
9946    composeDomainResource(t, "DeviceRequest", name, element, index);
9947    for (int i = 0; i < element.getIdentifier().size(); i++) {
9948      composeIdentifier(t, "DeviceRequest", "identifier", element.getIdentifier().get(i), i);
9949    }
9950    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
9951      composeCanonical(t, "DeviceRequest", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
9952    }
9953    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
9954      composeUri(t, "DeviceRequest", "instantiatesUri", element.getInstantiatesUri().get(i), i);
9955    }
9956    for (int i = 0; i < element.getBasedOn().size(); i++) {
9957      composeReference(t, "DeviceRequest", "basedOn", element.getBasedOn().get(i), i);
9958    }
9959    for (int i = 0; i < element.getPriorRequest().size(); i++) {
9960      composeReference(t, "DeviceRequest", "priorRequest", element.getPriorRequest().get(i), i);
9961    }
9962    if (element.hasGroupIdentifier()) {
9963      composeIdentifier(t, "DeviceRequest", "groupIdentifier", element.getGroupIdentifier(), -1);
9964    }
9965    if (element.hasStatusElement()) {
9966      composeEnum(t, "DeviceRequest", "status", element.getStatusElement(), -1);
9967    }
9968    if (element.hasIntentElement()) {
9969      composeEnum(t, "DeviceRequest", "intent", element.getIntentElement(), -1);
9970    }
9971    if (element.hasPriorityElement()) {
9972      composeEnum(t, "DeviceRequest", "priority", element.getPriorityElement(), -1);
9973    }
9974    if (element.hasDoNotPerformElement()) {
9975      composeBoolean(t, "DeviceRequest", "doNotPerform", element.getDoNotPerformElement(), -1);
9976    }
9977    if (element.hasCode()) {
9978      composeCodeableReference(t, "DeviceRequest", "code", element.getCode(), -1);
9979    }
9980    if (element.hasQuantityElement()) {
9981      composeInteger(t, "DeviceRequest", "quantity", element.getQuantityElement(), -1);
9982    }
9983    for (int i = 0; i < element.getParameter().size(); i++) {
9984      composeDeviceRequestParameterComponent(t, "DeviceRequest", "parameter", element.getParameter().get(i), i);
9985    }
9986    if (element.hasSubject()) {
9987      composeReference(t, "DeviceRequest", "subject", element.getSubject(), -1);
9988    }
9989    if (element.hasEncounter()) {
9990      composeReference(t, "DeviceRequest", "encounter", element.getEncounter(), -1);
9991    }
9992    if (element.hasOccurrence()) {
9993      composeType(t, "DeviceRequest", "occurrence", element.getOccurrence(), -1);
9994    }
9995    if (element.hasAuthoredOnElement()) {
9996      composeDateTime(t, "DeviceRequest", "authoredOn", element.getAuthoredOnElement(), -1);
9997    }
9998    if (element.hasRequester()) {
9999      composeReference(t, "DeviceRequest", "requester", element.getRequester(), -1);
10000    }
10001    if (element.hasPerformerType()) {
10002      composeCodeableConcept(t, "DeviceRequest", "performerType", element.getPerformerType(), -1);
10003    }
10004    if (element.hasPerformer()) {
10005      composeReference(t, "DeviceRequest", "performer", element.getPerformer(), -1);
10006    }
10007    for (int i = 0; i < element.getReason().size(); i++) {
10008      composeCodeableReference(t, "DeviceRequest", "reason", element.getReason().get(i), i);
10009    }
10010    for (int i = 0; i < element.getInsurance().size(); i++) {
10011      composeReference(t, "DeviceRequest", "insurance", element.getInsurance().get(i), i);
10012    }
10013    for (int i = 0; i < element.getSupportingInfo().size(); i++) {
10014      composeReference(t, "DeviceRequest", "supportingInfo", element.getSupportingInfo().get(i), i);
10015    }
10016    for (int i = 0; i < element.getNote().size(); i++) {
10017      composeAnnotation(t, "DeviceRequest", "note", element.getNote().get(i), i);
10018    }
10019    for (int i = 0; i < element.getRelevantHistory().size(); i++) {
10020      composeReference(t, "DeviceRequest", "relevantHistory", element.getRelevantHistory().get(i), i);
10021    }
10022  }
10023
10024  protected void composeDeviceRequestParameterComponent(Complex parent, String parentType, String name, DeviceRequest.DeviceRequestParameterComponent element, int index) {
10025    if (element == null) 
10026      return;
10027    Complex t;
10028    if (Utilities.noString(parentType))
10029      t = parent;
10030    else {
10031      t = parent.predicate("fhir:"+parentType+'.'+name);
10032    }
10033    composeBackboneElement(t, "parameter", name, element, index);
10034    if (element.hasCode()) {
10035      composeCodeableConcept(t, "DeviceRequestParameterComponent", "code", element.getCode(), -1);
10036    }
10037    if (element.hasValue()) {
10038      composeType(t, "DeviceRequestParameterComponent", "value", element.getValue(), -1);
10039    }
10040  }
10041
10042  protected void composeDeviceUsage(Complex parent, String parentType, String name, DeviceUsage element, int index) {
10043    if (element == null) 
10044      return;
10045    Complex t;
10046    if (Utilities.noString(parentType))
10047      t = parent;
10048    else {
10049      t = parent.predicate("fhir:"+parentType+'.'+name);
10050    }
10051    composeDomainResource(t, "DeviceUsage", name, element, index);
10052    for (int i = 0; i < element.getIdentifier().size(); i++) {
10053      composeIdentifier(t, "DeviceUsage", "identifier", element.getIdentifier().get(i), i);
10054    }
10055    for (int i = 0; i < element.getBasedOn().size(); i++) {
10056      composeReference(t, "DeviceUsage", "basedOn", element.getBasedOn().get(i), i);
10057    }
10058    if (element.hasStatusElement()) {
10059      composeEnum(t, "DeviceUsage", "status", element.getStatusElement(), -1);
10060    }
10061    for (int i = 0; i < element.getCategory().size(); i++) {
10062      composeCodeableConcept(t, "DeviceUsage", "category", element.getCategory().get(i), i);
10063    }
10064    if (element.hasPatient()) {
10065      composeReference(t, "DeviceUsage", "patient", element.getPatient(), -1);
10066    }
10067    for (int i = 0; i < element.getDerivedFrom().size(); i++) {
10068      composeReference(t, "DeviceUsage", "derivedFrom", element.getDerivedFrom().get(i), i);
10069    }
10070    if (element.hasContext()) {
10071      composeReference(t, "DeviceUsage", "context", element.getContext(), -1);
10072    }
10073    if (element.hasTiming()) {
10074      composeType(t, "DeviceUsage", "timing", element.getTiming(), -1);
10075    }
10076    if (element.hasDateAssertedElement()) {
10077      composeDateTime(t, "DeviceUsage", "dateAsserted", element.getDateAssertedElement(), -1);
10078    }
10079    if (element.hasUsageStatus()) {
10080      composeCodeableConcept(t, "DeviceUsage", "usageStatus", element.getUsageStatus(), -1);
10081    }
10082    for (int i = 0; i < element.getUsageReason().size(); i++) {
10083      composeCodeableConcept(t, "DeviceUsage", "usageReason", element.getUsageReason().get(i), i);
10084    }
10085    if (element.hasInformationSource()) {
10086      composeReference(t, "DeviceUsage", "informationSource", element.getInformationSource(), -1);
10087    }
10088    if (element.hasDevice()) {
10089      composeCodeableReference(t, "DeviceUsage", "device", element.getDevice(), -1);
10090    }
10091    for (int i = 0; i < element.getReason().size(); i++) {
10092      composeCodeableReference(t, "DeviceUsage", "reason", element.getReason().get(i), i);
10093    }
10094    if (element.hasBodySite()) {
10095      composeCodeableReference(t, "DeviceUsage", "bodySite", element.getBodySite(), -1);
10096    }
10097    for (int i = 0; i < element.getNote().size(); i++) {
10098      composeAnnotation(t, "DeviceUsage", "note", element.getNote().get(i), i);
10099    }
10100  }
10101
10102  protected void composeDiagnosticReport(Complex parent, String parentType, String name, DiagnosticReport element, int index) {
10103    if (element == null) 
10104      return;
10105    Complex t;
10106    if (Utilities.noString(parentType))
10107      t = parent;
10108    else {
10109      t = parent.predicate("fhir:"+parentType+'.'+name);
10110    }
10111    composeDomainResource(t, "DiagnosticReport", name, element, index);
10112    for (int i = 0; i < element.getIdentifier().size(); i++) {
10113      composeIdentifier(t, "DiagnosticReport", "identifier", element.getIdentifier().get(i), i);
10114    }
10115    for (int i = 0; i < element.getBasedOn().size(); i++) {
10116      composeReference(t, "DiagnosticReport", "basedOn", element.getBasedOn().get(i), i);
10117    }
10118    if (element.hasStatusElement()) {
10119      composeEnum(t, "DiagnosticReport", "status", element.getStatusElement(), -1);
10120    }
10121    for (int i = 0; i < element.getCategory().size(); i++) {
10122      composeCodeableConcept(t, "DiagnosticReport", "category", element.getCategory().get(i), i);
10123    }
10124    if (element.hasCode()) {
10125      composeCodeableConcept(t, "DiagnosticReport", "code", element.getCode(), -1);
10126    }
10127    if (element.hasSubject()) {
10128      composeReference(t, "DiagnosticReport", "subject", element.getSubject(), -1);
10129    }
10130    if (element.hasEncounter()) {
10131      composeReference(t, "DiagnosticReport", "encounter", element.getEncounter(), -1);
10132    }
10133    if (element.hasEffective()) {
10134      composeType(t, "DiagnosticReport", "effective", element.getEffective(), -1);
10135    }
10136    if (element.hasIssuedElement()) {
10137      composeInstant(t, "DiagnosticReport", "issued", element.getIssuedElement(), -1);
10138    }
10139    for (int i = 0; i < element.getPerformer().size(); i++) {
10140      composeReference(t, "DiagnosticReport", "performer", element.getPerformer().get(i), i);
10141    }
10142    for (int i = 0; i < element.getResultsInterpreter().size(); i++) {
10143      composeReference(t, "DiagnosticReport", "resultsInterpreter", element.getResultsInterpreter().get(i), i);
10144    }
10145    for (int i = 0; i < element.getSpecimen().size(); i++) {
10146      composeReference(t, "DiagnosticReport", "specimen", element.getSpecimen().get(i), i);
10147    }
10148    for (int i = 0; i < element.getResult().size(); i++) {
10149      composeReference(t, "DiagnosticReport", "result", element.getResult().get(i), i);
10150    }
10151    for (int i = 0; i < element.getNote().size(); i++) {
10152      composeAnnotation(t, "DiagnosticReport", "note", element.getNote().get(i), i);
10153    }
10154    for (int i = 0; i < element.getImagingStudy().size(); i++) {
10155      composeReference(t, "DiagnosticReport", "imagingStudy", element.getImagingStudy().get(i), i);
10156    }
10157    for (int i = 0; i < element.getMedia().size(); i++) {
10158      composeDiagnosticReportMediaComponent(t, "DiagnosticReport", "media", element.getMedia().get(i), i);
10159    }
10160    if (element.hasComposition()) {
10161      composeReference(t, "DiagnosticReport", "composition", element.getComposition(), -1);
10162    }
10163    if (element.hasConclusionElement()) {
10164      composeString(t, "DiagnosticReport", "conclusion", element.getConclusionElement(), -1);
10165    }
10166    for (int i = 0; i < element.getConclusionCode().size(); i++) {
10167      composeCodeableConcept(t, "DiagnosticReport", "conclusionCode", element.getConclusionCode().get(i), i);
10168    }
10169    for (int i = 0; i < element.getPresentedForm().size(); i++) {
10170      composeAttachment(t, "DiagnosticReport", "presentedForm", element.getPresentedForm().get(i), i);
10171    }
10172  }
10173
10174  protected void composeDiagnosticReportMediaComponent(Complex parent, String parentType, String name, DiagnosticReport.DiagnosticReportMediaComponent element, int index) {
10175    if (element == null) 
10176      return;
10177    Complex t;
10178    if (Utilities.noString(parentType))
10179      t = parent;
10180    else {
10181      t = parent.predicate("fhir:"+parentType+'.'+name);
10182    }
10183    composeBackboneElement(t, "media", name, element, index);
10184    if (element.hasCommentElement()) {
10185      composeString(t, "DiagnosticReportMediaComponent", "comment", element.getCommentElement(), -1);
10186    }
10187    if (element.hasLink()) {
10188      composeReference(t, "DiagnosticReportMediaComponent", "link", element.getLink(), -1);
10189    }
10190  }
10191
10192  protected void composeDocumentManifest(Complex parent, String parentType, String name, DocumentManifest 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:"+parentType+'.'+name);
10200    }
10201    composeDomainResource(t, "DocumentManifest", name, element, index);
10202    if (element.hasMasterIdentifier()) {
10203      composeIdentifier(t, "DocumentManifest", "masterIdentifier", element.getMasterIdentifier(), -1);
10204    }
10205    for (int i = 0; i < element.getIdentifier().size(); i++) {
10206      composeIdentifier(t, "DocumentManifest", "identifier", element.getIdentifier().get(i), i);
10207    }
10208    if (element.hasStatusElement()) {
10209      composeEnum(t, "DocumentManifest", "status", element.getStatusElement(), -1);
10210    }
10211    if (element.hasType()) {
10212      composeCodeableConcept(t, "DocumentManifest", "type", element.getType(), -1);
10213    }
10214    if (element.hasSubject()) {
10215      composeReference(t, "DocumentManifest", "subject", element.getSubject(), -1);
10216    }
10217    if (element.hasCreatedElement()) {
10218      composeDateTime(t, "DocumentManifest", "created", element.getCreatedElement(), -1);
10219    }
10220    for (int i = 0; i < element.getAuthor().size(); i++) {
10221      composeReference(t, "DocumentManifest", "author", element.getAuthor().get(i), i);
10222    }
10223    for (int i = 0; i < element.getRecipient().size(); i++) {
10224      composeReference(t, "DocumentManifest", "recipient", element.getRecipient().get(i), i);
10225    }
10226    if (element.hasSourceElement()) {
10227      composeUri(t, "DocumentManifest", "source", element.getSourceElement(), -1);
10228    }
10229    if (element.hasDescriptionElement()) {
10230      composeString(t, "DocumentManifest", "description", element.getDescriptionElement(), -1);
10231    }
10232    for (int i = 0; i < element.getContent().size(); i++) {
10233      composeReference(t, "DocumentManifest", "content", element.getContent().get(i), i);
10234    }
10235    for (int i = 0; i < element.getRelated().size(); i++) {
10236      composeDocumentManifestRelatedComponent(t, "DocumentManifest", "related", element.getRelated().get(i), i);
10237    }
10238  }
10239
10240  protected void composeDocumentManifestRelatedComponent(Complex parent, String parentType, String name, DocumentManifest.DocumentManifestRelatedComponent element, int index) {
10241    if (element == null) 
10242      return;
10243    Complex t;
10244    if (Utilities.noString(parentType))
10245      t = parent;
10246    else {
10247      t = parent.predicate("fhir:"+parentType+'.'+name);
10248    }
10249    composeBackboneElement(t, "related", name, element, index);
10250    if (element.hasIdentifier()) {
10251      composeIdentifier(t, "DocumentManifestRelatedComponent", "identifier", element.getIdentifier(), -1);
10252    }
10253    if (element.hasRef()) {
10254      composeReference(t, "DocumentManifestRelatedComponent", "ref", element.getRef(), -1);
10255    }
10256  }
10257
10258  protected void composeDocumentReference(Complex parent, String parentType, String name, DocumentReference element, int index) {
10259    if (element == null) 
10260      return;
10261    Complex t;
10262    if (Utilities.noString(parentType))
10263      t = parent;
10264    else {
10265      t = parent.predicate("fhir:"+parentType+'.'+name);
10266    }
10267    composeDomainResource(t, "DocumentReference", name, element, index);
10268    for (int i = 0; i < element.getIdentifier().size(); i++) {
10269      composeIdentifier(t, "DocumentReference", "identifier", element.getIdentifier().get(i), i);
10270    }
10271    for (int i = 0; i < element.getBasedOn().size(); i++) {
10272      composeReference(t, "DocumentReference", "basedOn", element.getBasedOn().get(i), i);
10273    }
10274    if (element.hasStatusElement()) {
10275      composeEnum(t, "DocumentReference", "status", element.getStatusElement(), -1);
10276    }
10277    if (element.hasDocStatusElement()) {
10278      composeEnum(t, "DocumentReference", "docStatus", element.getDocStatusElement(), -1);
10279    }
10280    if (element.hasType()) {
10281      composeCodeableConcept(t, "DocumentReference", "type", element.getType(), -1);
10282    }
10283    for (int i = 0; i < element.getCategory().size(); i++) {
10284      composeCodeableConcept(t, "DocumentReference", "category", element.getCategory().get(i), i);
10285    }
10286    if (element.hasSubject()) {
10287      composeReference(t, "DocumentReference", "subject", element.getSubject(), -1);
10288    }
10289    for (int i = 0; i < element.getEncounter().size(); i++) {
10290      composeReference(t, "DocumentReference", "encounter", element.getEncounter().get(i), i);
10291    }
10292    for (int i = 0; i < element.getEvent().size(); i++) {
10293      composeCodeableConcept(t, "DocumentReference", "event", element.getEvent().get(i), i);
10294    }
10295    if (element.hasFacilityType()) {
10296      composeCodeableConcept(t, "DocumentReference", "facilityType", element.getFacilityType(), -1);
10297    }
10298    if (element.hasPracticeSetting()) {
10299      composeCodeableConcept(t, "DocumentReference", "practiceSetting", element.getPracticeSetting(), -1);
10300    }
10301    if (element.hasPeriod()) {
10302      composePeriod(t, "DocumentReference", "period", element.getPeriod(), -1);
10303    }
10304    if (element.hasDateElement()) {
10305      composeInstant(t, "DocumentReference", "date", element.getDateElement(), -1);
10306    }
10307    for (int i = 0; i < element.getAuthor().size(); i++) {
10308      composeReference(t, "DocumentReference", "author", element.getAuthor().get(i), i);
10309    }
10310    for (int i = 0; i < element.getAttester().size(); i++) {
10311      composeDocumentReferenceAttesterComponent(t, "DocumentReference", "attester", element.getAttester().get(i), i);
10312    }
10313    if (element.hasCustodian()) {
10314      composeReference(t, "DocumentReference", "custodian", element.getCustodian(), -1);
10315    }
10316    for (int i = 0; i < element.getRelatesTo().size(); i++) {
10317      composeDocumentReferenceRelatesToComponent(t, "DocumentReference", "relatesTo", element.getRelatesTo().get(i), i);
10318    }
10319    if (element.hasDescriptionElement()) {
10320      composeMarkdown(t, "DocumentReference", "description", element.getDescriptionElement(), -1);
10321    }
10322    for (int i = 0; i < element.getSecurityLabel().size(); i++) {
10323      composeCodeableConcept(t, "DocumentReference", "securityLabel", element.getSecurityLabel().get(i), i);
10324    }
10325    for (int i = 0; i < element.getContent().size(); i++) {
10326      composeDocumentReferenceContentComponent(t, "DocumentReference", "content", element.getContent().get(i), i);
10327    }
10328    if (element.hasSourcePatientInfo()) {
10329      composeReference(t, "DocumentReference", "sourcePatientInfo", element.getSourcePatientInfo(), -1);
10330    }
10331    for (int i = 0; i < element.getRelated().size(); i++) {
10332      composeReference(t, "DocumentReference", "related", element.getRelated().get(i), i);
10333    }
10334  }
10335
10336  protected void composeDocumentReferenceAttesterComponent(Complex parent, String parentType, String name, DocumentReference.DocumentReferenceAttesterComponent element, int index) {
10337    if (element == null) 
10338      return;
10339    Complex t;
10340    if (Utilities.noString(parentType))
10341      t = parent;
10342    else {
10343      t = parent.predicate("fhir:"+parentType+'.'+name);
10344    }
10345    composeBackboneElement(t, "attester", name, element, index);
10346    if (element.hasModeElement()) {
10347      composeEnum(t, "DocumentReferenceAttesterComponent", "mode", element.getModeElement(), -1);
10348    }
10349    if (element.hasTimeElement()) {
10350      composeDateTime(t, "DocumentReferenceAttesterComponent", "time", element.getTimeElement(), -1);
10351    }
10352    if (element.hasParty()) {
10353      composeReference(t, "DocumentReferenceAttesterComponent", "party", element.getParty(), -1);
10354    }
10355  }
10356
10357  protected void composeDocumentReferenceRelatesToComponent(Complex parent, String parentType, String name, DocumentReference.DocumentReferenceRelatesToComponent element, int index) {
10358    if (element == null) 
10359      return;
10360    Complex t;
10361    if (Utilities.noString(parentType))
10362      t = parent;
10363    else {
10364      t = parent.predicate("fhir:"+parentType+'.'+name);
10365    }
10366    composeBackboneElement(t, "relatesTo", name, element, index);
10367    if (element.hasCode()) {
10368      composeCodeableConcept(t, "DocumentReferenceRelatesToComponent", "code", element.getCode(), -1);
10369    }
10370    if (element.hasTarget()) {
10371      composeReference(t, "DocumentReferenceRelatesToComponent", "target", element.getTarget(), -1);
10372    }
10373  }
10374
10375  protected void composeDocumentReferenceContentComponent(Complex parent, String parentType, String name, DocumentReference.DocumentReferenceContentComponent element, int index) {
10376    if (element == null) 
10377      return;
10378    Complex t;
10379    if (Utilities.noString(parentType))
10380      t = parent;
10381    else {
10382      t = parent.predicate("fhir:"+parentType+'.'+name);
10383    }
10384    composeBackboneElement(t, "content", name, element, index);
10385    if (element.hasAttachment()) {
10386      composeAttachment(t, "DocumentReferenceContentComponent", "attachment", element.getAttachment(), -1);
10387    }
10388    if (element.hasFormat()) {
10389      composeCoding(t, "DocumentReferenceContentComponent", "format", element.getFormat(), -1);
10390    }
10391    if (element.hasIdentifier()) {
10392      composeIdentifier(t, "DocumentReferenceContentComponent", "identifier", element.getIdentifier(), -1);
10393    }
10394  }
10395
10396  protected void composeEncounter(Complex parent, String parentType, String name, Encounter element, int index) {
10397    if (element == null) 
10398      return;
10399    Complex t;
10400    if (Utilities.noString(parentType))
10401      t = parent;
10402    else {
10403      t = parent.predicate("fhir:"+parentType+'.'+name);
10404    }
10405    composeDomainResource(t, "Encounter", name, element, index);
10406    for (int i = 0; i < element.getIdentifier().size(); i++) {
10407      composeIdentifier(t, "Encounter", "identifier", element.getIdentifier().get(i), i);
10408    }
10409    if (element.hasStatusElement()) {
10410      composeEnum(t, "Encounter", "status", element.getStatusElement(), -1);
10411    }
10412    for (int i = 0; i < element.getStatusHistory().size(); i++) {
10413      composeEncounterStatusHistoryComponent(t, "Encounter", "statusHistory", element.getStatusHistory().get(i), i);
10414    }
10415    if (element.hasClass_()) {
10416      composeCoding(t, "Encounter", "class", element.getClass_(), -1);
10417    }
10418    for (int i = 0; i < element.getClassHistory().size(); i++) {
10419      composeEncounterClassHistoryComponent(t, "Encounter", "classHistory", element.getClassHistory().get(i), i);
10420    }
10421    for (int i = 0; i < element.getType().size(); i++) {
10422      composeCodeableConcept(t, "Encounter", "type", element.getType().get(i), i);
10423    }
10424    if (element.hasServiceType()) {
10425      composeCodeableConcept(t, "Encounter", "serviceType", element.getServiceType(), -1);
10426    }
10427    if (element.hasPriority()) {
10428      composeCodeableConcept(t, "Encounter", "priority", element.getPriority(), -1);
10429    }
10430    if (element.hasSubject()) {
10431      composeReference(t, "Encounter", "subject", element.getSubject(), -1);
10432    }
10433    if (element.hasSubjectStatus()) {
10434      composeCodeableConcept(t, "Encounter", "subjectStatus", element.getSubjectStatus(), -1);
10435    }
10436    for (int i = 0; i < element.getEpisodeOfCare().size(); i++) {
10437      composeReference(t, "Encounter", "episodeOfCare", element.getEpisodeOfCare().get(i), i);
10438    }
10439    for (int i = 0; i < element.getBasedOn().size(); i++) {
10440      composeReference(t, "Encounter", "basedOn", element.getBasedOn().get(i), i);
10441    }
10442    for (int i = 0; i < element.getParticipant().size(); i++) {
10443      composeEncounterParticipantComponent(t, "Encounter", "participant", element.getParticipant().get(i), i);
10444    }
10445    for (int i = 0; i < element.getAppointment().size(); i++) {
10446      composeReference(t, "Encounter", "appointment", element.getAppointment().get(i), i);
10447    }
10448    if (element.hasActualPeriod()) {
10449      composePeriod(t, "Encounter", "actualPeriod", element.getActualPeriod(), -1);
10450    }
10451    if (element.hasPlannedStartDateElement()) {
10452      composeDateTime(t, "Encounter", "plannedStartDate", element.getPlannedStartDateElement(), -1);
10453    }
10454    if (element.hasPlannedEndDateElement()) {
10455      composeDateTime(t, "Encounter", "plannedEndDate", element.getPlannedEndDateElement(), -1);
10456    }
10457    if (element.hasLength()) {
10458      composeDuration(t, "Encounter", "length", element.getLength(), -1);
10459    }
10460    for (int i = 0; i < element.getReason().size(); i++) {
10461      composeCodeableReference(t, "Encounter", "reason", element.getReason().get(i), i);
10462    }
10463    for (int i = 0; i < element.getDiagnosis().size(); i++) {
10464      composeEncounterDiagnosisComponent(t, "Encounter", "diagnosis", element.getDiagnosis().get(i), i);
10465    }
10466    for (int i = 0; i < element.getAccount().size(); i++) {
10467      composeReference(t, "Encounter", "account", element.getAccount().get(i), i);
10468    }
10469    if (element.hasHospitalization()) {
10470      composeEncounterHospitalizationComponent(t, "Encounter", "hospitalization", element.getHospitalization(), -1);
10471    }
10472    for (int i = 0; i < element.getLocation().size(); i++) {
10473      composeEncounterLocationComponent(t, "Encounter", "location", element.getLocation().get(i), i);
10474    }
10475    if (element.hasServiceProvider()) {
10476      composeReference(t, "Encounter", "serviceProvider", element.getServiceProvider(), -1);
10477    }
10478    if (element.hasPartOf()) {
10479      composeReference(t, "Encounter", "partOf", element.getPartOf(), -1);
10480    }
10481  }
10482
10483  protected void composeEncounterStatusHistoryComponent(Complex parent, String parentType, String name, Encounter.StatusHistoryComponent element, int index) {
10484    if (element == null) 
10485      return;
10486    Complex t;
10487    if (Utilities.noString(parentType))
10488      t = parent;
10489    else {
10490      t = parent.predicate("fhir:"+parentType+'.'+name);
10491    }
10492    composeBackboneElement(t, "statusHistory", name, element, index);
10493    if (element.hasStatusElement()) {
10494      composeEnum(t, "StatusHistoryComponent", "status", element.getStatusElement(), -1);
10495    }
10496    if (element.hasPeriod()) {
10497      composePeriod(t, "StatusHistoryComponent", "period", element.getPeriod(), -1);
10498    }
10499  }
10500
10501  protected void composeEncounterClassHistoryComponent(Complex parent, String parentType, String name, Encounter.ClassHistoryComponent element, int index) {
10502    if (element == null) 
10503      return;
10504    Complex t;
10505    if (Utilities.noString(parentType))
10506      t = parent;
10507    else {
10508      t = parent.predicate("fhir:"+parentType+'.'+name);
10509    }
10510    composeBackboneElement(t, "classHistory", name, element, index);
10511    if (element.hasClass_()) {
10512      composeCoding(t, "ClassHistoryComponent", "class", element.getClass_(), -1);
10513    }
10514    if (element.hasPeriod()) {
10515      composePeriod(t, "ClassHistoryComponent", "period", element.getPeriod(), -1);
10516    }
10517  }
10518
10519  protected void composeEncounterParticipantComponent(Complex parent, String parentType, String name, Encounter.EncounterParticipantComponent element, int index) {
10520    if (element == null) 
10521      return;
10522    Complex t;
10523    if (Utilities.noString(parentType))
10524      t = parent;
10525    else {
10526      t = parent.predicate("fhir:"+parentType+'.'+name);
10527    }
10528    composeBackboneElement(t, "participant", name, element, index);
10529    for (int i = 0; i < element.getType().size(); i++) {
10530      composeCodeableConcept(t, "EncounterParticipantComponent", "type", element.getType().get(i), i);
10531    }
10532    if (element.hasPeriod()) {
10533      composePeriod(t, "EncounterParticipantComponent", "period", element.getPeriod(), -1);
10534    }
10535    if (element.hasActor()) {
10536      composeReference(t, "EncounterParticipantComponent", "actor", element.getActor(), -1);
10537    }
10538  }
10539
10540  protected void composeEncounterDiagnosisComponent(Complex parent, String parentType, String name, Encounter.DiagnosisComponent element, int index) {
10541    if (element == null) 
10542      return;
10543    Complex t;
10544    if (Utilities.noString(parentType))
10545      t = parent;
10546    else {
10547      t = parent.predicate("fhir:"+parentType+'.'+name);
10548    }
10549    composeBackboneElement(t, "diagnosis", name, element, index);
10550    if (element.hasCondition()) {
10551      composeReference(t, "DiagnosisComponent", "condition", element.getCondition(), -1);
10552    }
10553    if (element.hasUse()) {
10554      composeCodeableConcept(t, "DiagnosisComponent", "use", element.getUse(), -1);
10555    }
10556    if (element.hasRankElement()) {
10557      composePositiveInt(t, "DiagnosisComponent", "rank", element.getRankElement(), -1);
10558    }
10559  }
10560
10561  protected void composeEncounterHospitalizationComponent(Complex parent, String parentType, String name, Encounter.EncounterHospitalizationComponent element, int index) {
10562    if (element == null) 
10563      return;
10564    Complex t;
10565    if (Utilities.noString(parentType))
10566      t = parent;
10567    else {
10568      t = parent.predicate("fhir:"+parentType+'.'+name);
10569    }
10570    composeBackboneElement(t, "hospitalization", name, element, index);
10571    if (element.hasPreAdmissionIdentifier()) {
10572      composeIdentifier(t, "EncounterHospitalizationComponent", "preAdmissionIdentifier", element.getPreAdmissionIdentifier(), -1);
10573    }
10574    if (element.hasOrigin()) {
10575      composeReference(t, "EncounterHospitalizationComponent", "origin", element.getOrigin(), -1);
10576    }
10577    if (element.hasAdmitSource()) {
10578      composeCodeableConcept(t, "EncounterHospitalizationComponent", "admitSource", element.getAdmitSource(), -1);
10579    }
10580    if (element.hasReAdmission()) {
10581      composeCodeableConcept(t, "EncounterHospitalizationComponent", "reAdmission", element.getReAdmission(), -1);
10582    }
10583    for (int i = 0; i < element.getDietPreference().size(); i++) {
10584      composeCodeableConcept(t, "EncounterHospitalizationComponent", "dietPreference", element.getDietPreference().get(i), i);
10585    }
10586    for (int i = 0; i < element.getSpecialCourtesy().size(); i++) {
10587      composeCodeableConcept(t, "EncounterHospitalizationComponent", "specialCourtesy", element.getSpecialCourtesy().get(i), i);
10588    }
10589    for (int i = 0; i < element.getSpecialArrangement().size(); i++) {
10590      composeCodeableConcept(t, "EncounterHospitalizationComponent", "specialArrangement", element.getSpecialArrangement().get(i), i);
10591    }
10592    if (element.hasDestination()) {
10593      composeReference(t, "EncounterHospitalizationComponent", "destination", element.getDestination(), -1);
10594    }
10595    if (element.hasDischargeDisposition()) {
10596      composeCodeableConcept(t, "EncounterHospitalizationComponent", "dischargeDisposition", element.getDischargeDisposition(), -1);
10597    }
10598  }
10599
10600  protected void composeEncounterLocationComponent(Complex parent, String parentType, String name, Encounter.EncounterLocationComponent element, int index) {
10601    if (element == null) 
10602      return;
10603    Complex t;
10604    if (Utilities.noString(parentType))
10605      t = parent;
10606    else {
10607      t = parent.predicate("fhir:"+parentType+'.'+name);
10608    }
10609    composeBackboneElement(t, "location", name, element, index);
10610    if (element.hasLocation()) {
10611      composeReference(t, "EncounterLocationComponent", "location", element.getLocation(), -1);
10612    }
10613    if (element.hasStatusElement()) {
10614      composeEnum(t, "EncounterLocationComponent", "status", element.getStatusElement(), -1);
10615    }
10616    if (element.hasPhysicalType()) {
10617      composeCodeableConcept(t, "EncounterLocationComponent", "physicalType", element.getPhysicalType(), -1);
10618    }
10619    if (element.hasPeriod()) {
10620      composePeriod(t, "EncounterLocationComponent", "period", element.getPeriod(), -1);
10621    }
10622  }
10623
10624  protected void composeEndpoint(Complex parent, String parentType, String name, Endpoint element, int index) {
10625    if (element == null) 
10626      return;
10627    Complex t;
10628    if (Utilities.noString(parentType))
10629      t = parent;
10630    else {
10631      t = parent.predicate("fhir:"+parentType+'.'+name);
10632    }
10633    composeDomainResource(t, "Endpoint", name, element, index);
10634    for (int i = 0; i < element.getIdentifier().size(); i++) {
10635      composeIdentifier(t, "Endpoint", "identifier", element.getIdentifier().get(i), i);
10636    }
10637    if (element.hasStatusElement()) {
10638      composeEnum(t, "Endpoint", "status", element.getStatusElement(), -1);
10639    }
10640    if (element.hasConnectionType()) {
10641      composeCoding(t, "Endpoint", "connectionType", element.getConnectionType(), -1);
10642    }
10643    if (element.hasNameElement()) {
10644      composeString(t, "Endpoint", "name", element.getNameElement(), -1);
10645    }
10646    if (element.hasManagingOrganization()) {
10647      composeReference(t, "Endpoint", "managingOrganization", element.getManagingOrganization(), -1);
10648    }
10649    for (int i = 0; i < element.getContact().size(); i++) {
10650      composeContactPoint(t, "Endpoint", "contact", element.getContact().get(i), i);
10651    }
10652    if (element.hasPeriod()) {
10653      composePeriod(t, "Endpoint", "period", element.getPeriod(), -1);
10654    }
10655    for (int i = 0; i < element.getPayloadType().size(); i++) {
10656      composeCodeableConcept(t, "Endpoint", "payloadType", element.getPayloadType().get(i), i);
10657    }
10658    for (int i = 0; i < element.getPayloadMimeType().size(); i++) {
10659      composeCode(t, "Endpoint", "payloadMimeType", element.getPayloadMimeType().get(i), i);
10660    }
10661    if (element.hasAddressElement()) {
10662      composeUrl(t, "Endpoint", "address", element.getAddressElement(), -1);
10663    }
10664    for (int i = 0; i < element.getHeader().size(); i++) {
10665      composeString(t, "Endpoint", "header", element.getHeader().get(i), i);
10666    }
10667  }
10668
10669  protected void composeEnrollmentRequest(Complex parent, String parentType, String name, EnrollmentRequest element, int index) {
10670    if (element == null) 
10671      return;
10672    Complex t;
10673    if (Utilities.noString(parentType))
10674      t = parent;
10675    else {
10676      t = parent.predicate("fhir:"+parentType+'.'+name);
10677    }
10678    composeDomainResource(t, "EnrollmentRequest", name, element, index);
10679    for (int i = 0; i < element.getIdentifier().size(); i++) {
10680      composeIdentifier(t, "EnrollmentRequest", "identifier", element.getIdentifier().get(i), i);
10681    }
10682    if (element.hasStatusElement()) {
10683      composeEnum(t, "EnrollmentRequest", "status", element.getStatusElement(), -1);
10684    }
10685    if (element.hasCreatedElement()) {
10686      composeDateTime(t, "EnrollmentRequest", "created", element.getCreatedElement(), -1);
10687    }
10688    if (element.hasInsurer()) {
10689      composeReference(t, "EnrollmentRequest", "insurer", element.getInsurer(), -1);
10690    }
10691    if (element.hasProvider()) {
10692      composeReference(t, "EnrollmentRequest", "provider", element.getProvider(), -1);
10693    }
10694    if (element.hasCandidate()) {
10695      composeReference(t, "EnrollmentRequest", "candidate", element.getCandidate(), -1);
10696    }
10697    if (element.hasCoverage()) {
10698      composeReference(t, "EnrollmentRequest", "coverage", element.getCoverage(), -1);
10699    }
10700  }
10701
10702  protected void composeEnrollmentResponse(Complex parent, String parentType, String name, EnrollmentResponse element, int index) {
10703    if (element == null) 
10704      return;
10705    Complex t;
10706    if (Utilities.noString(parentType))
10707      t = parent;
10708    else {
10709      t = parent.predicate("fhir:"+parentType+'.'+name);
10710    }
10711    composeDomainResource(t, "EnrollmentResponse", name, element, index);
10712    for (int i = 0; i < element.getIdentifier().size(); i++) {
10713      composeIdentifier(t, "EnrollmentResponse", "identifier", element.getIdentifier().get(i), i);
10714    }
10715    if (element.hasStatusElement()) {
10716      composeEnum(t, "EnrollmentResponse", "status", element.getStatusElement(), -1);
10717    }
10718    if (element.hasRequest()) {
10719      composeReference(t, "EnrollmentResponse", "request", element.getRequest(), -1);
10720    }
10721    if (element.hasOutcomeElement()) {
10722      composeEnum(t, "EnrollmentResponse", "outcome", element.getOutcomeElement(), -1);
10723    }
10724    if (element.hasDispositionElement()) {
10725      composeString(t, "EnrollmentResponse", "disposition", element.getDispositionElement(), -1);
10726    }
10727    if (element.hasCreatedElement()) {
10728      composeDateTime(t, "EnrollmentResponse", "created", element.getCreatedElement(), -1);
10729    }
10730    if (element.hasOrganization()) {
10731      composeReference(t, "EnrollmentResponse", "organization", element.getOrganization(), -1);
10732    }
10733    if (element.hasRequestProvider()) {
10734      composeReference(t, "EnrollmentResponse", "requestProvider", element.getRequestProvider(), -1);
10735    }
10736  }
10737
10738  protected void composeEpisodeOfCare(Complex parent, String parentType, String name, EpisodeOfCare element, int index) {
10739    if (element == null) 
10740      return;
10741    Complex t;
10742    if (Utilities.noString(parentType))
10743      t = parent;
10744    else {
10745      t = parent.predicate("fhir:"+parentType+'.'+name);
10746    }
10747    composeDomainResource(t, "EpisodeOfCare", name, element, index);
10748    for (int i = 0; i < element.getIdentifier().size(); i++) {
10749      composeIdentifier(t, "EpisodeOfCare", "identifier", element.getIdentifier().get(i), i);
10750    }
10751    if (element.hasStatusElement()) {
10752      composeEnum(t, "EpisodeOfCare", "status", element.getStatusElement(), -1);
10753    }
10754    for (int i = 0; i < element.getStatusHistory().size(); i++) {
10755      composeEpisodeOfCareStatusHistoryComponent(t, "EpisodeOfCare", "statusHistory", element.getStatusHistory().get(i), i);
10756    }
10757    for (int i = 0; i < element.getType().size(); i++) {
10758      composeCodeableConcept(t, "EpisodeOfCare", "type", element.getType().get(i), i);
10759    }
10760    for (int i = 0; i < element.getDiagnosis().size(); i++) {
10761      composeEpisodeOfCareDiagnosisComponent(t, "EpisodeOfCare", "diagnosis", element.getDiagnosis().get(i), i);
10762    }
10763    if (element.hasPatient()) {
10764      composeReference(t, "EpisodeOfCare", "patient", element.getPatient(), -1);
10765    }
10766    if (element.hasManagingOrganization()) {
10767      composeReference(t, "EpisodeOfCare", "managingOrganization", element.getManagingOrganization(), -1);
10768    }
10769    if (element.hasPeriod()) {
10770      composePeriod(t, "EpisodeOfCare", "period", element.getPeriod(), -1);
10771    }
10772    for (int i = 0; i < element.getReferralRequest().size(); i++) {
10773      composeReference(t, "EpisodeOfCare", "referralRequest", element.getReferralRequest().get(i), i);
10774    }
10775    if (element.hasCareManager()) {
10776      composeReference(t, "EpisodeOfCare", "careManager", element.getCareManager(), -1);
10777    }
10778    for (int i = 0; i < element.getTeam().size(); i++) {
10779      composeReference(t, "EpisodeOfCare", "team", element.getTeam().get(i), i);
10780    }
10781    for (int i = 0; i < element.getAccount().size(); i++) {
10782      composeReference(t, "EpisodeOfCare", "account", element.getAccount().get(i), i);
10783    }
10784  }
10785
10786  protected void composeEpisodeOfCareStatusHistoryComponent(Complex parent, String parentType, String name, EpisodeOfCare.EpisodeOfCareStatusHistoryComponent element, int index) {
10787    if (element == null) 
10788      return;
10789    Complex t;
10790    if (Utilities.noString(parentType))
10791      t = parent;
10792    else {
10793      t = parent.predicate("fhir:"+parentType+'.'+name);
10794    }
10795    composeBackboneElement(t, "statusHistory", name, element, index);
10796    if (element.hasStatusElement()) {
10797      composeEnum(t, "EpisodeOfCareStatusHistoryComponent", "status", element.getStatusElement(), -1);
10798    }
10799    if (element.hasPeriod()) {
10800      composePeriod(t, "EpisodeOfCareStatusHistoryComponent", "period", element.getPeriod(), -1);
10801    }
10802  }
10803
10804  protected void composeEpisodeOfCareDiagnosisComponent(Complex parent, String parentType, String name, EpisodeOfCare.DiagnosisComponent element, int index) {
10805    if (element == null) 
10806      return;
10807    Complex t;
10808    if (Utilities.noString(parentType))
10809      t = parent;
10810    else {
10811      t = parent.predicate("fhir:"+parentType+'.'+name);
10812    }
10813    composeBackboneElement(t, "diagnosis", name, element, index);
10814    if (element.hasCondition()) {
10815      composeReference(t, "DiagnosisComponent", "condition", element.getCondition(), -1);
10816    }
10817    if (element.hasRole()) {
10818      composeCodeableConcept(t, "DiagnosisComponent", "role", element.getRole(), -1);
10819    }
10820    if (element.hasRankElement()) {
10821      composePositiveInt(t, "DiagnosisComponent", "rank", element.getRankElement(), -1);
10822    }
10823  }
10824
10825  protected void composeEventDefinition(Complex parent, String parentType, String name, EventDefinition element, int index) {
10826    if (element == null) 
10827      return;
10828    Complex t;
10829    if (Utilities.noString(parentType))
10830      t = parent;
10831    else {
10832      t = parent.predicate("fhir:"+parentType+'.'+name);
10833    }
10834    composeMetadataResource(t, "EventDefinition", name, element, index);
10835    if (element.hasUrlElement()) {
10836      composeUri(t, "EventDefinition", "url", element.getUrlElement(), -1);
10837    }
10838    for (int i = 0; i < element.getIdentifier().size(); i++) {
10839      composeIdentifier(t, "EventDefinition", "identifier", element.getIdentifier().get(i), i);
10840    }
10841    if (element.hasVersionElement()) {
10842      composeString(t, "EventDefinition", "version", element.getVersionElement(), -1);
10843    }
10844    if (element.hasNameElement()) {
10845      composeString(t, "EventDefinition", "name", element.getNameElement(), -1);
10846    }
10847    if (element.hasTitleElement()) {
10848      composeString(t, "EventDefinition", "title", element.getTitleElement(), -1);
10849    }
10850    if (element.hasSubtitleElement()) {
10851      composeString(t, "EventDefinition", "subtitle", element.getSubtitleElement(), -1);
10852    }
10853    if (element.hasStatusElement()) {
10854      composeEnum(t, "EventDefinition", "status", element.getStatusElement(), -1);
10855    }
10856    if (element.hasExperimentalElement()) {
10857      composeBoolean(t, "EventDefinition", "experimental", element.getExperimentalElement(), -1);
10858    }
10859    if (element.hasSubject()) {
10860      composeType(t, "EventDefinition", "subject", element.getSubject(), -1);
10861    }
10862    if (element.hasDateElement()) {
10863      composeDateTime(t, "EventDefinition", "date", element.getDateElement(), -1);
10864    }
10865    if (element.hasPublisherElement()) {
10866      composeString(t, "EventDefinition", "publisher", element.getPublisherElement(), -1);
10867    }
10868    for (int i = 0; i < element.getContact().size(); i++) {
10869      composeContactDetail(t, "EventDefinition", "contact", element.getContact().get(i), i);
10870    }
10871    if (element.hasDescriptionElement()) {
10872      composeMarkdown(t, "EventDefinition", "description", element.getDescriptionElement(), -1);
10873    }
10874    for (int i = 0; i < element.getUseContext().size(); i++) {
10875      composeUsageContext(t, "EventDefinition", "useContext", element.getUseContext().get(i), i);
10876    }
10877    for (int i = 0; i < element.getJurisdiction().size(); i++) {
10878      composeCodeableConcept(t, "EventDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
10879    }
10880    if (element.hasPurposeElement()) {
10881      composeMarkdown(t, "EventDefinition", "purpose", element.getPurposeElement(), -1);
10882    }
10883    if (element.hasUsageElement()) {
10884      composeString(t, "EventDefinition", "usage", element.getUsageElement(), -1);
10885    }
10886    if (element.hasCopyrightElement()) {
10887      composeMarkdown(t, "EventDefinition", "copyright", element.getCopyrightElement(), -1);
10888    }
10889    if (element.hasApprovalDateElement()) {
10890      composeDate(t, "EventDefinition", "approvalDate", element.getApprovalDateElement(), -1);
10891    }
10892    if (element.hasLastReviewDateElement()) {
10893      composeDate(t, "EventDefinition", "lastReviewDate", element.getLastReviewDateElement(), -1);
10894    }
10895    if (element.hasEffectivePeriod()) {
10896      composePeriod(t, "EventDefinition", "effectivePeriod", element.getEffectivePeriod(), -1);
10897    }
10898    for (int i = 0; i < element.getTopic().size(); i++) {
10899      composeCodeableConcept(t, "EventDefinition", "topic", element.getTopic().get(i), i);
10900    }
10901    for (int i = 0; i < element.getAuthor().size(); i++) {
10902      composeContactDetail(t, "EventDefinition", "author", element.getAuthor().get(i), i);
10903    }
10904    for (int i = 0; i < element.getEditor().size(); i++) {
10905      composeContactDetail(t, "EventDefinition", "editor", element.getEditor().get(i), i);
10906    }
10907    for (int i = 0; i < element.getReviewer().size(); i++) {
10908      composeContactDetail(t, "EventDefinition", "reviewer", element.getReviewer().get(i), i);
10909    }
10910    for (int i = 0; i < element.getEndorser().size(); i++) {
10911      composeContactDetail(t, "EventDefinition", "endorser", element.getEndorser().get(i), i);
10912    }
10913    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
10914      composeRelatedArtifact(t, "EventDefinition", "relatedArtifact", element.getRelatedArtifact().get(i), i);
10915    }
10916    for (int i = 0; i < element.getTrigger().size(); i++) {
10917      composeTriggerDefinition(t, "EventDefinition", "trigger", element.getTrigger().get(i), i);
10918    }
10919  }
10920
10921  protected void composeEvidence(Complex parent, String parentType, String name, Evidence element, int index) {
10922    if (element == null) 
10923      return;
10924    Complex t;
10925    if (Utilities.noString(parentType))
10926      t = parent;
10927    else {
10928      t = parent.predicate("fhir:"+parentType+'.'+name);
10929    }
10930    composeMetadataResource(t, "Evidence", name, element, index);
10931    if (element.hasUrlElement()) {
10932      composeUri(t, "Evidence", "url", element.getUrlElement(), -1);
10933    }
10934    for (int i = 0; i < element.getIdentifier().size(); i++) {
10935      composeIdentifier(t, "Evidence", "identifier", element.getIdentifier().get(i), i);
10936    }
10937    if (element.hasVersionElement()) {
10938      composeString(t, "Evidence", "version", element.getVersionElement(), -1);
10939    }
10940    if (element.hasTitleElement()) {
10941      composeString(t, "Evidence", "title", element.getTitleElement(), -1);
10942    }
10943    if (element.hasCiteAs()) {
10944      composeType(t, "Evidence", "citeAs", element.getCiteAs(), -1);
10945    }
10946    if (element.hasStatusElement()) {
10947      composeEnum(t, "Evidence", "status", element.getStatusElement(), -1);
10948    }
10949    if (element.hasDateElement()) {
10950      composeDateTime(t, "Evidence", "date", element.getDateElement(), -1);
10951    }
10952    for (int i = 0; i < element.getUseContext().size(); i++) {
10953      composeUsageContext(t, "Evidence", "useContext", element.getUseContext().get(i), i);
10954    }
10955    if (element.hasApprovalDateElement()) {
10956      composeDate(t, "Evidence", "approvalDate", element.getApprovalDateElement(), -1);
10957    }
10958    if (element.hasLastReviewDateElement()) {
10959      composeDate(t, "Evidence", "lastReviewDate", element.getLastReviewDateElement(), -1);
10960    }
10961    if (element.hasPublisherElement()) {
10962      composeString(t, "Evidence", "publisher", element.getPublisherElement(), -1);
10963    }
10964    for (int i = 0; i < element.getContact().size(); i++) {
10965      composeContactDetail(t, "Evidence", "contact", element.getContact().get(i), i);
10966    }
10967    for (int i = 0; i < element.getAuthor().size(); i++) {
10968      composeContactDetail(t, "Evidence", "author", element.getAuthor().get(i), i);
10969    }
10970    for (int i = 0; i < element.getEditor().size(); i++) {
10971      composeContactDetail(t, "Evidence", "editor", element.getEditor().get(i), i);
10972    }
10973    for (int i = 0; i < element.getReviewer().size(); i++) {
10974      composeContactDetail(t, "Evidence", "reviewer", element.getReviewer().get(i), i);
10975    }
10976    for (int i = 0; i < element.getEndorser().size(); i++) {
10977      composeContactDetail(t, "Evidence", "endorser", element.getEndorser().get(i), i);
10978    }
10979    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
10980      composeRelatedArtifact(t, "Evidence", "relatedArtifact", element.getRelatedArtifact().get(i), i);
10981    }
10982    if (element.hasDescriptionElement()) {
10983      composeMarkdown(t, "Evidence", "description", element.getDescriptionElement(), -1);
10984    }
10985    if (element.hasAssertionElement()) {
10986      composeMarkdown(t, "Evidence", "assertion", element.getAssertionElement(), -1);
10987    }
10988    for (int i = 0; i < element.getNote().size(); i++) {
10989      composeAnnotation(t, "Evidence", "note", element.getNote().get(i), i);
10990    }
10991    for (int i = 0; i < element.getVariableDefinition().size(); i++) {
10992      composeEvidenceVariableDefinitionComponent(t, "Evidence", "variableDefinition", element.getVariableDefinition().get(i), i);
10993    }
10994    if (element.hasSynthesisType()) {
10995      composeCodeableConcept(t, "Evidence", "synthesisType", element.getSynthesisType(), -1);
10996    }
10997    if (element.hasStudyType()) {
10998      composeCodeableConcept(t, "Evidence", "studyType", element.getStudyType(), -1);
10999    }
11000    for (int i = 0; i < element.getStatistic().size(); i++) {
11001      composeEvidenceStatisticComponent(t, "Evidence", "statistic", element.getStatistic().get(i), i);
11002    }
11003    for (int i = 0; i < element.getCertainty().size(); i++) {
11004      composeEvidenceCertaintyComponent(t, "Evidence", "certainty", element.getCertainty().get(i), i);
11005    }
11006  }
11007
11008  protected void composeEvidenceVariableDefinitionComponent(Complex parent, String parentType, String name, Evidence.EvidenceVariableDefinitionComponent element, int index) {
11009    if (element == null) 
11010      return;
11011    Complex t;
11012    if (Utilities.noString(parentType))
11013      t = parent;
11014    else {
11015      t = parent.predicate("fhir:"+parentType+'.'+name);
11016    }
11017    composeBackboneElement(t, "variableDefinition", name, element, index);
11018    if (element.hasDescriptionElement()) {
11019      composeMarkdown(t, "EvidenceVariableDefinitionComponent", "description", element.getDescriptionElement(), -1);
11020    }
11021    for (int i = 0; i < element.getNote().size(); i++) {
11022      composeAnnotation(t, "EvidenceVariableDefinitionComponent", "note", element.getNote().get(i), i);
11023    }
11024    if (element.hasVariableRole()) {
11025      composeCodeableConcept(t, "EvidenceVariableDefinitionComponent", "variableRole", element.getVariableRole(), -1);
11026    }
11027    if (element.hasObserved()) {
11028      composeReference(t, "EvidenceVariableDefinitionComponent", "observed", element.getObserved(), -1);
11029    }
11030    if (element.hasIntended()) {
11031      composeReference(t, "EvidenceVariableDefinitionComponent", "intended", element.getIntended(), -1);
11032    }
11033    if (element.hasDirectnessMatch()) {
11034      composeCodeableConcept(t, "EvidenceVariableDefinitionComponent", "directnessMatch", element.getDirectnessMatch(), -1);
11035    }
11036  }
11037
11038  protected void composeEvidenceStatisticComponent(Complex parent, String parentType, String name, Evidence.EvidenceStatisticComponent element, int index) {
11039    if (element == null) 
11040      return;
11041    Complex t;
11042    if (Utilities.noString(parentType))
11043      t = parent;
11044    else {
11045      t = parent.predicate("fhir:"+parentType+'.'+name);
11046    }
11047    composeBackboneElement(t, "statistic", name, element, index);
11048    if (element.hasDescriptionElement()) {
11049      composeString(t, "EvidenceStatisticComponent", "description", element.getDescriptionElement(), -1);
11050    }
11051    for (int i = 0; i < element.getNote().size(); i++) {
11052      composeAnnotation(t, "EvidenceStatisticComponent", "note", element.getNote().get(i), i);
11053    }
11054    if (element.hasStatisticType()) {
11055      composeCodeableConcept(t, "EvidenceStatisticComponent", "statisticType", element.getStatisticType(), -1);
11056    }
11057    if (element.hasCategory()) {
11058      composeCodeableConcept(t, "EvidenceStatisticComponent", "category", element.getCategory(), -1);
11059    }
11060    if (element.hasQuantity()) {
11061      composeQuantity(t, "EvidenceStatisticComponent", "quantity", element.getQuantity(), -1);
11062    }
11063    if (element.hasNumberOfEventsElement()) {
11064      composeUnsignedInt(t, "EvidenceStatisticComponent", "numberOfEvents", element.getNumberOfEventsElement(), -1);
11065    }
11066    if (element.hasNumberAffectedElement()) {
11067      composeUnsignedInt(t, "EvidenceStatisticComponent", "numberAffected", element.getNumberAffectedElement(), -1);
11068    }
11069    if (element.hasSampleSize()) {
11070      composeEvidenceStatisticSampleSizeComponent(t, "EvidenceStatisticComponent", "sampleSize", element.getSampleSize(), -1);
11071    }
11072    for (int i = 0; i < element.getAttributeEstimate().size(); i++) {
11073      composeEvidenceStatisticAttributeEstimateComponent(t, "EvidenceStatisticComponent", "attributeEstimate", element.getAttributeEstimate().get(i), i);
11074    }
11075    for (int i = 0; i < element.getModelCharacteristic().size(); i++) {
11076      composeEvidenceStatisticModelCharacteristicComponent(t, "EvidenceStatisticComponent", "modelCharacteristic", element.getModelCharacteristic().get(i), i);
11077    }
11078  }
11079
11080  protected void composeEvidenceStatisticSampleSizeComponent(Complex parent, String parentType, String name, Evidence.EvidenceStatisticSampleSizeComponent element, int index) {
11081    if (element == null) 
11082      return;
11083    Complex t;
11084    if (Utilities.noString(parentType))
11085      t = parent;
11086    else {
11087      t = parent.predicate("fhir:"+parentType+'.'+name);
11088    }
11089    composeBackboneElement(t, "sampleSize", name, element, index);
11090    if (element.hasDescriptionElement()) {
11091      composeString(t, "EvidenceStatisticSampleSizeComponent", "description", element.getDescriptionElement(), -1);
11092    }
11093    for (int i = 0; i < element.getNote().size(); i++) {
11094      composeAnnotation(t, "EvidenceStatisticSampleSizeComponent", "note", element.getNote().get(i), i);
11095    }
11096    if (element.hasNumberOfStudiesElement()) {
11097      composeUnsignedInt(t, "EvidenceStatisticSampleSizeComponent", "numberOfStudies", element.getNumberOfStudiesElement(), -1);
11098    }
11099    if (element.hasNumberOfParticipantsElement()) {
11100      composeUnsignedInt(t, "EvidenceStatisticSampleSizeComponent", "numberOfParticipants", element.getNumberOfParticipantsElement(), -1);
11101    }
11102    if (element.hasKnownDataCountElement()) {
11103      composeUnsignedInt(t, "EvidenceStatisticSampleSizeComponent", "knownDataCount", element.getKnownDataCountElement(), -1);
11104    }
11105  }
11106
11107  protected void composeEvidenceStatisticAttributeEstimateComponent(Complex parent, String parentType, String name, Evidence.EvidenceStatisticAttributeEstimateComponent element, int index) {
11108    if (element == null) 
11109      return;
11110    Complex t;
11111    if (Utilities.noString(parentType))
11112      t = parent;
11113    else {
11114      t = parent.predicate("fhir:"+parentType+'.'+name);
11115    }
11116    composeBackboneElement(t, "attributeEstimate", name, element, index);
11117    if (element.hasDescriptionElement()) {
11118      composeString(t, "EvidenceStatisticAttributeEstimateComponent", "description", element.getDescriptionElement(), -1);
11119    }
11120    for (int i = 0; i < element.getNote().size(); i++) {
11121      composeAnnotation(t, "EvidenceStatisticAttributeEstimateComponent", "note", element.getNote().get(i), i);
11122    }
11123    if (element.hasType()) {
11124      composeCodeableConcept(t, "EvidenceStatisticAttributeEstimateComponent", "type", element.getType(), -1);
11125    }
11126    if (element.hasQuantity()) {
11127      composeQuantity(t, "EvidenceStatisticAttributeEstimateComponent", "quantity", element.getQuantity(), -1);
11128    }
11129    if (element.hasLevelElement()) {
11130      composeDecimal(t, "EvidenceStatisticAttributeEstimateComponent", "level", element.getLevelElement(), -1);
11131    }
11132    if (element.hasRange()) {
11133      composeRange(t, "EvidenceStatisticAttributeEstimateComponent", "range", element.getRange(), -1);
11134    }
11135    for (int i = 0; i < element.getAttributeEstimate().size(); i++) {
11136      composeEvidenceStatisticAttributeEstimateComponent(t, "EvidenceStatisticAttributeEstimateComponent", "attributeEstimate", element.getAttributeEstimate().get(i), i);
11137    }
11138  }
11139
11140  protected void composeEvidenceStatisticModelCharacteristicComponent(Complex parent, String parentType, String name, Evidence.EvidenceStatisticModelCharacteristicComponent 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:"+parentType+'.'+name);
11148    }
11149    composeBackboneElement(t, "modelCharacteristic", name, element, index);
11150    if (element.hasCode()) {
11151      composeCodeableConcept(t, "EvidenceStatisticModelCharacteristicComponent", "code", element.getCode(), -1);
11152    }
11153    if (element.hasValue()) {
11154      composeQuantity(t, "EvidenceStatisticModelCharacteristicComponent", "value", element.getValue(), -1);
11155    }
11156    for (int i = 0; i < element.getVariable().size(); i++) {
11157      composeEvidenceStatisticModelCharacteristicVariableComponent(t, "EvidenceStatisticModelCharacteristicComponent", "variable", element.getVariable().get(i), i);
11158    }
11159    for (int i = 0; i < element.getAttributeEstimate().size(); i++) {
11160      composeEvidenceStatisticAttributeEstimateComponent(t, "EvidenceStatisticModelCharacteristicComponent", "attributeEstimate", element.getAttributeEstimate().get(i), i);
11161    }
11162  }
11163
11164  protected void composeEvidenceStatisticModelCharacteristicVariableComponent(Complex parent, String parentType, String name, Evidence.EvidenceStatisticModelCharacteristicVariableComponent element, int index) {
11165    if (element == null) 
11166      return;
11167    Complex t;
11168    if (Utilities.noString(parentType))
11169      t = parent;
11170    else {
11171      t = parent.predicate("fhir:"+parentType+'.'+name);
11172    }
11173    composeBackboneElement(t, "variable", name, element, index);
11174    if (element.hasVariableDefinition()) {
11175      composeReference(t, "EvidenceStatisticModelCharacteristicVariableComponent", "variableDefinition", element.getVariableDefinition(), -1);
11176    }
11177    if (element.hasHandlingElement()) {
11178      composeEnum(t, "EvidenceStatisticModelCharacteristicVariableComponent", "handling", element.getHandlingElement(), -1);
11179    }
11180    for (int i = 0; i < element.getValueCategory().size(); i++) {
11181      composeCodeableConcept(t, "EvidenceStatisticModelCharacteristicVariableComponent", "valueCategory", element.getValueCategory().get(i), i);
11182    }
11183    for (int i = 0; i < element.getValueQuantity().size(); i++) {
11184      composeQuantity(t, "EvidenceStatisticModelCharacteristicVariableComponent", "valueQuantity", element.getValueQuantity().get(i), i);
11185    }
11186    for (int i = 0; i < element.getValueRange().size(); i++) {
11187      composeRange(t, "EvidenceStatisticModelCharacteristicVariableComponent", "valueRange", element.getValueRange().get(i), i);
11188    }
11189  }
11190
11191  protected void composeEvidenceCertaintyComponent(Complex parent, String parentType, String name, Evidence.EvidenceCertaintyComponent element, int index) {
11192    if (element == null) 
11193      return;
11194    Complex t;
11195    if (Utilities.noString(parentType))
11196      t = parent;
11197    else {
11198      t = parent.predicate("fhir:"+parentType+'.'+name);
11199    }
11200    composeBackboneElement(t, "certainty", name, element, index);
11201    if (element.hasDescriptionElement()) {
11202      composeString(t, "EvidenceCertaintyComponent", "description", element.getDescriptionElement(), -1);
11203    }
11204    for (int i = 0; i < element.getNote().size(); i++) {
11205      composeAnnotation(t, "EvidenceCertaintyComponent", "note", element.getNote().get(i), i);
11206    }
11207    if (element.hasType()) {
11208      composeCodeableConcept(t, "EvidenceCertaintyComponent", "type", element.getType(), -1);
11209    }
11210    if (element.hasRating()) {
11211      composeCodeableConcept(t, "EvidenceCertaintyComponent", "rating", element.getRating(), -1);
11212    }
11213    if (element.hasRaterElement()) {
11214      composeString(t, "EvidenceCertaintyComponent", "rater", element.getRaterElement(), -1);
11215    }
11216    for (int i = 0; i < element.getSubcomponent().size(); i++) {
11217      composeEvidenceCertaintyComponent(t, "EvidenceCertaintyComponent", "subcomponent", element.getSubcomponent().get(i), i);
11218    }
11219  }
11220
11221  protected void composeEvidenceReport(Complex parent, String parentType, String name, EvidenceReport element, int index) {
11222    if (element == null) 
11223      return;
11224    Complex t;
11225    if (Utilities.noString(parentType))
11226      t = parent;
11227    else {
11228      t = parent.predicate("fhir:"+parentType+'.'+name);
11229    }
11230    composeMetadataResource(t, "EvidenceReport", name, element, index);
11231    if (element.hasUrlElement()) {
11232      composeUri(t, "EvidenceReport", "url", element.getUrlElement(), -1);
11233    }
11234    if (element.hasStatusElement()) {
11235      composeEnum(t, "EvidenceReport", "status", element.getStatusElement(), -1);
11236    }
11237    for (int i = 0; i < element.getUseContext().size(); i++) {
11238      composeUsageContext(t, "EvidenceReport", "useContext", element.getUseContext().get(i), i);
11239    }
11240    for (int i = 0; i < element.getIdentifier().size(); i++) {
11241      composeIdentifier(t, "EvidenceReport", "identifier", element.getIdentifier().get(i), i);
11242    }
11243    for (int i = 0; i < element.getRelatedIdentifier().size(); i++) {
11244      composeIdentifier(t, "EvidenceReport", "relatedIdentifier", element.getRelatedIdentifier().get(i), i);
11245    }
11246    if (element.hasCiteAs()) {
11247      composeType(t, "EvidenceReport", "citeAs", element.getCiteAs(), -1);
11248    }
11249    if (element.hasType()) {
11250      composeCodeableConcept(t, "EvidenceReport", "type", element.getType(), -1);
11251    }
11252    for (int i = 0; i < element.getNote().size(); i++) {
11253      composeAnnotation(t, "EvidenceReport", "note", element.getNote().get(i), i);
11254    }
11255    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
11256      composeRelatedArtifact(t, "EvidenceReport", "relatedArtifact", element.getRelatedArtifact().get(i), i);
11257    }
11258    if (element.hasSubject()) {
11259      composeEvidenceReportSubjectComponent(t, "EvidenceReport", "subject", element.getSubject(), -1);
11260    }
11261    if (element.hasPublisherElement()) {
11262      composeString(t, "EvidenceReport", "publisher", element.getPublisherElement(), -1);
11263    }
11264    for (int i = 0; i < element.getContact().size(); i++) {
11265      composeContactDetail(t, "EvidenceReport", "contact", element.getContact().get(i), i);
11266    }
11267    for (int i = 0; i < element.getAuthor().size(); i++) {
11268      composeContactDetail(t, "EvidenceReport", "author", element.getAuthor().get(i), i);
11269    }
11270    for (int i = 0; i < element.getEditor().size(); i++) {
11271      composeContactDetail(t, "EvidenceReport", "editor", element.getEditor().get(i), i);
11272    }
11273    for (int i = 0; i < element.getReviewer().size(); i++) {
11274      composeContactDetail(t, "EvidenceReport", "reviewer", element.getReviewer().get(i), i);
11275    }
11276    for (int i = 0; i < element.getEndorser().size(); i++) {
11277      composeContactDetail(t, "EvidenceReport", "endorser", element.getEndorser().get(i), i);
11278    }
11279    for (int i = 0; i < element.getRelatesTo().size(); i++) {
11280      composeEvidenceReportRelatesToComponent(t, "EvidenceReport", "relatesTo", element.getRelatesTo().get(i), i);
11281    }
11282    for (int i = 0; i < element.getSection().size(); i++) {
11283      composeEvidenceReportSectionComponent(t, "EvidenceReport", "section", element.getSection().get(i), i);
11284    }
11285  }
11286
11287  protected void composeEvidenceReportSubjectComponent(Complex parent, String parentType, String name, EvidenceReport.EvidenceReportSubjectComponent element, int index) {
11288    if (element == null) 
11289      return;
11290    Complex t;
11291    if (Utilities.noString(parentType))
11292      t = parent;
11293    else {
11294      t = parent.predicate("fhir:"+parentType+'.'+name);
11295    }
11296    composeBackboneElement(t, "subject", name, element, index);
11297    for (int i = 0; i < element.getCharacteristic().size(); i++) {
11298      composeEvidenceReportSubjectCharacteristicComponent(t, "EvidenceReportSubjectComponent", "characteristic", element.getCharacteristic().get(i), i);
11299    }
11300    for (int i = 0; i < element.getNote().size(); i++) {
11301      composeAnnotation(t, "EvidenceReportSubjectComponent", "note", element.getNote().get(i), i);
11302    }
11303  }
11304
11305  protected void composeEvidenceReportSubjectCharacteristicComponent(Complex parent, String parentType, String name, EvidenceReport.EvidenceReportSubjectCharacteristicComponent element, int index) {
11306    if (element == null) 
11307      return;
11308    Complex t;
11309    if (Utilities.noString(parentType))
11310      t = parent;
11311    else {
11312      t = parent.predicate("fhir:"+parentType+'.'+name);
11313    }
11314    composeBackboneElement(t, "characteristic", name, element, index);
11315    if (element.hasCode()) {
11316      composeCodeableConcept(t, "EvidenceReportSubjectCharacteristicComponent", "code", element.getCode(), -1);
11317    }
11318    if (element.hasValue()) {
11319      composeType(t, "EvidenceReportSubjectCharacteristicComponent", "value", element.getValue(), -1);
11320    }
11321    if (element.hasExcludeElement()) {
11322      composeBoolean(t, "EvidenceReportSubjectCharacteristicComponent", "exclude", element.getExcludeElement(), -1);
11323    }
11324    if (element.hasPeriod()) {
11325      composePeriod(t, "EvidenceReportSubjectCharacteristicComponent", "period", element.getPeriod(), -1);
11326    }
11327  }
11328
11329  protected void composeEvidenceReportRelatesToComponent(Complex parent, String parentType, String name, EvidenceReport.EvidenceReportRelatesToComponent element, int index) {
11330    if (element == null) 
11331      return;
11332    Complex t;
11333    if (Utilities.noString(parentType))
11334      t = parent;
11335    else {
11336      t = parent.predicate("fhir:"+parentType+'.'+name);
11337    }
11338    composeBackboneElement(t, "relatesTo", name, element, index);
11339    if (element.hasCodeElement()) {
11340      composeEnum(t, "EvidenceReportRelatesToComponent", "code", element.getCodeElement(), -1);
11341    }
11342    if (element.hasTarget()) {
11343      composeEvidenceReportRelatesToTargetComponent(t, "EvidenceReportRelatesToComponent", "target", element.getTarget(), -1);
11344    }
11345  }
11346
11347  protected void composeEvidenceReportRelatesToTargetComponent(Complex parent, String parentType, String name, EvidenceReport.EvidenceReportRelatesToTargetComponent element, int index) {
11348    if (element == null) 
11349      return;
11350    Complex t;
11351    if (Utilities.noString(parentType))
11352      t = parent;
11353    else {
11354      t = parent.predicate("fhir:"+parentType+'.'+name);
11355    }
11356    composeBackboneElement(t, "target", name, element, index);
11357    if (element.hasUrlElement()) {
11358      composeUri(t, "EvidenceReportRelatesToTargetComponent", "url", element.getUrlElement(), -1);
11359    }
11360    if (element.hasIdentifier()) {
11361      composeIdentifier(t, "EvidenceReportRelatesToTargetComponent", "identifier", element.getIdentifier(), -1);
11362    }
11363    if (element.hasDisplayElement()) {
11364      composeMarkdown(t, "EvidenceReportRelatesToTargetComponent", "display", element.getDisplayElement(), -1);
11365    }
11366    if (element.hasResource()) {
11367      composeReference(t, "EvidenceReportRelatesToTargetComponent", "resource", element.getResource(), -1);
11368    }
11369  }
11370
11371  protected void composeEvidenceReportSectionComponent(Complex parent, String parentType, String name, EvidenceReport.SectionComponent element, int index) {
11372    if (element == null) 
11373      return;
11374    Complex t;
11375    if (Utilities.noString(parentType))
11376      t = parent;
11377    else {
11378      t = parent.predicate("fhir:"+parentType+'.'+name);
11379    }
11380    composeBackboneElement(t, "section", name, element, index);
11381    if (element.hasTitleElement()) {
11382      composeString(t, "SectionComponent", "title", element.getTitleElement(), -1);
11383    }
11384    if (element.hasFocus()) {
11385      composeCodeableConcept(t, "SectionComponent", "focus", element.getFocus(), -1);
11386    }
11387    if (element.hasFocusReference()) {
11388      composeReference(t, "SectionComponent", "focusReference", element.getFocusReference(), -1);
11389    }
11390    for (int i = 0; i < element.getAuthor().size(); i++) {
11391      composeReference(t, "SectionComponent", "author", element.getAuthor().get(i), i);
11392    }
11393    if (element.hasText()) {
11394      composeNarrative(t, "SectionComponent", "text", element.getText(), -1);
11395    }
11396    if (element.hasModeElement()) {
11397      composeEnum(t, "SectionComponent", "mode", element.getModeElement(), -1);
11398    }
11399    if (element.hasOrderedBy()) {
11400      composeCodeableConcept(t, "SectionComponent", "orderedBy", element.getOrderedBy(), -1);
11401    }
11402    for (int i = 0; i < element.getEntryClassifier().size(); i++) {
11403      composeCodeableConcept(t, "SectionComponent", "entryClassifier", element.getEntryClassifier().get(i), i);
11404    }
11405    for (int i = 0; i < element.getEntryReference().size(); i++) {
11406      composeReference(t, "SectionComponent", "entryReference", element.getEntryReference().get(i), i);
11407    }
11408    for (int i = 0; i < element.getEntryQuantity().size(); i++) {
11409      composeQuantity(t, "SectionComponent", "entryQuantity", element.getEntryQuantity().get(i), i);
11410    }
11411    if (element.hasEmptyReason()) {
11412      composeCodeableConcept(t, "SectionComponent", "emptyReason", element.getEmptyReason(), -1);
11413    }
11414    for (int i = 0; i < element.getSection().size(); i++) {
11415      composeEvidenceReportSectionComponent(t, "SectionComponent", "section", element.getSection().get(i), i);
11416    }
11417  }
11418
11419  protected void composeEvidenceVariable(Complex parent, String parentType, String name, EvidenceVariable element, int index) {
11420    if (element == null) 
11421      return;
11422    Complex t;
11423    if (Utilities.noString(parentType))
11424      t = parent;
11425    else {
11426      t = parent.predicate("fhir:"+parentType+'.'+name);
11427    }
11428    composeMetadataResource(t, "EvidenceVariable", name, element, index);
11429    if (element.hasUrlElement()) {
11430      composeUri(t, "EvidenceVariable", "url", element.getUrlElement(), -1);
11431    }
11432    for (int i = 0; i < element.getIdentifier().size(); i++) {
11433      composeIdentifier(t, "EvidenceVariable", "identifier", element.getIdentifier().get(i), i);
11434    }
11435    if (element.hasVersionElement()) {
11436      composeString(t, "EvidenceVariable", "version", element.getVersionElement(), -1);
11437    }
11438    if (element.hasNameElement()) {
11439      composeString(t, "EvidenceVariable", "name", element.getNameElement(), -1);
11440    }
11441    if (element.hasTitleElement()) {
11442      composeString(t, "EvidenceVariable", "title", element.getTitleElement(), -1);
11443    }
11444    if (element.hasShortTitleElement()) {
11445      composeString(t, "EvidenceVariable", "shortTitle", element.getShortTitleElement(), -1);
11446    }
11447    if (element.hasSubtitleElement()) {
11448      composeString(t, "EvidenceVariable", "subtitle", element.getSubtitleElement(), -1);
11449    }
11450    if (element.hasStatusElement()) {
11451      composeEnum(t, "EvidenceVariable", "status", element.getStatusElement(), -1);
11452    }
11453    if (element.hasDateElement()) {
11454      composeDateTime(t, "EvidenceVariable", "date", element.getDateElement(), -1);
11455    }
11456    if (element.hasDescriptionElement()) {
11457      composeMarkdown(t, "EvidenceVariable", "description", element.getDescriptionElement(), -1);
11458    }
11459    for (int i = 0; i < element.getNote().size(); i++) {
11460      composeAnnotation(t, "EvidenceVariable", "note", element.getNote().get(i), i);
11461    }
11462    for (int i = 0; i < element.getUseContext().size(); i++) {
11463      composeUsageContext(t, "EvidenceVariable", "useContext", element.getUseContext().get(i), i);
11464    }
11465    if (element.hasPublisherElement()) {
11466      composeString(t, "EvidenceVariable", "publisher", element.getPublisherElement(), -1);
11467    }
11468    for (int i = 0; i < element.getContact().size(); i++) {
11469      composeContactDetail(t, "EvidenceVariable", "contact", element.getContact().get(i), i);
11470    }
11471    for (int i = 0; i < element.getAuthor().size(); i++) {
11472      composeContactDetail(t, "EvidenceVariable", "author", element.getAuthor().get(i), i);
11473    }
11474    for (int i = 0; i < element.getEditor().size(); i++) {
11475      composeContactDetail(t, "EvidenceVariable", "editor", element.getEditor().get(i), i);
11476    }
11477    for (int i = 0; i < element.getReviewer().size(); i++) {
11478      composeContactDetail(t, "EvidenceVariable", "reviewer", element.getReviewer().get(i), i);
11479    }
11480    for (int i = 0; i < element.getEndorser().size(); i++) {
11481      composeContactDetail(t, "EvidenceVariable", "endorser", element.getEndorser().get(i), i);
11482    }
11483    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
11484      composeRelatedArtifact(t, "EvidenceVariable", "relatedArtifact", element.getRelatedArtifact().get(i), i);
11485    }
11486    if (element.hasActualElement()) {
11487      composeBoolean(t, "EvidenceVariable", "actual", element.getActualElement(), -1);
11488    }
11489    if (element.hasCharacteristicCombination()) {
11490      composeEvidenceVariableCharacteristicCombinationComponent(t, "EvidenceVariable", "characteristicCombination", element.getCharacteristicCombination(), -1);
11491    }
11492    for (int i = 0; i < element.getCharacteristic().size(); i++) {
11493      composeEvidenceVariableCharacteristicComponent(t, "EvidenceVariable", "characteristic", element.getCharacteristic().get(i), i);
11494    }
11495    if (element.hasHandlingElement()) {
11496      composeEnum(t, "EvidenceVariable", "handling", element.getHandlingElement(), -1);
11497    }
11498    for (int i = 0; i < element.getCategory().size(); i++) {
11499      composeEvidenceVariableCategoryComponent(t, "EvidenceVariable", "category", element.getCategory().get(i), i);
11500    }
11501  }
11502
11503  protected void composeEvidenceVariableCharacteristicCombinationComponent(Complex parent, String parentType, String name, EvidenceVariable.EvidenceVariableCharacteristicCombinationComponent element, int index) {
11504    if (element == null) 
11505      return;
11506    Complex t;
11507    if (Utilities.noString(parentType))
11508      t = parent;
11509    else {
11510      t = parent.predicate("fhir:"+parentType+'.'+name);
11511    }
11512    composeBackboneElement(t, "characteristicCombination", name, element, index);
11513    if (element.hasCodeElement()) {
11514      composeEnum(t, "EvidenceVariableCharacteristicCombinationComponent", "code", element.getCodeElement(), -1);
11515    }
11516    if (element.hasThresholdElement()) {
11517      composePositiveInt(t, "EvidenceVariableCharacteristicCombinationComponent", "threshold", element.getThresholdElement(), -1);
11518    }
11519  }
11520
11521  protected void composeEvidenceVariableCharacteristicComponent(Complex parent, String parentType, String name, EvidenceVariable.EvidenceVariableCharacteristicComponent 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:"+parentType+'.'+name);
11529    }
11530    composeBackboneElement(t, "characteristic", name, element, index);
11531    if (element.hasDescriptionElement()) {
11532      composeString(t, "EvidenceVariableCharacteristicComponent", "description", element.getDescriptionElement(), -1);
11533    }
11534    if (element.hasType()) {
11535      composeCodeableConcept(t, "EvidenceVariableCharacteristicComponent", "type", element.getType(), -1);
11536    }
11537    if (element.hasDefinition()) {
11538      composeType(t, "EvidenceVariableCharacteristicComponent", "definition", element.getDefinition(), -1);
11539    }
11540    if (element.hasMethod()) {
11541      composeCodeableConcept(t, "EvidenceVariableCharacteristicComponent", "method", element.getMethod(), -1);
11542    }
11543    if (element.hasDevice()) {
11544      composeReference(t, "EvidenceVariableCharacteristicComponent", "device", element.getDevice(), -1);
11545    }
11546    if (element.hasExcludeElement()) {
11547      composeBoolean(t, "EvidenceVariableCharacteristicComponent", "exclude", element.getExcludeElement(), -1);
11548    }
11549    for (int i = 0; i < element.getTimeFromEvent().size(); i++) {
11550      composeEvidenceVariableCharacteristicTimeFromEventComponent(t, "EvidenceVariableCharacteristicComponent", "timeFromEvent", element.getTimeFromEvent().get(i), i);
11551    }
11552    if (element.hasGroupMeasureElement()) {
11553      composeEnum(t, "EvidenceVariableCharacteristicComponent", "groupMeasure", element.getGroupMeasureElement(), -1);
11554    }
11555  }
11556
11557  protected void composeEvidenceVariableCharacteristicTimeFromEventComponent(Complex parent, String parentType, String name, EvidenceVariable.EvidenceVariableCharacteristicTimeFromEventComponent element, int index) {
11558    if (element == null) 
11559      return;
11560    Complex t;
11561    if (Utilities.noString(parentType))
11562      t = parent;
11563    else {
11564      t = parent.predicate("fhir:"+parentType+'.'+name);
11565    }
11566    composeBackboneElement(t, "timeFromEvent", name, element, index);
11567    if (element.hasDescriptionElement()) {
11568      composeString(t, "EvidenceVariableCharacteristicTimeFromEventComponent", "description", element.getDescriptionElement(), -1);
11569    }
11570    if (element.hasEvent()) {
11571      composeCodeableConcept(t, "EvidenceVariableCharacteristicTimeFromEventComponent", "event", element.getEvent(), -1);
11572    }
11573    if (element.hasQuantity()) {
11574      composeQuantity(t, "EvidenceVariableCharacteristicTimeFromEventComponent", "quantity", element.getQuantity(), -1);
11575    }
11576    if (element.hasRange()) {
11577      composeRange(t, "EvidenceVariableCharacteristicTimeFromEventComponent", "range", element.getRange(), -1);
11578    }
11579    for (int i = 0; i < element.getNote().size(); i++) {
11580      composeAnnotation(t, "EvidenceVariableCharacteristicTimeFromEventComponent", "note", element.getNote().get(i), i);
11581    }
11582  }
11583
11584  protected void composeEvidenceVariableCategoryComponent(Complex parent, String parentType, String name, EvidenceVariable.EvidenceVariableCategoryComponent element, int index) {
11585    if (element == null) 
11586      return;
11587    Complex t;
11588    if (Utilities.noString(parentType))
11589      t = parent;
11590    else {
11591      t = parent.predicate("fhir:"+parentType+'.'+name);
11592    }
11593    composeBackboneElement(t, "category", name, element, index);
11594    if (element.hasNameElement()) {
11595      composeString(t, "EvidenceVariableCategoryComponent", "name", element.getNameElement(), -1);
11596    }
11597    if (element.hasValue()) {
11598      composeType(t, "EvidenceVariableCategoryComponent", "value", element.getValue(), -1);
11599    }
11600  }
11601
11602  protected void composeExampleScenario(Complex parent, String parentType, String name, ExampleScenario element, int index) {
11603    if (element == null) 
11604      return;
11605    Complex t;
11606    if (Utilities.noString(parentType))
11607      t = parent;
11608    else {
11609      t = parent.predicate("fhir:"+parentType+'.'+name);
11610    }
11611    composeCanonicalResource(t, "ExampleScenario", name, element, index);
11612    if (element.hasUrlElement()) {
11613      composeUri(t, "ExampleScenario", "url", element.getUrlElement(), -1);
11614    }
11615    for (int i = 0; i < element.getIdentifier().size(); i++) {
11616      composeIdentifier(t, "ExampleScenario", "identifier", element.getIdentifier().get(i), i);
11617    }
11618    if (element.hasVersionElement()) {
11619      composeString(t, "ExampleScenario", "version", element.getVersionElement(), -1);
11620    }
11621    if (element.hasNameElement()) {
11622      composeString(t, "ExampleScenario", "name", element.getNameElement(), -1);
11623    }
11624    if (element.hasStatusElement()) {
11625      composeEnum(t, "ExampleScenario", "status", element.getStatusElement(), -1);
11626    }
11627    if (element.hasExperimentalElement()) {
11628      composeBoolean(t, "ExampleScenario", "experimental", element.getExperimentalElement(), -1);
11629    }
11630    if (element.hasDateElement()) {
11631      composeDateTime(t, "ExampleScenario", "date", element.getDateElement(), -1);
11632    }
11633    if (element.hasPublisherElement()) {
11634      composeString(t, "ExampleScenario", "publisher", element.getPublisherElement(), -1);
11635    }
11636    for (int i = 0; i < element.getContact().size(); i++) {
11637      composeContactDetail(t, "ExampleScenario", "contact", element.getContact().get(i), i);
11638    }
11639    for (int i = 0; i < element.getUseContext().size(); i++) {
11640      composeUsageContext(t, "ExampleScenario", "useContext", element.getUseContext().get(i), i);
11641    }
11642    for (int i = 0; i < element.getJurisdiction().size(); i++) {
11643      composeCodeableConcept(t, "ExampleScenario", "jurisdiction", element.getJurisdiction().get(i), i);
11644    }
11645    if (element.hasPurposeElement()) {
11646      composeMarkdown(t, "ExampleScenario", "purpose", element.getPurposeElement(), -1);
11647    }
11648    if (element.hasCopyrightElement()) {
11649      composeMarkdown(t, "ExampleScenario", "copyright", element.getCopyrightElement(), -1);
11650    }
11651    for (int i = 0; i < element.getActor().size(); i++) {
11652      composeExampleScenarioActorComponent(t, "ExampleScenario", "actor", element.getActor().get(i), i);
11653    }
11654    for (int i = 0; i < element.getInstance().size(); i++) {
11655      composeExampleScenarioInstanceComponent(t, "ExampleScenario", "instance", element.getInstance().get(i), i);
11656    }
11657    for (int i = 0; i < element.getProcess().size(); i++) {
11658      composeExampleScenarioProcessComponent(t, "ExampleScenario", "process", element.getProcess().get(i), i);
11659    }
11660    for (int i = 0; i < element.getWorkflow().size(); i++) {
11661      composeCanonical(t, "ExampleScenario", "workflow", element.getWorkflow().get(i), i);
11662    }
11663  }
11664
11665  protected void composeExampleScenarioActorComponent(Complex parent, String parentType, String name, ExampleScenario.ExampleScenarioActorComponent element, int index) {
11666    if (element == null) 
11667      return;
11668    Complex t;
11669    if (Utilities.noString(parentType))
11670      t = parent;
11671    else {
11672      t = parent.predicate("fhir:"+parentType+'.'+name);
11673    }
11674    composeBackboneElement(t, "actor", name, element, index);
11675    if (element.hasActorIdElement()) {
11676      composeString(t, "ExampleScenarioActorComponent", "actorId", element.getActorIdElement(), -1);
11677    }
11678    if (element.hasTypeElement()) {
11679      composeEnum(t, "ExampleScenarioActorComponent", "type", element.getTypeElement(), -1);
11680    }
11681    if (element.hasNameElement()) {
11682      composeString(t, "ExampleScenarioActorComponent", "name", element.getNameElement(), -1);
11683    }
11684    if (element.hasDescriptionElement()) {
11685      composeMarkdown(t, "ExampleScenarioActorComponent", "description", element.getDescriptionElement(), -1);
11686    }
11687  }
11688
11689  protected void composeExampleScenarioInstanceComponent(Complex parent, String parentType, String name, ExampleScenario.ExampleScenarioInstanceComponent element, int index) {
11690    if (element == null) 
11691      return;
11692    Complex t;
11693    if (Utilities.noString(parentType))
11694      t = parent;
11695    else {
11696      t = parent.predicate("fhir:"+parentType+'.'+name);
11697    }
11698    composeBackboneElement(t, "instance", name, element, index);
11699    if (element.hasResourceIdElement()) {
11700      composeString(t, "ExampleScenarioInstanceComponent", "resourceId", element.getResourceIdElement(), -1);
11701    }
11702    if (element.hasResourceTypeElement()) {
11703      composeCode(t, "ExampleScenarioInstanceComponent", "resourceType", element.getResourceTypeElement(), -1);
11704    }
11705    if (element.hasNameElement()) {
11706      composeString(t, "ExampleScenarioInstanceComponent", "name", element.getNameElement(), -1);
11707    }
11708    if (element.hasDescriptionElement()) {
11709      composeMarkdown(t, "ExampleScenarioInstanceComponent", "description", element.getDescriptionElement(), -1);
11710    }
11711    for (int i = 0; i < element.getVersion().size(); i++) {
11712      composeExampleScenarioInstanceVersionComponent(t, "ExampleScenarioInstanceComponent", "version", element.getVersion().get(i), i);
11713    }
11714    for (int i = 0; i < element.getContainedInstance().size(); i++) {
11715      composeExampleScenarioInstanceContainedInstanceComponent(t, "ExampleScenarioInstanceComponent", "containedInstance", element.getContainedInstance().get(i), i);
11716    }
11717  }
11718
11719  protected void composeExampleScenarioInstanceVersionComponent(Complex parent, String parentType, String name, ExampleScenario.ExampleScenarioInstanceVersionComponent element, int index) {
11720    if (element == null) 
11721      return;
11722    Complex t;
11723    if (Utilities.noString(parentType))
11724      t = parent;
11725    else {
11726      t = parent.predicate("fhir:"+parentType+'.'+name);
11727    }
11728    composeBackboneElement(t, "version", name, element, index);
11729    if (element.hasVersionIdElement()) {
11730      composeString(t, "ExampleScenarioInstanceVersionComponent", "versionId", element.getVersionIdElement(), -1);
11731    }
11732    if (element.hasDescriptionElement()) {
11733      composeMarkdown(t, "ExampleScenarioInstanceVersionComponent", "description", element.getDescriptionElement(), -1);
11734    }
11735  }
11736
11737  protected void composeExampleScenarioInstanceContainedInstanceComponent(Complex parent, String parentType, String name, ExampleScenario.ExampleScenarioInstanceContainedInstanceComponent element, int index) {
11738    if (element == null) 
11739      return;
11740    Complex t;
11741    if (Utilities.noString(parentType))
11742      t = parent;
11743    else {
11744      t = parent.predicate("fhir:"+parentType+'.'+name);
11745    }
11746    composeBackboneElement(t, "containedInstance", name, element, index);
11747    if (element.hasResourceIdElement()) {
11748      composeString(t, "ExampleScenarioInstanceContainedInstanceComponent", "resourceId", element.getResourceIdElement(), -1);
11749    }
11750    if (element.hasVersionIdElement()) {
11751      composeString(t, "ExampleScenarioInstanceContainedInstanceComponent", "versionId", element.getVersionIdElement(), -1);
11752    }
11753  }
11754
11755  protected void composeExampleScenarioProcessComponent(Complex parent, String parentType, String name, ExampleScenario.ExampleScenarioProcessComponent element, int index) {
11756    if (element == null) 
11757      return;
11758    Complex t;
11759    if (Utilities.noString(parentType))
11760      t = parent;
11761    else {
11762      t = parent.predicate("fhir:"+parentType+'.'+name);
11763    }
11764    composeBackboneElement(t, "process", name, element, index);
11765    if (element.hasTitleElement()) {
11766      composeString(t, "ExampleScenarioProcessComponent", "title", element.getTitleElement(), -1);
11767    }
11768    if (element.hasDescriptionElement()) {
11769      composeMarkdown(t, "ExampleScenarioProcessComponent", "description", element.getDescriptionElement(), -1);
11770    }
11771    if (element.hasPreConditionsElement()) {
11772      composeMarkdown(t, "ExampleScenarioProcessComponent", "preConditions", element.getPreConditionsElement(), -1);
11773    }
11774    if (element.hasPostConditionsElement()) {
11775      composeMarkdown(t, "ExampleScenarioProcessComponent", "postConditions", element.getPostConditionsElement(), -1);
11776    }
11777    for (int i = 0; i < element.getStep().size(); i++) {
11778      composeExampleScenarioProcessStepComponent(t, "ExampleScenarioProcessComponent", "step", element.getStep().get(i), i);
11779    }
11780  }
11781
11782  protected void composeExampleScenarioProcessStepComponent(Complex parent, String parentType, String name, ExampleScenario.ExampleScenarioProcessStepComponent element, int index) {
11783    if (element == null) 
11784      return;
11785    Complex t;
11786    if (Utilities.noString(parentType))
11787      t = parent;
11788    else {
11789      t = parent.predicate("fhir:"+parentType+'.'+name);
11790    }
11791    composeBackboneElement(t, "step", name, element, index);
11792    for (int i = 0; i < element.getProcess().size(); i++) {
11793      composeExampleScenarioProcessComponent(t, "ExampleScenarioProcessStepComponent", "process", element.getProcess().get(i), i);
11794    }
11795    if (element.hasPauseElement()) {
11796      composeBoolean(t, "ExampleScenarioProcessStepComponent", "pause", element.getPauseElement(), -1);
11797    }
11798    if (element.hasOperation()) {
11799      composeExampleScenarioProcessStepOperationComponent(t, "ExampleScenarioProcessStepComponent", "operation", element.getOperation(), -1);
11800    }
11801    for (int i = 0; i < element.getAlternative().size(); i++) {
11802      composeExampleScenarioProcessStepAlternativeComponent(t, "ExampleScenarioProcessStepComponent", "alternative", element.getAlternative().get(i), i);
11803    }
11804  }
11805
11806  protected void composeExampleScenarioProcessStepOperationComponent(Complex parent, String parentType, String name, ExampleScenario.ExampleScenarioProcessStepOperationComponent element, int index) {
11807    if (element == null) 
11808      return;
11809    Complex t;
11810    if (Utilities.noString(parentType))
11811      t = parent;
11812    else {
11813      t = parent.predicate("fhir:"+parentType+'.'+name);
11814    }
11815    composeBackboneElement(t, "operation", name, element, index);
11816    if (element.hasNumberElement()) {
11817      composeString(t, "ExampleScenarioProcessStepOperationComponent", "number", element.getNumberElement(), -1);
11818    }
11819    if (element.hasTypeElement()) {
11820      composeString(t, "ExampleScenarioProcessStepOperationComponent", "type", element.getTypeElement(), -1);
11821    }
11822    if (element.hasNameElement()) {
11823      composeString(t, "ExampleScenarioProcessStepOperationComponent", "name", element.getNameElement(), -1);
11824    }
11825    if (element.hasInitiatorElement()) {
11826      composeString(t, "ExampleScenarioProcessStepOperationComponent", "initiator", element.getInitiatorElement(), -1);
11827    }
11828    if (element.hasReceiverElement()) {
11829      composeString(t, "ExampleScenarioProcessStepOperationComponent", "receiver", element.getReceiverElement(), -1);
11830    }
11831    if (element.hasDescriptionElement()) {
11832      composeMarkdown(t, "ExampleScenarioProcessStepOperationComponent", "description", element.getDescriptionElement(), -1);
11833    }
11834    if (element.hasInitiatorActiveElement()) {
11835      composeBoolean(t, "ExampleScenarioProcessStepOperationComponent", "initiatorActive", element.getInitiatorActiveElement(), -1);
11836    }
11837    if (element.hasReceiverActiveElement()) {
11838      composeBoolean(t, "ExampleScenarioProcessStepOperationComponent", "receiverActive", element.getReceiverActiveElement(), -1);
11839    }
11840    if (element.hasRequest()) {
11841      composeExampleScenarioInstanceContainedInstanceComponent(t, "ExampleScenarioProcessStepOperationComponent", "request", element.getRequest(), -1);
11842    }
11843    if (element.hasResponse()) {
11844      composeExampleScenarioInstanceContainedInstanceComponent(t, "ExampleScenarioProcessStepOperationComponent", "response", element.getResponse(), -1);
11845    }
11846  }
11847
11848  protected void composeExampleScenarioProcessStepAlternativeComponent(Complex parent, String parentType, String name, ExampleScenario.ExampleScenarioProcessStepAlternativeComponent element, int index) {
11849    if (element == null) 
11850      return;
11851    Complex t;
11852    if (Utilities.noString(parentType))
11853      t = parent;
11854    else {
11855      t = parent.predicate("fhir:"+parentType+'.'+name);
11856    }
11857    composeBackboneElement(t, "alternative", name, element, index);
11858    if (element.hasTitleElement()) {
11859      composeString(t, "ExampleScenarioProcessStepAlternativeComponent", "title", element.getTitleElement(), -1);
11860    }
11861    if (element.hasDescriptionElement()) {
11862      composeMarkdown(t, "ExampleScenarioProcessStepAlternativeComponent", "description", element.getDescriptionElement(), -1);
11863    }
11864    for (int i = 0; i < element.getStep().size(); i++) {
11865      composeExampleScenarioProcessStepComponent(t, "ExampleScenarioProcessStepAlternativeComponent", "step", element.getStep().get(i), i);
11866    }
11867  }
11868
11869  protected void composeExplanationOfBenefit(Complex parent, String parentType, String name, ExplanationOfBenefit element, int index) {
11870    if (element == null) 
11871      return;
11872    Complex t;
11873    if (Utilities.noString(parentType))
11874      t = parent;
11875    else {
11876      t = parent.predicate("fhir:"+parentType+'.'+name);
11877    }
11878    composeDomainResource(t, "ExplanationOfBenefit", name, element, index);
11879    for (int i = 0; i < element.getIdentifier().size(); i++) {
11880      composeIdentifier(t, "ExplanationOfBenefit", "identifier", element.getIdentifier().get(i), i);
11881    }
11882    if (element.hasStatusElement()) {
11883      composeEnum(t, "ExplanationOfBenefit", "status", element.getStatusElement(), -1);
11884    }
11885    if (element.hasType()) {
11886      composeCodeableConcept(t, "ExplanationOfBenefit", "type", element.getType(), -1);
11887    }
11888    if (element.hasSubType()) {
11889      composeCodeableConcept(t, "ExplanationOfBenefit", "subType", element.getSubType(), -1);
11890    }
11891    if (element.hasUseElement()) {
11892      composeEnum(t, "ExplanationOfBenefit", "use", element.getUseElement(), -1);
11893    }
11894    if (element.hasPatient()) {
11895      composeReference(t, "ExplanationOfBenefit", "patient", element.getPatient(), -1);
11896    }
11897    if (element.hasBillablePeriod()) {
11898      composePeriod(t, "ExplanationOfBenefit", "billablePeriod", element.getBillablePeriod(), -1);
11899    }
11900    if (element.hasCreatedElement()) {
11901      composeDateTime(t, "ExplanationOfBenefit", "created", element.getCreatedElement(), -1);
11902    }
11903    if (element.hasEnterer()) {
11904      composeReference(t, "ExplanationOfBenefit", "enterer", element.getEnterer(), -1);
11905    }
11906    if (element.hasInsurer()) {
11907      composeReference(t, "ExplanationOfBenefit", "insurer", element.getInsurer(), -1);
11908    }
11909    if (element.hasProvider()) {
11910      composeReference(t, "ExplanationOfBenefit", "provider", element.getProvider(), -1);
11911    }
11912    if (element.hasPriority()) {
11913      composeCodeableConcept(t, "ExplanationOfBenefit", "priority", element.getPriority(), -1);
11914    }
11915    if (element.hasFundsReserveRequested()) {
11916      composeCodeableConcept(t, "ExplanationOfBenefit", "fundsReserveRequested", element.getFundsReserveRequested(), -1);
11917    }
11918    if (element.hasFundsReserve()) {
11919      composeCodeableConcept(t, "ExplanationOfBenefit", "fundsReserve", element.getFundsReserve(), -1);
11920    }
11921    for (int i = 0; i < element.getRelated().size(); i++) {
11922      composeExplanationOfBenefitRelatedClaimComponent(t, "ExplanationOfBenefit", "related", element.getRelated().get(i), i);
11923    }
11924    if (element.hasPrescription()) {
11925      composeReference(t, "ExplanationOfBenefit", "prescription", element.getPrescription(), -1);
11926    }
11927    if (element.hasOriginalPrescription()) {
11928      composeReference(t, "ExplanationOfBenefit", "originalPrescription", element.getOriginalPrescription(), -1);
11929    }
11930    if (element.hasPayee()) {
11931      composeExplanationOfBenefitPayeeComponent(t, "ExplanationOfBenefit", "payee", element.getPayee(), -1);
11932    }
11933    if (element.hasReferral()) {
11934      composeReference(t, "ExplanationOfBenefit", "referral", element.getReferral(), -1);
11935    }
11936    if (element.hasFacility()) {
11937      composeReference(t, "ExplanationOfBenefit", "facility", element.getFacility(), -1);
11938    }
11939    if (element.hasClaim()) {
11940      composeReference(t, "ExplanationOfBenefit", "claim", element.getClaim(), -1);
11941    }
11942    if (element.hasClaimResponse()) {
11943      composeReference(t, "ExplanationOfBenefit", "claimResponse", element.getClaimResponse(), -1);
11944    }
11945    if (element.hasOutcomeElement()) {
11946      composeEnum(t, "ExplanationOfBenefit", "outcome", element.getOutcomeElement(), -1);
11947    }
11948    if (element.hasDispositionElement()) {
11949      composeString(t, "ExplanationOfBenefit", "disposition", element.getDispositionElement(), -1);
11950    }
11951    for (int i = 0; i < element.getPreAuthRef().size(); i++) {
11952      composeString(t, "ExplanationOfBenefit", "preAuthRef", element.getPreAuthRef().get(i), i);
11953    }
11954    for (int i = 0; i < element.getPreAuthRefPeriod().size(); i++) {
11955      composePeriod(t, "ExplanationOfBenefit", "preAuthRefPeriod", element.getPreAuthRefPeriod().get(i), i);
11956    }
11957    for (int i = 0; i < element.getCareTeam().size(); i++) {
11958      composeExplanationOfBenefitCareTeamComponent(t, "ExplanationOfBenefit", "careTeam", element.getCareTeam().get(i), i);
11959    }
11960    for (int i = 0; i < element.getSupportingInfo().size(); i++) {
11961      composeExplanationOfBenefitSupportingInformationComponent(t, "ExplanationOfBenefit", "supportingInfo", element.getSupportingInfo().get(i), i);
11962    }
11963    for (int i = 0; i < element.getDiagnosis().size(); i++) {
11964      composeExplanationOfBenefitDiagnosisComponent(t, "ExplanationOfBenefit", "diagnosis", element.getDiagnosis().get(i), i);
11965    }
11966    for (int i = 0; i < element.getProcedure().size(); i++) {
11967      composeExplanationOfBenefitProcedureComponent(t, "ExplanationOfBenefit", "procedure", element.getProcedure().get(i), i);
11968    }
11969    if (element.hasPrecedenceElement()) {
11970      composePositiveInt(t, "ExplanationOfBenefit", "precedence", element.getPrecedenceElement(), -1);
11971    }
11972    for (int i = 0; i < element.getInsurance().size(); i++) {
11973      composeExplanationOfBenefitInsuranceComponent(t, "ExplanationOfBenefit", "insurance", element.getInsurance().get(i), i);
11974    }
11975    if (element.hasAccident()) {
11976      composeExplanationOfBenefitAccidentComponent(t, "ExplanationOfBenefit", "accident", element.getAccident(), -1);
11977    }
11978    for (int i = 0; i < element.getItem().size(); i++) {
11979      composeExplanationOfBenefitItemComponent(t, "ExplanationOfBenefit", "item", element.getItem().get(i), i);
11980    }
11981    for (int i = 0; i < element.getAddItem().size(); i++) {
11982      composeExplanationOfBenefitAddedItemComponent(t, "ExplanationOfBenefit", "addItem", element.getAddItem().get(i), i);
11983    }
11984    for (int i = 0; i < element.getAdjudication().size(); i++) {
11985      composeExplanationOfBenefitAdjudicationComponent(t, "ExplanationOfBenefit", "adjudication", element.getAdjudication().get(i), i);
11986    }
11987    for (int i = 0; i < element.getTotal().size(); i++) {
11988      composeExplanationOfBenefitTotalComponent(t, "ExplanationOfBenefit", "total", element.getTotal().get(i), i);
11989    }
11990    if (element.hasPayment()) {
11991      composeExplanationOfBenefitPaymentComponent(t, "ExplanationOfBenefit", "payment", element.getPayment(), -1);
11992    }
11993    if (element.hasFormCode()) {
11994      composeCodeableConcept(t, "ExplanationOfBenefit", "formCode", element.getFormCode(), -1);
11995    }
11996    if (element.hasForm()) {
11997      composeAttachment(t, "ExplanationOfBenefit", "form", element.getForm(), -1);
11998    }
11999    for (int i = 0; i < element.getProcessNote().size(); i++) {
12000      composeExplanationOfBenefitNoteComponent(t, "ExplanationOfBenefit", "processNote", element.getProcessNote().get(i), i);
12001    }
12002    if (element.hasBenefitPeriod()) {
12003      composePeriod(t, "ExplanationOfBenefit", "benefitPeriod", element.getBenefitPeriod(), -1);
12004    }
12005    for (int i = 0; i < element.getBenefitBalance().size(); i++) {
12006      composeExplanationOfBenefitBenefitBalanceComponent(t, "ExplanationOfBenefit", "benefitBalance", element.getBenefitBalance().get(i), i);
12007    }
12008  }
12009
12010  protected void composeExplanationOfBenefitRelatedClaimComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.RelatedClaimComponent element, int index) {
12011    if (element == null) 
12012      return;
12013    Complex t;
12014    if (Utilities.noString(parentType))
12015      t = parent;
12016    else {
12017      t = parent.predicate("fhir:"+parentType+'.'+name);
12018    }
12019    composeBackboneElement(t, "related", name, element, index);
12020    if (element.hasClaim()) {
12021      composeReference(t, "RelatedClaimComponent", "claim", element.getClaim(), -1);
12022    }
12023    if (element.hasRelationship()) {
12024      composeCodeableConcept(t, "RelatedClaimComponent", "relationship", element.getRelationship(), -1);
12025    }
12026    if (element.hasReference()) {
12027      composeIdentifier(t, "RelatedClaimComponent", "reference", element.getReference(), -1);
12028    }
12029  }
12030
12031  protected void composeExplanationOfBenefitPayeeComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.PayeeComponent element, int index) {
12032    if (element == null) 
12033      return;
12034    Complex t;
12035    if (Utilities.noString(parentType))
12036      t = parent;
12037    else {
12038      t = parent.predicate("fhir:"+parentType+'.'+name);
12039    }
12040    composeBackboneElement(t, "payee", name, element, index);
12041    if (element.hasType()) {
12042      composeCodeableConcept(t, "PayeeComponent", "type", element.getType(), -1);
12043    }
12044    if (element.hasParty()) {
12045      composeReference(t, "PayeeComponent", "party", element.getParty(), -1);
12046    }
12047  }
12048
12049  protected void composeExplanationOfBenefitCareTeamComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.CareTeamComponent element, int index) {
12050    if (element == null) 
12051      return;
12052    Complex t;
12053    if (Utilities.noString(parentType))
12054      t = parent;
12055    else {
12056      t = parent.predicate("fhir:"+parentType+'.'+name);
12057    }
12058    composeBackboneElement(t, "careTeam", name, element, index);
12059    if (element.hasSequenceElement()) {
12060      composePositiveInt(t, "CareTeamComponent", "sequence", element.getSequenceElement(), -1);
12061    }
12062    if (element.hasProvider()) {
12063      composeReference(t, "CareTeamComponent", "provider", element.getProvider(), -1);
12064    }
12065    if (element.hasResponsibleElement()) {
12066      composeBoolean(t, "CareTeamComponent", "responsible", element.getResponsibleElement(), -1);
12067    }
12068    if (element.hasRole()) {
12069      composeCodeableConcept(t, "CareTeamComponent", "role", element.getRole(), -1);
12070    }
12071    if (element.hasQualification()) {
12072      composeCodeableConcept(t, "CareTeamComponent", "qualification", element.getQualification(), -1);
12073    }
12074  }
12075
12076  protected void composeExplanationOfBenefitSupportingInformationComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.SupportingInformationComponent element, int index) {
12077    if (element == null) 
12078      return;
12079    Complex t;
12080    if (Utilities.noString(parentType))
12081      t = parent;
12082    else {
12083      t = parent.predicate("fhir:"+parentType+'.'+name);
12084    }
12085    composeBackboneElement(t, "supportingInfo", name, element, index);
12086    if (element.hasSequenceElement()) {
12087      composePositiveInt(t, "SupportingInformationComponent", "sequence", element.getSequenceElement(), -1);
12088    }
12089    if (element.hasCategory()) {
12090      composeCodeableConcept(t, "SupportingInformationComponent", "category", element.getCategory(), -1);
12091    }
12092    if (element.hasCode()) {
12093      composeCodeableConcept(t, "SupportingInformationComponent", "code", element.getCode(), -1);
12094    }
12095    if (element.hasTiming()) {
12096      composeType(t, "SupportingInformationComponent", "timing", element.getTiming(), -1);
12097    }
12098    if (element.hasValue()) {
12099      composeType(t, "SupportingInformationComponent", "value", element.getValue(), -1);
12100    }
12101    if (element.hasReason()) {
12102      composeCoding(t, "SupportingInformationComponent", "reason", element.getReason(), -1);
12103    }
12104  }
12105
12106  protected void composeExplanationOfBenefitDiagnosisComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.DiagnosisComponent element, int index) {
12107    if (element == null) 
12108      return;
12109    Complex t;
12110    if (Utilities.noString(parentType))
12111      t = parent;
12112    else {
12113      t = parent.predicate("fhir:"+parentType+'.'+name);
12114    }
12115    composeBackboneElement(t, "diagnosis", name, element, index);
12116    if (element.hasSequenceElement()) {
12117      composePositiveInt(t, "DiagnosisComponent", "sequence", element.getSequenceElement(), -1);
12118    }
12119    if (element.hasDiagnosis()) {
12120      composeType(t, "DiagnosisComponent", "diagnosis", element.getDiagnosis(), -1);
12121    }
12122    for (int i = 0; i < element.getType().size(); i++) {
12123      composeCodeableConcept(t, "DiagnosisComponent", "type", element.getType().get(i), i);
12124    }
12125    if (element.hasOnAdmission()) {
12126      composeCodeableConcept(t, "DiagnosisComponent", "onAdmission", element.getOnAdmission(), -1);
12127    }
12128    if (element.hasPackageCode()) {
12129      composeCodeableConcept(t, "DiagnosisComponent", "packageCode", element.getPackageCode(), -1);
12130    }
12131  }
12132
12133  protected void composeExplanationOfBenefitProcedureComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.ProcedureComponent element, int index) {
12134    if (element == null) 
12135      return;
12136    Complex t;
12137    if (Utilities.noString(parentType))
12138      t = parent;
12139    else {
12140      t = parent.predicate("fhir:"+parentType+'.'+name);
12141    }
12142    composeBackboneElement(t, "procedure", name, element, index);
12143    if (element.hasSequenceElement()) {
12144      composePositiveInt(t, "ProcedureComponent", "sequence", element.getSequenceElement(), -1);
12145    }
12146    for (int i = 0; i < element.getType().size(); i++) {
12147      composeCodeableConcept(t, "ProcedureComponent", "type", element.getType().get(i), i);
12148    }
12149    if (element.hasDateElement()) {
12150      composeDateTime(t, "ProcedureComponent", "date", element.getDateElement(), -1);
12151    }
12152    if (element.hasProcedure()) {
12153      composeType(t, "ProcedureComponent", "procedure", element.getProcedure(), -1);
12154    }
12155    for (int i = 0; i < element.getUdi().size(); i++) {
12156      composeReference(t, "ProcedureComponent", "udi", element.getUdi().get(i), i);
12157    }
12158  }
12159
12160  protected void composeExplanationOfBenefitInsuranceComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.InsuranceComponent element, int index) {
12161    if (element == null) 
12162      return;
12163    Complex t;
12164    if (Utilities.noString(parentType))
12165      t = parent;
12166    else {
12167      t = parent.predicate("fhir:"+parentType+'.'+name);
12168    }
12169    composeBackboneElement(t, "insurance", name, element, index);
12170    if (element.hasFocalElement()) {
12171      composeBoolean(t, "InsuranceComponent", "focal", element.getFocalElement(), -1);
12172    }
12173    if (element.hasCoverage()) {
12174      composeReference(t, "InsuranceComponent", "coverage", element.getCoverage(), -1);
12175    }
12176    for (int i = 0; i < element.getPreAuthRef().size(); i++) {
12177      composeString(t, "InsuranceComponent", "preAuthRef", element.getPreAuthRef().get(i), i);
12178    }
12179  }
12180
12181  protected void composeExplanationOfBenefitAccidentComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.AccidentComponent 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:"+parentType+'.'+name);
12189    }
12190    composeBackboneElement(t, "accident", name, element, index);
12191    if (element.hasDateElement()) {
12192      composeDate(t, "AccidentComponent", "date", element.getDateElement(), -1);
12193    }
12194    if (element.hasType()) {
12195      composeCodeableConcept(t, "AccidentComponent", "type", element.getType(), -1);
12196    }
12197    if (element.hasLocation()) {
12198      composeType(t, "AccidentComponent", "location", element.getLocation(), -1);
12199    }
12200  }
12201
12202  protected void composeExplanationOfBenefitItemComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.ItemComponent element, int index) {
12203    if (element == null) 
12204      return;
12205    Complex t;
12206    if (Utilities.noString(parentType))
12207      t = parent;
12208    else {
12209      t = parent.predicate("fhir:"+parentType+'.'+name);
12210    }
12211    composeBackboneElement(t, "item", name, element, index);
12212    if (element.hasSequenceElement()) {
12213      composePositiveInt(t, "ItemComponent", "sequence", element.getSequenceElement(), -1);
12214    }
12215    for (int i = 0; i < element.getCareTeamSequence().size(); i++) {
12216      composePositiveInt(t, "ItemComponent", "careTeamSequence", element.getCareTeamSequence().get(i), i);
12217    }
12218    for (int i = 0; i < element.getDiagnosisSequence().size(); i++) {
12219      composePositiveInt(t, "ItemComponent", "diagnosisSequence", element.getDiagnosisSequence().get(i), i);
12220    }
12221    for (int i = 0; i < element.getProcedureSequence().size(); i++) {
12222      composePositiveInt(t, "ItemComponent", "procedureSequence", element.getProcedureSequence().get(i), i);
12223    }
12224    for (int i = 0; i < element.getInformationSequence().size(); i++) {
12225      composePositiveInt(t, "ItemComponent", "informationSequence", element.getInformationSequence().get(i), i);
12226    }
12227    if (element.hasRevenue()) {
12228      composeCodeableConcept(t, "ItemComponent", "revenue", element.getRevenue(), -1);
12229    }
12230    if (element.hasCategory()) {
12231      composeCodeableConcept(t, "ItemComponent", "category", element.getCategory(), -1);
12232    }
12233    if (element.hasProductOrService()) {
12234      composeCodeableConcept(t, "ItemComponent", "productOrService", element.getProductOrService(), -1);
12235    }
12236    for (int i = 0; i < element.getModifier().size(); i++) {
12237      composeCodeableConcept(t, "ItemComponent", "modifier", element.getModifier().get(i), i);
12238    }
12239    for (int i = 0; i < element.getProgramCode().size(); i++) {
12240      composeCodeableConcept(t, "ItemComponent", "programCode", element.getProgramCode().get(i), i);
12241    }
12242    if (element.hasServiced()) {
12243      composeType(t, "ItemComponent", "serviced", element.getServiced(), -1);
12244    }
12245    if (element.hasLocation()) {
12246      composeType(t, "ItemComponent", "location", element.getLocation(), -1);
12247    }
12248    if (element.hasQuantity()) {
12249      composeQuantity(t, "ItemComponent", "quantity", element.getQuantity(), -1);
12250    }
12251    if (element.hasUnitPrice()) {
12252      composeMoney(t, "ItemComponent", "unitPrice", element.getUnitPrice(), -1);
12253    }
12254    if (element.hasFactorElement()) {
12255      composeDecimal(t, "ItemComponent", "factor", element.getFactorElement(), -1);
12256    }
12257    if (element.hasNet()) {
12258      composeMoney(t, "ItemComponent", "net", element.getNet(), -1);
12259    }
12260    for (int i = 0; i < element.getUdi().size(); i++) {
12261      composeReference(t, "ItemComponent", "udi", element.getUdi().get(i), i);
12262    }
12263    if (element.hasBodySite()) {
12264      composeCodeableConcept(t, "ItemComponent", "bodySite", element.getBodySite(), -1);
12265    }
12266    for (int i = 0; i < element.getSubSite().size(); i++) {
12267      composeCodeableConcept(t, "ItemComponent", "subSite", element.getSubSite().get(i), i);
12268    }
12269    for (int i = 0; i < element.getEncounter().size(); i++) {
12270      composeReference(t, "ItemComponent", "encounter", element.getEncounter().get(i), i);
12271    }
12272    for (int i = 0; i < element.getNoteNumber().size(); i++) {
12273      composePositiveInt(t, "ItemComponent", "noteNumber", element.getNoteNumber().get(i), i);
12274    }
12275    for (int i = 0; i < element.getAdjudication().size(); i++) {
12276      composeExplanationOfBenefitAdjudicationComponent(t, "ItemComponent", "adjudication", element.getAdjudication().get(i), i);
12277    }
12278    for (int i = 0; i < element.getDetail().size(); i++) {
12279      composeExplanationOfBenefitDetailComponent(t, "ItemComponent", "detail", element.getDetail().get(i), i);
12280    }
12281  }
12282
12283  protected void composeExplanationOfBenefitAdjudicationComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.AdjudicationComponent element, int index) {
12284    if (element == null) 
12285      return;
12286    Complex t;
12287    if (Utilities.noString(parentType))
12288      t = parent;
12289    else {
12290      t = parent.predicate("fhir:"+parentType+'.'+name);
12291    }
12292    composeBackboneElement(t, "adjudication", name, element, index);
12293    if (element.hasCategory()) {
12294      composeCodeableConcept(t, "AdjudicationComponent", "category", element.getCategory(), -1);
12295    }
12296    if (element.hasReason()) {
12297      composeCodeableConcept(t, "AdjudicationComponent", "reason", element.getReason(), -1);
12298    }
12299    if (element.hasAmount()) {
12300      composeMoney(t, "AdjudicationComponent", "amount", element.getAmount(), -1);
12301    }
12302    if (element.hasValueElement()) {
12303      composeDecimal(t, "AdjudicationComponent", "value", element.getValueElement(), -1);
12304    }
12305  }
12306
12307  protected void composeExplanationOfBenefitDetailComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.DetailComponent element, int index) {
12308    if (element == null) 
12309      return;
12310    Complex t;
12311    if (Utilities.noString(parentType))
12312      t = parent;
12313    else {
12314      t = parent.predicate("fhir:"+parentType+'.'+name);
12315    }
12316    composeBackboneElement(t, "detail", name, element, index);
12317    if (element.hasSequenceElement()) {
12318      composePositiveInt(t, "DetailComponent", "sequence", element.getSequenceElement(), -1);
12319    }
12320    if (element.hasRevenue()) {
12321      composeCodeableConcept(t, "DetailComponent", "revenue", element.getRevenue(), -1);
12322    }
12323    if (element.hasCategory()) {
12324      composeCodeableConcept(t, "DetailComponent", "category", element.getCategory(), -1);
12325    }
12326    if (element.hasProductOrService()) {
12327      composeCodeableConcept(t, "DetailComponent", "productOrService", element.getProductOrService(), -1);
12328    }
12329    for (int i = 0; i < element.getModifier().size(); i++) {
12330      composeCodeableConcept(t, "DetailComponent", "modifier", element.getModifier().get(i), i);
12331    }
12332    for (int i = 0; i < element.getProgramCode().size(); i++) {
12333      composeCodeableConcept(t, "DetailComponent", "programCode", element.getProgramCode().get(i), i);
12334    }
12335    if (element.hasQuantity()) {
12336      composeQuantity(t, "DetailComponent", "quantity", element.getQuantity(), -1);
12337    }
12338    if (element.hasUnitPrice()) {
12339      composeMoney(t, "DetailComponent", "unitPrice", element.getUnitPrice(), -1);
12340    }
12341    if (element.hasFactorElement()) {
12342      composeDecimal(t, "DetailComponent", "factor", element.getFactorElement(), -1);
12343    }
12344    if (element.hasNet()) {
12345      composeMoney(t, "DetailComponent", "net", element.getNet(), -1);
12346    }
12347    for (int i = 0; i < element.getUdi().size(); i++) {
12348      composeReference(t, "DetailComponent", "udi", element.getUdi().get(i), i);
12349    }
12350    for (int i = 0; i < element.getNoteNumber().size(); i++) {
12351      composePositiveInt(t, "DetailComponent", "noteNumber", element.getNoteNumber().get(i), i);
12352    }
12353    for (int i = 0; i < element.getAdjudication().size(); i++) {
12354      composeExplanationOfBenefitAdjudicationComponent(t, "DetailComponent", "adjudication", element.getAdjudication().get(i), i);
12355    }
12356    for (int i = 0; i < element.getSubDetail().size(); i++) {
12357      composeExplanationOfBenefitSubDetailComponent(t, "DetailComponent", "subDetail", element.getSubDetail().get(i), i);
12358    }
12359  }
12360
12361  protected void composeExplanationOfBenefitSubDetailComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.SubDetailComponent element, int index) {
12362    if (element == null) 
12363      return;
12364    Complex t;
12365    if (Utilities.noString(parentType))
12366      t = parent;
12367    else {
12368      t = parent.predicate("fhir:"+parentType+'.'+name);
12369    }
12370    composeBackboneElement(t, "subDetail", name, element, index);
12371    if (element.hasSequenceElement()) {
12372      composePositiveInt(t, "SubDetailComponent", "sequence", element.getSequenceElement(), -1);
12373    }
12374    if (element.hasRevenue()) {
12375      composeCodeableConcept(t, "SubDetailComponent", "revenue", element.getRevenue(), -1);
12376    }
12377    if (element.hasCategory()) {
12378      composeCodeableConcept(t, "SubDetailComponent", "category", element.getCategory(), -1);
12379    }
12380    if (element.hasProductOrService()) {
12381      composeCodeableConcept(t, "SubDetailComponent", "productOrService", element.getProductOrService(), -1);
12382    }
12383    for (int i = 0; i < element.getModifier().size(); i++) {
12384      composeCodeableConcept(t, "SubDetailComponent", "modifier", element.getModifier().get(i), i);
12385    }
12386    for (int i = 0; i < element.getProgramCode().size(); i++) {
12387      composeCodeableConcept(t, "SubDetailComponent", "programCode", element.getProgramCode().get(i), i);
12388    }
12389    if (element.hasQuantity()) {
12390      composeQuantity(t, "SubDetailComponent", "quantity", element.getQuantity(), -1);
12391    }
12392    if (element.hasUnitPrice()) {
12393      composeMoney(t, "SubDetailComponent", "unitPrice", element.getUnitPrice(), -1);
12394    }
12395    if (element.hasFactorElement()) {
12396      composeDecimal(t, "SubDetailComponent", "factor", element.getFactorElement(), -1);
12397    }
12398    if (element.hasNet()) {
12399      composeMoney(t, "SubDetailComponent", "net", element.getNet(), -1);
12400    }
12401    for (int i = 0; i < element.getUdi().size(); i++) {
12402      composeReference(t, "SubDetailComponent", "udi", element.getUdi().get(i), i);
12403    }
12404    for (int i = 0; i < element.getNoteNumber().size(); i++) {
12405      composePositiveInt(t, "SubDetailComponent", "noteNumber", element.getNoteNumber().get(i), i);
12406    }
12407    for (int i = 0; i < element.getAdjudication().size(); i++) {
12408      composeExplanationOfBenefitAdjudicationComponent(t, "SubDetailComponent", "adjudication", element.getAdjudication().get(i), i);
12409    }
12410  }
12411
12412  protected void composeExplanationOfBenefitAddedItemComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.AddedItemComponent element, int index) {
12413    if (element == null) 
12414      return;
12415    Complex t;
12416    if (Utilities.noString(parentType))
12417      t = parent;
12418    else {
12419      t = parent.predicate("fhir:"+parentType+'.'+name);
12420    }
12421    composeBackboneElement(t, "addItem", name, element, index);
12422    for (int i = 0; i < element.getItemSequence().size(); i++) {
12423      composePositiveInt(t, "AddedItemComponent", "itemSequence", element.getItemSequence().get(i), i);
12424    }
12425    for (int i = 0; i < element.getDetailSequence().size(); i++) {
12426      composePositiveInt(t, "AddedItemComponent", "detailSequence", element.getDetailSequence().get(i), i);
12427    }
12428    for (int i = 0; i < element.getSubDetailSequence().size(); i++) {
12429      composePositiveInt(t, "AddedItemComponent", "subDetailSequence", element.getSubDetailSequence().get(i), i);
12430    }
12431    for (int i = 0; i < element.getProvider().size(); i++) {
12432      composeReference(t, "AddedItemComponent", "provider", element.getProvider().get(i), i);
12433    }
12434    if (element.hasProductOrService()) {
12435      composeCodeableConcept(t, "AddedItemComponent", "productOrService", element.getProductOrService(), -1);
12436    }
12437    for (int i = 0; i < element.getModifier().size(); i++) {
12438      composeCodeableConcept(t, "AddedItemComponent", "modifier", element.getModifier().get(i), i);
12439    }
12440    for (int i = 0; i < element.getProgramCode().size(); i++) {
12441      composeCodeableConcept(t, "AddedItemComponent", "programCode", element.getProgramCode().get(i), i);
12442    }
12443    if (element.hasServiced()) {
12444      composeType(t, "AddedItemComponent", "serviced", element.getServiced(), -1);
12445    }
12446    if (element.hasLocation()) {
12447      composeType(t, "AddedItemComponent", "location", element.getLocation(), -1);
12448    }
12449    if (element.hasQuantity()) {
12450      composeQuantity(t, "AddedItemComponent", "quantity", element.getQuantity(), -1);
12451    }
12452    if (element.hasUnitPrice()) {
12453      composeMoney(t, "AddedItemComponent", "unitPrice", element.getUnitPrice(), -1);
12454    }
12455    if (element.hasFactorElement()) {
12456      composeDecimal(t, "AddedItemComponent", "factor", element.getFactorElement(), -1);
12457    }
12458    if (element.hasNet()) {
12459      composeMoney(t, "AddedItemComponent", "net", element.getNet(), -1);
12460    }
12461    if (element.hasBodySite()) {
12462      composeCodeableConcept(t, "AddedItemComponent", "bodySite", element.getBodySite(), -1);
12463    }
12464    for (int i = 0; i < element.getSubSite().size(); i++) {
12465      composeCodeableConcept(t, "AddedItemComponent", "subSite", element.getSubSite().get(i), i);
12466    }
12467    for (int i = 0; i < element.getNoteNumber().size(); i++) {
12468      composePositiveInt(t, "AddedItemComponent", "noteNumber", element.getNoteNumber().get(i), i);
12469    }
12470    for (int i = 0; i < element.getAdjudication().size(); i++) {
12471      composeExplanationOfBenefitAdjudicationComponent(t, "AddedItemComponent", "adjudication", element.getAdjudication().get(i), i);
12472    }
12473    for (int i = 0; i < element.getDetail().size(); i++) {
12474      composeExplanationOfBenefitAddedItemDetailComponent(t, "AddedItemComponent", "detail", element.getDetail().get(i), i);
12475    }
12476  }
12477
12478  protected void composeExplanationOfBenefitAddedItemDetailComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.AddedItemDetailComponent element, int index) {
12479    if (element == null) 
12480      return;
12481    Complex t;
12482    if (Utilities.noString(parentType))
12483      t = parent;
12484    else {
12485      t = parent.predicate("fhir:"+parentType+'.'+name);
12486    }
12487    composeBackboneElement(t, "detail", name, element, index);
12488    if (element.hasProductOrService()) {
12489      composeCodeableConcept(t, "AddedItemDetailComponent", "productOrService", element.getProductOrService(), -1);
12490    }
12491    for (int i = 0; i < element.getModifier().size(); i++) {
12492      composeCodeableConcept(t, "AddedItemDetailComponent", "modifier", element.getModifier().get(i), i);
12493    }
12494    if (element.hasQuantity()) {
12495      composeQuantity(t, "AddedItemDetailComponent", "quantity", element.getQuantity(), -1);
12496    }
12497    if (element.hasUnitPrice()) {
12498      composeMoney(t, "AddedItemDetailComponent", "unitPrice", element.getUnitPrice(), -1);
12499    }
12500    if (element.hasFactorElement()) {
12501      composeDecimal(t, "AddedItemDetailComponent", "factor", element.getFactorElement(), -1);
12502    }
12503    if (element.hasNet()) {
12504      composeMoney(t, "AddedItemDetailComponent", "net", element.getNet(), -1);
12505    }
12506    for (int i = 0; i < element.getNoteNumber().size(); i++) {
12507      composePositiveInt(t, "AddedItemDetailComponent", "noteNumber", element.getNoteNumber().get(i), i);
12508    }
12509    for (int i = 0; i < element.getAdjudication().size(); i++) {
12510      composeExplanationOfBenefitAdjudicationComponent(t, "AddedItemDetailComponent", "adjudication", element.getAdjudication().get(i), i);
12511    }
12512    for (int i = 0; i < element.getSubDetail().size(); i++) {
12513      composeExplanationOfBenefitAddedItemDetailSubDetailComponent(t, "AddedItemDetailComponent", "subDetail", element.getSubDetail().get(i), i);
12514    }
12515  }
12516
12517  protected void composeExplanationOfBenefitAddedItemDetailSubDetailComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.AddedItemDetailSubDetailComponent element, int index) {
12518    if (element == null) 
12519      return;
12520    Complex t;
12521    if (Utilities.noString(parentType))
12522      t = parent;
12523    else {
12524      t = parent.predicate("fhir:"+parentType+'.'+name);
12525    }
12526    composeBackboneElement(t, "subDetail", name, element, index);
12527    if (element.hasProductOrService()) {
12528      composeCodeableConcept(t, "AddedItemDetailSubDetailComponent", "productOrService", element.getProductOrService(), -1);
12529    }
12530    for (int i = 0; i < element.getModifier().size(); i++) {
12531      composeCodeableConcept(t, "AddedItemDetailSubDetailComponent", "modifier", element.getModifier().get(i), i);
12532    }
12533    if (element.hasQuantity()) {
12534      composeQuantity(t, "AddedItemDetailSubDetailComponent", "quantity", element.getQuantity(), -1);
12535    }
12536    if (element.hasUnitPrice()) {
12537      composeMoney(t, "AddedItemDetailSubDetailComponent", "unitPrice", element.getUnitPrice(), -1);
12538    }
12539    if (element.hasFactorElement()) {
12540      composeDecimal(t, "AddedItemDetailSubDetailComponent", "factor", element.getFactorElement(), -1);
12541    }
12542    if (element.hasNet()) {
12543      composeMoney(t, "AddedItemDetailSubDetailComponent", "net", element.getNet(), -1);
12544    }
12545    for (int i = 0; i < element.getNoteNumber().size(); i++) {
12546      composePositiveInt(t, "AddedItemDetailSubDetailComponent", "noteNumber", element.getNoteNumber().get(i), i);
12547    }
12548    for (int i = 0; i < element.getAdjudication().size(); i++) {
12549      composeExplanationOfBenefitAdjudicationComponent(t, "AddedItemDetailSubDetailComponent", "adjudication", element.getAdjudication().get(i), i);
12550    }
12551  }
12552
12553  protected void composeExplanationOfBenefitTotalComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.TotalComponent element, int index) {
12554    if (element == null) 
12555      return;
12556    Complex t;
12557    if (Utilities.noString(parentType))
12558      t = parent;
12559    else {
12560      t = parent.predicate("fhir:"+parentType+'.'+name);
12561    }
12562    composeBackboneElement(t, "total", name, element, index);
12563    if (element.hasCategory()) {
12564      composeCodeableConcept(t, "TotalComponent", "category", element.getCategory(), -1);
12565    }
12566    if (element.hasAmount()) {
12567      composeMoney(t, "TotalComponent", "amount", element.getAmount(), -1);
12568    }
12569  }
12570
12571  protected void composeExplanationOfBenefitPaymentComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.PaymentComponent element, int index) {
12572    if (element == null) 
12573      return;
12574    Complex t;
12575    if (Utilities.noString(parentType))
12576      t = parent;
12577    else {
12578      t = parent.predicate("fhir:"+parentType+'.'+name);
12579    }
12580    composeBackboneElement(t, "payment", name, element, index);
12581    if (element.hasType()) {
12582      composeCodeableConcept(t, "PaymentComponent", "type", element.getType(), -1);
12583    }
12584    if (element.hasAdjustment()) {
12585      composeMoney(t, "PaymentComponent", "adjustment", element.getAdjustment(), -1);
12586    }
12587    if (element.hasAdjustmentReason()) {
12588      composeCodeableConcept(t, "PaymentComponent", "adjustmentReason", element.getAdjustmentReason(), -1);
12589    }
12590    if (element.hasDateElement()) {
12591      composeDate(t, "PaymentComponent", "date", element.getDateElement(), -1);
12592    }
12593    if (element.hasAmount()) {
12594      composeMoney(t, "PaymentComponent", "amount", element.getAmount(), -1);
12595    }
12596    if (element.hasIdentifier()) {
12597      composeIdentifier(t, "PaymentComponent", "identifier", element.getIdentifier(), -1);
12598    }
12599  }
12600
12601  protected void composeExplanationOfBenefitNoteComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.NoteComponent element, int index) {
12602    if (element == null) 
12603      return;
12604    Complex t;
12605    if (Utilities.noString(parentType))
12606      t = parent;
12607    else {
12608      t = parent.predicate("fhir:"+parentType+'.'+name);
12609    }
12610    composeBackboneElement(t, "processNote", name, element, index);
12611    if (element.hasNumberElement()) {
12612      composePositiveInt(t, "NoteComponent", "number", element.getNumberElement(), -1);
12613    }
12614    if (element.hasTypeElement()) {
12615      composeEnum(t, "NoteComponent", "type", element.getTypeElement(), -1);
12616    }
12617    if (element.hasTextElement()) {
12618      composeString(t, "NoteComponent", "text", element.getTextElement(), -1);
12619    }
12620    if (element.hasLanguage()) {
12621      composeCodeableConcept(t, "NoteComponent", "language", element.getLanguage(), -1);
12622    }
12623  }
12624
12625  protected void composeExplanationOfBenefitBenefitBalanceComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.BenefitBalanceComponent element, int index) {
12626    if (element == null) 
12627      return;
12628    Complex t;
12629    if (Utilities.noString(parentType))
12630      t = parent;
12631    else {
12632      t = parent.predicate("fhir:"+parentType+'.'+name);
12633    }
12634    composeBackboneElement(t, "benefitBalance", name, element, index);
12635    if (element.hasCategory()) {
12636      composeCodeableConcept(t, "BenefitBalanceComponent", "category", element.getCategory(), -1);
12637    }
12638    if (element.hasExcludedElement()) {
12639      composeBoolean(t, "BenefitBalanceComponent", "excluded", element.getExcludedElement(), -1);
12640    }
12641    if (element.hasNameElement()) {
12642      composeString(t, "BenefitBalanceComponent", "name", element.getNameElement(), -1);
12643    }
12644    if (element.hasDescriptionElement()) {
12645      composeString(t, "BenefitBalanceComponent", "description", element.getDescriptionElement(), -1);
12646    }
12647    if (element.hasNetwork()) {
12648      composeCodeableConcept(t, "BenefitBalanceComponent", "network", element.getNetwork(), -1);
12649    }
12650    if (element.hasUnit()) {
12651      composeCodeableConcept(t, "BenefitBalanceComponent", "unit", element.getUnit(), -1);
12652    }
12653    if (element.hasTerm()) {
12654      composeCodeableConcept(t, "BenefitBalanceComponent", "term", element.getTerm(), -1);
12655    }
12656    for (int i = 0; i < element.getFinancial().size(); i++) {
12657      composeExplanationOfBenefitBenefitComponent(t, "BenefitBalanceComponent", "financial", element.getFinancial().get(i), i);
12658    }
12659  }
12660
12661  protected void composeExplanationOfBenefitBenefitComponent(Complex parent, String parentType, String name, ExplanationOfBenefit.BenefitComponent element, int index) {
12662    if (element == null) 
12663      return;
12664    Complex t;
12665    if (Utilities.noString(parentType))
12666      t = parent;
12667    else {
12668      t = parent.predicate("fhir:"+parentType+'.'+name);
12669    }
12670    composeBackboneElement(t, "financial", name, element, index);
12671    if (element.hasType()) {
12672      composeCodeableConcept(t, "BenefitComponent", "type", element.getType(), -1);
12673    }
12674    if (element.hasAllowed()) {
12675      composeType(t, "BenefitComponent", "allowed", element.getAllowed(), -1);
12676    }
12677    if (element.hasUsed()) {
12678      composeType(t, "BenefitComponent", "used", element.getUsed(), -1);
12679    }
12680  }
12681
12682  protected void composeFamilyMemberHistory(Complex parent, String parentType, String name, FamilyMemberHistory element, int index) {
12683    if (element == null) 
12684      return;
12685    Complex t;
12686    if (Utilities.noString(parentType))
12687      t = parent;
12688    else {
12689      t = parent.predicate("fhir:"+parentType+'.'+name);
12690    }
12691    composeDomainResource(t, "FamilyMemberHistory", name, element, index);
12692    for (int i = 0; i < element.getIdentifier().size(); i++) {
12693      composeIdentifier(t, "FamilyMemberHistory", "identifier", element.getIdentifier().get(i), i);
12694    }
12695    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
12696      composeCanonical(t, "FamilyMemberHistory", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
12697    }
12698    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
12699      composeUri(t, "FamilyMemberHistory", "instantiatesUri", element.getInstantiatesUri().get(i), i);
12700    }
12701    if (element.hasStatusElement()) {
12702      composeEnum(t, "FamilyMemberHistory", "status", element.getStatusElement(), -1);
12703    }
12704    if (element.hasDataAbsentReason()) {
12705      composeCodeableConcept(t, "FamilyMemberHistory", "dataAbsentReason", element.getDataAbsentReason(), -1);
12706    }
12707    if (element.hasPatient()) {
12708      composeReference(t, "FamilyMemberHistory", "patient", element.getPatient(), -1);
12709    }
12710    if (element.hasDateElement()) {
12711      composeDateTime(t, "FamilyMemberHistory", "date", element.getDateElement(), -1);
12712    }
12713    if (element.hasNameElement()) {
12714      composeString(t, "FamilyMemberHistory", "name", element.getNameElement(), -1);
12715    }
12716    if (element.hasRelationship()) {
12717      composeCodeableConcept(t, "FamilyMemberHistory", "relationship", element.getRelationship(), -1);
12718    }
12719    if (element.hasSex()) {
12720      composeCodeableConcept(t, "FamilyMemberHistory", "sex", element.getSex(), -1);
12721    }
12722    if (element.hasBorn()) {
12723      composeType(t, "FamilyMemberHistory", "born", element.getBorn(), -1);
12724    }
12725    if (element.hasAge()) {
12726      composeType(t, "FamilyMemberHistory", "age", element.getAge(), -1);
12727    }
12728    if (element.hasEstimatedAgeElement()) {
12729      composeBoolean(t, "FamilyMemberHistory", "estimatedAge", element.getEstimatedAgeElement(), -1);
12730    }
12731    if (element.hasDeceased()) {
12732      composeType(t, "FamilyMemberHistory", "deceased", element.getDeceased(), -1);
12733    }
12734    for (int i = 0; i < element.getReason().size(); i++) {
12735      composeCodeableReference(t, "FamilyMemberHistory", "reason", element.getReason().get(i), i);
12736    }
12737    for (int i = 0; i < element.getNote().size(); i++) {
12738      composeAnnotation(t, "FamilyMemberHistory", "note", element.getNote().get(i), i);
12739    }
12740    for (int i = 0; i < element.getCondition().size(); i++) {
12741      composeFamilyMemberHistoryConditionComponent(t, "FamilyMemberHistory", "condition", element.getCondition().get(i), i);
12742    }
12743    for (int i = 0; i < element.getProcedure().size(); i++) {
12744      composeFamilyMemberHistoryProcedureComponent(t, "FamilyMemberHistory", "procedure", element.getProcedure().get(i), i);
12745    }
12746  }
12747
12748  protected void composeFamilyMemberHistoryConditionComponent(Complex parent, String parentType, String name, FamilyMemberHistory.FamilyMemberHistoryConditionComponent 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:"+parentType+'.'+name);
12756    }
12757    composeBackboneElement(t, "condition", name, element, index);
12758    if (element.hasCode()) {
12759      composeCodeableConcept(t, "FamilyMemberHistoryConditionComponent", "code", element.getCode(), -1);
12760    }
12761    if (element.hasOutcome()) {
12762      composeCodeableConcept(t, "FamilyMemberHistoryConditionComponent", "outcome", element.getOutcome(), -1);
12763    }
12764    if (element.hasContributedToDeathElement()) {
12765      composeBoolean(t, "FamilyMemberHistoryConditionComponent", "contributedToDeath", element.getContributedToDeathElement(), -1);
12766    }
12767    if (element.hasOnset()) {
12768      composeType(t, "FamilyMemberHistoryConditionComponent", "onset", element.getOnset(), -1);
12769    }
12770    for (int i = 0; i < element.getNote().size(); i++) {
12771      composeAnnotation(t, "FamilyMemberHistoryConditionComponent", "note", element.getNote().get(i), i);
12772    }
12773  }
12774
12775  protected void composeFamilyMemberHistoryProcedureComponent(Complex parent, String parentType, String name, FamilyMemberHistory.FamilyMemberHistoryProcedureComponent element, int index) {
12776    if (element == null) 
12777      return;
12778    Complex t;
12779    if (Utilities.noString(parentType))
12780      t = parent;
12781    else {
12782      t = parent.predicate("fhir:"+parentType+'.'+name);
12783    }
12784    composeBackboneElement(t, "procedure", name, element, index);
12785    if (element.hasCode()) {
12786      composeCodeableConcept(t, "FamilyMemberHistoryProcedureComponent", "code", element.getCode(), -1);
12787    }
12788    if (element.hasOutcome()) {
12789      composeCodeableConcept(t, "FamilyMemberHistoryProcedureComponent", "outcome", element.getOutcome(), -1);
12790    }
12791    if (element.hasContributedToDeathElement()) {
12792      composeBoolean(t, "FamilyMemberHistoryProcedureComponent", "contributedToDeath", element.getContributedToDeathElement(), -1);
12793    }
12794    if (element.hasPerformed()) {
12795      composeType(t, "FamilyMemberHistoryProcedureComponent", "performed", element.getPerformed(), -1);
12796    }
12797    for (int i = 0; i < element.getNote().size(); i++) {
12798      composeAnnotation(t, "FamilyMemberHistoryProcedureComponent", "note", element.getNote().get(i), i);
12799    }
12800  }
12801
12802  protected void composeFlag(Complex parent, String parentType, String name, Flag element, int index) {
12803    if (element == null) 
12804      return;
12805    Complex t;
12806    if (Utilities.noString(parentType))
12807      t = parent;
12808    else {
12809      t = parent.predicate("fhir:"+parentType+'.'+name);
12810    }
12811    composeDomainResource(t, "Flag", name, element, index);
12812    for (int i = 0; i < element.getIdentifier().size(); i++) {
12813      composeIdentifier(t, "Flag", "identifier", element.getIdentifier().get(i), i);
12814    }
12815    if (element.hasStatusElement()) {
12816      composeEnum(t, "Flag", "status", element.getStatusElement(), -1);
12817    }
12818    for (int i = 0; i < element.getCategory().size(); i++) {
12819      composeCodeableConcept(t, "Flag", "category", element.getCategory().get(i), i);
12820    }
12821    if (element.hasCode()) {
12822      composeCodeableConcept(t, "Flag", "code", element.getCode(), -1);
12823    }
12824    if (element.hasSubject()) {
12825      composeReference(t, "Flag", "subject", element.getSubject(), -1);
12826    }
12827    if (element.hasPeriod()) {
12828      composePeriod(t, "Flag", "period", element.getPeriod(), -1);
12829    }
12830    if (element.hasEncounter()) {
12831      composeReference(t, "Flag", "encounter", element.getEncounter(), -1);
12832    }
12833    if (element.hasAuthor()) {
12834      composeReference(t, "Flag", "author", element.getAuthor(), -1);
12835    }
12836  }
12837
12838  protected void composeGoal(Complex parent, String parentType, String name, Goal element, int index) {
12839    if (element == null) 
12840      return;
12841    Complex t;
12842    if (Utilities.noString(parentType))
12843      t = parent;
12844    else {
12845      t = parent.predicate("fhir:"+parentType+'.'+name);
12846    }
12847    composeDomainResource(t, "Goal", name, element, index);
12848    for (int i = 0; i < element.getIdentifier().size(); i++) {
12849      composeIdentifier(t, "Goal", "identifier", element.getIdentifier().get(i), i);
12850    }
12851    if (element.hasLifecycleStatusElement()) {
12852      composeEnum(t, "Goal", "lifecycleStatus", element.getLifecycleStatusElement(), -1);
12853    }
12854    if (element.hasAchievementStatus()) {
12855      composeCodeableConcept(t, "Goal", "achievementStatus", element.getAchievementStatus(), -1);
12856    }
12857    for (int i = 0; i < element.getCategory().size(); i++) {
12858      composeCodeableConcept(t, "Goal", "category", element.getCategory().get(i), i);
12859    }
12860    if (element.hasContinuousElement()) {
12861      composeBoolean(t, "Goal", "continuous", element.getContinuousElement(), -1);
12862    }
12863    if (element.hasPriority()) {
12864      composeCodeableConcept(t, "Goal", "priority", element.getPriority(), -1);
12865    }
12866    if (element.hasDescription()) {
12867      composeCodeableConcept(t, "Goal", "description", element.getDescription(), -1);
12868    }
12869    if (element.hasSubject()) {
12870      composeReference(t, "Goal", "subject", element.getSubject(), -1);
12871    }
12872    if (element.hasStart()) {
12873      composeType(t, "Goal", "start", element.getStart(), -1);
12874    }
12875    for (int i = 0; i < element.getTarget().size(); i++) {
12876      composeGoalTargetComponent(t, "Goal", "target", element.getTarget().get(i), i);
12877    }
12878    if (element.hasStatusDateElement()) {
12879      composeDate(t, "Goal", "statusDate", element.getStatusDateElement(), -1);
12880    }
12881    if (element.hasStatusReasonElement()) {
12882      composeString(t, "Goal", "statusReason", element.getStatusReasonElement(), -1);
12883    }
12884    if (element.hasSource()) {
12885      composeReference(t, "Goal", "source", element.getSource(), -1);
12886    }
12887    for (int i = 0; i < element.getAddresses().size(); i++) {
12888      composeReference(t, "Goal", "addresses", element.getAddresses().get(i), i);
12889    }
12890    for (int i = 0; i < element.getNote().size(); i++) {
12891      composeAnnotation(t, "Goal", "note", element.getNote().get(i), i);
12892    }
12893    for (int i = 0; i < element.getOutcome().size(); i++) {
12894      composeCodeableReference(t, "Goal", "outcome", element.getOutcome().get(i), i);
12895    }
12896  }
12897
12898  protected void composeGoalTargetComponent(Complex parent, String parentType, String name, Goal.GoalTargetComponent element, int index) {
12899    if (element == null) 
12900      return;
12901    Complex t;
12902    if (Utilities.noString(parentType))
12903      t = parent;
12904    else {
12905      t = parent.predicate("fhir:"+parentType+'.'+name);
12906    }
12907    composeBackboneElement(t, "target", name, element, index);
12908    if (element.hasMeasure()) {
12909      composeCodeableConcept(t, "GoalTargetComponent", "measure", element.getMeasure(), -1);
12910    }
12911    if (element.hasDetail()) {
12912      composeType(t, "GoalTargetComponent", "detail", element.getDetail(), -1);
12913    }
12914    if (element.hasDue()) {
12915      composeType(t, "GoalTargetComponent", "due", element.getDue(), -1);
12916    }
12917  }
12918
12919  protected void composeGraphDefinition(Complex parent, String parentType, String name, GraphDefinition element, int index) {
12920    if (element == null) 
12921      return;
12922    Complex t;
12923    if (Utilities.noString(parentType))
12924      t = parent;
12925    else {
12926      t = parent.predicate("fhir:"+parentType+'.'+name);
12927    }
12928    composeCanonicalResource(t, "GraphDefinition", name, element, index);
12929    if (element.hasUrlElement()) {
12930      composeUri(t, "GraphDefinition", "url", element.getUrlElement(), -1);
12931    }
12932    if (element.hasVersionElement()) {
12933      composeString(t, "GraphDefinition", "version", element.getVersionElement(), -1);
12934    }
12935    if (element.hasNameElement()) {
12936      composeString(t, "GraphDefinition", "name", element.getNameElement(), -1);
12937    }
12938    if (element.hasStatusElement()) {
12939      composeEnum(t, "GraphDefinition", "status", element.getStatusElement(), -1);
12940    }
12941    if (element.hasExperimentalElement()) {
12942      composeBoolean(t, "GraphDefinition", "experimental", element.getExperimentalElement(), -1);
12943    }
12944    if (element.hasDateElement()) {
12945      composeDateTime(t, "GraphDefinition", "date", element.getDateElement(), -1);
12946    }
12947    if (element.hasPublisherElement()) {
12948      composeString(t, "GraphDefinition", "publisher", element.getPublisherElement(), -1);
12949    }
12950    for (int i = 0; i < element.getContact().size(); i++) {
12951      composeContactDetail(t, "GraphDefinition", "contact", element.getContact().get(i), i);
12952    }
12953    if (element.hasDescriptionElement()) {
12954      composeMarkdown(t, "GraphDefinition", "description", element.getDescriptionElement(), -1);
12955    }
12956    for (int i = 0; i < element.getUseContext().size(); i++) {
12957      composeUsageContext(t, "GraphDefinition", "useContext", element.getUseContext().get(i), i);
12958    }
12959    for (int i = 0; i < element.getJurisdiction().size(); i++) {
12960      composeCodeableConcept(t, "GraphDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
12961    }
12962    if (element.hasPurposeElement()) {
12963      composeMarkdown(t, "GraphDefinition", "purpose", element.getPurposeElement(), -1);
12964    }
12965    if (element.hasStartElement()) {
12966      composeCode(t, "GraphDefinition", "start", element.getStartElement(), -1);
12967    }
12968    if (element.hasProfileElement()) {
12969      composeCanonical(t, "GraphDefinition", "profile", element.getProfileElement(), -1);
12970    }
12971    for (int i = 0; i < element.getLink().size(); i++) {
12972      composeGraphDefinitionLinkComponent(t, "GraphDefinition", "link", element.getLink().get(i), i);
12973    }
12974  }
12975
12976  protected void composeGraphDefinitionLinkComponent(Complex parent, String parentType, String name, GraphDefinition.GraphDefinitionLinkComponent element, int index) {
12977    if (element == null) 
12978      return;
12979    Complex t;
12980    if (Utilities.noString(parentType))
12981      t = parent;
12982    else {
12983      t = parent.predicate("fhir:"+parentType+'.'+name);
12984    }
12985    composeBackboneElement(t, "link", name, element, index);
12986    if (element.hasPathElement()) {
12987      composeString(t, "GraphDefinitionLinkComponent", "path", element.getPathElement(), -1);
12988    }
12989    if (element.hasSliceNameElement()) {
12990      composeString(t, "GraphDefinitionLinkComponent", "sliceName", element.getSliceNameElement(), -1);
12991    }
12992    if (element.hasMinElement()) {
12993      composeInteger(t, "GraphDefinitionLinkComponent", "min", element.getMinElement(), -1);
12994    }
12995    if (element.hasMaxElement()) {
12996      composeString(t, "GraphDefinitionLinkComponent", "max", element.getMaxElement(), -1);
12997    }
12998    if (element.hasDescriptionElement()) {
12999      composeString(t, "GraphDefinitionLinkComponent", "description", element.getDescriptionElement(), -1);
13000    }
13001    for (int i = 0; i < element.getTarget().size(); i++) {
13002      composeGraphDefinitionLinkTargetComponent(t, "GraphDefinitionLinkComponent", "target", element.getTarget().get(i), i);
13003    }
13004  }
13005
13006  protected void composeGraphDefinitionLinkTargetComponent(Complex parent, String parentType, String name, GraphDefinition.GraphDefinitionLinkTargetComponent element, int index) {
13007    if (element == null) 
13008      return;
13009    Complex t;
13010    if (Utilities.noString(parentType))
13011      t = parent;
13012    else {
13013      t = parent.predicate("fhir:"+parentType+'.'+name);
13014    }
13015    composeBackboneElement(t, "target", name, element, index);
13016    if (element.hasTypeElement()) {
13017      composeCode(t, "GraphDefinitionLinkTargetComponent", "type", element.getTypeElement(), -1);
13018    }
13019    if (element.hasParamsElement()) {
13020      composeString(t, "GraphDefinitionLinkTargetComponent", "params", element.getParamsElement(), -1);
13021    }
13022    if (element.hasProfileElement()) {
13023      composeCanonical(t, "GraphDefinitionLinkTargetComponent", "profile", element.getProfileElement(), -1);
13024    }
13025    for (int i = 0; i < element.getCompartment().size(); i++) {
13026      composeGraphDefinitionLinkTargetCompartmentComponent(t, "GraphDefinitionLinkTargetComponent", "compartment", element.getCompartment().get(i), i);
13027    }
13028    for (int i = 0; i < element.getLink().size(); i++) {
13029      composeGraphDefinitionLinkComponent(t, "GraphDefinitionLinkTargetComponent", "link", element.getLink().get(i), i);
13030    }
13031  }
13032
13033  protected void composeGraphDefinitionLinkTargetCompartmentComponent(Complex parent, String parentType, String name, GraphDefinition.GraphDefinitionLinkTargetCompartmentComponent element, int index) {
13034    if (element == null) 
13035      return;
13036    Complex t;
13037    if (Utilities.noString(parentType))
13038      t = parent;
13039    else {
13040      t = parent.predicate("fhir:"+parentType+'.'+name);
13041    }
13042    composeBackboneElement(t, "compartment", name, element, index);
13043    if (element.hasUseElement()) {
13044      composeEnum(t, "GraphDefinitionLinkTargetCompartmentComponent", "use", element.getUseElement(), -1);
13045    }
13046    if (element.hasCodeElement()) {
13047      composeEnum(t, "GraphDefinitionLinkTargetCompartmentComponent", "code", element.getCodeElement(), -1);
13048    }
13049    if (element.hasRuleElement()) {
13050      composeEnum(t, "GraphDefinitionLinkTargetCompartmentComponent", "rule", element.getRuleElement(), -1);
13051    }
13052    if (element.hasExpressionElement()) {
13053      composeString(t, "GraphDefinitionLinkTargetCompartmentComponent", "expression", element.getExpressionElement(), -1);
13054    }
13055    if (element.hasDescriptionElement()) {
13056      composeString(t, "GraphDefinitionLinkTargetCompartmentComponent", "description", element.getDescriptionElement(), -1);
13057    }
13058  }
13059
13060  protected void composeGroup(Complex parent, String parentType, String name, Group element, int index) {
13061    if (element == null) 
13062      return;
13063    Complex t;
13064    if (Utilities.noString(parentType))
13065      t = parent;
13066    else {
13067      t = parent.predicate("fhir:"+parentType+'.'+name);
13068    }
13069    composeDomainResource(t, "Group", name, element, index);
13070    for (int i = 0; i < element.getIdentifier().size(); i++) {
13071      composeIdentifier(t, "Group", "identifier", element.getIdentifier().get(i), i);
13072    }
13073    if (element.hasActiveElement()) {
13074      composeBoolean(t, "Group", "active", element.getActiveElement(), -1);
13075    }
13076    if (element.hasTypeElement()) {
13077      composeEnum(t, "Group", "type", element.getTypeElement(), -1);
13078    }
13079    if (element.hasActualElement()) {
13080      composeBoolean(t, "Group", "actual", element.getActualElement(), -1);
13081    }
13082    if (element.hasCode()) {
13083      composeCodeableConcept(t, "Group", "code", element.getCode(), -1);
13084    }
13085    if (element.hasNameElement()) {
13086      composeString(t, "Group", "name", element.getNameElement(), -1);
13087    }
13088    if (element.hasQuantityElement()) {
13089      composeUnsignedInt(t, "Group", "quantity", element.getQuantityElement(), -1);
13090    }
13091    if (element.hasManagingEntity()) {
13092      composeReference(t, "Group", "managingEntity", element.getManagingEntity(), -1);
13093    }
13094    for (int i = 0; i < element.getCharacteristic().size(); i++) {
13095      composeGroupCharacteristicComponent(t, "Group", "characteristic", element.getCharacteristic().get(i), i);
13096    }
13097    for (int i = 0; i < element.getMember().size(); i++) {
13098      composeGroupMemberComponent(t, "Group", "member", element.getMember().get(i), i);
13099    }
13100  }
13101
13102  protected void composeGroupCharacteristicComponent(Complex parent, String parentType, String name, Group.GroupCharacteristicComponent element, int index) {
13103    if (element == null) 
13104      return;
13105    Complex t;
13106    if (Utilities.noString(parentType))
13107      t = parent;
13108    else {
13109      t = parent.predicate("fhir:"+parentType+'.'+name);
13110    }
13111    composeBackboneElement(t, "characteristic", name, element, index);
13112    if (element.hasCode()) {
13113      composeCodeableConcept(t, "GroupCharacteristicComponent", "code", element.getCode(), -1);
13114    }
13115    if (element.hasValue()) {
13116      composeType(t, "GroupCharacteristicComponent", "value", element.getValue(), -1);
13117    }
13118    if (element.hasExcludeElement()) {
13119      composeBoolean(t, "GroupCharacteristicComponent", "exclude", element.getExcludeElement(), -1);
13120    }
13121    if (element.hasPeriod()) {
13122      composePeriod(t, "GroupCharacteristicComponent", "period", element.getPeriod(), -1);
13123    }
13124  }
13125
13126  protected void composeGroupMemberComponent(Complex parent, String parentType, String name, Group.GroupMemberComponent element, int index) {
13127    if (element == null) 
13128      return;
13129    Complex t;
13130    if (Utilities.noString(parentType))
13131      t = parent;
13132    else {
13133      t = parent.predicate("fhir:"+parentType+'.'+name);
13134    }
13135    composeBackboneElement(t, "member", name, element, index);
13136    if (element.hasEntity()) {
13137      composeReference(t, "GroupMemberComponent", "entity", element.getEntity(), -1);
13138    }
13139    if (element.hasPeriod()) {
13140      composePeriod(t, "GroupMemberComponent", "period", element.getPeriod(), -1);
13141    }
13142    if (element.hasInactiveElement()) {
13143      composeBoolean(t, "GroupMemberComponent", "inactive", element.getInactiveElement(), -1);
13144    }
13145  }
13146
13147  protected void composeGuidanceResponse(Complex parent, String parentType, String name, GuidanceResponse element, int index) {
13148    if (element == null) 
13149      return;
13150    Complex t;
13151    if (Utilities.noString(parentType))
13152      t = parent;
13153    else {
13154      t = parent.predicate("fhir:"+parentType+'.'+name);
13155    }
13156    composeDomainResource(t, "GuidanceResponse", name, element, index);
13157    if (element.hasRequestIdentifier()) {
13158      composeIdentifier(t, "GuidanceResponse", "requestIdentifier", element.getRequestIdentifier(), -1);
13159    }
13160    for (int i = 0; i < element.getIdentifier().size(); i++) {
13161      composeIdentifier(t, "GuidanceResponse", "identifier", element.getIdentifier().get(i), i);
13162    }
13163    if (element.hasModule()) {
13164      composeType(t, "GuidanceResponse", "module", element.getModule(), -1);
13165    }
13166    if (element.hasStatusElement()) {
13167      composeEnum(t, "GuidanceResponse", "status", element.getStatusElement(), -1);
13168    }
13169    if (element.hasSubject()) {
13170      composeReference(t, "GuidanceResponse", "subject", element.getSubject(), -1);
13171    }
13172    if (element.hasEncounter()) {
13173      composeReference(t, "GuidanceResponse", "encounter", element.getEncounter(), -1);
13174    }
13175    if (element.hasOccurrenceDateTimeElement()) {
13176      composeDateTime(t, "GuidanceResponse", "occurrenceDateTime", element.getOccurrenceDateTimeElement(), -1);
13177    }
13178    if (element.hasPerformer()) {
13179      composeReference(t, "GuidanceResponse", "performer", element.getPerformer(), -1);
13180    }
13181    for (int i = 0; i < element.getReason().size(); i++) {
13182      composeCodeableReference(t, "GuidanceResponse", "reason", element.getReason().get(i), i);
13183    }
13184    for (int i = 0; i < element.getNote().size(); i++) {
13185      composeAnnotation(t, "GuidanceResponse", "note", element.getNote().get(i), i);
13186    }
13187    for (int i = 0; i < element.getEvaluationMessage().size(); i++) {
13188      composeReference(t, "GuidanceResponse", "evaluationMessage", element.getEvaluationMessage().get(i), i);
13189    }
13190    if (element.hasOutputParameters()) {
13191      composeReference(t, "GuidanceResponse", "outputParameters", element.getOutputParameters(), -1);
13192    }
13193    if (element.hasResult()) {
13194      composeReference(t, "GuidanceResponse", "result", element.getResult(), -1);
13195    }
13196    for (int i = 0; i < element.getDataRequirement().size(); i++) {
13197      composeDataRequirement(t, "GuidanceResponse", "dataRequirement", element.getDataRequirement().get(i), i);
13198    }
13199  }
13200
13201  protected void composeHealthcareService(Complex parent, String parentType, String name, HealthcareService element, int index) {
13202    if (element == null) 
13203      return;
13204    Complex t;
13205    if (Utilities.noString(parentType))
13206      t = parent;
13207    else {
13208      t = parent.predicate("fhir:"+parentType+'.'+name);
13209    }
13210    composeDomainResource(t, "HealthcareService", name, element, index);
13211    for (int i = 0; i < element.getIdentifier().size(); i++) {
13212      composeIdentifier(t, "HealthcareService", "identifier", element.getIdentifier().get(i), i);
13213    }
13214    if (element.hasActiveElement()) {
13215      composeBoolean(t, "HealthcareService", "active", element.getActiveElement(), -1);
13216    }
13217    if (element.hasProvidedBy()) {
13218      composeReference(t, "HealthcareService", "providedBy", element.getProvidedBy(), -1);
13219    }
13220    for (int i = 0; i < element.getCategory().size(); i++) {
13221      composeCodeableConcept(t, "HealthcareService", "category", element.getCategory().get(i), i);
13222    }
13223    for (int i = 0; i < element.getType().size(); i++) {
13224      composeCodeableConcept(t, "HealthcareService", "type", element.getType().get(i), i);
13225    }
13226    for (int i = 0; i < element.getSpecialty().size(); i++) {
13227      composeCodeableConcept(t, "HealthcareService", "specialty", element.getSpecialty().get(i), i);
13228    }
13229    for (int i = 0; i < element.getLocation().size(); i++) {
13230      composeReference(t, "HealthcareService", "location", element.getLocation().get(i), i);
13231    }
13232    if (element.hasNameElement()) {
13233      composeString(t, "HealthcareService", "name", element.getNameElement(), -1);
13234    }
13235    if (element.hasCommentElement()) {
13236      composeString(t, "HealthcareService", "comment", element.getCommentElement(), -1);
13237    }
13238    if (element.hasExtraDetailsElement()) {
13239      composeMarkdown(t, "HealthcareService", "extraDetails", element.getExtraDetailsElement(), -1);
13240    }
13241    if (element.hasPhoto()) {
13242      composeAttachment(t, "HealthcareService", "photo", element.getPhoto(), -1);
13243    }
13244    for (int i = 0; i < element.getTelecom().size(); i++) {
13245      composeContactPoint(t, "HealthcareService", "telecom", element.getTelecom().get(i), i);
13246    }
13247    for (int i = 0; i < element.getCoverageArea().size(); i++) {
13248      composeReference(t, "HealthcareService", "coverageArea", element.getCoverageArea().get(i), i);
13249    }
13250    for (int i = 0; i < element.getServiceProvisionCode().size(); i++) {
13251      composeCodeableConcept(t, "HealthcareService", "serviceProvisionCode", element.getServiceProvisionCode().get(i), i);
13252    }
13253    for (int i = 0; i < element.getEligibility().size(); i++) {
13254      composeHealthcareServiceEligibilityComponent(t, "HealthcareService", "eligibility", element.getEligibility().get(i), i);
13255    }
13256    for (int i = 0; i < element.getProgram().size(); i++) {
13257      composeCodeableConcept(t, "HealthcareService", "program", element.getProgram().get(i), i);
13258    }
13259    for (int i = 0; i < element.getCharacteristic().size(); i++) {
13260      composeCodeableConcept(t, "HealthcareService", "characteristic", element.getCharacteristic().get(i), i);
13261    }
13262    for (int i = 0; i < element.getCommunication().size(); i++) {
13263      composeCodeableConcept(t, "HealthcareService", "communication", element.getCommunication().get(i), i);
13264    }
13265    for (int i = 0; i < element.getReferralMethod().size(); i++) {
13266      composeCodeableConcept(t, "HealthcareService", "referralMethod", element.getReferralMethod().get(i), i);
13267    }
13268    if (element.hasAppointmentRequiredElement()) {
13269      composeBoolean(t, "HealthcareService", "appointmentRequired", element.getAppointmentRequiredElement(), -1);
13270    }
13271    for (int i = 0; i < element.getAvailableTime().size(); i++) {
13272      composeHealthcareServiceAvailableTimeComponent(t, "HealthcareService", "availableTime", element.getAvailableTime().get(i), i);
13273    }
13274    for (int i = 0; i < element.getNotAvailable().size(); i++) {
13275      composeHealthcareServiceNotAvailableComponent(t, "HealthcareService", "notAvailable", element.getNotAvailable().get(i), i);
13276    }
13277    if (element.hasAvailabilityExceptionsElement()) {
13278      composeString(t, "HealthcareService", "availabilityExceptions", element.getAvailabilityExceptionsElement(), -1);
13279    }
13280    for (int i = 0; i < element.getEndpoint().size(); i++) {
13281      composeReference(t, "HealthcareService", "endpoint", element.getEndpoint().get(i), i);
13282    }
13283  }
13284
13285  protected void composeHealthcareServiceEligibilityComponent(Complex parent, String parentType, String name, HealthcareService.HealthcareServiceEligibilityComponent element, int index) {
13286    if (element == null) 
13287      return;
13288    Complex t;
13289    if (Utilities.noString(parentType))
13290      t = parent;
13291    else {
13292      t = parent.predicate("fhir:"+parentType+'.'+name);
13293    }
13294    composeBackboneElement(t, "eligibility", name, element, index);
13295    if (element.hasCode()) {
13296      composeCodeableConcept(t, "HealthcareServiceEligibilityComponent", "code", element.getCode(), -1);
13297    }
13298    if (element.hasCommentElement()) {
13299      composeMarkdown(t, "HealthcareServiceEligibilityComponent", "comment", element.getCommentElement(), -1);
13300    }
13301  }
13302
13303  protected void composeHealthcareServiceAvailableTimeComponent(Complex parent, String parentType, String name, HealthcareService.HealthcareServiceAvailableTimeComponent element, int index) {
13304    if (element == null) 
13305      return;
13306    Complex t;
13307    if (Utilities.noString(parentType))
13308      t = parent;
13309    else {
13310      t = parent.predicate("fhir:"+parentType+'.'+name);
13311    }
13312    composeBackboneElement(t, "availableTime", name, element, index);
13313    for (int i = 0; i < element.getDaysOfWeek().size(); i++) {
13314      composeEnum(t, "HealthcareServiceAvailableTimeComponent", "daysOfWeek", element.getDaysOfWeek().get(i), i);
13315    }
13316    if (element.hasAllDayElement()) {
13317      composeBoolean(t, "HealthcareServiceAvailableTimeComponent", "allDay", element.getAllDayElement(), -1);
13318    }
13319    if (element.hasAvailableStartTimeElement()) {
13320      composeTime(t, "HealthcareServiceAvailableTimeComponent", "availableStartTime", element.getAvailableStartTimeElement(), -1);
13321    }
13322    if (element.hasAvailableEndTimeElement()) {
13323      composeTime(t, "HealthcareServiceAvailableTimeComponent", "availableEndTime", element.getAvailableEndTimeElement(), -1);
13324    }
13325  }
13326
13327  protected void composeHealthcareServiceNotAvailableComponent(Complex parent, String parentType, String name, HealthcareService.HealthcareServiceNotAvailableComponent element, int index) {
13328    if (element == null) 
13329      return;
13330    Complex t;
13331    if (Utilities.noString(parentType))
13332      t = parent;
13333    else {
13334      t = parent.predicate("fhir:"+parentType+'.'+name);
13335    }
13336    composeBackboneElement(t, "notAvailable", name, element, index);
13337    if (element.hasDescriptionElement()) {
13338      composeString(t, "HealthcareServiceNotAvailableComponent", "description", element.getDescriptionElement(), -1);
13339    }
13340    if (element.hasDuring()) {
13341      composePeriod(t, "HealthcareServiceNotAvailableComponent", "during", element.getDuring(), -1);
13342    }
13343  }
13344
13345  protected void composeImagingSelection(Complex parent, String parentType, String name, ImagingSelection element, int index) {
13346    if (element == null) 
13347      return;
13348    Complex t;
13349    if (Utilities.noString(parentType))
13350      t = parent;
13351    else {
13352      t = parent.predicate("fhir:"+parentType+'.'+name);
13353    }
13354    composeDomainResource(t, "ImagingSelection", name, element, index);
13355    for (int i = 0; i < element.getIdentifier().size(); i++) {
13356      composeIdentifier(t, "ImagingSelection", "identifier", element.getIdentifier().get(i), i);
13357    }
13358    for (int i = 0; i < element.getBasedOn().size(); i++) {
13359      composeReference(t, "ImagingSelection", "basedOn", element.getBasedOn().get(i), i);
13360    }
13361    if (element.hasSubject()) {
13362      composeReference(t, "ImagingSelection", "subject", element.getSubject(), -1);
13363    }
13364    if (element.hasIssuedElement()) {
13365      composeInstant(t, "ImagingSelection", "issued", element.getIssuedElement(), -1);
13366    }
13367    for (int i = 0; i < element.getPerformer().size(); i++) {
13368      composeImagingSelectionPerformerComponent(t, "ImagingSelection", "performer", element.getPerformer().get(i), i);
13369    }
13370    if (element.hasCode()) {
13371      composeCodeableConcept(t, "ImagingSelection", "code", element.getCode(), -1);
13372    }
13373    if (element.hasStudyUidElement()) {
13374      composeOid(t, "ImagingSelection", "studyUid", element.getStudyUidElement(), -1);
13375    }
13376    for (int i = 0; i < element.getDerivedFrom().size(); i++) {
13377      composeReference(t, "ImagingSelection", "derivedFrom", element.getDerivedFrom().get(i), i);
13378    }
13379    for (int i = 0; i < element.getEndpoint().size(); i++) {
13380      composeReference(t, "ImagingSelection", "endpoint", element.getEndpoint().get(i), i);
13381    }
13382    if (element.hasSeriesUidElement()) {
13383      composeOid(t, "ImagingSelection", "seriesUid", element.getSeriesUidElement(), -1);
13384    }
13385    if (element.hasFrameOfReferenceUidElement()) {
13386      composeOid(t, "ImagingSelection", "frameOfReferenceUid", element.getFrameOfReferenceUidElement(), -1);
13387    }
13388    if (element.hasBodySite()) {
13389      composeCoding(t, "ImagingSelection", "bodySite", element.getBodySite(), -1);
13390    }
13391    for (int i = 0; i < element.getInstance().size(); i++) {
13392      composeImagingSelectionInstanceComponent(t, "ImagingSelection", "instance", element.getInstance().get(i), i);
13393    }
13394    if (element.hasImageRegion()) {
13395      composeImagingSelectionImageRegionComponent(t, "ImagingSelection", "imageRegion", element.getImageRegion(), -1);
13396    }
13397  }
13398
13399  protected void composeImagingSelectionPerformerComponent(Complex parent, String parentType, String name, ImagingSelection.ImagingSelectionPerformerComponent 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:"+parentType+'.'+name);
13407    }
13408    composeBackboneElement(t, "performer", name, element, index);
13409    if (element.hasFunction()) {
13410      composeCodeableConcept(t, "ImagingSelectionPerformerComponent", "function", element.getFunction(), -1);
13411    }
13412    if (element.hasActor()) {
13413      composeReference(t, "ImagingSelectionPerformerComponent", "actor", element.getActor(), -1);
13414    }
13415  }
13416
13417  protected void composeImagingSelectionInstanceComponent(Complex parent, String parentType, String name, ImagingSelection.ImagingSelectionInstanceComponent element, int index) {
13418    if (element == null) 
13419      return;
13420    Complex t;
13421    if (Utilities.noString(parentType))
13422      t = parent;
13423    else {
13424      t = parent.predicate("fhir:"+parentType+'.'+name);
13425    }
13426    composeBackboneElement(t, "instance", name, element, index);
13427    if (element.hasUidElement()) {
13428      composeOid(t, "ImagingSelectionInstanceComponent", "uid", element.getUidElement(), -1);
13429    }
13430    if (element.hasSopClass()) {
13431      composeCoding(t, "ImagingSelectionInstanceComponent", "sopClass", element.getSopClass(), -1);
13432    }
13433    if (element.hasFrameListElement()) {
13434      composeString(t, "ImagingSelectionInstanceComponent", "frameList", element.getFrameListElement(), -1);
13435    }
13436    for (int i = 0; i < element.getObservationUid().size(); i++) {
13437      composeOid(t, "ImagingSelectionInstanceComponent", "observationUid", element.getObservationUid().get(i), i);
13438    }
13439    if (element.hasSegmentListElement()) {
13440      composeString(t, "ImagingSelectionInstanceComponent", "segmentList", element.getSegmentListElement(), -1);
13441    }
13442    if (element.hasRoiListElement()) {
13443      composeString(t, "ImagingSelectionInstanceComponent", "roiList", element.getRoiListElement(), -1);
13444    }
13445  }
13446
13447  protected void composeImagingSelectionImageRegionComponent(Complex parent, String parentType, String name, ImagingSelection.ImagingSelectionImageRegionComponent element, int index) {
13448    if (element == null) 
13449      return;
13450    Complex t;
13451    if (Utilities.noString(parentType))
13452      t = parent;
13453    else {
13454      t = parent.predicate("fhir:"+parentType+'.'+name);
13455    }
13456    composeBackboneElement(t, "imageRegion", name, element, index);
13457    if (element.hasRegionTypeElement()) {
13458      composeEnum(t, "ImagingSelectionImageRegionComponent", "regionType", element.getRegionTypeElement(), -1);
13459    }
13460    if (element.hasCoordinateTypeElement()) {
13461      composeEnum(t, "ImagingSelectionImageRegionComponent", "coordinateType", element.getCoordinateTypeElement(), -1);
13462    }
13463    for (int i = 0; i < element.getCoordinates().size(); i++) {
13464      composeDecimal(t, "ImagingSelectionImageRegionComponent", "coordinates", element.getCoordinates().get(i), i);
13465    }
13466  }
13467
13468  protected void composeImagingStudy(Complex parent, String parentType, String name, ImagingStudy element, int index) {
13469    if (element == null) 
13470      return;
13471    Complex t;
13472    if (Utilities.noString(parentType))
13473      t = parent;
13474    else {
13475      t = parent.predicate("fhir:"+parentType+'.'+name);
13476    }
13477    composeDomainResource(t, "ImagingStudy", name, element, index);
13478    for (int i = 0; i < element.getIdentifier().size(); i++) {
13479      composeIdentifier(t, "ImagingStudy", "identifier", element.getIdentifier().get(i), i);
13480    }
13481    if (element.hasStatusElement()) {
13482      composeEnum(t, "ImagingStudy", "status", element.getStatusElement(), -1);
13483    }
13484    for (int i = 0; i < element.getModality().size(); i++) {
13485      composeCoding(t, "ImagingStudy", "modality", element.getModality().get(i), i);
13486    }
13487    if (element.hasSubject()) {
13488      composeReference(t, "ImagingStudy", "subject", element.getSubject(), -1);
13489    }
13490    if (element.hasEncounter()) {
13491      composeReference(t, "ImagingStudy", "encounter", element.getEncounter(), -1);
13492    }
13493    if (element.hasStartedElement()) {
13494      composeDateTime(t, "ImagingStudy", "started", element.getStartedElement(), -1);
13495    }
13496    for (int i = 0; i < element.getBasedOn().size(); i++) {
13497      composeReference(t, "ImagingStudy", "basedOn", element.getBasedOn().get(i), i);
13498    }
13499    if (element.hasReferrer()) {
13500      composeReference(t, "ImagingStudy", "referrer", element.getReferrer(), -1);
13501    }
13502    for (int i = 0; i < element.getInterpreter().size(); i++) {
13503      composeReference(t, "ImagingStudy", "interpreter", element.getInterpreter().get(i), i);
13504    }
13505    for (int i = 0; i < element.getEndpoint().size(); i++) {
13506      composeReference(t, "ImagingStudy", "endpoint", element.getEndpoint().get(i), i);
13507    }
13508    if (element.hasNumberOfSeriesElement()) {
13509      composeUnsignedInt(t, "ImagingStudy", "numberOfSeries", element.getNumberOfSeriesElement(), -1);
13510    }
13511    if (element.hasNumberOfInstancesElement()) {
13512      composeUnsignedInt(t, "ImagingStudy", "numberOfInstances", element.getNumberOfInstancesElement(), -1);
13513    }
13514    for (int i = 0; i < element.getProcedure().size(); i++) {
13515      composeCodeableReference(t, "ImagingStudy", "procedure", element.getProcedure().get(i), i);
13516    }
13517    if (element.hasLocation()) {
13518      composeReference(t, "ImagingStudy", "location", element.getLocation(), -1);
13519    }
13520    for (int i = 0; i < element.getReason().size(); i++) {
13521      composeCodeableReference(t, "ImagingStudy", "reason", element.getReason().get(i), i);
13522    }
13523    for (int i = 0; i < element.getNote().size(); i++) {
13524      composeAnnotation(t, "ImagingStudy", "note", element.getNote().get(i), i);
13525    }
13526    if (element.hasDescriptionElement()) {
13527      composeString(t, "ImagingStudy", "description", element.getDescriptionElement(), -1);
13528    }
13529    for (int i = 0; i < element.getSeries().size(); i++) {
13530      composeImagingStudySeriesComponent(t, "ImagingStudy", "series", element.getSeries().get(i), i);
13531    }
13532  }
13533
13534  protected void composeImagingStudySeriesComponent(Complex parent, String parentType, String name, ImagingStudy.ImagingStudySeriesComponent element, int index) {
13535    if (element == null) 
13536      return;
13537    Complex t;
13538    if (Utilities.noString(parentType))
13539      t = parent;
13540    else {
13541      t = parent.predicate("fhir:"+parentType+'.'+name);
13542    }
13543    composeBackboneElement(t, "series", name, element, index);
13544    if (element.hasUidElement()) {
13545      composeId(t, "ImagingStudySeriesComponent", "uid", element.getUidElement(), -1);
13546    }
13547    if (element.hasNumberElement()) {
13548      composeUnsignedInt(t, "ImagingStudySeriesComponent", "number", element.getNumberElement(), -1);
13549    }
13550    if (element.hasModality()) {
13551      composeCoding(t, "ImagingStudySeriesComponent", "modality", element.getModality(), -1);
13552    }
13553    if (element.hasDescriptionElement()) {
13554      composeString(t, "ImagingStudySeriesComponent", "description", element.getDescriptionElement(), -1);
13555    }
13556    if (element.hasNumberOfInstancesElement()) {
13557      composeUnsignedInt(t, "ImagingStudySeriesComponent", "numberOfInstances", element.getNumberOfInstancesElement(), -1);
13558    }
13559    for (int i = 0; i < element.getEndpoint().size(); i++) {
13560      composeReference(t, "ImagingStudySeriesComponent", "endpoint", element.getEndpoint().get(i), i);
13561    }
13562    if (element.hasBodySite()) {
13563      composeCoding(t, "ImagingStudySeriesComponent", "bodySite", element.getBodySite(), -1);
13564    }
13565    if (element.hasLaterality()) {
13566      composeCoding(t, "ImagingStudySeriesComponent", "laterality", element.getLaterality(), -1);
13567    }
13568    for (int i = 0; i < element.getSpecimen().size(); i++) {
13569      composeReference(t, "ImagingStudySeriesComponent", "specimen", element.getSpecimen().get(i), i);
13570    }
13571    if (element.hasStartedElement()) {
13572      composeDateTime(t, "ImagingStudySeriesComponent", "started", element.getStartedElement(), -1);
13573    }
13574    for (int i = 0; i < element.getPerformer().size(); i++) {
13575      composeImagingStudySeriesPerformerComponent(t, "ImagingStudySeriesComponent", "performer", element.getPerformer().get(i), i);
13576    }
13577    for (int i = 0; i < element.getInstance().size(); i++) {
13578      composeImagingStudySeriesInstanceComponent(t, "ImagingStudySeriesComponent", "instance", element.getInstance().get(i), i);
13579    }
13580  }
13581
13582  protected void composeImagingStudySeriesPerformerComponent(Complex parent, String parentType, String name, ImagingStudy.ImagingStudySeriesPerformerComponent element, int index) {
13583    if (element == null) 
13584      return;
13585    Complex t;
13586    if (Utilities.noString(parentType))
13587      t = parent;
13588    else {
13589      t = parent.predicate("fhir:"+parentType+'.'+name);
13590    }
13591    composeBackboneElement(t, "performer", name, element, index);
13592    if (element.hasFunction()) {
13593      composeCodeableConcept(t, "ImagingStudySeriesPerformerComponent", "function", element.getFunction(), -1);
13594    }
13595    if (element.hasActor()) {
13596      composeReference(t, "ImagingStudySeriesPerformerComponent", "actor", element.getActor(), -1);
13597    }
13598  }
13599
13600  protected void composeImagingStudySeriesInstanceComponent(Complex parent, String parentType, String name, ImagingStudy.ImagingStudySeriesInstanceComponent element, int index) {
13601    if (element == null) 
13602      return;
13603    Complex t;
13604    if (Utilities.noString(parentType))
13605      t = parent;
13606    else {
13607      t = parent.predicate("fhir:"+parentType+'.'+name);
13608    }
13609    composeBackboneElement(t, "instance", name, element, index);
13610    if (element.hasUidElement()) {
13611      composeId(t, "ImagingStudySeriesInstanceComponent", "uid", element.getUidElement(), -1);
13612    }
13613    if (element.hasSopClass()) {
13614      composeCoding(t, "ImagingStudySeriesInstanceComponent", "sopClass", element.getSopClass(), -1);
13615    }
13616    if (element.hasNumberElement()) {
13617      composeUnsignedInt(t, "ImagingStudySeriesInstanceComponent", "number", element.getNumberElement(), -1);
13618    }
13619    if (element.hasTitleElement()) {
13620      composeString(t, "ImagingStudySeriesInstanceComponent", "title", element.getTitleElement(), -1);
13621    }
13622  }
13623
13624  protected void composeImmunization(Complex parent, String parentType, String name, Immunization element, int index) {
13625    if (element == null) 
13626      return;
13627    Complex t;
13628    if (Utilities.noString(parentType))
13629      t = parent;
13630    else {
13631      t = parent.predicate("fhir:"+parentType+'.'+name);
13632    }
13633    composeDomainResource(t, "Immunization", name, element, index);
13634    for (int i = 0; i < element.getIdentifier().size(); i++) {
13635      composeIdentifier(t, "Immunization", "identifier", element.getIdentifier().get(i), i);
13636    }
13637    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
13638      composeCanonical(t, "Immunization", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
13639    }
13640    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
13641      composeUri(t, "Immunization", "instantiatesUri", element.getInstantiatesUri().get(i), i);
13642    }
13643    for (int i = 0; i < element.getBasedOn().size(); i++) {
13644      composeReference(t, "Immunization", "basedOn", element.getBasedOn().get(i), i);
13645    }
13646    if (element.hasStatusElement()) {
13647      composeEnum(t, "Immunization", "status", element.getStatusElement(), -1);
13648    }
13649    if (element.hasStatusReason()) {
13650      composeCodeableConcept(t, "Immunization", "statusReason", element.getStatusReason(), -1);
13651    }
13652    if (element.hasVaccineCode()) {
13653      composeCodeableConcept(t, "Immunization", "vaccineCode", element.getVaccineCode(), -1);
13654    }
13655    if (element.hasManufacturer()) {
13656      composeReference(t, "Immunization", "manufacturer", element.getManufacturer(), -1);
13657    }
13658    if (element.hasLotNumberElement()) {
13659      composeString(t, "Immunization", "lotNumber", element.getLotNumberElement(), -1);
13660    }
13661    if (element.hasExpirationDateElement()) {
13662      composeDate(t, "Immunization", "expirationDate", element.getExpirationDateElement(), -1);
13663    }
13664    if (element.hasPatient()) {
13665      composeReference(t, "Immunization", "patient", element.getPatient(), -1);
13666    }
13667    if (element.hasEncounter()) {
13668      composeReference(t, "Immunization", "encounter", element.getEncounter(), -1);
13669    }
13670    if (element.hasOccurrence()) {
13671      composeType(t, "Immunization", "occurrence", element.getOccurrence(), -1);
13672    }
13673    if (element.hasRecordedElement()) {
13674      composeDateTime(t, "Immunization", "recorded", element.getRecordedElement(), -1);
13675    }
13676    if (element.hasPrimarySourceElement()) {
13677      composeBoolean(t, "Immunization", "primarySource", element.getPrimarySourceElement(), -1);
13678    }
13679    if (element.hasInformationSource()) {
13680      composeType(t, "Immunization", "informationSource", element.getInformationSource(), -1);
13681    }
13682    if (element.hasLocation()) {
13683      composeReference(t, "Immunization", "location", element.getLocation(), -1);
13684    }
13685    if (element.hasSite()) {
13686      composeCodeableConcept(t, "Immunization", "site", element.getSite(), -1);
13687    }
13688    if (element.hasRoute()) {
13689      composeCodeableConcept(t, "Immunization", "route", element.getRoute(), -1);
13690    }
13691    if (element.hasDoseQuantity()) {
13692      composeQuantity(t, "Immunization", "doseQuantity", element.getDoseQuantity(), -1);
13693    }
13694    for (int i = 0; i < element.getPerformer().size(); i++) {
13695      composeImmunizationPerformerComponent(t, "Immunization", "performer", element.getPerformer().get(i), i);
13696    }
13697    for (int i = 0; i < element.getNote().size(); i++) {
13698      composeAnnotation(t, "Immunization", "note", element.getNote().get(i), i);
13699    }
13700    for (int i = 0; i < element.getReason().size(); i++) {
13701      composeCodeableReference(t, "Immunization", "reason", element.getReason().get(i), i);
13702    }
13703    if (element.hasIsSubpotentElement()) {
13704      composeBoolean(t, "Immunization", "isSubpotent", element.getIsSubpotentElement(), -1);
13705    }
13706    for (int i = 0; i < element.getSubpotentReason().size(); i++) {
13707      composeCodeableConcept(t, "Immunization", "subpotentReason", element.getSubpotentReason().get(i), i);
13708    }
13709    for (int i = 0; i < element.getEducation().size(); i++) {
13710      composeImmunizationEducationComponent(t, "Immunization", "education", element.getEducation().get(i), i);
13711    }
13712    for (int i = 0; i < element.getProgramEligibility().size(); i++) {
13713      composeCodeableConcept(t, "Immunization", "programEligibility", element.getProgramEligibility().get(i), i);
13714    }
13715    if (element.hasFundingSource()) {
13716      composeCodeableConcept(t, "Immunization", "fundingSource", element.getFundingSource(), -1);
13717    }
13718    for (int i = 0; i < element.getReaction().size(); i++) {
13719      composeImmunizationReactionComponent(t, "Immunization", "reaction", element.getReaction().get(i), i);
13720    }
13721    for (int i = 0; i < element.getProtocolApplied().size(); i++) {
13722      composeImmunizationProtocolAppliedComponent(t, "Immunization", "protocolApplied", element.getProtocolApplied().get(i), i);
13723    }
13724  }
13725
13726  protected void composeImmunizationPerformerComponent(Complex parent, String parentType, String name, Immunization.ImmunizationPerformerComponent element, int index) {
13727    if (element == null) 
13728      return;
13729    Complex t;
13730    if (Utilities.noString(parentType))
13731      t = parent;
13732    else {
13733      t = parent.predicate("fhir:"+parentType+'.'+name);
13734    }
13735    composeBackboneElement(t, "performer", name, element, index);
13736    if (element.hasFunction()) {
13737      composeCodeableConcept(t, "ImmunizationPerformerComponent", "function", element.getFunction(), -1);
13738    }
13739    if (element.hasActor()) {
13740      composeReference(t, "ImmunizationPerformerComponent", "actor", element.getActor(), -1);
13741    }
13742  }
13743
13744  protected void composeImmunizationEducationComponent(Complex parent, String parentType, String name, Immunization.ImmunizationEducationComponent element, int index) {
13745    if (element == null) 
13746      return;
13747    Complex t;
13748    if (Utilities.noString(parentType))
13749      t = parent;
13750    else {
13751      t = parent.predicate("fhir:"+parentType+'.'+name);
13752    }
13753    composeBackboneElement(t, "education", name, element, index);
13754    if (element.hasDocumentTypeElement()) {
13755      composeString(t, "ImmunizationEducationComponent", "documentType", element.getDocumentTypeElement(), -1);
13756    }
13757    if (element.hasReferenceElement()) {
13758      composeUri(t, "ImmunizationEducationComponent", "reference", element.getReferenceElement(), -1);
13759    }
13760    if (element.hasPublicationDateElement()) {
13761      composeDateTime(t, "ImmunizationEducationComponent", "publicationDate", element.getPublicationDateElement(), -1);
13762    }
13763    if (element.hasPresentationDateElement()) {
13764      composeDateTime(t, "ImmunizationEducationComponent", "presentationDate", element.getPresentationDateElement(), -1);
13765    }
13766  }
13767
13768  protected void composeImmunizationReactionComponent(Complex parent, String parentType, String name, Immunization.ImmunizationReactionComponent element, int index) {
13769    if (element == null) 
13770      return;
13771    Complex t;
13772    if (Utilities.noString(parentType))
13773      t = parent;
13774    else {
13775      t = parent.predicate("fhir:"+parentType+'.'+name);
13776    }
13777    composeBackboneElement(t, "reaction", name, element, index);
13778    if (element.hasDateElement()) {
13779      composeDateTime(t, "ImmunizationReactionComponent", "date", element.getDateElement(), -1);
13780    }
13781    if (element.hasDetail()) {
13782      composeReference(t, "ImmunizationReactionComponent", "detail", element.getDetail(), -1);
13783    }
13784    if (element.hasReportedElement()) {
13785      composeBoolean(t, "ImmunizationReactionComponent", "reported", element.getReportedElement(), -1);
13786    }
13787  }
13788
13789  protected void composeImmunizationProtocolAppliedComponent(Complex parent, String parentType, String name, Immunization.ImmunizationProtocolAppliedComponent element, int index) {
13790    if (element == null) 
13791      return;
13792    Complex t;
13793    if (Utilities.noString(parentType))
13794      t = parent;
13795    else {
13796      t = parent.predicate("fhir:"+parentType+'.'+name);
13797    }
13798    composeBackboneElement(t, "protocolApplied", name, element, index);
13799    if (element.hasSeriesElement()) {
13800      composeString(t, "ImmunizationProtocolAppliedComponent", "series", element.getSeriesElement(), -1);
13801    }
13802    if (element.hasAuthority()) {
13803      composeReference(t, "ImmunizationProtocolAppliedComponent", "authority", element.getAuthority(), -1);
13804    }
13805    for (int i = 0; i < element.getTargetDisease().size(); i++) {
13806      composeCodeableConcept(t, "ImmunizationProtocolAppliedComponent", "targetDisease", element.getTargetDisease().get(i), i);
13807    }
13808    if (element.hasDoseNumberElement()) {
13809      composeString(t, "ImmunizationProtocolAppliedComponent", "doseNumber", element.getDoseNumberElement(), -1);
13810    }
13811    if (element.hasSeriesDosesElement()) {
13812      composeString(t, "ImmunizationProtocolAppliedComponent", "seriesDoses", element.getSeriesDosesElement(), -1);
13813    }
13814  }
13815
13816  protected void composeImmunizationEvaluation(Complex parent, String parentType, String name, ImmunizationEvaluation element, int index) {
13817    if (element == null) 
13818      return;
13819    Complex t;
13820    if (Utilities.noString(parentType))
13821      t = parent;
13822    else {
13823      t = parent.predicate("fhir:"+parentType+'.'+name);
13824    }
13825    composeDomainResource(t, "ImmunizationEvaluation", name, element, index);
13826    for (int i = 0; i < element.getIdentifier().size(); i++) {
13827      composeIdentifier(t, "ImmunizationEvaluation", "identifier", element.getIdentifier().get(i), i);
13828    }
13829    if (element.hasStatusElement()) {
13830      composeEnum(t, "ImmunizationEvaluation", "status", element.getStatusElement(), -1);
13831    }
13832    if (element.hasPatient()) {
13833      composeReference(t, "ImmunizationEvaluation", "patient", element.getPatient(), -1);
13834    }
13835    if (element.hasDateElement()) {
13836      composeDateTime(t, "ImmunizationEvaluation", "date", element.getDateElement(), -1);
13837    }
13838    if (element.hasAuthority()) {
13839      composeReference(t, "ImmunizationEvaluation", "authority", element.getAuthority(), -1);
13840    }
13841    if (element.hasTargetDisease()) {
13842      composeCodeableConcept(t, "ImmunizationEvaluation", "targetDisease", element.getTargetDisease(), -1);
13843    }
13844    if (element.hasImmunizationEvent()) {
13845      composeReference(t, "ImmunizationEvaluation", "immunizationEvent", element.getImmunizationEvent(), -1);
13846    }
13847    if (element.hasDoseStatus()) {
13848      composeCodeableConcept(t, "ImmunizationEvaluation", "doseStatus", element.getDoseStatus(), -1);
13849    }
13850    for (int i = 0; i < element.getDoseStatusReason().size(); i++) {
13851      composeCodeableConcept(t, "ImmunizationEvaluation", "doseStatusReason", element.getDoseStatusReason().get(i), i);
13852    }
13853    if (element.hasDescriptionElement()) {
13854      composeString(t, "ImmunizationEvaluation", "description", element.getDescriptionElement(), -1);
13855    }
13856    if (element.hasSeriesElement()) {
13857      composeString(t, "ImmunizationEvaluation", "series", element.getSeriesElement(), -1);
13858    }
13859    if (element.hasDoseNumberElement()) {
13860      composeString(t, "ImmunizationEvaluation", "doseNumber", element.getDoseNumberElement(), -1);
13861    }
13862    if (element.hasSeriesDosesElement()) {
13863      composeString(t, "ImmunizationEvaluation", "seriesDoses", element.getSeriesDosesElement(), -1);
13864    }
13865  }
13866
13867  protected void composeImmunizationRecommendation(Complex parent, String parentType, String name, ImmunizationRecommendation element, int index) {
13868    if (element == null) 
13869      return;
13870    Complex t;
13871    if (Utilities.noString(parentType))
13872      t = parent;
13873    else {
13874      t = parent.predicate("fhir:"+parentType+'.'+name);
13875    }
13876    composeDomainResource(t, "ImmunizationRecommendation", name, element, index);
13877    for (int i = 0; i < element.getIdentifier().size(); i++) {
13878      composeIdentifier(t, "ImmunizationRecommendation", "identifier", element.getIdentifier().get(i), i);
13879    }
13880    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
13881      composeCanonical(t, "ImmunizationRecommendation", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
13882    }
13883    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
13884      composeUri(t, "ImmunizationRecommendation", "instantiatesUri", element.getInstantiatesUri().get(i), i);
13885    }
13886    if (element.hasPatient()) {
13887      composeReference(t, "ImmunizationRecommendation", "patient", element.getPatient(), -1);
13888    }
13889    if (element.hasDateElement()) {
13890      composeDateTime(t, "ImmunizationRecommendation", "date", element.getDateElement(), -1);
13891    }
13892    if (element.hasAuthority()) {
13893      composeReference(t, "ImmunizationRecommendation", "authority", element.getAuthority(), -1);
13894    }
13895    for (int i = 0; i < element.getRecommendation().size(); i++) {
13896      composeImmunizationRecommendationRecommendationComponent(t, "ImmunizationRecommendation", "recommendation", element.getRecommendation().get(i), i);
13897    }
13898  }
13899
13900  protected void composeImmunizationRecommendationRecommendationComponent(Complex parent, String parentType, String name, ImmunizationRecommendation.ImmunizationRecommendationRecommendationComponent element, int index) {
13901    if (element == null) 
13902      return;
13903    Complex t;
13904    if (Utilities.noString(parentType))
13905      t = parent;
13906    else {
13907      t = parent.predicate("fhir:"+parentType+'.'+name);
13908    }
13909    composeBackboneElement(t, "recommendation", name, element, index);
13910    for (int i = 0; i < element.getVaccineCode().size(); i++) {
13911      composeCodeableConcept(t, "ImmunizationRecommendationRecommendationComponent", "vaccineCode", element.getVaccineCode().get(i), i);
13912    }
13913    for (int i = 0; i < element.getTargetDisease().size(); i++) {
13914      composeCodeableConcept(t, "ImmunizationRecommendationRecommendationComponent", "targetDisease", element.getTargetDisease().get(i), i);
13915    }
13916    for (int i = 0; i < element.getContraindicatedVaccineCode().size(); i++) {
13917      composeCodeableConcept(t, "ImmunizationRecommendationRecommendationComponent", "contraindicatedVaccineCode", element.getContraindicatedVaccineCode().get(i), i);
13918    }
13919    if (element.hasForecastStatus()) {
13920      composeCodeableConcept(t, "ImmunizationRecommendationRecommendationComponent", "forecastStatus", element.getForecastStatus(), -1);
13921    }
13922    for (int i = 0; i < element.getForecastReason().size(); i++) {
13923      composeCodeableConcept(t, "ImmunizationRecommendationRecommendationComponent", "forecastReason", element.getForecastReason().get(i), i);
13924    }
13925    for (int i = 0; i < element.getDateCriterion().size(); i++) {
13926      composeImmunizationRecommendationRecommendationDateCriterionComponent(t, "ImmunizationRecommendationRecommendationComponent", "dateCriterion", element.getDateCriterion().get(i), i);
13927    }
13928    if (element.hasDescriptionElement()) {
13929      composeString(t, "ImmunizationRecommendationRecommendationComponent", "description", element.getDescriptionElement(), -1);
13930    }
13931    if (element.hasSeriesElement()) {
13932      composeString(t, "ImmunizationRecommendationRecommendationComponent", "series", element.getSeriesElement(), -1);
13933    }
13934    if (element.hasDoseNumberElement()) {
13935      composeString(t, "ImmunizationRecommendationRecommendationComponent", "doseNumber", element.getDoseNumberElement(), -1);
13936    }
13937    if (element.hasSeriesDosesElement()) {
13938      composeString(t, "ImmunizationRecommendationRecommendationComponent", "seriesDoses", element.getSeriesDosesElement(), -1);
13939    }
13940    for (int i = 0; i < element.getSupportingImmunization().size(); i++) {
13941      composeReference(t, "ImmunizationRecommendationRecommendationComponent", "supportingImmunization", element.getSupportingImmunization().get(i), i);
13942    }
13943    for (int i = 0; i < element.getSupportingPatientInformation().size(); i++) {
13944      composeReference(t, "ImmunizationRecommendationRecommendationComponent", "supportingPatientInformation", element.getSupportingPatientInformation().get(i), i);
13945    }
13946  }
13947
13948  protected void composeImmunizationRecommendationRecommendationDateCriterionComponent(Complex parent, String parentType, String name, ImmunizationRecommendation.ImmunizationRecommendationRecommendationDateCriterionComponent element, int index) {
13949    if (element == null) 
13950      return;
13951    Complex t;
13952    if (Utilities.noString(parentType))
13953      t = parent;
13954    else {
13955      t = parent.predicate("fhir:"+parentType+'.'+name);
13956    }
13957    composeBackboneElement(t, "dateCriterion", name, element, index);
13958    if (element.hasCode()) {
13959      composeCodeableConcept(t, "ImmunizationRecommendationRecommendationDateCriterionComponent", "code", element.getCode(), -1);
13960    }
13961    if (element.hasValueElement()) {
13962      composeDateTime(t, "ImmunizationRecommendationRecommendationDateCriterionComponent", "value", element.getValueElement(), -1);
13963    }
13964  }
13965
13966  protected void composeImplementationGuide(Complex parent, String parentType, String name, ImplementationGuide element, int index) {
13967    if (element == null) 
13968      return;
13969    Complex t;
13970    if (Utilities.noString(parentType))
13971      t = parent;
13972    else {
13973      t = parent.predicate("fhir:"+parentType+'.'+name);
13974    }
13975    composeCanonicalResource(t, "ImplementationGuide", name, element, index);
13976    if (element.hasUrlElement()) {
13977      composeUri(t, "ImplementationGuide", "url", element.getUrlElement(), -1);
13978    }
13979    if (element.hasVersionElement()) {
13980      composeString(t, "ImplementationGuide", "version", element.getVersionElement(), -1);
13981    }
13982    if (element.hasNameElement()) {
13983      composeString(t, "ImplementationGuide", "name", element.getNameElement(), -1);
13984    }
13985    if (element.hasTitleElement()) {
13986      composeString(t, "ImplementationGuide", "title", element.getTitleElement(), -1);
13987    }
13988    if (element.hasStatusElement()) {
13989      composeEnum(t, "ImplementationGuide", "status", element.getStatusElement(), -1);
13990    }
13991    if (element.hasExperimentalElement()) {
13992      composeBoolean(t, "ImplementationGuide", "experimental", element.getExperimentalElement(), -1);
13993    }
13994    if (element.hasDateElement()) {
13995      composeDateTime(t, "ImplementationGuide", "date", element.getDateElement(), -1);
13996    }
13997    if (element.hasPublisherElement()) {
13998      composeString(t, "ImplementationGuide", "publisher", element.getPublisherElement(), -1);
13999    }
14000    for (int i = 0; i < element.getContact().size(); i++) {
14001      composeContactDetail(t, "ImplementationGuide", "contact", element.getContact().get(i), i);
14002    }
14003    if (element.hasDescriptionElement()) {
14004      composeMarkdown(t, "ImplementationGuide", "description", element.getDescriptionElement(), -1);
14005    }
14006    for (int i = 0; i < element.getUseContext().size(); i++) {
14007      composeUsageContext(t, "ImplementationGuide", "useContext", element.getUseContext().get(i), i);
14008    }
14009    for (int i = 0; i < element.getJurisdiction().size(); i++) {
14010      composeCodeableConcept(t, "ImplementationGuide", "jurisdiction", element.getJurisdiction().get(i), i);
14011    }
14012    if (element.hasCopyrightElement()) {
14013      composeMarkdown(t, "ImplementationGuide", "copyright", element.getCopyrightElement(), -1);
14014    }
14015    if (element.hasPackageIdElement()) {
14016      composeId(t, "ImplementationGuide", "packageId", element.getPackageIdElement(), -1);
14017    }
14018    if (element.hasLicenseElement()) {
14019      composeEnum(t, "ImplementationGuide", "license", element.getLicenseElement(), -1);
14020    }
14021    for (int i = 0; i < element.getFhirVersion().size(); i++) {
14022      composeEnum(t, "ImplementationGuide", "fhirVersion", element.getFhirVersion().get(i), i);
14023    }
14024    for (int i = 0; i < element.getDependsOn().size(); i++) {
14025      composeImplementationGuideDependsOnComponent(t, "ImplementationGuide", "dependsOn", element.getDependsOn().get(i), i);
14026    }
14027    for (int i = 0; i < element.getGlobal().size(); i++) {
14028      composeImplementationGuideGlobalComponent(t, "ImplementationGuide", "global", element.getGlobal().get(i), i);
14029    }
14030    if (element.hasDefinition()) {
14031      composeImplementationGuideDefinitionComponent(t, "ImplementationGuide", "definition", element.getDefinition(), -1);
14032    }
14033    if (element.hasManifest()) {
14034      composeImplementationGuideManifestComponent(t, "ImplementationGuide", "manifest", element.getManifest(), -1);
14035    }
14036  }
14037
14038  protected void composeImplementationGuideDependsOnComponent(Complex parent, String parentType, String name, ImplementationGuide.ImplementationGuideDependsOnComponent element, int index) {
14039    if (element == null) 
14040      return;
14041    Complex t;
14042    if (Utilities.noString(parentType))
14043      t = parent;
14044    else {
14045      t = parent.predicate("fhir:"+parentType+'.'+name);
14046    }
14047    composeBackboneElement(t, "dependsOn", name, element, index);
14048    if (element.hasUriElement()) {
14049      composeCanonical(t, "ImplementationGuideDependsOnComponent", "uri", element.getUriElement(), -1);
14050    }
14051    if (element.hasPackageIdElement()) {
14052      composeId(t, "ImplementationGuideDependsOnComponent", "packageId", element.getPackageIdElement(), -1);
14053    }
14054    if (element.hasVersionElement()) {
14055      composeString(t, "ImplementationGuideDependsOnComponent", "version", element.getVersionElement(), -1);
14056    }
14057  }
14058
14059  protected void composeImplementationGuideGlobalComponent(Complex parent, String parentType, String name, ImplementationGuide.ImplementationGuideGlobalComponent element, int index) {
14060    if (element == null) 
14061      return;
14062    Complex t;
14063    if (Utilities.noString(parentType))
14064      t = parent;
14065    else {
14066      t = parent.predicate("fhir:"+parentType+'.'+name);
14067    }
14068    composeBackboneElement(t, "global", name, element, index);
14069    if (element.hasTypeElement()) {
14070      composeCode(t, "ImplementationGuideGlobalComponent", "type", element.getTypeElement(), -1);
14071    }
14072    if (element.hasProfileElement()) {
14073      composeCanonical(t, "ImplementationGuideGlobalComponent", "profile", element.getProfileElement(), -1);
14074    }
14075  }
14076
14077  protected void composeImplementationGuideDefinitionComponent(Complex parent, String parentType, String name, ImplementationGuide.ImplementationGuideDefinitionComponent element, int index) {
14078    if (element == null) 
14079      return;
14080    Complex t;
14081    if (Utilities.noString(parentType))
14082      t = parent;
14083    else {
14084      t = parent.predicate("fhir:"+parentType+'.'+name);
14085    }
14086    composeBackboneElement(t, "definition", name, element, index);
14087    for (int i = 0; i < element.getGrouping().size(); i++) {
14088      composeImplementationGuideDefinitionGroupingComponent(t, "ImplementationGuideDefinitionComponent", "grouping", element.getGrouping().get(i), i);
14089    }
14090    for (int i = 0; i < element.getResource().size(); i++) {
14091      composeImplementationGuideDefinitionResourceComponent(t, "ImplementationGuideDefinitionComponent", "resource", element.getResource().get(i), i);
14092    }
14093    if (element.hasPage()) {
14094      composeImplementationGuideDefinitionPageComponent(t, "ImplementationGuideDefinitionComponent", "page", element.getPage(), -1);
14095    }
14096    for (int i = 0; i < element.getParameter().size(); i++) {
14097      composeImplementationGuideDefinitionParameterComponent(t, "ImplementationGuideDefinitionComponent", "parameter", element.getParameter().get(i), i);
14098    }
14099    for (int i = 0; i < element.getTemplate().size(); i++) {
14100      composeImplementationGuideDefinitionTemplateComponent(t, "ImplementationGuideDefinitionComponent", "template", element.getTemplate().get(i), i);
14101    }
14102  }
14103
14104  protected void composeImplementationGuideDefinitionGroupingComponent(Complex parent, String parentType, String name, ImplementationGuide.ImplementationGuideDefinitionGroupingComponent element, int index) {
14105    if (element == null) 
14106      return;
14107    Complex t;
14108    if (Utilities.noString(parentType))
14109      t = parent;
14110    else {
14111      t = parent.predicate("fhir:"+parentType+'.'+name);
14112    }
14113    composeBackboneElement(t, "grouping", name, element, index);
14114    if (element.hasNameElement()) {
14115      composeString(t, "ImplementationGuideDefinitionGroupingComponent", "name", element.getNameElement(), -1);
14116    }
14117    if (element.hasDescriptionElement()) {
14118      composeString(t, "ImplementationGuideDefinitionGroupingComponent", "description", element.getDescriptionElement(), -1);
14119    }
14120  }
14121
14122  protected void composeImplementationGuideDefinitionResourceComponent(Complex parent, String parentType, String name, ImplementationGuide.ImplementationGuideDefinitionResourceComponent element, int index) {
14123    if (element == null) 
14124      return;
14125    Complex t;
14126    if (Utilities.noString(parentType))
14127      t = parent;
14128    else {
14129      t = parent.predicate("fhir:"+parentType+'.'+name);
14130    }
14131    composeBackboneElement(t, "resource", name, element, index);
14132    if (element.hasReference()) {
14133      composeReference(t, "ImplementationGuideDefinitionResourceComponent", "reference", element.getReference(), -1);
14134    }
14135    for (int i = 0; i < element.getFhirVersion().size(); i++) {
14136      composeEnum(t, "ImplementationGuideDefinitionResourceComponent", "fhirVersion", element.getFhirVersion().get(i), i);
14137    }
14138    if (element.hasNameElement()) {
14139      composeString(t, "ImplementationGuideDefinitionResourceComponent", "name", element.getNameElement(), -1);
14140    }
14141    if (element.hasDescriptionElement()) {
14142      composeString(t, "ImplementationGuideDefinitionResourceComponent", "description", element.getDescriptionElement(), -1);
14143    }
14144    if (element.hasExample()) {
14145      composeType(t, "ImplementationGuideDefinitionResourceComponent", "example", element.getExample(), -1);
14146    }
14147    if (element.hasGroupingIdElement()) {
14148      composeId(t, "ImplementationGuideDefinitionResourceComponent", "groupingId", element.getGroupingIdElement(), -1);
14149    }
14150  }
14151
14152  protected void composeImplementationGuideDefinitionPageComponent(Complex parent, String parentType, String name, ImplementationGuide.ImplementationGuideDefinitionPageComponent element, int index) {
14153    if (element == null) 
14154      return;
14155    Complex t;
14156    if (Utilities.noString(parentType))
14157      t = parent;
14158    else {
14159      t = parent.predicate("fhir:"+parentType+'.'+name);
14160    }
14161    composeBackboneElement(t, "page", name, element, index);
14162    if (element.hasName()) {
14163      composeType(t, "ImplementationGuideDefinitionPageComponent", "name", element.getName(), -1);
14164    }
14165    if (element.hasTitleElement()) {
14166      composeString(t, "ImplementationGuideDefinitionPageComponent", "title", element.getTitleElement(), -1);
14167    }
14168    if (element.hasGenerationElement()) {
14169      composeEnum(t, "ImplementationGuideDefinitionPageComponent", "generation", element.getGenerationElement(), -1);
14170    }
14171    for (int i = 0; i < element.getPage().size(); i++) {
14172      composeImplementationGuideDefinitionPageComponent(t, "ImplementationGuideDefinitionPageComponent", "page", element.getPage().get(i), i);
14173    }
14174  }
14175
14176  protected void composeImplementationGuideDefinitionParameterComponent(Complex parent, String parentType, String name, ImplementationGuide.ImplementationGuideDefinitionParameterComponent element, int index) {
14177    if (element == null) 
14178      return;
14179    Complex t;
14180    if (Utilities.noString(parentType))
14181      t = parent;
14182    else {
14183      t = parent.predicate("fhir:"+parentType+'.'+name);
14184    }
14185    composeBackboneElement(t, "parameter", name, element, index);
14186    if (element.hasCodeElement()) {
14187      composeString(t, "ImplementationGuideDefinitionParameterComponent", "code", element.getCodeElement(), -1);
14188    }
14189    if (element.hasValueElement()) {
14190      composeString(t, "ImplementationGuideDefinitionParameterComponent", "value", element.getValueElement(), -1);
14191    }
14192  }
14193
14194  protected void composeImplementationGuideDefinitionTemplateComponent(Complex parent, String parentType, String name, ImplementationGuide.ImplementationGuideDefinitionTemplateComponent element, int index) {
14195    if (element == null) 
14196      return;
14197    Complex t;
14198    if (Utilities.noString(parentType))
14199      t = parent;
14200    else {
14201      t = parent.predicate("fhir:"+parentType+'.'+name);
14202    }
14203    composeBackboneElement(t, "template", name, element, index);
14204    if (element.hasCodeElement()) {
14205      composeCode(t, "ImplementationGuideDefinitionTemplateComponent", "code", element.getCodeElement(), -1);
14206    }
14207    if (element.hasSourceElement()) {
14208      composeString(t, "ImplementationGuideDefinitionTemplateComponent", "source", element.getSourceElement(), -1);
14209    }
14210    if (element.hasScopeElement()) {
14211      composeString(t, "ImplementationGuideDefinitionTemplateComponent", "scope", element.getScopeElement(), -1);
14212    }
14213  }
14214
14215  protected void composeImplementationGuideManifestComponent(Complex parent, String parentType, String name, ImplementationGuide.ImplementationGuideManifestComponent element, int index) {
14216    if (element == null) 
14217      return;
14218    Complex t;
14219    if (Utilities.noString(parentType))
14220      t = parent;
14221    else {
14222      t = parent.predicate("fhir:"+parentType+'.'+name);
14223    }
14224    composeBackboneElement(t, "manifest", name, element, index);
14225    if (element.hasRenderingElement()) {
14226      composeUrl(t, "ImplementationGuideManifestComponent", "rendering", element.getRenderingElement(), -1);
14227    }
14228    for (int i = 0; i < element.getResource().size(); i++) {
14229      composeImplementationGuideManifestResourceComponent(t, "ImplementationGuideManifestComponent", "resource", element.getResource().get(i), i);
14230    }
14231    for (int i = 0; i < element.getPage().size(); i++) {
14232      composeImplementationGuideManifestPageComponent(t, "ImplementationGuideManifestComponent", "page", element.getPage().get(i), i);
14233    }
14234    for (int i = 0; i < element.getImage().size(); i++) {
14235      composeString(t, "ImplementationGuideManifestComponent", "image", element.getImage().get(i), i);
14236    }
14237    for (int i = 0; i < element.getOther().size(); i++) {
14238      composeString(t, "ImplementationGuideManifestComponent", "other", element.getOther().get(i), i);
14239    }
14240  }
14241
14242  protected void composeImplementationGuideManifestResourceComponent(Complex parent, String parentType, String name, ImplementationGuide.ManifestResourceComponent element, int index) {
14243    if (element == null) 
14244      return;
14245    Complex t;
14246    if (Utilities.noString(parentType))
14247      t = parent;
14248    else {
14249      t = parent.predicate("fhir:"+parentType+'.'+name);
14250    }
14251    composeBackboneElement(t, "resource", name, element, index);
14252    if (element.hasReference()) {
14253      composeReference(t, "ManifestResourceComponent", "reference", element.getReference(), -1);
14254    }
14255    if (element.hasExample()) {
14256      composeType(t, "ManifestResourceComponent", "example", element.getExample(), -1);
14257    }
14258    if (element.hasRelativePathElement()) {
14259      composeUrl(t, "ManifestResourceComponent", "relativePath", element.getRelativePathElement(), -1);
14260    }
14261  }
14262
14263  protected void composeImplementationGuideManifestPageComponent(Complex parent, String parentType, String name, ImplementationGuide.ManifestPageComponent 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:"+parentType+'.'+name);
14271    }
14272    composeBackboneElement(t, "page", name, element, index);
14273    if (element.hasNameElement()) {
14274      composeString(t, "ManifestPageComponent", "name", element.getNameElement(), -1);
14275    }
14276    if (element.hasTitleElement()) {
14277      composeString(t, "ManifestPageComponent", "title", element.getTitleElement(), -1);
14278    }
14279    for (int i = 0; i < element.getAnchor().size(); i++) {
14280      composeString(t, "ManifestPageComponent", "anchor", element.getAnchor().get(i), i);
14281    }
14282  }
14283
14284  protected void composeIngredient(Complex parent, String parentType, String name, Ingredient element, int index) {
14285    if (element == null) 
14286      return;
14287    Complex t;
14288    if (Utilities.noString(parentType))
14289      t = parent;
14290    else {
14291      t = parent.predicate("fhir:"+parentType+'.'+name);
14292    }
14293    composeDomainResource(t, "Ingredient", name, element, index);
14294    if (element.hasIdentifier()) {
14295      composeIdentifier(t, "Ingredient", "identifier", element.getIdentifier(), -1);
14296    }
14297    if (element.hasStatusElement()) {
14298      composeEnum(t, "Ingredient", "status", element.getStatusElement(), -1);
14299    }
14300    for (int i = 0; i < element.getFor().size(); i++) {
14301      composeReference(t, "Ingredient", "for", element.getFor().get(i), i);
14302    }
14303    if (element.hasRole()) {
14304      composeCodeableConcept(t, "Ingredient", "role", element.getRole(), -1);
14305    }
14306    for (int i = 0; i < element.getFunction().size(); i++) {
14307      composeCodeableConcept(t, "Ingredient", "function", element.getFunction().get(i), i);
14308    }
14309    if (element.hasGroup()) {
14310      composeCodeableConcept(t, "Ingredient", "group", element.getGroup(), -1);
14311    }
14312    if (element.hasAllergenicIndicatorElement()) {
14313      composeBoolean(t, "Ingredient", "allergenicIndicator", element.getAllergenicIndicatorElement(), -1);
14314    }
14315    for (int i = 0; i < element.getManufacturer().size(); i++) {
14316      composeIngredientManufacturerComponent(t, "Ingredient", "manufacturer", element.getManufacturer().get(i), i);
14317    }
14318    if (element.hasSubstance()) {
14319      composeIngredientSubstanceComponent(t, "Ingredient", "substance", element.getSubstance(), -1);
14320    }
14321  }
14322
14323  protected void composeIngredientManufacturerComponent(Complex parent, String parentType, String name, Ingredient.IngredientManufacturerComponent element, int index) {
14324    if (element == null) 
14325      return;
14326    Complex t;
14327    if (Utilities.noString(parentType))
14328      t = parent;
14329    else {
14330      t = parent.predicate("fhir:"+parentType+'.'+name);
14331    }
14332    composeBackboneElement(t, "manufacturer", name, element, index);
14333    if (element.hasRole()) {
14334      composeCoding(t, "IngredientManufacturerComponent", "role", element.getRole(), -1);
14335    }
14336    if (element.hasManufacturer()) {
14337      composeReference(t, "IngredientManufacturerComponent", "manufacturer", element.getManufacturer(), -1);
14338    }
14339  }
14340
14341  protected void composeIngredientSubstanceComponent(Complex parent, String parentType, String name, Ingredient.IngredientSubstanceComponent element, int index) {
14342    if (element == null) 
14343      return;
14344    Complex t;
14345    if (Utilities.noString(parentType))
14346      t = parent;
14347    else {
14348      t = parent.predicate("fhir:"+parentType+'.'+name);
14349    }
14350    composeBackboneElement(t, "substance", name, element, index);
14351    if (element.hasCode()) {
14352      composeCodeableReference(t, "IngredientSubstanceComponent", "code", element.getCode(), -1);
14353    }
14354    for (int i = 0; i < element.getStrength().size(); i++) {
14355      composeIngredientSubstanceStrengthComponent(t, "IngredientSubstanceComponent", "strength", element.getStrength().get(i), i);
14356    }
14357  }
14358
14359  protected void composeIngredientSubstanceStrengthComponent(Complex parent, String parentType, String name, Ingredient.IngredientSubstanceStrengthComponent element, int index) {
14360    if (element == null) 
14361      return;
14362    Complex t;
14363    if (Utilities.noString(parentType))
14364      t = parent;
14365    else {
14366      t = parent.predicate("fhir:"+parentType+'.'+name);
14367    }
14368    composeBackboneElement(t, "strength", name, element, index);
14369    if (element.hasPresentation()) {
14370      composeType(t, "IngredientSubstanceStrengthComponent", "presentation", element.getPresentation(), -1);
14371    }
14372    if (element.hasPresentationTextElement()) {
14373      composeString(t, "IngredientSubstanceStrengthComponent", "presentationText", element.getPresentationTextElement(), -1);
14374    }
14375    if (element.hasConcentration()) {
14376      composeType(t, "IngredientSubstanceStrengthComponent", "concentration", element.getConcentration(), -1);
14377    }
14378    if (element.hasConcentrationTextElement()) {
14379      composeString(t, "IngredientSubstanceStrengthComponent", "concentrationText", element.getConcentrationTextElement(), -1);
14380    }
14381    if (element.hasBasis()) {
14382      composeCodeableConcept(t, "IngredientSubstanceStrengthComponent", "basis", element.getBasis(), -1);
14383    }
14384    if (element.hasMeasurementPointElement()) {
14385      composeString(t, "IngredientSubstanceStrengthComponent", "measurementPoint", element.getMeasurementPointElement(), -1);
14386    }
14387    for (int i = 0; i < element.getCountry().size(); i++) {
14388      composeCodeableConcept(t, "IngredientSubstanceStrengthComponent", "country", element.getCountry().get(i), i);
14389    }
14390    for (int i = 0; i < element.getReferenceStrength().size(); i++) {
14391      composeIngredientSubstanceStrengthReferenceStrengthComponent(t, "IngredientSubstanceStrengthComponent", "referenceStrength", element.getReferenceStrength().get(i), i);
14392    }
14393  }
14394
14395  protected void composeIngredientSubstanceStrengthReferenceStrengthComponent(Complex parent, String parentType, String name, Ingredient.IngredientSubstanceStrengthReferenceStrengthComponent element, int index) {
14396    if (element == null) 
14397      return;
14398    Complex t;
14399    if (Utilities.noString(parentType))
14400      t = parent;
14401    else {
14402      t = parent.predicate("fhir:"+parentType+'.'+name);
14403    }
14404    composeBackboneElement(t, "referenceStrength", name, element, index);
14405    if (element.hasSubstance()) {
14406      composeCodeableReference(t, "IngredientSubstanceStrengthReferenceStrengthComponent", "substance", element.getSubstance(), -1);
14407    }
14408    if (element.hasStrength()) {
14409      composeType(t, "IngredientSubstanceStrengthReferenceStrengthComponent", "strength", element.getStrength(), -1);
14410    }
14411    if (element.hasMeasurementPointElement()) {
14412      composeString(t, "IngredientSubstanceStrengthReferenceStrengthComponent", "measurementPoint", element.getMeasurementPointElement(), -1);
14413    }
14414    for (int i = 0; i < element.getCountry().size(); i++) {
14415      composeCodeableConcept(t, "IngredientSubstanceStrengthReferenceStrengthComponent", "country", element.getCountry().get(i), i);
14416    }
14417  }
14418
14419  protected void composeInsurancePlan(Complex parent, String parentType, String name, InsurancePlan element, int index) {
14420    if (element == null) 
14421      return;
14422    Complex t;
14423    if (Utilities.noString(parentType))
14424      t = parent;
14425    else {
14426      t = parent.predicate("fhir:"+parentType+'.'+name);
14427    }
14428    composeDomainResource(t, "InsurancePlan", name, element, index);
14429    for (int i = 0; i < element.getIdentifier().size(); i++) {
14430      composeIdentifier(t, "InsurancePlan", "identifier", element.getIdentifier().get(i), i);
14431    }
14432    if (element.hasStatusElement()) {
14433      composeEnum(t, "InsurancePlan", "status", element.getStatusElement(), -1);
14434    }
14435    for (int i = 0; i < element.getType().size(); i++) {
14436      composeCodeableConcept(t, "InsurancePlan", "type", element.getType().get(i), i);
14437    }
14438    if (element.hasNameElement()) {
14439      composeString(t, "InsurancePlan", "name", element.getNameElement(), -1);
14440    }
14441    for (int i = 0; i < element.getAlias().size(); i++) {
14442      composeString(t, "InsurancePlan", "alias", element.getAlias().get(i), i);
14443    }
14444    if (element.hasPeriod()) {
14445      composePeriod(t, "InsurancePlan", "period", element.getPeriod(), -1);
14446    }
14447    if (element.hasOwnedBy()) {
14448      composeReference(t, "InsurancePlan", "ownedBy", element.getOwnedBy(), -1);
14449    }
14450    if (element.hasAdministeredBy()) {
14451      composeReference(t, "InsurancePlan", "administeredBy", element.getAdministeredBy(), -1);
14452    }
14453    for (int i = 0; i < element.getCoverageArea().size(); i++) {
14454      composeReference(t, "InsurancePlan", "coverageArea", element.getCoverageArea().get(i), i);
14455    }
14456    for (int i = 0; i < element.getContact().size(); i++) {
14457      composeInsurancePlanContactComponent(t, "InsurancePlan", "contact", element.getContact().get(i), i);
14458    }
14459    for (int i = 0; i < element.getEndpoint().size(); i++) {
14460      composeReference(t, "InsurancePlan", "endpoint", element.getEndpoint().get(i), i);
14461    }
14462    for (int i = 0; i < element.getNetwork().size(); i++) {
14463      composeReference(t, "InsurancePlan", "network", element.getNetwork().get(i), i);
14464    }
14465    for (int i = 0; i < element.getCoverage().size(); i++) {
14466      composeInsurancePlanCoverageComponent(t, "InsurancePlan", "coverage", element.getCoverage().get(i), i);
14467    }
14468    for (int i = 0; i < element.getPlan().size(); i++) {
14469      composeInsurancePlanPlanComponent(t, "InsurancePlan", "plan", element.getPlan().get(i), i);
14470    }
14471  }
14472
14473  protected void composeInsurancePlanContactComponent(Complex parent, String parentType, String name, InsurancePlan.InsurancePlanContactComponent 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:"+parentType+'.'+name);
14481    }
14482    composeBackboneElement(t, "contact", name, element, index);
14483    if (element.hasPurpose()) {
14484      composeCodeableConcept(t, "InsurancePlanContactComponent", "purpose", element.getPurpose(), -1);
14485    }
14486    if (element.hasName()) {
14487      composeHumanName(t, "InsurancePlanContactComponent", "name", element.getName(), -1);
14488    }
14489    for (int i = 0; i < element.getTelecom().size(); i++) {
14490      composeContactPoint(t, "InsurancePlanContactComponent", "telecom", element.getTelecom().get(i), i);
14491    }
14492    if (element.hasAddress()) {
14493      composeAddress(t, "InsurancePlanContactComponent", "address", element.getAddress(), -1);
14494    }
14495  }
14496
14497  protected void composeInsurancePlanCoverageComponent(Complex parent, String parentType, String name, InsurancePlan.InsurancePlanCoverageComponent element, int index) {
14498    if (element == null) 
14499      return;
14500    Complex t;
14501    if (Utilities.noString(parentType))
14502      t = parent;
14503    else {
14504      t = parent.predicate("fhir:"+parentType+'.'+name);
14505    }
14506    composeBackboneElement(t, "coverage", name, element, index);
14507    if (element.hasType()) {
14508      composeCodeableConcept(t, "InsurancePlanCoverageComponent", "type", element.getType(), -1);
14509    }
14510    for (int i = 0; i < element.getNetwork().size(); i++) {
14511      composeReference(t, "InsurancePlanCoverageComponent", "network", element.getNetwork().get(i), i);
14512    }
14513    for (int i = 0; i < element.getBenefit().size(); i++) {
14514      composeInsurancePlanCoverageBenefitComponent(t, "InsurancePlanCoverageComponent", "benefit", element.getBenefit().get(i), i);
14515    }
14516  }
14517
14518  protected void composeInsurancePlanCoverageBenefitComponent(Complex parent, String parentType, String name, InsurancePlan.CoverageBenefitComponent element, int index) {
14519    if (element == null) 
14520      return;
14521    Complex t;
14522    if (Utilities.noString(parentType))
14523      t = parent;
14524    else {
14525      t = parent.predicate("fhir:"+parentType+'.'+name);
14526    }
14527    composeBackboneElement(t, "benefit", name, element, index);
14528    if (element.hasType()) {
14529      composeCodeableConcept(t, "CoverageBenefitComponent", "type", element.getType(), -1);
14530    }
14531    if (element.hasRequirementElement()) {
14532      composeString(t, "CoverageBenefitComponent", "requirement", element.getRequirementElement(), -1);
14533    }
14534    for (int i = 0; i < element.getLimit().size(); i++) {
14535      composeInsurancePlanCoverageBenefitLimitComponent(t, "CoverageBenefitComponent", "limit", element.getLimit().get(i), i);
14536    }
14537  }
14538
14539  protected void composeInsurancePlanCoverageBenefitLimitComponent(Complex parent, String parentType, String name, InsurancePlan.CoverageBenefitLimitComponent element, int index) {
14540    if (element == null) 
14541      return;
14542    Complex t;
14543    if (Utilities.noString(parentType))
14544      t = parent;
14545    else {
14546      t = parent.predicate("fhir:"+parentType+'.'+name);
14547    }
14548    composeBackboneElement(t, "limit", name, element, index);
14549    if (element.hasValue()) {
14550      composeQuantity(t, "CoverageBenefitLimitComponent", "value", element.getValue(), -1);
14551    }
14552    if (element.hasCode()) {
14553      composeCodeableConcept(t, "CoverageBenefitLimitComponent", "code", element.getCode(), -1);
14554    }
14555  }
14556
14557  protected void composeInsurancePlanPlanComponent(Complex parent, String parentType, String name, InsurancePlan.InsurancePlanPlanComponent element, int index) {
14558    if (element == null) 
14559      return;
14560    Complex t;
14561    if (Utilities.noString(parentType))
14562      t = parent;
14563    else {
14564      t = parent.predicate("fhir:"+parentType+'.'+name);
14565    }
14566    composeBackboneElement(t, "plan", name, element, index);
14567    for (int i = 0; i < element.getIdentifier().size(); i++) {
14568      composeIdentifier(t, "InsurancePlanPlanComponent", "identifier", element.getIdentifier().get(i), i);
14569    }
14570    if (element.hasType()) {
14571      composeCodeableConcept(t, "InsurancePlanPlanComponent", "type", element.getType(), -1);
14572    }
14573    for (int i = 0; i < element.getCoverageArea().size(); i++) {
14574      composeReference(t, "InsurancePlanPlanComponent", "coverageArea", element.getCoverageArea().get(i), i);
14575    }
14576    for (int i = 0; i < element.getNetwork().size(); i++) {
14577      composeReference(t, "InsurancePlanPlanComponent", "network", element.getNetwork().get(i), i);
14578    }
14579    for (int i = 0; i < element.getGeneralCost().size(); i++) {
14580      composeInsurancePlanPlanGeneralCostComponent(t, "InsurancePlanPlanComponent", "generalCost", element.getGeneralCost().get(i), i);
14581    }
14582    for (int i = 0; i < element.getSpecificCost().size(); i++) {
14583      composeInsurancePlanPlanSpecificCostComponent(t, "InsurancePlanPlanComponent", "specificCost", element.getSpecificCost().get(i), i);
14584    }
14585  }
14586
14587  protected void composeInsurancePlanPlanGeneralCostComponent(Complex parent, String parentType, String name, InsurancePlan.InsurancePlanPlanGeneralCostComponent element, int index) {
14588    if (element == null) 
14589      return;
14590    Complex t;
14591    if (Utilities.noString(parentType))
14592      t = parent;
14593    else {
14594      t = parent.predicate("fhir:"+parentType+'.'+name);
14595    }
14596    composeBackboneElement(t, "generalCost", name, element, index);
14597    if (element.hasType()) {
14598      composeCodeableConcept(t, "InsurancePlanPlanGeneralCostComponent", "type", element.getType(), -1);
14599    }
14600    if (element.hasGroupSizeElement()) {
14601      composePositiveInt(t, "InsurancePlanPlanGeneralCostComponent", "groupSize", element.getGroupSizeElement(), -1);
14602    }
14603    if (element.hasCost()) {
14604      composeMoney(t, "InsurancePlanPlanGeneralCostComponent", "cost", element.getCost(), -1);
14605    }
14606    if (element.hasCommentElement()) {
14607      composeString(t, "InsurancePlanPlanGeneralCostComponent", "comment", element.getCommentElement(), -1);
14608    }
14609  }
14610
14611  protected void composeInsurancePlanPlanSpecificCostComponent(Complex parent, String parentType, String name, InsurancePlan.InsurancePlanPlanSpecificCostComponent element, int index) {
14612    if (element == null) 
14613      return;
14614    Complex t;
14615    if (Utilities.noString(parentType))
14616      t = parent;
14617    else {
14618      t = parent.predicate("fhir:"+parentType+'.'+name);
14619    }
14620    composeBackboneElement(t, "specificCost", name, element, index);
14621    if (element.hasCategory()) {
14622      composeCodeableConcept(t, "InsurancePlanPlanSpecificCostComponent", "category", element.getCategory(), -1);
14623    }
14624    for (int i = 0; i < element.getBenefit().size(); i++) {
14625      composeInsurancePlanPlanBenefitComponent(t, "InsurancePlanPlanSpecificCostComponent", "benefit", element.getBenefit().get(i), i);
14626    }
14627  }
14628
14629  protected void composeInsurancePlanPlanBenefitComponent(Complex parent, String parentType, String name, InsurancePlan.PlanBenefitComponent element, int index) {
14630    if (element == null) 
14631      return;
14632    Complex t;
14633    if (Utilities.noString(parentType))
14634      t = parent;
14635    else {
14636      t = parent.predicate("fhir:"+parentType+'.'+name);
14637    }
14638    composeBackboneElement(t, "benefit", name, element, index);
14639    if (element.hasType()) {
14640      composeCodeableConcept(t, "PlanBenefitComponent", "type", element.getType(), -1);
14641    }
14642    for (int i = 0; i < element.getCost().size(); i++) {
14643      composeInsurancePlanPlanBenefitCostComponent(t, "PlanBenefitComponent", "cost", element.getCost().get(i), i);
14644    }
14645  }
14646
14647  protected void composeInsurancePlanPlanBenefitCostComponent(Complex parent, String parentType, String name, InsurancePlan.PlanBenefitCostComponent element, int index) {
14648    if (element == null) 
14649      return;
14650    Complex t;
14651    if (Utilities.noString(parentType))
14652      t = parent;
14653    else {
14654      t = parent.predicate("fhir:"+parentType+'.'+name);
14655    }
14656    composeBackboneElement(t, "cost", name, element, index);
14657    if (element.hasType()) {
14658      composeCodeableConcept(t, "PlanBenefitCostComponent", "type", element.getType(), -1);
14659    }
14660    if (element.hasApplicability()) {
14661      composeCodeableConcept(t, "PlanBenefitCostComponent", "applicability", element.getApplicability(), -1);
14662    }
14663    for (int i = 0; i < element.getQualifiers().size(); i++) {
14664      composeCodeableConcept(t, "PlanBenefitCostComponent", "qualifiers", element.getQualifiers().get(i), i);
14665    }
14666    if (element.hasValue()) {
14667      composeQuantity(t, "PlanBenefitCostComponent", "value", element.getValue(), -1);
14668    }
14669  }
14670
14671  protected void composeInventoryReport(Complex parent, String parentType, String name, InventoryReport element, int index) {
14672    if (element == null) 
14673      return;
14674    Complex t;
14675    if (Utilities.noString(parentType))
14676      t = parent;
14677    else {
14678      t = parent.predicate("fhir:"+parentType+'.'+name);
14679    }
14680    composeDomainResource(t, "InventoryReport", name, element, index);
14681    for (int i = 0; i < element.getIdentifier().size(); i++) {
14682      composeIdentifier(t, "InventoryReport", "identifier", element.getIdentifier().get(i), i);
14683    }
14684    if (element.hasStatusElement()) {
14685      composeEnum(t, "InventoryReport", "status", element.getStatusElement(), -1);
14686    }
14687    if (element.hasCountTypeElement()) {
14688      composeEnum(t, "InventoryReport", "countType", element.getCountTypeElement(), -1);
14689    }
14690    if (element.hasOperationType()) {
14691      composeCodeableConcept(t, "InventoryReport", "operationType", element.getOperationType(), -1);
14692    }
14693    if (element.hasOperationTypeReason()) {
14694      composeCodeableConcept(t, "InventoryReport", "operationTypeReason", element.getOperationTypeReason(), -1);
14695    }
14696    if (element.hasReportedDateTimeElement()) {
14697      composeDateTime(t, "InventoryReport", "reportedDateTime", element.getReportedDateTimeElement(), -1);
14698    }
14699    if (element.hasReporter()) {
14700      composeReference(t, "InventoryReport", "reporter", element.getReporter(), -1);
14701    }
14702    if (element.hasReportingPeriod()) {
14703      composePeriod(t, "InventoryReport", "reportingPeriod", element.getReportingPeriod(), -1);
14704    }
14705    for (int i = 0; i < element.getInventoryListing().size(); i++) {
14706      composeInventoryReportInventoryListingComponent(t, "InventoryReport", "inventoryListing", element.getInventoryListing().get(i), i);
14707    }
14708    if (element.hasNote()) {
14709      composeAnnotation(t, "InventoryReport", "note", element.getNote(), -1);
14710    }
14711  }
14712
14713  protected void composeInventoryReportInventoryListingComponent(Complex parent, String parentType, String name, InventoryReport.InventoryReportInventoryListingComponent element, int index) {
14714    if (element == null) 
14715      return;
14716    Complex t;
14717    if (Utilities.noString(parentType))
14718      t = parent;
14719    else {
14720      t = parent.predicate("fhir:"+parentType+'.'+name);
14721    }
14722    composeBackboneElement(t, "inventoryListing", name, element, index);
14723    if (element.hasLocation()) {
14724      composeReference(t, "InventoryReportInventoryListingComponent", "location", element.getLocation(), -1);
14725    }
14726    if (element.hasItemStatus()) {
14727      composeCodeableConcept(t, "InventoryReportInventoryListingComponent", "itemStatus", element.getItemStatus(), -1);
14728    }
14729    if (element.hasCountingDateTimeElement()) {
14730      composeDateTime(t, "InventoryReportInventoryListingComponent", "countingDateTime", element.getCountingDateTimeElement(), -1);
14731    }
14732    for (int i = 0; i < element.getItems().size(); i++) {
14733      composeInventoryReportInventoryListingItemsComponent(t, "InventoryReportInventoryListingComponent", "items", element.getItems().get(i), i);
14734    }
14735  }
14736
14737  protected void composeInventoryReportInventoryListingItemsComponent(Complex parent, String parentType, String name, InventoryReport.InventoryReportInventoryListingItemsComponent element, int index) {
14738    if (element == null) 
14739      return;
14740    Complex t;
14741    if (Utilities.noString(parentType))
14742      t = parent;
14743    else {
14744      t = parent.predicate("fhir:"+parentType+'.'+name);
14745    }
14746    composeBackboneElement(t, "items", name, element, index);
14747    if (element.hasCategory()) {
14748      composeCodeableConcept(t, "InventoryReportInventoryListingItemsComponent", "category", element.getCategory(), -1);
14749    }
14750    if (element.hasQuantity()) {
14751      composeQuantity(t, "InventoryReportInventoryListingItemsComponent", "quantity", element.getQuantity(), -1);
14752    }
14753    if (element.hasItem()) {
14754      composeCodeableReference(t, "InventoryReportInventoryListingItemsComponent", "item", element.getItem(), -1);
14755    }
14756    if (element.hasLotElement()) {
14757      composeString(t, "InventoryReportInventoryListingItemsComponent", "lot", element.getLotElement(), -1);
14758    }
14759    if (element.hasSerialElement()) {
14760      composeString(t, "InventoryReportInventoryListingItemsComponent", "serial", element.getSerialElement(), -1);
14761    }
14762    if (element.hasExpiryElement()) {
14763      composeDateTime(t, "InventoryReportInventoryListingItemsComponent", "expiry", element.getExpiryElement(), -1);
14764    }
14765    if (element.hasManufacturingDateElement()) {
14766      composeDateTime(t, "InventoryReportInventoryListingItemsComponent", "manufacturingDate", element.getManufacturingDateElement(), -1);
14767    }
14768  }
14769
14770  protected void composeInvoice(Complex parent, String parentType, String name, Invoice element, int index) {
14771    if (element == null) 
14772      return;
14773    Complex t;
14774    if (Utilities.noString(parentType))
14775      t = parent;
14776    else {
14777      t = parent.predicate("fhir:"+parentType+'.'+name);
14778    }
14779    composeDomainResource(t, "Invoice", name, element, index);
14780    for (int i = 0; i < element.getIdentifier().size(); i++) {
14781      composeIdentifier(t, "Invoice", "identifier", element.getIdentifier().get(i), i);
14782    }
14783    if (element.hasStatusElement()) {
14784      composeEnum(t, "Invoice", "status", element.getStatusElement(), -1);
14785    }
14786    if (element.hasCancelledReasonElement()) {
14787      composeString(t, "Invoice", "cancelledReason", element.getCancelledReasonElement(), -1);
14788    }
14789    if (element.hasType()) {
14790      composeCodeableConcept(t, "Invoice", "type", element.getType(), -1);
14791    }
14792    if (element.hasSubject()) {
14793      composeReference(t, "Invoice", "subject", element.getSubject(), -1);
14794    }
14795    if (element.hasRecipient()) {
14796      composeReference(t, "Invoice", "recipient", element.getRecipient(), -1);
14797    }
14798    if (element.hasDateElement()) {
14799      composeDateTime(t, "Invoice", "date", element.getDateElement(), -1);
14800    }
14801    for (int i = 0; i < element.getParticipant().size(); i++) {
14802      composeInvoiceParticipantComponent(t, "Invoice", "participant", element.getParticipant().get(i), i);
14803    }
14804    if (element.hasIssuer()) {
14805      composeReference(t, "Invoice", "issuer", element.getIssuer(), -1);
14806    }
14807    if (element.hasAccount()) {
14808      composeReference(t, "Invoice", "account", element.getAccount(), -1);
14809    }
14810    for (int i = 0; i < element.getLineItem().size(); i++) {
14811      composeInvoiceLineItemComponent(t, "Invoice", "lineItem", element.getLineItem().get(i), i);
14812    }
14813    for (int i = 0; i < element.getTotalPriceComponent().size(); i++) {
14814      composeInvoiceLineItemPriceComponentComponent(t, "Invoice", "totalPriceComponent", element.getTotalPriceComponent().get(i), i);
14815    }
14816    if (element.hasTotalNet()) {
14817      composeMoney(t, "Invoice", "totalNet", element.getTotalNet(), -1);
14818    }
14819    if (element.hasTotalGross()) {
14820      composeMoney(t, "Invoice", "totalGross", element.getTotalGross(), -1);
14821    }
14822    if (element.hasPaymentTermsElement()) {
14823      composeMarkdown(t, "Invoice", "paymentTerms", element.getPaymentTermsElement(), -1);
14824    }
14825    for (int i = 0; i < element.getNote().size(); i++) {
14826      composeAnnotation(t, "Invoice", "note", element.getNote().get(i), i);
14827    }
14828  }
14829
14830  protected void composeInvoiceParticipantComponent(Complex parent, String parentType, String name, Invoice.InvoiceParticipantComponent element, int index) {
14831    if (element == null) 
14832      return;
14833    Complex t;
14834    if (Utilities.noString(parentType))
14835      t = parent;
14836    else {
14837      t = parent.predicate("fhir:"+parentType+'.'+name);
14838    }
14839    composeBackboneElement(t, "participant", name, element, index);
14840    if (element.hasRole()) {
14841      composeCodeableConcept(t, "InvoiceParticipantComponent", "role", element.getRole(), -1);
14842    }
14843    if (element.hasActor()) {
14844      composeReference(t, "InvoiceParticipantComponent", "actor", element.getActor(), -1);
14845    }
14846  }
14847
14848  protected void composeInvoiceLineItemComponent(Complex parent, String parentType, String name, Invoice.InvoiceLineItemComponent element, int index) {
14849    if (element == null) 
14850      return;
14851    Complex t;
14852    if (Utilities.noString(parentType))
14853      t = parent;
14854    else {
14855      t = parent.predicate("fhir:"+parentType+'.'+name);
14856    }
14857    composeBackboneElement(t, "lineItem", name, element, index);
14858    if (element.hasSequenceElement()) {
14859      composePositiveInt(t, "InvoiceLineItemComponent", "sequence", element.getSequenceElement(), -1);
14860    }
14861    if (element.hasChargeItem()) {
14862      composeType(t, "InvoiceLineItemComponent", "chargeItem", element.getChargeItem(), -1);
14863    }
14864    for (int i = 0; i < element.getPriceComponent().size(); i++) {
14865      composeInvoiceLineItemPriceComponentComponent(t, "InvoiceLineItemComponent", "priceComponent", element.getPriceComponent().get(i), i);
14866    }
14867  }
14868
14869  protected void composeInvoiceLineItemPriceComponentComponent(Complex parent, String parentType, String name, Invoice.InvoiceLineItemPriceComponentComponent element, int index) {
14870    if (element == null) 
14871      return;
14872    Complex t;
14873    if (Utilities.noString(parentType))
14874      t = parent;
14875    else {
14876      t = parent.predicate("fhir:"+parentType+'.'+name);
14877    }
14878    composeBackboneElement(t, "priceComponent", name, element, index);
14879    if (element.hasTypeElement()) {
14880      composeEnum(t, "InvoiceLineItemPriceComponentComponent", "type", element.getTypeElement(), -1);
14881    }
14882    if (element.hasCode()) {
14883      composeCodeableConcept(t, "InvoiceLineItemPriceComponentComponent", "code", element.getCode(), -1);
14884    }
14885    if (element.hasFactorElement()) {
14886      composeDecimal(t, "InvoiceLineItemPriceComponentComponent", "factor", element.getFactorElement(), -1);
14887    }
14888    if (element.hasAmount()) {
14889      composeMoney(t, "InvoiceLineItemPriceComponentComponent", "amount", element.getAmount(), -1);
14890    }
14891  }
14892
14893  protected void composeLibrary(Complex parent, String parentType, String name, Library element, int index) {
14894    if (element == null) 
14895      return;
14896    Complex t;
14897    if (Utilities.noString(parentType))
14898      t = parent;
14899    else {
14900      t = parent.predicate("fhir:"+parentType+'.'+name);
14901    }
14902    composeMetadataResource(t, "Library", name, element, index);
14903    if (element.hasUrlElement()) {
14904      composeUri(t, "Library", "url", element.getUrlElement(), -1);
14905    }
14906    for (int i = 0; i < element.getIdentifier().size(); i++) {
14907      composeIdentifier(t, "Library", "identifier", element.getIdentifier().get(i), i);
14908    }
14909    if (element.hasVersionElement()) {
14910      composeString(t, "Library", "version", element.getVersionElement(), -1);
14911    }
14912    if (element.hasNameElement()) {
14913      composeString(t, "Library", "name", element.getNameElement(), -1);
14914    }
14915    if (element.hasTitleElement()) {
14916      composeString(t, "Library", "title", element.getTitleElement(), -1);
14917    }
14918    if (element.hasSubtitleElement()) {
14919      composeString(t, "Library", "subtitle", element.getSubtitleElement(), -1);
14920    }
14921    if (element.hasStatusElement()) {
14922      composeEnum(t, "Library", "status", element.getStatusElement(), -1);
14923    }
14924    if (element.hasExperimentalElement()) {
14925      composeBoolean(t, "Library", "experimental", element.getExperimentalElement(), -1);
14926    }
14927    if (element.hasType()) {
14928      composeCodeableConcept(t, "Library", "type", element.getType(), -1);
14929    }
14930    if (element.hasSubject()) {
14931      composeType(t, "Library", "subject", element.getSubject(), -1);
14932    }
14933    if (element.hasDateElement()) {
14934      composeDateTime(t, "Library", "date", element.getDateElement(), -1);
14935    }
14936    if (element.hasPublisherElement()) {
14937      composeString(t, "Library", "publisher", element.getPublisherElement(), -1);
14938    }
14939    for (int i = 0; i < element.getContact().size(); i++) {
14940      composeContactDetail(t, "Library", "contact", element.getContact().get(i), i);
14941    }
14942    if (element.hasDescriptionElement()) {
14943      composeMarkdown(t, "Library", "description", element.getDescriptionElement(), -1);
14944    }
14945    for (int i = 0; i < element.getUseContext().size(); i++) {
14946      composeUsageContext(t, "Library", "useContext", element.getUseContext().get(i), i);
14947    }
14948    for (int i = 0; i < element.getJurisdiction().size(); i++) {
14949      composeCodeableConcept(t, "Library", "jurisdiction", element.getJurisdiction().get(i), i);
14950    }
14951    if (element.hasPurposeElement()) {
14952      composeMarkdown(t, "Library", "purpose", element.getPurposeElement(), -1);
14953    }
14954    if (element.hasUsageElement()) {
14955      composeString(t, "Library", "usage", element.getUsageElement(), -1);
14956    }
14957    if (element.hasCopyrightElement()) {
14958      composeMarkdown(t, "Library", "copyright", element.getCopyrightElement(), -1);
14959    }
14960    if (element.hasApprovalDateElement()) {
14961      composeDate(t, "Library", "approvalDate", element.getApprovalDateElement(), -1);
14962    }
14963    if (element.hasLastReviewDateElement()) {
14964      composeDate(t, "Library", "lastReviewDate", element.getLastReviewDateElement(), -1);
14965    }
14966    if (element.hasEffectivePeriod()) {
14967      composePeriod(t, "Library", "effectivePeriod", element.getEffectivePeriod(), -1);
14968    }
14969    for (int i = 0; i < element.getTopic().size(); i++) {
14970      composeCodeableConcept(t, "Library", "topic", element.getTopic().get(i), i);
14971    }
14972    for (int i = 0; i < element.getAuthor().size(); i++) {
14973      composeContactDetail(t, "Library", "author", element.getAuthor().get(i), i);
14974    }
14975    for (int i = 0; i < element.getEditor().size(); i++) {
14976      composeContactDetail(t, "Library", "editor", element.getEditor().get(i), i);
14977    }
14978    for (int i = 0; i < element.getReviewer().size(); i++) {
14979      composeContactDetail(t, "Library", "reviewer", element.getReviewer().get(i), i);
14980    }
14981    for (int i = 0; i < element.getEndorser().size(); i++) {
14982      composeContactDetail(t, "Library", "endorser", element.getEndorser().get(i), i);
14983    }
14984    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
14985      composeRelatedArtifact(t, "Library", "relatedArtifact", element.getRelatedArtifact().get(i), i);
14986    }
14987    for (int i = 0; i < element.getParameter().size(); i++) {
14988      composeParameterDefinition(t, "Library", "parameter", element.getParameter().get(i), i);
14989    }
14990    for (int i = 0; i < element.getDataRequirement().size(); i++) {
14991      composeDataRequirement(t, "Library", "dataRequirement", element.getDataRequirement().get(i), i);
14992    }
14993    for (int i = 0; i < element.getContent().size(); i++) {
14994      composeAttachment(t, "Library", "content", element.getContent().get(i), i);
14995    }
14996  }
14997
14998  protected void composeLinkage(Complex parent, String parentType, String name, Linkage element, int index) {
14999    if (element == null) 
15000      return;
15001    Complex t;
15002    if (Utilities.noString(parentType))
15003      t = parent;
15004    else {
15005      t = parent.predicate("fhir:"+parentType+'.'+name);
15006    }
15007    composeDomainResource(t, "Linkage", name, element, index);
15008    if (element.hasActiveElement()) {
15009      composeBoolean(t, "Linkage", "active", element.getActiveElement(), -1);
15010    }
15011    if (element.hasAuthor()) {
15012      composeReference(t, "Linkage", "author", element.getAuthor(), -1);
15013    }
15014    for (int i = 0; i < element.getItem().size(); i++) {
15015      composeLinkageItemComponent(t, "Linkage", "item", element.getItem().get(i), i);
15016    }
15017  }
15018
15019  protected void composeLinkageItemComponent(Complex parent, String parentType, String name, Linkage.LinkageItemComponent element, int index) {
15020    if (element == null) 
15021      return;
15022    Complex t;
15023    if (Utilities.noString(parentType))
15024      t = parent;
15025    else {
15026      t = parent.predicate("fhir:"+parentType+'.'+name);
15027    }
15028    composeBackboneElement(t, "item", name, element, index);
15029    if (element.hasTypeElement()) {
15030      composeEnum(t, "LinkageItemComponent", "type", element.getTypeElement(), -1);
15031    }
15032    if (element.hasResource()) {
15033      composeReference(t, "LinkageItemComponent", "resource", element.getResource(), -1);
15034    }
15035  }
15036
15037  protected void composeListResource(Complex parent, String parentType, String name, ListResource element, int index) {
15038    if (element == null) 
15039      return;
15040    Complex t;
15041    if (Utilities.noString(parentType))
15042      t = parent;
15043    else {
15044      t = parent.predicate("fhir:"+parentType+'.'+name);
15045    }
15046    composeDomainResource(t, "List", name, element, index);
15047    for (int i = 0; i < element.getIdentifier().size(); i++) {
15048      composeIdentifier(t, "ListResource", "identifier", element.getIdentifier().get(i), i);
15049    }
15050    if (element.hasStatusElement()) {
15051      composeEnum(t, "ListResource", "status", element.getStatusElement(), -1);
15052    }
15053    if (element.hasModeElement()) {
15054      composeEnum(t, "ListResource", "mode", element.getModeElement(), -1);
15055    }
15056    if (element.hasTitleElement()) {
15057      composeString(t, "ListResource", "title", element.getTitleElement(), -1);
15058    }
15059    if (element.hasCode()) {
15060      composeCodeableConcept(t, "ListResource", "code", element.getCode(), -1);
15061    }
15062    if (element.hasSubject()) {
15063      composeReference(t, "ListResource", "subject", element.getSubject(), -1);
15064    }
15065    if (element.hasEncounter()) {
15066      composeReference(t, "ListResource", "encounter", element.getEncounter(), -1);
15067    }
15068    if (element.hasDateElement()) {
15069      composeDateTime(t, "ListResource", "date", element.getDateElement(), -1);
15070    }
15071    if (element.hasSource()) {
15072      composeReference(t, "ListResource", "source", element.getSource(), -1);
15073    }
15074    if (element.hasOrderedBy()) {
15075      composeCodeableConcept(t, "ListResource", "orderedBy", element.getOrderedBy(), -1);
15076    }
15077    for (int i = 0; i < element.getNote().size(); i++) {
15078      composeAnnotation(t, "ListResource", "note", element.getNote().get(i), i);
15079    }
15080    for (int i = 0; i < element.getEntry().size(); i++) {
15081      composeListResourceEntryComponent(t, "ListResource", "entry", element.getEntry().get(i), i);
15082    }
15083    if (element.hasEmptyReason()) {
15084      composeCodeableConcept(t, "ListResource", "emptyReason", element.getEmptyReason(), -1);
15085    }
15086  }
15087
15088  protected void composeListResourceEntryComponent(Complex parent, String parentType, String name, ListResource.ListResourceEntryComponent element, int index) {
15089    if (element == null) 
15090      return;
15091    Complex t;
15092    if (Utilities.noString(parentType))
15093      t = parent;
15094    else {
15095      t = parent.predicate("fhir:"+parentType+'.'+name);
15096    }
15097    composeBackboneElement(t, "entry", name, element, index);
15098    if (element.hasFlag()) {
15099      composeCodeableConcept(t, "ListResourceEntryComponent", "flag", element.getFlag(), -1);
15100    }
15101    if (element.hasDeletedElement()) {
15102      composeBoolean(t, "ListResourceEntryComponent", "deleted", element.getDeletedElement(), -1);
15103    }
15104    if (element.hasDateElement()) {
15105      composeDateTime(t, "ListResourceEntryComponent", "date", element.getDateElement(), -1);
15106    }
15107    if (element.hasItem()) {
15108      composeReference(t, "ListResourceEntryComponent", "item", element.getItem(), -1);
15109    }
15110  }
15111
15112  protected void composeLocation(Complex parent, String parentType, String name, Location element, int index) {
15113    if (element == null) 
15114      return;
15115    Complex t;
15116    if (Utilities.noString(parentType))
15117      t = parent;
15118    else {
15119      t = parent.predicate("fhir:"+parentType+'.'+name);
15120    }
15121    composeDomainResource(t, "Location", name, element, index);
15122    for (int i = 0; i < element.getIdentifier().size(); i++) {
15123      composeIdentifier(t, "Location", "identifier", element.getIdentifier().get(i), i);
15124    }
15125    if (element.hasStatusElement()) {
15126      composeEnum(t, "Location", "status", element.getStatusElement(), -1);
15127    }
15128    if (element.hasOperationalStatus()) {
15129      composeCoding(t, "Location", "operationalStatus", element.getOperationalStatus(), -1);
15130    }
15131    if (element.hasNameElement()) {
15132      composeString(t, "Location", "name", element.getNameElement(), -1);
15133    }
15134    for (int i = 0; i < element.getAlias().size(); i++) {
15135      composeString(t, "Location", "alias", element.getAlias().get(i), i);
15136    }
15137    if (element.hasDescriptionElement()) {
15138      composeString(t, "Location", "description", element.getDescriptionElement(), -1);
15139    }
15140    if (element.hasModeElement()) {
15141      composeEnum(t, "Location", "mode", element.getModeElement(), -1);
15142    }
15143    for (int i = 0; i < element.getType().size(); i++) {
15144      composeCodeableConcept(t, "Location", "type", element.getType().get(i), i);
15145    }
15146    for (int i = 0; i < element.getTelecom().size(); i++) {
15147      composeContactPoint(t, "Location", "telecom", element.getTelecom().get(i), i);
15148    }
15149    if (element.hasAddress()) {
15150      composeAddress(t, "Location", "address", element.getAddress(), -1);
15151    }
15152    if (element.hasPhysicalType()) {
15153      composeCodeableConcept(t, "Location", "physicalType", element.getPhysicalType(), -1);
15154    }
15155    if (element.hasPosition()) {
15156      composeLocationPositionComponent(t, "Location", "position", element.getPosition(), -1);
15157    }
15158    if (element.hasManagingOrganization()) {
15159      composeReference(t, "Location", "managingOrganization", element.getManagingOrganization(), -1);
15160    }
15161    if (element.hasPartOf()) {
15162      composeReference(t, "Location", "partOf", element.getPartOf(), -1);
15163    }
15164    for (int i = 0; i < element.getHoursOfOperation().size(); i++) {
15165      composeLocationHoursOfOperationComponent(t, "Location", "hoursOfOperation", element.getHoursOfOperation().get(i), i);
15166    }
15167    if (element.hasAvailabilityExceptionsElement()) {
15168      composeString(t, "Location", "availabilityExceptions", element.getAvailabilityExceptionsElement(), -1);
15169    }
15170    for (int i = 0; i < element.getEndpoint().size(); i++) {
15171      composeReference(t, "Location", "endpoint", element.getEndpoint().get(i), i);
15172    }
15173  }
15174
15175  protected void composeLocationPositionComponent(Complex parent, String parentType, String name, Location.LocationPositionComponent element, int index) {
15176    if (element == null) 
15177      return;
15178    Complex t;
15179    if (Utilities.noString(parentType))
15180      t = parent;
15181    else {
15182      t = parent.predicate("fhir:"+parentType+'.'+name);
15183    }
15184    composeBackboneElement(t, "position", name, element, index);
15185    if (element.hasLongitudeElement()) {
15186      composeDecimal(t, "LocationPositionComponent", "longitude", element.getLongitudeElement(), -1);
15187    }
15188    if (element.hasLatitudeElement()) {
15189      composeDecimal(t, "LocationPositionComponent", "latitude", element.getLatitudeElement(), -1);
15190    }
15191    if (element.hasAltitudeElement()) {
15192      composeDecimal(t, "LocationPositionComponent", "altitude", element.getAltitudeElement(), -1);
15193    }
15194  }
15195
15196  protected void composeLocationHoursOfOperationComponent(Complex parent, String parentType, String name, Location.LocationHoursOfOperationComponent element, int index) {
15197    if (element == null) 
15198      return;
15199    Complex t;
15200    if (Utilities.noString(parentType))
15201      t = parent;
15202    else {
15203      t = parent.predicate("fhir:"+parentType+'.'+name);
15204    }
15205    composeBackboneElement(t, "hoursOfOperation", name, element, index);
15206    for (int i = 0; i < element.getDaysOfWeek().size(); i++) {
15207      composeEnum(t, "LocationHoursOfOperationComponent", "daysOfWeek", element.getDaysOfWeek().get(i), i);
15208    }
15209    if (element.hasAllDayElement()) {
15210      composeBoolean(t, "LocationHoursOfOperationComponent", "allDay", element.getAllDayElement(), -1);
15211    }
15212    if (element.hasOpeningTimeElement()) {
15213      composeTime(t, "LocationHoursOfOperationComponent", "openingTime", element.getOpeningTimeElement(), -1);
15214    }
15215    if (element.hasClosingTimeElement()) {
15216      composeTime(t, "LocationHoursOfOperationComponent", "closingTime", element.getClosingTimeElement(), -1);
15217    }
15218  }
15219
15220  protected void composeManufacturedItemDefinition(Complex parent, String parentType, String name, ManufacturedItemDefinition 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:"+parentType+'.'+name);
15228    }
15229    composeDomainResource(t, "ManufacturedItemDefinition", name, element, index);
15230    for (int i = 0; i < element.getIdentifier().size(); i++) {
15231      composeIdentifier(t, "ManufacturedItemDefinition", "identifier", element.getIdentifier().get(i), i);
15232    }
15233    if (element.hasStatusElement()) {
15234      composeEnum(t, "ManufacturedItemDefinition", "status", element.getStatusElement(), -1);
15235    }
15236    if (element.hasManufacturedDoseForm()) {
15237      composeCodeableConcept(t, "ManufacturedItemDefinition", "manufacturedDoseForm", element.getManufacturedDoseForm(), -1);
15238    }
15239    if (element.hasUnitOfPresentation()) {
15240      composeCodeableConcept(t, "ManufacturedItemDefinition", "unitOfPresentation", element.getUnitOfPresentation(), -1);
15241    }
15242    for (int i = 0; i < element.getManufacturer().size(); i++) {
15243      composeReference(t, "ManufacturedItemDefinition", "manufacturer", element.getManufacturer().get(i), i);
15244    }
15245    for (int i = 0; i < element.getIngredient().size(); i++) {
15246      composeCodeableConcept(t, "ManufacturedItemDefinition", "ingredient", element.getIngredient().get(i), i);
15247    }
15248    for (int i = 0; i < element.getProperty().size(); i++) {
15249      composeManufacturedItemDefinitionPropertyComponent(t, "ManufacturedItemDefinition", "property", element.getProperty().get(i), i);
15250    }
15251  }
15252
15253  protected void composeManufacturedItemDefinitionPropertyComponent(Complex parent, String parentType, String name, ManufacturedItemDefinition.ManufacturedItemDefinitionPropertyComponent element, int index) {
15254    if (element == null) 
15255      return;
15256    Complex t;
15257    if (Utilities.noString(parentType))
15258      t = parent;
15259    else {
15260      t = parent.predicate("fhir:"+parentType+'.'+name);
15261    }
15262    composeBackboneElement(t, "property", name, element, index);
15263    if (element.hasType()) {
15264      composeCodeableConcept(t, "ManufacturedItemDefinitionPropertyComponent", "type", element.getType(), -1);
15265    }
15266    if (element.hasValue()) {
15267      composeType(t, "ManufacturedItemDefinitionPropertyComponent", "value", element.getValue(), -1);
15268    }
15269  }
15270
15271  protected void composeMeasure(Complex parent, String parentType, String name, Measure element, int index) {
15272    if (element == null) 
15273      return;
15274    Complex t;
15275    if (Utilities.noString(parentType))
15276      t = parent;
15277    else {
15278      t = parent.predicate("fhir:"+parentType+'.'+name);
15279    }
15280    composeMetadataResource(t, "Measure", name, element, index);
15281    if (element.hasUrlElement()) {
15282      composeUri(t, "Measure", "url", element.getUrlElement(), -1);
15283    }
15284    for (int i = 0; i < element.getIdentifier().size(); i++) {
15285      composeIdentifier(t, "Measure", "identifier", element.getIdentifier().get(i), i);
15286    }
15287    if (element.hasVersionElement()) {
15288      composeString(t, "Measure", "version", element.getVersionElement(), -1);
15289    }
15290    if (element.hasNameElement()) {
15291      composeString(t, "Measure", "name", element.getNameElement(), -1);
15292    }
15293    if (element.hasTitleElement()) {
15294      composeString(t, "Measure", "title", element.getTitleElement(), -1);
15295    }
15296    if (element.hasSubtitleElement()) {
15297      composeString(t, "Measure", "subtitle", element.getSubtitleElement(), -1);
15298    }
15299    if (element.hasStatusElement()) {
15300      composeEnum(t, "Measure", "status", element.getStatusElement(), -1);
15301    }
15302    if (element.hasExperimentalElement()) {
15303      composeBoolean(t, "Measure", "experimental", element.getExperimentalElement(), -1);
15304    }
15305    if (element.hasSubject()) {
15306      composeType(t, "Measure", "subject", element.getSubject(), -1);
15307    }
15308    if (element.hasBasisElement()) {
15309      composeEnum(t, "Measure", "basis", element.getBasisElement(), -1);
15310    }
15311    if (element.hasDateElement()) {
15312      composeDateTime(t, "Measure", "date", element.getDateElement(), -1);
15313    }
15314    if (element.hasPublisherElement()) {
15315      composeString(t, "Measure", "publisher", element.getPublisherElement(), -1);
15316    }
15317    for (int i = 0; i < element.getContact().size(); i++) {
15318      composeContactDetail(t, "Measure", "contact", element.getContact().get(i), i);
15319    }
15320    if (element.hasDescriptionElement()) {
15321      composeMarkdown(t, "Measure", "description", element.getDescriptionElement(), -1);
15322    }
15323    for (int i = 0; i < element.getUseContext().size(); i++) {
15324      composeUsageContext(t, "Measure", "useContext", element.getUseContext().get(i), i);
15325    }
15326    for (int i = 0; i < element.getJurisdiction().size(); i++) {
15327      composeCodeableConcept(t, "Measure", "jurisdiction", element.getJurisdiction().get(i), i);
15328    }
15329    if (element.hasPurposeElement()) {
15330      composeMarkdown(t, "Measure", "purpose", element.getPurposeElement(), -1);
15331    }
15332    if (element.hasUsageElement()) {
15333      composeString(t, "Measure", "usage", element.getUsageElement(), -1);
15334    }
15335    if (element.hasCopyrightElement()) {
15336      composeMarkdown(t, "Measure", "copyright", element.getCopyrightElement(), -1);
15337    }
15338    if (element.hasApprovalDateElement()) {
15339      composeDate(t, "Measure", "approvalDate", element.getApprovalDateElement(), -1);
15340    }
15341    if (element.hasLastReviewDateElement()) {
15342      composeDate(t, "Measure", "lastReviewDate", element.getLastReviewDateElement(), -1);
15343    }
15344    if (element.hasEffectivePeriod()) {
15345      composePeriod(t, "Measure", "effectivePeriod", element.getEffectivePeriod(), -1);
15346    }
15347    for (int i = 0; i < element.getTopic().size(); i++) {
15348      composeCodeableConcept(t, "Measure", "topic", element.getTopic().get(i), i);
15349    }
15350    for (int i = 0; i < element.getAuthor().size(); i++) {
15351      composeContactDetail(t, "Measure", "author", element.getAuthor().get(i), i);
15352    }
15353    for (int i = 0; i < element.getEditor().size(); i++) {
15354      composeContactDetail(t, "Measure", "editor", element.getEditor().get(i), i);
15355    }
15356    for (int i = 0; i < element.getReviewer().size(); i++) {
15357      composeContactDetail(t, "Measure", "reviewer", element.getReviewer().get(i), i);
15358    }
15359    for (int i = 0; i < element.getEndorser().size(); i++) {
15360      composeContactDetail(t, "Measure", "endorser", element.getEndorser().get(i), i);
15361    }
15362    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
15363      composeRelatedArtifact(t, "Measure", "relatedArtifact", element.getRelatedArtifact().get(i), i);
15364    }
15365    for (int i = 0; i < element.getLibrary().size(); i++) {
15366      composeCanonical(t, "Measure", "library", element.getLibrary().get(i), i);
15367    }
15368    if (element.hasDisclaimerElement()) {
15369      composeMarkdown(t, "Measure", "disclaimer", element.getDisclaimerElement(), -1);
15370    }
15371    if (element.hasScoring()) {
15372      composeCodeableConcept(t, "Measure", "scoring", element.getScoring(), -1);
15373    }
15374    if (element.hasScoringUnit()) {
15375      composeCodeableConcept(t, "Measure", "scoringUnit", element.getScoringUnit(), -1);
15376    }
15377    if (element.hasCompositeScoring()) {
15378      composeCodeableConcept(t, "Measure", "compositeScoring", element.getCompositeScoring(), -1);
15379    }
15380    for (int i = 0; i < element.getType().size(); i++) {
15381      composeCodeableConcept(t, "Measure", "type", element.getType().get(i), i);
15382    }
15383    if (element.hasRiskAdjustmentElement()) {
15384      composeString(t, "Measure", "riskAdjustment", element.getRiskAdjustmentElement(), -1);
15385    }
15386    if (element.hasRateAggregationElement()) {
15387      composeString(t, "Measure", "rateAggregation", element.getRateAggregationElement(), -1);
15388    }
15389    if (element.hasRationaleElement()) {
15390      composeMarkdown(t, "Measure", "rationale", element.getRationaleElement(), -1);
15391    }
15392    if (element.hasClinicalRecommendationStatementElement()) {
15393      composeMarkdown(t, "Measure", "clinicalRecommendationStatement", element.getClinicalRecommendationStatementElement(), -1);
15394    }
15395    if (element.hasImprovementNotation()) {
15396      composeCodeableConcept(t, "Measure", "improvementNotation", element.getImprovementNotation(), -1);
15397    }
15398    for (int i = 0; i < element.getDefinition().size(); i++) {
15399      composeMarkdown(t, "Measure", "definition", element.getDefinition().get(i), i);
15400    }
15401    if (element.hasGuidanceElement()) {
15402      composeMarkdown(t, "Measure", "guidance", element.getGuidanceElement(), -1);
15403    }
15404    for (int i = 0; i < element.getGroup().size(); i++) {
15405      composeMeasureGroupComponent(t, "Measure", "group", element.getGroup().get(i), i);
15406    }
15407    for (int i = 0; i < element.getSupplementalData().size(); i++) {
15408      composeMeasureSupplementalDataComponent(t, "Measure", "supplementalData", element.getSupplementalData().get(i), i);
15409    }
15410  }
15411
15412  protected void composeMeasureGroupComponent(Complex parent, String parentType, String name, Measure.MeasureGroupComponent element, int index) {
15413    if (element == null) 
15414      return;
15415    Complex t;
15416    if (Utilities.noString(parentType))
15417      t = parent;
15418    else {
15419      t = parent.predicate("fhir:"+parentType+'.'+name);
15420    }
15421    composeBackboneElement(t, "group", name, element, index);
15422    if (element.hasCode()) {
15423      composeCodeableConcept(t, "MeasureGroupComponent", "code", element.getCode(), -1);
15424    }
15425    if (element.hasDescriptionElement()) {
15426      composeString(t, "MeasureGroupComponent", "description", element.getDescriptionElement(), -1);
15427    }
15428    for (int i = 0; i < element.getType().size(); i++) {
15429      composeCodeableConcept(t, "MeasureGroupComponent", "type", element.getType().get(i), i);
15430    }
15431    if (element.hasBasisElement()) {
15432      composeEnum(t, "MeasureGroupComponent", "basis", element.getBasisElement(), -1);
15433    }
15434    if (element.hasScoring()) {
15435      composeCodeableConcept(t, "MeasureGroupComponent", "scoring", element.getScoring(), -1);
15436    }
15437    if (element.hasScoringUnit()) {
15438      composeCodeableConcept(t, "MeasureGroupComponent", "scoringUnit", element.getScoringUnit(), -1);
15439    }
15440    if (element.hasImprovementNotation()) {
15441      composeCodeableConcept(t, "MeasureGroupComponent", "improvementNotation", element.getImprovementNotation(), -1);
15442    }
15443    for (int i = 0; i < element.getPopulation().size(); i++) {
15444      composeMeasureGroupPopulationComponent(t, "MeasureGroupComponent", "population", element.getPopulation().get(i), i);
15445    }
15446    for (int i = 0; i < element.getStratifier().size(); i++) {
15447      composeMeasureGroupStratifierComponent(t, "MeasureGroupComponent", "stratifier", element.getStratifier().get(i), i);
15448    }
15449  }
15450
15451  protected void composeMeasureGroupPopulationComponent(Complex parent, String parentType, String name, Measure.MeasureGroupPopulationComponent element, int index) {
15452    if (element == null) 
15453      return;
15454    Complex t;
15455    if (Utilities.noString(parentType))
15456      t = parent;
15457    else {
15458      t = parent.predicate("fhir:"+parentType+'.'+name);
15459    }
15460    composeBackboneElement(t, "population", name, element, index);
15461    if (element.hasCode()) {
15462      composeCodeableConcept(t, "MeasureGroupPopulationComponent", "code", element.getCode(), -1);
15463    }
15464    if (element.hasDescriptionElement()) {
15465      composeString(t, "MeasureGroupPopulationComponent", "description", element.getDescriptionElement(), -1);
15466    }
15467    if (element.hasCriteria()) {
15468      composeExpression(t, "MeasureGroupPopulationComponent", "criteria", element.getCriteria(), -1);
15469    }
15470    if (element.hasInputPopulationIdElement()) {
15471      composeString(t, "MeasureGroupPopulationComponent", "inputPopulationId", element.getInputPopulationIdElement(), -1);
15472    }
15473    if (element.hasAggregateMethod()) {
15474      composeCodeableConcept(t, "MeasureGroupPopulationComponent", "aggregateMethod", element.getAggregateMethod(), -1);
15475    }
15476  }
15477
15478  protected void composeMeasureGroupStratifierComponent(Complex parent, String parentType, String name, Measure.MeasureGroupStratifierComponent element, int index) {
15479    if (element == null) 
15480      return;
15481    Complex t;
15482    if (Utilities.noString(parentType))
15483      t = parent;
15484    else {
15485      t = parent.predicate("fhir:"+parentType+'.'+name);
15486    }
15487    composeBackboneElement(t, "stratifier", name, element, index);
15488    if (element.hasCode()) {
15489      composeCodeableConcept(t, "MeasureGroupStratifierComponent", "code", element.getCode(), -1);
15490    }
15491    if (element.hasDescriptionElement()) {
15492      composeString(t, "MeasureGroupStratifierComponent", "description", element.getDescriptionElement(), -1);
15493    }
15494    if (element.hasCriteria()) {
15495      composeExpression(t, "MeasureGroupStratifierComponent", "criteria", element.getCriteria(), -1);
15496    }
15497    for (int i = 0; i < element.getComponent().size(); i++) {
15498      composeMeasureGroupStratifierComponentComponent(t, "MeasureGroupStratifierComponent", "component", element.getComponent().get(i), i);
15499    }
15500  }
15501
15502  protected void composeMeasureGroupStratifierComponentComponent(Complex parent, String parentType, String name, Measure.MeasureGroupStratifierComponentComponent element, int index) {
15503    if (element == null) 
15504      return;
15505    Complex t;
15506    if (Utilities.noString(parentType))
15507      t = parent;
15508    else {
15509      t = parent.predicate("fhir:"+parentType+'.'+name);
15510    }
15511    composeBackboneElement(t, "component", name, element, index);
15512    if (element.hasCode()) {
15513      composeCodeableConcept(t, "MeasureGroupStratifierComponentComponent", "code", element.getCode(), -1);
15514    }
15515    if (element.hasDescriptionElement()) {
15516      composeString(t, "MeasureGroupStratifierComponentComponent", "description", element.getDescriptionElement(), -1);
15517    }
15518    if (element.hasCriteria()) {
15519      composeExpression(t, "MeasureGroupStratifierComponentComponent", "criteria", element.getCriteria(), -1);
15520    }
15521  }
15522
15523  protected void composeMeasureSupplementalDataComponent(Complex parent, String parentType, String name, Measure.MeasureSupplementalDataComponent 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:"+parentType+'.'+name);
15531    }
15532    composeBackboneElement(t, "supplementalData", name, element, index);
15533    if (element.hasCode()) {
15534      composeCodeableConcept(t, "MeasureSupplementalDataComponent", "code", element.getCode(), -1);
15535    }
15536    for (int i = 0; i < element.getUsage().size(); i++) {
15537      composeCodeableConcept(t, "MeasureSupplementalDataComponent", "usage", element.getUsage().get(i), i);
15538    }
15539    if (element.hasDescriptionElement()) {
15540      composeString(t, "MeasureSupplementalDataComponent", "description", element.getDescriptionElement(), -1);
15541    }
15542    if (element.hasCriteria()) {
15543      composeExpression(t, "MeasureSupplementalDataComponent", "criteria", element.getCriteria(), -1);
15544    }
15545  }
15546
15547  protected void composeMeasureReport(Complex parent, String parentType, String name, MeasureReport element, int index) {
15548    if (element == null) 
15549      return;
15550    Complex t;
15551    if (Utilities.noString(parentType))
15552      t = parent;
15553    else {
15554      t = parent.predicate("fhir:"+parentType+'.'+name);
15555    }
15556    composeDomainResource(t, "MeasureReport", name, element, index);
15557    for (int i = 0; i < element.getIdentifier().size(); i++) {
15558      composeIdentifier(t, "MeasureReport", "identifier", element.getIdentifier().get(i), i);
15559    }
15560    if (element.hasStatusElement()) {
15561      composeEnum(t, "MeasureReport", "status", element.getStatusElement(), -1);
15562    }
15563    if (element.hasTypeElement()) {
15564      composeEnum(t, "MeasureReport", "type", element.getTypeElement(), -1);
15565    }
15566    if (element.hasDataUpdateTypeElement()) {
15567      composeEnum(t, "MeasureReport", "dataUpdateType", element.getDataUpdateTypeElement(), -1);
15568    }
15569    if (element.hasMeasureElement()) {
15570      composeCanonical(t, "MeasureReport", "measure", element.getMeasureElement(), -1);
15571    }
15572    if (element.hasSubject()) {
15573      composeReference(t, "MeasureReport", "subject", element.getSubject(), -1);
15574    }
15575    if (element.hasDateElement()) {
15576      composeDateTime(t, "MeasureReport", "date", element.getDateElement(), -1);
15577    }
15578    if (element.hasReporter()) {
15579      composeReference(t, "MeasureReport", "reporter", element.getReporter(), -1);
15580    }
15581    if (element.hasReportingVendor()) {
15582      composeReference(t, "MeasureReport", "reportingVendor", element.getReportingVendor(), -1);
15583    }
15584    if (element.hasPeriod()) {
15585      composePeriod(t, "MeasureReport", "period", element.getPeriod(), -1);
15586    }
15587    if (element.hasScoring()) {
15588      composeCodeableConcept(t, "MeasureReport", "scoring", element.getScoring(), -1);
15589    }
15590    if (element.hasImprovementNotation()) {
15591      composeCodeableConcept(t, "MeasureReport", "improvementNotation", element.getImprovementNotation(), -1);
15592    }
15593    for (int i = 0; i < element.getGroup().size(); i++) {
15594      composeMeasureReportGroupComponent(t, "MeasureReport", "group", element.getGroup().get(i), i);
15595    }
15596    for (int i = 0; i < element.getEvaluatedResource().size(); i++) {
15597      composeReference(t, "MeasureReport", "evaluatedResource", element.getEvaluatedResource().get(i), i);
15598    }
15599  }
15600
15601  protected void composeMeasureReportGroupComponent(Complex parent, String parentType, String name, MeasureReport.MeasureReportGroupComponent element, int index) {
15602    if (element == null) 
15603      return;
15604    Complex t;
15605    if (Utilities.noString(parentType))
15606      t = parent;
15607    else {
15608      t = parent.predicate("fhir:"+parentType+'.'+name);
15609    }
15610    composeBackboneElement(t, "group", name, element, index);
15611    if (element.hasCode()) {
15612      composeCodeableConcept(t, "MeasureReportGroupComponent", "code", element.getCode(), -1);
15613    }
15614    for (int i = 0; i < element.getPopulation().size(); i++) {
15615      composeMeasureReportGroupPopulationComponent(t, "MeasureReportGroupComponent", "population", element.getPopulation().get(i), i);
15616    }
15617    if (element.hasMeasureScore()) {
15618      composeType(t, "MeasureReportGroupComponent", "measureScore", element.getMeasureScore(), -1);
15619    }
15620    for (int i = 0; i < element.getStratifier().size(); i++) {
15621      composeMeasureReportGroupStratifierComponent(t, "MeasureReportGroupComponent", "stratifier", element.getStratifier().get(i), i);
15622    }
15623  }
15624
15625  protected void composeMeasureReportGroupPopulationComponent(Complex parent, String parentType, String name, MeasureReport.MeasureReportGroupPopulationComponent element, int index) {
15626    if (element == null) 
15627      return;
15628    Complex t;
15629    if (Utilities.noString(parentType))
15630      t = parent;
15631    else {
15632      t = parent.predicate("fhir:"+parentType+'.'+name);
15633    }
15634    composeBackboneElement(t, "population", name, element, index);
15635    if (element.hasCode()) {
15636      composeCodeableConcept(t, "MeasureReportGroupPopulationComponent", "code", element.getCode(), -1);
15637    }
15638    if (element.hasCountElement()) {
15639      composeInteger(t, "MeasureReportGroupPopulationComponent", "count", element.getCountElement(), -1);
15640    }
15641    if (element.hasSubjectResults()) {
15642      composeReference(t, "MeasureReportGroupPopulationComponent", "subjectResults", element.getSubjectResults(), -1);
15643    }
15644  }
15645
15646  protected void composeMeasureReportGroupStratifierComponent(Complex parent, String parentType, String name, MeasureReport.MeasureReportGroupStratifierComponent element, int index) {
15647    if (element == null) 
15648      return;
15649    Complex t;
15650    if (Utilities.noString(parentType))
15651      t = parent;
15652    else {
15653      t = parent.predicate("fhir:"+parentType+'.'+name);
15654    }
15655    composeBackboneElement(t, "stratifier", name, element, index);
15656    for (int i = 0; i < element.getCode().size(); i++) {
15657      composeCodeableConcept(t, "MeasureReportGroupStratifierComponent", "code", element.getCode().get(i), i);
15658    }
15659    for (int i = 0; i < element.getStratum().size(); i++) {
15660      composeMeasureReportStratifierGroupComponent(t, "MeasureReportGroupStratifierComponent", "stratum", element.getStratum().get(i), i);
15661    }
15662  }
15663
15664  protected void composeMeasureReportStratifierGroupComponent(Complex parent, String parentType, String name, MeasureReport.StratifierGroupComponent element, int index) {
15665    if (element == null) 
15666      return;
15667    Complex t;
15668    if (Utilities.noString(parentType))
15669      t = parent;
15670    else {
15671      t = parent.predicate("fhir:"+parentType+'.'+name);
15672    }
15673    composeBackboneElement(t, "stratum", name, element, index);
15674    if (element.hasValue()) {
15675      composeType(t, "StratifierGroupComponent", "value", element.getValue(), -1);
15676    }
15677    for (int i = 0; i < element.getComponent().size(); i++) {
15678      composeMeasureReportStratifierGroupComponentComponent(t, "StratifierGroupComponent", "component", element.getComponent().get(i), i);
15679    }
15680    for (int i = 0; i < element.getPopulation().size(); i++) {
15681      composeMeasureReportStratifierGroupPopulationComponent(t, "StratifierGroupComponent", "population", element.getPopulation().get(i), i);
15682    }
15683    if (element.hasMeasureScore()) {
15684      composeType(t, "StratifierGroupComponent", "measureScore", element.getMeasureScore(), -1);
15685    }
15686  }
15687
15688  protected void composeMeasureReportStratifierGroupComponentComponent(Complex parent, String parentType, String name, MeasureReport.StratifierGroupComponentComponent element, int index) {
15689    if (element == null) 
15690      return;
15691    Complex t;
15692    if (Utilities.noString(parentType))
15693      t = parent;
15694    else {
15695      t = parent.predicate("fhir:"+parentType+'.'+name);
15696    }
15697    composeBackboneElement(t, "component", name, element, index);
15698    if (element.hasCode()) {
15699      composeCodeableConcept(t, "StratifierGroupComponentComponent", "code", element.getCode(), -1);
15700    }
15701    if (element.hasValue()) {
15702      composeType(t, "StratifierGroupComponentComponent", "value", element.getValue(), -1);
15703    }
15704  }
15705
15706  protected void composeMeasureReportStratifierGroupPopulationComponent(Complex parent, String parentType, String name, MeasureReport.StratifierGroupPopulationComponent element, int index) {
15707    if (element == null) 
15708      return;
15709    Complex t;
15710    if (Utilities.noString(parentType))
15711      t = parent;
15712    else {
15713      t = parent.predicate("fhir:"+parentType+'.'+name);
15714    }
15715    composeBackboneElement(t, "population", name, element, index);
15716    if (element.hasCode()) {
15717      composeCodeableConcept(t, "StratifierGroupPopulationComponent", "code", element.getCode(), -1);
15718    }
15719    if (element.hasCountElement()) {
15720      composeInteger(t, "StratifierGroupPopulationComponent", "count", element.getCountElement(), -1);
15721    }
15722    if (element.hasSubjectResults()) {
15723      composeReference(t, "StratifierGroupPopulationComponent", "subjectResults", element.getSubjectResults(), -1);
15724    }
15725  }
15726
15727  protected void composeMedication(Complex parent, String parentType, String name, Medication element, int index) {
15728    if (element == null) 
15729      return;
15730    Complex t;
15731    if (Utilities.noString(parentType))
15732      t = parent;
15733    else {
15734      t = parent.predicate("fhir:"+parentType+'.'+name);
15735    }
15736    composeDomainResource(t, "Medication", name, element, index);
15737    for (int i = 0; i < element.getIdentifier().size(); i++) {
15738      composeIdentifier(t, "Medication", "identifier", element.getIdentifier().get(i), i);
15739    }
15740    if (element.hasCode()) {
15741      composeCodeableConcept(t, "Medication", "code", element.getCode(), -1);
15742    }
15743    if (element.hasStatusElement()) {
15744      composeEnum(t, "Medication", "status", element.getStatusElement(), -1);
15745    }
15746    if (element.hasMarketingAuthorizationHolder()) {
15747      composeReference(t, "Medication", "marketingAuthorizationHolder", element.getMarketingAuthorizationHolder(), -1);
15748    }
15749    if (element.hasDoseForm()) {
15750      composeCodeableConcept(t, "Medication", "doseForm", element.getDoseForm(), -1);
15751    }
15752    if (element.hasTotalVolume()) {
15753      composeRatio(t, "Medication", "totalVolume", element.getTotalVolume(), -1);
15754    }
15755    for (int i = 0; i < element.getIngredient().size(); i++) {
15756      composeMedicationIngredientComponent(t, "Medication", "ingredient", element.getIngredient().get(i), i);
15757    }
15758    if (element.hasBatch()) {
15759      composeMedicationBatchComponent(t, "Medication", "batch", element.getBatch(), -1);
15760    }
15761  }
15762
15763  protected void composeMedicationIngredientComponent(Complex parent, String parentType, String name, Medication.MedicationIngredientComponent element, int index) {
15764    if (element == null) 
15765      return;
15766    Complex t;
15767    if (Utilities.noString(parentType))
15768      t = parent;
15769    else {
15770      t = parent.predicate("fhir:"+parentType+'.'+name);
15771    }
15772    composeBackboneElement(t, "ingredient", name, element, index);
15773    if (element.hasItem()) {
15774      composeCodeableReference(t, "MedicationIngredientComponent", "item", element.getItem(), -1);
15775    }
15776    if (element.hasIsActiveElement()) {
15777      composeBoolean(t, "MedicationIngredientComponent", "isActive", element.getIsActiveElement(), -1);
15778    }
15779    if (element.hasStrength()) {
15780      composeType(t, "MedicationIngredientComponent", "strength", element.getStrength(), -1);
15781    }
15782  }
15783
15784  protected void composeMedicationBatchComponent(Complex parent, String parentType, String name, Medication.MedicationBatchComponent element, int index) {
15785    if (element == null) 
15786      return;
15787    Complex t;
15788    if (Utilities.noString(parentType))
15789      t = parent;
15790    else {
15791      t = parent.predicate("fhir:"+parentType+'.'+name);
15792    }
15793    composeBackboneElement(t, "batch", name, element, index);
15794    if (element.hasLotNumberElement()) {
15795      composeString(t, "MedicationBatchComponent", "lotNumber", element.getLotNumberElement(), -1);
15796    }
15797    if (element.hasExpirationDateElement()) {
15798      composeDateTime(t, "MedicationBatchComponent", "expirationDate", element.getExpirationDateElement(), -1);
15799    }
15800  }
15801
15802  protected void composeMedicationAdministration(Complex parent, String parentType, String name, MedicationAdministration element, int index) {
15803    if (element == null) 
15804      return;
15805    Complex t;
15806    if (Utilities.noString(parentType))
15807      t = parent;
15808    else {
15809      t = parent.predicate("fhir:"+parentType+'.'+name);
15810    }
15811    composeDomainResource(t, "MedicationAdministration", name, element, index);
15812    for (int i = 0; i < element.getIdentifier().size(); i++) {
15813      composeIdentifier(t, "MedicationAdministration", "identifier", element.getIdentifier().get(i), i);
15814    }
15815    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
15816      composeCanonical(t, "MedicationAdministration", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
15817    }
15818    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
15819      composeUri(t, "MedicationAdministration", "instantiatesUri", element.getInstantiatesUri().get(i), i);
15820    }
15821    for (int i = 0; i < element.getBasedOn().size(); i++) {
15822      composeReference(t, "MedicationAdministration", "basedOn", element.getBasedOn().get(i), i);
15823    }
15824    for (int i = 0; i < element.getPartOf().size(); i++) {
15825      composeReference(t, "MedicationAdministration", "partOf", element.getPartOf().get(i), i);
15826    }
15827    if (element.hasStatusElement()) {
15828      composeEnum(t, "MedicationAdministration", "status", element.getStatusElement(), -1);
15829    }
15830    for (int i = 0; i < element.getStatusReason().size(); i++) {
15831      composeCodeableConcept(t, "MedicationAdministration", "statusReason", element.getStatusReason().get(i), i);
15832    }
15833    for (int i = 0; i < element.getCategory().size(); i++) {
15834      composeCodeableConcept(t, "MedicationAdministration", "category", element.getCategory().get(i), i);
15835    }
15836    if (element.hasMedication()) {
15837      composeCodeableReference(t, "MedicationAdministration", "medication", element.getMedication(), -1);
15838    }
15839    if (element.hasSubject()) {
15840      composeReference(t, "MedicationAdministration", "subject", element.getSubject(), -1);
15841    }
15842    if (element.hasEncounter()) {
15843      composeReference(t, "MedicationAdministration", "encounter", element.getEncounter(), -1);
15844    }
15845    for (int i = 0; i < element.getSupportingInformation().size(); i++) {
15846      composeReference(t, "MedicationAdministration", "supportingInformation", element.getSupportingInformation().get(i), i);
15847    }
15848    if (element.hasOccurence()) {
15849      composeType(t, "MedicationAdministration", "occurence", element.getOccurence(), -1);
15850    }
15851    if (element.hasRecordedElement()) {
15852      composeDateTime(t, "MedicationAdministration", "recorded", element.getRecordedElement(), -1);
15853    }
15854    for (int i = 0; i < element.getPerformer().size(); i++) {
15855      composeMedicationAdministrationPerformerComponent(t, "MedicationAdministration", "performer", element.getPerformer().get(i), i);
15856    }
15857    for (int i = 0; i < element.getReason().size(); i++) {
15858      composeCodeableReference(t, "MedicationAdministration", "reason", element.getReason().get(i), i);
15859    }
15860    if (element.hasRequest()) {
15861      composeReference(t, "MedicationAdministration", "request", element.getRequest(), -1);
15862    }
15863    for (int i = 0; i < element.getDevice().size(); i++) {
15864      composeReference(t, "MedicationAdministration", "device", element.getDevice().get(i), i);
15865    }
15866    for (int i = 0; i < element.getNote().size(); i++) {
15867      composeAnnotation(t, "MedicationAdministration", "note", element.getNote().get(i), i);
15868    }
15869    if (element.hasDosage()) {
15870      composeMedicationAdministrationDosageComponent(t, "MedicationAdministration", "dosage", element.getDosage(), -1);
15871    }
15872    for (int i = 0; i < element.getEventHistory().size(); i++) {
15873      composeReference(t, "MedicationAdministration", "eventHistory", element.getEventHistory().get(i), i);
15874    }
15875  }
15876
15877  protected void composeMedicationAdministrationPerformerComponent(Complex parent, String parentType, String name, MedicationAdministration.MedicationAdministrationPerformerComponent element, int index) {
15878    if (element == null) 
15879      return;
15880    Complex t;
15881    if (Utilities.noString(parentType))
15882      t = parent;
15883    else {
15884      t = parent.predicate("fhir:"+parentType+'.'+name);
15885    }
15886    composeBackboneElement(t, "performer", name, element, index);
15887    if (element.hasFunction()) {
15888      composeCodeableConcept(t, "MedicationAdministrationPerformerComponent", "function", element.getFunction(), -1);
15889    }
15890    if (element.hasActor()) {
15891      composeReference(t, "MedicationAdministrationPerformerComponent", "actor", element.getActor(), -1);
15892    }
15893  }
15894
15895  protected void composeMedicationAdministrationDosageComponent(Complex parent, String parentType, String name, MedicationAdministration.MedicationAdministrationDosageComponent element, int index) {
15896    if (element == null) 
15897      return;
15898    Complex t;
15899    if (Utilities.noString(parentType))
15900      t = parent;
15901    else {
15902      t = parent.predicate("fhir:"+parentType+'.'+name);
15903    }
15904    composeBackboneElement(t, "dosage", name, element, index);
15905    if (element.hasTextElement()) {
15906      composeString(t, "MedicationAdministrationDosageComponent", "text", element.getTextElement(), -1);
15907    }
15908    if (element.hasSite()) {
15909      composeCodeableConcept(t, "MedicationAdministrationDosageComponent", "site", element.getSite(), -1);
15910    }
15911    if (element.hasRoute()) {
15912      composeCodeableConcept(t, "MedicationAdministrationDosageComponent", "route", element.getRoute(), -1);
15913    }
15914    if (element.hasMethod()) {
15915      composeCodeableConcept(t, "MedicationAdministrationDosageComponent", "method", element.getMethod(), -1);
15916    }
15917    if (element.hasDose()) {
15918      composeQuantity(t, "MedicationAdministrationDosageComponent", "dose", element.getDose(), -1);
15919    }
15920    if (element.hasRate()) {
15921      composeType(t, "MedicationAdministrationDosageComponent", "rate", element.getRate(), -1);
15922    }
15923  }
15924
15925  protected void composeMedicationDispense(Complex parent, String parentType, String name, MedicationDispense element, int index) {
15926    if (element == null) 
15927      return;
15928    Complex t;
15929    if (Utilities.noString(parentType))
15930      t = parent;
15931    else {
15932      t = parent.predicate("fhir:"+parentType+'.'+name);
15933    }
15934    composeDomainResource(t, "MedicationDispense", name, element, index);
15935    for (int i = 0; i < element.getIdentifier().size(); i++) {
15936      composeIdentifier(t, "MedicationDispense", "identifier", element.getIdentifier().get(i), i);
15937    }
15938    for (int i = 0; i < element.getBasedOn().size(); i++) {
15939      composeReference(t, "MedicationDispense", "basedOn", element.getBasedOn().get(i), i);
15940    }
15941    for (int i = 0; i < element.getPartOf().size(); i++) {
15942      composeReference(t, "MedicationDispense", "partOf", element.getPartOf().get(i), i);
15943    }
15944    if (element.hasStatusElement()) {
15945      composeEnum(t, "MedicationDispense", "status", element.getStatusElement(), -1);
15946    }
15947    if (element.hasStatusReason()) {
15948      composeCodeableReference(t, "MedicationDispense", "statusReason", element.getStatusReason(), -1);
15949    }
15950    if (element.hasStatusChangedElement()) {
15951      composeDateTime(t, "MedicationDispense", "statusChanged", element.getStatusChangedElement(), -1);
15952    }
15953    for (int i = 0; i < element.getCategory().size(); i++) {
15954      composeCodeableConcept(t, "MedicationDispense", "category", element.getCategory().get(i), i);
15955    }
15956    if (element.hasMedication()) {
15957      composeCodeableReference(t, "MedicationDispense", "medication", element.getMedication(), -1);
15958    }
15959    if (element.hasSubject()) {
15960      composeReference(t, "MedicationDispense", "subject", element.getSubject(), -1);
15961    }
15962    if (element.hasEncounter()) {
15963      composeReference(t, "MedicationDispense", "encounter", element.getEncounter(), -1);
15964    }
15965    for (int i = 0; i < element.getSupportingInformation().size(); i++) {
15966      composeReference(t, "MedicationDispense", "supportingInformation", element.getSupportingInformation().get(i), i);
15967    }
15968    for (int i = 0; i < element.getPerformer().size(); i++) {
15969      composeMedicationDispensePerformerComponent(t, "MedicationDispense", "performer", element.getPerformer().get(i), i);
15970    }
15971    if (element.hasLocation()) {
15972      composeReference(t, "MedicationDispense", "location", element.getLocation(), -1);
15973    }
15974    for (int i = 0; i < element.getAuthorizingPrescription().size(); i++) {
15975      composeReference(t, "MedicationDispense", "authorizingPrescription", element.getAuthorizingPrescription().get(i), i);
15976    }
15977    if (element.hasType()) {
15978      composeCodeableConcept(t, "MedicationDispense", "type", element.getType(), -1);
15979    }
15980    if (element.hasQuantity()) {
15981      composeQuantity(t, "MedicationDispense", "quantity", element.getQuantity(), -1);
15982    }
15983    if (element.hasDaysSupply()) {
15984      composeQuantity(t, "MedicationDispense", "daysSupply", element.getDaysSupply(), -1);
15985    }
15986    if (element.hasRecordedElement()) {
15987      composeDateTime(t, "MedicationDispense", "recorded", element.getRecordedElement(), -1);
15988    }
15989    if (element.hasWhenPreparedElement()) {
15990      composeDateTime(t, "MedicationDispense", "whenPrepared", element.getWhenPreparedElement(), -1);
15991    }
15992    if (element.hasWhenHandedOverElement()) {
15993      composeDateTime(t, "MedicationDispense", "whenHandedOver", element.getWhenHandedOverElement(), -1);
15994    }
15995    if (element.hasDestination()) {
15996      composeReference(t, "MedicationDispense", "destination", element.getDestination(), -1);
15997    }
15998    for (int i = 0; i < element.getReceiver().size(); i++) {
15999      composeReference(t, "MedicationDispense", "receiver", element.getReceiver().get(i), i);
16000    }
16001    for (int i = 0; i < element.getNote().size(); i++) {
16002      composeAnnotation(t, "MedicationDispense", "note", element.getNote().get(i), i);
16003    }
16004    if (element.hasRenderedDosageInstructionElement()) {
16005      composeString(t, "MedicationDispense", "renderedDosageInstruction", element.getRenderedDosageInstructionElement(), -1);
16006    }
16007    for (int i = 0; i < element.getDosageInstruction().size(); i++) {
16008      composeDosage(t, "MedicationDispense", "dosageInstruction", element.getDosageInstruction().get(i), i);
16009    }
16010    if (element.hasSubstitution()) {
16011      composeMedicationDispenseSubstitutionComponent(t, "MedicationDispense", "substitution", element.getSubstitution(), -1);
16012    }
16013    for (int i = 0; i < element.getDetectedIssue().size(); i++) {
16014      composeReference(t, "MedicationDispense", "detectedIssue", element.getDetectedIssue().get(i), i);
16015    }
16016    for (int i = 0; i < element.getEventHistory().size(); i++) {
16017      composeReference(t, "MedicationDispense", "eventHistory", element.getEventHistory().get(i), i);
16018    }
16019  }
16020
16021  protected void composeMedicationDispensePerformerComponent(Complex parent, String parentType, String name, MedicationDispense.MedicationDispensePerformerComponent element, int index) {
16022    if (element == null) 
16023      return;
16024    Complex t;
16025    if (Utilities.noString(parentType))
16026      t = parent;
16027    else {
16028      t = parent.predicate("fhir:"+parentType+'.'+name);
16029    }
16030    composeBackboneElement(t, "performer", name, element, index);
16031    if (element.hasFunction()) {
16032      composeCodeableConcept(t, "MedicationDispensePerformerComponent", "function", element.getFunction(), -1);
16033    }
16034    if (element.hasActor()) {
16035      composeReference(t, "MedicationDispensePerformerComponent", "actor", element.getActor(), -1);
16036    }
16037  }
16038
16039  protected void composeMedicationDispenseSubstitutionComponent(Complex parent, String parentType, String name, MedicationDispense.MedicationDispenseSubstitutionComponent element, int index) {
16040    if (element == null) 
16041      return;
16042    Complex t;
16043    if (Utilities.noString(parentType))
16044      t = parent;
16045    else {
16046      t = parent.predicate("fhir:"+parentType+'.'+name);
16047    }
16048    composeBackboneElement(t, "substitution", name, element, index);
16049    if (element.hasWasSubstitutedElement()) {
16050      composeBoolean(t, "MedicationDispenseSubstitutionComponent", "wasSubstituted", element.getWasSubstitutedElement(), -1);
16051    }
16052    if (element.hasType()) {
16053      composeCodeableConcept(t, "MedicationDispenseSubstitutionComponent", "type", element.getType(), -1);
16054    }
16055    for (int i = 0; i < element.getReason().size(); i++) {
16056      composeCodeableConcept(t, "MedicationDispenseSubstitutionComponent", "reason", element.getReason().get(i), i);
16057    }
16058    if (element.hasResponsibleParty()) {
16059      composeReference(t, "MedicationDispenseSubstitutionComponent", "responsibleParty", element.getResponsibleParty(), -1);
16060    }
16061  }
16062
16063  protected void composeMedicationKnowledge(Complex parent, String parentType, String name, MedicationKnowledge element, int index) {
16064    if (element == null) 
16065      return;
16066    Complex t;
16067    if (Utilities.noString(parentType))
16068      t = parent;
16069    else {
16070      t = parent.predicate("fhir:"+parentType+'.'+name);
16071    }
16072    composeDomainResource(t, "MedicationKnowledge", name, element, index);
16073    for (int i = 0; i < element.getIdentifier().size(); i++) {
16074      composeIdentifier(t, "MedicationKnowledge", "identifier", element.getIdentifier().get(i), i);
16075    }
16076    if (element.hasCode()) {
16077      composeCodeableConcept(t, "MedicationKnowledge", "code", element.getCode(), -1);
16078    }
16079    if (element.hasStatusElement()) {
16080      composeEnum(t, "MedicationKnowledge", "status", element.getStatusElement(), -1);
16081    }
16082    if (element.hasAuthor()) {
16083      composeReference(t, "MedicationKnowledge", "author", element.getAuthor(), -1);
16084    }
16085    for (int i = 0; i < element.getIntendedJurisdiction().size(); i++) {
16086      composeCodeableConcept(t, "MedicationKnowledge", "intendedJurisdiction", element.getIntendedJurisdiction().get(i), i);
16087    }
16088    for (int i = 0; i < element.getName().size(); i++) {
16089      composeString(t, "MedicationKnowledge", "name", element.getName().get(i), i);
16090    }
16091    for (int i = 0; i < element.getRelatedMedicationKnowledge().size(); i++) {
16092      composeMedicationKnowledgeRelatedMedicationKnowledgeComponent(t, "MedicationKnowledge", "relatedMedicationKnowledge", element.getRelatedMedicationKnowledge().get(i), i);
16093    }
16094    for (int i = 0; i < element.getAssociatedMedication().size(); i++) {
16095      composeReference(t, "MedicationKnowledge", "associatedMedication", element.getAssociatedMedication().get(i), i);
16096    }
16097    for (int i = 0; i < element.getProductType().size(); i++) {
16098      composeCodeableConcept(t, "MedicationKnowledge", "productType", element.getProductType().get(i), i);
16099    }
16100    for (int i = 0; i < element.getMonograph().size(); i++) {
16101      composeMedicationKnowledgeMonographComponent(t, "MedicationKnowledge", "monograph", element.getMonograph().get(i), i);
16102    }
16103    if (element.hasPreparationInstructionElement()) {
16104      composeMarkdown(t, "MedicationKnowledge", "preparationInstruction", element.getPreparationInstructionElement(), -1);
16105    }
16106    for (int i = 0; i < element.getCost().size(); i++) {
16107      composeMedicationKnowledgeCostComponent(t, "MedicationKnowledge", "cost", element.getCost().get(i), i);
16108    }
16109    for (int i = 0; i < element.getMonitoringProgram().size(); i++) {
16110      composeMedicationKnowledgeMonitoringProgramComponent(t, "MedicationKnowledge", "monitoringProgram", element.getMonitoringProgram().get(i), i);
16111    }
16112    for (int i = 0; i < element.getIndicationGuideline().size(); i++) {
16113      composeMedicationKnowledgeIndicationGuidelineComponent(t, "MedicationKnowledge", "indicationGuideline", element.getIndicationGuideline().get(i), i);
16114    }
16115    for (int i = 0; i < element.getMedicineClassification().size(); i++) {
16116      composeMedicationKnowledgeMedicineClassificationComponent(t, "MedicationKnowledge", "medicineClassification", element.getMedicineClassification().get(i), i);
16117    }
16118    for (int i = 0; i < element.getPackaging().size(); i++) {
16119      composeMedicationKnowledgePackagingComponent(t, "MedicationKnowledge", "packaging", element.getPackaging().get(i), i);
16120    }
16121    for (int i = 0; i < element.getClinicalUseIssue().size(); i++) {
16122      composeReference(t, "MedicationKnowledge", "clinicalUseIssue", element.getClinicalUseIssue().get(i), i);
16123    }
16124    for (int i = 0; i < element.getRegulatory().size(); i++) {
16125      composeMedicationKnowledgeRegulatoryComponent(t, "MedicationKnowledge", "regulatory", element.getRegulatory().get(i), i);
16126    }
16127    if (element.hasDefinitional()) {
16128      composeMedicationKnowledgeDefinitionalComponent(t, "MedicationKnowledge", "definitional", element.getDefinitional(), -1);
16129    }
16130  }
16131
16132  protected void composeMedicationKnowledgeRelatedMedicationKnowledgeComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeRelatedMedicationKnowledgeComponent element, int index) {
16133    if (element == null) 
16134      return;
16135    Complex t;
16136    if (Utilities.noString(parentType))
16137      t = parent;
16138    else {
16139      t = parent.predicate("fhir:"+parentType+'.'+name);
16140    }
16141    composeBackboneElement(t, "relatedMedicationKnowledge", name, element, index);
16142    if (element.hasType()) {
16143      composeCodeableConcept(t, "MedicationKnowledgeRelatedMedicationKnowledgeComponent", "type", element.getType(), -1);
16144    }
16145    for (int i = 0; i < element.getReference().size(); i++) {
16146      composeReference(t, "MedicationKnowledgeRelatedMedicationKnowledgeComponent", "reference", element.getReference().get(i), i);
16147    }
16148  }
16149
16150  protected void composeMedicationKnowledgeMonographComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeMonographComponent element, int index) {
16151    if (element == null) 
16152      return;
16153    Complex t;
16154    if (Utilities.noString(parentType))
16155      t = parent;
16156    else {
16157      t = parent.predicate("fhir:"+parentType+'.'+name);
16158    }
16159    composeBackboneElement(t, "monograph", name, element, index);
16160    if (element.hasType()) {
16161      composeCodeableConcept(t, "MedicationKnowledgeMonographComponent", "type", element.getType(), -1);
16162    }
16163    if (element.hasSource()) {
16164      composeReference(t, "MedicationKnowledgeMonographComponent", "source", element.getSource(), -1);
16165    }
16166  }
16167
16168  protected void composeMedicationKnowledgeCostComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeCostComponent element, int index) {
16169    if (element == null) 
16170      return;
16171    Complex t;
16172    if (Utilities.noString(parentType))
16173      t = parent;
16174    else {
16175      t = parent.predicate("fhir:"+parentType+'.'+name);
16176    }
16177    composeBackboneElement(t, "cost", name, element, index);
16178    for (int i = 0; i < element.getEffectiveDate().size(); i++) {
16179      composePeriod(t, "MedicationKnowledgeCostComponent", "effectiveDate", element.getEffectiveDate().get(i), i);
16180    }
16181    if (element.hasType()) {
16182      composeCodeableConcept(t, "MedicationKnowledgeCostComponent", "type", element.getType(), -1);
16183    }
16184    if (element.hasSourceElement()) {
16185      composeString(t, "MedicationKnowledgeCostComponent", "source", element.getSourceElement(), -1);
16186    }
16187    if (element.hasCost()) {
16188      composeType(t, "MedicationKnowledgeCostComponent", "cost", element.getCost(), -1);
16189    }
16190  }
16191
16192  protected void composeMedicationKnowledgeMonitoringProgramComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeMonitoringProgramComponent element, int index) {
16193    if (element == null) 
16194      return;
16195    Complex t;
16196    if (Utilities.noString(parentType))
16197      t = parent;
16198    else {
16199      t = parent.predicate("fhir:"+parentType+'.'+name);
16200    }
16201    composeBackboneElement(t, "monitoringProgram", name, element, index);
16202    if (element.hasType()) {
16203      composeCodeableConcept(t, "MedicationKnowledgeMonitoringProgramComponent", "type", element.getType(), -1);
16204    }
16205    if (element.hasNameElement()) {
16206      composeString(t, "MedicationKnowledgeMonitoringProgramComponent", "name", element.getNameElement(), -1);
16207    }
16208  }
16209
16210  protected void composeMedicationKnowledgeIndicationGuidelineComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeIndicationGuidelineComponent element, int index) {
16211    if (element == null) 
16212      return;
16213    Complex t;
16214    if (Utilities.noString(parentType))
16215      t = parent;
16216    else {
16217      t = parent.predicate("fhir:"+parentType+'.'+name);
16218    }
16219    composeBackboneElement(t, "indicationGuideline", name, element, index);
16220    for (int i = 0; i < element.getIndication().size(); i++) {
16221      composeCodeableReference(t, "MedicationKnowledgeIndicationGuidelineComponent", "indication", element.getIndication().get(i), i);
16222    }
16223    for (int i = 0; i < element.getDosingGuideline().size(); i++) {
16224      composeMedicationKnowledgeIndicationGuidelineDosingGuidelineComponent(t, "MedicationKnowledgeIndicationGuidelineComponent", "dosingGuideline", element.getDosingGuideline().get(i), i);
16225    }
16226  }
16227
16228  protected void composeMedicationKnowledgeIndicationGuidelineDosingGuidelineComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeIndicationGuidelineDosingGuidelineComponent element, int index) {
16229    if (element == null) 
16230      return;
16231    Complex t;
16232    if (Utilities.noString(parentType))
16233      t = parent;
16234    else {
16235      t = parent.predicate("fhir:"+parentType+'.'+name);
16236    }
16237    composeBackboneElement(t, "dosingGuideline", name, element, index);
16238    if (element.hasTreatmentIntent()) {
16239      composeCodeableConcept(t, "MedicationKnowledgeIndicationGuidelineDosingGuidelineComponent", "treatmentIntent", element.getTreatmentIntent(), -1);
16240    }
16241    for (int i = 0; i < element.getDosage().size(); i++) {
16242      composeMedicationKnowledgeIndicationGuidelineDosingGuidelineDosageComponent(t, "MedicationKnowledgeIndicationGuidelineDosingGuidelineComponent", "dosage", element.getDosage().get(i), i);
16243    }
16244    if (element.hasAdministrationTreatment()) {
16245      composeCodeableConcept(t, "MedicationKnowledgeIndicationGuidelineDosingGuidelineComponent", "administrationTreatment", element.getAdministrationTreatment(), -1);
16246    }
16247    for (int i = 0; i < element.getPatientCharacteristic().size(); i++) {
16248      composeMedicationKnowledgeIndicationGuidelineDosingGuidelinePatientCharacteristicComponent(t, "MedicationKnowledgeIndicationGuidelineDosingGuidelineComponent", "patientCharacteristic", element.getPatientCharacteristic().get(i), i);
16249    }
16250  }
16251
16252  protected void composeMedicationKnowledgeIndicationGuidelineDosingGuidelineDosageComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeIndicationGuidelineDosingGuidelineDosageComponent element, int index) {
16253    if (element == null) 
16254      return;
16255    Complex t;
16256    if (Utilities.noString(parentType))
16257      t = parent;
16258    else {
16259      t = parent.predicate("fhir:"+parentType+'.'+name);
16260    }
16261    composeBackboneElement(t, "dosage", name, element, index);
16262    if (element.hasType()) {
16263      composeCodeableConcept(t, "MedicationKnowledgeIndicationGuidelineDosingGuidelineDosageComponent", "type", element.getType(), -1);
16264    }
16265    for (int i = 0; i < element.getDosage().size(); i++) {
16266      composeDosage(t, "MedicationKnowledgeIndicationGuidelineDosingGuidelineDosageComponent", "dosage", element.getDosage().get(i), i);
16267    }
16268  }
16269
16270  protected void composeMedicationKnowledgeIndicationGuidelineDosingGuidelinePatientCharacteristicComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeIndicationGuidelineDosingGuidelinePatientCharacteristicComponent 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:"+parentType+'.'+name);
16278    }
16279    composeBackboneElement(t, "patientCharacteristic", name, element, index);
16280    if (element.hasType()) {
16281      composeCodeableConcept(t, "MedicationKnowledgeIndicationGuidelineDosingGuidelinePatientCharacteristicComponent", "type", element.getType(), -1);
16282    }
16283    if (element.hasValue()) {
16284      composeType(t, "MedicationKnowledgeIndicationGuidelineDosingGuidelinePatientCharacteristicComponent", "value", element.getValue(), -1);
16285    }
16286  }
16287
16288  protected void composeMedicationKnowledgeMedicineClassificationComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeMedicineClassificationComponent element, int index) {
16289    if (element == null) 
16290      return;
16291    Complex t;
16292    if (Utilities.noString(parentType))
16293      t = parent;
16294    else {
16295      t = parent.predicate("fhir:"+parentType+'.'+name);
16296    }
16297    composeBackboneElement(t, "medicineClassification", name, element, index);
16298    if (element.hasType()) {
16299      composeCodeableConcept(t, "MedicationKnowledgeMedicineClassificationComponent", "type", element.getType(), -1);
16300    }
16301    if (element.hasSource()) {
16302      composeType(t, "MedicationKnowledgeMedicineClassificationComponent", "source", element.getSource(), -1);
16303    }
16304    for (int i = 0; i < element.getClassification().size(); i++) {
16305      composeCodeableConcept(t, "MedicationKnowledgeMedicineClassificationComponent", "classification", element.getClassification().get(i), i);
16306    }
16307  }
16308
16309  protected void composeMedicationKnowledgePackagingComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgePackagingComponent element, int index) {
16310    if (element == null) 
16311      return;
16312    Complex t;
16313    if (Utilities.noString(parentType))
16314      t = parent;
16315    else {
16316      t = parent.predicate("fhir:"+parentType+'.'+name);
16317    }
16318    composeBackboneElement(t, "packaging", name, element, index);
16319    for (int i = 0; i < element.getCost().size(); i++) {
16320      composeMedicationKnowledgeCostComponent(t, "MedicationKnowledgePackagingComponent", "cost", element.getCost().get(i), i);
16321    }
16322    if (element.hasPackagedProduct()) {
16323      composeReference(t, "MedicationKnowledgePackagingComponent", "packagedProduct", element.getPackagedProduct(), -1);
16324    }
16325  }
16326
16327  protected void composeMedicationKnowledgeRegulatoryComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeRegulatoryComponent element, int index) {
16328    if (element == null) 
16329      return;
16330    Complex t;
16331    if (Utilities.noString(parentType))
16332      t = parent;
16333    else {
16334      t = parent.predicate("fhir:"+parentType+'.'+name);
16335    }
16336    composeBackboneElement(t, "regulatory", name, element, index);
16337    if (element.hasRegulatoryAuthority()) {
16338      composeReference(t, "MedicationKnowledgeRegulatoryComponent", "regulatoryAuthority", element.getRegulatoryAuthority(), -1);
16339    }
16340    for (int i = 0; i < element.getSubstitution().size(); i++) {
16341      composeMedicationKnowledgeRegulatorySubstitutionComponent(t, "MedicationKnowledgeRegulatoryComponent", "substitution", element.getSubstitution().get(i), i);
16342    }
16343    for (int i = 0; i < element.getSchedule().size(); i++) {
16344      composeCodeableConcept(t, "MedicationKnowledgeRegulatoryComponent", "schedule", element.getSchedule().get(i), i);
16345    }
16346    if (element.hasMaxDispense()) {
16347      composeMedicationKnowledgeRegulatoryMaxDispenseComponent(t, "MedicationKnowledgeRegulatoryComponent", "maxDispense", element.getMaxDispense(), -1);
16348    }
16349  }
16350
16351  protected void composeMedicationKnowledgeRegulatorySubstitutionComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeRegulatorySubstitutionComponent element, int index) {
16352    if (element == null) 
16353      return;
16354    Complex t;
16355    if (Utilities.noString(parentType))
16356      t = parent;
16357    else {
16358      t = parent.predicate("fhir:"+parentType+'.'+name);
16359    }
16360    composeBackboneElement(t, "substitution", name, element, index);
16361    if (element.hasType()) {
16362      composeCodeableConcept(t, "MedicationKnowledgeRegulatorySubstitutionComponent", "type", element.getType(), -1);
16363    }
16364    if (element.hasAllowedElement()) {
16365      composeBoolean(t, "MedicationKnowledgeRegulatorySubstitutionComponent", "allowed", element.getAllowedElement(), -1);
16366    }
16367  }
16368
16369  protected void composeMedicationKnowledgeRegulatoryMaxDispenseComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeRegulatoryMaxDispenseComponent element, int index) {
16370    if (element == null) 
16371      return;
16372    Complex t;
16373    if (Utilities.noString(parentType))
16374      t = parent;
16375    else {
16376      t = parent.predicate("fhir:"+parentType+'.'+name);
16377    }
16378    composeBackboneElement(t, "maxDispense", name, element, index);
16379    if (element.hasQuantity()) {
16380      composeQuantity(t, "MedicationKnowledgeRegulatoryMaxDispenseComponent", "quantity", element.getQuantity(), -1);
16381    }
16382    if (element.hasPeriod()) {
16383      composeDuration(t, "MedicationKnowledgeRegulatoryMaxDispenseComponent", "period", element.getPeriod(), -1);
16384    }
16385  }
16386
16387  protected void composeMedicationKnowledgeDefinitionalComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeDefinitionalComponent element, int index) {
16388    if (element == null) 
16389      return;
16390    Complex t;
16391    if (Utilities.noString(parentType))
16392      t = parent;
16393    else {
16394      t = parent.predicate("fhir:"+parentType+'.'+name);
16395    }
16396    composeBackboneElement(t, "definitional", name, element, index);
16397    for (int i = 0; i < element.getDefinition().size(); i++) {
16398      composeReference(t, "MedicationKnowledgeDefinitionalComponent", "definition", element.getDefinition().get(i), i);
16399    }
16400    if (element.hasDoseForm()) {
16401      composeCodeableConcept(t, "MedicationKnowledgeDefinitionalComponent", "doseForm", element.getDoseForm(), -1);
16402    }
16403    for (int i = 0; i < element.getIntendedRoute().size(); i++) {
16404      composeCodeableConcept(t, "MedicationKnowledgeDefinitionalComponent", "intendedRoute", element.getIntendedRoute().get(i), i);
16405    }
16406    for (int i = 0; i < element.getIngredient().size(); i++) {
16407      composeMedicationKnowledgeDefinitionalIngredientComponent(t, "MedicationKnowledgeDefinitionalComponent", "ingredient", element.getIngredient().get(i), i);
16408    }
16409    for (int i = 0; i < element.getDrugCharacteristic().size(); i++) {
16410      composeMedicationKnowledgeDefinitionalDrugCharacteristicComponent(t, "MedicationKnowledgeDefinitionalComponent", "drugCharacteristic", element.getDrugCharacteristic().get(i), i);
16411    }
16412  }
16413
16414  protected void composeMedicationKnowledgeDefinitionalIngredientComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeDefinitionalIngredientComponent element, int index) {
16415    if (element == null) 
16416      return;
16417    Complex t;
16418    if (Utilities.noString(parentType))
16419      t = parent;
16420    else {
16421      t = parent.predicate("fhir:"+parentType+'.'+name);
16422    }
16423    composeBackboneElement(t, "ingredient", name, element, index);
16424    if (element.hasItem()) {
16425      composeCodeableReference(t, "MedicationKnowledgeDefinitionalIngredientComponent", "item", element.getItem(), -1);
16426    }
16427    if (element.hasType()) {
16428      composeCodeableConcept(t, "MedicationKnowledgeDefinitionalIngredientComponent", "type", element.getType(), -1);
16429    }
16430    if (element.hasStrength()) {
16431      composeType(t, "MedicationKnowledgeDefinitionalIngredientComponent", "strength", element.getStrength(), -1);
16432    }
16433  }
16434
16435  protected void composeMedicationKnowledgeDefinitionalDrugCharacteristicComponent(Complex parent, String parentType, String name, MedicationKnowledge.MedicationKnowledgeDefinitionalDrugCharacteristicComponent element, int index) {
16436    if (element == null) 
16437      return;
16438    Complex t;
16439    if (Utilities.noString(parentType))
16440      t = parent;
16441    else {
16442      t = parent.predicate("fhir:"+parentType+'.'+name);
16443    }
16444    composeBackboneElement(t, "drugCharacteristic", name, element, index);
16445    if (element.hasType()) {
16446      composeCodeableConcept(t, "MedicationKnowledgeDefinitionalDrugCharacteristicComponent", "type", element.getType(), -1);
16447    }
16448    if (element.hasValue()) {
16449      composeType(t, "MedicationKnowledgeDefinitionalDrugCharacteristicComponent", "value", element.getValue(), -1);
16450    }
16451  }
16452
16453  protected void composeMedicationRequest(Complex parent, String parentType, String name, MedicationRequest element, int index) {
16454    if (element == null) 
16455      return;
16456    Complex t;
16457    if (Utilities.noString(parentType))
16458      t = parent;
16459    else {
16460      t = parent.predicate("fhir:"+parentType+'.'+name);
16461    }
16462    composeDomainResource(t, "MedicationRequest", name, element, index);
16463    for (int i = 0; i < element.getIdentifier().size(); i++) {
16464      composeIdentifier(t, "MedicationRequest", "identifier", element.getIdentifier().get(i), i);
16465    }
16466    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
16467      composeCanonical(t, "MedicationRequest", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
16468    }
16469    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
16470      composeUri(t, "MedicationRequest", "instantiatesUri", element.getInstantiatesUri().get(i), i);
16471    }
16472    for (int i = 0; i < element.getBasedOn().size(); i++) {
16473      composeReference(t, "MedicationRequest", "basedOn", element.getBasedOn().get(i), i);
16474    }
16475    if (element.hasPriorPrescription()) {
16476      composeReference(t, "MedicationRequest", "priorPrescription", element.getPriorPrescription(), -1);
16477    }
16478    if (element.hasGroupIdentifier()) {
16479      composeIdentifier(t, "MedicationRequest", "groupIdentifier", element.getGroupIdentifier(), -1);
16480    }
16481    if (element.hasStatusElement()) {
16482      composeEnum(t, "MedicationRequest", "status", element.getStatusElement(), -1);
16483    }
16484    if (element.hasStatusReason()) {
16485      composeCodeableConcept(t, "MedicationRequest", "statusReason", element.getStatusReason(), -1);
16486    }
16487    if (element.hasStatusChangedElement()) {
16488      composeDateTime(t, "MedicationRequest", "statusChanged", element.getStatusChangedElement(), -1);
16489    }
16490    if (element.hasIntentElement()) {
16491      composeEnum(t, "MedicationRequest", "intent", element.getIntentElement(), -1);
16492    }
16493    for (int i = 0; i < element.getCategory().size(); i++) {
16494      composeCodeableConcept(t, "MedicationRequest", "category", element.getCategory().get(i), i);
16495    }
16496    if (element.hasPriorityElement()) {
16497      composeEnum(t, "MedicationRequest", "priority", element.getPriorityElement(), -1);
16498    }
16499    if (element.hasDoNotPerformElement()) {
16500      composeBoolean(t, "MedicationRequest", "doNotPerform", element.getDoNotPerformElement(), -1);
16501    }
16502    if (element.hasMedication()) {
16503      composeCodeableReference(t, "MedicationRequest", "medication", element.getMedication(), -1);
16504    }
16505    if (element.hasSubject()) {
16506      composeReference(t, "MedicationRequest", "subject", element.getSubject(), -1);
16507    }
16508    if (element.hasInformationSource()) {
16509      composeReference(t, "MedicationRequest", "informationSource", element.getInformationSource(), -1);
16510    }
16511    if (element.hasEncounter()) {
16512      composeReference(t, "MedicationRequest", "encounter", element.getEncounter(), -1);
16513    }
16514    for (int i = 0; i < element.getSupportingInformation().size(); i++) {
16515      composeReference(t, "MedicationRequest", "supportingInformation", element.getSupportingInformation().get(i), i);
16516    }
16517    if (element.hasAuthoredOnElement()) {
16518      composeDateTime(t, "MedicationRequest", "authoredOn", element.getAuthoredOnElement(), -1);
16519    }
16520    if (element.hasRequester()) {
16521      composeReference(t, "MedicationRequest", "requester", element.getRequester(), -1);
16522    }
16523    if (element.hasReportedElement()) {
16524      composeBoolean(t, "MedicationRequest", "reported", element.getReportedElement(), -1);
16525    }
16526    if (element.hasPerformerType()) {
16527      composeCodeableConcept(t, "MedicationRequest", "performerType", element.getPerformerType(), -1);
16528    }
16529    if (element.hasPerformer()) {
16530      composeReference(t, "MedicationRequest", "performer", element.getPerformer(), -1);
16531    }
16532    if (element.hasRecorder()) {
16533      composeReference(t, "MedicationRequest", "recorder", element.getRecorder(), -1);
16534    }
16535    for (int i = 0; i < element.getReason().size(); i++) {
16536      composeCodeableReference(t, "MedicationRequest", "reason", element.getReason().get(i), i);
16537    }
16538    if (element.hasCourseOfTherapyType()) {
16539      composeCodeableConcept(t, "MedicationRequest", "courseOfTherapyType", element.getCourseOfTherapyType(), -1);
16540    }
16541    for (int i = 0; i < element.getInsurance().size(); i++) {
16542      composeReference(t, "MedicationRequest", "insurance", element.getInsurance().get(i), i);
16543    }
16544    for (int i = 0; i < element.getNote().size(); i++) {
16545      composeAnnotation(t, "MedicationRequest", "note", element.getNote().get(i), i);
16546    }
16547    if (element.hasDose()) {
16548      composeMedicationRequestDoseComponent(t, "MedicationRequest", "dose", element.getDose(), -1);
16549    }
16550    if (element.hasDispenseRequest()) {
16551      composeMedicationRequestDispenseRequestComponent(t, "MedicationRequest", "dispenseRequest", element.getDispenseRequest(), -1);
16552    }
16553    if (element.hasSubstitution()) {
16554      composeMedicationRequestSubstitutionComponent(t, "MedicationRequest", "substitution", element.getSubstitution(), -1);
16555    }
16556    for (int i = 0; i < element.getDetectedIssue().size(); i++) {
16557      composeReference(t, "MedicationRequest", "detectedIssue", element.getDetectedIssue().get(i), i);
16558    }
16559    for (int i = 0; i < element.getEventHistory().size(); i++) {
16560      composeReference(t, "MedicationRequest", "eventHistory", element.getEventHistory().get(i), i);
16561    }
16562  }
16563
16564  protected void composeMedicationRequestDoseComponent(Complex parent, String parentType, String name, MedicationRequest.MedicationRequestDoseComponent element, int index) {
16565    if (element == null) 
16566      return;
16567    Complex t;
16568    if (Utilities.noString(parentType))
16569      t = parent;
16570    else {
16571      t = parent.predicate("fhir:"+parentType+'.'+name);
16572    }
16573    composeBackboneElement(t, "dose", name, element, index);
16574    if (element.hasRenderedDosageInstructionElement()) {
16575      composeString(t, "MedicationRequestDoseComponent", "renderedDosageInstruction", element.getRenderedDosageInstructionElement(), -1);
16576    }
16577    if (element.hasEffectiveDosePeriodElement()) {
16578      composeDateTime(t, "MedicationRequestDoseComponent", "effectiveDosePeriod", element.getEffectiveDosePeriodElement(), -1);
16579    }
16580    for (int i = 0; i < element.getDosageInstruction().size(); i++) {
16581      composeDosage(t, "MedicationRequestDoseComponent", "dosageInstruction", element.getDosageInstruction().get(i), i);
16582    }
16583  }
16584
16585  protected void composeMedicationRequestDispenseRequestComponent(Complex parent, String parentType, String name, MedicationRequest.MedicationRequestDispenseRequestComponent element, int index) {
16586    if (element == null) 
16587      return;
16588    Complex t;
16589    if (Utilities.noString(parentType))
16590      t = parent;
16591    else {
16592      t = parent.predicate("fhir:"+parentType+'.'+name);
16593    }
16594    composeBackboneElement(t, "dispenseRequest", name, element, index);
16595    if (element.hasInitialFill()) {
16596      composeMedicationRequestDispenseRequestInitialFillComponent(t, "MedicationRequestDispenseRequestComponent", "initialFill", element.getInitialFill(), -1);
16597    }
16598    if (element.hasDispenseInterval()) {
16599      composeDuration(t, "MedicationRequestDispenseRequestComponent", "dispenseInterval", element.getDispenseInterval(), -1);
16600    }
16601    if (element.hasValidityPeriod()) {
16602      composePeriod(t, "MedicationRequestDispenseRequestComponent", "validityPeriod", element.getValidityPeriod(), -1);
16603    }
16604    if (element.hasNumberOfRepeatsAllowedElement()) {
16605      composeUnsignedInt(t, "MedicationRequestDispenseRequestComponent", "numberOfRepeatsAllowed", element.getNumberOfRepeatsAllowedElement(), -1);
16606    }
16607    if (element.hasQuantity()) {
16608      composeQuantity(t, "MedicationRequestDispenseRequestComponent", "quantity", element.getQuantity(), -1);
16609    }
16610    if (element.hasExpectedSupplyDuration()) {
16611      composeDuration(t, "MedicationRequestDispenseRequestComponent", "expectedSupplyDuration", element.getExpectedSupplyDuration(), -1);
16612    }
16613    if (element.hasDispenser()) {
16614      composeReference(t, "MedicationRequestDispenseRequestComponent", "dispenser", element.getDispenser(), -1);
16615    }
16616    for (int i = 0; i < element.getDispenserInstruction().size(); i++) {
16617      composeAnnotation(t, "MedicationRequestDispenseRequestComponent", "dispenserInstruction", element.getDispenserInstruction().get(i), i);
16618    }
16619    if (element.hasDoseAdministrationAid()) {
16620      composeCodeableConcept(t, "MedicationRequestDispenseRequestComponent", "doseAdministrationAid", element.getDoseAdministrationAid(), -1);
16621    }
16622  }
16623
16624  protected void composeMedicationRequestDispenseRequestInitialFillComponent(Complex parent, String parentType, String name, MedicationRequest.MedicationRequestDispenseRequestInitialFillComponent element, int index) {
16625    if (element == null) 
16626      return;
16627    Complex t;
16628    if (Utilities.noString(parentType))
16629      t = parent;
16630    else {
16631      t = parent.predicate("fhir:"+parentType+'.'+name);
16632    }
16633    composeBackboneElement(t, "initialFill", name, element, index);
16634    if (element.hasQuantity()) {
16635      composeQuantity(t, "MedicationRequestDispenseRequestInitialFillComponent", "quantity", element.getQuantity(), -1);
16636    }
16637    if (element.hasDuration()) {
16638      composeDuration(t, "MedicationRequestDispenseRequestInitialFillComponent", "duration", element.getDuration(), -1);
16639    }
16640  }
16641
16642  protected void composeMedicationRequestSubstitutionComponent(Complex parent, String parentType, String name, MedicationRequest.MedicationRequestSubstitutionComponent 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:"+parentType+'.'+name);
16650    }
16651    composeBackboneElement(t, "substitution", name, element, index);
16652    if (element.hasAllowed()) {
16653      composeType(t, "MedicationRequestSubstitutionComponent", "allowed", element.getAllowed(), -1);
16654    }
16655    if (element.hasReason()) {
16656      composeCodeableConcept(t, "MedicationRequestSubstitutionComponent", "reason", element.getReason(), -1);
16657    }
16658  }
16659
16660  protected void composeMedicationUsage(Complex parent, String parentType, String name, MedicationUsage 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:"+parentType+'.'+name);
16668    }
16669    composeDomainResource(t, "MedicationUsage", name, element, index);
16670    for (int i = 0; i < element.getIdentifier().size(); i++) {
16671      composeIdentifier(t, "MedicationUsage", "identifier", element.getIdentifier().get(i), i);
16672    }
16673    if (element.hasStatusElement()) {
16674      composeEnum(t, "MedicationUsage", "status", element.getStatusElement(), -1);
16675    }
16676    for (int i = 0; i < element.getCategory().size(); i++) {
16677      composeCodeableConcept(t, "MedicationUsage", "category", element.getCategory().get(i), i);
16678    }
16679    if (element.hasMedication()) {
16680      composeCodeableReference(t, "MedicationUsage", "medication", element.getMedication(), -1);
16681    }
16682    if (element.hasSubject()) {
16683      composeReference(t, "MedicationUsage", "subject", element.getSubject(), -1);
16684    }
16685    if (element.hasEncounter()) {
16686      composeReference(t, "MedicationUsage", "encounter", element.getEncounter(), -1);
16687    }
16688    if (element.hasEffective()) {
16689      composeType(t, "MedicationUsage", "effective", element.getEffective(), -1);
16690    }
16691    if (element.hasDateAssertedElement()) {
16692      composeDateTime(t, "MedicationUsage", "dateAsserted", element.getDateAssertedElement(), -1);
16693    }
16694    if (element.hasInformationSource()) {
16695      composeReference(t, "MedicationUsage", "informationSource", element.getInformationSource(), -1);
16696    }
16697    for (int i = 0; i < element.getDerivedFrom().size(); i++) {
16698      composeReference(t, "MedicationUsage", "derivedFrom", element.getDerivedFrom().get(i), i);
16699    }
16700    for (int i = 0; i < element.getReason().size(); i++) {
16701      composeCodeableReference(t, "MedicationUsage", "reason", element.getReason().get(i), i);
16702    }
16703    for (int i = 0; i < element.getNote().size(); i++) {
16704      composeAnnotation(t, "MedicationUsage", "note", element.getNote().get(i), i);
16705    }
16706    if (element.hasRenderedDosageInstructionElement()) {
16707      composeString(t, "MedicationUsage", "renderedDosageInstruction", element.getRenderedDosageInstructionElement(), -1);
16708    }
16709    for (int i = 0; i < element.getDosage().size(); i++) {
16710      composeDosage(t, "MedicationUsage", "dosage", element.getDosage().get(i), i);
16711    }
16712    if (element.hasAdherence()) {
16713      composeMedicationUsageAdherenceComponent(t, "MedicationUsage", "adherence", element.getAdherence(), -1);
16714    }
16715  }
16716
16717  protected void composeMedicationUsageAdherenceComponent(Complex parent, String parentType, String name, MedicationUsage.MedicationUsageAdherenceComponent element, int index) {
16718    if (element == null) 
16719      return;
16720    Complex t;
16721    if (Utilities.noString(parentType))
16722      t = parent;
16723    else {
16724      t = parent.predicate("fhir:"+parentType+'.'+name);
16725    }
16726    composeBackboneElement(t, "adherence", name, element, index);
16727    if (element.hasCode()) {
16728      composeCodeableConcept(t, "MedicationUsageAdherenceComponent", "code", element.getCode(), -1);
16729    }
16730    if (element.hasReason()) {
16731      composeCodeableConcept(t, "MedicationUsageAdherenceComponent", "reason", element.getReason(), -1);
16732    }
16733  }
16734
16735  protected void composeMedicinalProductDefinition(Complex parent, String parentType, String name, MedicinalProductDefinition element, int index) {
16736    if (element == null) 
16737      return;
16738    Complex t;
16739    if (Utilities.noString(parentType))
16740      t = parent;
16741    else {
16742      t = parent.predicate("fhir:"+parentType+'.'+name);
16743    }
16744    composeDomainResource(t, "MedicinalProductDefinition", name, element, index);
16745    for (int i = 0; i < element.getIdentifier().size(); i++) {
16746      composeIdentifier(t, "MedicinalProductDefinition", "identifier", element.getIdentifier().get(i), i);
16747    }
16748    if (element.hasType()) {
16749      composeCodeableConcept(t, "MedicinalProductDefinition", "type", element.getType(), -1);
16750    }
16751    if (element.hasDomain()) {
16752      composeCodeableConcept(t, "MedicinalProductDefinition", "domain", element.getDomain(), -1);
16753    }
16754    if (element.hasVersionElement()) {
16755      composeString(t, "MedicinalProductDefinition", "version", element.getVersionElement(), -1);
16756    }
16757    if (element.hasStatus()) {
16758      composeCodeableConcept(t, "MedicinalProductDefinition", "status", element.getStatus(), -1);
16759    }
16760    if (element.hasStatusDateElement()) {
16761      composeDateTime(t, "MedicinalProductDefinition", "statusDate", element.getStatusDateElement(), -1);
16762    }
16763    if (element.hasDescriptionElement()) {
16764      composeMarkdown(t, "MedicinalProductDefinition", "description", element.getDescriptionElement(), -1);
16765    }
16766    if (element.hasCombinedPharmaceuticalDoseForm()) {
16767      composeCodeableConcept(t, "MedicinalProductDefinition", "combinedPharmaceuticalDoseForm", element.getCombinedPharmaceuticalDoseForm(), -1);
16768    }
16769    for (int i = 0; i < element.getRoute().size(); i++) {
16770      composeCodeableConcept(t, "MedicinalProductDefinition", "route", element.getRoute().get(i), i);
16771    }
16772    if (element.hasIndicationElement()) {
16773      composeMarkdown(t, "MedicinalProductDefinition", "indication", element.getIndicationElement(), -1);
16774    }
16775    if (element.hasLegalStatusOfSupply()) {
16776      composeCodeableConcept(t, "MedicinalProductDefinition", "legalStatusOfSupply", element.getLegalStatusOfSupply(), -1);
16777    }
16778    if (element.hasAdditionalMonitoringIndicator()) {
16779      composeCodeableConcept(t, "MedicinalProductDefinition", "additionalMonitoringIndicator", element.getAdditionalMonitoringIndicator(), -1);
16780    }
16781    for (int i = 0; i < element.getSpecialMeasures().size(); i++) {
16782      composeCodeableConcept(t, "MedicinalProductDefinition", "specialMeasures", element.getSpecialMeasures().get(i), i);
16783    }
16784    if (element.hasPediatricUseIndicator()) {
16785      composeCodeableConcept(t, "MedicinalProductDefinition", "pediatricUseIndicator", element.getPediatricUseIndicator(), -1);
16786    }
16787    for (int i = 0; i < element.getClassification().size(); i++) {
16788      composeCodeableConcept(t, "MedicinalProductDefinition", "classification", element.getClassification().get(i), i);
16789    }
16790    for (int i = 0; i < element.getMarketingStatus().size(); i++) {
16791      composeMarketingStatus(t, "MedicinalProductDefinition", "marketingStatus", element.getMarketingStatus().get(i), i);
16792    }
16793    for (int i = 0; i < element.getPackagedMedicinalProduct().size(); i++) {
16794      composeCodeableConcept(t, "MedicinalProductDefinition", "packagedMedicinalProduct", element.getPackagedMedicinalProduct().get(i), i);
16795    }
16796    for (int i = 0; i < element.getIngredient().size(); i++) {
16797      composeCodeableConcept(t, "MedicinalProductDefinition", "ingredient", element.getIngredient().get(i), i);
16798    }
16799    for (int i = 0; i < element.getImpurity().size(); i++) {
16800      composeCodeableReference(t, "MedicinalProductDefinition", "impurity", element.getImpurity().get(i), i);
16801    }
16802    for (int i = 0; i < element.getAttachedDocument().size(); i++) {
16803      composeReference(t, "MedicinalProductDefinition", "attachedDocument", element.getAttachedDocument().get(i), i);
16804    }
16805    for (int i = 0; i < element.getMasterFile().size(); i++) {
16806      composeReference(t, "MedicinalProductDefinition", "masterFile", element.getMasterFile().get(i), i);
16807    }
16808    for (int i = 0; i < element.getContact().size(); i++) {
16809      composeMedicinalProductDefinitionContactComponent(t, "MedicinalProductDefinition", "contact", element.getContact().get(i), i);
16810    }
16811    for (int i = 0; i < element.getClinicalTrial().size(); i++) {
16812      composeReference(t, "MedicinalProductDefinition", "clinicalTrial", element.getClinicalTrial().get(i), i);
16813    }
16814    for (int i = 0; i < element.getCode().size(); i++) {
16815      composeCoding(t, "MedicinalProductDefinition", "code", element.getCode().get(i), i);
16816    }
16817    for (int i = 0; i < element.getName().size(); i++) {
16818      composeMedicinalProductDefinitionNameComponent(t, "MedicinalProductDefinition", "name", element.getName().get(i), i);
16819    }
16820    for (int i = 0; i < element.getCrossReference().size(); i++) {
16821      composeMedicinalProductDefinitionCrossReferenceComponent(t, "MedicinalProductDefinition", "crossReference", element.getCrossReference().get(i), i);
16822    }
16823    for (int i = 0; i < element.getOperation().size(); i++) {
16824      composeMedicinalProductDefinitionOperationComponent(t, "MedicinalProductDefinition", "operation", element.getOperation().get(i), i);
16825    }
16826    for (int i = 0; i < element.getCharacteristic().size(); i++) {
16827      composeMedicinalProductDefinitionCharacteristicComponent(t, "MedicinalProductDefinition", "characteristic", element.getCharacteristic().get(i), i);
16828    }
16829  }
16830
16831  protected void composeMedicinalProductDefinitionContactComponent(Complex parent, String parentType, String name, MedicinalProductDefinition.MedicinalProductDefinitionContactComponent element, int index) {
16832    if (element == null) 
16833      return;
16834    Complex t;
16835    if (Utilities.noString(parentType))
16836      t = parent;
16837    else {
16838      t = parent.predicate("fhir:"+parentType+'.'+name);
16839    }
16840    composeBackboneElement(t, "contact", name, element, index);
16841    if (element.hasType()) {
16842      composeCodeableConcept(t, "MedicinalProductDefinitionContactComponent", "type", element.getType(), -1);
16843    }
16844    if (element.hasContact()) {
16845      composeReference(t, "MedicinalProductDefinitionContactComponent", "contact", element.getContact(), -1);
16846    }
16847  }
16848
16849  protected void composeMedicinalProductDefinitionNameComponent(Complex parent, String parentType, String name, MedicinalProductDefinition.MedicinalProductDefinitionNameComponent element, int index) {
16850    if (element == null) 
16851      return;
16852    Complex t;
16853    if (Utilities.noString(parentType))
16854      t = parent;
16855    else {
16856      t = parent.predicate("fhir:"+parentType+'.'+name);
16857    }
16858    composeBackboneElement(t, "name", name, element, index);
16859    if (element.hasProductNameElement()) {
16860      composeString(t, "MedicinalProductDefinitionNameComponent", "productName", element.getProductNameElement(), -1);
16861    }
16862    if (element.hasType()) {
16863      composeCodeableConcept(t, "MedicinalProductDefinitionNameComponent", "type", element.getType(), -1);
16864    }
16865    for (int i = 0; i < element.getNamePart().size(); i++) {
16866      composeMedicinalProductDefinitionNameNamePartComponent(t, "MedicinalProductDefinitionNameComponent", "namePart", element.getNamePart().get(i), i);
16867    }
16868    for (int i = 0; i < element.getCountryLanguage().size(); i++) {
16869      composeMedicinalProductDefinitionNameCountryLanguageComponent(t, "MedicinalProductDefinitionNameComponent", "countryLanguage", element.getCountryLanguage().get(i), i);
16870    }
16871  }
16872
16873  protected void composeMedicinalProductDefinitionNameNamePartComponent(Complex parent, String parentType, String name, MedicinalProductDefinition.MedicinalProductDefinitionNameNamePartComponent element, int index) {
16874    if (element == null) 
16875      return;
16876    Complex t;
16877    if (Utilities.noString(parentType))
16878      t = parent;
16879    else {
16880      t = parent.predicate("fhir:"+parentType+'.'+name);
16881    }
16882    composeBackboneElement(t, "namePart", name, element, index);
16883    if (element.hasPartElement()) {
16884      composeString(t, "MedicinalProductDefinitionNameNamePartComponent", "part", element.getPartElement(), -1);
16885    }
16886    if (element.hasType()) {
16887      composeCodeableConcept(t, "MedicinalProductDefinitionNameNamePartComponent", "type", element.getType(), -1);
16888    }
16889  }
16890
16891  protected void composeMedicinalProductDefinitionNameCountryLanguageComponent(Complex parent, String parentType, String name, MedicinalProductDefinition.MedicinalProductDefinitionNameCountryLanguageComponent 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:"+parentType+'.'+name);
16899    }
16900    composeBackboneElement(t, "countryLanguage", name, element, index);
16901    if (element.hasCountry()) {
16902      composeCodeableConcept(t, "MedicinalProductDefinitionNameCountryLanguageComponent", "country", element.getCountry(), -1);
16903    }
16904    if (element.hasJurisdiction()) {
16905      composeCodeableConcept(t, "MedicinalProductDefinitionNameCountryLanguageComponent", "jurisdiction", element.getJurisdiction(), -1);
16906    }
16907    if (element.hasLanguage()) {
16908      composeCodeableConcept(t, "MedicinalProductDefinitionNameCountryLanguageComponent", "language", element.getLanguage(), -1);
16909    }
16910  }
16911
16912  protected void composeMedicinalProductDefinitionCrossReferenceComponent(Complex parent, String parentType, String name, MedicinalProductDefinition.MedicinalProductDefinitionCrossReferenceComponent element, int index) {
16913    if (element == null) 
16914      return;
16915    Complex t;
16916    if (Utilities.noString(parentType))
16917      t = parent;
16918    else {
16919      t = parent.predicate("fhir:"+parentType+'.'+name);
16920    }
16921    composeBackboneElement(t, "crossReference", name, element, index);
16922    if (element.hasProduct()) {
16923      composeCodeableReference(t, "MedicinalProductDefinitionCrossReferenceComponent", "product", element.getProduct(), -1);
16924    }
16925    if (element.hasType()) {
16926      composeCodeableConcept(t, "MedicinalProductDefinitionCrossReferenceComponent", "type", element.getType(), -1);
16927    }
16928  }
16929
16930  protected void composeMedicinalProductDefinitionOperationComponent(Complex parent, String parentType, String name, MedicinalProductDefinition.MedicinalProductDefinitionOperationComponent element, int index) {
16931    if (element == null) 
16932      return;
16933    Complex t;
16934    if (Utilities.noString(parentType))
16935      t = parent;
16936    else {
16937      t = parent.predicate("fhir:"+parentType+'.'+name);
16938    }
16939    composeBackboneElement(t, "operation", name, element, index);
16940    if (element.hasType()) {
16941      composeCodeableReference(t, "MedicinalProductDefinitionOperationComponent", "type", element.getType(), -1);
16942    }
16943    if (element.hasEffectiveDate()) {
16944      composePeriod(t, "MedicinalProductDefinitionOperationComponent", "effectiveDate", element.getEffectiveDate(), -1);
16945    }
16946    for (int i = 0; i < element.getOrganization().size(); i++) {
16947      composeReference(t, "MedicinalProductDefinitionOperationComponent", "organization", element.getOrganization().get(i), i);
16948    }
16949    if (element.hasConfidentialityIndicator()) {
16950      composeCodeableConcept(t, "MedicinalProductDefinitionOperationComponent", "confidentialityIndicator", element.getConfidentialityIndicator(), -1);
16951    }
16952  }
16953
16954  protected void composeMedicinalProductDefinitionCharacteristicComponent(Complex parent, String parentType, String name, MedicinalProductDefinition.MedicinalProductDefinitionCharacteristicComponent element, int index) {
16955    if (element == null) 
16956      return;
16957    Complex t;
16958    if (Utilities.noString(parentType))
16959      t = parent;
16960    else {
16961      t = parent.predicate("fhir:"+parentType+'.'+name);
16962    }
16963    composeBackboneElement(t, "characteristic", name, element, index);
16964    if (element.hasType()) {
16965      composeCodeableConcept(t, "MedicinalProductDefinitionCharacteristicComponent", "type", element.getType(), -1);
16966    }
16967    if (element.hasValue()) {
16968      composeType(t, "MedicinalProductDefinitionCharacteristicComponent", "value", element.getValue(), -1);
16969    }
16970  }
16971
16972  protected void composeMessageDefinition(Complex parent, String parentType, String name, MessageDefinition 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:"+parentType+'.'+name);
16980    }
16981    composeCanonicalResource(t, "MessageDefinition", name, element, index);
16982    if (element.hasUrlElement()) {
16983      composeUri(t, "MessageDefinition", "url", element.getUrlElement(), -1);
16984    }
16985    for (int i = 0; i < element.getIdentifier().size(); i++) {
16986      composeIdentifier(t, "MessageDefinition", "identifier", element.getIdentifier().get(i), i);
16987    }
16988    if (element.hasVersionElement()) {
16989      composeString(t, "MessageDefinition", "version", element.getVersionElement(), -1);
16990    }
16991    if (element.hasNameElement()) {
16992      composeString(t, "MessageDefinition", "name", element.getNameElement(), -1);
16993    }
16994    if (element.hasTitleElement()) {
16995      composeString(t, "MessageDefinition", "title", element.getTitleElement(), -1);
16996    }
16997    for (int i = 0; i < element.getReplaces().size(); i++) {
16998      composeCanonical(t, "MessageDefinition", "replaces", element.getReplaces().get(i), i);
16999    }
17000    if (element.hasStatusElement()) {
17001      composeEnum(t, "MessageDefinition", "status", element.getStatusElement(), -1);
17002    }
17003    if (element.hasExperimentalElement()) {
17004      composeBoolean(t, "MessageDefinition", "experimental", element.getExperimentalElement(), -1);
17005    }
17006    if (element.hasDateElement()) {
17007      composeDateTime(t, "MessageDefinition", "date", element.getDateElement(), -1);
17008    }
17009    if (element.hasPublisherElement()) {
17010      composeString(t, "MessageDefinition", "publisher", element.getPublisherElement(), -1);
17011    }
17012    for (int i = 0; i < element.getContact().size(); i++) {
17013      composeContactDetail(t, "MessageDefinition", "contact", element.getContact().get(i), i);
17014    }
17015    if (element.hasDescriptionElement()) {
17016      composeMarkdown(t, "MessageDefinition", "description", element.getDescriptionElement(), -1);
17017    }
17018    for (int i = 0; i < element.getUseContext().size(); i++) {
17019      composeUsageContext(t, "MessageDefinition", "useContext", element.getUseContext().get(i), i);
17020    }
17021    for (int i = 0; i < element.getJurisdiction().size(); i++) {
17022      composeCodeableConcept(t, "MessageDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
17023    }
17024    if (element.hasPurposeElement()) {
17025      composeMarkdown(t, "MessageDefinition", "purpose", element.getPurposeElement(), -1);
17026    }
17027    if (element.hasCopyrightElement()) {
17028      composeMarkdown(t, "MessageDefinition", "copyright", element.getCopyrightElement(), -1);
17029    }
17030    if (element.hasBaseElement()) {
17031      composeCanonical(t, "MessageDefinition", "base", element.getBaseElement(), -1);
17032    }
17033    for (int i = 0; i < element.getParent().size(); i++) {
17034      composeCanonical(t, "MessageDefinition", "parent", element.getParent().get(i), i);
17035    }
17036    if (element.hasEvent()) {
17037      composeType(t, "MessageDefinition", "event", element.getEvent(), -1);
17038    }
17039    if (element.hasCategoryElement()) {
17040      composeEnum(t, "MessageDefinition", "category", element.getCategoryElement(), -1);
17041    }
17042    for (int i = 0; i < element.getFocus().size(); i++) {
17043      composeMessageDefinitionFocusComponent(t, "MessageDefinition", "focus", element.getFocus().get(i), i);
17044    }
17045    if (element.hasResponseRequiredElement()) {
17046      composeEnum(t, "MessageDefinition", "responseRequired", element.getResponseRequiredElement(), -1);
17047    }
17048    for (int i = 0; i < element.getAllowedResponse().size(); i++) {
17049      composeMessageDefinitionAllowedResponseComponent(t, "MessageDefinition", "allowedResponse", element.getAllowedResponse().get(i), i);
17050    }
17051    for (int i = 0; i < element.getGraph().size(); i++) {
17052      composeCanonical(t, "MessageDefinition", "graph", element.getGraph().get(i), i);
17053    }
17054  }
17055
17056  protected void composeMessageDefinitionFocusComponent(Complex parent, String parentType, String name, MessageDefinition.MessageDefinitionFocusComponent element, int index) {
17057    if (element == null) 
17058      return;
17059    Complex t;
17060    if (Utilities.noString(parentType))
17061      t = parent;
17062    else {
17063      t = parent.predicate("fhir:"+parentType+'.'+name);
17064    }
17065    composeBackboneElement(t, "focus", name, element, index);
17066    if (element.hasCodeElement()) {
17067      composeCode(t, "MessageDefinitionFocusComponent", "code", element.getCodeElement(), -1);
17068    }
17069    if (element.hasProfileElement()) {
17070      composeCanonical(t, "MessageDefinitionFocusComponent", "profile", element.getProfileElement(), -1);
17071    }
17072    if (element.hasMinElement()) {
17073      composeUnsignedInt(t, "MessageDefinitionFocusComponent", "min", element.getMinElement(), -1);
17074    }
17075    if (element.hasMaxElement()) {
17076      composeString(t, "MessageDefinitionFocusComponent", "max", element.getMaxElement(), -1);
17077    }
17078  }
17079
17080  protected void composeMessageDefinitionAllowedResponseComponent(Complex parent, String parentType, String name, MessageDefinition.MessageDefinitionAllowedResponseComponent element, int index) {
17081    if (element == null) 
17082      return;
17083    Complex t;
17084    if (Utilities.noString(parentType))
17085      t = parent;
17086    else {
17087      t = parent.predicate("fhir:"+parentType+'.'+name);
17088    }
17089    composeBackboneElement(t, "allowedResponse", name, element, index);
17090    if (element.hasMessageElement()) {
17091      composeCanonical(t, "MessageDefinitionAllowedResponseComponent", "message", element.getMessageElement(), -1);
17092    }
17093    if (element.hasSituationElement()) {
17094      composeMarkdown(t, "MessageDefinitionAllowedResponseComponent", "situation", element.getSituationElement(), -1);
17095    }
17096  }
17097
17098  protected void composeMessageHeader(Complex parent, String parentType, String name, MessageHeader element, int index) {
17099    if (element == null) 
17100      return;
17101    Complex t;
17102    if (Utilities.noString(parentType))
17103      t = parent;
17104    else {
17105      t = parent.predicate("fhir:"+parentType+'.'+name);
17106    }
17107    composeDomainResource(t, "MessageHeader", name, element, index);
17108    if (element.hasEvent()) {
17109      composeType(t, "MessageHeader", "event", element.getEvent(), -1);
17110    }
17111    for (int i = 0; i < element.getDestination().size(); i++) {
17112      composeMessageHeaderMessageDestinationComponent(t, "MessageHeader", "destination", element.getDestination().get(i), i);
17113    }
17114    if (element.hasSender()) {
17115      composeReference(t, "MessageHeader", "sender", element.getSender(), -1);
17116    }
17117    if (element.hasEnterer()) {
17118      composeReference(t, "MessageHeader", "enterer", element.getEnterer(), -1);
17119    }
17120    if (element.hasAuthor()) {
17121      composeReference(t, "MessageHeader", "author", element.getAuthor(), -1);
17122    }
17123    if (element.hasSource()) {
17124      composeMessageHeaderMessageSourceComponent(t, "MessageHeader", "source", element.getSource(), -1);
17125    }
17126    if (element.hasResponsible()) {
17127      composeReference(t, "MessageHeader", "responsible", element.getResponsible(), -1);
17128    }
17129    if (element.hasReason()) {
17130      composeCodeableConcept(t, "MessageHeader", "reason", element.getReason(), -1);
17131    }
17132    if (element.hasResponse()) {
17133      composeMessageHeaderResponseComponent(t, "MessageHeader", "response", element.getResponse(), -1);
17134    }
17135    for (int i = 0; i < element.getFocus().size(); i++) {
17136      composeReference(t, "MessageHeader", "focus", element.getFocus().get(i), i);
17137    }
17138    if (element.hasDefinitionElement()) {
17139      composeCanonical(t, "MessageHeader", "definition", element.getDefinitionElement(), -1);
17140    }
17141  }
17142
17143  protected void composeMessageHeaderMessageDestinationComponent(Complex parent, String parentType, String name, MessageHeader.MessageDestinationComponent element, int index) {
17144    if (element == null) 
17145      return;
17146    Complex t;
17147    if (Utilities.noString(parentType))
17148      t = parent;
17149    else {
17150      t = parent.predicate("fhir:"+parentType+'.'+name);
17151    }
17152    composeBackboneElement(t, "destination", name, element, index);
17153    if (element.hasNameElement()) {
17154      composeString(t, "MessageDestinationComponent", "name", element.getNameElement(), -1);
17155    }
17156    if (element.hasTarget()) {
17157      composeReference(t, "MessageDestinationComponent", "target", element.getTarget(), -1);
17158    }
17159    if (element.hasEndpointElement()) {
17160      composeUrl(t, "MessageDestinationComponent", "endpoint", element.getEndpointElement(), -1);
17161    }
17162    if (element.hasReceiver()) {
17163      composeReference(t, "MessageDestinationComponent", "receiver", element.getReceiver(), -1);
17164    }
17165  }
17166
17167  protected void composeMessageHeaderMessageSourceComponent(Complex parent, String parentType, String name, MessageHeader.MessageSourceComponent element, int index) {
17168    if (element == null) 
17169      return;
17170    Complex t;
17171    if (Utilities.noString(parentType))
17172      t = parent;
17173    else {
17174      t = parent.predicate("fhir:"+parentType+'.'+name);
17175    }
17176    composeBackboneElement(t, "source", name, element, index);
17177    if (element.hasNameElement()) {
17178      composeString(t, "MessageSourceComponent", "name", element.getNameElement(), -1);
17179    }
17180    if (element.hasSoftwareElement()) {
17181      composeString(t, "MessageSourceComponent", "software", element.getSoftwareElement(), -1);
17182    }
17183    if (element.hasVersionElement()) {
17184      composeString(t, "MessageSourceComponent", "version", element.getVersionElement(), -1);
17185    }
17186    if (element.hasContact()) {
17187      composeContactPoint(t, "MessageSourceComponent", "contact", element.getContact(), -1);
17188    }
17189    if (element.hasEndpointElement()) {
17190      composeUrl(t, "MessageSourceComponent", "endpoint", element.getEndpointElement(), -1);
17191    }
17192  }
17193
17194  protected void composeMessageHeaderResponseComponent(Complex parent, String parentType, String name, MessageHeader.MessageHeaderResponseComponent element, int index) {
17195    if (element == null) 
17196      return;
17197    Complex t;
17198    if (Utilities.noString(parentType))
17199      t = parent;
17200    else {
17201      t = parent.predicate("fhir:"+parentType+'.'+name);
17202    }
17203    composeBackboneElement(t, "response", name, element, index);
17204    if (element.hasIdentifierElement()) {
17205      composeId(t, "MessageHeaderResponseComponent", "identifier", element.getIdentifierElement(), -1);
17206    }
17207    if (element.hasCodeElement()) {
17208      composeEnum(t, "MessageHeaderResponseComponent", "code", element.getCodeElement(), -1);
17209    }
17210    if (element.hasDetails()) {
17211      composeReference(t, "MessageHeaderResponseComponent", "details", element.getDetails(), -1);
17212    }
17213  }
17214
17215  protected void composeMolecularSequence(Complex parent, String parentType, String name, MolecularSequence element, int index) {
17216    if (element == null) 
17217      return;
17218    Complex t;
17219    if (Utilities.noString(parentType))
17220      t = parent;
17221    else {
17222      t = parent.predicate("fhir:"+parentType+'.'+name);
17223    }
17224    composeDomainResource(t, "MolecularSequence", name, element, index);
17225    for (int i = 0; i < element.getIdentifier().size(); i++) {
17226      composeIdentifier(t, "MolecularSequence", "identifier", element.getIdentifier().get(i), i);
17227    }
17228    if (element.hasTypeElement()) {
17229      composeEnum(t, "MolecularSequence", "type", element.getTypeElement(), -1);
17230    }
17231    if (element.hasCoordinateSystemElement()) {
17232      composeInteger(t, "MolecularSequence", "coordinateSystem", element.getCoordinateSystemElement(), -1);
17233    }
17234    if (element.hasPatient()) {
17235      composeReference(t, "MolecularSequence", "patient", element.getPatient(), -1);
17236    }
17237    if (element.hasSpecimen()) {
17238      composeReference(t, "MolecularSequence", "specimen", element.getSpecimen(), -1);
17239    }
17240    if (element.hasDevice()) {
17241      composeReference(t, "MolecularSequence", "device", element.getDevice(), -1);
17242    }
17243    if (element.hasPerformer()) {
17244      composeReference(t, "MolecularSequence", "performer", element.getPerformer(), -1);
17245    }
17246    if (element.hasQuantity()) {
17247      composeQuantity(t, "MolecularSequence", "quantity", element.getQuantity(), -1);
17248    }
17249    if (element.hasReferenceSeq()) {
17250      composeMolecularSequenceReferenceSeqComponent(t, "MolecularSequence", "referenceSeq", element.getReferenceSeq(), -1);
17251    }
17252    for (int i = 0; i < element.getVariant().size(); i++) {
17253      composeMolecularSequenceVariantComponent(t, "MolecularSequence", "variant", element.getVariant().get(i), i);
17254    }
17255    if (element.hasObservedSeqElement()) {
17256      composeString(t, "MolecularSequence", "observedSeq", element.getObservedSeqElement(), -1);
17257    }
17258    for (int i = 0; i < element.getQuality().size(); i++) {
17259      composeMolecularSequenceQualityComponent(t, "MolecularSequence", "quality", element.getQuality().get(i), i);
17260    }
17261    if (element.hasReadCoverageElement()) {
17262      composeInteger(t, "MolecularSequence", "readCoverage", element.getReadCoverageElement(), -1);
17263    }
17264    for (int i = 0; i < element.getRepository().size(); i++) {
17265      composeMolecularSequenceRepositoryComponent(t, "MolecularSequence", "repository", element.getRepository().get(i), i);
17266    }
17267    for (int i = 0; i < element.getPointer().size(); i++) {
17268      composeReference(t, "MolecularSequence", "pointer", element.getPointer().get(i), i);
17269    }
17270    for (int i = 0; i < element.getStructureVariant().size(); i++) {
17271      composeMolecularSequenceStructureVariantComponent(t, "MolecularSequence", "structureVariant", element.getStructureVariant().get(i), i);
17272    }
17273  }
17274
17275  protected void composeMolecularSequenceReferenceSeqComponent(Complex parent, String parentType, String name, MolecularSequence.MolecularSequenceReferenceSeqComponent element, int index) {
17276    if (element == null) 
17277      return;
17278    Complex t;
17279    if (Utilities.noString(parentType))
17280      t = parent;
17281    else {
17282      t = parent.predicate("fhir:"+parentType+'.'+name);
17283    }
17284    composeBackboneElement(t, "referenceSeq", name, element, index);
17285    if (element.hasChromosome()) {
17286      composeCodeableConcept(t, "MolecularSequenceReferenceSeqComponent", "chromosome", element.getChromosome(), -1);
17287    }
17288    if (element.hasGenomeBuildElement()) {
17289      composeString(t, "MolecularSequenceReferenceSeqComponent", "genomeBuild", element.getGenomeBuildElement(), -1);
17290    }
17291    if (element.hasOrientationElement()) {
17292      composeEnum(t, "MolecularSequenceReferenceSeqComponent", "orientation", element.getOrientationElement(), -1);
17293    }
17294    if (element.hasReferenceSeqId()) {
17295      composeCodeableConcept(t, "MolecularSequenceReferenceSeqComponent", "referenceSeqId", element.getReferenceSeqId(), -1);
17296    }
17297    if (element.hasReferenceSeqPointer()) {
17298      composeReference(t, "MolecularSequenceReferenceSeqComponent", "referenceSeqPointer", element.getReferenceSeqPointer(), -1);
17299    }
17300    if (element.hasReferenceSeqStringElement()) {
17301      composeString(t, "MolecularSequenceReferenceSeqComponent", "referenceSeqString", element.getReferenceSeqStringElement(), -1);
17302    }
17303    if (element.hasStrandElement()) {
17304      composeEnum(t, "MolecularSequenceReferenceSeqComponent", "strand", element.getStrandElement(), -1);
17305    }
17306    if (element.hasWindowStartElement()) {
17307      composeInteger(t, "MolecularSequenceReferenceSeqComponent", "windowStart", element.getWindowStartElement(), -1);
17308    }
17309    if (element.hasWindowEndElement()) {
17310      composeInteger(t, "MolecularSequenceReferenceSeqComponent", "windowEnd", element.getWindowEndElement(), -1);
17311    }
17312  }
17313
17314  protected void composeMolecularSequenceVariantComponent(Complex parent, String parentType, String name, MolecularSequence.MolecularSequenceVariantComponent element, int index) {
17315    if (element == null) 
17316      return;
17317    Complex t;
17318    if (Utilities.noString(parentType))
17319      t = parent;
17320    else {
17321      t = parent.predicate("fhir:"+parentType+'.'+name);
17322    }
17323    composeBackboneElement(t, "variant", name, element, index);
17324    if (element.hasStartElement()) {
17325      composeInteger(t, "MolecularSequenceVariantComponent", "start", element.getStartElement(), -1);
17326    }
17327    if (element.hasEndElement()) {
17328      composeInteger(t, "MolecularSequenceVariantComponent", "end", element.getEndElement(), -1);
17329    }
17330    if (element.hasObservedAlleleElement()) {
17331      composeString(t, "MolecularSequenceVariantComponent", "observedAllele", element.getObservedAlleleElement(), -1);
17332    }
17333    if (element.hasReferenceAlleleElement()) {
17334      composeString(t, "MolecularSequenceVariantComponent", "referenceAllele", element.getReferenceAlleleElement(), -1);
17335    }
17336    if (element.hasCigarElement()) {
17337      composeString(t, "MolecularSequenceVariantComponent", "cigar", element.getCigarElement(), -1);
17338    }
17339    if (element.hasVariantPointer()) {
17340      composeReference(t, "MolecularSequenceVariantComponent", "variantPointer", element.getVariantPointer(), -1);
17341    }
17342  }
17343
17344  protected void composeMolecularSequenceQualityComponent(Complex parent, String parentType, String name, MolecularSequence.MolecularSequenceQualityComponent element, int index) {
17345    if (element == null) 
17346      return;
17347    Complex t;
17348    if (Utilities.noString(parentType))
17349      t = parent;
17350    else {
17351      t = parent.predicate("fhir:"+parentType+'.'+name);
17352    }
17353    composeBackboneElement(t, "quality", name, element, index);
17354    if (element.hasTypeElement()) {
17355      composeEnum(t, "MolecularSequenceQualityComponent", "type", element.getTypeElement(), -1);
17356    }
17357    if (element.hasStandardSequence()) {
17358      composeCodeableConcept(t, "MolecularSequenceQualityComponent", "standardSequence", element.getStandardSequence(), -1);
17359    }
17360    if (element.hasStartElement()) {
17361      composeInteger(t, "MolecularSequenceQualityComponent", "start", element.getStartElement(), -1);
17362    }
17363    if (element.hasEndElement()) {
17364      composeInteger(t, "MolecularSequenceQualityComponent", "end", element.getEndElement(), -1);
17365    }
17366    if (element.hasScore()) {
17367      composeQuantity(t, "MolecularSequenceQualityComponent", "score", element.getScore(), -1);
17368    }
17369    if (element.hasMethod()) {
17370      composeCodeableConcept(t, "MolecularSequenceQualityComponent", "method", element.getMethod(), -1);
17371    }
17372    if (element.hasTruthTPElement()) {
17373      composeDecimal(t, "MolecularSequenceQualityComponent", "truthTP", element.getTruthTPElement(), -1);
17374    }
17375    if (element.hasQueryTPElement()) {
17376      composeDecimal(t, "MolecularSequenceQualityComponent", "queryTP", element.getQueryTPElement(), -1);
17377    }
17378    if (element.hasTruthFNElement()) {
17379      composeDecimal(t, "MolecularSequenceQualityComponent", "truthFN", element.getTruthFNElement(), -1);
17380    }
17381    if (element.hasQueryFPElement()) {
17382      composeDecimal(t, "MolecularSequenceQualityComponent", "queryFP", element.getQueryFPElement(), -1);
17383    }
17384    if (element.hasGtFPElement()) {
17385      composeDecimal(t, "MolecularSequenceQualityComponent", "gtFP", element.getGtFPElement(), -1);
17386    }
17387    if (element.hasPrecisionElement()) {
17388      composeDecimal(t, "MolecularSequenceQualityComponent", "precision", element.getPrecisionElement(), -1);
17389    }
17390    if (element.hasRecallElement()) {
17391      composeDecimal(t, "MolecularSequenceQualityComponent", "recall", element.getRecallElement(), -1);
17392    }
17393    if (element.hasFScoreElement()) {
17394      composeDecimal(t, "MolecularSequenceQualityComponent", "fScore", element.getFScoreElement(), -1);
17395    }
17396    if (element.hasRoc()) {
17397      composeMolecularSequenceQualityRocComponent(t, "MolecularSequenceQualityComponent", "roc", element.getRoc(), -1);
17398    }
17399  }
17400
17401  protected void composeMolecularSequenceQualityRocComponent(Complex parent, String parentType, String name, MolecularSequence.MolecularSequenceQualityRocComponent element, int index) {
17402    if (element == null) 
17403      return;
17404    Complex t;
17405    if (Utilities.noString(parentType))
17406      t = parent;
17407    else {
17408      t = parent.predicate("fhir:"+parentType+'.'+name);
17409    }
17410    composeBackboneElement(t, "roc", name, element, index);
17411    for (int i = 0; i < element.getScore().size(); i++) {
17412      composeInteger(t, "MolecularSequenceQualityRocComponent", "score", element.getScore().get(i), i);
17413    }
17414    for (int i = 0; i < element.getNumTP().size(); i++) {
17415      composeInteger(t, "MolecularSequenceQualityRocComponent", "numTP", element.getNumTP().get(i), i);
17416    }
17417    for (int i = 0; i < element.getNumFP().size(); i++) {
17418      composeInteger(t, "MolecularSequenceQualityRocComponent", "numFP", element.getNumFP().get(i), i);
17419    }
17420    for (int i = 0; i < element.getNumFN().size(); i++) {
17421      composeInteger(t, "MolecularSequenceQualityRocComponent", "numFN", element.getNumFN().get(i), i);
17422    }
17423    for (int i = 0; i < element.getPrecision().size(); i++) {
17424      composeDecimal(t, "MolecularSequenceQualityRocComponent", "precision", element.getPrecision().get(i), i);
17425    }
17426    for (int i = 0; i < element.getSensitivity().size(); i++) {
17427      composeDecimal(t, "MolecularSequenceQualityRocComponent", "sensitivity", element.getSensitivity().get(i), i);
17428    }
17429    for (int i = 0; i < element.getFMeasure().size(); i++) {
17430      composeDecimal(t, "MolecularSequenceQualityRocComponent", "fMeasure", element.getFMeasure().get(i), i);
17431    }
17432  }
17433
17434  protected void composeMolecularSequenceRepositoryComponent(Complex parent, String parentType, String name, MolecularSequence.MolecularSequenceRepositoryComponent element, int index) {
17435    if (element == null) 
17436      return;
17437    Complex t;
17438    if (Utilities.noString(parentType))
17439      t = parent;
17440    else {
17441      t = parent.predicate("fhir:"+parentType+'.'+name);
17442    }
17443    composeBackboneElement(t, "repository", name, element, index);
17444    if (element.hasTypeElement()) {
17445      composeEnum(t, "MolecularSequenceRepositoryComponent", "type", element.getTypeElement(), -1);
17446    }
17447    if (element.hasUrlElement()) {
17448      composeUri(t, "MolecularSequenceRepositoryComponent", "url", element.getUrlElement(), -1);
17449    }
17450    if (element.hasNameElement()) {
17451      composeString(t, "MolecularSequenceRepositoryComponent", "name", element.getNameElement(), -1);
17452    }
17453    if (element.hasDatasetIdElement()) {
17454      composeString(t, "MolecularSequenceRepositoryComponent", "datasetId", element.getDatasetIdElement(), -1);
17455    }
17456    if (element.hasVariantsetIdElement()) {
17457      composeString(t, "MolecularSequenceRepositoryComponent", "variantsetId", element.getVariantsetIdElement(), -1);
17458    }
17459    if (element.hasReadsetIdElement()) {
17460      composeString(t, "MolecularSequenceRepositoryComponent", "readsetId", element.getReadsetIdElement(), -1);
17461    }
17462  }
17463
17464  protected void composeMolecularSequenceStructureVariantComponent(Complex parent, String parentType, String name, MolecularSequence.MolecularSequenceStructureVariantComponent element, int index) {
17465    if (element == null) 
17466      return;
17467    Complex t;
17468    if (Utilities.noString(parentType))
17469      t = parent;
17470    else {
17471      t = parent.predicate("fhir:"+parentType+'.'+name);
17472    }
17473    composeBackboneElement(t, "structureVariant", name, element, index);
17474    if (element.hasVariantType()) {
17475      composeCodeableConcept(t, "MolecularSequenceStructureVariantComponent", "variantType", element.getVariantType(), -1);
17476    }
17477    if (element.hasExactElement()) {
17478      composeBoolean(t, "MolecularSequenceStructureVariantComponent", "exact", element.getExactElement(), -1);
17479    }
17480    if (element.hasLengthElement()) {
17481      composeInteger(t, "MolecularSequenceStructureVariantComponent", "length", element.getLengthElement(), -1);
17482    }
17483    if (element.hasOuter()) {
17484      composeMolecularSequenceStructureVariantOuterComponent(t, "MolecularSequenceStructureVariantComponent", "outer", element.getOuter(), -1);
17485    }
17486    if (element.hasInner()) {
17487      composeMolecularSequenceStructureVariantInnerComponent(t, "MolecularSequenceStructureVariantComponent", "inner", element.getInner(), -1);
17488    }
17489  }
17490
17491  protected void composeMolecularSequenceStructureVariantOuterComponent(Complex parent, String parentType, String name, MolecularSequence.MolecularSequenceStructureVariantOuterComponent 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:"+parentType+'.'+name);
17499    }
17500    composeBackboneElement(t, "outer", name, element, index);
17501    if (element.hasStartElement()) {
17502      composeInteger(t, "MolecularSequenceStructureVariantOuterComponent", "start", element.getStartElement(), -1);
17503    }
17504    if (element.hasEndElement()) {
17505      composeInteger(t, "MolecularSequenceStructureVariantOuterComponent", "end", element.getEndElement(), -1);
17506    }
17507  }
17508
17509  protected void composeMolecularSequenceStructureVariantInnerComponent(Complex parent, String parentType, String name, MolecularSequence.MolecularSequenceStructureVariantInnerComponent element, int index) {
17510    if (element == null) 
17511      return;
17512    Complex t;
17513    if (Utilities.noString(parentType))
17514      t = parent;
17515    else {
17516      t = parent.predicate("fhir:"+parentType+'.'+name);
17517    }
17518    composeBackboneElement(t, "inner", name, element, index);
17519    if (element.hasStartElement()) {
17520      composeInteger(t, "MolecularSequenceStructureVariantInnerComponent", "start", element.getStartElement(), -1);
17521    }
17522    if (element.hasEndElement()) {
17523      composeInteger(t, "MolecularSequenceStructureVariantInnerComponent", "end", element.getEndElement(), -1);
17524    }
17525  }
17526
17527  protected void composeNamingSystem(Complex parent, String parentType, String name, NamingSystem element, int index) {
17528    if (element == null) 
17529      return;
17530    Complex t;
17531    if (Utilities.noString(parentType))
17532      t = parent;
17533    else {
17534      t = parent.predicate("fhir:"+parentType+'.'+name);
17535    }
17536    composeCanonicalResource(t, "NamingSystem", name, element, index);
17537    if (element.hasUrlElement()) {
17538      composeUri(t, "NamingSystem", "url", element.getUrlElement(), -1);
17539    }
17540    if (element.hasVersionElement()) {
17541      composeString(t, "NamingSystem", "version", element.getVersionElement(), -1);
17542    }
17543    if (element.hasNameElement()) {
17544      composeString(t, "NamingSystem", "name", element.getNameElement(), -1);
17545    }
17546    if (element.hasTitleElement()) {
17547      composeString(t, "NamingSystem", "title", element.getTitleElement(), -1);
17548    }
17549    if (element.hasStatusElement()) {
17550      composeEnum(t, "NamingSystem", "status", element.getStatusElement(), -1);
17551    }
17552    if (element.hasKindElement()) {
17553      composeEnum(t, "NamingSystem", "kind", element.getKindElement(), -1);
17554    }
17555    if (element.hasDateElement()) {
17556      composeDateTime(t, "NamingSystem", "date", element.getDateElement(), -1);
17557    }
17558    if (element.hasPublisherElement()) {
17559      composeString(t, "NamingSystem", "publisher", element.getPublisherElement(), -1);
17560    }
17561    for (int i = 0; i < element.getContact().size(); i++) {
17562      composeContactDetail(t, "NamingSystem", "contact", element.getContact().get(i), i);
17563    }
17564    if (element.hasResponsibleElement()) {
17565      composeString(t, "NamingSystem", "responsible", element.getResponsibleElement(), -1);
17566    }
17567    if (element.hasType()) {
17568      composeCodeableConcept(t, "NamingSystem", "type", element.getType(), -1);
17569    }
17570    if (element.hasDescriptionElement()) {
17571      composeMarkdown(t, "NamingSystem", "description", element.getDescriptionElement(), -1);
17572    }
17573    for (int i = 0; i < element.getUseContext().size(); i++) {
17574      composeUsageContext(t, "NamingSystem", "useContext", element.getUseContext().get(i), i);
17575    }
17576    for (int i = 0; i < element.getJurisdiction().size(); i++) {
17577      composeCodeableConcept(t, "NamingSystem", "jurisdiction", element.getJurisdiction().get(i), i);
17578    }
17579    if (element.hasUsageElement()) {
17580      composeString(t, "NamingSystem", "usage", element.getUsageElement(), -1);
17581    }
17582    for (int i = 0; i < element.getUniqueId().size(); i++) {
17583      composeNamingSystemUniqueIdComponent(t, "NamingSystem", "uniqueId", element.getUniqueId().get(i), i);
17584    }
17585  }
17586
17587  protected void composeNamingSystemUniqueIdComponent(Complex parent, String parentType, String name, NamingSystem.NamingSystemUniqueIdComponent element, int index) {
17588    if (element == null) 
17589      return;
17590    Complex t;
17591    if (Utilities.noString(parentType))
17592      t = parent;
17593    else {
17594      t = parent.predicate("fhir:"+parentType+'.'+name);
17595    }
17596    composeBackboneElement(t, "uniqueId", name, element, index);
17597    if (element.hasTypeElement()) {
17598      composeEnum(t, "NamingSystemUniqueIdComponent", "type", element.getTypeElement(), -1);
17599    }
17600    if (element.hasValueElement()) {
17601      composeString(t, "NamingSystemUniqueIdComponent", "value", element.getValueElement(), -1);
17602    }
17603    if (element.hasPreferredElement()) {
17604      composeBoolean(t, "NamingSystemUniqueIdComponent", "preferred", element.getPreferredElement(), -1);
17605    }
17606    if (element.hasCommentElement()) {
17607      composeString(t, "NamingSystemUniqueIdComponent", "comment", element.getCommentElement(), -1);
17608    }
17609    if (element.hasPeriod()) {
17610      composePeriod(t, "NamingSystemUniqueIdComponent", "period", element.getPeriod(), -1);
17611    }
17612    if (element.hasAuthoritativeElement()) {
17613      composeBoolean(t, "NamingSystemUniqueIdComponent", "authoritative", element.getAuthoritativeElement(), -1);
17614    }
17615  }
17616
17617  protected void composeNutritionIntake(Complex parent, String parentType, String name, NutritionIntake element, int index) {
17618    if (element == null) 
17619      return;
17620    Complex t;
17621    if (Utilities.noString(parentType))
17622      t = parent;
17623    else {
17624      t = parent.predicate("fhir:"+parentType+'.'+name);
17625    }
17626    composeDomainResource(t, "NutritionIntake", name, element, index);
17627    for (int i = 0; i < element.getIdentifier().size(); i++) {
17628      composeIdentifier(t, "NutritionIntake", "identifier", element.getIdentifier().get(i), i);
17629    }
17630    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
17631      composeCanonical(t, "NutritionIntake", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
17632    }
17633    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
17634      composeUri(t, "NutritionIntake", "instantiatesUri", element.getInstantiatesUri().get(i), i);
17635    }
17636    for (int i = 0; i < element.getBasedOn().size(); i++) {
17637      composeReference(t, "NutritionIntake", "basedOn", element.getBasedOn().get(i), i);
17638    }
17639    for (int i = 0; i < element.getPartOf().size(); i++) {
17640      composeReference(t, "NutritionIntake", "partOf", element.getPartOf().get(i), i);
17641    }
17642    if (element.hasStatusElement()) {
17643      composeEnum(t, "NutritionIntake", "status", element.getStatusElement(), -1);
17644    }
17645    for (int i = 0; i < element.getStatusReason().size(); i++) {
17646      composeCodeableConcept(t, "NutritionIntake", "statusReason", element.getStatusReason().get(i), i);
17647    }
17648    if (element.hasCode()) {
17649      composeCodeableConcept(t, "NutritionIntake", "code", element.getCode(), -1);
17650    }
17651    if (element.hasSubject()) {
17652      composeReference(t, "NutritionIntake", "subject", element.getSubject(), -1);
17653    }
17654    if (element.hasEncounter()) {
17655      composeReference(t, "NutritionIntake", "encounter", element.getEncounter(), -1);
17656    }
17657    if (element.hasOccurrence()) {
17658      composeType(t, "NutritionIntake", "occurrence", element.getOccurrence(), -1);
17659    }
17660    if (element.hasRecordedElement()) {
17661      composeDateTime(t, "NutritionIntake", "recorded", element.getRecordedElement(), -1);
17662    }
17663    if (element.hasReported()) {
17664      composeType(t, "NutritionIntake", "reported", element.getReported(), -1);
17665    }
17666    for (int i = 0; i < element.getConsumedItem().size(); i++) {
17667      composeNutritionIntakeConsumedItemComponent(t, "NutritionIntake", "consumedItem", element.getConsumedItem().get(i), i);
17668    }
17669    for (int i = 0; i < element.getIngredientLabel().size(); i++) {
17670      composeNutritionIntakeIngredientLabelComponent(t, "NutritionIntake", "ingredientLabel", element.getIngredientLabel().get(i), i);
17671    }
17672    for (int i = 0; i < element.getPerformer().size(); i++) {
17673      composeNutritionIntakePerformerComponent(t, "NutritionIntake", "performer", element.getPerformer().get(i), i);
17674    }
17675    if (element.hasLocation()) {
17676      composeReference(t, "NutritionIntake", "location", element.getLocation(), -1);
17677    }
17678    for (int i = 0; i < element.getDerivedFrom().size(); i++) {
17679      composeReference(t, "NutritionIntake", "derivedFrom", element.getDerivedFrom().get(i), i);
17680    }
17681    for (int i = 0; i < element.getReason().size(); i++) {
17682      composeCodeableReference(t, "NutritionIntake", "reason", element.getReason().get(i), i);
17683    }
17684    for (int i = 0; i < element.getNote().size(); i++) {
17685      composeAnnotation(t, "NutritionIntake", "note", element.getNote().get(i), i);
17686    }
17687  }
17688
17689  protected void composeNutritionIntakeConsumedItemComponent(Complex parent, String parentType, String name, NutritionIntake.NutritionIntakeConsumedItemComponent element, int index) {
17690    if (element == null) 
17691      return;
17692    Complex t;
17693    if (Utilities.noString(parentType))
17694      t = parent;
17695    else {
17696      t = parent.predicate("fhir:"+parentType+'.'+name);
17697    }
17698    composeBackboneElement(t, "consumedItem", name, element, index);
17699    if (element.hasType()) {
17700      composeCodeableConcept(t, "NutritionIntakeConsumedItemComponent", "type", element.getType(), -1);
17701    }
17702    if (element.hasNutritionProduct()) {
17703      composeCodeableReference(t, "NutritionIntakeConsumedItemComponent", "nutritionProduct", element.getNutritionProduct(), -1);
17704    }
17705    if (element.hasSchedule()) {
17706      composeTiming(t, "NutritionIntakeConsumedItemComponent", "schedule", element.getSchedule(), -1);
17707    }
17708    if (element.hasAmount()) {
17709      composeQuantity(t, "NutritionIntakeConsumedItemComponent", "amount", element.getAmount(), -1);
17710    }
17711    if (element.hasRate()) {
17712      composeQuantity(t, "NutritionIntakeConsumedItemComponent", "rate", element.getRate(), -1);
17713    }
17714    if (element.hasNotConsumedElement()) {
17715      composeBoolean(t, "NutritionIntakeConsumedItemComponent", "notConsumed", element.getNotConsumedElement(), -1);
17716    }
17717    if (element.hasNotConsumedReason()) {
17718      composeCodeableConcept(t, "NutritionIntakeConsumedItemComponent", "notConsumedReason", element.getNotConsumedReason(), -1);
17719    }
17720  }
17721
17722  protected void composeNutritionIntakeIngredientLabelComponent(Complex parent, String parentType, String name, NutritionIntake.NutritionIntakeIngredientLabelComponent element, int index) {
17723    if (element == null) 
17724      return;
17725    Complex t;
17726    if (Utilities.noString(parentType))
17727      t = parent;
17728    else {
17729      t = parent.predicate("fhir:"+parentType+'.'+name);
17730    }
17731    composeBackboneElement(t, "ingredientLabel", name, element, index);
17732    if (element.hasNutrient()) {
17733      composeCodeableReference(t, "NutritionIntakeIngredientLabelComponent", "nutrient", element.getNutrient(), -1);
17734    }
17735    if (element.hasAmount()) {
17736      composeQuantity(t, "NutritionIntakeIngredientLabelComponent", "amount", element.getAmount(), -1);
17737    }
17738  }
17739
17740  protected void composeNutritionIntakePerformerComponent(Complex parent, String parentType, String name, NutritionIntake.NutritionIntakePerformerComponent element, int index) {
17741    if (element == null) 
17742      return;
17743    Complex t;
17744    if (Utilities.noString(parentType))
17745      t = parent;
17746    else {
17747      t = parent.predicate("fhir:"+parentType+'.'+name);
17748    }
17749    composeBackboneElement(t, "performer", name, element, index);
17750    if (element.hasFunction()) {
17751      composeCodeableConcept(t, "NutritionIntakePerformerComponent", "function", element.getFunction(), -1);
17752    }
17753    if (element.hasActor()) {
17754      composeReference(t, "NutritionIntakePerformerComponent", "actor", element.getActor(), -1);
17755    }
17756  }
17757
17758  protected void composeNutritionOrder(Complex parent, String parentType, String name, NutritionOrder element, int index) {
17759    if (element == null) 
17760      return;
17761    Complex t;
17762    if (Utilities.noString(parentType))
17763      t = parent;
17764    else {
17765      t = parent.predicate("fhir:"+parentType+'.'+name);
17766    }
17767    composeDomainResource(t, "NutritionOrder", name, element, index);
17768    for (int i = 0; i < element.getIdentifier().size(); i++) {
17769      composeIdentifier(t, "NutritionOrder", "identifier", element.getIdentifier().get(i), i);
17770    }
17771    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
17772      composeCanonical(t, "NutritionOrder", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
17773    }
17774    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
17775      composeUri(t, "NutritionOrder", "instantiatesUri", element.getInstantiatesUri().get(i), i);
17776    }
17777    for (int i = 0; i < element.getInstantiates().size(); i++) {
17778      composeUri(t, "NutritionOrder", "instantiates", element.getInstantiates().get(i), i);
17779    }
17780    if (element.hasStatusElement()) {
17781      composeEnum(t, "NutritionOrder", "status", element.getStatusElement(), -1);
17782    }
17783    if (element.hasIntentElement()) {
17784      composeEnum(t, "NutritionOrder", "intent", element.getIntentElement(), -1);
17785    }
17786    if (element.hasPatient()) {
17787      composeReference(t, "NutritionOrder", "patient", element.getPatient(), -1);
17788    }
17789    if (element.hasEncounter()) {
17790      composeReference(t, "NutritionOrder", "encounter", element.getEncounter(), -1);
17791    }
17792    if (element.hasDateTimeElement()) {
17793      composeDateTime(t, "NutritionOrder", "dateTime", element.getDateTimeElement(), -1);
17794    }
17795    if (element.hasOrderer()) {
17796      composeReference(t, "NutritionOrder", "orderer", element.getOrderer(), -1);
17797    }
17798    for (int i = 0; i < element.getAllergyIntolerance().size(); i++) {
17799      composeReference(t, "NutritionOrder", "allergyIntolerance", element.getAllergyIntolerance().get(i), i);
17800    }
17801    for (int i = 0; i < element.getFoodPreferenceModifier().size(); i++) {
17802      composeCodeableConcept(t, "NutritionOrder", "foodPreferenceModifier", element.getFoodPreferenceModifier().get(i), i);
17803    }
17804    for (int i = 0; i < element.getExcludeFoodModifier().size(); i++) {
17805      composeCodeableConcept(t, "NutritionOrder", "excludeFoodModifier", element.getExcludeFoodModifier().get(i), i);
17806    }
17807    if (element.hasOralDiet()) {
17808      composeNutritionOrderOralDietComponent(t, "NutritionOrder", "oralDiet", element.getOralDiet(), -1);
17809    }
17810    for (int i = 0; i < element.getSupplement().size(); i++) {
17811      composeNutritionOrderSupplementComponent(t, "NutritionOrder", "supplement", element.getSupplement().get(i), i);
17812    }
17813    if (element.hasEnteralFormula()) {
17814      composeNutritionOrderEnteralFormulaComponent(t, "NutritionOrder", "enteralFormula", element.getEnteralFormula(), -1);
17815    }
17816    for (int i = 0; i < element.getNote().size(); i++) {
17817      composeAnnotation(t, "NutritionOrder", "note", element.getNote().get(i), i);
17818    }
17819  }
17820
17821  protected void composeNutritionOrderOralDietComponent(Complex parent, String parentType, String name, NutritionOrder.NutritionOrderOralDietComponent element, int index) {
17822    if (element == null) 
17823      return;
17824    Complex t;
17825    if (Utilities.noString(parentType))
17826      t = parent;
17827    else {
17828      t = parent.predicate("fhir:"+parentType+'.'+name);
17829    }
17830    composeBackboneElement(t, "oralDiet", name, element, index);
17831    for (int i = 0; i < element.getType().size(); i++) {
17832      composeCodeableConcept(t, "NutritionOrderOralDietComponent", "type", element.getType().get(i), i);
17833    }
17834    for (int i = 0; i < element.getSchedule().size(); i++) {
17835      composeTiming(t, "NutritionOrderOralDietComponent", "schedule", element.getSchedule().get(i), i);
17836    }
17837    for (int i = 0; i < element.getNutrient().size(); i++) {
17838      composeNutritionOrderOralDietNutrientComponent(t, "NutritionOrderOralDietComponent", "nutrient", element.getNutrient().get(i), i);
17839    }
17840    for (int i = 0; i < element.getTexture().size(); i++) {
17841      composeNutritionOrderOralDietTextureComponent(t, "NutritionOrderOralDietComponent", "texture", element.getTexture().get(i), i);
17842    }
17843    for (int i = 0; i < element.getFluidConsistencyType().size(); i++) {
17844      composeCodeableConcept(t, "NutritionOrderOralDietComponent", "fluidConsistencyType", element.getFluidConsistencyType().get(i), i);
17845    }
17846    if (element.hasInstructionElement()) {
17847      composeString(t, "NutritionOrderOralDietComponent", "instruction", element.getInstructionElement(), -1);
17848    }
17849  }
17850
17851  protected void composeNutritionOrderOralDietNutrientComponent(Complex parent, String parentType, String name, NutritionOrder.NutritionOrderOralDietNutrientComponent element, int index) {
17852    if (element == null) 
17853      return;
17854    Complex t;
17855    if (Utilities.noString(parentType))
17856      t = parent;
17857    else {
17858      t = parent.predicate("fhir:"+parentType+'.'+name);
17859    }
17860    composeBackboneElement(t, "nutrient", name, element, index);
17861    if (element.hasModifier()) {
17862      composeCodeableConcept(t, "NutritionOrderOralDietNutrientComponent", "modifier", element.getModifier(), -1);
17863    }
17864    if (element.hasAmount()) {
17865      composeQuantity(t, "NutritionOrderOralDietNutrientComponent", "amount", element.getAmount(), -1);
17866    }
17867  }
17868
17869  protected void composeNutritionOrderOralDietTextureComponent(Complex parent, String parentType, String name, NutritionOrder.NutritionOrderOralDietTextureComponent element, int index) {
17870    if (element == null) 
17871      return;
17872    Complex t;
17873    if (Utilities.noString(parentType))
17874      t = parent;
17875    else {
17876      t = parent.predicate("fhir:"+parentType+'.'+name);
17877    }
17878    composeBackboneElement(t, "texture", name, element, index);
17879    if (element.hasModifier()) {
17880      composeCodeableConcept(t, "NutritionOrderOralDietTextureComponent", "modifier", element.getModifier(), -1);
17881    }
17882    if (element.hasFoodType()) {
17883      composeCodeableConcept(t, "NutritionOrderOralDietTextureComponent", "foodType", element.getFoodType(), -1);
17884    }
17885  }
17886
17887  protected void composeNutritionOrderSupplementComponent(Complex parent, String parentType, String name, NutritionOrder.NutritionOrderSupplementComponent element, int index) {
17888    if (element == null) 
17889      return;
17890    Complex t;
17891    if (Utilities.noString(parentType))
17892      t = parent;
17893    else {
17894      t = parent.predicate("fhir:"+parentType+'.'+name);
17895    }
17896    composeBackboneElement(t, "supplement", name, element, index);
17897    if (element.hasType()) {
17898      composeCodeableConcept(t, "NutritionOrderSupplementComponent", "type", element.getType(), -1);
17899    }
17900    if (element.hasProductNameElement()) {
17901      composeString(t, "NutritionOrderSupplementComponent", "productName", element.getProductNameElement(), -1);
17902    }
17903    for (int i = 0; i < element.getSchedule().size(); i++) {
17904      composeTiming(t, "NutritionOrderSupplementComponent", "schedule", element.getSchedule().get(i), i);
17905    }
17906    if (element.hasQuantity()) {
17907      composeQuantity(t, "NutritionOrderSupplementComponent", "quantity", element.getQuantity(), -1);
17908    }
17909    if (element.hasInstructionElement()) {
17910      composeString(t, "NutritionOrderSupplementComponent", "instruction", element.getInstructionElement(), -1);
17911    }
17912  }
17913
17914  protected void composeNutritionOrderEnteralFormulaComponent(Complex parent, String parentType, String name, NutritionOrder.NutritionOrderEnteralFormulaComponent element, int index) {
17915    if (element == null) 
17916      return;
17917    Complex t;
17918    if (Utilities.noString(parentType))
17919      t = parent;
17920    else {
17921      t = parent.predicate("fhir:"+parentType+'.'+name);
17922    }
17923    composeBackboneElement(t, "enteralFormula", name, element, index);
17924    if (element.hasBaseFormulaType()) {
17925      composeCodeableConcept(t, "NutritionOrderEnteralFormulaComponent", "baseFormulaType", element.getBaseFormulaType(), -1);
17926    }
17927    if (element.hasBaseFormulaProductNameElement()) {
17928      composeString(t, "NutritionOrderEnteralFormulaComponent", "baseFormulaProductName", element.getBaseFormulaProductNameElement(), -1);
17929    }
17930    if (element.hasAdditiveType()) {
17931      composeCodeableConcept(t, "NutritionOrderEnteralFormulaComponent", "additiveType", element.getAdditiveType(), -1);
17932    }
17933    if (element.hasAdditiveProductNameElement()) {
17934      composeString(t, "NutritionOrderEnteralFormulaComponent", "additiveProductName", element.getAdditiveProductNameElement(), -1);
17935    }
17936    if (element.hasCaloricDensity()) {
17937      composeQuantity(t, "NutritionOrderEnteralFormulaComponent", "caloricDensity", element.getCaloricDensity(), -1);
17938    }
17939    if (element.hasRouteofAdministration()) {
17940      composeCodeableConcept(t, "NutritionOrderEnteralFormulaComponent", "routeofAdministration", element.getRouteofAdministration(), -1);
17941    }
17942    for (int i = 0; i < element.getAdministration().size(); i++) {
17943      composeNutritionOrderEnteralFormulaAdministrationComponent(t, "NutritionOrderEnteralFormulaComponent", "administration", element.getAdministration().get(i), i);
17944    }
17945    if (element.hasMaxVolumeToDeliver()) {
17946      composeQuantity(t, "NutritionOrderEnteralFormulaComponent", "maxVolumeToDeliver", element.getMaxVolumeToDeliver(), -1);
17947    }
17948    if (element.hasAdministrationInstructionElement()) {
17949      composeString(t, "NutritionOrderEnteralFormulaComponent", "administrationInstruction", element.getAdministrationInstructionElement(), -1);
17950    }
17951  }
17952
17953  protected void composeNutritionOrderEnteralFormulaAdministrationComponent(Complex parent, String parentType, String name, NutritionOrder.NutritionOrderEnteralFormulaAdministrationComponent element, int index) {
17954    if (element == null) 
17955      return;
17956    Complex t;
17957    if (Utilities.noString(parentType))
17958      t = parent;
17959    else {
17960      t = parent.predicate("fhir:"+parentType+'.'+name);
17961    }
17962    composeBackboneElement(t, "administration", name, element, index);
17963    if (element.hasSchedule()) {
17964      composeTiming(t, "NutritionOrderEnteralFormulaAdministrationComponent", "schedule", element.getSchedule(), -1);
17965    }
17966    if (element.hasQuantity()) {
17967      composeQuantity(t, "NutritionOrderEnteralFormulaAdministrationComponent", "quantity", element.getQuantity(), -1);
17968    }
17969    if (element.hasRate()) {
17970      composeType(t, "NutritionOrderEnteralFormulaAdministrationComponent", "rate", element.getRate(), -1);
17971    }
17972  }
17973
17974  protected void composeNutritionProduct(Complex parent, String parentType, String name, NutritionProduct element, int index) {
17975    if (element == null) 
17976      return;
17977    Complex t;
17978    if (Utilities.noString(parentType))
17979      t = parent;
17980    else {
17981      t = parent.predicate("fhir:"+parentType+'.'+name);
17982    }
17983    composeDomainResource(t, "NutritionProduct", name, element, index);
17984    if (element.hasStatusElement()) {
17985      composeEnum(t, "NutritionProduct", "status", element.getStatusElement(), -1);
17986    }
17987    for (int i = 0; i < element.getCategory().size(); i++) {
17988      composeCodeableConcept(t, "NutritionProduct", "category", element.getCategory().get(i), i);
17989    }
17990    if (element.hasCode()) {
17991      composeCodeableConcept(t, "NutritionProduct", "code", element.getCode(), -1);
17992    }
17993    for (int i = 0; i < element.getManufacturer().size(); i++) {
17994      composeReference(t, "NutritionProduct", "manufacturer", element.getManufacturer().get(i), i);
17995    }
17996    for (int i = 0; i < element.getNutrient().size(); i++) {
17997      composeNutritionProductNutrientComponent(t, "NutritionProduct", "nutrient", element.getNutrient().get(i), i);
17998    }
17999    for (int i = 0; i < element.getIngredient().size(); i++) {
18000      composeNutritionProductIngredientComponent(t, "NutritionProduct", "ingredient", element.getIngredient().get(i), i);
18001    }
18002    for (int i = 0; i < element.getKnownAllergen().size(); i++) {
18003      composeCodeableReference(t, "NutritionProduct", "knownAllergen", element.getKnownAllergen().get(i), i);
18004    }
18005    for (int i = 0; i < element.getProductCharacteristic().size(); i++) {
18006      composeNutritionProductProductCharacteristicComponent(t, "NutritionProduct", "productCharacteristic", element.getProductCharacteristic().get(i), i);
18007    }
18008    if (element.hasInstance()) {
18009      composeNutritionProductInstanceComponent(t, "NutritionProduct", "instance", element.getInstance(), -1);
18010    }
18011    for (int i = 0; i < element.getNote().size(); i++) {
18012      composeAnnotation(t, "NutritionProduct", "note", element.getNote().get(i), i);
18013    }
18014  }
18015
18016  protected void composeNutritionProductNutrientComponent(Complex parent, String parentType, String name, NutritionProduct.NutritionProductNutrientComponent element, int index) {
18017    if (element == null) 
18018      return;
18019    Complex t;
18020    if (Utilities.noString(parentType))
18021      t = parent;
18022    else {
18023      t = parent.predicate("fhir:"+parentType+'.'+name);
18024    }
18025    composeBackboneElement(t, "nutrient", name, element, index);
18026    if (element.hasItem()) {
18027      composeCodeableReference(t, "NutritionProductNutrientComponent", "item", element.getItem(), -1);
18028    }
18029    for (int i = 0; i < element.getAmount().size(); i++) {
18030      composeRatio(t, "NutritionProductNutrientComponent", "amount", element.getAmount().get(i), i);
18031    }
18032  }
18033
18034  protected void composeNutritionProductIngredientComponent(Complex parent, String parentType, String name, NutritionProduct.NutritionProductIngredientComponent element, int index) {
18035    if (element == null) 
18036      return;
18037    Complex t;
18038    if (Utilities.noString(parentType))
18039      t = parent;
18040    else {
18041      t = parent.predicate("fhir:"+parentType+'.'+name);
18042    }
18043    composeBackboneElement(t, "ingredient", name, element, index);
18044    if (element.hasItem()) {
18045      composeCodeableReference(t, "NutritionProductIngredientComponent", "item", element.getItem(), -1);
18046    }
18047    for (int i = 0; i < element.getAmount().size(); i++) {
18048      composeRatio(t, "NutritionProductIngredientComponent", "amount", element.getAmount().get(i), i);
18049    }
18050  }
18051
18052  protected void composeNutritionProductProductCharacteristicComponent(Complex parent, String parentType, String name, NutritionProduct.NutritionProductProductCharacteristicComponent element, int index) {
18053    if (element == null) 
18054      return;
18055    Complex t;
18056    if (Utilities.noString(parentType))
18057      t = parent;
18058    else {
18059      t = parent.predicate("fhir:"+parentType+'.'+name);
18060    }
18061    composeBackboneElement(t, "productCharacteristic", name, element, index);
18062    if (element.hasType()) {
18063      composeCodeableConcept(t, "NutritionProductProductCharacteristicComponent", "type", element.getType(), -1);
18064    }
18065    if (element.hasValue()) {
18066      composeType(t, "NutritionProductProductCharacteristicComponent", "value", element.getValue(), -1);
18067    }
18068  }
18069
18070  protected void composeNutritionProductInstanceComponent(Complex parent, String parentType, String name, NutritionProduct.NutritionProductInstanceComponent element, int index) {
18071    if (element == null) 
18072      return;
18073    Complex t;
18074    if (Utilities.noString(parentType))
18075      t = parent;
18076    else {
18077      t = parent.predicate("fhir:"+parentType+'.'+name);
18078    }
18079    composeBackboneElement(t, "instance", name, element, index);
18080    if (element.hasQuantity()) {
18081      composeQuantity(t, "NutritionProductInstanceComponent", "quantity", element.getQuantity(), -1);
18082    }
18083    for (int i = 0; i < element.getIdentifier().size(); i++) {
18084      composeIdentifier(t, "NutritionProductInstanceComponent", "identifier", element.getIdentifier().get(i), i);
18085    }
18086    if (element.hasLotNumberElement()) {
18087      composeString(t, "NutritionProductInstanceComponent", "lotNumber", element.getLotNumberElement(), -1);
18088    }
18089    if (element.hasExpiryElement()) {
18090      composeDateTime(t, "NutritionProductInstanceComponent", "expiry", element.getExpiryElement(), -1);
18091    }
18092    if (element.hasUseByElement()) {
18093      composeDateTime(t, "NutritionProductInstanceComponent", "useBy", element.getUseByElement(), -1);
18094    }
18095    if (element.hasBiologicalSource()) {
18096      composeIdentifier(t, "NutritionProductInstanceComponent", "biologicalSource", element.getBiologicalSource(), -1);
18097    }
18098  }
18099
18100  protected void composeObservation(Complex parent, String parentType, String name, Observation element, int index) {
18101    if (element == null) 
18102      return;
18103    Complex t;
18104    if (Utilities.noString(parentType))
18105      t = parent;
18106    else {
18107      t = parent.predicate("fhir:"+parentType+'.'+name);
18108    }
18109    composeDomainResource(t, "Observation", name, element, index);
18110    for (int i = 0; i < element.getIdentifier().size(); i++) {
18111      composeIdentifier(t, "Observation", "identifier", element.getIdentifier().get(i), i);
18112    }
18113    if (element.hasInstantiates()) {
18114      composeType(t, "Observation", "instantiates", element.getInstantiates(), -1);
18115    }
18116    for (int i = 0; i < element.getBasedOn().size(); i++) {
18117      composeReference(t, "Observation", "basedOn", element.getBasedOn().get(i), i);
18118    }
18119    for (int i = 0; i < element.getPartOf().size(); i++) {
18120      composeReference(t, "Observation", "partOf", element.getPartOf().get(i), i);
18121    }
18122    if (element.hasStatusElement()) {
18123      composeEnum(t, "Observation", "status", element.getStatusElement(), -1);
18124    }
18125    for (int i = 0; i < element.getCategory().size(); i++) {
18126      composeCodeableConcept(t, "Observation", "category", element.getCategory().get(i), i);
18127    }
18128    if (element.hasCode()) {
18129      composeCodeableConcept(t, "Observation", "code", element.getCode(), -1);
18130    }
18131    if (element.hasSubject()) {
18132      composeReference(t, "Observation", "subject", element.getSubject(), -1);
18133    }
18134    for (int i = 0; i < element.getFocus().size(); i++) {
18135      composeReference(t, "Observation", "focus", element.getFocus().get(i), i);
18136    }
18137    if (element.hasEncounter()) {
18138      composeReference(t, "Observation", "encounter", element.getEncounter(), -1);
18139    }
18140    if (element.hasEffective()) {
18141      composeType(t, "Observation", "effective", element.getEffective(), -1);
18142    }
18143    if (element.hasIssuedElement()) {
18144      composeInstant(t, "Observation", "issued", element.getIssuedElement(), -1);
18145    }
18146    for (int i = 0; i < element.getPerformer().size(); i++) {
18147      composeReference(t, "Observation", "performer", element.getPerformer().get(i), i);
18148    }
18149    if (element.hasValue()) {
18150      composeType(t, "Observation", "value", element.getValue(), -1);
18151    }
18152    if (element.hasDataAbsentReason()) {
18153      composeCodeableConcept(t, "Observation", "dataAbsentReason", element.getDataAbsentReason(), -1);
18154    }
18155    for (int i = 0; i < element.getInterpretation().size(); i++) {
18156      composeCodeableConcept(t, "Observation", "interpretation", element.getInterpretation().get(i), i);
18157    }
18158    for (int i = 0; i < element.getNote().size(); i++) {
18159      composeAnnotation(t, "Observation", "note", element.getNote().get(i), i);
18160    }
18161    if (element.hasBodySite()) {
18162      composeCodeableConcept(t, "Observation", "bodySite", element.getBodySite(), -1);
18163    }
18164    if (element.hasMethod()) {
18165      composeCodeableConcept(t, "Observation", "method", element.getMethod(), -1);
18166    }
18167    if (element.hasSpecimen()) {
18168      composeReference(t, "Observation", "specimen", element.getSpecimen(), -1);
18169    }
18170    if (element.hasDevice()) {
18171      composeReference(t, "Observation", "device", element.getDevice(), -1);
18172    }
18173    for (int i = 0; i < element.getReferenceRange().size(); i++) {
18174      composeObservationReferenceRangeComponent(t, "Observation", "referenceRange", element.getReferenceRange().get(i), i);
18175    }
18176    for (int i = 0; i < element.getHasMember().size(); i++) {
18177      composeReference(t, "Observation", "hasMember", element.getHasMember().get(i), i);
18178    }
18179    for (int i = 0; i < element.getDerivedFrom().size(); i++) {
18180      composeReference(t, "Observation", "derivedFrom", element.getDerivedFrom().get(i), i);
18181    }
18182    for (int i = 0; i < element.getComponent().size(); i++) {
18183      composeObservationComponentComponent(t, "Observation", "component", element.getComponent().get(i), i);
18184    }
18185  }
18186
18187  protected void composeObservationReferenceRangeComponent(Complex parent, String parentType, String name, Observation.ObservationReferenceRangeComponent element, int index) {
18188    if (element == null) 
18189      return;
18190    Complex t;
18191    if (Utilities.noString(parentType))
18192      t = parent;
18193    else {
18194      t = parent.predicate("fhir:"+parentType+'.'+name);
18195    }
18196    composeBackboneElement(t, "referenceRange", name, element, index);
18197    if (element.hasLow()) {
18198      composeQuantity(t, "ObservationReferenceRangeComponent", "low", element.getLow(), -1);
18199    }
18200    if (element.hasHigh()) {
18201      composeQuantity(t, "ObservationReferenceRangeComponent", "high", element.getHigh(), -1);
18202    }
18203    if (element.hasType()) {
18204      composeCodeableConcept(t, "ObservationReferenceRangeComponent", "type", element.getType(), -1);
18205    }
18206    for (int i = 0; i < element.getAppliesTo().size(); i++) {
18207      composeCodeableConcept(t, "ObservationReferenceRangeComponent", "appliesTo", element.getAppliesTo().get(i), i);
18208    }
18209    if (element.hasAge()) {
18210      composeRange(t, "ObservationReferenceRangeComponent", "age", element.getAge(), -1);
18211    }
18212    if (element.hasTextElement()) {
18213      composeString(t, "ObservationReferenceRangeComponent", "text", element.getTextElement(), -1);
18214    }
18215  }
18216
18217  protected void composeObservationComponentComponent(Complex parent, String parentType, String name, Observation.ObservationComponentComponent element, int index) {
18218    if (element == null) 
18219      return;
18220    Complex t;
18221    if (Utilities.noString(parentType))
18222      t = parent;
18223    else {
18224      t = parent.predicate("fhir:"+parentType+'.'+name);
18225    }
18226    composeBackboneElement(t, "component", name, element, index);
18227    if (element.hasCode()) {
18228      composeCodeableConcept(t, "ObservationComponentComponent", "code", element.getCode(), -1);
18229    }
18230    if (element.hasValue()) {
18231      composeType(t, "ObservationComponentComponent", "value", element.getValue(), -1);
18232    }
18233    if (element.hasDataAbsentReason()) {
18234      composeCodeableConcept(t, "ObservationComponentComponent", "dataAbsentReason", element.getDataAbsentReason(), -1);
18235    }
18236    for (int i = 0; i < element.getInterpretation().size(); i++) {
18237      composeCodeableConcept(t, "ObservationComponentComponent", "interpretation", element.getInterpretation().get(i), i);
18238    }
18239    for (int i = 0; i < element.getReferenceRange().size(); i++) {
18240      composeObservationReferenceRangeComponent(t, "ObservationComponentComponent", "referenceRange", element.getReferenceRange().get(i), i);
18241    }
18242  }
18243
18244  protected void composeObservationDefinition(Complex parent, String parentType, String name, ObservationDefinition 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:"+parentType+'.'+name);
18252    }
18253    composeDomainResource(t, "ObservationDefinition", name, element, index);
18254    if (element.hasUrlElement()) {
18255      composeUri(t, "ObservationDefinition", "url", element.getUrlElement(), -1);
18256    }
18257    if (element.hasIdentifier()) {
18258      composeIdentifier(t, "ObservationDefinition", "identifier", element.getIdentifier(), -1);
18259    }
18260    if (element.hasVersionElement()) {
18261      composeString(t, "ObservationDefinition", "version", element.getVersionElement(), -1);
18262    }
18263    if (element.hasNameElement()) {
18264      composeString(t, "ObservationDefinition", "name", element.getNameElement(), -1);
18265    }
18266    if (element.hasTitleElement()) {
18267      composeString(t, "ObservationDefinition", "title", element.getTitleElement(), -1);
18268    }
18269    if (element.hasStatusElement()) {
18270      composeEnum(t, "ObservationDefinition", "status", element.getStatusElement(), -1);
18271    }
18272    if (element.hasExperimentalElement()) {
18273      composeBoolean(t, "ObservationDefinition", "experimental", element.getExperimentalElement(), -1);
18274    }
18275    if (element.hasDateElement()) {
18276      composeDateTime(t, "ObservationDefinition", "date", element.getDateElement(), -1);
18277    }
18278    if (element.hasPublisher()) {
18279      composeReference(t, "ObservationDefinition", "publisher", element.getPublisher(), -1);
18280    }
18281    for (int i = 0; i < element.getContact().size(); i++) {
18282      composeContactDetail(t, "ObservationDefinition", "contact", element.getContact().get(i), i);
18283    }
18284    if (element.hasDescriptionElement()) {
18285      composeMarkdown(t, "ObservationDefinition", "description", element.getDescriptionElement(), -1);
18286    }
18287    for (int i = 0; i < element.getUseContext().size(); i++) {
18288      composeUsageContext(t, "ObservationDefinition", "useContext", element.getUseContext().get(i), i);
18289    }
18290    for (int i = 0; i < element.getJurisdiction().size(); i++) {
18291      composeCodeableConcept(t, "ObservationDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
18292    }
18293    if (element.hasPurposeElement()) {
18294      composeMarkdown(t, "ObservationDefinition", "purpose", element.getPurposeElement(), -1);
18295    }
18296    if (element.hasCopyrightElement()) {
18297      composeMarkdown(t, "ObservationDefinition", "copyright", element.getCopyrightElement(), -1);
18298    }
18299    if (element.hasApprovalDateElement()) {
18300      composeDate(t, "ObservationDefinition", "approvalDate", element.getApprovalDateElement(), -1);
18301    }
18302    if (element.hasLastReviewDateElement()) {
18303      composeDate(t, "ObservationDefinition", "lastReviewDate", element.getLastReviewDateElement(), -1);
18304    }
18305    if (element.hasEffectivePeriod()) {
18306      composePeriod(t, "ObservationDefinition", "effectivePeriod", element.getEffectivePeriod(), -1);
18307    }
18308    for (int i = 0; i < element.getDerivedFromCanonical().size(); i++) {
18309      composeCanonical(t, "ObservationDefinition", "derivedFromCanonical", element.getDerivedFromCanonical().get(i), i);
18310    }
18311    for (int i = 0; i < element.getDerivedFromUri().size(); i++) {
18312      composeUri(t, "ObservationDefinition", "derivedFromUri", element.getDerivedFromUri().get(i), i);
18313    }
18314    for (int i = 0; i < element.getSubject().size(); i++) {
18315      composeCodeableConcept(t, "ObservationDefinition", "subject", element.getSubject().get(i), i);
18316    }
18317    if (element.hasPerformerType()) {
18318      composeCodeableConcept(t, "ObservationDefinition", "performerType", element.getPerformerType(), -1);
18319    }
18320    for (int i = 0; i < element.getCategory().size(); i++) {
18321      composeCodeableConcept(t, "ObservationDefinition", "category", element.getCategory().get(i), i);
18322    }
18323    if (element.hasCode()) {
18324      composeCodeableConcept(t, "ObservationDefinition", "code", element.getCode(), -1);
18325    }
18326    for (int i = 0; i < element.getPermittedDataType().size(); i++) {
18327      composeEnum(t, "ObservationDefinition", "permittedDataType", element.getPermittedDataType().get(i), i);
18328    }
18329    if (element.hasMultipleResultsAllowedElement()) {
18330      composeBoolean(t, "ObservationDefinition", "multipleResultsAllowed", element.getMultipleResultsAllowedElement(), -1);
18331    }
18332    if (element.hasBodySite()) {
18333      composeCodeableConcept(t, "ObservationDefinition", "bodySite", element.getBodySite(), -1);
18334    }
18335    if (element.hasMethod()) {
18336      composeCodeableConcept(t, "ObservationDefinition", "method", element.getMethod(), -1);
18337    }
18338    for (int i = 0; i < element.getSpecimen().size(); i++) {
18339      composeReference(t, "ObservationDefinition", "specimen", element.getSpecimen().get(i), i);
18340    }
18341    for (int i = 0; i < element.getDevice().size(); i++) {
18342      composeReference(t, "ObservationDefinition", "device", element.getDevice().get(i), i);
18343    }
18344    if (element.hasPreferredReportNameElement()) {
18345      composeString(t, "ObservationDefinition", "preferredReportName", element.getPreferredReportNameElement(), -1);
18346    }
18347    if (element.hasQuantitativeDetails()) {
18348      composeObservationDefinitionQuantitativeDetailsComponent(t, "ObservationDefinition", "quantitativeDetails", element.getQuantitativeDetails(), -1);
18349    }
18350    for (int i = 0; i < element.getQualifiedValue().size(); i++) {
18351      composeObservationDefinitionQualifiedValueComponent(t, "ObservationDefinition", "qualifiedValue", element.getQualifiedValue().get(i), i);
18352    }
18353    for (int i = 0; i < element.getHasMember().size(); i++) {
18354      composeReference(t, "ObservationDefinition", "hasMember", element.getHasMember().get(i), i);
18355    }
18356    for (int i = 0; i < element.getComponent().size(); i++) {
18357      composeObservationDefinitionComponentComponent(t, "ObservationDefinition", "component", element.getComponent().get(i), i);
18358    }
18359  }
18360
18361  protected void composeObservationDefinitionQuantitativeDetailsComponent(Complex parent, String parentType, String name, ObservationDefinition.ObservationDefinitionQuantitativeDetailsComponent element, int index) {
18362    if (element == null) 
18363      return;
18364    Complex t;
18365    if (Utilities.noString(parentType))
18366      t = parent;
18367    else {
18368      t = parent.predicate("fhir:"+parentType+'.'+name);
18369    }
18370    composeBackboneElement(t, "quantitativeDetails", name, element, index);
18371    if (element.hasUnit()) {
18372      composeCodeableConcept(t, "ObservationDefinitionQuantitativeDetailsComponent", "unit", element.getUnit(), -1);
18373    }
18374    if (element.hasCustomaryUnit()) {
18375      composeCodeableConcept(t, "ObservationDefinitionQuantitativeDetailsComponent", "customaryUnit", element.getCustomaryUnit(), -1);
18376    }
18377    if (element.hasConversionFactorElement()) {
18378      composeDecimal(t, "ObservationDefinitionQuantitativeDetailsComponent", "conversionFactor", element.getConversionFactorElement(), -1);
18379    }
18380    if (element.hasDecimalPrecisionElement()) {
18381      composeInteger(t, "ObservationDefinitionQuantitativeDetailsComponent", "decimalPrecision", element.getDecimalPrecisionElement(), -1);
18382    }
18383  }
18384
18385  protected void composeObservationDefinitionQualifiedValueComponent(Complex parent, String parentType, String name, ObservationDefinition.ObservationDefinitionQualifiedValueComponent element, int index) {
18386    if (element == null) 
18387      return;
18388    Complex t;
18389    if (Utilities.noString(parentType))
18390      t = parent;
18391    else {
18392      t = parent.predicate("fhir:"+parentType+'.'+name);
18393    }
18394    composeBackboneElement(t, "qualifiedValue", name, element, index);
18395    if (element.hasContext()) {
18396      composeCodeableConcept(t, "ObservationDefinitionQualifiedValueComponent", "context", element.getContext(), -1);
18397    }
18398    for (int i = 0; i < element.getAppliesTo().size(); i++) {
18399      composeCodeableConcept(t, "ObservationDefinitionQualifiedValueComponent", "appliesTo", element.getAppliesTo().get(i), i);
18400    }
18401    if (element.hasGenderElement()) {
18402      composeEnum(t, "ObservationDefinitionQualifiedValueComponent", "gender", element.getGenderElement(), -1);
18403    }
18404    if (element.hasAge()) {
18405      composeRange(t, "ObservationDefinitionQualifiedValueComponent", "age", element.getAge(), -1);
18406    }
18407    if (element.hasGestationalAge()) {
18408      composeRange(t, "ObservationDefinitionQualifiedValueComponent", "gestationalAge", element.getGestationalAge(), -1);
18409    }
18410    if (element.hasConditionElement()) {
18411      composeString(t, "ObservationDefinitionQualifiedValueComponent", "condition", element.getConditionElement(), -1);
18412    }
18413    if (element.hasRangeCategoryElement()) {
18414      composeEnum(t, "ObservationDefinitionQualifiedValueComponent", "rangeCategory", element.getRangeCategoryElement(), -1);
18415    }
18416    if (element.hasRange()) {
18417      composeRange(t, "ObservationDefinitionQualifiedValueComponent", "range", element.getRange(), -1);
18418    }
18419    if (element.hasValidCodedValueSetElement()) {
18420      composeCanonical(t, "ObservationDefinitionQualifiedValueComponent", "validCodedValueSet", element.getValidCodedValueSetElement(), -1);
18421    }
18422    if (element.hasNormalCodedValueSetElement()) {
18423      composeCanonical(t, "ObservationDefinitionQualifiedValueComponent", "normalCodedValueSet", element.getNormalCodedValueSetElement(), -1);
18424    }
18425    if (element.hasAbnormalCodedValueSetElement()) {
18426      composeCanonical(t, "ObservationDefinitionQualifiedValueComponent", "abnormalCodedValueSet", element.getAbnormalCodedValueSetElement(), -1);
18427    }
18428    if (element.hasCriticalCodedValueSetElement()) {
18429      composeCanonical(t, "ObservationDefinitionQualifiedValueComponent", "criticalCodedValueSet", element.getCriticalCodedValueSetElement(), -1);
18430    }
18431  }
18432
18433  protected void composeObservationDefinitionComponentComponent(Complex parent, String parentType, String name, ObservationDefinition.ObservationDefinitionComponentComponent element, int index) {
18434    if (element == null) 
18435      return;
18436    Complex t;
18437    if (Utilities.noString(parentType))
18438      t = parent;
18439    else {
18440      t = parent.predicate("fhir:"+parentType+'.'+name);
18441    }
18442    composeBackboneElement(t, "component", name, element, index);
18443    if (element.hasCode()) {
18444      composeCodeableConcept(t, "ObservationDefinitionComponentComponent", "code", element.getCode(), -1);
18445    }
18446    for (int i = 0; i < element.getPermittedDataType().size(); i++) {
18447      composeEnum(t, "ObservationDefinitionComponentComponent", "permittedDataType", element.getPermittedDataType().get(i), i);
18448    }
18449    if (element.hasQuantitativeDetails()) {
18450      composeObservationDefinitionQuantitativeDetailsComponent(t, "ObservationDefinitionComponentComponent", "quantitativeDetails", element.getQuantitativeDetails(), -1);
18451    }
18452    for (int i = 0; i < element.getQualifiedValue().size(); i++) {
18453      composeObservationDefinitionQualifiedValueComponent(t, "ObservationDefinitionComponentComponent", "qualifiedValue", element.getQualifiedValue().get(i), i);
18454    }
18455  }
18456
18457  protected void composeOperationDefinition(Complex parent, String parentType, String name, OperationDefinition 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:"+parentType+'.'+name);
18465    }
18466    composeCanonicalResource(t, "OperationDefinition", name, element, index);
18467    if (element.hasUrlElement()) {
18468      composeUri(t, "OperationDefinition", "url", element.getUrlElement(), -1);
18469    }
18470    if (element.hasVersionElement()) {
18471      composeString(t, "OperationDefinition", "version", element.getVersionElement(), -1);
18472    }
18473    if (element.hasNameElement()) {
18474      composeString(t, "OperationDefinition", "name", element.getNameElement(), -1);
18475    }
18476    if (element.hasTitleElement()) {
18477      composeString(t, "OperationDefinition", "title", element.getTitleElement(), -1);
18478    }
18479    if (element.hasStatusElement()) {
18480      composeEnum(t, "OperationDefinition", "status", element.getStatusElement(), -1);
18481    }
18482    if (element.hasKindElement()) {
18483      composeEnum(t, "OperationDefinition", "kind", element.getKindElement(), -1);
18484    }
18485    if (element.hasExperimentalElement()) {
18486      composeBoolean(t, "OperationDefinition", "experimental", element.getExperimentalElement(), -1);
18487    }
18488    if (element.hasDateElement()) {
18489      composeDateTime(t, "OperationDefinition", "date", element.getDateElement(), -1);
18490    }
18491    if (element.hasPublisherElement()) {
18492      composeString(t, "OperationDefinition", "publisher", element.getPublisherElement(), -1);
18493    }
18494    for (int i = 0; i < element.getContact().size(); i++) {
18495      composeContactDetail(t, "OperationDefinition", "contact", element.getContact().get(i), i);
18496    }
18497    if (element.hasDescriptionElement()) {
18498      composeMarkdown(t, "OperationDefinition", "description", element.getDescriptionElement(), -1);
18499    }
18500    for (int i = 0; i < element.getUseContext().size(); i++) {
18501      composeUsageContext(t, "OperationDefinition", "useContext", element.getUseContext().get(i), i);
18502    }
18503    for (int i = 0; i < element.getJurisdiction().size(); i++) {
18504      composeCodeableConcept(t, "OperationDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
18505    }
18506    if (element.hasPurposeElement()) {
18507      composeMarkdown(t, "OperationDefinition", "purpose", element.getPurposeElement(), -1);
18508    }
18509    if (element.hasAffectsStateElement()) {
18510      composeBoolean(t, "OperationDefinition", "affectsState", element.getAffectsStateElement(), -1);
18511    }
18512    if (element.hasCodeElement()) {
18513      composeCode(t, "OperationDefinition", "code", element.getCodeElement(), -1);
18514    }
18515    if (element.hasCommentElement()) {
18516      composeMarkdown(t, "OperationDefinition", "comment", element.getCommentElement(), -1);
18517    }
18518    if (element.hasBaseElement()) {
18519      composeCanonical(t, "OperationDefinition", "base", element.getBaseElement(), -1);
18520    }
18521    for (int i = 0; i < element.getResource().size(); i++) {
18522      composeCode(t, "OperationDefinition", "resource", element.getResource().get(i), i);
18523    }
18524    if (element.hasSystemElement()) {
18525      composeBoolean(t, "OperationDefinition", "system", element.getSystemElement(), -1);
18526    }
18527    if (element.hasTypeElement()) {
18528      composeBoolean(t, "OperationDefinition", "type", element.getTypeElement(), -1);
18529    }
18530    if (element.hasInstanceElement()) {
18531      composeBoolean(t, "OperationDefinition", "instance", element.getInstanceElement(), -1);
18532    }
18533    if (element.hasInputProfileElement()) {
18534      composeCanonical(t, "OperationDefinition", "inputProfile", element.getInputProfileElement(), -1);
18535    }
18536    if (element.hasOutputProfileElement()) {
18537      composeCanonical(t, "OperationDefinition", "outputProfile", element.getOutputProfileElement(), -1);
18538    }
18539    for (int i = 0; i < element.getParameter().size(); i++) {
18540      composeOperationDefinitionParameterComponent(t, "OperationDefinition", "parameter", element.getParameter().get(i), i);
18541    }
18542    for (int i = 0; i < element.getOverload().size(); i++) {
18543      composeOperationDefinitionOverloadComponent(t, "OperationDefinition", "overload", element.getOverload().get(i), i);
18544    }
18545  }
18546
18547  protected void composeOperationDefinitionParameterComponent(Complex parent, String parentType, String name, OperationDefinition.OperationDefinitionParameterComponent element, int index) {
18548    if (element == null) 
18549      return;
18550    Complex t;
18551    if (Utilities.noString(parentType))
18552      t = parent;
18553    else {
18554      t = parent.predicate("fhir:"+parentType+'.'+name);
18555    }
18556    composeBackboneElement(t, "parameter", name, element, index);
18557    if (element.hasNameElement()) {
18558      composeCode(t, "OperationDefinitionParameterComponent", "name", element.getNameElement(), -1);
18559    }
18560    if (element.hasUseElement()) {
18561      composeEnum(t, "OperationDefinitionParameterComponent", "use", element.getUseElement(), -1);
18562    }
18563    if (element.hasMinElement()) {
18564      composeInteger(t, "OperationDefinitionParameterComponent", "min", element.getMinElement(), -1);
18565    }
18566    if (element.hasMaxElement()) {
18567      composeString(t, "OperationDefinitionParameterComponent", "max", element.getMaxElement(), -1);
18568    }
18569    if (element.hasDocumentationElement()) {
18570      composeString(t, "OperationDefinitionParameterComponent", "documentation", element.getDocumentationElement(), -1);
18571    }
18572    if (element.hasTypeElement()) {
18573      composeEnum(t, "OperationDefinitionParameterComponent", "type", element.getTypeElement(), -1);
18574    }
18575    for (int i = 0; i < element.getTargetProfile().size(); i++) {
18576      composeCanonical(t, "OperationDefinitionParameterComponent", "targetProfile", element.getTargetProfile().get(i), i);
18577    }
18578    if (element.hasSearchTypeElement()) {
18579      composeEnum(t, "OperationDefinitionParameterComponent", "searchType", element.getSearchTypeElement(), -1);
18580    }
18581    if (element.hasBinding()) {
18582      composeOperationDefinitionParameterBindingComponent(t, "OperationDefinitionParameterComponent", "binding", element.getBinding(), -1);
18583    }
18584    for (int i = 0; i < element.getReferencedFrom().size(); i++) {
18585      composeOperationDefinitionParameterReferencedFromComponent(t, "OperationDefinitionParameterComponent", "referencedFrom", element.getReferencedFrom().get(i), i);
18586    }
18587    for (int i = 0; i < element.getPart().size(); i++) {
18588      composeOperationDefinitionParameterComponent(t, "OperationDefinitionParameterComponent", "part", element.getPart().get(i), i);
18589    }
18590  }
18591
18592  protected void composeOperationDefinitionParameterBindingComponent(Complex parent, String parentType, String name, OperationDefinition.OperationDefinitionParameterBindingComponent element, int index) {
18593    if (element == null) 
18594      return;
18595    Complex t;
18596    if (Utilities.noString(parentType))
18597      t = parent;
18598    else {
18599      t = parent.predicate("fhir:"+parentType+'.'+name);
18600    }
18601    composeBackboneElement(t, "binding", name, element, index);
18602    if (element.hasStrengthElement()) {
18603      composeEnum(t, "OperationDefinitionParameterBindingComponent", "strength", element.getStrengthElement(), -1);
18604    }
18605    if (element.hasValueSetElement()) {
18606      composeCanonical(t, "OperationDefinitionParameterBindingComponent", "valueSet", element.getValueSetElement(), -1);
18607    }
18608  }
18609
18610  protected void composeOperationDefinitionParameterReferencedFromComponent(Complex parent, String parentType, String name, OperationDefinition.OperationDefinitionParameterReferencedFromComponent element, int index) {
18611    if (element == null) 
18612      return;
18613    Complex t;
18614    if (Utilities.noString(parentType))
18615      t = parent;
18616    else {
18617      t = parent.predicate("fhir:"+parentType+'.'+name);
18618    }
18619    composeBackboneElement(t, "referencedFrom", name, element, index);
18620    if (element.hasSourceElement()) {
18621      composeString(t, "OperationDefinitionParameterReferencedFromComponent", "source", element.getSourceElement(), -1);
18622    }
18623    if (element.hasSourceIdElement()) {
18624      composeString(t, "OperationDefinitionParameterReferencedFromComponent", "sourceId", element.getSourceIdElement(), -1);
18625    }
18626  }
18627
18628  protected void composeOperationDefinitionOverloadComponent(Complex parent, String parentType, String name, OperationDefinition.OperationDefinitionOverloadComponent element, int index) {
18629    if (element == null) 
18630      return;
18631    Complex t;
18632    if (Utilities.noString(parentType))
18633      t = parent;
18634    else {
18635      t = parent.predicate("fhir:"+parentType+'.'+name);
18636    }
18637    composeBackboneElement(t, "overload", name, element, index);
18638    for (int i = 0; i < element.getParameterName().size(); i++) {
18639      composeString(t, "OperationDefinitionOverloadComponent", "parameterName", element.getParameterName().get(i), i);
18640    }
18641    if (element.hasCommentElement()) {
18642      composeString(t, "OperationDefinitionOverloadComponent", "comment", element.getCommentElement(), -1);
18643    }
18644  }
18645
18646  protected void composeOperationOutcome(Complex parent, String parentType, String name, OperationOutcome element, int index) {
18647    if (element == null) 
18648      return;
18649    Complex t;
18650    if (Utilities.noString(parentType))
18651      t = parent;
18652    else {
18653      t = parent.predicate("fhir:"+parentType+'.'+name);
18654    }
18655    composeDomainResource(t, "OperationOutcome", name, element, index);
18656    for (int i = 0; i < element.getIssue().size(); i++) {
18657      composeOperationOutcomeIssueComponent(t, "OperationOutcome", "issue", element.getIssue().get(i), i);
18658    }
18659  }
18660
18661  protected void composeOperationOutcomeIssueComponent(Complex parent, String parentType, String name, OperationOutcome.OperationOutcomeIssueComponent element, int index) {
18662    if (element == null) 
18663      return;
18664    Complex t;
18665    if (Utilities.noString(parentType))
18666      t = parent;
18667    else {
18668      t = parent.predicate("fhir:"+parentType+'.'+name);
18669    }
18670    composeBackboneElement(t, "issue", name, element, index);
18671    if (element.hasSeverityElement()) {
18672      composeEnum(t, "OperationOutcomeIssueComponent", "severity", element.getSeverityElement(), -1);
18673    }
18674    if (element.hasCodeElement()) {
18675      composeEnum(t, "OperationOutcomeIssueComponent", "code", element.getCodeElement(), -1);
18676    }
18677    if (element.hasDetails()) {
18678      composeCodeableConcept(t, "OperationOutcomeIssueComponent", "details", element.getDetails(), -1);
18679    }
18680    if (element.hasDiagnosticsElement()) {
18681      composeString(t, "OperationOutcomeIssueComponent", "diagnostics", element.getDiagnosticsElement(), -1);
18682    }
18683    for (int i = 0; i < element.getLocation().size(); i++) {
18684      composeString(t, "OperationOutcomeIssueComponent", "location", element.getLocation().get(i), i);
18685    }
18686    for (int i = 0; i < element.getExpression().size(); i++) {
18687      composeString(t, "OperationOutcomeIssueComponent", "expression", element.getExpression().get(i), i);
18688    }
18689  }
18690
18691  protected void composeOrganization(Complex parent, String parentType, String name, Organization element, int index) {
18692    if (element == null) 
18693      return;
18694    Complex t;
18695    if (Utilities.noString(parentType))
18696      t = parent;
18697    else {
18698      t = parent.predicate("fhir:"+parentType+'.'+name);
18699    }
18700    composeDomainResource(t, "Organization", name, element, index);
18701    for (int i = 0; i < element.getIdentifier().size(); i++) {
18702      composeIdentifier(t, "Organization", "identifier", element.getIdentifier().get(i), i);
18703    }
18704    if (element.hasActiveElement()) {
18705      composeBoolean(t, "Organization", "active", element.getActiveElement(), -1);
18706    }
18707    for (int i = 0; i < element.getType().size(); i++) {
18708      composeCodeableConcept(t, "Organization", "type", element.getType().get(i), i);
18709    }
18710    if (element.hasNameElement()) {
18711      composeString(t, "Organization", "name", element.getNameElement(), -1);
18712    }
18713    for (int i = 0; i < element.getAlias().size(); i++) {
18714      composeString(t, "Organization", "alias", element.getAlias().get(i), i);
18715    }
18716    for (int i = 0; i < element.getTelecom().size(); i++) {
18717      composeContactPoint(t, "Organization", "telecom", element.getTelecom().get(i), i);
18718    }
18719    for (int i = 0; i < element.getAddress().size(); i++) {
18720      composeAddress(t, "Organization", "address", element.getAddress().get(i), i);
18721    }
18722    if (element.hasPartOf()) {
18723      composeReference(t, "Organization", "partOf", element.getPartOf(), -1);
18724    }
18725    for (int i = 0; i < element.getContact().size(); i++) {
18726      composeOrganizationContactComponent(t, "Organization", "contact", element.getContact().get(i), i);
18727    }
18728    for (int i = 0; i < element.getEndpoint().size(); i++) {
18729      composeReference(t, "Organization", "endpoint", element.getEndpoint().get(i), i);
18730    }
18731  }
18732
18733  protected void composeOrganizationContactComponent(Complex parent, String parentType, String name, Organization.OrganizationContactComponent element, int index) {
18734    if (element == null) 
18735      return;
18736    Complex t;
18737    if (Utilities.noString(parentType))
18738      t = parent;
18739    else {
18740      t = parent.predicate("fhir:"+parentType+'.'+name);
18741    }
18742    composeBackboneElement(t, "contact", name, element, index);
18743    if (element.hasPurpose()) {
18744      composeCodeableConcept(t, "OrganizationContactComponent", "purpose", element.getPurpose(), -1);
18745    }
18746    if (element.hasName()) {
18747      composeHumanName(t, "OrganizationContactComponent", "name", element.getName(), -1);
18748    }
18749    for (int i = 0; i < element.getTelecom().size(); i++) {
18750      composeContactPoint(t, "OrganizationContactComponent", "telecom", element.getTelecom().get(i), i);
18751    }
18752    if (element.hasAddress()) {
18753      composeAddress(t, "OrganizationContactComponent", "address", element.getAddress(), -1);
18754    }
18755  }
18756
18757  protected void composeOrganizationAffiliation(Complex parent, String parentType, String name, OrganizationAffiliation element, int index) {
18758    if (element == null) 
18759      return;
18760    Complex t;
18761    if (Utilities.noString(parentType))
18762      t = parent;
18763    else {
18764      t = parent.predicate("fhir:"+parentType+'.'+name);
18765    }
18766    composeDomainResource(t, "OrganizationAffiliation", name, element, index);
18767    for (int i = 0; i < element.getIdentifier().size(); i++) {
18768      composeIdentifier(t, "OrganizationAffiliation", "identifier", element.getIdentifier().get(i), i);
18769    }
18770    if (element.hasActiveElement()) {
18771      composeBoolean(t, "OrganizationAffiliation", "active", element.getActiveElement(), -1);
18772    }
18773    if (element.hasPeriod()) {
18774      composePeriod(t, "OrganizationAffiliation", "period", element.getPeriod(), -1);
18775    }
18776    if (element.hasOrganization()) {
18777      composeReference(t, "OrganizationAffiliation", "organization", element.getOrganization(), -1);
18778    }
18779    if (element.hasParticipatingOrganization()) {
18780      composeReference(t, "OrganizationAffiliation", "participatingOrganization", element.getParticipatingOrganization(), -1);
18781    }
18782    for (int i = 0; i < element.getNetwork().size(); i++) {
18783      composeReference(t, "OrganizationAffiliation", "network", element.getNetwork().get(i), i);
18784    }
18785    for (int i = 0; i < element.getCode().size(); i++) {
18786      composeCodeableConcept(t, "OrganizationAffiliation", "code", element.getCode().get(i), i);
18787    }
18788    for (int i = 0; i < element.getSpecialty().size(); i++) {
18789      composeCodeableConcept(t, "OrganizationAffiliation", "specialty", element.getSpecialty().get(i), i);
18790    }
18791    for (int i = 0; i < element.getLocation().size(); i++) {
18792      composeReference(t, "OrganizationAffiliation", "location", element.getLocation().get(i), i);
18793    }
18794    for (int i = 0; i < element.getHealthcareService().size(); i++) {
18795      composeReference(t, "OrganizationAffiliation", "healthcareService", element.getHealthcareService().get(i), i);
18796    }
18797    for (int i = 0; i < element.getTelecom().size(); i++) {
18798      composeContactPoint(t, "OrganizationAffiliation", "telecom", element.getTelecom().get(i), i);
18799    }
18800    for (int i = 0; i < element.getEndpoint().size(); i++) {
18801      composeReference(t, "OrganizationAffiliation", "endpoint", element.getEndpoint().get(i), i);
18802    }
18803  }
18804
18805  protected void composePackagedProductDefinition(Complex parent, String parentType, String name, PackagedProductDefinition element, int index) {
18806    if (element == null) 
18807      return;
18808    Complex t;
18809    if (Utilities.noString(parentType))
18810      t = parent;
18811    else {
18812      t = parent.predicate("fhir:"+parentType+'.'+name);
18813    }
18814    composeDomainResource(t, "PackagedProductDefinition", name, element, index);
18815    for (int i = 0; i < element.getIdentifier().size(); i++) {
18816      composeIdentifier(t, "PackagedProductDefinition", "identifier", element.getIdentifier().get(i), i);
18817    }
18818    if (element.hasNameElement()) {
18819      composeString(t, "PackagedProductDefinition", "name", element.getNameElement(), -1);
18820    }
18821    if (element.hasType()) {
18822      composeCodeableConcept(t, "PackagedProductDefinition", "type", element.getType(), -1);
18823    }
18824    for (int i = 0; i < element.getPackageFor().size(); i++) {
18825      composeReference(t, "PackagedProductDefinition", "packageFor", element.getPackageFor().get(i), i);
18826    }
18827    if (element.hasStatus()) {
18828      composeCodeableConcept(t, "PackagedProductDefinition", "status", element.getStatus(), -1);
18829    }
18830    if (element.hasStatusDateElement()) {
18831      composeDateTime(t, "PackagedProductDefinition", "statusDate", element.getStatusDateElement(), -1);
18832    }
18833    for (int i = 0; i < element.getContainedItemQuantity().size(); i++) {
18834      composeQuantity(t, "PackagedProductDefinition", "containedItemQuantity", element.getContainedItemQuantity().get(i), i);
18835    }
18836    if (element.hasDescriptionElement()) {
18837      composeMarkdown(t, "PackagedProductDefinition", "description", element.getDescriptionElement(), -1);
18838    }
18839    for (int i = 0; i < element.getLegalStatusOfSupply().size(); i++) {
18840      composePackagedProductDefinitionLegalStatusOfSupplyComponent(t, "PackagedProductDefinition", "legalStatusOfSupply", element.getLegalStatusOfSupply().get(i), i);
18841    }
18842    for (int i = 0; i < element.getMarketingStatus().size(); i++) {
18843      composeMarketingStatus(t, "PackagedProductDefinition", "marketingStatus", element.getMarketingStatus().get(i), i);
18844    }
18845    for (int i = 0; i < element.getCharacteristic().size(); i++) {
18846      composeCodeableConcept(t, "PackagedProductDefinition", "characteristic", element.getCharacteristic().get(i), i);
18847    }
18848    if (element.hasCopackagedIndicatorElement()) {
18849      composeBoolean(t, "PackagedProductDefinition", "copackagedIndicator", element.getCopackagedIndicatorElement(), -1);
18850    }
18851    for (int i = 0; i < element.getManufacturer().size(); i++) {
18852      composeReference(t, "PackagedProductDefinition", "manufacturer", element.getManufacturer().get(i), i);
18853    }
18854    for (int i = 0; i < element.getAttachedDocument().size(); i++) {
18855      composeReference(t, "PackagedProductDefinition", "attachedDocument", element.getAttachedDocument().get(i), i);
18856    }
18857    if (element.hasPackage()) {
18858      composePackagedProductDefinitionPackageComponent(t, "PackagedProductDefinition", "package", element.getPackage(), -1);
18859    }
18860  }
18861
18862  protected void composePackagedProductDefinitionLegalStatusOfSupplyComponent(Complex parent, String parentType, String name, PackagedProductDefinition.PackagedProductDefinitionLegalStatusOfSupplyComponent element, int index) {
18863    if (element == null) 
18864      return;
18865    Complex t;
18866    if (Utilities.noString(parentType))
18867      t = parent;
18868    else {
18869      t = parent.predicate("fhir:"+parentType+'.'+name);
18870    }
18871    composeBackboneElement(t, "legalStatusOfSupply", name, element, index);
18872    if (element.hasCode()) {
18873      composeCodeableConcept(t, "PackagedProductDefinitionLegalStatusOfSupplyComponent", "code", element.getCode(), -1);
18874    }
18875    if (element.hasJurisdiction()) {
18876      composeCodeableConcept(t, "PackagedProductDefinitionLegalStatusOfSupplyComponent", "jurisdiction", element.getJurisdiction(), -1);
18877    }
18878  }
18879
18880  protected void composePackagedProductDefinitionPackageComponent(Complex parent, String parentType, String name, PackagedProductDefinition.PackagedProductDefinitionPackageComponent element, int index) {
18881    if (element == null) 
18882      return;
18883    Complex t;
18884    if (Utilities.noString(parentType))
18885      t = parent;
18886    else {
18887      t = parent.predicate("fhir:"+parentType+'.'+name);
18888    }
18889    composeBackboneElement(t, "package", name, element, index);
18890    for (int i = 0; i < element.getIdentifier().size(); i++) {
18891      composeIdentifier(t, "PackagedProductDefinitionPackageComponent", "identifier", element.getIdentifier().get(i), i);
18892    }
18893    if (element.hasType()) {
18894      composeCodeableConcept(t, "PackagedProductDefinitionPackageComponent", "type", element.getType(), -1);
18895    }
18896    if (element.hasQuantityElement()) {
18897      composeInteger(t, "PackagedProductDefinitionPackageComponent", "quantity", element.getQuantityElement(), -1);
18898    }
18899    for (int i = 0; i < element.getMaterial().size(); i++) {
18900      composeCodeableConcept(t, "PackagedProductDefinitionPackageComponent", "material", element.getMaterial().get(i), i);
18901    }
18902    for (int i = 0; i < element.getAlternateMaterial().size(); i++) {
18903      composeCodeableConcept(t, "PackagedProductDefinitionPackageComponent", "alternateMaterial", element.getAlternateMaterial().get(i), i);
18904    }
18905    for (int i = 0; i < element.getShelfLifeStorage().size(); i++) {
18906      composeProductShelfLife(t, "PackagedProductDefinitionPackageComponent", "shelfLifeStorage", element.getShelfLifeStorage().get(i), i);
18907    }
18908    for (int i = 0; i < element.getManufacturer().size(); i++) {
18909      composeReference(t, "PackagedProductDefinitionPackageComponent", "manufacturer", element.getManufacturer().get(i), i);
18910    }
18911    for (int i = 0; i < element.getProperty().size(); i++) {
18912      composePackagedProductDefinitionPackagePropertyComponent(t, "PackagedProductDefinitionPackageComponent", "property", element.getProperty().get(i), i);
18913    }
18914    for (int i = 0; i < element.getContainedItem().size(); i++) {
18915      composePackagedProductDefinitionPackageContainedItemComponent(t, "PackagedProductDefinitionPackageComponent", "containedItem", element.getContainedItem().get(i), i);
18916    }
18917    for (int i = 0; i < element.getPackage().size(); i++) {
18918      composePackagedProductDefinitionPackageComponent(t, "PackagedProductDefinitionPackageComponent", "package", element.getPackage().get(i), i);
18919    }
18920  }
18921
18922  protected void composePackagedProductDefinitionPackagePropertyComponent(Complex parent, String parentType, String name, PackagedProductDefinition.PackagedProductDefinitionPackagePropertyComponent element, int index) {
18923    if (element == null) 
18924      return;
18925    Complex t;
18926    if (Utilities.noString(parentType))
18927      t = parent;
18928    else {
18929      t = parent.predicate("fhir:"+parentType+'.'+name);
18930    }
18931    composeBackboneElement(t, "property", name, element, index);
18932    if (element.hasType()) {
18933      composeCodeableConcept(t, "PackagedProductDefinitionPackagePropertyComponent", "type", element.getType(), -1);
18934    }
18935    if (element.hasValue()) {
18936      composeType(t, "PackagedProductDefinitionPackagePropertyComponent", "value", element.getValue(), -1);
18937    }
18938  }
18939
18940  protected void composePackagedProductDefinitionPackageContainedItemComponent(Complex parent, String parentType, String name, PackagedProductDefinition.PackagedProductDefinitionPackageContainedItemComponent element, int index) {
18941    if (element == null) 
18942      return;
18943    Complex t;
18944    if (Utilities.noString(parentType))
18945      t = parent;
18946    else {
18947      t = parent.predicate("fhir:"+parentType+'.'+name);
18948    }
18949    composeBackboneElement(t, "containedItem", name, element, index);
18950    if (element.hasItem()) {
18951      composeCodeableReference(t, "PackagedProductDefinitionPackageContainedItemComponent", "item", element.getItem(), -1);
18952    }
18953    if (element.hasAmount()) {
18954      composeQuantity(t, "PackagedProductDefinitionPackageContainedItemComponent", "amount", element.getAmount(), -1);
18955    }
18956  }
18957
18958  protected void composeParameters(Complex parent, String parentType, String name, Parameters element, int index) {
18959    if (element == null) 
18960      return;
18961    Complex t;
18962    if (Utilities.noString(parentType))
18963      t = parent;
18964    else {
18965      t = parent.predicate("fhir:"+parentType+'.'+name);
18966    }
18967    composeResource(t, "Parameters", name, element, index);
18968    for (int i = 0; i < element.getParameter().size(); i++) {
18969      composeParametersParameterComponent(t, "Parameters", "parameter", element.getParameter().get(i), i);
18970    }
18971  }
18972
18973  protected void composeParametersParameterComponent(Complex parent, String parentType, String name, Parameters.ParametersParameterComponent element, int index) {
18974    if (element == null) 
18975      return;
18976    Complex t;
18977    if (Utilities.noString(parentType))
18978      t = parent;
18979    else {
18980      t = parent.predicate("fhir:"+parentType+'.'+name);
18981    }
18982    composeBackboneElement(t, "parameter", name, element, index);
18983    if (element.hasNameElement()) {
18984      composeString(t, "ParametersParameterComponent", "name", element.getNameElement(), -1);
18985    }
18986    if (element.hasValue()) {
18987      composeType(t, "ParametersParameterComponent", "value", element.getValue(), -1);
18988    }
18989    if (element.hasResource()) {
18990      composeResource(t, "ParametersParameterComponent", "resource", element.getResource(), -1);
18991    }
18992    for (int i = 0; i < element.getPart().size(); i++) {
18993      composeParametersParameterComponent(t, "ParametersParameterComponent", "part", element.getPart().get(i), i);
18994    }
18995  }
18996
18997  protected void composePatient(Complex parent, String parentType, String name, Patient element, int index) {
18998    if (element == null) 
18999      return;
19000    Complex t;
19001    if (Utilities.noString(parentType))
19002      t = parent;
19003    else {
19004      t = parent.predicate("fhir:"+parentType+'.'+name);
19005    }
19006    composeDomainResource(t, "Patient", name, element, index);
19007    for (int i = 0; i < element.getIdentifier().size(); i++) {
19008      composeIdentifier(t, "Patient", "identifier", element.getIdentifier().get(i), i);
19009    }
19010    if (element.hasActiveElement()) {
19011      composeBoolean(t, "Patient", "active", element.getActiveElement(), -1);
19012    }
19013    for (int i = 0; i < element.getName().size(); i++) {
19014      composeHumanName(t, "Patient", "name", element.getName().get(i), i);
19015    }
19016    for (int i = 0; i < element.getTelecom().size(); i++) {
19017      composeContactPoint(t, "Patient", "telecom", element.getTelecom().get(i), i);
19018    }
19019    if (element.hasGenderElement()) {
19020      composeEnum(t, "Patient", "gender", element.getGenderElement(), -1);
19021    }
19022    if (element.hasBirthDateElement()) {
19023      composeDate(t, "Patient", "birthDate", element.getBirthDateElement(), -1);
19024    }
19025    if (element.hasDeceased()) {
19026      composeType(t, "Patient", "deceased", element.getDeceased(), -1);
19027    }
19028    for (int i = 0; i < element.getAddress().size(); i++) {
19029      composeAddress(t, "Patient", "address", element.getAddress().get(i), i);
19030    }
19031    if (element.hasMaritalStatus()) {
19032      composeCodeableConcept(t, "Patient", "maritalStatus", element.getMaritalStatus(), -1);
19033    }
19034    if (element.hasMultipleBirth()) {
19035      composeType(t, "Patient", "multipleBirth", element.getMultipleBirth(), -1);
19036    }
19037    for (int i = 0; i < element.getPhoto().size(); i++) {
19038      composeAttachment(t, "Patient", "photo", element.getPhoto().get(i), i);
19039    }
19040    for (int i = 0; i < element.getContact().size(); i++) {
19041      composePatientContactComponent(t, "Patient", "contact", element.getContact().get(i), i);
19042    }
19043    for (int i = 0; i < element.getCommunication().size(); i++) {
19044      composePatientCommunicationComponent(t, "Patient", "communication", element.getCommunication().get(i), i);
19045    }
19046    for (int i = 0; i < element.getGeneralPractitioner().size(); i++) {
19047      composeReference(t, "Patient", "generalPractitioner", element.getGeneralPractitioner().get(i), i);
19048    }
19049    if (element.hasManagingOrganization()) {
19050      composeReference(t, "Patient", "managingOrganization", element.getManagingOrganization(), -1);
19051    }
19052    for (int i = 0; i < element.getLink().size(); i++) {
19053      composePatientLinkComponent(t, "Patient", "link", element.getLink().get(i), i);
19054    }
19055  }
19056
19057  protected void composePatientContactComponent(Complex parent, String parentType, String name, Patient.ContactComponent element, int index) {
19058    if (element == null) 
19059      return;
19060    Complex t;
19061    if (Utilities.noString(parentType))
19062      t = parent;
19063    else {
19064      t = parent.predicate("fhir:"+parentType+'.'+name);
19065    }
19066    composeBackboneElement(t, "contact", name, element, index);
19067    for (int i = 0; i < element.getRelationship().size(); i++) {
19068      composeCodeableConcept(t, "ContactComponent", "relationship", element.getRelationship().get(i), i);
19069    }
19070    if (element.hasName()) {
19071      composeHumanName(t, "ContactComponent", "name", element.getName(), -1);
19072    }
19073    for (int i = 0; i < element.getTelecom().size(); i++) {
19074      composeContactPoint(t, "ContactComponent", "telecom", element.getTelecom().get(i), i);
19075    }
19076    if (element.hasAddress()) {
19077      composeAddress(t, "ContactComponent", "address", element.getAddress(), -1);
19078    }
19079    if (element.hasGenderElement()) {
19080      composeEnum(t, "ContactComponent", "gender", element.getGenderElement(), -1);
19081    }
19082    if (element.hasOrganization()) {
19083      composeReference(t, "ContactComponent", "organization", element.getOrganization(), -1);
19084    }
19085    if (element.hasPeriod()) {
19086      composePeriod(t, "ContactComponent", "period", element.getPeriod(), -1);
19087    }
19088  }
19089
19090  protected void composePatientCommunicationComponent(Complex parent, String parentType, String name, Patient.PatientCommunicationComponent element, int index) {
19091    if (element == null) 
19092      return;
19093    Complex t;
19094    if (Utilities.noString(parentType))
19095      t = parent;
19096    else {
19097      t = parent.predicate("fhir:"+parentType+'.'+name);
19098    }
19099    composeBackboneElement(t, "communication", name, element, index);
19100    if (element.hasLanguage()) {
19101      composeCodeableConcept(t, "PatientCommunicationComponent", "language", element.getLanguage(), -1);
19102    }
19103    if (element.hasPreferredElement()) {
19104      composeBoolean(t, "PatientCommunicationComponent", "preferred", element.getPreferredElement(), -1);
19105    }
19106  }
19107
19108  protected void composePatientLinkComponent(Complex parent, String parentType, String name, Patient.PatientLinkComponent element, int index) {
19109    if (element == null) 
19110      return;
19111    Complex t;
19112    if (Utilities.noString(parentType))
19113      t = parent;
19114    else {
19115      t = parent.predicate("fhir:"+parentType+'.'+name);
19116    }
19117    composeBackboneElement(t, "link", name, element, index);
19118    if (element.hasOther()) {
19119      composeReference(t, "PatientLinkComponent", "other", element.getOther(), -1);
19120    }
19121    if (element.hasTypeElement()) {
19122      composeEnum(t, "PatientLinkComponent", "type", element.getTypeElement(), -1);
19123    }
19124  }
19125
19126  protected void composePaymentNotice(Complex parent, String parentType, String name, PaymentNotice element, int index) {
19127    if (element == null) 
19128      return;
19129    Complex t;
19130    if (Utilities.noString(parentType))
19131      t = parent;
19132    else {
19133      t = parent.predicate("fhir:"+parentType+'.'+name);
19134    }
19135    composeDomainResource(t, "PaymentNotice", name, element, index);
19136    for (int i = 0; i < element.getIdentifier().size(); i++) {
19137      composeIdentifier(t, "PaymentNotice", "identifier", element.getIdentifier().get(i), i);
19138    }
19139    if (element.hasStatusElement()) {
19140      composeEnum(t, "PaymentNotice", "status", element.getStatusElement(), -1);
19141    }
19142    if (element.hasRequest()) {
19143      composeReference(t, "PaymentNotice", "request", element.getRequest(), -1);
19144    }
19145    if (element.hasResponse()) {
19146      composeReference(t, "PaymentNotice", "response", element.getResponse(), -1);
19147    }
19148    if (element.hasCreatedElement()) {
19149      composeDateTime(t, "PaymentNotice", "created", element.getCreatedElement(), -1);
19150    }
19151    if (element.hasProvider()) {
19152      composeReference(t, "PaymentNotice", "provider", element.getProvider(), -1);
19153    }
19154    if (element.hasPayment()) {
19155      composeReference(t, "PaymentNotice", "payment", element.getPayment(), -1);
19156    }
19157    if (element.hasPaymentDateElement()) {
19158      composeDate(t, "PaymentNotice", "paymentDate", element.getPaymentDateElement(), -1);
19159    }
19160    if (element.hasPayee()) {
19161      composeReference(t, "PaymentNotice", "payee", element.getPayee(), -1);
19162    }
19163    if (element.hasRecipient()) {
19164      composeReference(t, "PaymentNotice", "recipient", element.getRecipient(), -1);
19165    }
19166    if (element.hasAmount()) {
19167      composeMoney(t, "PaymentNotice", "amount", element.getAmount(), -1);
19168    }
19169    if (element.hasPaymentStatus()) {
19170      composeCodeableConcept(t, "PaymentNotice", "paymentStatus", element.getPaymentStatus(), -1);
19171    }
19172  }
19173
19174  protected void composePaymentReconciliation(Complex parent, String parentType, String name, PaymentReconciliation element, int index) {
19175    if (element == null) 
19176      return;
19177    Complex t;
19178    if (Utilities.noString(parentType))
19179      t = parent;
19180    else {
19181      t = parent.predicate("fhir:"+parentType+'.'+name);
19182    }
19183    composeDomainResource(t, "PaymentReconciliation", name, element, index);
19184    for (int i = 0; i < element.getIdentifier().size(); i++) {
19185      composeIdentifier(t, "PaymentReconciliation", "identifier", element.getIdentifier().get(i), i);
19186    }
19187    if (element.hasStatusElement()) {
19188      composeEnum(t, "PaymentReconciliation", "status", element.getStatusElement(), -1);
19189    }
19190    if (element.hasPeriod()) {
19191      composePeriod(t, "PaymentReconciliation", "period", element.getPeriod(), -1);
19192    }
19193    if (element.hasCreatedElement()) {
19194      composeDateTime(t, "PaymentReconciliation", "created", element.getCreatedElement(), -1);
19195    }
19196    if (element.hasPaymentIssuer()) {
19197      composeReference(t, "PaymentReconciliation", "paymentIssuer", element.getPaymentIssuer(), -1);
19198    }
19199    if (element.hasRequest()) {
19200      composeReference(t, "PaymentReconciliation", "request", element.getRequest(), -1);
19201    }
19202    if (element.hasRequestor()) {
19203      composeReference(t, "PaymentReconciliation", "requestor", element.getRequestor(), -1);
19204    }
19205    if (element.hasOutcomeElement()) {
19206      composeEnum(t, "PaymentReconciliation", "outcome", element.getOutcomeElement(), -1);
19207    }
19208    if (element.hasDispositionElement()) {
19209      composeString(t, "PaymentReconciliation", "disposition", element.getDispositionElement(), -1);
19210    }
19211    if (element.hasPaymentDateElement()) {
19212      composeDate(t, "PaymentReconciliation", "paymentDate", element.getPaymentDateElement(), -1);
19213    }
19214    if (element.hasPaymentAmount()) {
19215      composeMoney(t, "PaymentReconciliation", "paymentAmount", element.getPaymentAmount(), -1);
19216    }
19217    if (element.hasPaymentIdentifier()) {
19218      composeIdentifier(t, "PaymentReconciliation", "paymentIdentifier", element.getPaymentIdentifier(), -1);
19219    }
19220    for (int i = 0; i < element.getDetail().size(); i++) {
19221      composePaymentReconciliationDetailsComponent(t, "PaymentReconciliation", "detail", element.getDetail().get(i), i);
19222    }
19223    if (element.hasFormCode()) {
19224      composeCodeableConcept(t, "PaymentReconciliation", "formCode", element.getFormCode(), -1);
19225    }
19226    for (int i = 0; i < element.getProcessNote().size(); i++) {
19227      composePaymentReconciliationNotesComponent(t, "PaymentReconciliation", "processNote", element.getProcessNote().get(i), i);
19228    }
19229  }
19230
19231  protected void composePaymentReconciliationDetailsComponent(Complex parent, String parentType, String name, PaymentReconciliation.DetailsComponent element, int index) {
19232    if (element == null) 
19233      return;
19234    Complex t;
19235    if (Utilities.noString(parentType))
19236      t = parent;
19237    else {
19238      t = parent.predicate("fhir:"+parentType+'.'+name);
19239    }
19240    composeBackboneElement(t, "detail", name, element, index);
19241    if (element.hasIdentifier()) {
19242      composeIdentifier(t, "DetailsComponent", "identifier", element.getIdentifier(), -1);
19243    }
19244    if (element.hasPredecessor()) {
19245      composeIdentifier(t, "DetailsComponent", "predecessor", element.getPredecessor(), -1);
19246    }
19247    if (element.hasType()) {
19248      composeCodeableConcept(t, "DetailsComponent", "type", element.getType(), -1);
19249    }
19250    if (element.hasRequest()) {
19251      composeReference(t, "DetailsComponent", "request", element.getRequest(), -1);
19252    }
19253    if (element.hasSubmitter()) {
19254      composeReference(t, "DetailsComponent", "submitter", element.getSubmitter(), -1);
19255    }
19256    if (element.hasResponse()) {
19257      composeReference(t, "DetailsComponent", "response", element.getResponse(), -1);
19258    }
19259    if (element.hasDateElement()) {
19260      composeDate(t, "DetailsComponent", "date", element.getDateElement(), -1);
19261    }
19262    if (element.hasResponsible()) {
19263      composeReference(t, "DetailsComponent", "responsible", element.getResponsible(), -1);
19264    }
19265    if (element.hasPayee()) {
19266      composeReference(t, "DetailsComponent", "payee", element.getPayee(), -1);
19267    }
19268    if (element.hasAmount()) {
19269      composeMoney(t, "DetailsComponent", "amount", element.getAmount(), -1);
19270    }
19271  }
19272
19273  protected void composePaymentReconciliationNotesComponent(Complex parent, String parentType, String name, PaymentReconciliation.NotesComponent element, int index) {
19274    if (element == null) 
19275      return;
19276    Complex t;
19277    if (Utilities.noString(parentType))
19278      t = parent;
19279    else {
19280      t = parent.predicate("fhir:"+parentType+'.'+name);
19281    }
19282    composeBackboneElement(t, "processNote", name, element, index);
19283    if (element.hasTypeElement()) {
19284      composeEnum(t, "NotesComponent", "type", element.getTypeElement(), -1);
19285    }
19286    if (element.hasTextElement()) {
19287      composeString(t, "NotesComponent", "text", element.getTextElement(), -1);
19288    }
19289  }
19290
19291  protected void composePermission(Complex parent, String parentType, String name, Permission 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:"+parentType+'.'+name);
19299    }
19300    composeDomainResource(t, "Permission", name, element, index);
19301    if (element.hasStatusElement()) {
19302      composeEnum(t, "Permission", "status", element.getStatusElement(), -1);
19303    }
19304    if (element.hasIntent()) {
19305      composeCodeableConcept(t, "Permission", "intent", element.getIntent(), -1);
19306    }
19307    if (element.hasAsserter()) {
19308      composeReference(t, "Permission", "asserter", element.getAsserter(), -1);
19309    }
19310    for (int i = 0; i < element.getAssertionDate().size(); i++) {
19311      composeDateTime(t, "Permission", "assertionDate", element.getAssertionDate().get(i), i);
19312    }
19313    if (element.hasValidity()) {
19314      composePeriod(t, "Permission", "validity", element.getValidity(), -1);
19315    }
19316    for (int i = 0; i < element.getPurpose().size(); i++) {
19317      composeCodeableConcept(t, "Permission", "purpose", element.getPurpose().get(i), i);
19318    }
19319    for (int i = 0; i < element.getDataScope().size(); i++) {
19320      composeExpression(t, "Permission", "dataScope", element.getDataScope().get(i), i);
19321    }
19322    for (int i = 0; i < element.getProcessingActivity().size(); i++) {
19323      composePermissionProcessingActivityComponent(t, "Permission", "processingActivity", element.getProcessingActivity().get(i), i);
19324    }
19325    if (element.hasJustification()) {
19326      composePermissionJustificationComponent(t, "Permission", "justification", element.getJustification(), -1);
19327    }
19328    for (int i = 0; i < element.getUsageLimitations().size(); i++) {
19329      composeCodeableConcept(t, "Permission", "usageLimitations", element.getUsageLimitations().get(i), i);
19330    }
19331  }
19332
19333  protected void composePermissionProcessingActivityComponent(Complex parent, String parentType, String name, Permission.PermissionProcessingActivityComponent 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:"+parentType+'.'+name);
19341    }
19342    composeBackboneElement(t, "processingActivity", name, element, index);
19343    for (int i = 0; i < element.getPartyReference().size(); i++) {
19344      composeReference(t, "PermissionProcessingActivityComponent", "partyReference", element.getPartyReference().get(i), i);
19345    }
19346    for (int i = 0; i < element.getPartyCodeableConcept().size(); i++) {
19347      composeCodeableConcept(t, "PermissionProcessingActivityComponent", "partyCodeableConcept", element.getPartyCodeableConcept().get(i), i);
19348    }
19349    for (int i = 0; i < element.getPurpose().size(); i++) {
19350      composeCodeableConcept(t, "PermissionProcessingActivityComponent", "purpose", element.getPurpose().get(i), i);
19351    }
19352  }
19353
19354  protected void composePermissionJustificationComponent(Complex parent, String parentType, String name, Permission.PermissionJustificationComponent element, int index) {
19355    if (element == null) 
19356      return;
19357    Complex t;
19358    if (Utilities.noString(parentType))
19359      t = parent;
19360    else {
19361      t = parent.predicate("fhir:"+parentType+'.'+name);
19362    }
19363    composeBackboneElement(t, "justification", name, element, index);
19364    for (int i = 0; i < element.getEvidence().size(); i++) {
19365      composeReference(t, "PermissionJustificationComponent", "evidence", element.getEvidence().get(i), i);
19366    }
19367    for (int i = 0; i < element.getGrounds().size(); i++) {
19368      composeCodeableConcept(t, "PermissionJustificationComponent", "grounds", element.getGrounds().get(i), i);
19369    }
19370  }
19371
19372  protected void composePerson(Complex parent, String parentType, String name, Person element, int index) {
19373    if (element == null) 
19374      return;
19375    Complex t;
19376    if (Utilities.noString(parentType))
19377      t = parent;
19378    else {
19379      t = parent.predicate("fhir:"+parentType+'.'+name);
19380    }
19381    composeDomainResource(t, "Person", name, element, index);
19382    for (int i = 0; i < element.getIdentifier().size(); i++) {
19383      composeIdentifier(t, "Person", "identifier", element.getIdentifier().get(i), i);
19384    }
19385    if (element.hasActiveElement()) {
19386      composeBoolean(t, "Person", "active", element.getActiveElement(), -1);
19387    }
19388    for (int i = 0; i < element.getName().size(); i++) {
19389      composeHumanName(t, "Person", "name", element.getName().get(i), i);
19390    }
19391    for (int i = 0; i < element.getTelecom().size(); i++) {
19392      composeContactPoint(t, "Person", "telecom", element.getTelecom().get(i), i);
19393    }
19394    if (element.hasGenderElement()) {
19395      composeEnum(t, "Person", "gender", element.getGenderElement(), -1);
19396    }
19397    if (element.hasBirthDateElement()) {
19398      composeDate(t, "Person", "birthDate", element.getBirthDateElement(), -1);
19399    }
19400    if (element.hasDeceased()) {
19401      composeType(t, "Person", "deceased", element.getDeceased(), -1);
19402    }
19403    for (int i = 0; i < element.getAddress().size(); i++) {
19404      composeAddress(t, "Person", "address", element.getAddress().get(i), i);
19405    }
19406    if (element.hasMaritalStatus()) {
19407      composeCodeableConcept(t, "Person", "maritalStatus", element.getMaritalStatus(), -1);
19408    }
19409    for (int i = 0; i < element.getPhoto().size(); i++) {
19410      composeAttachment(t, "Person", "photo", element.getPhoto().get(i), i);
19411    }
19412    if (element.hasManagingOrganization()) {
19413      composeReference(t, "Person", "managingOrganization", element.getManagingOrganization(), -1);
19414    }
19415    for (int i = 0; i < element.getCommunication().size(); i++) {
19416      composePersonCommunicationComponent(t, "Person", "communication", element.getCommunication().get(i), i);
19417    }
19418    for (int i = 0; i < element.getLink().size(); i++) {
19419      composePersonLinkComponent(t, "Person", "link", element.getLink().get(i), i);
19420    }
19421  }
19422
19423  protected void composePersonCommunicationComponent(Complex parent, String parentType, String name, Person.PersonCommunicationComponent element, int index) {
19424    if (element == null) 
19425      return;
19426    Complex t;
19427    if (Utilities.noString(parentType))
19428      t = parent;
19429    else {
19430      t = parent.predicate("fhir:"+parentType+'.'+name);
19431    }
19432    composeBackboneElement(t, "communication", name, element, index);
19433    if (element.hasLanguage()) {
19434      composeCodeableConcept(t, "PersonCommunicationComponent", "language", element.getLanguage(), -1);
19435    }
19436    if (element.hasPreferredElement()) {
19437      composeBoolean(t, "PersonCommunicationComponent", "preferred", element.getPreferredElement(), -1);
19438    }
19439  }
19440
19441  protected void composePersonLinkComponent(Complex parent, String parentType, String name, Person.PersonLinkComponent element, int index) {
19442    if (element == null) 
19443      return;
19444    Complex t;
19445    if (Utilities.noString(parentType))
19446      t = parent;
19447    else {
19448      t = parent.predicate("fhir:"+parentType+'.'+name);
19449    }
19450    composeBackboneElement(t, "link", name, element, index);
19451    if (element.hasTarget()) {
19452      composeReference(t, "PersonLinkComponent", "target", element.getTarget(), -1);
19453    }
19454    if (element.hasAssuranceElement()) {
19455      composeEnum(t, "PersonLinkComponent", "assurance", element.getAssuranceElement(), -1);
19456    }
19457  }
19458
19459  protected void composePlanDefinition(Complex parent, String parentType, String name, PlanDefinition element, int index) {
19460    if (element == null) 
19461      return;
19462    Complex t;
19463    if (Utilities.noString(parentType))
19464      t = parent;
19465    else {
19466      t = parent.predicate("fhir:"+parentType+'.'+name);
19467    }
19468    composeMetadataResource(t, "PlanDefinition", name, element, index);
19469    if (element.hasUrlElement()) {
19470      composeUri(t, "PlanDefinition", "url", element.getUrlElement(), -1);
19471    }
19472    for (int i = 0; i < element.getIdentifier().size(); i++) {
19473      composeIdentifier(t, "PlanDefinition", "identifier", element.getIdentifier().get(i), i);
19474    }
19475    if (element.hasVersionElement()) {
19476      composeString(t, "PlanDefinition", "version", element.getVersionElement(), -1);
19477    }
19478    if (element.hasNameElement()) {
19479      composeString(t, "PlanDefinition", "name", element.getNameElement(), -1);
19480    }
19481    if (element.hasTitleElement()) {
19482      composeString(t, "PlanDefinition", "title", element.getTitleElement(), -1);
19483    }
19484    if (element.hasSubtitleElement()) {
19485      composeString(t, "PlanDefinition", "subtitle", element.getSubtitleElement(), -1);
19486    }
19487    if (element.hasType()) {
19488      composeCodeableConcept(t, "PlanDefinition", "type", element.getType(), -1);
19489    }
19490    if (element.hasStatusElement()) {
19491      composeEnum(t, "PlanDefinition", "status", element.getStatusElement(), -1);
19492    }
19493    if (element.hasExperimentalElement()) {
19494      composeBoolean(t, "PlanDefinition", "experimental", element.getExperimentalElement(), -1);
19495    }
19496    if (element.hasSubject()) {
19497      composeType(t, "PlanDefinition", "subject", element.getSubject(), -1);
19498    }
19499    if (element.hasDateElement()) {
19500      composeDateTime(t, "PlanDefinition", "date", element.getDateElement(), -1);
19501    }
19502    if (element.hasPublisherElement()) {
19503      composeString(t, "PlanDefinition", "publisher", element.getPublisherElement(), -1);
19504    }
19505    for (int i = 0; i < element.getContact().size(); i++) {
19506      composeContactDetail(t, "PlanDefinition", "contact", element.getContact().get(i), i);
19507    }
19508    if (element.hasDescriptionElement()) {
19509      composeMarkdown(t, "PlanDefinition", "description", element.getDescriptionElement(), -1);
19510    }
19511    for (int i = 0; i < element.getUseContext().size(); i++) {
19512      composeUsageContext(t, "PlanDefinition", "useContext", element.getUseContext().get(i), i);
19513    }
19514    for (int i = 0; i < element.getJurisdiction().size(); i++) {
19515      composeCodeableConcept(t, "PlanDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
19516    }
19517    if (element.hasPurposeElement()) {
19518      composeMarkdown(t, "PlanDefinition", "purpose", element.getPurposeElement(), -1);
19519    }
19520    if (element.hasUsageElement()) {
19521      composeString(t, "PlanDefinition", "usage", element.getUsageElement(), -1);
19522    }
19523    if (element.hasCopyrightElement()) {
19524      composeMarkdown(t, "PlanDefinition", "copyright", element.getCopyrightElement(), -1);
19525    }
19526    if (element.hasApprovalDateElement()) {
19527      composeDate(t, "PlanDefinition", "approvalDate", element.getApprovalDateElement(), -1);
19528    }
19529    if (element.hasLastReviewDateElement()) {
19530      composeDate(t, "PlanDefinition", "lastReviewDate", element.getLastReviewDateElement(), -1);
19531    }
19532    if (element.hasEffectivePeriod()) {
19533      composePeriod(t, "PlanDefinition", "effectivePeriod", element.getEffectivePeriod(), -1);
19534    }
19535    for (int i = 0; i < element.getTopic().size(); i++) {
19536      composeCodeableConcept(t, "PlanDefinition", "topic", element.getTopic().get(i), i);
19537    }
19538    for (int i = 0; i < element.getAuthor().size(); i++) {
19539      composeContactDetail(t, "PlanDefinition", "author", element.getAuthor().get(i), i);
19540    }
19541    for (int i = 0; i < element.getEditor().size(); i++) {
19542      composeContactDetail(t, "PlanDefinition", "editor", element.getEditor().get(i), i);
19543    }
19544    for (int i = 0; i < element.getReviewer().size(); i++) {
19545      composeContactDetail(t, "PlanDefinition", "reviewer", element.getReviewer().get(i), i);
19546    }
19547    for (int i = 0; i < element.getEndorser().size(); i++) {
19548      composeContactDetail(t, "PlanDefinition", "endorser", element.getEndorser().get(i), i);
19549    }
19550    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
19551      composeRelatedArtifact(t, "PlanDefinition", "relatedArtifact", element.getRelatedArtifact().get(i), i);
19552    }
19553    for (int i = 0; i < element.getLibrary().size(); i++) {
19554      composeCanonical(t, "PlanDefinition", "library", element.getLibrary().get(i), i);
19555    }
19556    for (int i = 0; i < element.getGoal().size(); i++) {
19557      composePlanDefinitionGoalComponent(t, "PlanDefinition", "goal", element.getGoal().get(i), i);
19558    }
19559    for (int i = 0; i < element.getActor().size(); i++) {
19560      composePlanDefinitionActorComponent(t, "PlanDefinition", "actor", element.getActor().get(i), i);
19561    }
19562    for (int i = 0; i < element.getAction().size(); i++) {
19563      composePlanDefinitionActionComponent(t, "PlanDefinition", "action", element.getAction().get(i), i);
19564    }
19565  }
19566
19567  protected void composePlanDefinitionGoalComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionGoalComponent 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:"+parentType+'.'+name);
19575    }
19576    composeBackboneElement(t, "goal", name, element, index);
19577    if (element.hasCategory()) {
19578      composeCodeableConcept(t, "PlanDefinitionGoalComponent", "category", element.getCategory(), -1);
19579    }
19580    if (element.hasDescription()) {
19581      composeCodeableConcept(t, "PlanDefinitionGoalComponent", "description", element.getDescription(), -1);
19582    }
19583    if (element.hasPriority()) {
19584      composeCodeableConcept(t, "PlanDefinitionGoalComponent", "priority", element.getPriority(), -1);
19585    }
19586    if (element.hasStart()) {
19587      composeCodeableConcept(t, "PlanDefinitionGoalComponent", "start", element.getStart(), -1);
19588    }
19589    for (int i = 0; i < element.getAddresses().size(); i++) {
19590      composeCodeableConcept(t, "PlanDefinitionGoalComponent", "addresses", element.getAddresses().get(i), i);
19591    }
19592    for (int i = 0; i < element.getDocumentation().size(); i++) {
19593      composeRelatedArtifact(t, "PlanDefinitionGoalComponent", "documentation", element.getDocumentation().get(i), i);
19594    }
19595    for (int i = 0; i < element.getTarget().size(); i++) {
19596      composePlanDefinitionGoalTargetComponent(t, "PlanDefinitionGoalComponent", "target", element.getTarget().get(i), i);
19597    }
19598  }
19599
19600  protected void composePlanDefinitionGoalTargetComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionGoalTargetComponent element, int index) {
19601    if (element == null) 
19602      return;
19603    Complex t;
19604    if (Utilities.noString(parentType))
19605      t = parent;
19606    else {
19607      t = parent.predicate("fhir:"+parentType+'.'+name);
19608    }
19609    composeBackboneElement(t, "target", name, element, index);
19610    if (element.hasMeasure()) {
19611      composeCodeableConcept(t, "PlanDefinitionGoalTargetComponent", "measure", element.getMeasure(), -1);
19612    }
19613    if (element.hasDetail()) {
19614      composeType(t, "PlanDefinitionGoalTargetComponent", "detail", element.getDetail(), -1);
19615    }
19616    if (element.hasDue()) {
19617      composeDuration(t, "PlanDefinitionGoalTargetComponent", "due", element.getDue(), -1);
19618    }
19619  }
19620
19621  protected void composePlanDefinitionActorComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionActorComponent element, int index) {
19622    if (element == null) 
19623      return;
19624    Complex t;
19625    if (Utilities.noString(parentType))
19626      t = parent;
19627    else {
19628      t = parent.predicate("fhir:"+parentType+'.'+name);
19629    }
19630    composeBackboneElement(t, "actor", name, element, index);
19631    if (element.hasTitleElement()) {
19632      composeString(t, "PlanDefinitionActorComponent", "title", element.getTitleElement(), -1);
19633    }
19634    if (element.hasDescriptionElement()) {
19635      composeMarkdown(t, "PlanDefinitionActorComponent", "description", element.getDescriptionElement(), -1);
19636    }
19637    for (int i = 0; i < element.getOption().size(); i++) {
19638      composePlanDefinitionActorOptionComponent(t, "PlanDefinitionActorComponent", "option", element.getOption().get(i), i);
19639    }
19640  }
19641
19642  protected void composePlanDefinitionActorOptionComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionActorOptionComponent element, int index) {
19643    if (element == null) 
19644      return;
19645    Complex t;
19646    if (Utilities.noString(parentType))
19647      t = parent;
19648    else {
19649      t = parent.predicate("fhir:"+parentType+'.'+name);
19650    }
19651    composeBackboneElement(t, "option", name, element, index);
19652    if (element.hasTypeElement()) {
19653      composeEnum(t, "PlanDefinitionActorOptionComponent", "type", element.getTypeElement(), -1);
19654    }
19655    if (element.hasTypeReference()) {
19656      composeReference(t, "PlanDefinitionActorOptionComponent", "typeReference", element.getTypeReference(), -1);
19657    }
19658    if (element.hasRole()) {
19659      composeCodeableConcept(t, "PlanDefinitionActorOptionComponent", "role", element.getRole(), -1);
19660    }
19661  }
19662
19663  protected void composePlanDefinitionActionComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionActionComponent element, int index) {
19664    if (element == null) 
19665      return;
19666    Complex t;
19667    if (Utilities.noString(parentType))
19668      t = parent;
19669    else {
19670      t = parent.predicate("fhir:"+parentType+'.'+name);
19671    }
19672    composeBackboneElement(t, "action", name, element, index);
19673    if (element.hasLinkIdElement()) {
19674      composeString(t, "PlanDefinitionActionComponent", "linkId", element.getLinkIdElement(), -1);
19675    }
19676    if (element.hasPrefixElement()) {
19677      composeString(t, "PlanDefinitionActionComponent", "prefix", element.getPrefixElement(), -1);
19678    }
19679    if (element.hasTitleElement()) {
19680      composeString(t, "PlanDefinitionActionComponent", "title", element.getTitleElement(), -1);
19681    }
19682    if (element.hasDescriptionElement()) {
19683      composeString(t, "PlanDefinitionActionComponent", "description", element.getDescriptionElement(), -1);
19684    }
19685    if (element.hasTextEquivalentElement()) {
19686      composeString(t, "PlanDefinitionActionComponent", "textEquivalent", element.getTextEquivalentElement(), -1);
19687    }
19688    if (element.hasPriorityElement()) {
19689      composeEnum(t, "PlanDefinitionActionComponent", "priority", element.getPriorityElement(), -1);
19690    }
19691    if (element.hasCode()) {
19692      composeCodeableConcept(t, "PlanDefinitionActionComponent", "code", element.getCode(), -1);
19693    }
19694    for (int i = 0; i < element.getReason().size(); i++) {
19695      composeCodeableConcept(t, "PlanDefinitionActionComponent", "reason", element.getReason().get(i), i);
19696    }
19697    for (int i = 0; i < element.getDocumentation().size(); i++) {
19698      composeRelatedArtifact(t, "PlanDefinitionActionComponent", "documentation", element.getDocumentation().get(i), i);
19699    }
19700    for (int i = 0; i < element.getGoalId().size(); i++) {
19701      composeId(t, "PlanDefinitionActionComponent", "goalId", element.getGoalId().get(i), i);
19702    }
19703    if (element.hasSubject()) {
19704      composeType(t, "PlanDefinitionActionComponent", "subject", element.getSubject(), -1);
19705    }
19706    for (int i = 0; i < element.getTrigger().size(); i++) {
19707      composeTriggerDefinition(t, "PlanDefinitionActionComponent", "trigger", element.getTrigger().get(i), i);
19708    }
19709    for (int i = 0; i < element.getCondition().size(); i++) {
19710      composePlanDefinitionActionConditionComponent(t, "PlanDefinitionActionComponent", "condition", element.getCondition().get(i), i);
19711    }
19712    for (int i = 0; i < element.getInput().size(); i++) {
19713      composePlanDefinitionActionInputComponent(t, "PlanDefinitionActionComponent", "input", element.getInput().get(i), i);
19714    }
19715    for (int i = 0; i < element.getOutput().size(); i++) {
19716      composePlanDefinitionActionOutputComponent(t, "PlanDefinitionActionComponent", "output", element.getOutput().get(i), i);
19717    }
19718    for (int i = 0; i < element.getRelatedAction().size(); i++) {
19719      composePlanDefinitionActionRelatedActionComponent(t, "PlanDefinitionActionComponent", "relatedAction", element.getRelatedAction().get(i), i);
19720    }
19721    if (element.hasTiming()) {
19722      composeType(t, "PlanDefinitionActionComponent", "timing", element.getTiming(), -1);
19723    }
19724    if (element.hasLocation()) {
19725      composeCodeableReference(t, "PlanDefinitionActionComponent", "location", element.getLocation(), -1);
19726    }
19727    for (int i = 0; i < element.getParticipant().size(); i++) {
19728      composePlanDefinitionActionParticipantComponent(t, "PlanDefinitionActionComponent", "participant", element.getParticipant().get(i), i);
19729    }
19730    if (element.hasType()) {
19731      composeCodeableConcept(t, "PlanDefinitionActionComponent", "type", element.getType(), -1);
19732    }
19733    if (element.hasGroupingBehaviorElement()) {
19734      composeEnum(t, "PlanDefinitionActionComponent", "groupingBehavior", element.getGroupingBehaviorElement(), -1);
19735    }
19736    if (element.hasSelectionBehaviorElement()) {
19737      composeEnum(t, "PlanDefinitionActionComponent", "selectionBehavior", element.getSelectionBehaviorElement(), -1);
19738    }
19739    if (element.hasRequiredBehaviorElement()) {
19740      composeEnum(t, "PlanDefinitionActionComponent", "requiredBehavior", element.getRequiredBehaviorElement(), -1);
19741    }
19742    if (element.hasPrecheckBehaviorElement()) {
19743      composeEnum(t, "PlanDefinitionActionComponent", "precheckBehavior", element.getPrecheckBehaviorElement(), -1);
19744    }
19745    if (element.hasCardinalityBehaviorElement()) {
19746      composeEnum(t, "PlanDefinitionActionComponent", "cardinalityBehavior", element.getCardinalityBehaviorElement(), -1);
19747    }
19748    if (element.hasDefinition()) {
19749      composeType(t, "PlanDefinitionActionComponent", "definition", element.getDefinition(), -1);
19750    }
19751    if (element.hasTransformElement()) {
19752      composeCanonical(t, "PlanDefinitionActionComponent", "transform", element.getTransformElement(), -1);
19753    }
19754    for (int i = 0; i < element.getDynamicValue().size(); i++) {
19755      composePlanDefinitionActionDynamicValueComponent(t, "PlanDefinitionActionComponent", "dynamicValue", element.getDynamicValue().get(i), i);
19756    }
19757    for (int i = 0; i < element.getAction().size(); i++) {
19758      composePlanDefinitionActionComponent(t, "PlanDefinitionActionComponent", "action", element.getAction().get(i), i);
19759    }
19760  }
19761
19762  protected void composePlanDefinitionActionConditionComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionActionConditionComponent element, int index) {
19763    if (element == null) 
19764      return;
19765    Complex t;
19766    if (Utilities.noString(parentType))
19767      t = parent;
19768    else {
19769      t = parent.predicate("fhir:"+parentType+'.'+name);
19770    }
19771    composeBackboneElement(t, "condition", name, element, index);
19772    if (element.hasKindElement()) {
19773      composeEnum(t, "PlanDefinitionActionConditionComponent", "kind", element.getKindElement(), -1);
19774    }
19775    if (element.hasExpression()) {
19776      composeExpression(t, "PlanDefinitionActionConditionComponent", "expression", element.getExpression(), -1);
19777    }
19778  }
19779
19780  protected void composePlanDefinitionActionInputComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionActionInputComponent element, int index) {
19781    if (element == null) 
19782      return;
19783    Complex t;
19784    if (Utilities.noString(parentType))
19785      t = parent;
19786    else {
19787      t = parent.predicate("fhir:"+parentType+'.'+name);
19788    }
19789    composeBackboneElement(t, "input", name, element, index);
19790    if (element.hasTitleElement()) {
19791      composeString(t, "PlanDefinitionActionInputComponent", "title", element.getTitleElement(), -1);
19792    }
19793    if (element.hasRequirement()) {
19794      composeDataRequirement(t, "PlanDefinitionActionInputComponent", "requirement", element.getRequirement(), -1);
19795    }
19796    if (element.hasRelatedDataElement()) {
19797      composeId(t, "PlanDefinitionActionInputComponent", "relatedData", element.getRelatedDataElement(), -1);
19798    }
19799  }
19800
19801  protected void composePlanDefinitionActionOutputComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionActionOutputComponent element, int index) {
19802    if (element == null) 
19803      return;
19804    Complex t;
19805    if (Utilities.noString(parentType))
19806      t = parent;
19807    else {
19808      t = parent.predicate("fhir:"+parentType+'.'+name);
19809    }
19810    composeBackboneElement(t, "output", name, element, index);
19811    if (element.hasTitleElement()) {
19812      composeString(t, "PlanDefinitionActionOutputComponent", "title", element.getTitleElement(), -1);
19813    }
19814    if (element.hasRequirement()) {
19815      composeDataRequirement(t, "PlanDefinitionActionOutputComponent", "requirement", element.getRequirement(), -1);
19816    }
19817    if (element.hasRelatedDataElement()) {
19818      composeString(t, "PlanDefinitionActionOutputComponent", "relatedData", element.getRelatedDataElement(), -1);
19819    }
19820  }
19821
19822  protected void composePlanDefinitionActionRelatedActionComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionActionRelatedActionComponent element, int index) {
19823    if (element == null) 
19824      return;
19825    Complex t;
19826    if (Utilities.noString(parentType))
19827      t = parent;
19828    else {
19829      t = parent.predicate("fhir:"+parentType+'.'+name);
19830    }
19831    composeBackboneElement(t, "relatedAction", name, element, index);
19832    if (element.hasTargetIdElement()) {
19833      composeId(t, "PlanDefinitionActionRelatedActionComponent", "targetId", element.getTargetIdElement(), -1);
19834    }
19835    if (element.hasRelationshipElement()) {
19836      composeEnum(t, "PlanDefinitionActionRelatedActionComponent", "relationship", element.getRelationshipElement(), -1);
19837    }
19838    if (element.hasOffset()) {
19839      composeType(t, "PlanDefinitionActionRelatedActionComponent", "offset", element.getOffset(), -1);
19840    }
19841  }
19842
19843  protected void composePlanDefinitionActionParticipantComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionActionParticipantComponent element, int index) {
19844    if (element == null) 
19845      return;
19846    Complex t;
19847    if (Utilities.noString(parentType))
19848      t = parent;
19849    else {
19850      t = parent.predicate("fhir:"+parentType+'.'+name);
19851    }
19852    composeBackboneElement(t, "participant", name, element, index);
19853    if (element.hasActorIdElement()) {
19854      composeString(t, "PlanDefinitionActionParticipantComponent", "actorId", element.getActorIdElement(), -1);
19855    }
19856    if (element.hasTypeElement()) {
19857      composeEnum(t, "PlanDefinitionActionParticipantComponent", "type", element.getTypeElement(), -1);
19858    }
19859    if (element.hasTypeReference()) {
19860      composeReference(t, "PlanDefinitionActionParticipantComponent", "typeReference", element.getTypeReference(), -1);
19861    }
19862    if (element.hasRole()) {
19863      composeCodeableConcept(t, "PlanDefinitionActionParticipantComponent", "role", element.getRole(), -1);
19864    }
19865    if (element.hasFunction()) {
19866      composeCodeableConcept(t, "PlanDefinitionActionParticipantComponent", "function", element.getFunction(), -1);
19867    }
19868  }
19869
19870  protected void composePlanDefinitionActionDynamicValueComponent(Complex parent, String parentType, String name, PlanDefinition.PlanDefinitionActionDynamicValueComponent element, int index) {
19871    if (element == null) 
19872      return;
19873    Complex t;
19874    if (Utilities.noString(parentType))
19875      t = parent;
19876    else {
19877      t = parent.predicate("fhir:"+parentType+'.'+name);
19878    }
19879    composeBackboneElement(t, "dynamicValue", name, element, index);
19880    if (element.hasPathElement()) {
19881      composeString(t, "PlanDefinitionActionDynamicValueComponent", "path", element.getPathElement(), -1);
19882    }
19883    if (element.hasExpression()) {
19884      composeExpression(t, "PlanDefinitionActionDynamicValueComponent", "expression", element.getExpression(), -1);
19885    }
19886  }
19887
19888  protected void composePractitioner(Complex parent, String parentType, String name, Practitioner element, int index) {
19889    if (element == null) 
19890      return;
19891    Complex t;
19892    if (Utilities.noString(parentType))
19893      t = parent;
19894    else {
19895      t = parent.predicate("fhir:"+parentType+'.'+name);
19896    }
19897    composeDomainResource(t, "Practitioner", name, element, index);
19898    for (int i = 0; i < element.getIdentifier().size(); i++) {
19899      composeIdentifier(t, "Practitioner", "identifier", element.getIdentifier().get(i), i);
19900    }
19901    if (element.hasActiveElement()) {
19902      composeBoolean(t, "Practitioner", "active", element.getActiveElement(), -1);
19903    }
19904    for (int i = 0; i < element.getName().size(); i++) {
19905      composeHumanName(t, "Practitioner", "name", element.getName().get(i), i);
19906    }
19907    for (int i = 0; i < element.getTelecom().size(); i++) {
19908      composeContactPoint(t, "Practitioner", "telecom", element.getTelecom().get(i), i);
19909    }
19910    if (element.hasDeceased()) {
19911      composeType(t, "Practitioner", "deceased", element.getDeceased(), -1);
19912    }
19913    for (int i = 0; i < element.getAddress().size(); i++) {
19914      composeAddress(t, "Practitioner", "address", element.getAddress().get(i), i);
19915    }
19916    if (element.hasGenderElement()) {
19917      composeEnum(t, "Practitioner", "gender", element.getGenderElement(), -1);
19918    }
19919    if (element.hasBirthDateElement()) {
19920      composeDate(t, "Practitioner", "birthDate", element.getBirthDateElement(), -1);
19921    }
19922    for (int i = 0; i < element.getPhoto().size(); i++) {
19923      composeAttachment(t, "Practitioner", "photo", element.getPhoto().get(i), i);
19924    }
19925    for (int i = 0; i < element.getQualification().size(); i++) {
19926      composePractitionerQualificationComponent(t, "Practitioner", "qualification", element.getQualification().get(i), i);
19927    }
19928    for (int i = 0; i < element.getCommunication().size(); i++) {
19929      composeCodeableConcept(t, "Practitioner", "communication", element.getCommunication().get(i), i);
19930    }
19931  }
19932
19933  protected void composePractitionerQualificationComponent(Complex parent, String parentType, String name, Practitioner.PractitionerQualificationComponent element, int index) {
19934    if (element == null) 
19935      return;
19936    Complex t;
19937    if (Utilities.noString(parentType))
19938      t = parent;
19939    else {
19940      t = parent.predicate("fhir:"+parentType+'.'+name);
19941    }
19942    composeBackboneElement(t, "qualification", name, element, index);
19943    for (int i = 0; i < element.getIdentifier().size(); i++) {
19944      composeIdentifier(t, "PractitionerQualificationComponent", "identifier", element.getIdentifier().get(i), i);
19945    }
19946    if (element.hasCode()) {
19947      composeCodeableConcept(t, "PractitionerQualificationComponent", "code", element.getCode(), -1);
19948    }
19949    if (element.hasPeriod()) {
19950      composePeriod(t, "PractitionerQualificationComponent", "period", element.getPeriod(), -1);
19951    }
19952    if (element.hasIssuer()) {
19953      composeReference(t, "PractitionerQualificationComponent", "issuer", element.getIssuer(), -1);
19954    }
19955  }
19956
19957  protected void composePractitionerRole(Complex parent, String parentType, String name, PractitionerRole element, int index) {
19958    if (element == null) 
19959      return;
19960    Complex t;
19961    if (Utilities.noString(parentType))
19962      t = parent;
19963    else {
19964      t = parent.predicate("fhir:"+parentType+'.'+name);
19965    }
19966    composeDomainResource(t, "PractitionerRole", name, element, index);
19967    for (int i = 0; i < element.getIdentifier().size(); i++) {
19968      composeIdentifier(t, "PractitionerRole", "identifier", element.getIdentifier().get(i), i);
19969    }
19970    if (element.hasActiveElement()) {
19971      composeBoolean(t, "PractitionerRole", "active", element.getActiveElement(), -1);
19972    }
19973    if (element.hasPeriod()) {
19974      composePeriod(t, "PractitionerRole", "period", element.getPeriod(), -1);
19975    }
19976    if (element.hasPractitioner()) {
19977      composeReference(t, "PractitionerRole", "practitioner", element.getPractitioner(), -1);
19978    }
19979    if (element.hasOrganization()) {
19980      composeReference(t, "PractitionerRole", "organization", element.getOrganization(), -1);
19981    }
19982    for (int i = 0; i < element.getCode().size(); i++) {
19983      composeCodeableConcept(t, "PractitionerRole", "code", element.getCode().get(i), i);
19984    }
19985    for (int i = 0; i < element.getSpecialty().size(); i++) {
19986      composeCodeableConcept(t, "PractitionerRole", "specialty", element.getSpecialty().get(i), i);
19987    }
19988    for (int i = 0; i < element.getLocation().size(); i++) {
19989      composeReference(t, "PractitionerRole", "location", element.getLocation().get(i), i);
19990    }
19991    for (int i = 0; i < element.getHealthcareService().size(); i++) {
19992      composeReference(t, "PractitionerRole", "healthcareService", element.getHealthcareService().get(i), i);
19993    }
19994    for (int i = 0; i < element.getTelecom().size(); i++) {
19995      composeContactPoint(t, "PractitionerRole", "telecom", element.getTelecom().get(i), i);
19996    }
19997    for (int i = 0; i < element.getAvailableTime().size(); i++) {
19998      composePractitionerRoleAvailableTimeComponent(t, "PractitionerRole", "availableTime", element.getAvailableTime().get(i), i);
19999    }
20000    for (int i = 0; i < element.getNotAvailable().size(); i++) {
20001      composePractitionerRoleNotAvailableComponent(t, "PractitionerRole", "notAvailable", element.getNotAvailable().get(i), i);
20002    }
20003    if (element.hasAvailabilityExceptionsElement()) {
20004      composeString(t, "PractitionerRole", "availabilityExceptions", element.getAvailabilityExceptionsElement(), -1);
20005    }
20006    for (int i = 0; i < element.getEndpoint().size(); i++) {
20007      composeReference(t, "PractitionerRole", "endpoint", element.getEndpoint().get(i), i);
20008    }
20009  }
20010
20011  protected void composePractitionerRoleAvailableTimeComponent(Complex parent, String parentType, String name, PractitionerRole.PractitionerRoleAvailableTimeComponent 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:"+parentType+'.'+name);
20019    }
20020    composeBackboneElement(t, "availableTime", name, element, index);
20021    for (int i = 0; i < element.getDaysOfWeek().size(); i++) {
20022      composeEnum(t, "PractitionerRoleAvailableTimeComponent", "daysOfWeek", element.getDaysOfWeek().get(i), i);
20023    }
20024    if (element.hasAllDayElement()) {
20025      composeBoolean(t, "PractitionerRoleAvailableTimeComponent", "allDay", element.getAllDayElement(), -1);
20026    }
20027    if (element.hasAvailableStartTimeElement()) {
20028      composeTime(t, "PractitionerRoleAvailableTimeComponent", "availableStartTime", element.getAvailableStartTimeElement(), -1);
20029    }
20030    if (element.hasAvailableEndTimeElement()) {
20031      composeTime(t, "PractitionerRoleAvailableTimeComponent", "availableEndTime", element.getAvailableEndTimeElement(), -1);
20032    }
20033  }
20034
20035  protected void composePractitionerRoleNotAvailableComponent(Complex parent, String parentType, String name, PractitionerRole.PractitionerRoleNotAvailableComponent element, int index) {
20036    if (element == null) 
20037      return;
20038    Complex t;
20039    if (Utilities.noString(parentType))
20040      t = parent;
20041    else {
20042      t = parent.predicate("fhir:"+parentType+'.'+name);
20043    }
20044    composeBackboneElement(t, "notAvailable", name, element, index);
20045    if (element.hasDescriptionElement()) {
20046      composeString(t, "PractitionerRoleNotAvailableComponent", "description", element.getDescriptionElement(), -1);
20047    }
20048    if (element.hasDuring()) {
20049      composePeriod(t, "PractitionerRoleNotAvailableComponent", "during", element.getDuring(), -1);
20050    }
20051  }
20052
20053  protected void composeProcedure(Complex parent, String parentType, String name, Procedure element, int index) {
20054    if (element == null) 
20055      return;
20056    Complex t;
20057    if (Utilities.noString(parentType))
20058      t = parent;
20059    else {
20060      t = parent.predicate("fhir:"+parentType+'.'+name);
20061    }
20062    composeDomainResource(t, "Procedure", name, element, index);
20063    for (int i = 0; i < element.getIdentifier().size(); i++) {
20064      composeIdentifier(t, "Procedure", "identifier", element.getIdentifier().get(i), i);
20065    }
20066    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
20067      composeCanonical(t, "Procedure", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
20068    }
20069    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
20070      composeUri(t, "Procedure", "instantiatesUri", element.getInstantiatesUri().get(i), i);
20071    }
20072    for (int i = 0; i < element.getBasedOn().size(); i++) {
20073      composeReference(t, "Procedure", "basedOn", element.getBasedOn().get(i), i);
20074    }
20075    for (int i = 0; i < element.getPartOf().size(); i++) {
20076      composeReference(t, "Procedure", "partOf", element.getPartOf().get(i), i);
20077    }
20078    if (element.hasStatusElement()) {
20079      composeEnum(t, "Procedure", "status", element.getStatusElement(), -1);
20080    }
20081    if (element.hasStatusReason()) {
20082      composeCodeableConcept(t, "Procedure", "statusReason", element.getStatusReason(), -1);
20083    }
20084    for (int i = 0; i < element.getCategory().size(); i++) {
20085      composeCodeableConcept(t, "Procedure", "category", element.getCategory().get(i), i);
20086    }
20087    if (element.hasCode()) {
20088      composeCodeableConcept(t, "Procedure", "code", element.getCode(), -1);
20089    }
20090    if (element.hasSubject()) {
20091      composeReference(t, "Procedure", "subject", element.getSubject(), -1);
20092    }
20093    if (element.hasEncounter()) {
20094      composeReference(t, "Procedure", "encounter", element.getEncounter(), -1);
20095    }
20096    if (element.hasOccurrence()) {
20097      composeType(t, "Procedure", "occurrence", element.getOccurrence(), -1);
20098    }
20099    if (element.hasRecordedElement()) {
20100      composeDateTime(t, "Procedure", "recorded", element.getRecordedElement(), -1);
20101    }
20102    if (element.hasRecorder()) {
20103      composeReference(t, "Procedure", "recorder", element.getRecorder(), -1);
20104    }
20105    if (element.hasReported()) {
20106      composeType(t, "Procedure", "reported", element.getReported(), -1);
20107    }
20108    for (int i = 0; i < element.getPerformer().size(); i++) {
20109      composeProcedurePerformerComponent(t, "Procedure", "performer", element.getPerformer().get(i), i);
20110    }
20111    if (element.hasLocation()) {
20112      composeReference(t, "Procedure", "location", element.getLocation(), -1);
20113    }
20114    for (int i = 0; i < element.getReason().size(); i++) {
20115      composeCodeableReference(t, "Procedure", "reason", element.getReason().get(i), i);
20116    }
20117    for (int i = 0; i < element.getBodySite().size(); i++) {
20118      composeCodeableConcept(t, "Procedure", "bodySite", element.getBodySite().get(i), i);
20119    }
20120    if (element.hasOutcome()) {
20121      composeCodeableConcept(t, "Procedure", "outcome", element.getOutcome(), -1);
20122    }
20123    for (int i = 0; i < element.getReport().size(); i++) {
20124      composeReference(t, "Procedure", "report", element.getReport().get(i), i);
20125    }
20126    for (int i = 0; i < element.getComplication().size(); i++) {
20127      composeCodeableConcept(t, "Procedure", "complication", element.getComplication().get(i), i);
20128    }
20129    for (int i = 0; i < element.getComplicationDetail().size(); i++) {
20130      composeReference(t, "Procedure", "complicationDetail", element.getComplicationDetail().get(i), i);
20131    }
20132    for (int i = 0; i < element.getFollowUp().size(); i++) {
20133      composeCodeableConcept(t, "Procedure", "followUp", element.getFollowUp().get(i), i);
20134    }
20135    for (int i = 0; i < element.getNote().size(); i++) {
20136      composeAnnotation(t, "Procedure", "note", element.getNote().get(i), i);
20137    }
20138    for (int i = 0; i < element.getFocalDevice().size(); i++) {
20139      composeProcedureFocalDeviceComponent(t, "Procedure", "focalDevice", element.getFocalDevice().get(i), i);
20140    }
20141    for (int i = 0; i < element.getUsed().size(); i++) {
20142      composeCodeableReference(t, "Procedure", "used", element.getUsed().get(i), i);
20143    }
20144    for (int i = 0; i < element.getSupportingInfo().size(); i++) {
20145      composeReference(t, "Procedure", "supportingInfo", element.getSupportingInfo().get(i), i);
20146    }
20147  }
20148
20149  protected void composeProcedurePerformerComponent(Complex parent, String parentType, String name, Procedure.ProcedurePerformerComponent element, int index) {
20150    if (element == null) 
20151      return;
20152    Complex t;
20153    if (Utilities.noString(parentType))
20154      t = parent;
20155    else {
20156      t = parent.predicate("fhir:"+parentType+'.'+name);
20157    }
20158    composeBackboneElement(t, "performer", name, element, index);
20159    if (element.hasFunction()) {
20160      composeCodeableConcept(t, "ProcedurePerformerComponent", "function", element.getFunction(), -1);
20161    }
20162    if (element.hasActor()) {
20163      composeReference(t, "ProcedurePerformerComponent", "actor", element.getActor(), -1);
20164    }
20165    if (element.hasOnBehalfOf()) {
20166      composeReference(t, "ProcedurePerformerComponent", "onBehalfOf", element.getOnBehalfOf(), -1);
20167    }
20168  }
20169
20170  protected void composeProcedureFocalDeviceComponent(Complex parent, String parentType, String name, Procedure.ProcedureFocalDeviceComponent element, int index) {
20171    if (element == null) 
20172      return;
20173    Complex t;
20174    if (Utilities.noString(parentType))
20175      t = parent;
20176    else {
20177      t = parent.predicate("fhir:"+parentType+'.'+name);
20178    }
20179    composeBackboneElement(t, "focalDevice", name, element, index);
20180    if (element.hasAction()) {
20181      composeCodeableConcept(t, "ProcedureFocalDeviceComponent", "action", element.getAction(), -1);
20182    }
20183    if (element.hasManipulated()) {
20184      composeReference(t, "ProcedureFocalDeviceComponent", "manipulated", element.getManipulated(), -1);
20185    }
20186  }
20187
20188  protected void composeProvenance(Complex parent, String parentType, String name, Provenance element, int index) {
20189    if (element == null) 
20190      return;
20191    Complex t;
20192    if (Utilities.noString(parentType))
20193      t = parent;
20194    else {
20195      t = parent.predicate("fhir:"+parentType+'.'+name);
20196    }
20197    composeDomainResource(t, "Provenance", name, element, index);
20198    for (int i = 0; i < element.getTarget().size(); i++) {
20199      composeReference(t, "Provenance", "target", element.getTarget().get(i), i);
20200    }
20201    if (element.hasOccurred()) {
20202      composeType(t, "Provenance", "occurred", element.getOccurred(), -1);
20203    }
20204    if (element.hasRecordedElement()) {
20205      composeInstant(t, "Provenance", "recorded", element.getRecordedElement(), -1);
20206    }
20207    for (int i = 0; i < element.getPolicy().size(); i++) {
20208      composeUri(t, "Provenance", "policy", element.getPolicy().get(i), i);
20209    }
20210    if (element.hasLocation()) {
20211      composeReference(t, "Provenance", "location", element.getLocation(), -1);
20212    }
20213    for (int i = 0; i < element.getAuthorization().size(); i++) {
20214      composeCodeableReference(t, "Provenance", "authorization", element.getAuthorization().get(i), i);
20215    }
20216    if (element.hasActivity()) {
20217      composeCodeableConcept(t, "Provenance", "activity", element.getActivity(), -1);
20218    }
20219    for (int i = 0; i < element.getBasedOn().size(); i++) {
20220      composeReference(t, "Provenance", "basedOn", element.getBasedOn().get(i), i);
20221    }
20222    if (element.hasEncounter()) {
20223      composeReference(t, "Provenance", "encounter", element.getEncounter(), -1);
20224    }
20225    for (int i = 0; i < element.getAgent().size(); i++) {
20226      composeProvenanceAgentComponent(t, "Provenance", "agent", element.getAgent().get(i), i);
20227    }
20228    for (int i = 0; i < element.getEntity().size(); i++) {
20229      composeProvenanceEntityComponent(t, "Provenance", "entity", element.getEntity().get(i), i);
20230    }
20231    for (int i = 0; i < element.getSignature().size(); i++) {
20232      composeSignature(t, "Provenance", "signature", element.getSignature().get(i), i);
20233    }
20234  }
20235
20236  protected void composeProvenanceAgentComponent(Complex parent, String parentType, String name, Provenance.ProvenanceAgentComponent element, int index) {
20237    if (element == null) 
20238      return;
20239    Complex t;
20240    if (Utilities.noString(parentType))
20241      t = parent;
20242    else {
20243      t = parent.predicate("fhir:"+parentType+'.'+name);
20244    }
20245    composeBackboneElement(t, "agent", name, element, index);
20246    if (element.hasType()) {
20247      composeCodeableConcept(t, "ProvenanceAgentComponent", "type", element.getType(), -1);
20248    }
20249    for (int i = 0; i < element.getRole().size(); i++) {
20250      composeCodeableConcept(t, "ProvenanceAgentComponent", "role", element.getRole().get(i), i);
20251    }
20252    if (element.hasWho()) {
20253      composeReference(t, "ProvenanceAgentComponent", "who", element.getWho(), -1);
20254    }
20255    if (element.hasOnBehalfOf()) {
20256      composeReference(t, "ProvenanceAgentComponent", "onBehalfOf", element.getOnBehalfOf(), -1);
20257    }
20258  }
20259
20260  protected void composeProvenanceEntityComponent(Complex parent, String parentType, String name, Provenance.ProvenanceEntityComponent element, int index) {
20261    if (element == null) 
20262      return;
20263    Complex t;
20264    if (Utilities.noString(parentType))
20265      t = parent;
20266    else {
20267      t = parent.predicate("fhir:"+parentType+'.'+name);
20268    }
20269    composeBackboneElement(t, "entity", name, element, index);
20270    if (element.hasRoleElement()) {
20271      composeEnum(t, "ProvenanceEntityComponent", "role", element.getRoleElement(), -1);
20272    }
20273    if (element.hasWhat()) {
20274      composeReference(t, "ProvenanceEntityComponent", "what", element.getWhat(), -1);
20275    }
20276    for (int i = 0; i < element.getAgent().size(); i++) {
20277      composeProvenanceAgentComponent(t, "ProvenanceEntityComponent", "agent", element.getAgent().get(i), i);
20278    }
20279  }
20280
20281  protected void composeQuestionnaire(Complex parent, String parentType, String name, Questionnaire element, int index) {
20282    if (element == null) 
20283      return;
20284    Complex t;
20285    if (Utilities.noString(parentType))
20286      t = parent;
20287    else {
20288      t = parent.predicate("fhir:"+parentType+'.'+name);
20289    }
20290    composeMetadataResource(t, "Questionnaire", name, element, index);
20291    if (element.hasUrlElement()) {
20292      composeUri(t, "Questionnaire", "url", element.getUrlElement(), -1);
20293    }
20294    for (int i = 0; i < element.getIdentifier().size(); i++) {
20295      composeIdentifier(t, "Questionnaire", "identifier", element.getIdentifier().get(i), i);
20296    }
20297    if (element.hasVersionElement()) {
20298      composeString(t, "Questionnaire", "version", element.getVersionElement(), -1);
20299    }
20300    if (element.hasNameElement()) {
20301      composeString(t, "Questionnaire", "name", element.getNameElement(), -1);
20302    }
20303    if (element.hasTitleElement()) {
20304      composeString(t, "Questionnaire", "title", element.getTitleElement(), -1);
20305    }
20306    for (int i = 0; i < element.getDerivedFrom().size(); i++) {
20307      composeCanonical(t, "Questionnaire", "derivedFrom", element.getDerivedFrom().get(i), i);
20308    }
20309    if (element.hasStatusElement()) {
20310      composeEnum(t, "Questionnaire", "status", element.getStatusElement(), -1);
20311    }
20312    if (element.hasExperimentalElement()) {
20313      composeBoolean(t, "Questionnaire", "experimental", element.getExperimentalElement(), -1);
20314    }
20315    for (int i = 0; i < element.getSubjectType().size(); i++) {
20316      composeCode(t, "Questionnaire", "subjectType", element.getSubjectType().get(i), i);
20317    }
20318    if (element.hasDateElement()) {
20319      composeDateTime(t, "Questionnaire", "date", element.getDateElement(), -1);
20320    }
20321    if (element.hasPublisherElement()) {
20322      composeString(t, "Questionnaire", "publisher", element.getPublisherElement(), -1);
20323    }
20324    for (int i = 0; i < element.getContact().size(); i++) {
20325      composeContactDetail(t, "Questionnaire", "contact", element.getContact().get(i), i);
20326    }
20327    if (element.hasDescriptionElement()) {
20328      composeMarkdown(t, "Questionnaire", "description", element.getDescriptionElement(), -1);
20329    }
20330    for (int i = 0; i < element.getUseContext().size(); i++) {
20331      composeUsageContext(t, "Questionnaire", "useContext", element.getUseContext().get(i), i);
20332    }
20333    for (int i = 0; i < element.getJurisdiction().size(); i++) {
20334      composeCodeableConcept(t, "Questionnaire", "jurisdiction", element.getJurisdiction().get(i), i);
20335    }
20336    if (element.hasPurposeElement()) {
20337      composeMarkdown(t, "Questionnaire", "purpose", element.getPurposeElement(), -1);
20338    }
20339    if (element.hasCopyrightElement()) {
20340      composeMarkdown(t, "Questionnaire", "copyright", element.getCopyrightElement(), -1);
20341    }
20342    if (element.hasApprovalDateElement()) {
20343      composeDate(t, "Questionnaire", "approvalDate", element.getApprovalDateElement(), -1);
20344    }
20345    if (element.hasLastReviewDateElement()) {
20346      composeDate(t, "Questionnaire", "lastReviewDate", element.getLastReviewDateElement(), -1);
20347    }
20348    if (element.hasEffectivePeriod()) {
20349      composePeriod(t, "Questionnaire", "effectivePeriod", element.getEffectivePeriod(), -1);
20350    }
20351    for (int i = 0; i < element.getCode().size(); i++) {
20352      composeCoding(t, "Questionnaire", "code", element.getCode().get(i), i);
20353    }
20354    for (int i = 0; i < element.getItem().size(); i++) {
20355      composeQuestionnaireItemComponent(t, "Questionnaire", "item", element.getItem().get(i), i);
20356    }
20357  }
20358
20359  protected void composeQuestionnaireItemComponent(Complex parent, String parentType, String name, Questionnaire.QuestionnaireItemComponent element, int index) {
20360    if (element == null) 
20361      return;
20362    Complex t;
20363    if (Utilities.noString(parentType))
20364      t = parent;
20365    else {
20366      t = parent.predicate("fhir:"+parentType+'.'+name);
20367    }
20368    composeBackboneElement(t, "item", name, element, index);
20369    if (element.hasLinkIdElement()) {
20370      composeString(t, "QuestionnaireItemComponent", "linkId", element.getLinkIdElement(), -1);
20371    }
20372    if (element.hasDefinitionElement()) {
20373      composeUri(t, "QuestionnaireItemComponent", "definition", element.getDefinitionElement(), -1);
20374    }
20375    for (int i = 0; i < element.getCode().size(); i++) {
20376      composeCoding(t, "QuestionnaireItemComponent", "code", element.getCode().get(i), i);
20377    }
20378    if (element.hasPrefixElement()) {
20379      composeString(t, "QuestionnaireItemComponent", "prefix", element.getPrefixElement(), -1);
20380    }
20381    if (element.hasTextElement()) {
20382      composeMarkdown(t, "QuestionnaireItemComponent", "text", element.getTextElement(), -1);
20383    }
20384    if (element.hasTypeElement()) {
20385      composeEnum(t, "QuestionnaireItemComponent", "type", element.getTypeElement(), -1);
20386    }
20387    for (int i = 0; i < element.getEnableWhen().size(); i++) {
20388      composeQuestionnaireItemEnableWhenComponent(t, "QuestionnaireItemComponent", "enableWhen", element.getEnableWhen().get(i), i);
20389    }
20390    if (element.hasEnableBehaviorElement()) {
20391      composeEnum(t, "QuestionnaireItemComponent", "enableBehavior", element.getEnableBehaviorElement(), -1);
20392    }
20393    if (element.hasDisabledDisplayElement()) {
20394      composeEnum(t, "QuestionnaireItemComponent", "disabledDisplay", element.getDisabledDisplayElement(), -1);
20395    }
20396    if (element.hasRequiredElement()) {
20397      composeBoolean(t, "QuestionnaireItemComponent", "required", element.getRequiredElement(), -1);
20398    }
20399    if (element.hasRepeatsElement()) {
20400      composeBoolean(t, "QuestionnaireItemComponent", "repeats", element.getRepeatsElement(), -1);
20401    }
20402    if (element.hasReadOnlyElement()) {
20403      composeBoolean(t, "QuestionnaireItemComponent", "readOnly", element.getReadOnlyElement(), -1);
20404    }
20405    if (element.hasMaxLengthElement()) {
20406      composeInteger(t, "QuestionnaireItemComponent", "maxLength", element.getMaxLengthElement(), -1);
20407    }
20408    if (element.hasAnswerConstraintElement()) {
20409      composeEnum(t, "QuestionnaireItemComponent", "answerConstraint", element.getAnswerConstraintElement(), -1);
20410    }
20411    if (element.hasAnswerValueSetElement()) {
20412      composeCanonical(t, "QuestionnaireItemComponent", "answerValueSet", element.getAnswerValueSetElement(), -1);
20413    }
20414    for (int i = 0; i < element.getAnswerOption().size(); i++) {
20415      composeQuestionnaireItemAnswerOptionComponent(t, "QuestionnaireItemComponent", "answerOption", element.getAnswerOption().get(i), i);
20416    }
20417    for (int i = 0; i < element.getInitial().size(); i++) {
20418      composeQuestionnaireItemInitialComponent(t, "QuestionnaireItemComponent", "initial", element.getInitial().get(i), i);
20419    }
20420    for (int i = 0; i < element.getItem().size(); i++) {
20421      composeQuestionnaireItemComponent(t, "QuestionnaireItemComponent", "item", element.getItem().get(i), i);
20422    }
20423  }
20424
20425  protected void composeQuestionnaireItemEnableWhenComponent(Complex parent, String parentType, String name, Questionnaire.QuestionnaireItemEnableWhenComponent element, int index) {
20426    if (element == null) 
20427      return;
20428    Complex t;
20429    if (Utilities.noString(parentType))
20430      t = parent;
20431    else {
20432      t = parent.predicate("fhir:"+parentType+'.'+name);
20433    }
20434    composeBackboneElement(t, "enableWhen", name, element, index);
20435    if (element.hasQuestionElement()) {
20436      composeString(t, "QuestionnaireItemEnableWhenComponent", "question", element.getQuestionElement(), -1);
20437    }
20438    if (element.hasOperatorElement()) {
20439      composeEnum(t, "QuestionnaireItemEnableWhenComponent", "operator", element.getOperatorElement(), -1);
20440    }
20441    if (element.hasAnswer()) {
20442      composeType(t, "QuestionnaireItemEnableWhenComponent", "answer", element.getAnswer(), -1);
20443    }
20444  }
20445
20446  protected void composeQuestionnaireItemAnswerOptionComponent(Complex parent, String parentType, String name, Questionnaire.QuestionnaireItemAnswerOptionComponent element, int index) {
20447    if (element == null) 
20448      return;
20449    Complex t;
20450    if (Utilities.noString(parentType))
20451      t = parent;
20452    else {
20453      t = parent.predicate("fhir:"+parentType+'.'+name);
20454    }
20455    composeBackboneElement(t, "answerOption", name, element, index);
20456    if (element.hasValue()) {
20457      composeType(t, "QuestionnaireItemAnswerOptionComponent", "value", element.getValue(), -1);
20458    }
20459    if (element.hasInitialSelectedElement()) {
20460      composeBoolean(t, "QuestionnaireItemAnswerOptionComponent", "initialSelected", element.getInitialSelectedElement(), -1);
20461    }
20462  }
20463
20464  protected void composeQuestionnaireItemInitialComponent(Complex parent, String parentType, String name, Questionnaire.QuestionnaireItemInitialComponent element, int index) {
20465    if (element == null) 
20466      return;
20467    Complex t;
20468    if (Utilities.noString(parentType))
20469      t = parent;
20470    else {
20471      t = parent.predicate("fhir:"+parentType+'.'+name);
20472    }
20473    composeBackboneElement(t, "initial", name, element, index);
20474    if (element.hasValue()) {
20475      composeType(t, "QuestionnaireItemInitialComponent", "value", element.getValue(), -1);
20476    }
20477  }
20478
20479  protected void composeQuestionnaireResponse(Complex parent, String parentType, String name, QuestionnaireResponse 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:"+parentType+'.'+name);
20487    }
20488    composeDomainResource(t, "QuestionnaireResponse", name, element, index);
20489    for (int i = 0; i < element.getIdentifier().size(); i++) {
20490      composeIdentifier(t, "QuestionnaireResponse", "identifier", element.getIdentifier().get(i), i);
20491    }
20492    for (int i = 0; i < element.getBasedOn().size(); i++) {
20493      composeReference(t, "QuestionnaireResponse", "basedOn", element.getBasedOn().get(i), i);
20494    }
20495    for (int i = 0; i < element.getPartOf().size(); i++) {
20496      composeReference(t, "QuestionnaireResponse", "partOf", element.getPartOf().get(i), i);
20497    }
20498    if (element.hasQuestionnaireElement()) {
20499      composeCanonical(t, "QuestionnaireResponse", "questionnaire", element.getQuestionnaireElement(), -1);
20500    }
20501    if (element.hasStatusElement()) {
20502      composeEnum(t, "QuestionnaireResponse", "status", element.getStatusElement(), -1);
20503    }
20504    if (element.hasSubject()) {
20505      composeReference(t, "QuestionnaireResponse", "subject", element.getSubject(), -1);
20506    }
20507    if (element.hasEncounter()) {
20508      composeReference(t, "QuestionnaireResponse", "encounter", element.getEncounter(), -1);
20509    }
20510    if (element.hasAuthoredElement()) {
20511      composeDateTime(t, "QuestionnaireResponse", "authored", element.getAuthoredElement(), -1);
20512    }
20513    if (element.hasAuthor()) {
20514      composeReference(t, "QuestionnaireResponse", "author", element.getAuthor(), -1);
20515    }
20516    if (element.hasSource()) {
20517      composeReference(t, "QuestionnaireResponse", "source", element.getSource(), -1);
20518    }
20519    for (int i = 0; i < element.getItem().size(); i++) {
20520      composeQuestionnaireResponseItemComponent(t, "QuestionnaireResponse", "item", element.getItem().get(i), i);
20521    }
20522  }
20523
20524  protected void composeQuestionnaireResponseItemComponent(Complex parent, String parentType, String name, QuestionnaireResponse.QuestionnaireResponseItemComponent element, int index) {
20525    if (element == null) 
20526      return;
20527    Complex t;
20528    if (Utilities.noString(parentType))
20529      t = parent;
20530    else {
20531      t = parent.predicate("fhir:"+parentType+'.'+name);
20532    }
20533    composeBackboneElement(t, "item", name, element, index);
20534    if (element.hasLinkIdElement()) {
20535      composeString(t, "QuestionnaireResponseItemComponent", "linkId", element.getLinkIdElement(), -1);
20536    }
20537    if (element.hasDefinitionElement()) {
20538      composeUri(t, "QuestionnaireResponseItemComponent", "definition", element.getDefinitionElement(), -1);
20539    }
20540    if (element.hasTextElement()) {
20541      composeString(t, "QuestionnaireResponseItemComponent", "text", element.getTextElement(), -1);
20542    }
20543    for (int i = 0; i < element.getAnswer().size(); i++) {
20544      composeQuestionnaireResponseItemAnswerComponent(t, "QuestionnaireResponseItemComponent", "answer", element.getAnswer().get(i), i);
20545    }
20546    for (int i = 0; i < element.getItem().size(); i++) {
20547      composeQuestionnaireResponseItemComponent(t, "QuestionnaireResponseItemComponent", "item", element.getItem().get(i), i);
20548    }
20549  }
20550
20551  protected void composeQuestionnaireResponseItemAnswerComponent(Complex parent, String parentType, String name, QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent element, int index) {
20552    if (element == null) 
20553      return;
20554    Complex t;
20555    if (Utilities.noString(parentType))
20556      t = parent;
20557    else {
20558      t = parent.predicate("fhir:"+parentType+'.'+name);
20559    }
20560    composeBackboneElement(t, "answer", name, element, index);
20561    if (element.hasValue()) {
20562      composeType(t, "QuestionnaireResponseItemAnswerComponent", "value", element.getValue(), -1);
20563    }
20564    for (int i = 0; i < element.getItem().size(); i++) {
20565      composeQuestionnaireResponseItemComponent(t, "QuestionnaireResponseItemAnswerComponent", "item", element.getItem().get(i), i);
20566    }
20567  }
20568
20569  protected void composeRegulatedAuthorization(Complex parent, String parentType, String name, RegulatedAuthorization element, int index) {
20570    if (element == null) 
20571      return;
20572    Complex t;
20573    if (Utilities.noString(parentType))
20574      t = parent;
20575    else {
20576      t = parent.predicate("fhir:"+parentType+'.'+name);
20577    }
20578    composeDomainResource(t, "RegulatedAuthorization", name, element, index);
20579    for (int i = 0; i < element.getIdentifier().size(); i++) {
20580      composeIdentifier(t, "RegulatedAuthorization", "identifier", element.getIdentifier().get(i), i);
20581    }
20582    for (int i = 0; i < element.getSubject().size(); i++) {
20583      composeReference(t, "RegulatedAuthorization", "subject", element.getSubject().get(i), i);
20584    }
20585    if (element.hasType()) {
20586      composeCodeableConcept(t, "RegulatedAuthorization", "type", element.getType(), -1);
20587    }
20588    if (element.hasDescriptionElement()) {
20589      composeMarkdown(t, "RegulatedAuthorization", "description", element.getDescriptionElement(), -1);
20590    }
20591    for (int i = 0; i < element.getRegion().size(); i++) {
20592      composeCodeableConcept(t, "RegulatedAuthorization", "region", element.getRegion().get(i), i);
20593    }
20594    if (element.hasStatus()) {
20595      composeCodeableConcept(t, "RegulatedAuthorization", "status", element.getStatus(), -1);
20596    }
20597    if (element.hasStatusDateElement()) {
20598      composeDateTime(t, "RegulatedAuthorization", "statusDate", element.getStatusDateElement(), -1);
20599    }
20600    if (element.hasValidityPeriod()) {
20601      composePeriod(t, "RegulatedAuthorization", "validityPeriod", element.getValidityPeriod(), -1);
20602    }
20603    if (element.hasIndication()) {
20604      composeCodeableReference(t, "RegulatedAuthorization", "indication", element.getIndication(), -1);
20605    }
20606    if (element.hasIntendedUse()) {
20607      composeCodeableConcept(t, "RegulatedAuthorization", "intendedUse", element.getIntendedUse(), -1);
20608    }
20609    for (int i = 0; i < element.getBasis().size(); i++) {
20610      composeCodeableConcept(t, "RegulatedAuthorization", "basis", element.getBasis().get(i), i);
20611    }
20612    if (element.hasHolder()) {
20613      composeReference(t, "RegulatedAuthorization", "holder", element.getHolder(), -1);
20614    }
20615    if (element.hasRegulator()) {
20616      composeReference(t, "RegulatedAuthorization", "regulator", element.getRegulator(), -1);
20617    }
20618    for (int i = 0; i < element.getAttachedDocument().size(); i++) {
20619      composeReference(t, "RegulatedAuthorization", "attachedDocument", element.getAttachedDocument().get(i), i);
20620    }
20621    if (element.hasCase()) {
20622      composeRegulatedAuthorizationCaseComponent(t, "RegulatedAuthorization", "case", element.getCase(), -1);
20623    }
20624  }
20625
20626  protected void composeRegulatedAuthorizationCaseComponent(Complex parent, String parentType, String name, RegulatedAuthorization.RegulatedAuthorizationCaseComponent 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:"+parentType+'.'+name);
20634    }
20635    composeBackboneElement(t, "case", name, element, index);
20636    if (element.hasIdentifier()) {
20637      composeIdentifier(t, "RegulatedAuthorizationCaseComponent", "identifier", element.getIdentifier(), -1);
20638    }
20639    if (element.hasType()) {
20640      composeCodeableConcept(t, "RegulatedAuthorizationCaseComponent", "type", element.getType(), -1);
20641    }
20642    if (element.hasStatus()) {
20643      composeCodeableConcept(t, "RegulatedAuthorizationCaseComponent", "status", element.getStatus(), -1);
20644    }
20645    if (element.hasDate()) {
20646      composeType(t, "RegulatedAuthorizationCaseComponent", "date", element.getDate(), -1);
20647    }
20648    for (int i = 0; i < element.getApplication().size(); i++) {
20649      composeRegulatedAuthorizationCaseComponent(t, "RegulatedAuthorizationCaseComponent", "application", element.getApplication().get(i), i);
20650    }
20651  }
20652
20653  protected void composeRelatedPerson(Complex parent, String parentType, String name, RelatedPerson element, int index) {
20654    if (element == null) 
20655      return;
20656    Complex t;
20657    if (Utilities.noString(parentType))
20658      t = parent;
20659    else {
20660      t = parent.predicate("fhir:"+parentType+'.'+name);
20661    }
20662    composeDomainResource(t, "RelatedPerson", name, element, index);
20663    for (int i = 0; i < element.getIdentifier().size(); i++) {
20664      composeIdentifier(t, "RelatedPerson", "identifier", element.getIdentifier().get(i), i);
20665    }
20666    if (element.hasActiveElement()) {
20667      composeBoolean(t, "RelatedPerson", "active", element.getActiveElement(), -1);
20668    }
20669    if (element.hasPatient()) {
20670      composeReference(t, "RelatedPerson", "patient", element.getPatient(), -1);
20671    }
20672    for (int i = 0; i < element.getRelationship().size(); i++) {
20673      composeCodeableConcept(t, "RelatedPerson", "relationship", element.getRelationship().get(i), i);
20674    }
20675    for (int i = 0; i < element.getName().size(); i++) {
20676      composeHumanName(t, "RelatedPerson", "name", element.getName().get(i), i);
20677    }
20678    for (int i = 0; i < element.getTelecom().size(); i++) {
20679      composeContactPoint(t, "RelatedPerson", "telecom", element.getTelecom().get(i), i);
20680    }
20681    if (element.hasGenderElement()) {
20682      composeEnum(t, "RelatedPerson", "gender", element.getGenderElement(), -1);
20683    }
20684    if (element.hasBirthDateElement()) {
20685      composeDate(t, "RelatedPerson", "birthDate", element.getBirthDateElement(), -1);
20686    }
20687    for (int i = 0; i < element.getAddress().size(); i++) {
20688      composeAddress(t, "RelatedPerson", "address", element.getAddress().get(i), i);
20689    }
20690    for (int i = 0; i < element.getPhoto().size(); i++) {
20691      composeAttachment(t, "RelatedPerson", "photo", element.getPhoto().get(i), i);
20692    }
20693    if (element.hasPeriod()) {
20694      composePeriod(t, "RelatedPerson", "period", element.getPeriod(), -1);
20695    }
20696    for (int i = 0; i < element.getCommunication().size(); i++) {
20697      composeRelatedPersonCommunicationComponent(t, "RelatedPerson", "communication", element.getCommunication().get(i), i);
20698    }
20699  }
20700
20701  protected void composeRelatedPersonCommunicationComponent(Complex parent, String parentType, String name, RelatedPerson.RelatedPersonCommunicationComponent element, int index) {
20702    if (element == null) 
20703      return;
20704    Complex t;
20705    if (Utilities.noString(parentType))
20706      t = parent;
20707    else {
20708      t = parent.predicate("fhir:"+parentType+'.'+name);
20709    }
20710    composeBackboneElement(t, "communication", name, element, index);
20711    if (element.hasLanguage()) {
20712      composeCodeableConcept(t, "RelatedPersonCommunicationComponent", "language", element.getLanguage(), -1);
20713    }
20714    if (element.hasPreferredElement()) {
20715      composeBoolean(t, "RelatedPersonCommunicationComponent", "preferred", element.getPreferredElement(), -1);
20716    }
20717  }
20718
20719  protected void composeRequestGroup(Complex parent, String parentType, String name, RequestGroup element, int index) {
20720    if (element == null) 
20721      return;
20722    Complex t;
20723    if (Utilities.noString(parentType))
20724      t = parent;
20725    else {
20726      t = parent.predicate("fhir:"+parentType+'.'+name);
20727    }
20728    composeDomainResource(t, "RequestGroup", name, element, index);
20729    for (int i = 0; i < element.getIdentifier().size(); i++) {
20730      composeIdentifier(t, "RequestGroup", "identifier", element.getIdentifier().get(i), i);
20731    }
20732    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
20733      composeCanonical(t, "RequestGroup", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
20734    }
20735    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
20736      composeUri(t, "RequestGroup", "instantiatesUri", element.getInstantiatesUri().get(i), i);
20737    }
20738    for (int i = 0; i < element.getBasedOn().size(); i++) {
20739      composeReference(t, "RequestGroup", "basedOn", element.getBasedOn().get(i), i);
20740    }
20741    for (int i = 0; i < element.getReplaces().size(); i++) {
20742      composeReference(t, "RequestGroup", "replaces", element.getReplaces().get(i), i);
20743    }
20744    if (element.hasGroupIdentifier()) {
20745      composeIdentifier(t, "RequestGroup", "groupIdentifier", element.getGroupIdentifier(), -1);
20746    }
20747    if (element.hasStatusElement()) {
20748      composeEnum(t, "RequestGroup", "status", element.getStatusElement(), -1);
20749    }
20750    if (element.hasIntentElement()) {
20751      composeEnum(t, "RequestGroup", "intent", element.getIntentElement(), -1);
20752    }
20753    if (element.hasPriorityElement()) {
20754      composeEnum(t, "RequestGroup", "priority", element.getPriorityElement(), -1);
20755    }
20756    if (element.hasCode()) {
20757      composeCodeableConcept(t, "RequestGroup", "code", element.getCode(), -1);
20758    }
20759    if (element.hasSubject()) {
20760      composeReference(t, "RequestGroup", "subject", element.getSubject(), -1);
20761    }
20762    if (element.hasEncounter()) {
20763      composeReference(t, "RequestGroup", "encounter", element.getEncounter(), -1);
20764    }
20765    if (element.hasAuthoredOnElement()) {
20766      composeDateTime(t, "RequestGroup", "authoredOn", element.getAuthoredOnElement(), -1);
20767    }
20768    if (element.hasAuthor()) {
20769      composeReference(t, "RequestGroup", "author", element.getAuthor(), -1);
20770    }
20771    for (int i = 0; i < element.getReason().size(); i++) {
20772      composeCodeableReference(t, "RequestGroup", "reason", element.getReason().get(i), i);
20773    }
20774    for (int i = 0; i < element.getGoal().size(); i++) {
20775      composeReference(t, "RequestGroup", "goal", element.getGoal().get(i), i);
20776    }
20777    for (int i = 0; i < element.getNote().size(); i++) {
20778      composeAnnotation(t, "RequestGroup", "note", element.getNote().get(i), i);
20779    }
20780    for (int i = 0; i < element.getAction().size(); i++) {
20781      composeRequestGroupActionComponent(t, "RequestGroup", "action", element.getAction().get(i), i);
20782    }
20783  }
20784
20785  protected void composeRequestGroupActionComponent(Complex parent, String parentType, String name, RequestGroup.RequestGroupActionComponent element, int index) {
20786    if (element == null) 
20787      return;
20788    Complex t;
20789    if (Utilities.noString(parentType))
20790      t = parent;
20791    else {
20792      t = parent.predicate("fhir:"+parentType+'.'+name);
20793    }
20794    composeBackboneElement(t, "action", name, element, index);
20795    if (element.hasLinkIdElement()) {
20796      composeString(t, "RequestGroupActionComponent", "linkId", element.getLinkIdElement(), -1);
20797    }
20798    if (element.hasPrefixElement()) {
20799      composeString(t, "RequestGroupActionComponent", "prefix", element.getPrefixElement(), -1);
20800    }
20801    if (element.hasTitleElement()) {
20802      composeString(t, "RequestGroupActionComponent", "title", element.getTitleElement(), -1);
20803    }
20804    if (element.hasDescriptionElement()) {
20805      composeString(t, "RequestGroupActionComponent", "description", element.getDescriptionElement(), -1);
20806    }
20807    if (element.hasTextEquivalentElement()) {
20808      composeString(t, "RequestGroupActionComponent", "textEquivalent", element.getTextEquivalentElement(), -1);
20809    }
20810    if (element.hasPriorityElement()) {
20811      composeEnum(t, "RequestGroupActionComponent", "priority", element.getPriorityElement(), -1);
20812    }
20813    for (int i = 0; i < element.getCode().size(); i++) {
20814      composeCodeableConcept(t, "RequestGroupActionComponent", "code", element.getCode().get(i), i);
20815    }
20816    for (int i = 0; i < element.getDocumentation().size(); i++) {
20817      composeRelatedArtifact(t, "RequestGroupActionComponent", "documentation", element.getDocumentation().get(i), i);
20818    }
20819    for (int i = 0; i < element.getGoal().size(); i++) {
20820      composeReference(t, "RequestGroupActionComponent", "goal", element.getGoal().get(i), i);
20821    }
20822    for (int i = 0; i < element.getCondition().size(); i++) {
20823      composeRequestGroupActionConditionComponent(t, "RequestGroupActionComponent", "condition", element.getCondition().get(i), i);
20824    }
20825    for (int i = 0; i < element.getRelatedAction().size(); i++) {
20826      composeRequestGroupActionRelatedActionComponent(t, "RequestGroupActionComponent", "relatedAction", element.getRelatedAction().get(i), i);
20827    }
20828    if (element.hasTiming()) {
20829      composeType(t, "RequestGroupActionComponent", "timing", element.getTiming(), -1);
20830    }
20831    if (element.hasLocation()) {
20832      composeCodeableReference(t, "RequestGroupActionComponent", "location", element.getLocation(), -1);
20833    }
20834    for (int i = 0; i < element.getParticipant().size(); i++) {
20835      composeRequestGroupActionParticipantComponent(t, "RequestGroupActionComponent", "participant", element.getParticipant().get(i), i);
20836    }
20837    if (element.hasType()) {
20838      composeCodeableConcept(t, "RequestGroupActionComponent", "type", element.getType(), -1);
20839    }
20840    if (element.hasGroupingBehaviorElement()) {
20841      composeEnum(t, "RequestGroupActionComponent", "groupingBehavior", element.getGroupingBehaviorElement(), -1);
20842    }
20843    if (element.hasSelectionBehaviorElement()) {
20844      composeEnum(t, "RequestGroupActionComponent", "selectionBehavior", element.getSelectionBehaviorElement(), -1);
20845    }
20846    if (element.hasRequiredBehaviorElement()) {
20847      composeEnum(t, "RequestGroupActionComponent", "requiredBehavior", element.getRequiredBehaviorElement(), -1);
20848    }
20849    if (element.hasPrecheckBehaviorElement()) {
20850      composeEnum(t, "RequestGroupActionComponent", "precheckBehavior", element.getPrecheckBehaviorElement(), -1);
20851    }
20852    if (element.hasCardinalityBehaviorElement()) {
20853      composeEnum(t, "RequestGroupActionComponent", "cardinalityBehavior", element.getCardinalityBehaviorElement(), -1);
20854    }
20855    if (element.hasResource()) {
20856      composeReference(t, "RequestGroupActionComponent", "resource", element.getResource(), -1);
20857    }
20858    for (int i = 0; i < element.getAction().size(); i++) {
20859      composeRequestGroupActionComponent(t, "RequestGroupActionComponent", "action", element.getAction().get(i), i);
20860    }
20861  }
20862
20863  protected void composeRequestGroupActionConditionComponent(Complex parent, String parentType, String name, RequestGroup.RequestGroupActionConditionComponent element, int index) {
20864    if (element == null) 
20865      return;
20866    Complex t;
20867    if (Utilities.noString(parentType))
20868      t = parent;
20869    else {
20870      t = parent.predicate("fhir:"+parentType+'.'+name);
20871    }
20872    composeBackboneElement(t, "condition", name, element, index);
20873    if (element.hasKindElement()) {
20874      composeEnum(t, "RequestGroupActionConditionComponent", "kind", element.getKindElement(), -1);
20875    }
20876    if (element.hasExpression()) {
20877      composeExpression(t, "RequestGroupActionConditionComponent", "expression", element.getExpression(), -1);
20878    }
20879  }
20880
20881  protected void composeRequestGroupActionRelatedActionComponent(Complex parent, String parentType, String name, RequestGroup.RequestGroupActionRelatedActionComponent element, int index) {
20882    if (element == null) 
20883      return;
20884    Complex t;
20885    if (Utilities.noString(parentType))
20886      t = parent;
20887    else {
20888      t = parent.predicate("fhir:"+parentType+'.'+name);
20889    }
20890    composeBackboneElement(t, "relatedAction", name, element, index);
20891    if (element.hasTargetIdElement()) {
20892      composeId(t, "RequestGroupActionRelatedActionComponent", "targetId", element.getTargetIdElement(), -1);
20893    }
20894    if (element.hasRelationshipElement()) {
20895      composeEnum(t, "RequestGroupActionRelatedActionComponent", "relationship", element.getRelationshipElement(), -1);
20896    }
20897    if (element.hasOffset()) {
20898      composeType(t, "RequestGroupActionRelatedActionComponent", "offset", element.getOffset(), -1);
20899    }
20900  }
20901
20902  protected void composeRequestGroupActionParticipantComponent(Complex parent, String parentType, String name, RequestGroup.RequestGroupActionParticipantComponent 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:"+parentType+'.'+name);
20910    }
20911    composeBackboneElement(t, "participant", name, element, index);
20912    if (element.hasTypeElement()) {
20913      composeEnum(t, "RequestGroupActionParticipantComponent", "type", element.getTypeElement(), -1);
20914    }
20915    if (element.hasTypeReference()) {
20916      composeReference(t, "RequestGroupActionParticipantComponent", "typeReference", element.getTypeReference(), -1);
20917    }
20918    if (element.hasRole()) {
20919      composeCodeableConcept(t, "RequestGroupActionParticipantComponent", "role", element.getRole(), -1);
20920    }
20921    if (element.hasFunction()) {
20922      composeCodeableConcept(t, "RequestGroupActionParticipantComponent", "function", element.getFunction(), -1);
20923    }
20924    if (element.hasActor()) {
20925      composeReference(t, "RequestGroupActionParticipantComponent", "actor", element.getActor(), -1);
20926    }
20927  }
20928
20929  protected void composeResearchStudy(Complex parent, String parentType, String name, ResearchStudy element, int index) {
20930    if (element == null) 
20931      return;
20932    Complex t;
20933    if (Utilities.noString(parentType))
20934      t = parent;
20935    else {
20936      t = parent.predicate("fhir:"+parentType+'.'+name);
20937    }
20938    composeDomainResource(t, "ResearchStudy", name, element, index);
20939    if (element.hasUrlElement()) {
20940      composeUri(t, "ResearchStudy", "url", element.getUrlElement(), -1);
20941    }
20942    for (int i = 0; i < element.getIdentifier().size(); i++) {
20943      composeIdentifier(t, "ResearchStudy", "identifier", element.getIdentifier().get(i), i);
20944    }
20945    if (element.hasVersionElement()) {
20946      composeString(t, "ResearchStudy", "version", element.getVersionElement(), -1);
20947    }
20948    if (element.hasNameElement()) {
20949      composeString(t, "ResearchStudy", "name", element.getNameElement(), -1);
20950    }
20951    if (element.hasTitleElement()) {
20952      composeString(t, "ResearchStudy", "title", element.getTitleElement(), -1);
20953    }
20954    for (int i = 0; i < element.getLabel().size(); i++) {
20955      composeResearchStudyLabelComponent(t, "ResearchStudy", "label", element.getLabel().get(i), i);
20956    }
20957    for (int i = 0; i < element.getProtocol().size(); i++) {
20958      composeReference(t, "ResearchStudy", "protocol", element.getProtocol().get(i), i);
20959    }
20960    for (int i = 0; i < element.getPartOf().size(); i++) {
20961      composeReference(t, "ResearchStudy", "partOf", element.getPartOf().get(i), i);
20962    }
20963    for (int i = 0; i < element.getRelatedArtifact().size(); i++) {
20964      composeRelatedArtifact(t, "ResearchStudy", "relatedArtifact", element.getRelatedArtifact().get(i), i);
20965    }
20966    if (element.hasDateElement()) {
20967      composeDateTime(t, "ResearchStudy", "date", element.getDateElement(), -1);
20968    }
20969    if (element.hasStatusElement()) {
20970      composeEnum(t, "ResearchStudy", "status", element.getStatusElement(), -1);
20971    }
20972    if (element.hasPrimaryPurposeType()) {
20973      composeCodeableConcept(t, "ResearchStudy", "primaryPurposeType", element.getPrimaryPurposeType(), -1);
20974    }
20975    if (element.hasPhase()) {
20976      composeCodeableConcept(t, "ResearchStudy", "phase", element.getPhase(), -1);
20977    }
20978    for (int i = 0; i < element.getCategory().size(); i++) {
20979      composeCodeableConcept(t, "ResearchStudy", "category", element.getCategory().get(i), i);
20980    }
20981    for (int i = 0; i < element.getFocus().size(); i++) {
20982      composeResearchStudyFocusComponent(t, "ResearchStudy", "focus", element.getFocus().get(i), i);
20983    }
20984    for (int i = 0; i < element.getCondition().size(); i++) {
20985      composeCodeableConcept(t, "ResearchStudy", "condition", element.getCondition().get(i), i);
20986    }
20987    for (int i = 0; i < element.getKeyword().size(); i++) {
20988      composeCodeableConcept(t, "ResearchStudy", "keyword", element.getKeyword().get(i), i);
20989    }
20990    for (int i = 0; i < element.getLocation().size(); i++) {
20991      composeCodeableConcept(t, "ResearchStudy", "location", element.getLocation().get(i), i);
20992    }
20993    if (element.hasDescriptionSummaryElement()) {
20994      composeMarkdown(t, "ResearchStudy", "descriptionSummary", element.getDescriptionSummaryElement(), -1);
20995    }
20996    if (element.hasDescriptionElement()) {
20997      composeMarkdown(t, "ResearchStudy", "description", element.getDescriptionElement(), -1);
20998    }
20999    if (element.hasPeriod()) {
21000      composePeriod(t, "ResearchStudy", "period", element.getPeriod(), -1);
21001    }
21002    for (int i = 0; i < element.getContact().size(); i++) {
21003      composeContactDetail(t, "ResearchStudy", "contact", element.getContact().get(i), i);
21004    }
21005    if (element.hasSponsor()) {
21006      composeReference(t, "ResearchStudy", "sponsor", element.getSponsor(), -1);
21007    }
21008    if (element.hasPrincipalInvestigator()) {
21009      composeReference(t, "ResearchStudy", "principalInvestigator", element.getPrincipalInvestigator(), -1);
21010    }
21011    for (int i = 0; i < element.getSite().size(); i++) {
21012      composeReference(t, "ResearchStudy", "site", element.getSite().get(i), i);
21013    }
21014    for (int i = 0; i < element.getNote().size(); i++) {
21015      composeAnnotation(t, "ResearchStudy", "note", element.getNote().get(i), i);
21016    }
21017    for (int i = 0; i < element.getClassification().size(); i++) {
21018      composeResearchStudyClassificationComponent(t, "ResearchStudy", "classification", element.getClassification().get(i), i);
21019    }
21020    for (int i = 0; i < element.getAssociatedParty().size(); i++) {
21021      composeResearchStudyAssociatedPartyComponent(t, "ResearchStudy", "associatedParty", element.getAssociatedParty().get(i), i);
21022    }
21023    for (int i = 0; i < element.getCurrentState().size(); i++) {
21024      composeCodeableConcept(t, "ResearchStudy", "currentState", element.getCurrentState().get(i), i);
21025    }
21026    for (int i = 0; i < element.getStatusDate().size(); i++) {
21027      composeResearchStudyStatusDateComponent(t, "ResearchStudy", "statusDate", element.getStatusDate().get(i), i);
21028    }
21029    if (element.hasWhyStopped()) {
21030      composeCodeableConcept(t, "ResearchStudy", "whyStopped", element.getWhyStopped(), -1);
21031    }
21032    if (element.hasRecruitment()) {
21033      composeResearchStudyRecruitmentComponent(t, "ResearchStudy", "recruitment", element.getRecruitment(), -1);
21034    }
21035    for (int i = 0; i < element.getComparisonGroup().size(); i++) {
21036      composeResearchStudyComparisonGroupComponent(t, "ResearchStudy", "comparisonGroup", element.getComparisonGroup().get(i), i);
21037    }
21038    for (int i = 0; i < element.getObjective().size(); i++) {
21039      composeResearchStudyObjectiveComponent(t, "ResearchStudy", "objective", element.getObjective().get(i), i);
21040    }
21041    for (int i = 0; i < element.getOutcomeMeasure().size(); i++) {
21042      composeResearchStudyOutcomeMeasureComponent(t, "ResearchStudy", "outcomeMeasure", element.getOutcomeMeasure().get(i), i);
21043    }
21044    for (int i = 0; i < element.getResult().size(); i++) {
21045      composeReference(t, "ResearchStudy", "result", element.getResult().get(i), i);
21046    }
21047    for (int i = 0; i < element.getWebLocation().size(); i++) {
21048      composeResearchStudyWebLocationComponent(t, "ResearchStudy", "webLocation", element.getWebLocation().get(i), i);
21049    }
21050  }
21051
21052  protected void composeResearchStudyLabelComponent(Complex parent, String parentType, String name, ResearchStudy.ResearchStudyLabelComponent element, int index) {
21053    if (element == null) 
21054      return;
21055    Complex t;
21056    if (Utilities.noString(parentType))
21057      t = parent;
21058    else {
21059      t = parent.predicate("fhir:"+parentType+'.'+name);
21060    }
21061    composeBackboneElement(t, "label", name, element, index);
21062    if (element.hasType()) {
21063      composeCodeableConcept(t, "ResearchStudyLabelComponent", "type", element.getType(), -1);
21064    }
21065    if (element.hasValueElement()) {
21066      composeString(t, "ResearchStudyLabelComponent", "value", element.getValueElement(), -1);
21067    }
21068  }
21069
21070  protected void composeResearchStudyFocusComponent(Complex parent, String parentType, String name, ResearchStudy.ResearchStudyFocusComponent element, int index) {
21071    if (element == null) 
21072      return;
21073    Complex t;
21074    if (Utilities.noString(parentType))
21075      t = parent;
21076    else {
21077      t = parent.predicate("fhir:"+parentType+'.'+name);
21078    }
21079    composeBackboneElement(t, "focus", name, element, index);
21080    if (element.hasProductCode()) {
21081      composeCodeableConcept(t, "ResearchStudyFocusComponent", "productCode", element.getProductCode(), -1);
21082    }
21083    for (int i = 0; i < element.getFocusType().size(); i++) {
21084      composeCodeableConcept(t, "ResearchStudyFocusComponent", "focusType", element.getFocusType().get(i), i);
21085    }
21086    if (element.hasFactorElement()) {
21087      composeMarkdown(t, "ResearchStudyFocusComponent", "factor", element.getFactorElement(), -1);
21088    }
21089  }
21090
21091  protected void composeResearchStudyClassificationComponent(Complex parent, String parentType, String name, ResearchStudy.ResearchStudyClassificationComponent 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:"+parentType+'.'+name);
21099    }
21100    composeBackboneElement(t, "classification", name, element, index);
21101    if (element.hasType()) {
21102      composeCodeableConcept(t, "ResearchStudyClassificationComponent", "type", element.getType(), -1);
21103    }
21104    for (int i = 0; i < element.getClassifier().size(); i++) {
21105      composeCodeableConcept(t, "ResearchStudyClassificationComponent", "classifier", element.getClassifier().get(i), i);
21106    }
21107  }
21108
21109  protected void composeResearchStudyAssociatedPartyComponent(Complex parent, String parentType, String name, ResearchStudy.ResearchStudyAssociatedPartyComponent element, int index) {
21110    if (element == null) 
21111      return;
21112    Complex t;
21113    if (Utilities.noString(parentType))
21114      t = parent;
21115    else {
21116      t = parent.predicate("fhir:"+parentType+'.'+name);
21117    }
21118    composeBackboneElement(t, "associatedParty", name, element, index);
21119    if (element.hasNameElement()) {
21120      composeString(t, "ResearchStudyAssociatedPartyComponent", "name", element.getNameElement(), -1);
21121    }
21122    if (element.hasRole()) {
21123      composeCodeableConcept(t, "ResearchStudyAssociatedPartyComponent", "role", element.getRole(), -1);
21124    }
21125    for (int i = 0; i < element.getClassifier().size(); i++) {
21126      composeCodeableConcept(t, "ResearchStudyAssociatedPartyComponent", "classifier", element.getClassifier().get(i), i);
21127    }
21128    if (element.hasParty()) {
21129      composeReference(t, "ResearchStudyAssociatedPartyComponent", "party", element.getParty(), -1);
21130    }
21131  }
21132
21133  protected void composeResearchStudyStatusDateComponent(Complex parent, String parentType, String name, ResearchStudy.ResearchStudyStatusDateComponent element, int index) {
21134    if (element == null) 
21135      return;
21136    Complex t;
21137    if (Utilities.noString(parentType))
21138      t = parent;
21139    else {
21140      t = parent.predicate("fhir:"+parentType+'.'+name);
21141    }
21142    composeBackboneElement(t, "statusDate", name, element, index);
21143    if (element.hasActivity()) {
21144      composeCodeableConcept(t, "ResearchStudyStatusDateComponent", "activity", element.getActivity(), -1);
21145    }
21146    if (element.hasActualElement()) {
21147      composeBoolean(t, "ResearchStudyStatusDateComponent", "actual", element.getActualElement(), -1);
21148    }
21149    if (element.hasPeriod()) {
21150      composePeriod(t, "ResearchStudyStatusDateComponent", "period", element.getPeriod(), -1);
21151    }
21152  }
21153
21154  protected void composeResearchStudyRecruitmentComponent(Complex parent, String parentType, String name, ResearchStudy.ResearchStudyRecruitmentComponent element, int index) {
21155    if (element == null) 
21156      return;
21157    Complex t;
21158    if (Utilities.noString(parentType))
21159      t = parent;
21160    else {
21161      t = parent.predicate("fhir:"+parentType+'.'+name);
21162    }
21163    composeBackboneElement(t, "recruitment", name, element, index);
21164    if (element.hasTargetNumberElement()) {
21165      composeUnsignedInt(t, "ResearchStudyRecruitmentComponent", "targetNumber", element.getTargetNumberElement(), -1);
21166    }
21167    if (element.hasActualNumberElement()) {
21168      composeUnsignedInt(t, "ResearchStudyRecruitmentComponent", "actualNumber", element.getActualNumberElement(), -1);
21169    }
21170    if (element.hasEligibility()) {
21171      composeReference(t, "ResearchStudyRecruitmentComponent", "eligibility", element.getEligibility(), -1);
21172    }
21173    if (element.hasActualGroup()) {
21174      composeReference(t, "ResearchStudyRecruitmentComponent", "actualGroup", element.getActualGroup(), -1);
21175    }
21176  }
21177
21178  protected void composeResearchStudyComparisonGroupComponent(Complex parent, String parentType, String name, ResearchStudy.ResearchStudyComparisonGroupComponent element, int index) {
21179    if (element == null) 
21180      return;
21181    Complex t;
21182    if (Utilities.noString(parentType))
21183      t = parent;
21184    else {
21185      t = parent.predicate("fhir:"+parentType+'.'+name);
21186    }
21187    composeBackboneElement(t, "comparisonGroup", name, element, index);
21188    if (element.hasIdentifier()) {
21189      composeType(t, "ResearchStudyComparisonGroupComponent", "identifier", element.getIdentifier(), -1);
21190    }
21191    if (element.hasNameElement()) {
21192      composeString(t, "ResearchStudyComparisonGroupComponent", "name", element.getNameElement(), -1);
21193    }
21194    if (element.hasType()) {
21195      composeCodeableConcept(t, "ResearchStudyComparisonGroupComponent", "type", element.getType(), -1);
21196    }
21197    if (element.hasDescriptionElement()) {
21198      composeMarkdown(t, "ResearchStudyComparisonGroupComponent", "description", element.getDescriptionElement(), -1);
21199    }
21200    for (int i = 0; i < element.getIntendedExposure().size(); i++) {
21201      composeReference(t, "ResearchStudyComparisonGroupComponent", "intendedExposure", element.getIntendedExposure().get(i), i);
21202    }
21203    if (element.hasObservedGroup()) {
21204      composeReference(t, "ResearchStudyComparisonGroupComponent", "observedGroup", element.getObservedGroup(), -1);
21205    }
21206  }
21207
21208  protected void composeResearchStudyObjectiveComponent(Complex parent, String parentType, String name, ResearchStudy.ResearchStudyObjectiveComponent element, int index) {
21209    if (element == null) 
21210      return;
21211    Complex t;
21212    if (Utilities.noString(parentType))
21213      t = parent;
21214    else {
21215      t = parent.predicate("fhir:"+parentType+'.'+name);
21216    }
21217    composeBackboneElement(t, "objective", name, element, index);
21218    if (element.hasNameElement()) {
21219      composeString(t, "ResearchStudyObjectiveComponent", "name", element.getNameElement(), -1);
21220    }
21221    if (element.hasType()) {
21222      composeCodeableConcept(t, "ResearchStudyObjectiveComponent", "type", element.getType(), -1);
21223    }
21224    if (element.hasDescriptionElement()) {
21225      composeMarkdown(t, "ResearchStudyObjectiveComponent", "description", element.getDescriptionElement(), -1);
21226    }
21227  }
21228
21229  protected void composeResearchStudyOutcomeMeasureComponent(Complex parent, String parentType, String name, ResearchStudy.ResearchStudyOutcomeMeasureComponent element, int index) {
21230    if (element == null) 
21231      return;
21232    Complex t;
21233    if (Utilities.noString(parentType))
21234      t = parent;
21235    else {
21236      t = parent.predicate("fhir:"+parentType+'.'+name);
21237    }
21238    composeBackboneElement(t, "outcomeMeasure", name, element, index);
21239    if (element.hasNameElement()) {
21240      composeString(t, "ResearchStudyOutcomeMeasureComponent", "name", element.getNameElement(), -1);
21241    }
21242    for (int i = 0; i < element.getType().size(); i++) {
21243      composeCodeableConcept(t, "ResearchStudyOutcomeMeasureComponent", "type", element.getType().get(i), i);
21244    }
21245    if (element.hasDescriptionElement()) {
21246      composeMarkdown(t, "ResearchStudyOutcomeMeasureComponent", "description", element.getDescriptionElement(), -1);
21247    }
21248    if (element.hasReference()) {
21249      composeReference(t, "ResearchStudyOutcomeMeasureComponent", "reference", element.getReference(), -1);
21250    }
21251  }
21252
21253  protected void composeResearchStudyWebLocationComponent(Complex parent, String parentType, String name, ResearchStudy.ResearchStudyWebLocationComponent 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:"+parentType+'.'+name);
21261    }
21262    composeBackboneElement(t, "webLocation", name, element, index);
21263    if (element.hasType()) {
21264      composeCodeableConcept(t, "ResearchStudyWebLocationComponent", "type", element.getType(), -1);
21265    }
21266    if (element.hasUrlElement()) {
21267      composeUri(t, "ResearchStudyWebLocationComponent", "url", element.getUrlElement(), -1);
21268    }
21269  }
21270
21271  protected void composeResearchSubject(Complex parent, String parentType, String name, ResearchSubject element, int index) {
21272    if (element == null) 
21273      return;
21274    Complex t;
21275    if (Utilities.noString(parentType))
21276      t = parent;
21277    else {
21278      t = parent.predicate("fhir:"+parentType+'.'+name);
21279    }
21280    composeDomainResource(t, "ResearchSubject", name, element, index);
21281    for (int i = 0; i < element.getIdentifier().size(); i++) {
21282      composeIdentifier(t, "ResearchSubject", "identifier", element.getIdentifier().get(i), i);
21283    }
21284    if (element.hasStatusElement()) {
21285      composeEnum(t, "ResearchSubject", "status", element.getStatusElement(), -1);
21286    }
21287    for (int i = 0; i < element.getProgress().size(); i++) {
21288      composeResearchSubjectProgressComponent(t, "ResearchSubject", "progress", element.getProgress().get(i), i);
21289    }
21290    if (element.hasPeriod()) {
21291      composePeriod(t, "ResearchSubject", "period", element.getPeriod(), -1);
21292    }
21293    if (element.hasStudy()) {
21294      composeReference(t, "ResearchSubject", "study", element.getStudy(), -1);
21295    }
21296    if (element.hasSubject()) {
21297      composeReference(t, "ResearchSubject", "subject", element.getSubject(), -1);
21298    }
21299    if (element.hasAssignedArmElement()) {
21300      composeString(t, "ResearchSubject", "assignedArm", element.getAssignedArmElement(), -1);
21301    }
21302    if (element.hasActualArmElement()) {
21303      composeString(t, "ResearchSubject", "actualArm", element.getActualArmElement(), -1);
21304    }
21305    if (element.hasConsent()) {
21306      composeReference(t, "ResearchSubject", "consent", element.getConsent(), -1);
21307    }
21308  }
21309
21310  protected void composeResearchSubjectProgressComponent(Complex parent, String parentType, String name, ResearchSubject.ResearchSubjectProgressComponent element, int index) {
21311    if (element == null) 
21312      return;
21313    Complex t;
21314    if (Utilities.noString(parentType))
21315      t = parent;
21316    else {
21317      t = parent.predicate("fhir:"+parentType+'.'+name);
21318    }
21319    composeBackboneElement(t, "progress", name, element, index);
21320    if (element.hasType()) {
21321      composeCodeableConcept(t, "ResearchSubjectProgressComponent", "type", element.getType(), -1);
21322    }
21323    if (element.hasSubjectState()) {
21324      composeCodeableConcept(t, "ResearchSubjectProgressComponent", "subjectState", element.getSubjectState(), -1);
21325    }
21326    if (element.hasMilestone()) {
21327      composeCodeableConcept(t, "ResearchSubjectProgressComponent", "milestone", element.getMilestone(), -1);
21328    }
21329    if (element.hasReason()) {
21330      composeCodeableConcept(t, "ResearchSubjectProgressComponent", "reason", element.getReason(), -1);
21331    }
21332    if (element.hasStartDateElement()) {
21333      composeDateTime(t, "ResearchSubjectProgressComponent", "startDate", element.getStartDateElement(), -1);
21334    }
21335    if (element.hasEndDateElement()) {
21336      composeDateTime(t, "ResearchSubjectProgressComponent", "endDate", element.getEndDateElement(), -1);
21337    }
21338  }
21339
21340  protected void composeRiskAssessment(Complex parent, String parentType, String name, RiskAssessment element, int index) {
21341    if (element == null) 
21342      return;
21343    Complex t;
21344    if (Utilities.noString(parentType))
21345      t = parent;
21346    else {
21347      t = parent.predicate("fhir:"+parentType+'.'+name);
21348    }
21349    composeDomainResource(t, "RiskAssessment", name, element, index);
21350    for (int i = 0; i < element.getIdentifier().size(); i++) {
21351      composeIdentifier(t, "RiskAssessment", "identifier", element.getIdentifier().get(i), i);
21352    }
21353    if (element.hasBasedOn()) {
21354      composeReference(t, "RiskAssessment", "basedOn", element.getBasedOn(), -1);
21355    }
21356    if (element.hasParent()) {
21357      composeReference(t, "RiskAssessment", "parent", element.getParent(), -1);
21358    }
21359    if (element.hasStatusElement()) {
21360      composeEnum(t, "RiskAssessment", "status", element.getStatusElement(), -1);
21361    }
21362    if (element.hasMethod()) {
21363      composeCodeableConcept(t, "RiskAssessment", "method", element.getMethod(), -1);
21364    }
21365    if (element.hasCode()) {
21366      composeCodeableConcept(t, "RiskAssessment", "code", element.getCode(), -1);
21367    }
21368    if (element.hasSubject()) {
21369      composeReference(t, "RiskAssessment", "subject", element.getSubject(), -1);
21370    }
21371    if (element.hasEncounter()) {
21372      composeReference(t, "RiskAssessment", "encounter", element.getEncounter(), -1);
21373    }
21374    if (element.hasOccurrence()) {
21375      composeType(t, "RiskAssessment", "occurrence", element.getOccurrence(), -1);
21376    }
21377    if (element.hasCondition()) {
21378      composeReference(t, "RiskAssessment", "condition", element.getCondition(), -1);
21379    }
21380    if (element.hasPerformer()) {
21381      composeReference(t, "RiskAssessment", "performer", element.getPerformer(), -1);
21382    }
21383    for (int i = 0; i < element.getReason().size(); i++) {
21384      composeCodeableReference(t, "RiskAssessment", "reason", element.getReason().get(i), i);
21385    }
21386    for (int i = 0; i < element.getBasis().size(); i++) {
21387      composeReference(t, "RiskAssessment", "basis", element.getBasis().get(i), i);
21388    }
21389    for (int i = 0; i < element.getPrediction().size(); i++) {
21390      composeRiskAssessmentPredictionComponent(t, "RiskAssessment", "prediction", element.getPrediction().get(i), i);
21391    }
21392    if (element.hasMitigationElement()) {
21393      composeString(t, "RiskAssessment", "mitigation", element.getMitigationElement(), -1);
21394    }
21395    for (int i = 0; i < element.getNote().size(); i++) {
21396      composeAnnotation(t, "RiskAssessment", "note", element.getNote().get(i), i);
21397    }
21398  }
21399
21400  protected void composeRiskAssessmentPredictionComponent(Complex parent, String parentType, String name, RiskAssessment.RiskAssessmentPredictionComponent element, int index) {
21401    if (element == null) 
21402      return;
21403    Complex t;
21404    if (Utilities.noString(parentType))
21405      t = parent;
21406    else {
21407      t = parent.predicate("fhir:"+parentType+'.'+name);
21408    }
21409    composeBackboneElement(t, "prediction", name, element, index);
21410    if (element.hasOutcome()) {
21411      composeCodeableConcept(t, "RiskAssessmentPredictionComponent", "outcome", element.getOutcome(), -1);
21412    }
21413    if (element.hasProbability()) {
21414      composeType(t, "RiskAssessmentPredictionComponent", "probability", element.getProbability(), -1);
21415    }
21416    if (element.hasQualitativeRisk()) {
21417      composeCodeableConcept(t, "RiskAssessmentPredictionComponent", "qualitativeRisk", element.getQualitativeRisk(), -1);
21418    }
21419    if (element.hasRelativeRiskElement()) {
21420      composeDecimal(t, "RiskAssessmentPredictionComponent", "relativeRisk", element.getRelativeRiskElement(), -1);
21421    }
21422    if (element.hasWhen()) {
21423      composeType(t, "RiskAssessmentPredictionComponent", "when", element.getWhen(), -1);
21424    }
21425    if (element.hasRationaleElement()) {
21426      composeString(t, "RiskAssessmentPredictionComponent", "rationale", element.getRationaleElement(), -1);
21427    }
21428  }
21429
21430  protected void composeSchedule(Complex parent, String parentType, String name, Schedule element, int index) {
21431    if (element == null) 
21432      return;
21433    Complex t;
21434    if (Utilities.noString(parentType))
21435      t = parent;
21436    else {
21437      t = parent.predicate("fhir:"+parentType+'.'+name);
21438    }
21439    composeDomainResource(t, "Schedule", name, element, index);
21440    for (int i = 0; i < element.getIdentifier().size(); i++) {
21441      composeIdentifier(t, "Schedule", "identifier", element.getIdentifier().get(i), i);
21442    }
21443    if (element.hasActiveElement()) {
21444      composeBoolean(t, "Schedule", "active", element.getActiveElement(), -1);
21445    }
21446    for (int i = 0; i < element.getServiceCategory().size(); i++) {
21447      composeCodeableConcept(t, "Schedule", "serviceCategory", element.getServiceCategory().get(i), i);
21448    }
21449    for (int i = 0; i < element.getServiceType().size(); i++) {
21450      composeCodeableConcept(t, "Schedule", "serviceType", element.getServiceType().get(i), i);
21451    }
21452    for (int i = 0; i < element.getSpecialty().size(); i++) {
21453      composeCodeableConcept(t, "Schedule", "specialty", element.getSpecialty().get(i), i);
21454    }
21455    for (int i = 0; i < element.getActor().size(); i++) {
21456      composeReference(t, "Schedule", "actor", element.getActor().get(i), i);
21457    }
21458    if (element.hasPlanningHorizon()) {
21459      composePeriod(t, "Schedule", "planningHorizon", element.getPlanningHorizon(), -1);
21460    }
21461    if (element.hasCommentElement()) {
21462      composeString(t, "Schedule", "comment", element.getCommentElement(), -1);
21463    }
21464  }
21465
21466  protected void composeSearchParameter(Complex parent, String parentType, String name, SearchParameter element, int index) {
21467    if (element == null) 
21468      return;
21469    Complex t;
21470    if (Utilities.noString(parentType))
21471      t = parent;
21472    else {
21473      t = parent.predicate("fhir:"+parentType+'.'+name);
21474    }
21475    composeCanonicalResource(t, "SearchParameter", name, element, index);
21476    if (element.hasUrlElement()) {
21477      composeUri(t, "SearchParameter", "url", element.getUrlElement(), -1);
21478    }
21479    if (element.hasVersionElement()) {
21480      composeString(t, "SearchParameter", "version", element.getVersionElement(), -1);
21481    }
21482    if (element.hasNameElement()) {
21483      composeString(t, "SearchParameter", "name", element.getNameElement(), -1);
21484    }
21485    if (element.hasDerivedFromElement()) {
21486      composeCanonical(t, "SearchParameter", "derivedFrom", element.getDerivedFromElement(), -1);
21487    }
21488    if (element.hasStatusElement()) {
21489      composeEnum(t, "SearchParameter", "status", element.getStatusElement(), -1);
21490    }
21491    if (element.hasExperimentalElement()) {
21492      composeBoolean(t, "SearchParameter", "experimental", element.getExperimentalElement(), -1);
21493    }
21494    if (element.hasDateElement()) {
21495      composeDateTime(t, "SearchParameter", "date", element.getDateElement(), -1);
21496    }
21497    if (element.hasPublisherElement()) {
21498      composeString(t, "SearchParameter", "publisher", element.getPublisherElement(), -1);
21499    }
21500    for (int i = 0; i < element.getContact().size(); i++) {
21501      composeContactDetail(t, "SearchParameter", "contact", element.getContact().get(i), i);
21502    }
21503    if (element.hasDescriptionElement()) {
21504      composeMarkdown(t, "SearchParameter", "description", element.getDescriptionElement(), -1);
21505    }
21506    for (int i = 0; i < element.getUseContext().size(); i++) {
21507      composeUsageContext(t, "SearchParameter", "useContext", element.getUseContext().get(i), i);
21508    }
21509    for (int i = 0; i < element.getJurisdiction().size(); i++) {
21510      composeCodeableConcept(t, "SearchParameter", "jurisdiction", element.getJurisdiction().get(i), i);
21511    }
21512    if (element.hasPurposeElement()) {
21513      composeMarkdown(t, "SearchParameter", "purpose", element.getPurposeElement(), -1);
21514    }
21515    if (element.hasCodeElement()) {
21516      composeCode(t, "SearchParameter", "code", element.getCodeElement(), -1);
21517    }
21518    for (int i = 0; i < element.getBase().size(); i++) {
21519      composeCode(t, "SearchParameter", "base", element.getBase().get(i), i);
21520    }
21521    if (element.hasTypeElement()) {
21522      composeEnum(t, "SearchParameter", "type", element.getTypeElement(), -1);
21523    }
21524    if (element.hasExpressionElement()) {
21525      composeString(t, "SearchParameter", "expression", element.getExpressionElement(), -1);
21526    }
21527    if (element.hasXpathElement()) {
21528      composeString(t, "SearchParameter", "xpath", element.getXpathElement(), -1);
21529    }
21530    if (element.hasXpathUsageElement()) {
21531      composeEnum(t, "SearchParameter", "xpathUsage", element.getXpathUsageElement(), -1);
21532    }
21533    for (int i = 0; i < element.getTarget().size(); i++) {
21534      composeCode(t, "SearchParameter", "target", element.getTarget().get(i), i);
21535    }
21536    if (element.hasMultipleOrElement()) {
21537      composeBoolean(t, "SearchParameter", "multipleOr", element.getMultipleOrElement(), -1);
21538    }
21539    if (element.hasMultipleAndElement()) {
21540      composeBoolean(t, "SearchParameter", "multipleAnd", element.getMultipleAndElement(), -1);
21541    }
21542    for (int i = 0; i < element.getComparator().size(); i++) {
21543      composeEnum(t, "SearchParameter", "comparator", element.getComparator().get(i), i);
21544    }
21545    for (int i = 0; i < element.getModifier().size(); i++) {
21546      composeEnum(t, "SearchParameter", "modifier", element.getModifier().get(i), i);
21547    }
21548    for (int i = 0; i < element.getChain().size(); i++) {
21549      composeString(t, "SearchParameter", "chain", element.getChain().get(i), i);
21550    }
21551    for (int i = 0; i < element.getComponent().size(); i++) {
21552      composeSearchParameterComponentComponent(t, "SearchParameter", "component", element.getComponent().get(i), i);
21553    }
21554  }
21555
21556  protected void composeSearchParameterComponentComponent(Complex parent, String parentType, String name, SearchParameter.SearchParameterComponentComponent element, int index) {
21557    if (element == null) 
21558      return;
21559    Complex t;
21560    if (Utilities.noString(parentType))
21561      t = parent;
21562    else {
21563      t = parent.predicate("fhir:"+parentType+'.'+name);
21564    }
21565    composeBackboneElement(t, "component", name, element, index);
21566    if (element.hasDefinitionElement()) {
21567      composeCanonical(t, "SearchParameterComponentComponent", "definition", element.getDefinitionElement(), -1);
21568    }
21569    if (element.hasExpressionElement()) {
21570      composeString(t, "SearchParameterComponentComponent", "expression", element.getExpressionElement(), -1);
21571    }
21572  }
21573
21574  protected void composeServiceRequest(Complex parent, String parentType, String name, ServiceRequest element, int index) {
21575    if (element == null) 
21576      return;
21577    Complex t;
21578    if (Utilities.noString(parentType))
21579      t = parent;
21580    else {
21581      t = parent.predicate("fhir:"+parentType+'.'+name);
21582    }
21583    composeDomainResource(t, "ServiceRequest", name, element, index);
21584    for (int i = 0; i < element.getIdentifier().size(); i++) {
21585      composeIdentifier(t, "ServiceRequest", "identifier", element.getIdentifier().get(i), i);
21586    }
21587    for (int i = 0; i < element.getInstantiatesCanonical().size(); i++) {
21588      composeCanonical(t, "ServiceRequest", "instantiatesCanonical", element.getInstantiatesCanonical().get(i), i);
21589    }
21590    for (int i = 0; i < element.getInstantiatesUri().size(); i++) {
21591      composeUri(t, "ServiceRequest", "instantiatesUri", element.getInstantiatesUri().get(i), i);
21592    }
21593    for (int i = 0; i < element.getBasedOn().size(); i++) {
21594      composeReference(t, "ServiceRequest", "basedOn", element.getBasedOn().get(i), i);
21595    }
21596    for (int i = 0; i < element.getReplaces().size(); i++) {
21597      composeReference(t, "ServiceRequest", "replaces", element.getReplaces().get(i), i);
21598    }
21599    if (element.hasRequisition()) {
21600      composeIdentifier(t, "ServiceRequest", "requisition", element.getRequisition(), -1);
21601    }
21602    if (element.hasStatusElement()) {
21603      composeEnum(t, "ServiceRequest", "status", element.getStatusElement(), -1);
21604    }
21605    if (element.hasIntentElement()) {
21606      composeEnum(t, "ServiceRequest", "intent", element.getIntentElement(), -1);
21607    }
21608    for (int i = 0; i < element.getCategory().size(); i++) {
21609      composeCodeableConcept(t, "ServiceRequest", "category", element.getCategory().get(i), i);
21610    }
21611    if (element.hasPriorityElement()) {
21612      composeEnum(t, "ServiceRequest", "priority", element.getPriorityElement(), -1);
21613    }
21614    if (element.hasDoNotPerformElement()) {
21615      composeBoolean(t, "ServiceRequest", "doNotPerform", element.getDoNotPerformElement(), -1);
21616    }
21617    if (element.hasCode()) {
21618      composeCodeableConcept(t, "ServiceRequest", "code", element.getCode(), -1);
21619    }
21620    for (int i = 0; i < element.getOrderDetail().size(); i++) {
21621      composeCodeableConcept(t, "ServiceRequest", "orderDetail", element.getOrderDetail().get(i), i);
21622    }
21623    if (element.hasQuantity()) {
21624      composeType(t, "ServiceRequest", "quantity", element.getQuantity(), -1);
21625    }
21626    if (element.hasSubject()) {
21627      composeReference(t, "ServiceRequest", "subject", element.getSubject(), -1);
21628    }
21629    if (element.hasEncounter()) {
21630      composeReference(t, "ServiceRequest", "encounter", element.getEncounter(), -1);
21631    }
21632    if (element.hasOccurrence()) {
21633      composeType(t, "ServiceRequest", "occurrence", element.getOccurrence(), -1);
21634    }
21635    if (element.hasAsNeeded()) {
21636      composeType(t, "ServiceRequest", "asNeeded", element.getAsNeeded(), -1);
21637    }
21638    if (element.hasAuthoredOnElement()) {
21639      composeDateTime(t, "ServiceRequest", "authoredOn", element.getAuthoredOnElement(), -1);
21640    }
21641    if (element.hasRequester()) {
21642      composeReference(t, "ServiceRequest", "requester", element.getRequester(), -1);
21643    }
21644    if (element.hasPerformerType()) {
21645      composeCodeableConcept(t, "ServiceRequest", "performerType", element.getPerformerType(), -1);
21646    }
21647    for (int i = 0; i < element.getPerformer().size(); i++) {
21648      composeReference(t, "ServiceRequest", "performer", element.getPerformer().get(i), i);
21649    }
21650    for (int i = 0; i < element.getLocation().size(); i++) {
21651      composeCodeableReference(t, "ServiceRequest", "location", element.getLocation().get(i), i);
21652    }
21653    for (int i = 0; i < element.getReason().size(); i++) {
21654      composeCodeableReference(t, "ServiceRequest", "reason", element.getReason().get(i), i);
21655    }
21656    for (int i = 0; i < element.getInsurance().size(); i++) {
21657      composeReference(t, "ServiceRequest", "insurance", element.getInsurance().get(i), i);
21658    }
21659    for (int i = 0; i < element.getSupportingInfo().size(); i++) {
21660      composeReference(t, "ServiceRequest", "supportingInfo", element.getSupportingInfo().get(i), i);
21661    }
21662    for (int i = 0; i < element.getSpecimen().size(); i++) {
21663      composeReference(t, "ServiceRequest", "specimen", element.getSpecimen().get(i), i);
21664    }
21665    for (int i = 0; i < element.getBodySite().size(); i++) {
21666      composeCodeableConcept(t, "ServiceRequest", "bodySite", element.getBodySite().get(i), i);
21667    }
21668    for (int i = 0; i < element.getNote().size(); i++) {
21669      composeAnnotation(t, "ServiceRequest", "note", element.getNote().get(i), i);
21670    }
21671    if (element.hasPatientInstructionElement()) {
21672      composeString(t, "ServiceRequest", "patientInstruction", element.getPatientInstructionElement(), -1);
21673    }
21674    for (int i = 0; i < element.getRelevantHistory().size(); i++) {
21675      composeReference(t, "ServiceRequest", "relevantHistory", element.getRelevantHistory().get(i), i);
21676    }
21677  }
21678
21679  protected void composeSlot(Complex parent, String parentType, String name, Slot element, int index) {
21680    if (element == null) 
21681      return;
21682    Complex t;
21683    if (Utilities.noString(parentType))
21684      t = parent;
21685    else {
21686      t = parent.predicate("fhir:"+parentType+'.'+name);
21687    }
21688    composeDomainResource(t, "Slot", name, element, index);
21689    for (int i = 0; i < element.getIdentifier().size(); i++) {
21690      composeIdentifier(t, "Slot", "identifier", element.getIdentifier().get(i), i);
21691    }
21692    for (int i = 0; i < element.getServiceCategory().size(); i++) {
21693      composeCodeableConcept(t, "Slot", "serviceCategory", element.getServiceCategory().get(i), i);
21694    }
21695    for (int i = 0; i < element.getServiceType().size(); i++) {
21696      composeCodeableConcept(t, "Slot", "serviceType", element.getServiceType().get(i), i);
21697    }
21698    for (int i = 0; i < element.getSpecialty().size(); i++) {
21699      composeCodeableConcept(t, "Slot", "specialty", element.getSpecialty().get(i), i);
21700    }
21701    for (int i = 0; i < element.getAppointmentType().size(); i++) {
21702      composeCodeableConcept(t, "Slot", "appointmentType", element.getAppointmentType().get(i), i);
21703    }
21704    if (element.hasSchedule()) {
21705      composeReference(t, "Slot", "schedule", element.getSchedule(), -1);
21706    }
21707    if (element.hasStatusElement()) {
21708      composeEnum(t, "Slot", "status", element.getStatusElement(), -1);
21709    }
21710    if (element.hasStartElement()) {
21711      composeInstant(t, "Slot", "start", element.getStartElement(), -1);
21712    }
21713    if (element.hasEndElement()) {
21714      composeInstant(t, "Slot", "end", element.getEndElement(), -1);
21715    }
21716    if (element.hasOverbookedElement()) {
21717      composeBoolean(t, "Slot", "overbooked", element.getOverbookedElement(), -1);
21718    }
21719    if (element.hasCommentElement()) {
21720      composeString(t, "Slot", "comment", element.getCommentElement(), -1);
21721    }
21722  }
21723
21724  protected void composeSpecimen(Complex parent, String parentType, String name, Specimen element, int index) {
21725    if (element == null) 
21726      return;
21727    Complex t;
21728    if (Utilities.noString(parentType))
21729      t = parent;
21730    else {
21731      t = parent.predicate("fhir:"+parentType+'.'+name);
21732    }
21733    composeDomainResource(t, "Specimen", name, element, index);
21734    for (int i = 0; i < element.getIdentifier().size(); i++) {
21735      composeIdentifier(t, "Specimen", "identifier", element.getIdentifier().get(i), i);
21736    }
21737    if (element.hasAccessionIdentifier()) {
21738      composeIdentifier(t, "Specimen", "accessionIdentifier", element.getAccessionIdentifier(), -1);
21739    }
21740    if (element.hasStatusElement()) {
21741      composeEnum(t, "Specimen", "status", element.getStatusElement(), -1);
21742    }
21743    if (element.hasType()) {
21744      composeCodeableConcept(t, "Specimen", "type", element.getType(), -1);
21745    }
21746    if (element.hasSubject()) {
21747      composeReference(t, "Specimen", "subject", element.getSubject(), -1);
21748    }
21749    if (element.hasReceivedTimeElement()) {
21750      composeDateTime(t, "Specimen", "receivedTime", element.getReceivedTimeElement(), -1);
21751    }
21752    for (int i = 0; i < element.getParent().size(); i++) {
21753      composeReference(t, "Specimen", "parent", element.getParent().get(i), i);
21754    }
21755    for (int i = 0; i < element.getRequest().size(); i++) {
21756      composeReference(t, "Specimen", "request", element.getRequest().get(i), i);
21757    }
21758    if (element.hasCollection()) {
21759      composeSpecimenCollectionComponent(t, "Specimen", "collection", element.getCollection(), -1);
21760    }
21761    for (int i = 0; i < element.getProcessing().size(); i++) {
21762      composeSpecimenProcessingComponent(t, "Specimen", "processing", element.getProcessing().get(i), i);
21763    }
21764    for (int i = 0; i < element.getContainer().size(); i++) {
21765      composeSpecimenContainerComponent(t, "Specimen", "container", element.getContainer().get(i), i);
21766    }
21767    for (int i = 0; i < element.getCondition().size(); i++) {
21768      composeCodeableConcept(t, "Specimen", "condition", element.getCondition().get(i), i);
21769    }
21770    for (int i = 0; i < element.getNote().size(); i++) {
21771      composeAnnotation(t, "Specimen", "note", element.getNote().get(i), i);
21772    }
21773  }
21774
21775  protected void composeSpecimenCollectionComponent(Complex parent, String parentType, String name, Specimen.SpecimenCollectionComponent element, int index) {
21776    if (element == null) 
21777      return;
21778    Complex t;
21779    if (Utilities.noString(parentType))
21780      t = parent;
21781    else {
21782      t = parent.predicate("fhir:"+parentType+'.'+name);
21783    }
21784    composeBackboneElement(t, "collection", name, element, index);
21785    if (element.hasCollector()) {
21786      composeReference(t, "SpecimenCollectionComponent", "collector", element.getCollector(), -1);
21787    }
21788    if (element.hasCollected()) {
21789      composeType(t, "SpecimenCollectionComponent", "collected", element.getCollected(), -1);
21790    }
21791    if (element.hasDuration()) {
21792      composeDuration(t, "SpecimenCollectionComponent", "duration", element.getDuration(), -1);
21793    }
21794    if (element.hasQuantity()) {
21795      composeQuantity(t, "SpecimenCollectionComponent", "quantity", element.getQuantity(), -1);
21796    }
21797    if (element.hasMethod()) {
21798      composeCodeableConcept(t, "SpecimenCollectionComponent", "method", element.getMethod(), -1);
21799    }
21800    if (element.hasDevice()) {
21801      composeCodeableReference(t, "SpecimenCollectionComponent", "device", element.getDevice(), -1);
21802    }
21803    if (element.hasProcedure()) {
21804      composeReference(t, "SpecimenCollectionComponent", "procedure", element.getProcedure(), -1);
21805    }
21806    if (element.hasBodySite()) {
21807      composeCodeableReference(t, "SpecimenCollectionComponent", "bodySite", element.getBodySite(), -1);
21808    }
21809    if (element.hasFastingStatus()) {
21810      composeType(t, "SpecimenCollectionComponent", "fastingStatus", element.getFastingStatus(), -1);
21811    }
21812  }
21813
21814  protected void composeSpecimenProcessingComponent(Complex parent, String parentType, String name, Specimen.SpecimenProcessingComponent element, int index) {
21815    if (element == null) 
21816      return;
21817    Complex t;
21818    if (Utilities.noString(parentType))
21819      t = parent;
21820    else {
21821      t = parent.predicate("fhir:"+parentType+'.'+name);
21822    }
21823    composeBackboneElement(t, "processing", name, element, index);
21824    if (element.hasDescriptionElement()) {
21825      composeString(t, "SpecimenProcessingComponent", "description", element.getDescriptionElement(), -1);
21826    }
21827    if (element.hasMethod()) {
21828      composeCodeableConcept(t, "SpecimenProcessingComponent", "method", element.getMethod(), -1);
21829    }
21830    for (int i = 0; i < element.getAdditive().size(); i++) {
21831      composeReference(t, "SpecimenProcessingComponent", "additive", element.getAdditive().get(i), i);
21832    }
21833    if (element.hasTime()) {
21834      composeType(t, "SpecimenProcessingComponent", "time", element.getTime(), -1);
21835    }
21836  }
21837
21838  protected void composeSpecimenContainerComponent(Complex parent, String parentType, String name, Specimen.SpecimenContainerComponent element, int index) {
21839    if (element == null) 
21840      return;
21841    Complex t;
21842    if (Utilities.noString(parentType))
21843      t = parent;
21844    else {
21845      t = parent.predicate("fhir:"+parentType+'.'+name);
21846    }
21847    composeBackboneElement(t, "container", name, element, index);
21848    for (int i = 0; i < element.getIdentifier().size(); i++) {
21849      composeIdentifier(t, "SpecimenContainerComponent", "identifier", element.getIdentifier().get(i), i);
21850    }
21851    if (element.hasDescriptionElement()) {
21852      composeString(t, "SpecimenContainerComponent", "description", element.getDescriptionElement(), -1);
21853    }
21854    if (element.hasLocation()) {
21855      composeReference(t, "SpecimenContainerComponent", "location", element.getLocation(), -1);
21856    }
21857    if (element.hasType()) {
21858      composeCodeableConcept(t, "SpecimenContainerComponent", "type", element.getType(), -1);
21859    }
21860    if (element.hasCapacity()) {
21861      composeQuantity(t, "SpecimenContainerComponent", "capacity", element.getCapacity(), -1);
21862    }
21863    if (element.hasSpecimenQuantity()) {
21864      composeQuantity(t, "SpecimenContainerComponent", "specimenQuantity", element.getSpecimenQuantity(), -1);
21865    }
21866    if (element.hasAdditive()) {
21867      composeType(t, "SpecimenContainerComponent", "additive", element.getAdditive(), -1);
21868    }
21869  }
21870
21871  protected void composeSpecimenDefinition(Complex parent, String parentType, String name, SpecimenDefinition element, int index) {
21872    if (element == null) 
21873      return;
21874    Complex t;
21875    if (Utilities.noString(parentType))
21876      t = parent;
21877    else {
21878      t = parent.predicate("fhir:"+parentType+'.'+name);
21879    }
21880    composeDomainResource(t, "SpecimenDefinition", name, element, index);
21881    if (element.hasUrlElement()) {
21882      composeUri(t, "SpecimenDefinition", "url", element.getUrlElement(), -1);
21883    }
21884    if (element.hasIdentifier()) {
21885      composeIdentifier(t, "SpecimenDefinition", "identifier", element.getIdentifier(), -1);
21886    }
21887    if (element.hasVersionElement()) {
21888      composeString(t, "SpecimenDefinition", "version", element.getVersionElement(), -1);
21889    }
21890    if (element.hasTitleElement()) {
21891      composeString(t, "SpecimenDefinition", "title", element.getTitleElement(), -1);
21892    }
21893    for (int i = 0; i < element.getDerivedFromCanonical().size(); i++) {
21894      composeCanonical(t, "SpecimenDefinition", "derivedFromCanonical", element.getDerivedFromCanonical().get(i), i);
21895    }
21896    for (int i = 0; i < element.getDerivedFromUri().size(); i++) {
21897      composeUri(t, "SpecimenDefinition", "derivedFromUri", element.getDerivedFromUri().get(i), i);
21898    }
21899    if (element.hasStatusElement()) {
21900      composeEnum(t, "SpecimenDefinition", "status", element.getStatusElement(), -1);
21901    }
21902    if (element.hasExperimentalElement()) {
21903      composeBoolean(t, "SpecimenDefinition", "experimental", element.getExperimentalElement(), -1);
21904    }
21905    if (element.hasSubject()) {
21906      composeType(t, "SpecimenDefinition", "subject", element.getSubject(), -1);
21907    }
21908    if (element.hasDateElement()) {
21909      composeDateTime(t, "SpecimenDefinition", "date", element.getDateElement(), -1);
21910    }
21911    if (element.hasPublisher()) {
21912      composeReference(t, "SpecimenDefinition", "publisher", element.getPublisher(), -1);
21913    }
21914    for (int i = 0; i < element.getContact().size(); i++) {
21915      composeContactDetail(t, "SpecimenDefinition", "contact", element.getContact().get(i), i);
21916    }
21917    if (element.hasDescriptionElement()) {
21918      composeMarkdown(t, "SpecimenDefinition", "description", element.getDescriptionElement(), -1);
21919    }
21920    for (int i = 0; i < element.getUseContext().size(); i++) {
21921      composeUsageContext(t, "SpecimenDefinition", "useContext", element.getUseContext().get(i), i);
21922    }
21923    for (int i = 0; i < element.getJurisdiction().size(); i++) {
21924      composeCodeableConcept(t, "SpecimenDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
21925    }
21926    if (element.hasPurposeElement()) {
21927      composeMarkdown(t, "SpecimenDefinition", "purpose", element.getPurposeElement(), -1);
21928    }
21929    if (element.hasCopyrightElement()) {
21930      composeMarkdown(t, "SpecimenDefinition", "copyright", element.getCopyrightElement(), -1);
21931    }
21932    if (element.hasApprovalDateElement()) {
21933      composeDate(t, "SpecimenDefinition", "approvalDate", element.getApprovalDateElement(), -1);
21934    }
21935    if (element.hasLastReviewDateElement()) {
21936      composeDate(t, "SpecimenDefinition", "lastReviewDate", element.getLastReviewDateElement(), -1);
21937    }
21938    if (element.hasEffectivePeriod()) {
21939      composePeriod(t, "SpecimenDefinition", "effectivePeriod", element.getEffectivePeriod(), -1);
21940    }
21941    if (element.hasTypeCollected()) {
21942      composeCodeableConcept(t, "SpecimenDefinition", "typeCollected", element.getTypeCollected(), -1);
21943    }
21944    for (int i = 0; i < element.getPatientPreparation().size(); i++) {
21945      composeCodeableConcept(t, "SpecimenDefinition", "patientPreparation", element.getPatientPreparation().get(i), i);
21946    }
21947    if (element.hasTimeAspectElement()) {
21948      composeString(t, "SpecimenDefinition", "timeAspect", element.getTimeAspectElement(), -1);
21949    }
21950    for (int i = 0; i < element.getCollection().size(); i++) {
21951      composeCodeableConcept(t, "SpecimenDefinition", "collection", element.getCollection().get(i), i);
21952    }
21953    for (int i = 0; i < element.getTypeTested().size(); i++) {
21954      composeSpecimenDefinitionTypeTestedComponent(t, "SpecimenDefinition", "typeTested", element.getTypeTested().get(i), i);
21955    }
21956  }
21957
21958  protected void composeSpecimenDefinitionTypeTestedComponent(Complex parent, String parentType, String name, SpecimenDefinition.SpecimenDefinitionTypeTestedComponent element, int index) {
21959    if (element == null) 
21960      return;
21961    Complex t;
21962    if (Utilities.noString(parentType))
21963      t = parent;
21964    else {
21965      t = parent.predicate("fhir:"+parentType+'.'+name);
21966    }
21967    composeBackboneElement(t, "typeTested", name, element, index);
21968    if (element.hasIsDerivedElement()) {
21969      composeBoolean(t, "SpecimenDefinitionTypeTestedComponent", "isDerived", element.getIsDerivedElement(), -1);
21970    }
21971    if (element.hasType()) {
21972      composeCodeableConcept(t, "SpecimenDefinitionTypeTestedComponent", "type", element.getType(), -1);
21973    }
21974    if (element.hasPreferenceElement()) {
21975      composeEnum(t, "SpecimenDefinitionTypeTestedComponent", "preference", element.getPreferenceElement(), -1);
21976    }
21977    if (element.hasContainer()) {
21978      composeSpecimenDefinitionTypeTestedContainerComponent(t, "SpecimenDefinitionTypeTestedComponent", "container", element.getContainer(), -1);
21979    }
21980    if (element.hasRequirementElement()) {
21981      composeString(t, "SpecimenDefinitionTypeTestedComponent", "requirement", element.getRequirementElement(), -1);
21982    }
21983    if (element.hasRetentionTime()) {
21984      composeDuration(t, "SpecimenDefinitionTypeTestedComponent", "retentionTime", element.getRetentionTime(), -1);
21985    }
21986    if (element.hasSingleUseElement()) {
21987      composeBoolean(t, "SpecimenDefinitionTypeTestedComponent", "singleUse", element.getSingleUseElement(), -1);
21988    }
21989    for (int i = 0; i < element.getRejectionCriterion().size(); i++) {
21990      composeCodeableConcept(t, "SpecimenDefinitionTypeTestedComponent", "rejectionCriterion", element.getRejectionCriterion().get(i), i);
21991    }
21992    for (int i = 0; i < element.getHandling().size(); i++) {
21993      composeSpecimenDefinitionTypeTestedHandlingComponent(t, "SpecimenDefinitionTypeTestedComponent", "handling", element.getHandling().get(i), i);
21994    }
21995    for (int i = 0; i < element.getTestingDestination().size(); i++) {
21996      composeCodeableConcept(t, "SpecimenDefinitionTypeTestedComponent", "testingDestination", element.getTestingDestination().get(i), i);
21997    }
21998  }
21999
22000  protected void composeSpecimenDefinitionTypeTestedContainerComponent(Complex parent, String parentType, String name, SpecimenDefinition.SpecimenDefinitionTypeTestedContainerComponent element, int index) {
22001    if (element == null) 
22002      return;
22003    Complex t;
22004    if (Utilities.noString(parentType))
22005      t = parent;
22006    else {
22007      t = parent.predicate("fhir:"+parentType+'.'+name);
22008    }
22009    composeBackboneElement(t, "container", name, element, index);
22010    if (element.hasMaterial()) {
22011      composeCodeableConcept(t, "SpecimenDefinitionTypeTestedContainerComponent", "material", element.getMaterial(), -1);
22012    }
22013    if (element.hasType()) {
22014      composeCodeableConcept(t, "SpecimenDefinitionTypeTestedContainerComponent", "type", element.getType(), -1);
22015    }
22016    if (element.hasCap()) {
22017      composeCodeableConcept(t, "SpecimenDefinitionTypeTestedContainerComponent", "cap", element.getCap(), -1);
22018    }
22019    if (element.hasDescriptionElement()) {
22020      composeString(t, "SpecimenDefinitionTypeTestedContainerComponent", "description", element.getDescriptionElement(), -1);
22021    }
22022    if (element.hasCapacity()) {
22023      composeQuantity(t, "SpecimenDefinitionTypeTestedContainerComponent", "capacity", element.getCapacity(), -1);
22024    }
22025    if (element.hasMinimumVolume()) {
22026      composeType(t, "SpecimenDefinitionTypeTestedContainerComponent", "minimumVolume", element.getMinimumVolume(), -1);
22027    }
22028    for (int i = 0; i < element.getAdditive().size(); i++) {
22029      composeSpecimenDefinitionTypeTestedContainerAdditiveComponent(t, "SpecimenDefinitionTypeTestedContainerComponent", "additive", element.getAdditive().get(i), i);
22030    }
22031    if (element.hasPreparationElement()) {
22032      composeString(t, "SpecimenDefinitionTypeTestedContainerComponent", "preparation", element.getPreparationElement(), -1);
22033    }
22034  }
22035
22036  protected void composeSpecimenDefinitionTypeTestedContainerAdditiveComponent(Complex parent, String parentType, String name, SpecimenDefinition.SpecimenDefinitionTypeTestedContainerAdditiveComponent 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:"+parentType+'.'+name);
22044    }
22045    composeBackboneElement(t, "additive", name, element, index);
22046    if (element.hasAdditive()) {
22047      composeType(t, "SpecimenDefinitionTypeTestedContainerAdditiveComponent", "additive", element.getAdditive(), -1);
22048    }
22049  }
22050
22051  protected void composeSpecimenDefinitionTypeTestedHandlingComponent(Complex parent, String parentType, String name, SpecimenDefinition.SpecimenDefinitionTypeTestedHandlingComponent element, int index) {
22052    if (element == null) 
22053      return;
22054    Complex t;
22055    if (Utilities.noString(parentType))
22056      t = parent;
22057    else {
22058      t = parent.predicate("fhir:"+parentType+'.'+name);
22059    }
22060    composeBackboneElement(t, "handling", name, element, index);
22061    if (element.hasTemperatureQualifier()) {
22062      composeCodeableConcept(t, "SpecimenDefinitionTypeTestedHandlingComponent", "temperatureQualifier", element.getTemperatureQualifier(), -1);
22063    }
22064    if (element.hasTemperatureRange()) {
22065      composeRange(t, "SpecimenDefinitionTypeTestedHandlingComponent", "temperatureRange", element.getTemperatureRange(), -1);
22066    }
22067    if (element.hasMaxDuration()) {
22068      composeDuration(t, "SpecimenDefinitionTypeTestedHandlingComponent", "maxDuration", element.getMaxDuration(), -1);
22069    }
22070    if (element.hasInstructionElement()) {
22071      composeString(t, "SpecimenDefinitionTypeTestedHandlingComponent", "instruction", element.getInstructionElement(), -1);
22072    }
22073  }
22074
22075  protected void composeStructureDefinition(Complex parent, String parentType, String name, StructureDefinition element, int index) {
22076    if (element == null) 
22077      return;
22078    Complex t;
22079    if (Utilities.noString(parentType))
22080      t = parent;
22081    else {
22082      t = parent.predicate("fhir:"+parentType+'.'+name);
22083    }
22084    composeCanonicalResource(t, "StructureDefinition", name, element, index);
22085    if (element.hasUrlElement()) {
22086      composeUri(t, "StructureDefinition", "url", element.getUrlElement(), -1);
22087    }
22088    for (int i = 0; i < element.getIdentifier().size(); i++) {
22089      composeIdentifier(t, "StructureDefinition", "identifier", element.getIdentifier().get(i), i);
22090    }
22091    if (element.hasVersionElement()) {
22092      composeString(t, "StructureDefinition", "version", element.getVersionElement(), -1);
22093    }
22094    if (element.hasNameElement()) {
22095      composeString(t, "StructureDefinition", "name", element.getNameElement(), -1);
22096    }
22097    if (element.hasTitleElement()) {
22098      composeString(t, "StructureDefinition", "title", element.getTitleElement(), -1);
22099    }
22100    if (element.hasStatusElement()) {
22101      composeEnum(t, "StructureDefinition", "status", element.getStatusElement(), -1);
22102    }
22103    if (element.hasExperimentalElement()) {
22104      composeBoolean(t, "StructureDefinition", "experimental", element.getExperimentalElement(), -1);
22105    }
22106    if (element.hasDateElement()) {
22107      composeDateTime(t, "StructureDefinition", "date", element.getDateElement(), -1);
22108    }
22109    if (element.hasPublisherElement()) {
22110      composeString(t, "StructureDefinition", "publisher", element.getPublisherElement(), -1);
22111    }
22112    for (int i = 0; i < element.getContact().size(); i++) {
22113      composeContactDetail(t, "StructureDefinition", "contact", element.getContact().get(i), i);
22114    }
22115    if (element.hasDescriptionElement()) {
22116      composeMarkdown(t, "StructureDefinition", "description", element.getDescriptionElement(), -1);
22117    }
22118    for (int i = 0; i < element.getUseContext().size(); i++) {
22119      composeUsageContext(t, "StructureDefinition", "useContext", element.getUseContext().get(i), i);
22120    }
22121    for (int i = 0; i < element.getJurisdiction().size(); i++) {
22122      composeCodeableConcept(t, "StructureDefinition", "jurisdiction", element.getJurisdiction().get(i), i);
22123    }
22124    if (element.hasPurposeElement()) {
22125      composeMarkdown(t, "StructureDefinition", "purpose", element.getPurposeElement(), -1);
22126    }
22127    if (element.hasCopyrightElement()) {
22128      composeMarkdown(t, "StructureDefinition", "copyright", element.getCopyrightElement(), -1);
22129    }
22130    for (int i = 0; i < element.getKeyword().size(); i++) {
22131      composeCoding(t, "StructureDefinition", "keyword", element.getKeyword().get(i), i);
22132    }
22133    if (element.hasFhirVersionElement()) {
22134      composeEnum(t, "StructureDefinition", "fhirVersion", element.getFhirVersionElement(), -1);
22135    }
22136    for (int i = 0; i < element.getMapping().size(); i++) {
22137      composeStructureDefinitionMappingComponent(t, "StructureDefinition", "mapping", element.getMapping().get(i), i);
22138    }
22139    if (element.hasKindElement()) {
22140      composeEnum(t, "StructureDefinition", "kind", element.getKindElement(), -1);
22141    }
22142    if (element.hasAbstractElement()) {
22143      composeBoolean(t, "StructureDefinition", "abstract", element.getAbstractElement(), -1);
22144    }
22145    for (int i = 0; i < element.getContext().size(); i++) {
22146      composeStructureDefinitionContextComponent(t, "StructureDefinition", "context", element.getContext().get(i), i);
22147    }
22148    for (int i = 0; i < element.getContextInvariant().size(); i++) {
22149      composeString(t, "StructureDefinition", "contextInvariant", element.getContextInvariant().get(i), i);
22150    }
22151    if (element.hasTypeElement()) {
22152      composeUri(t, "StructureDefinition", "type", element.getTypeElement(), -1);
22153    }
22154    if (element.hasBaseDefinitionElement()) {
22155      composeCanonical(t, "StructureDefinition", "baseDefinition", element.getBaseDefinitionElement(), -1);
22156    }
22157    if (element.hasDerivationElement()) {
22158      composeEnum(t, "StructureDefinition", "derivation", element.getDerivationElement(), -1);
22159    }
22160    if (element.hasSnapshot()) {
22161      composeStructureDefinitionSnapshotComponent(t, "StructureDefinition", "snapshot", element.getSnapshot(), -1);
22162    }
22163    if (element.hasDifferential()) {
22164      composeStructureDefinitionDifferentialComponent(t, "StructureDefinition", "differential", element.getDifferential(), -1);
22165    }
22166  }
22167
22168  protected void composeStructureDefinitionMappingComponent(Complex parent, String parentType, String name, StructureDefinition.StructureDefinitionMappingComponent 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:"+parentType+'.'+name);
22176    }
22177    composeBackboneElement(t, "mapping", name, element, index);
22178    if (element.hasIdentityElement()) {
22179      composeId(t, "StructureDefinitionMappingComponent", "identity", element.getIdentityElement(), -1);
22180    }
22181    if (element.hasUriElement()) {
22182      composeUri(t, "StructureDefinitionMappingComponent", "uri", element.getUriElement(), -1);
22183    }
22184    if (element.hasNameElement()) {
22185      composeString(t, "StructureDefinitionMappingComponent", "name", element.getNameElement(), -1);
22186    }
22187    if (element.hasCommentElement()) {
22188      composeString(t, "StructureDefinitionMappingComponent", "comment", element.getCommentElement(), -1);
22189    }
22190  }
22191
22192  protected void composeStructureDefinitionContextComponent(Complex parent, String parentType, String name, StructureDefinition.StructureDefinitionContextComponent element, int index) {
22193    if (element == null) 
22194      return;
22195    Complex t;
22196    if (Utilities.noString(parentType))
22197      t = parent;
22198    else {
22199      t = parent.predicate("fhir:"+parentType+'.'+name);
22200    }
22201    composeBackboneElement(t, "context", name, element, index);
22202    if (element.hasTypeElement()) {
22203      composeEnum(t, "StructureDefinitionContextComponent", "type", element.getTypeElement(), -1);
22204    }
22205    if (element.hasExpressionElement()) {
22206      composeString(t, "StructureDefinitionContextComponent", "expression", element.getExpressionElement(), -1);
22207    }
22208  }
22209
22210  protected void composeStructureDefinitionSnapshotComponent(Complex parent, String parentType, String name, StructureDefinition.StructureDefinitionSnapshotComponent element, int index) {
22211    if (element == null) 
22212      return;
22213    Complex t;
22214    if (Utilities.noString(parentType))
22215      t = parent;
22216    else {
22217      t = parent.predicate("fhir:"+parentType+'.'+name);
22218    }
22219    composeBackboneElement(t, "snapshot", name, element, index);
22220    for (int i = 0; i < element.getElement().size(); i++) {
22221      composeElementDefinition(t, "StructureDefinitionSnapshotComponent", "element", element.getElement().get(i), i);
22222    }
22223  }
22224
22225  protected void composeStructureDefinitionDifferentialComponent(Complex parent, String parentType, String name, StructureDefinition.StructureDefinitionDifferentialComponent element, int index) {
22226    if (element == null) 
22227      return;
22228    Complex t;
22229    if (Utilities.noString(parentType))
22230      t = parent;
22231    else {
22232      t = parent.predicate("fhir:"+parentType+'.'+name);
22233    }
22234    composeBackboneElement(t, "differential", name, element, index);
22235    for (int i = 0; i < element.getElement().size(); i++) {
22236      composeElementDefinition(t, "StructureDefinitionDifferentialComponent", "element", element.getElement().get(i), i);
22237    }
22238  }
22239
22240  protected void composeStructureMap(Complex parent, String parentType, String name, StructureMap element, int index) {
22241    if (element == null) 
22242      return;
22243    Complex t;
22244    if (Utilities.noString(parentType))
22245      t = parent;
22246    else {
22247      t = parent.predicate("fhir:"+parentType+'.'+name);
22248    }
22249    composeCanonicalResource(t, "StructureMap", name, element, index);
22250    if (element.hasUrlElement()) {
22251      composeUri(t, "StructureMap", "url", element.getUrlElement(), -1);
22252    }
22253    for (int i = 0; i < element.getIdentifier().size(); i++) {
22254      composeIdentifier(t, "StructureMap", "identifier", element.getIdentifier().get(i), i);
22255    }
22256    if (element.hasVersionElement()) {
22257      composeString(t, "StructureMap", "version", element.getVersionElement(), -1);
22258    }
22259    if (element.hasNameElement()) {
22260      composeString(t, "StructureMap", "name", element.getNameElement(), -1);
22261    }
22262    if (element.hasTitleElement()) {
22263      composeString(t, "StructureMap", "title", element.getTitleElement(), -1);
22264    }
22265    if (element.hasStatusElement()) {
22266      composeEnum(t, "StructureMap", "status", element.getStatusElement(), -1);
22267    }
22268    if (element.hasExperimentalElement()) {
22269      composeBoolean(t, "StructureMap", "experimental", element.getExperimentalElement(), -1);
22270    }
22271    if (element.hasDateElement()) {
22272      composeDateTime(t, "StructureMap", "date", element.getDateElement(), -1);
22273    }
22274    if (element.hasPublisherElement()) {
22275      composeString(t, "StructureMap", "publisher", element.getPublisherElement(), -1);
22276    }
22277    for (int i = 0; i < element.getContact().size(); i++) {
22278      composeContactDetail(t, "StructureMap", "contact", element.getContact().get(i), i);
22279    }
22280    if (element.hasDescriptionElement()) {
22281      composeMarkdown(t, "StructureMap", "description", element.getDescriptionElement(), -1);
22282    }
22283    for (int i = 0; i < element.getUseContext().size(); i++) {
22284      composeUsageContext(t, "StructureMap", "useContext", element.getUseContext().get(i), i);
22285    }
22286    for (int i = 0; i < element.getJurisdiction().size(); i++) {
22287      composeCodeableConcept(t, "StructureMap", "jurisdiction", element.getJurisdiction().get(i), i);
22288    }
22289    if (element.hasPurposeElement()) {
22290      composeMarkdown(t, "StructureMap", "purpose", element.getPurposeElement(), -1);
22291    }
22292    if (element.hasCopyrightElement()) {
22293      composeMarkdown(t, "StructureMap", "copyright", element.getCopyrightElement(), -1);
22294    }
22295    for (int i = 0; i < element.getStructure().size(); i++) {
22296      composeStructureMapStructureComponent(t, "StructureMap", "structure", element.getStructure().get(i), i);
22297    }
22298    for (int i = 0; i < element.getImport().size(); i++) {
22299      composeCanonical(t, "StructureMap", "import", element.getImport().get(i), i);
22300    }
22301    for (int i = 0; i < element.getGroup().size(); i++) {
22302      composeStructureMapGroupComponent(t, "StructureMap", "group", element.getGroup().get(i), i);
22303    }
22304  }
22305
22306  protected void composeStructureMapStructureComponent(Complex parent, String parentType, String name, StructureMap.StructureMapStructureComponent element, int index) {
22307    if (element == null) 
22308      return;
22309    Complex t;
22310    if (Utilities.noString(parentType))
22311      t = parent;
22312    else {
22313      t = parent.predicate("fhir:"+parentType+'.'+name);
22314    }
22315    composeBackboneElement(t, "structure", name, element, index);
22316    if (element.hasUrlElement()) {
22317      composeCanonical(t, "StructureMapStructureComponent", "url", element.getUrlElement(), -1);
22318    }
22319    if (element.hasModeElement()) {
22320      composeEnum(t, "StructureMapStructureComponent", "mode", element.getModeElement(), -1);
22321    }
22322    if (element.hasAliasElement()) {
22323      composeString(t, "StructureMapStructureComponent", "alias", element.getAliasElement(), -1);
22324    }
22325    if (element.hasDocumentationElement()) {
22326      composeString(t, "StructureMapStructureComponent", "documentation", element.getDocumentationElement(), -1);
22327    }
22328  }
22329
22330  protected void composeStructureMapGroupComponent(Complex parent, String parentType, String name, StructureMap.StructureMapGroupComponent element, int index) {
22331    if (element == null) 
22332      return;
22333    Complex t;
22334    if (Utilities.noString(parentType))
22335      t = parent;
22336    else {
22337      t = parent.predicate("fhir:"+parentType+'.'+name);
22338    }
22339    composeBackboneElement(t, "group", name, element, index);
22340    if (element.hasNameElement()) {
22341      composeId(t, "StructureMapGroupComponent", "name", element.getNameElement(), -1);
22342    }
22343    if (element.hasExtendsElement()) {
22344      composeId(t, "StructureMapGroupComponent", "extends", element.getExtendsElement(), -1);
22345    }
22346    if (element.hasTypeModeElement()) {
22347      composeEnum(t, "StructureMapGroupComponent", "typeMode", element.getTypeModeElement(), -1);
22348    }
22349    if (element.hasDocumentationElement()) {
22350      composeString(t, "StructureMapGroupComponent", "documentation", element.getDocumentationElement(), -1);
22351    }
22352    for (int i = 0; i < element.getInput().size(); i++) {
22353      composeStructureMapGroupInputComponent(t, "StructureMapGroupComponent", "input", element.getInput().get(i), i);
22354    }
22355    for (int i = 0; i < element.getRule().size(); i++) {
22356      composeStructureMapGroupRuleComponent(t, "StructureMapGroupComponent", "rule", element.getRule().get(i), i);
22357    }
22358  }
22359
22360  protected void composeStructureMapGroupInputComponent(Complex parent, String parentType, String name, StructureMap.StructureMapGroupInputComponent element, int index) {
22361    if (element == null) 
22362      return;
22363    Complex t;
22364    if (Utilities.noString(parentType))
22365      t = parent;
22366    else {
22367      t = parent.predicate("fhir:"+parentType+'.'+name);
22368    }
22369    composeBackboneElement(t, "input", name, element, index);
22370    if (element.hasNameElement()) {
22371      composeId(t, "StructureMapGroupInputComponent", "name", element.getNameElement(), -1);
22372    }
22373    if (element.hasTypeElement()) {
22374      composeString(t, "StructureMapGroupInputComponent", "type", element.getTypeElement(), -1);
22375    }
22376    if (element.hasModeElement()) {
22377      composeEnum(t, "StructureMapGroupInputComponent", "mode", element.getModeElement(), -1);
22378    }
22379    if (element.hasDocumentationElement()) {
22380      composeString(t, "StructureMapGroupInputComponent", "documentation", element.getDocumentationElement(), -1);
22381    }
22382  }
22383
22384  protected void composeStructureMapGroupRuleComponent(Complex parent, String parentType, String name, StructureMap.StructureMapGroupRuleComponent 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:"+parentType+'.'+name);
22392    }
22393    composeBackboneElement(t, "rule", name, element, index);
22394    if (element.hasNameElement()) {
22395      composeId(t, "StructureMapGroupRuleComponent", "name", element.getNameElement(), -1);
22396    }
22397    for (int i = 0; i < element.getSource().size(); i++) {
22398      composeStructureMapGroupRuleSourceComponent(t, "StructureMapGroupRuleComponent", "source", element.getSource().get(i), i);
22399    }
22400    for (int i = 0; i < element.getTarget().size(); i++) {
22401      composeStructureMapGroupRuleTargetComponent(t, "StructureMapGroupRuleComponent", "target", element.getTarget().get(i), i);
22402    }
22403    for (int i = 0; i < element.getRule().size(); i++) {
22404      composeStructureMapGroupRuleComponent(t, "StructureMapGroupRuleComponent", "rule", element.getRule().get(i), i);
22405    }
22406    for (int i = 0; i < element.getDependent().size(); i++) {
22407      composeStructureMapGroupRuleDependentComponent(t, "StructureMapGroupRuleComponent", "dependent", element.getDependent().get(i), i);
22408    }
22409    if (element.hasDocumentationElement()) {
22410      composeString(t, "StructureMapGroupRuleComponent", "documentation", element.getDocumentationElement(), -1);
22411    }
22412  }
22413
22414  protected void composeStructureMapGroupRuleSourceComponent(Complex parent, String parentType, String name, StructureMap.StructureMapGroupRuleSourceComponent element, int index) {
22415    if (element == null) 
22416      return;
22417    Complex t;
22418    if (Utilities.noString(parentType))
22419      t = parent;
22420    else {
22421      t = parent.predicate("fhir:"+parentType+'.'+name);
22422    }
22423    composeBackboneElement(t, "source", name, element, index);
22424    if (element.hasContextElement()) {
22425      composeId(t, "StructureMapGroupRuleSourceComponent", "context", element.getContextElement(), -1);
22426    }
22427    if (element.hasMinElement()) {
22428      composeInteger(t, "StructureMapGroupRuleSourceComponent", "min", element.getMinElement(), -1);
22429    }
22430    if (element.hasMaxElement()) {
22431      composeString(t, "StructureMapGroupRuleSourceComponent", "max", element.getMaxElement(), -1);
22432    }
22433    if (element.hasTypeElement()) {
22434      composeString(t, "StructureMapGroupRuleSourceComponent", "type", element.getTypeElement(), -1);
22435    }
22436    if (element.hasDefaultValueElement()) {
22437      composeString(t, "StructureMapGroupRuleSourceComponent", "defaultValue", element.getDefaultValueElement(), -1);
22438    }
22439    if (element.hasElementElement()) {
22440      composeString(t, "StructureMapGroupRuleSourceComponent", "element", element.getElementElement(), -1);
22441    }
22442    if (element.hasListModeElement()) {
22443      composeEnum(t, "StructureMapGroupRuleSourceComponent", "listMode", element.getListModeElement(), -1);
22444    }
22445    if (element.hasVariableElement()) {
22446      composeId(t, "StructureMapGroupRuleSourceComponent", "variable", element.getVariableElement(), -1);
22447    }
22448    if (element.hasConditionElement()) {
22449      composeString(t, "StructureMapGroupRuleSourceComponent", "condition", element.getConditionElement(), -1);
22450    }
22451    if (element.hasCheckElement()) {
22452      composeString(t, "StructureMapGroupRuleSourceComponent", "check", element.getCheckElement(), -1);
22453    }
22454    if (element.hasLogMessageElement()) {
22455      composeString(t, "StructureMapGroupRuleSourceComponent", "logMessage", element.getLogMessageElement(), -1);
22456    }
22457  }
22458
22459  protected void composeStructureMapGroupRuleTargetComponent(Complex parent, String parentType, String name, StructureMap.StructureMapGroupRuleTargetComponent 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:"+parentType+'.'+name);
22467    }
22468    composeBackboneElement(t, "target", name, element, index);
22469    if (element.hasContextElement()) {
22470      composeId(t, "StructureMapGroupRuleTargetComponent", "context", element.getContextElement(), -1);
22471    }
22472    if (element.hasElementElement()) {
22473      composeString(t, "StructureMapGroupRuleTargetComponent", "element", element.getElementElement(), -1);
22474    }
22475    if (element.hasVariableElement()) {
22476      composeId(t, "StructureMapGroupRuleTargetComponent", "variable", element.getVariableElement(), -1);
22477    }
22478    for (int i = 0; i < element.getListMode().size(); i++) {
22479      composeEnum(t, "StructureMapGroupRuleTargetComponent", "listMode", element.getListMode().get(i), i);
22480    }
22481    if (element.hasListRuleIdElement()) {
22482      composeId(t, "StructureMapGroupRuleTargetComponent", "listRuleId", element.getListRuleIdElement(), -1);
22483    }
22484    if (element.hasTransformElement()) {
22485      composeEnum(t, "StructureMapGroupRuleTargetComponent", "transform", element.getTransformElement(), -1);
22486    }
22487    for (int i = 0; i < element.getParameter().size(); i++) {
22488      composeStructureMapGroupRuleTargetParameterComponent(t, "StructureMapGroupRuleTargetComponent", "parameter", element.getParameter().get(i), i);
22489    }
22490  }
22491
22492  protected void composeStructureMapGroupRuleTargetParameterComponent(Complex parent, String parentType, String name, StructureMap.StructureMapGroupRuleTargetParameterComponent element, int index) {
22493    if (element == null) 
22494      return;
22495    Complex t;
22496    if (Utilities.noString(parentType))
22497      t = parent;
22498    else {
22499      t = parent.predicate("fhir:"+parentType+'.'+name);
22500    }
22501    composeBackboneElement(t, "parameter", name, element, index);
22502    if (element.hasValue()) {
22503      composeType(t, "StructureMapGroupRuleTargetParameterComponent", "value", element.getValue(), -1);
22504    }
22505  }
22506
22507  protected void composeStructureMapGroupRuleDependentComponent(Complex parent, String parentType, String name, StructureMap.StructureMapGroupRuleDependentComponent element, int index) {
22508    if (element == null) 
22509      return;
22510    Complex t;
22511    if (Utilities.noString(parentType))
22512      t = parent;
22513    else {
22514      t = parent.predicate("fhir:"+parentType+'.'+name);
22515    }
22516    composeBackboneElement(t, "dependent", name, element, index);
22517    if (element.hasNameElement()) {
22518      composeId(t, "StructureMapGroupRuleDependentComponent", "name", element.getNameElement(), -1);
22519    }
22520    for (int i = 0; i < element.getParameter().size(); i++) {
22521      composeStructureMapGroupRuleTargetParameterComponent(t, "StructureMapGroupRuleDependentComponent", "parameter", element.getParameter().get(i), i);
22522    }
22523  }
22524
22525  protected void composeSubscription(Complex parent, String parentType, String name, Subscription element, int index) {
22526    if (element == null) 
22527      return;
22528    Complex t;
22529    if (Utilities.noString(parentType))
22530      t = parent;
22531    else {
22532      t = parent.predicate("fhir:"+parentType+'.'+name);
22533    }
22534    composeDomainResource(t, "Subscription", name, element, index);
22535    for (int i = 0; i < element.getIdentifier().size(); i++) {
22536      composeIdentifier(t, "Subscription", "identifier", element.getIdentifier().get(i), i);
22537    }
22538    if (element.hasNameElement()) {
22539      composeString(t, "Subscription", "name", element.getNameElement(), -1);
22540    }
22541    if (element.hasStatusElement()) {
22542      composeEnum(t, "Subscription", "status", element.getStatusElement(), -1);
22543    }
22544    if (element.hasTopicElement()) {
22545      composeCanonical(t, "Subscription", "topic", element.getTopicElement(), -1);
22546    }
22547    for (int i = 0; i < element.getContact().size(); i++) {
22548      composeContactPoint(t, "Subscription", "contact", element.getContact().get(i), i);
22549    }
22550    if (element.hasEndElement()) {
22551      composeInstant(t, "Subscription", "end", element.getEndElement(), -1);
22552    }
22553    if (element.hasReasonElement()) {
22554      composeString(t, "Subscription", "reason", element.getReasonElement(), -1);
22555    }
22556    for (int i = 0; i < element.getFilterBy().size(); i++) {
22557      composeSubscriptionFilterByComponent(t, "Subscription", "filterBy", element.getFilterBy().get(i), i);
22558    }
22559    if (element.hasChannelType()) {
22560      composeCoding(t, "Subscription", "channelType", element.getChannelType(), -1);
22561    }
22562    if (element.hasEndpointElement()) {
22563      composeUrl(t, "Subscription", "endpoint", element.getEndpointElement(), -1);
22564    }
22565    for (int i = 0; i < element.getHeader().size(); i++) {
22566      composeString(t, "Subscription", "header", element.getHeader().get(i), i);
22567    }
22568    if (element.hasHeartbeatPeriodElement()) {
22569      composeUnsignedInt(t, "Subscription", "heartbeatPeriod", element.getHeartbeatPeriodElement(), -1);
22570    }
22571    if (element.hasTimeoutElement()) {
22572      composeUnsignedInt(t, "Subscription", "timeout", element.getTimeoutElement(), -1);
22573    }
22574    if (element.hasContentTypeElement()) {
22575      composeCode(t, "Subscription", "contentType", element.getContentTypeElement(), -1);
22576    }
22577    if (element.hasContentElement()) {
22578      composeEnum(t, "Subscription", "content", element.getContentElement(), -1);
22579    }
22580    if (element.hasNotificationUrlLocationElement()) {
22581      composeEnum(t, "Subscription", "notificationUrlLocation", element.getNotificationUrlLocationElement(), -1);
22582    }
22583    if (element.hasMaxCountElement()) {
22584      composePositiveInt(t, "Subscription", "maxCount", element.getMaxCountElement(), -1);
22585    }
22586  }
22587
22588  protected void composeSubscriptionFilterByComponent(Complex parent, String parentType, String name, Subscription.SubscriptionFilterByComponent element, int index) {
22589    if (element == null) 
22590      return;
22591    Complex t;
22592    if (Utilities.noString(parentType))
22593      t = parent;
22594    else {
22595      t = parent.predicate("fhir:"+parentType+'.'+name);
22596    }
22597    composeBackboneElement(t, "filterBy", name, element, index);
22598    if (element.hasResourceTypeElement()) {
22599      composeUri(t, "SubscriptionFilterByComponent", "resourceType", element.getResourceTypeElement(), -1);
22600    }
22601    if (element.hasSearchParamNameElement()) {
22602      composeString(t, "SubscriptionFilterByComponent", "searchParamName", element.getSearchParamNameElement(), -1);
22603    }
22604    if (element.hasSearchModifierElement()) {
22605      composeEnum(t, "SubscriptionFilterByComponent", "searchModifier", element.getSearchModifierElement(), -1);
22606    }
22607    if (element.hasValueElement()) {
22608      composeString(t, "SubscriptionFilterByComponent", "value", element.getValueElement(), -1);
22609    }
22610  }
22611
22612  protected void composeSubscriptionStatus(Complex parent, String parentType, String name, SubscriptionStatus element, int index) {
22613    if (element == null) 
22614      return;
22615    Complex t;
22616    if (Utilities.noString(parentType))
22617      t = parent;
22618    else {
22619      t = parent.predicate("fhir:"+parentType+'.'+name);
22620    }
22621    composeDomainResource(t, "SubscriptionStatus", name, element, index);
22622    if (element.hasStatusElement()) {
22623      composeEnum(t, "SubscriptionStatus", "status", element.getStatusElement(), -1);
22624    }
22625    if (element.hasTypeElement()) {
22626      composeEnum(t, "SubscriptionStatus", "type", element.getTypeElement(), -1);
22627    }
22628    if (element.hasEventsSinceSubscriptionStartElement()) {
22629      composeInteger64(t, "SubscriptionStatus", "eventsSinceSubscriptionStart", element.getEventsSinceSubscriptionStartElement(), -1);
22630    }
22631    if (element.hasEventsInNotificationElement()) {
22632      composeInteger(t, "SubscriptionStatus", "eventsInNotification", element.getEventsInNotificationElement(), -1);
22633    }
22634    for (int i = 0; i < element.getNotificationEvent().size(); i++) {
22635      composeSubscriptionStatusNotificationEventComponent(t, "SubscriptionStatus", "notificationEvent", element.getNotificationEvent().get(i), i);
22636    }
22637    if (element.hasSubscription()) {
22638      composeReference(t, "SubscriptionStatus", "subscription", element.getSubscription(), -1);
22639    }
22640    if (element.hasTopicElement()) {
22641      composeCanonical(t, "SubscriptionStatus", "topic", element.getTopicElement(), -1);
22642    }
22643    for (int i = 0; i < element.getError().size(); i++) {
22644      composeCodeableConcept(t, "SubscriptionStatus", "error", element.getError().get(i), i);
22645    }
22646  }
22647
22648  protected void composeSubscriptionStatusNotificationEventComponent(Complex parent, String parentType, String name, SubscriptionStatus.SubscriptionStatusNotificationEventComponent element, int index) {
22649    if (element == null) 
22650      return;
22651    Complex t;
22652    if (Utilities.noString(parentType))
22653      t = parent;
22654    else {
22655      t = parent.predicate("fhir:"+parentType+'.'+name);
22656    }
22657    composeBackboneElement(t, "notificationEvent", name, element, index);
22658    if (element.hasEventNumberElement()) {
22659      composeInteger64(t, "SubscriptionStatusNotificationEventComponent", "eventNumber", element.getEventNumberElement(), -1);
22660    }
22661    if (element.hasTimestampElement()) {
22662      composeInstant(t, "SubscriptionStatusNotificationEventComponent", "timestamp", element.getTimestampElement(), -1);
22663    }
22664    if (element.hasFocus()) {
22665      composeReference(t, "SubscriptionStatusNotificationEventComponent", "focus", element.getFocus(), -1);
22666    }
22667    for (int i = 0; i < element.getAdditionalContext().size(); i++) {
22668      composeReference(t, "SubscriptionStatusNotificationEventComponent", "additionalContext", element.getAdditionalContext().get(i), i);
22669    }
22670  }
22671
22672  protected void composeSubscriptionTopic(Complex parent, String parentType, String name, SubscriptionTopic element, int index) {
22673    if (element == null) 
22674      return;
22675    Complex t;
22676    if (Utilities.noString(parentType))
22677      t = parent;
22678    else {
22679      t = parent.predicate("fhir:"+parentType+'.'+name);
22680    }
22681    composeDomainResource(t, "SubscriptionTopic", name, element, index);
22682    if (element.hasUrlElement()) {
22683      composeUri(t, "SubscriptionTopic", "url", element.getUrlElement(), -1);
22684    }
22685    for (int i = 0; i < element.getIdentifier().size(); i++) {
22686      composeIdentifier(t, "SubscriptionTopic", "identifier", element.getIdentifier().get(i), i);
22687    }
22688    if (element.hasVersionElement()) {
22689      composeString(t, "SubscriptionTopic", "version", element.getVersionElement(), -1);
22690    }
22691    if (element.hasTitleElement()) {
22692      composeString(t, "SubscriptionTopic", "title", element.getTitleElement(), -1);
22693    }
22694    for (int i = 0; i < element.getDerivedFrom().size(); i++) {
22695      composeCanonical(t, "SubscriptionTopic", "derivedFrom", element.getDerivedFrom().get(i), i);
22696    }
22697    if (element.hasStatusElement()) {
22698      composeEnum(t, "SubscriptionTopic", "status", element.getStatusElement(), -1);
22699    }
22700    if (element.hasExperimentalElement()) {
22701      composeBoolean(t, "SubscriptionTopic", "experimental", element.getExperimentalElement(), -1);
22702    }
22703    if (element.hasDateElement()) {
22704      composeDateTime(t, "SubscriptionTopic", "date", element.getDateElement(), -1);
22705    }
22706    if (element.hasPublisherElement()) {
22707      composeString(t, "SubscriptionTopic", "publisher", element.getPublisherElement(), -1);
22708    }
22709    for (int i = 0; i < element.getContact().size(); i++) {
22710      composeContactDetail(t, "SubscriptionTopic", "contact", element.getContact().get(i), i);
22711    }
22712    if (element.hasDescriptionElement()) {
22713      composeMarkdown(t, "SubscriptionTopic", "description", element.getDescriptionElement(), -1);
22714    }
22715    for (int i = 0; i < element.getUseContext().size(); i++) {
22716      composeUsageContext(t, "SubscriptionTopic", "useContext", element.getUseContext().get(i), i);
22717    }
22718    for (int i = 0; i < element.getJurisdiction().size(); i++) {
22719      composeCodeableConcept(t, "SubscriptionTopic", "jurisdiction", element.getJurisdiction().get(i), i);
22720    }
22721    if (element.hasPurposeElement()) {
22722      composeMarkdown(t, "SubscriptionTopic", "purpose", element.getPurposeElement(), -1);
22723    }
22724    if (element.hasCopyrightElement()) {
22725      composeMarkdown(t, "SubscriptionTopic", "copyright", element.getCopyrightElement(), -1);
22726    }
22727    if (element.hasApprovalDateElement()) {
22728      composeDate(t, "SubscriptionTopic", "approvalDate", element.getApprovalDateElement(), -1);
22729    }
22730    if (element.hasLastReviewDateElement()) {
22731      composeDate(t, "SubscriptionTopic", "lastReviewDate", element.getLastReviewDateElement(), -1);
22732    }
22733    if (element.hasEffectivePeriod()) {
22734      composePeriod(t, "SubscriptionTopic", "effectivePeriod", element.getEffectivePeriod(), -1);
22735    }
22736    for (int i = 0; i < element.getResourceTrigger().size(); i++) {
22737      composeSubscriptionTopicResourceTriggerComponent(t, "SubscriptionTopic", "resourceTrigger", element.getResourceTrigger().get(i), i);
22738    }
22739    for (int i = 0; i < element.getEventTrigger().size(); i++) {
22740      composeSubscriptionTopicEventTriggerComponent(t, "SubscriptionTopic", "eventTrigger", element.getEventTrigger().get(i), i);
22741    }
22742    for (int i = 0; i < element.getCanFilterBy().size(); i++) {
22743      composeSubscriptionTopicCanFilterByComponent(t, "SubscriptionTopic", "canFilterBy", element.getCanFilterBy().get(i), i);
22744    }
22745    for (int i = 0; i < element.getNotificationShape().size(); i++) {
22746      composeSubscriptionTopicNotificationShapeComponent(t, "SubscriptionTopic", "notificationShape", element.getNotificationShape().get(i), i);
22747    }
22748  }
22749
22750  protected void composeSubscriptionTopicResourceTriggerComponent(Complex parent, String parentType, String name, SubscriptionTopic.SubscriptionTopicResourceTriggerComponent element, int index) {
22751    if (element == null) 
22752      return;
22753    Complex t;
22754    if (Utilities.noString(parentType))
22755      t = parent;
22756    else {
22757      t = parent.predicate("fhir:"+parentType+'.'+name);
22758    }
22759    composeBackboneElement(t, "resourceTrigger", name, element, index);
22760    if (element.hasDescriptionElement()) {
22761      composeMarkdown(t, "SubscriptionTopicResourceTriggerComponent", "description", element.getDescriptionElement(), -1);
22762    }
22763    if (element.hasResourceElement()) {
22764      composeUri(t, "SubscriptionTopicResourceTriggerComponent", "resource", element.getResourceElement(), -1);
22765    }
22766    for (int i = 0; i < element.getSupportedInteraction().size(); i++) {
22767      composeEnum(t, "SubscriptionTopicResourceTriggerComponent", "supportedInteraction", element.getSupportedInteraction().get(i), i);
22768    }
22769    if (element.hasQueryCriteria()) {
22770      composeSubscriptionTopicResourceTriggerQueryCriteriaComponent(t, "SubscriptionTopicResourceTriggerComponent", "queryCriteria", element.getQueryCriteria(), -1);
22771    }
22772    if (element.hasFhirPathCriteriaElement()) {
22773      composeString(t, "SubscriptionTopicResourceTriggerComponent", "fhirPathCriteria", element.getFhirPathCriteriaElement(), -1);
22774    }
22775  }
22776
22777  protected void composeSubscriptionTopicResourceTriggerQueryCriteriaComponent(Complex parent, String parentType, String name, SubscriptionTopic.SubscriptionTopicResourceTriggerQueryCriteriaComponent element, int index) {
22778    if (element == null) 
22779      return;
22780    Complex t;
22781    if (Utilities.noString(parentType))
22782      t = parent;
22783    else {
22784      t = parent.predicate("fhir:"+parentType+'.'+name);
22785    }
22786    composeBackboneElement(t, "queryCriteria", name, element, index);
22787    if (element.hasPreviousElement()) {
22788      composeString(t, "SubscriptionTopicResourceTriggerQueryCriteriaComponent", "previous", element.getPreviousElement(), -1);
22789    }
22790    if (element.hasResultForCreateElement()) {
22791      composeEnum(t, "SubscriptionTopicResourceTriggerQueryCriteriaComponent", "resultForCreate", element.getResultForCreateElement(), -1);
22792    }
22793    if (element.hasCurrentElement()) {
22794      composeString(t, "SubscriptionTopicResourceTriggerQueryCriteriaComponent", "current", element.getCurrentElement(), -1);
22795    }
22796    if (element.hasResultForDeleteElement()) {
22797      composeEnum(t, "SubscriptionTopicResourceTriggerQueryCriteriaComponent", "resultForDelete", element.getResultForDeleteElement(), -1);
22798    }
22799    if (element.hasRequireBothElement()) {
22800      composeBoolean(t, "SubscriptionTopicResourceTriggerQueryCriteriaComponent", "requireBoth", element.getRequireBothElement(), -1);
22801    }
22802  }
22803
22804  protected void composeSubscriptionTopicEventTriggerComponent(Complex parent, String parentType, String name, SubscriptionTopic.SubscriptionTopicEventTriggerComponent element, int index) {
22805    if (element == null) 
22806      return;
22807    Complex t;
22808    if (Utilities.noString(parentType))
22809      t = parent;
22810    else {
22811      t = parent.predicate("fhir:"+parentType+'.'+name);
22812    }
22813    composeBackboneElement(t, "eventTrigger", name, element, index);
22814    if (element.hasDescriptionElement()) {
22815      composeMarkdown(t, "SubscriptionTopicEventTriggerComponent", "description", element.getDescriptionElement(), -1);
22816    }
22817    if (element.hasEvent()) {
22818      composeCodeableConcept(t, "SubscriptionTopicEventTriggerComponent", "event", element.getEvent(), -1);
22819    }
22820    if (element.hasResourceElement()) {
22821      composeUri(t, "SubscriptionTopicEventTriggerComponent", "resource", element.getResourceElement(), -1);
22822    }
22823  }
22824
22825  protected void composeSubscriptionTopicCanFilterByComponent(Complex parent, String parentType, String name, SubscriptionTopic.SubscriptionTopicCanFilterByComponent element, int index) {
22826    if (element == null) 
22827      return;
22828    Complex t;
22829    if (Utilities.noString(parentType))
22830      t = parent;
22831    else {
22832      t = parent.predicate("fhir:"+parentType+'.'+name);
22833    }
22834    composeBackboneElement(t, "canFilterBy", name, element, index);
22835    if (element.hasDescriptionElement()) {
22836      composeMarkdown(t, "SubscriptionTopicCanFilterByComponent", "description", element.getDescriptionElement(), -1);
22837    }
22838    if (element.hasResourceElement()) {
22839      composeUri(t, "SubscriptionTopicCanFilterByComponent", "resource", element.getResourceElement(), -1);
22840    }
22841    if (element.hasFilterParameterElement()) {
22842      composeString(t, "SubscriptionTopicCanFilterByComponent", "filterParameter", element.getFilterParameterElement(), -1);
22843    }
22844    for (int i = 0; i < element.getModifier().size(); i++) {
22845      composeEnum(t, "SubscriptionTopicCanFilterByComponent", "modifier", element.getModifier().get(i), i);
22846    }
22847  }
22848
22849  protected void composeSubscriptionTopicNotificationShapeComponent(Complex parent, String parentType, String name, SubscriptionTopic.SubscriptionTopicNotificationShapeComponent element, int index) {
22850    if (element == null) 
22851      return;
22852    Complex t;
22853    if (Utilities.noString(parentType))
22854      t = parent;
22855    else {
22856      t = parent.predicate("fhir:"+parentType+'.'+name);
22857    }
22858    composeBackboneElement(t, "notificationShape", name, element, index);
22859    if (element.hasResourceElement()) {
22860      composeUri(t, "SubscriptionTopicNotificationShapeComponent", "resource", element.getResourceElement(), -1);
22861    }
22862    for (int i = 0; i < element.getInclude().size(); i++) {
22863      composeString(t, "SubscriptionTopicNotificationShapeComponent", "include", element.getInclude().get(i), i);
22864    }
22865    for (int i = 0; i < element.getRevInclude().size(); i++) {
22866      composeString(t, "SubscriptionTopicNotificationShapeComponent", "revInclude", element.getRevInclude().get(i), i);
22867    }
22868  }
22869
22870  protected void composeSubstance(Complex parent, String parentType, String name, Substance element, int index) {
22871    if (element == null) 
22872      return;
22873    Complex t;
22874    if (Utilities.noString(parentType))
22875      t = parent;
22876    else {
22877      t = parent.predicate("fhir:"+parentType+'.'+name);
22878    }
22879    composeDomainResource(t, "Substance", name, element, index);
22880    for (int i = 0; i < element.getIdentifier().size(); i++) {
22881      composeIdentifier(t, "Substance", "identifier", element.getIdentifier().get(i), i);
22882    }
22883    if (element.hasInstanceElement()) {
22884      composeBoolean(t, "Substance", "instance", element.getInstanceElement(), -1);
22885    }
22886    if (element.hasStatusElement()) {
22887      composeEnum(t, "Substance", "status", element.getStatusElement(), -1);
22888    }
22889    for (int i = 0; i < element.getCategory().size(); i++) {
22890      composeCodeableConcept(t, "Substance", "category", element.getCategory().get(i), i);
22891    }
22892    if (element.hasCode()) {
22893      composeCodeableReference(t, "Substance", "code", element.getCode(), -1);
22894    }
22895    if (element.hasDescriptionElement()) {
22896      composeString(t, "Substance", "description", element.getDescriptionElement(), -1);
22897    }
22898    if (element.hasExpiryElement()) {
22899      composeDateTime(t, "Substance", "expiry", element.getExpiryElement(), -1);
22900    }
22901    if (element.hasQuantity()) {
22902      composeQuantity(t, "Substance", "quantity", element.getQuantity(), -1);
22903    }
22904    for (int i = 0; i < element.getIngredient().size(); i++) {
22905      composeSubstanceIngredientComponent(t, "Substance", "ingredient", element.getIngredient().get(i), i);
22906    }
22907  }
22908
22909  protected void composeSubstanceIngredientComponent(Complex parent, String parentType, String name, Substance.SubstanceIngredientComponent element, int index) {
22910    if (element == null) 
22911      return;
22912    Complex t;
22913    if (Utilities.noString(parentType))
22914      t = parent;
22915    else {
22916      t = parent.predicate("fhir:"+parentType+'.'+name);
22917    }
22918    composeBackboneElement(t, "ingredient", name, element, index);
22919    if (element.hasQuantity()) {
22920      composeRatio(t, "SubstanceIngredientComponent", "quantity", element.getQuantity(), -1);
22921    }
22922    if (element.hasSubstance()) {
22923      composeType(t, "SubstanceIngredientComponent", "substance", element.getSubstance(), -1);
22924    }
22925  }
22926
22927  protected void composeSubstanceDefinition(Complex parent, String parentType, String name, SubstanceDefinition element, int index) {
22928    if (element == null) 
22929      return;
22930    Complex t;
22931    if (Utilities.noString(parentType))
22932      t = parent;
22933    else {
22934      t = parent.predicate("fhir:"+parentType+'.'+name);
22935    }
22936    composeDomainResource(t, "SubstanceDefinition", name, element, index);
22937    for (int i = 0; i < element.getIdentifier().size(); i++) {
22938      composeIdentifier(t, "SubstanceDefinition", "identifier", element.getIdentifier().get(i), i);
22939    }
22940    if (element.hasVersionElement()) {
22941      composeString(t, "SubstanceDefinition", "version", element.getVersionElement(), -1);
22942    }
22943    if (element.hasStatus()) {
22944      composeCodeableConcept(t, "SubstanceDefinition", "status", element.getStatus(), -1);
22945    }
22946    for (int i = 0; i < element.getClassification().size(); i++) {
22947      composeCodeableConcept(t, "SubstanceDefinition", "classification", element.getClassification().get(i), i);
22948    }
22949    if (element.hasDomain()) {
22950      composeCodeableConcept(t, "SubstanceDefinition", "domain", element.getDomain(), -1);
22951    }
22952    for (int i = 0; i < element.getGrade().size(); i++) {
22953      composeCodeableConcept(t, "SubstanceDefinition", "grade", element.getGrade().get(i), i);
22954    }
22955    if (element.hasDescriptionElement()) {
22956      composeMarkdown(t, "SubstanceDefinition", "description", element.getDescriptionElement(), -1);
22957    }
22958    for (int i = 0; i < element.getInformationSource().size(); i++) {
22959      composeReference(t, "SubstanceDefinition", "informationSource", element.getInformationSource().get(i), i);
22960    }
22961    for (int i = 0; i < element.getNote().size(); i++) {
22962      composeAnnotation(t, "SubstanceDefinition", "note", element.getNote().get(i), i);
22963    }
22964    for (int i = 0; i < element.getManufacturer().size(); i++) {
22965      composeReference(t, "SubstanceDefinition", "manufacturer", element.getManufacturer().get(i), i);
22966    }
22967    for (int i = 0; i < element.getSupplier().size(); i++) {
22968      composeReference(t, "SubstanceDefinition", "supplier", element.getSupplier().get(i), i);
22969    }
22970    for (int i = 0; i < element.getMoiety().size(); i++) {
22971      composeSubstanceDefinitionMoietyComponent(t, "SubstanceDefinition", "moiety", element.getMoiety().get(i), i);
22972    }
22973    for (int i = 0; i < element.getProperty().size(); i++) {
22974      composeSubstanceDefinitionPropertyComponent(t, "SubstanceDefinition", "property", element.getProperty().get(i), i);
22975    }
22976    if (element.hasReferenceInformation()) {
22977      composeReference(t, "SubstanceDefinition", "referenceInformation", element.getReferenceInformation(), -1);
22978    }
22979    for (int i = 0; i < element.getMolecularWeight().size(); i++) {
22980      composeSubstanceDefinitionMolecularWeightComponent(t, "SubstanceDefinition", "molecularWeight", element.getMolecularWeight().get(i), i);
22981    }
22982    if (element.hasStructure()) {
22983      composeSubstanceDefinitionStructureComponent(t, "SubstanceDefinition", "structure", element.getStructure(), -1);
22984    }
22985    for (int i = 0; i < element.getCode().size(); i++) {
22986      composeSubstanceDefinitionCodeComponent(t, "SubstanceDefinition", "code", element.getCode().get(i), i);
22987    }
22988    for (int i = 0; i < element.getName().size(); i++) {
22989      composeSubstanceDefinitionNameComponent(t, "SubstanceDefinition", "name", element.getName().get(i), i);
22990    }
22991    for (int i = 0; i < element.getRelationship().size(); i++) {
22992      composeSubstanceDefinitionRelationshipComponent(t, "SubstanceDefinition", "relationship", element.getRelationship().get(i), i);
22993    }
22994    if (element.hasNucleicAcid()) {
22995      composeReference(t, "SubstanceDefinition", "nucleicAcid", element.getNucleicAcid(), -1);
22996    }
22997    if (element.hasPolymer()) {
22998      composeReference(t, "SubstanceDefinition", "polymer", element.getPolymer(), -1);
22999    }
23000    if (element.hasProtein()) {
23001      composeReference(t, "SubstanceDefinition", "protein", element.getProtein(), -1);
23002    }
23003    if (element.hasSourceMaterial()) {
23004      composeSubstanceDefinitionSourceMaterialComponent(t, "SubstanceDefinition", "sourceMaterial", element.getSourceMaterial(), -1);
23005    }
23006  }
23007
23008  protected void composeSubstanceDefinitionMoietyComponent(Complex parent, String parentType, String name, SubstanceDefinition.SubstanceDefinitionMoietyComponent element, int index) {
23009    if (element == null) 
23010      return;
23011    Complex t;
23012    if (Utilities.noString(parentType))
23013      t = parent;
23014    else {
23015      t = parent.predicate("fhir:"+parentType+'.'+name);
23016    }
23017    composeBackboneElement(t, "moiety", name, element, index);
23018    if (element.hasRole()) {
23019      composeCodeableConcept(t, "SubstanceDefinitionMoietyComponent", "role", element.getRole(), -1);
23020    }
23021    if (element.hasIdentifier()) {
23022      composeIdentifier(t, "SubstanceDefinitionMoietyComponent", "identifier", element.getIdentifier(), -1);
23023    }
23024    if (element.hasNameElement()) {
23025      composeString(t, "SubstanceDefinitionMoietyComponent", "name", element.getNameElement(), -1);
23026    }
23027    if (element.hasStereochemistry()) {
23028      composeCodeableConcept(t, "SubstanceDefinitionMoietyComponent", "stereochemistry", element.getStereochemistry(), -1);
23029    }
23030    if (element.hasOpticalActivity()) {
23031      composeCodeableConcept(t, "SubstanceDefinitionMoietyComponent", "opticalActivity", element.getOpticalActivity(), -1);
23032    }
23033    if (element.hasMolecularFormulaElement()) {
23034      composeString(t, "SubstanceDefinitionMoietyComponent", "molecularFormula", element.getMolecularFormulaElement(), -1);
23035    }
23036    if (element.hasAmount()) {
23037      composeType(t, "SubstanceDefinitionMoietyComponent", "amount", element.getAmount(), -1);
23038    }
23039    if (element.hasAmountType()) {
23040      composeCodeableConcept(t, "SubstanceDefinitionMoietyComponent", "amountType", element.getAmountType(), -1);
23041    }
23042  }
23043
23044  protected void composeSubstanceDefinitionPropertyComponent(Complex parent, String parentType, String name, SubstanceDefinition.SubstanceDefinitionPropertyComponent element, int index) {
23045    if (element == null) 
23046      return;
23047    Complex t;
23048    if (Utilities.noString(parentType))
23049      t = parent;
23050    else {
23051      t = parent.predicate("fhir:"+parentType+'.'+name);
23052    }
23053    composeBackboneElement(t, "property", name, element, index);
23054    if (element.hasType()) {
23055      composeCodeableConcept(t, "SubstanceDefinitionPropertyComponent", "type", element.getType(), -1);
23056    }
23057    if (element.hasValue()) {
23058      composeType(t, "SubstanceDefinitionPropertyComponent", "value", element.getValue(), -1);
23059    }
23060  }
23061
23062  protected void composeSubstanceDefinitionMolecularWeightComponent(Complex parent, String parentType, String name, SubstanceDefinition.SubstanceDefinitionMolecularWeightComponent element, int index) {
23063    if (element == null) 
23064      return;
23065    Complex t;
23066    if (Utilities.noString(parentType))
23067      t = parent;
23068    else {
23069      t = parent.predicate("fhir:"+parentType+'.'+name);
23070    }
23071    composeBackboneElement(t, "molecularWeight", name, element, index);
23072    if (element.hasMethod()) {
23073      composeCodeableConcept(t, "SubstanceDefinitionMolecularWeightComponent", "method", element.getMethod(), -1);
23074    }
23075    if (element.hasType()) {
23076      composeCodeableConcept(t, "SubstanceDefinitionMolecularWeightComponent", "type", element.getType(), -1);
23077    }
23078    if (element.hasAmount()) {
23079      composeQuantity(t, "SubstanceDefinitionMolecularWeightComponent", "amount", element.getAmount(), -1);
23080    }
23081  }
23082
23083  protected void composeSubstanceDefinitionStructureComponent(Complex parent, String parentType, String name, SubstanceDefinition.SubstanceDefinitionStructureComponent element, int index) {
23084    if (element == null) 
23085      return;
23086    Complex t;
23087    if (Utilities.noString(parentType))
23088      t = parent;
23089    else {
23090      t = parent.predicate("fhir:"+parentType+'.'+name);
23091    }
23092    composeBackboneElement(t, "structure", name, element, index);
23093    if (element.hasStereochemistry()) {
23094      composeCodeableConcept(t, "SubstanceDefinitionStructureComponent", "stereochemistry", element.getStereochemistry(), -1);
23095    }
23096    if (element.hasOpticalActivity()) {
23097      composeCodeableConcept(t, "SubstanceDefinitionStructureComponent", "opticalActivity", element.getOpticalActivity(), -1);
23098    }
23099    if (element.hasMolecularFormulaElement()) {
23100      composeString(t, "SubstanceDefinitionStructureComponent", "molecularFormula", element.getMolecularFormulaElement(), -1);
23101    }
23102    if (element.hasMolecularFormulaByMoietyElement()) {
23103      composeString(t, "SubstanceDefinitionStructureComponent", "molecularFormulaByMoiety", element.getMolecularFormulaByMoietyElement(), -1);
23104    }
23105    if (element.hasMolecularWeight()) {
23106      composeSubstanceDefinitionMolecularWeightComponent(t, "SubstanceDefinitionStructureComponent", "molecularWeight", element.getMolecularWeight(), -1);
23107    }
23108    for (int i = 0; i < element.getTechnique().size(); i++) {
23109      composeCodeableConcept(t, "SubstanceDefinitionStructureComponent", "technique", element.getTechnique().get(i), i);
23110    }
23111    for (int i = 0; i < element.getSourceDocument().size(); i++) {
23112      composeReference(t, "SubstanceDefinitionStructureComponent", "sourceDocument", element.getSourceDocument().get(i), i);
23113    }
23114    for (int i = 0; i < element.getRepresentation().size(); i++) {
23115      composeSubstanceDefinitionStructureRepresentationComponent(t, "SubstanceDefinitionStructureComponent", "representation", element.getRepresentation().get(i), i);
23116    }
23117  }
23118
23119  protected void composeSubstanceDefinitionStructureRepresentationComponent(Complex parent, String parentType, String name, SubstanceDefinition.SubstanceDefinitionStructureRepresentationComponent element, int index) {
23120    if (element == null) 
23121      return;
23122    Complex t;
23123    if (Utilities.noString(parentType))
23124      t = parent;
23125    else {
23126      t = parent.predicate("fhir:"+parentType+'.'+name);
23127    }
23128    composeBackboneElement(t, "representation", name, element, index);
23129    if (element.hasType()) {
23130      composeCodeableConcept(t, "SubstanceDefinitionStructureRepresentationComponent", "type", element.getType(), -1);
23131    }
23132    if (element.hasRepresentationElement()) {
23133      composeString(t, "SubstanceDefinitionStructureRepresentationComponent", "representation", element.getRepresentationElement(), -1);
23134    }
23135    if (element.hasFormat()) {
23136      composeCodeableConcept(t, "SubstanceDefinitionStructureRepresentationComponent", "format", element.getFormat(), -1);
23137    }
23138    if (element.hasDocument()) {
23139      composeReference(t, "SubstanceDefinitionStructureRepresentationComponent", "document", element.getDocument(), -1);
23140    }
23141  }
23142
23143  protected void composeSubstanceDefinitionCodeComponent(Complex parent, String parentType, String name, SubstanceDefinition.SubstanceDefinitionCodeComponent element, int index) {
23144    if (element == null) 
23145      return;
23146    Complex t;
23147    if (Utilities.noString(parentType))
23148      t = parent;
23149    else {
23150      t = parent.predicate("fhir:"+parentType+'.'+name);
23151    }
23152    composeBackboneElement(t, "code", name, element, index);
23153    if (element.hasCode()) {
23154      composeCodeableConcept(t, "SubstanceDefinitionCodeComponent", "code", element.getCode(), -1);
23155    }
23156    if (element.hasStatus()) {
23157      composeCodeableConcept(t, "SubstanceDefinitionCodeComponent", "status", element.getStatus(), -1);
23158    }
23159    if (element.hasStatusDateElement()) {
23160      composeDateTime(t, "SubstanceDefinitionCodeComponent", "statusDate", element.getStatusDateElement(), -1);
23161    }
23162    for (int i = 0; i < element.getNote().size(); i++) {
23163      composeAnnotation(t, "SubstanceDefinitionCodeComponent", "note", element.getNote().get(i), i);
23164    }
23165    for (int i = 0; i < element.getSource().size(); i++) {
23166      composeReference(t, "SubstanceDefinitionCodeComponent", "source", element.getSource().get(i), i);
23167    }
23168  }
23169
23170  protected void composeSubstanceDefinitionNameComponent(Complex parent, String parentType, String name, SubstanceDefinition.SubstanceDefinitionNameComponent 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:"+parentType+'.'+name);
23178    }
23179    composeBackboneElement(t, "name", name, element, index);
23180    if (element.hasNameElement()) {
23181      composeString(t, "SubstanceDefinitionNameComponent", "name", element.getNameElement(), -1);
23182    }
23183    if (element.hasType()) {
23184      composeCodeableConcept(t, "SubstanceDefinitionNameComponent", "type", element.getType(), -1);
23185    }
23186    if (element.hasStatus()) {
23187      composeCodeableConcept(t, "SubstanceDefinitionNameComponent", "status", element.getStatus(), -1);
23188    }
23189    if (element.hasPreferredElement()) {
23190      composeBoolean(t, "SubstanceDefinitionNameComponent", "preferred", element.getPreferredElement(), -1);
23191    }
23192    for (int i = 0; i < element.getLanguage().size(); i++) {
23193      composeCodeableConcept(t, "SubstanceDefinitionNameComponent", "language", element.getLanguage().get(i), i);
23194    }
23195    for (int i = 0; i < element.getDomain().size(); i++) {
23196      composeCodeableConcept(t, "SubstanceDefinitionNameComponent", "domain", element.getDomain().get(i), i);
23197    }
23198    for (int i = 0; i < element.getJurisdiction().size(); i++) {
23199      composeCodeableConcept(t, "SubstanceDefinitionNameComponent", "jurisdiction", element.getJurisdiction().get(i), i);
23200    }
23201    for (int i = 0; i < element.getSynonym().size(); i++) {
23202      composeSubstanceDefinitionNameComponent(t, "SubstanceDefinitionNameComponent", "synonym", element.getSynonym().get(i), i);
23203    }
23204    for (int i = 0; i < element.getTranslation().size(); i++) {
23205      composeSubstanceDefinitionNameComponent(t, "SubstanceDefinitionNameComponent", "translation", element.getTranslation().get(i), i);
23206    }
23207    for (int i = 0; i < element.getOfficial().size(); i++) {
23208      composeSubstanceDefinitionNameOfficialComponent(t, "SubstanceDefinitionNameComponent", "official", element.getOfficial().get(i), i);
23209    }
23210    for (int i = 0; i < element.getSource().size(); i++) {
23211      composeReference(t, "SubstanceDefinitionNameComponent", "source", element.getSource().get(i), i);
23212    }
23213  }
23214
23215  protected void composeSubstanceDefinitionNameOfficialComponent(Complex parent, String parentType, String name, SubstanceDefinition.SubstanceDefinitionNameOfficialComponent element, int index) {
23216    if (element == null) 
23217      return;
23218    Complex t;
23219    if (Utilities.noString(parentType))
23220      t = parent;
23221    else {
23222      t = parent.predicate("fhir:"+parentType+'.'+name);
23223    }
23224    composeBackboneElement(t, "official", name, element, index);
23225    if (element.hasAuthority()) {
23226      composeCodeableConcept(t, "SubstanceDefinitionNameOfficialComponent", "authority", element.getAuthority(), -1);
23227    }
23228    if (element.hasStatus()) {
23229      composeCodeableConcept(t, "SubstanceDefinitionNameOfficialComponent", "status", element.getStatus(), -1);
23230    }
23231    if (element.hasDateElement()) {
23232      composeDateTime(t, "SubstanceDefinitionNameOfficialComponent", "date", element.getDateElement(), -1);
23233    }
23234  }
23235
23236  protected void composeSubstanceDefinitionRelationshipComponent(Complex parent, String parentType, String name, SubstanceDefinition.SubstanceDefinitionRelationshipComponent element, int index) {
23237    if (element == null) 
23238      return;
23239    Complex t;
23240    if (Utilities.noString(parentType))
23241      t = parent;
23242    else {
23243      t = parent.predicate("fhir:"+parentType+'.'+name);
23244    }
23245    composeBackboneElement(t, "relationship", name, element, index);
23246    if (element.hasSubstanceDefinition()) {
23247      composeType(t, "SubstanceDefinitionRelationshipComponent", "substanceDefinition", element.getSubstanceDefinition(), -1);
23248    }
23249    if (element.hasType()) {
23250      composeCodeableConcept(t, "SubstanceDefinitionRelationshipComponent", "type", element.getType(), -1);
23251    }
23252    if (element.hasIsDefiningElement()) {
23253      composeBoolean(t, "SubstanceDefinitionRelationshipComponent", "isDefining", element.getIsDefiningElement(), -1);
23254    }
23255    if (element.hasAmount()) {
23256      composeType(t, "SubstanceDefinitionRelationshipComponent", "amount", element.getAmount(), -1);
23257    }
23258    if (element.hasAmountRatioHighLimit()) {
23259      composeRatio(t, "SubstanceDefinitionRelationshipComponent", "amountRatioHighLimit", element.getAmountRatioHighLimit(), -1);
23260    }
23261    if (element.hasAmountType()) {
23262      composeCodeableConcept(t, "SubstanceDefinitionRelationshipComponent", "amountType", element.getAmountType(), -1);
23263    }
23264    for (int i = 0; i < element.getSource().size(); i++) {
23265      composeReference(t, "SubstanceDefinitionRelationshipComponent", "source", element.getSource().get(i), i);
23266    }
23267  }
23268
23269  protected void composeSubstanceDefinitionSourceMaterialComponent(Complex parent, String parentType, String name, SubstanceDefinition.SubstanceDefinitionSourceMaterialComponent element, int index) {
23270    if (element == null) 
23271      return;
23272    Complex t;
23273    if (Utilities.noString(parentType))
23274      t = parent;
23275    else {
23276      t = parent.predicate("fhir:"+parentType+'.'+name);
23277    }
23278    composeBackboneElement(t, "sourceMaterial", name, element, index);
23279    if (element.hasType()) {
23280      composeCodeableConcept(t, "SubstanceDefinitionSourceMaterialComponent", "type", element.getType(), -1);
23281    }
23282    if (element.hasGenus()) {
23283      composeCodeableConcept(t, "SubstanceDefinitionSourceMaterialComponent", "genus", element.getGenus(), -1);
23284    }
23285    if (element.hasSpecies()) {
23286      composeCodeableConcept(t, "SubstanceDefinitionSourceMaterialComponent", "species", element.getSpecies(), -1);
23287    }
23288    if (element.hasPart()) {
23289      composeCodeableConcept(t, "SubstanceDefinitionSourceMaterialComponent", "part", element.getPart(), -1);
23290    }
23291    for (int i = 0; i < element.getCountryOfOrigin().size(); i++) {
23292      composeCodeableConcept(t, "SubstanceDefinitionSourceMaterialComponent", "countryOfOrigin", element.getCountryOfOrigin().get(i), i);
23293    }
23294  }
23295
23296  protected void composeSubstanceNucleicAcid(Complex parent, String parentType, String name, SubstanceNucleicAcid element, int index) {
23297    if (element == null) 
23298      return;
23299    Complex t;
23300    if (Utilities.noString(parentType))
23301      t = parent;
23302    else {
23303      t = parent.predicate("fhir:"+parentType+'.'+name);
23304    }
23305    composeDomainResource(t, "SubstanceNucleicAcid", name, element, index);
23306    if (element.hasSequenceType()) {
23307      composeCodeableConcept(t, "SubstanceNucleicAcid", "sequenceType", element.getSequenceType(), -1);
23308    }
23309    if (element.hasNumberOfSubunitsElement()) {
23310      composeInteger(t, "SubstanceNucleicAcid", "numberOfSubunits", element.getNumberOfSubunitsElement(), -1);
23311    }
23312    if (element.hasAreaOfHybridisationElement()) {
23313      composeString(t, "SubstanceNucleicAcid", "areaOfHybridisation", element.getAreaOfHybridisationElement(), -1);
23314    }
23315    if (element.hasOligoNucleotideType()) {
23316      composeCodeableConcept(t, "SubstanceNucleicAcid", "oligoNucleotideType", element.getOligoNucleotideType(), -1);
23317    }
23318    for (int i = 0; i < element.getSubunit().size(); i++) {
23319      composeSubstanceNucleicAcidSubunitComponent(t, "SubstanceNucleicAcid", "subunit", element.getSubunit().get(i), i);
23320    }
23321  }
23322
23323  protected void composeSubstanceNucleicAcidSubunitComponent(Complex parent, String parentType, String name, SubstanceNucleicAcid.SubstanceNucleicAcidSubunitComponent element, int index) {
23324    if (element == null) 
23325      return;
23326    Complex t;
23327    if (Utilities.noString(parentType))
23328      t = parent;
23329    else {
23330      t = parent.predicate("fhir:"+parentType+'.'+name);
23331    }
23332    composeBackboneElement(t, "subunit", name, element, index);
23333    if (element.hasSubunitElement()) {
23334      composeInteger(t, "SubstanceNucleicAcidSubunitComponent", "subunit", element.getSubunitElement(), -1);
23335    }
23336    if (element.hasSequenceElement()) {
23337      composeString(t, "SubstanceNucleicAcidSubunitComponent", "sequence", element.getSequenceElement(), -1);
23338    }
23339    if (element.hasLengthElement()) {
23340      composeInteger(t, "SubstanceNucleicAcidSubunitComponent", "length", element.getLengthElement(), -1);
23341    }
23342    if (element.hasSequenceAttachment()) {
23343      composeAttachment(t, "SubstanceNucleicAcidSubunitComponent", "sequenceAttachment", element.getSequenceAttachment(), -1);
23344    }
23345    if (element.hasFivePrime()) {
23346      composeCodeableConcept(t, "SubstanceNucleicAcidSubunitComponent", "fivePrime", element.getFivePrime(), -1);
23347    }
23348    if (element.hasThreePrime()) {
23349      composeCodeableConcept(t, "SubstanceNucleicAcidSubunitComponent", "threePrime", element.getThreePrime(), -1);
23350    }
23351    for (int i = 0; i < element.getLinkage().size(); i++) {
23352      composeSubstanceNucleicAcidSubunitLinkageComponent(t, "SubstanceNucleicAcidSubunitComponent", "linkage", element.getLinkage().get(i), i);
23353    }
23354    for (int i = 0; i < element.getSugar().size(); i++) {
23355      composeSubstanceNucleicAcidSubunitSugarComponent(t, "SubstanceNucleicAcidSubunitComponent", "sugar", element.getSugar().get(i), i);
23356    }
23357  }
23358
23359  protected void composeSubstanceNucleicAcidSubunitLinkageComponent(Complex parent, String parentType, String name, SubstanceNucleicAcid.SubstanceNucleicAcidSubunitLinkageComponent element, int index) {
23360    if (element == null) 
23361      return;
23362    Complex t;
23363    if (Utilities.noString(parentType))
23364      t = parent;
23365    else {
23366      t = parent.predicate("fhir:"+parentType+'.'+name);
23367    }
23368    composeBackboneElement(t, "linkage", name, element, index);
23369    if (element.hasConnectivityElement()) {
23370      composeString(t, "SubstanceNucleicAcidSubunitLinkageComponent", "connectivity", element.getConnectivityElement(), -1);
23371    }
23372    if (element.hasIdentifier()) {
23373      composeIdentifier(t, "SubstanceNucleicAcidSubunitLinkageComponent", "identifier", element.getIdentifier(), -1);
23374    }
23375    if (element.hasNameElement()) {
23376      composeString(t, "SubstanceNucleicAcidSubunitLinkageComponent", "name", element.getNameElement(), -1);
23377    }
23378    if (element.hasResidueSiteElement()) {
23379      composeString(t, "SubstanceNucleicAcidSubunitLinkageComponent", "residueSite", element.getResidueSiteElement(), -1);
23380    }
23381  }
23382
23383  protected void composeSubstanceNucleicAcidSubunitSugarComponent(Complex parent, String parentType, String name, SubstanceNucleicAcid.SubstanceNucleicAcidSubunitSugarComponent element, int index) {
23384    if (element == null) 
23385      return;
23386    Complex t;
23387    if (Utilities.noString(parentType))
23388      t = parent;
23389    else {
23390      t = parent.predicate("fhir:"+parentType+'.'+name);
23391    }
23392    composeBackboneElement(t, "sugar", name, element, index);
23393    if (element.hasIdentifier()) {
23394      composeIdentifier(t, "SubstanceNucleicAcidSubunitSugarComponent", "identifier", element.getIdentifier(), -1);
23395    }
23396    if (element.hasNameElement()) {
23397      composeString(t, "SubstanceNucleicAcidSubunitSugarComponent", "name", element.getNameElement(), -1);
23398    }
23399    if (element.hasResidueSiteElement()) {
23400      composeString(t, "SubstanceNucleicAcidSubunitSugarComponent", "residueSite", element.getResidueSiteElement(), -1);
23401    }
23402  }
23403
23404  protected void composeSubstancePolymer(Complex parent, String parentType, String name, SubstancePolymer element, int index) {
23405    if (element == null) 
23406      return;
23407    Complex t;
23408    if (Utilities.noString(parentType))
23409      t = parent;
23410    else {
23411      t = parent.predicate("fhir:"+parentType+'.'+name);
23412    }
23413    composeDomainResource(t, "SubstancePolymer", name, element, index);
23414    if (element.hasIdentifier()) {
23415      composeIdentifier(t, "SubstancePolymer", "identifier", element.getIdentifier(), -1);
23416    }
23417    if (element.hasClass_()) {
23418      composeCodeableConcept(t, "SubstancePolymer", "class", element.getClass_(), -1);
23419    }
23420    if (element.hasGeometry()) {
23421      composeCodeableConcept(t, "SubstancePolymer", "geometry", element.getGeometry(), -1);
23422    }
23423    for (int i = 0; i < element.getCopolymerConnectivity().size(); i++) {
23424      composeCodeableConcept(t, "SubstancePolymer", "copolymerConnectivity", element.getCopolymerConnectivity().get(i), i);
23425    }
23426    if (element.hasModificationElement()) {
23427      composeString(t, "SubstancePolymer", "modification", element.getModificationElement(), -1);
23428    }
23429    for (int i = 0; i < element.getMonomerSet().size(); i++) {
23430      composeSubstancePolymerMonomerSetComponent(t, "SubstancePolymer", "monomerSet", element.getMonomerSet().get(i), i);
23431    }
23432    for (int i = 0; i < element.getRepeat().size(); i++) {
23433      composeSubstancePolymerRepeatComponent(t, "SubstancePolymer", "repeat", element.getRepeat().get(i), i);
23434    }
23435  }
23436
23437  protected void composeSubstancePolymerMonomerSetComponent(Complex parent, String parentType, String name, SubstancePolymer.SubstancePolymerMonomerSetComponent element, int index) {
23438    if (element == null) 
23439      return;
23440    Complex t;
23441    if (Utilities.noString(parentType))
23442      t = parent;
23443    else {
23444      t = parent.predicate("fhir:"+parentType+'.'+name);
23445    }
23446    composeBackboneElement(t, "monomerSet", name, element, index);
23447    if (element.hasRatioType()) {
23448      composeCodeableConcept(t, "SubstancePolymerMonomerSetComponent", "ratioType", element.getRatioType(), -1);
23449    }
23450    for (int i = 0; i < element.getStartingMaterial().size(); i++) {
23451      composeSubstancePolymerMonomerSetStartingMaterialComponent(t, "SubstancePolymerMonomerSetComponent", "startingMaterial", element.getStartingMaterial().get(i), i);
23452    }
23453  }
23454
23455  protected void composeSubstancePolymerMonomerSetStartingMaterialComponent(Complex parent, String parentType, String name, SubstancePolymer.SubstancePolymerMonomerSetStartingMaterialComponent 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:"+parentType+'.'+name);
23463    }
23464    composeBackboneElement(t, "startingMaterial", name, element, index);
23465    if (element.hasCode()) {
23466      composeCodeableConcept(t, "SubstancePolymerMonomerSetStartingMaterialComponent", "code", element.getCode(), -1);
23467    }
23468    if (element.hasCategory()) {
23469      composeCodeableConcept(t, "SubstancePolymerMonomerSetStartingMaterialComponent", "category", element.getCategory(), -1);
23470    }
23471    if (element.hasIsDefiningElement()) {
23472      composeBoolean(t, "SubstancePolymerMonomerSetStartingMaterialComponent", "isDefining", element.getIsDefiningElement(), -1);
23473    }
23474    if (element.hasAmount()) {
23475      composeQuantity(t, "SubstancePolymerMonomerSetStartingMaterialComponent", "amount", element.getAmount(), -1);
23476    }
23477  }
23478
23479  protected void composeSubstancePolymerRepeatComponent(Complex parent, String parentType, String name, SubstancePolymer.SubstancePolymerRepeatComponent element, int index) {
23480    if (element == null) 
23481      return;
23482    Complex t;
23483    if (Utilities.noString(parentType))
23484      t = parent;
23485    else {
23486      t = parent.predicate("fhir:"+parentType+'.'+name);
23487    }
23488    composeBackboneElement(t, "repeat", name, element, index);
23489    if (element.hasAverageMolecularFormulaElement()) {
23490      composeString(t, "SubstancePolymerRepeatComponent", "averageMolecularFormula", element.getAverageMolecularFormulaElement(), -1);
23491    }
23492    if (element.hasRepeatUnitAmountType()) {
23493      composeCodeableConcept(t, "SubstancePolymerRepeatComponent", "repeatUnitAmountType", element.getRepeatUnitAmountType(), -1);
23494    }
23495    for (int i = 0; i < element.getRepeatUnit().size(); i++) {
23496      composeSubstancePolymerRepeatRepeatUnitComponent(t, "SubstancePolymerRepeatComponent", "repeatUnit", element.getRepeatUnit().get(i), i);
23497    }
23498  }
23499
23500  protected void composeSubstancePolymerRepeatRepeatUnitComponent(Complex parent, String parentType, String name, SubstancePolymer.SubstancePolymerRepeatRepeatUnitComponent element, int index) {
23501    if (element == null) 
23502      return;
23503    Complex t;
23504    if (Utilities.noString(parentType))
23505      t = parent;
23506    else {
23507      t = parent.predicate("fhir:"+parentType+'.'+name);
23508    }
23509    composeBackboneElement(t, "repeatUnit", name, element, index);
23510    if (element.hasUnitElement()) {
23511      composeString(t, "SubstancePolymerRepeatRepeatUnitComponent", "unit", element.getUnitElement(), -1);
23512    }
23513    if (element.hasOrientation()) {
23514      composeCodeableConcept(t, "SubstancePolymerRepeatRepeatUnitComponent", "orientation", element.getOrientation(), -1);
23515    }
23516    if (element.hasAmountElement()) {
23517      composeInteger(t, "SubstancePolymerRepeatRepeatUnitComponent", "amount", element.getAmountElement(), -1);
23518    }
23519    for (int i = 0; i < element.getDegreeOfPolymerisation().size(); i++) {
23520      composeSubstancePolymerRepeatRepeatUnitDegreeOfPolymerisationComponent(t, "SubstancePolymerRepeatRepeatUnitComponent", "degreeOfPolymerisation", element.getDegreeOfPolymerisation().get(i), i);
23521    }
23522    for (int i = 0; i < element.getStructuralRepresentation().size(); i++) {
23523      composeSubstancePolymerRepeatRepeatUnitStructuralRepresentationComponent(t, "SubstancePolymerRepeatRepeatUnitComponent", "structuralRepresentation", element.getStructuralRepresentation().get(i), i);
23524    }
23525  }
23526
23527  protected void composeSubstancePolymerRepeatRepeatUnitDegreeOfPolymerisationComponent(Complex parent, String parentType, String name, SubstancePolymer.SubstancePolymerRepeatRepeatUnitDegreeOfPolymerisationComponent element, int index) {
23528    if (element == null) 
23529      return;
23530    Complex t;
23531    if (Utilities.noString(parentType))
23532      t = parent;
23533    else {
23534      t = parent.predicate("fhir:"+parentType+'.'+name);
23535    }
23536    composeBackboneElement(t, "degreeOfPolymerisation", name, element, index);
23537    if (element.hasType()) {
23538      composeCodeableConcept(t, "SubstancePolymerRepeatRepeatUnitDegreeOfPolymerisationComponent", "type", element.getType(), -1);
23539    }
23540    if (element.hasAverageElement()) {
23541      composeInteger(t, "SubstancePolymerRepeatRepeatUnitDegreeOfPolymerisationComponent", "average", element.getAverageElement(), -1);
23542    }
23543    if (element.hasLowElement()) {
23544      composeInteger(t, "SubstancePolymerRepeatRepeatUnitDegreeOfPolymerisationComponent", "low", element.getLowElement(), -1);
23545    }
23546    if (element.hasHighElement()) {
23547      composeInteger(t, "SubstancePolymerRepeatRepeatUnitDegreeOfPolymerisationComponent", "high", element.getHighElement(), -1);
23548    }
23549  }
23550
23551  protected void composeSubstancePolymerRepeatRepeatUnitStructuralRepresentationComponent(Complex parent, String parentType, String name, SubstancePolymer.SubstancePolymerRepeatRepeatUnitStructuralRepresentationComponent element, int index) {
23552    if (element == null) 
23553      return;
23554    Complex t;
23555    if (Utilities.noString(parentType))
23556      t = parent;
23557    else {
23558      t = parent.predicate("fhir:"+parentType+'.'+name);
23559    }
23560    composeBackboneElement(t, "structuralRepresentation", name, element, index);
23561    if (element.hasType()) {
23562      composeCodeableConcept(t, "SubstancePolymerRepeatRepeatUnitStructuralRepresentationComponent", "type", element.getType(), -1);
23563    }
23564    if (element.hasRepresentationElement()) {
23565      composeString(t, "SubstancePolymerRepeatRepeatUnitStructuralRepresentationComponent", "representation", element.getRepresentationElement(), -1);
23566    }
23567    if (element.hasFormat()) {
23568      composeCodeableConcept(t, "SubstancePolymerRepeatRepeatUnitStructuralRepresentationComponent", "format", element.getFormat(), -1);
23569    }
23570    if (element.hasAttachment()) {
23571      composeAttachment(t, "SubstancePolymerRepeatRepeatUnitStructuralRepresentationComponent", "attachment", element.getAttachment(), -1);
23572    }
23573  }
23574
23575  protected void composeSubstanceProtein(Complex parent, String parentType, String name, SubstanceProtein element, int index) {
23576    if (element == null) 
23577      return;
23578    Complex t;
23579    if (Utilities.noString(parentType))
23580      t = parent;
23581    else {
23582      t = parent.predicate("fhir:"+parentType+'.'+name);
23583    }
23584    composeDomainResource(t, "SubstanceProtein", name, element, index);
23585    if (element.hasSequenceType()) {
23586      composeCodeableConcept(t, "SubstanceProtein", "sequenceType", element.getSequenceType(), -1);
23587    }
23588    if (element.hasNumberOfSubunitsElement()) {
23589      composeInteger(t, "SubstanceProtein", "numberOfSubunits", element.getNumberOfSubunitsElement(), -1);
23590    }
23591    for (int i = 0; i < element.getDisulfideLinkage().size(); i++) {
23592      composeString(t, "SubstanceProtein", "disulfideLinkage", element.getDisulfideLinkage().get(i), i);
23593    }
23594    for (int i = 0; i < element.getSubunit().size(); i++) {
23595      composeSubstanceProteinSubunitComponent(t, "SubstanceProtein", "subunit", element.getSubunit().get(i), i);
23596    }
23597  }
23598
23599  protected void composeSubstanceProteinSubunitComponent(Complex parent, String parentType, String name, SubstanceProtein.SubstanceProteinSubunitComponent element, int index) {
23600    if (element == null) 
23601      return;
23602    Complex t;
23603    if (Utilities.noString(parentType))
23604      t = parent;
23605    else {
23606      t = parent.predicate("fhir:"+parentType+'.'+name);
23607    }
23608    composeBackboneElement(t, "subunit", name, element, index);
23609    if (element.hasSubunitElement()) {
23610      composeInteger(t, "SubstanceProteinSubunitComponent", "subunit", element.getSubunitElement(), -1);
23611    }
23612    if (element.hasSequenceElement()) {
23613      composeString(t, "SubstanceProteinSubunitComponent", "sequence", element.getSequenceElement(), -1);
23614    }
23615    if (element.hasLengthElement()) {
23616      composeInteger(t, "SubstanceProteinSubunitComponent", "length", element.getLengthElement(), -1);
23617    }
23618    if (element.hasSequenceAttachment()) {
23619      composeAttachment(t, "SubstanceProteinSubunitComponent", "sequenceAttachment", element.getSequenceAttachment(), -1);
23620    }
23621    if (element.hasNTerminalModificationId()) {
23622      composeIdentifier(t, "SubstanceProteinSubunitComponent", "nTerminalModificationId", element.getNTerminalModificationId(), -1);
23623    }
23624    if (element.hasNTerminalModificationElement()) {
23625      composeString(t, "SubstanceProteinSubunitComponent", "nTerminalModification", element.getNTerminalModificationElement(), -1);
23626    }
23627    if (element.hasCTerminalModificationId()) {
23628      composeIdentifier(t, "SubstanceProteinSubunitComponent", "cTerminalModificationId", element.getCTerminalModificationId(), -1);
23629    }
23630    if (element.hasCTerminalModificationElement()) {
23631      composeString(t, "SubstanceProteinSubunitComponent", "cTerminalModification", element.getCTerminalModificationElement(), -1);
23632    }
23633  }
23634
23635  protected void composeSubstanceReferenceInformation(Complex parent, String parentType, String name, SubstanceReferenceInformation element, int index) {
23636    if (element == null) 
23637      return;
23638    Complex t;
23639    if (Utilities.noString(parentType))
23640      t = parent;
23641    else {
23642      t = parent.predicate("fhir:"+parentType+'.'+name);
23643    }
23644    composeDomainResource(t, "SubstanceReferenceInformation", name, element, index);
23645    if (element.hasCommentElement()) {
23646      composeString(t, "SubstanceReferenceInformation", "comment", element.getCommentElement(), -1);
23647    }
23648    for (int i = 0; i < element.getGene().size(); i++) {
23649      composeSubstanceReferenceInformationGeneComponent(t, "SubstanceReferenceInformation", "gene", element.getGene().get(i), i);
23650    }
23651    for (int i = 0; i < element.getGeneElement().size(); i++) {
23652      composeSubstanceReferenceInformationGeneElementComponent(t, "SubstanceReferenceInformation", "geneElement", element.getGeneElement().get(i), i);
23653    }
23654    for (int i = 0; i < element.getTarget().size(); i++) {
23655      composeSubstanceReferenceInformationTargetComponent(t, "SubstanceReferenceInformation", "target", element.getTarget().get(i), i);
23656    }
23657  }
23658
23659  protected void composeSubstanceReferenceInformationGeneComponent(Complex parent, String parentType, String name, SubstanceReferenceInformation.SubstanceReferenceInformationGeneComponent element, int index) {
23660    if (element == null) 
23661      return;
23662    Complex t;
23663    if (Utilities.noString(parentType))
23664      t = parent;
23665    else {
23666      t = parent.predicate("fhir:"+parentType+'.'+name);
23667    }
23668    composeBackboneElement(t, "gene", name, element, index);
23669    if (element.hasGeneSequenceOrigin()) {
23670      composeCodeableConcept(t, "SubstanceReferenceInformationGeneComponent", "geneSequenceOrigin", element.getGeneSequenceOrigin(), -1);
23671    }
23672    if (element.hasGene()) {
23673      composeCodeableConcept(t, "SubstanceReferenceInformationGeneComponent", "gene", element.getGene(), -1);
23674    }
23675    for (int i = 0; i < element.getSource().size(); i++) {
23676      composeReference(t, "SubstanceReferenceInformationGeneComponent", "source", element.getSource().get(i), i);
23677    }
23678  }
23679
23680  protected void composeSubstanceReferenceInformationGeneElementComponent(Complex parent, String parentType, String name, SubstanceReferenceInformation.SubstanceReferenceInformationGeneElementComponent element, int index) {
23681    if (element == null) 
23682      return;
23683    Complex t;
23684    if (Utilities.noString(parentType))
23685      t = parent;
23686    else {
23687      t = parent.predicate("fhir:"+parentType+'.'+name);
23688    }
23689    composeBackboneElement(t, "geneElement", name, element, index);
23690    if (element.hasType()) {
23691      composeCodeableConcept(t, "SubstanceReferenceInformationGeneElementComponent", "type", element.getType(), -1);
23692    }
23693    if (element.hasElement()) {
23694      composeIdentifier(t, "SubstanceReferenceInformationGeneElementComponent", "element", element.getElement(), -1);
23695    }
23696    for (int i = 0; i < element.getSource().size(); i++) {
23697      composeReference(t, "SubstanceReferenceInformationGeneElementComponent", "source", element.getSource().get(i), i);
23698    }
23699  }
23700
23701  protected void composeSubstanceReferenceInformationTargetComponent(Complex parent, String parentType, String name, SubstanceReferenceInformation.SubstanceReferenceInformationTargetComponent element, int index) {
23702    if (element == null) 
23703      return;
23704    Complex t;
23705    if (Utilities.noString(parentType))
23706      t = parent;
23707    else {
23708      t = parent.predicate("fhir:"+parentType+'.'+name);
23709    }
23710    composeBackboneElement(t, "target", name, element, index);
23711    if (element.hasTarget()) {
23712      composeIdentifier(t, "SubstanceReferenceInformationTargetComponent", "target", element.getTarget(), -1);
23713    }
23714    if (element.hasType()) {
23715      composeCodeableConcept(t, "SubstanceReferenceInformationTargetComponent", "type", element.getType(), -1);
23716    }
23717    if (element.hasInteraction()) {
23718      composeCodeableConcept(t, "SubstanceReferenceInformationTargetComponent", "interaction", element.getInteraction(), -1);
23719    }
23720    if (element.hasOrganism()) {
23721      composeCodeableConcept(t, "SubstanceReferenceInformationTargetComponent", "organism", element.getOrganism(), -1);
23722    }
23723    if (element.hasOrganismType()) {
23724      composeCodeableConcept(t, "SubstanceReferenceInformationTargetComponent", "organismType", element.getOrganismType(), -1);
23725    }
23726    if (element.hasAmount()) {
23727      composeType(t, "SubstanceReferenceInformationTargetComponent", "amount", element.getAmount(), -1);
23728    }
23729    if (element.hasAmountType()) {
23730      composeCodeableConcept(t, "SubstanceReferenceInformationTargetComponent", "amountType", element.getAmountType(), -1);
23731    }
23732    for (int i = 0; i < element.getSource().size(); i++) {
23733      composeReference(t, "SubstanceReferenceInformationTargetComponent", "source", element.getSource().get(i), i);
23734    }
23735  }
23736
23737  protected void composeSubstanceSourceMaterial(Complex parent, String parentType, String name, SubstanceSourceMaterial element, int index) {
23738    if (element == null) 
23739      return;
23740    Complex t;
23741    if (Utilities.noString(parentType))
23742      t = parent;
23743    else {
23744      t = parent.predicate("fhir:"+parentType+'.'+name);
23745    }
23746    composeDomainResource(t, "SubstanceSourceMaterial", name, element, index);
23747    if (element.hasSourceMaterialClass()) {
23748      composeCodeableConcept(t, "SubstanceSourceMaterial", "sourceMaterialClass", element.getSourceMaterialClass(), -1);
23749    }
23750    if (element.hasSourceMaterialType()) {
23751      composeCodeableConcept(t, "SubstanceSourceMaterial", "sourceMaterialType", element.getSourceMaterialType(), -1);
23752    }
23753    if (element.hasSourceMaterialState()) {
23754      composeCodeableConcept(t, "SubstanceSourceMaterial", "sourceMaterialState", element.getSourceMaterialState(), -1);
23755    }
23756    if (element.hasOrganismId()) {
23757      composeIdentifier(t, "SubstanceSourceMaterial", "organismId", element.getOrganismId(), -1);
23758    }
23759    if (element.hasOrganismNameElement()) {
23760      composeString(t, "SubstanceSourceMaterial", "organismName", element.getOrganismNameElement(), -1);
23761    }
23762    for (int i = 0; i < element.getParentSubstanceId().size(); i++) {
23763      composeIdentifier(t, "SubstanceSourceMaterial", "parentSubstanceId", element.getParentSubstanceId().get(i), i);
23764    }
23765    for (int i = 0; i < element.getParentSubstanceName().size(); i++) {
23766      composeString(t, "SubstanceSourceMaterial", "parentSubstanceName", element.getParentSubstanceName().get(i), i);
23767    }
23768    for (int i = 0; i < element.getCountryOfOrigin().size(); i++) {
23769      composeCodeableConcept(t, "SubstanceSourceMaterial", "countryOfOrigin", element.getCountryOfOrigin().get(i), i);
23770    }
23771    for (int i = 0; i < element.getGeographicalLocation().size(); i++) {
23772      composeString(t, "SubstanceSourceMaterial", "geographicalLocation", element.getGeographicalLocation().get(i), i);
23773    }
23774    if (element.hasDevelopmentStage()) {
23775      composeCodeableConcept(t, "SubstanceSourceMaterial", "developmentStage", element.getDevelopmentStage(), -1);
23776    }
23777    for (int i = 0; i < element.getFractionDescription().size(); i++) {
23778      composeSubstanceSourceMaterialFractionDescriptionComponent(t, "SubstanceSourceMaterial", "fractionDescription", element.getFractionDescription().get(i), i);
23779    }
23780    if (element.hasOrganism()) {
23781      composeSubstanceSourceMaterialOrganismComponent(t, "SubstanceSourceMaterial", "organism", element.getOrganism(), -1);
23782    }
23783    for (int i = 0; i < element.getPartDescription().size(); i++) {
23784      composeSubstanceSourceMaterialPartDescriptionComponent(t, "SubstanceSourceMaterial", "partDescription", element.getPartDescription().get(i), i);
23785    }
23786  }
23787
23788  protected void composeSubstanceSourceMaterialFractionDescriptionComponent(Complex parent, String parentType, String name, SubstanceSourceMaterial.SubstanceSourceMaterialFractionDescriptionComponent element, int index) {
23789    if (element == null) 
23790      return;
23791    Complex t;
23792    if (Utilities.noString(parentType))
23793      t = parent;
23794    else {
23795      t = parent.predicate("fhir:"+parentType+'.'+name);
23796    }
23797    composeBackboneElement(t, "fractionDescription", name, element, index);
23798    if (element.hasFractionElement()) {
23799      composeString(t, "SubstanceSourceMaterialFractionDescriptionComponent", "fraction", element.getFractionElement(), -1);
23800    }
23801    if (element.hasMaterialType()) {
23802      composeCodeableConcept(t, "SubstanceSourceMaterialFractionDescriptionComponent", "materialType", element.getMaterialType(), -1);
23803    }
23804  }
23805
23806  protected void composeSubstanceSourceMaterialOrganismComponent(Complex parent, String parentType, String name, SubstanceSourceMaterial.SubstanceSourceMaterialOrganismComponent element, int index) {
23807    if (element == null) 
23808      return;
23809    Complex t;
23810    if (Utilities.noString(parentType))
23811      t = parent;
23812    else {
23813      t = parent.predicate("fhir:"+parentType+'.'+name);
23814    }
23815    composeBackboneElement(t, "organism", name, element, index);
23816    if (element.hasFamily()) {
23817      composeCodeableConcept(t, "SubstanceSourceMaterialOrganismComponent", "family", element.getFamily(), -1);
23818    }
23819    if (element.hasGenus()) {
23820      composeCodeableConcept(t, "SubstanceSourceMaterialOrganismComponent", "genus", element.getGenus(), -1);
23821    }
23822    if (element.hasSpecies()) {
23823      composeCodeableConcept(t, "SubstanceSourceMaterialOrganismComponent", "species", element.getSpecies(), -1);
23824    }
23825    if (element.hasIntraspecificType()) {
23826      composeCodeableConcept(t, "SubstanceSourceMaterialOrganismComponent", "intraspecificType", element.getIntraspecificType(), -1);
23827    }
23828    if (element.hasIntraspecificDescriptionElement()) {
23829      composeString(t, "SubstanceSourceMaterialOrganismComponent", "intraspecificDescription", element.getIntraspecificDescriptionElement(), -1);
23830    }
23831    for (int i = 0; i < element.getAuthor().size(); i++) {
23832      composeSubstanceSourceMaterialOrganismAuthorComponent(t, "SubstanceSourceMaterialOrganismComponent", "author", element.getAuthor().get(i), i);
23833    }
23834    if (element.hasHybrid()) {
23835      composeSubstanceSourceMaterialOrganismHybridComponent(t, "SubstanceSourceMaterialOrganismComponent", "hybrid", element.getHybrid(), -1);
23836    }
23837    if (element.hasOrganismGeneral()) {
23838      composeSubstanceSourceMaterialOrganismOrganismGeneralComponent(t, "SubstanceSourceMaterialOrganismComponent", "organismGeneral", element.getOrganismGeneral(), -1);
23839    }
23840  }
23841
23842  protected void composeSubstanceSourceMaterialOrganismAuthorComponent(Complex parent, String parentType, String name, SubstanceSourceMaterial.SubstanceSourceMaterialOrganismAuthorComponent element, int index) {
23843    if (element == null) 
23844      return;
23845    Complex t;
23846    if (Utilities.noString(parentType))
23847      t = parent;
23848    else {
23849      t = parent.predicate("fhir:"+parentType+'.'+name);
23850    }
23851    composeBackboneElement(t, "author", name, element, index);
23852    if (element.hasAuthorType()) {
23853      composeCodeableConcept(t, "SubstanceSourceMaterialOrganismAuthorComponent", "authorType", element.getAuthorType(), -1);
23854    }
23855    if (element.hasAuthorDescriptionElement()) {
23856      composeString(t, "SubstanceSourceMaterialOrganismAuthorComponent", "authorDescription", element.getAuthorDescriptionElement(), -1);
23857    }
23858  }
23859
23860  protected void composeSubstanceSourceMaterialOrganismHybridComponent(Complex parent, String parentType, String name, SubstanceSourceMaterial.SubstanceSourceMaterialOrganismHybridComponent element, int index) {
23861    if (element == null) 
23862      return;
23863    Complex t;
23864    if (Utilities.noString(parentType))
23865      t = parent;
23866    else {
23867      t = parent.predicate("fhir:"+parentType+'.'+name);
23868    }
23869    composeBackboneElement(t, "hybrid", name, element, index);
23870    if (element.hasMaternalOrganismIdElement()) {
23871      composeString(t, "SubstanceSourceMaterialOrganismHybridComponent", "maternalOrganismId", element.getMaternalOrganismIdElement(), -1);
23872    }
23873    if (element.hasMaternalOrganismNameElement()) {
23874      composeString(t, "SubstanceSourceMaterialOrganismHybridComponent", "maternalOrganismName", element.getMaternalOrganismNameElement(), -1);
23875    }
23876    if (element.hasPaternalOrganismIdElement()) {
23877      composeString(t, "SubstanceSourceMaterialOrganismHybridComponent", "paternalOrganismId", element.getPaternalOrganismIdElement(), -1);
23878    }
23879    if (element.hasPaternalOrganismNameElement()) {
23880      composeString(t, "SubstanceSourceMaterialOrganismHybridComponent", "paternalOrganismName", element.getPaternalOrganismNameElement(), -1);
23881    }
23882    if (element.hasHybridType()) {
23883      composeCodeableConcept(t, "SubstanceSourceMaterialOrganismHybridComponent", "hybridType", element.getHybridType(), -1);
23884    }
23885  }
23886
23887  protected void composeSubstanceSourceMaterialOrganismOrganismGeneralComponent(Complex parent, String parentType, String name, SubstanceSourceMaterial.SubstanceSourceMaterialOrganismOrganismGeneralComponent element, int index) {
23888    if (element == null) 
23889      return;
23890    Complex t;
23891    if (Utilities.noString(parentType))
23892      t = parent;
23893    else {
23894      t = parent.predicate("fhir:"+parentType+'.'+name);
23895    }
23896    composeBackboneElement(t, "organismGeneral", name, element, index);
23897    if (element.hasKingdom()) {
23898      composeCodeableConcept(t, "SubstanceSourceMaterialOrganismOrganismGeneralComponent", "kingdom", element.getKingdom(), -1);
23899    }
23900    if (element.hasPhylum()) {
23901      composeCodeableConcept(t, "SubstanceSourceMaterialOrganismOrganismGeneralComponent", "phylum", element.getPhylum(), -1);
23902    }
23903    if (element.hasClass_()) {
23904      composeCodeableConcept(t, "SubstanceSourceMaterialOrganismOrganismGeneralComponent", "class", element.getClass_(), -1);
23905    }
23906    if (element.hasOrder()) {
23907      composeCodeableConcept(t, "SubstanceSourceMaterialOrganismOrganismGeneralComponent", "order", element.getOrder(), -1);
23908    }
23909  }
23910
23911  protected void composeSubstanceSourceMaterialPartDescriptionComponent(Complex parent, String parentType, String name, SubstanceSourceMaterial.SubstanceSourceMaterialPartDescriptionComponent 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:"+parentType+'.'+name);
23919    }
23920    composeBackboneElement(t, "partDescription", name, element, index);
23921    if (element.hasPart()) {
23922      composeCodeableConcept(t, "SubstanceSourceMaterialPartDescriptionComponent", "part", element.getPart(), -1);
23923    }
23924    if (element.hasPartLocation()) {
23925      composeCodeableConcept(t, "SubstanceSourceMaterialPartDescriptionComponent", "partLocation", element.getPartLocation(), -1);
23926    }
23927  }
23928
23929  protected void composeSupplyDelivery(Complex parent, String parentType, String name, SupplyDelivery element, int index) {
23930    if (element == null) 
23931      return;
23932    Complex t;
23933    if (Utilities.noString(parentType))
23934      t = parent;
23935    else {
23936      t = parent.predicate("fhir:"+parentType+'.'+name);
23937    }
23938    composeDomainResource(t, "SupplyDelivery", name, element, index);
23939    for (int i = 0; i < element.getIdentifier().size(); i++) {
23940      composeIdentifier(t, "SupplyDelivery", "identifier", element.getIdentifier().get(i), i);
23941    }
23942    for (int i = 0; i < element.getBasedOn().size(); i++) {
23943      composeReference(t, "SupplyDelivery", "basedOn", element.getBasedOn().get(i), i);
23944    }
23945    for (int i = 0; i < element.getPartOf().size(); i++) {
23946      composeReference(t, "SupplyDelivery", "partOf", element.getPartOf().get(i), i);
23947    }
23948    if (element.hasStatusElement()) {
23949      composeEnum(t, "SupplyDelivery", "status", element.getStatusElement(), -1);
23950    }
23951    if (element.hasPatient()) {
23952      composeReference(t, "SupplyDelivery", "patient", element.getPatient(), -1);
23953    }
23954    if (element.hasType()) {
23955      composeCodeableConcept(t, "SupplyDelivery", "type", element.getType(), -1);
23956    }
23957    if (element.hasSuppliedItem()) {
23958      composeSupplyDeliverySuppliedItemComponent(t, "SupplyDelivery", "suppliedItem", element.getSuppliedItem(), -1);
23959    }
23960    if (element.hasOccurrence()) {
23961      composeType(t, "SupplyDelivery", "occurrence", element.getOccurrence(), -1);
23962    }
23963    if (element.hasSupplier()) {
23964      composeReference(t, "SupplyDelivery", "supplier", element.getSupplier(), -1);
23965    }
23966    if (element.hasDestination()) {
23967      composeReference(t, "SupplyDelivery", "destination", element.getDestination(), -1);
23968    }
23969    for (int i = 0; i < element.getReceiver().size(); i++) {
23970      composeReference(t, "SupplyDelivery", "receiver", element.getReceiver().get(i), i);
23971    }
23972  }
23973
23974  protected void composeSupplyDeliverySuppliedItemComponent(Complex parent, String parentType, String name, SupplyDelivery.SupplyDeliverySuppliedItemComponent element, int index) {
23975    if (element == null) 
23976      return;
23977    Complex t;
23978    if (Utilities.noString(parentType))
23979      t = parent;
23980    else {
23981      t = parent.predicate("fhir:"+parentType+'.'+name);
23982    }
23983    composeBackboneElement(t, "suppliedItem", name, element, index);
23984    if (element.hasQuantity()) {
23985      composeQuantity(t, "SupplyDeliverySuppliedItemComponent", "quantity", element.getQuantity(), -1);
23986    }
23987    if (element.hasItem()) {
23988      composeType(t, "SupplyDeliverySuppliedItemComponent", "item", element.getItem(), -1);
23989    }
23990  }
23991
23992  protected void composeSupplyRequest(Complex parent, String parentType, String name, SupplyRequest element, int index) {
23993    if (element == null) 
23994      return;
23995    Complex t;
23996    if (Utilities.noString(parentType))
23997      t = parent;
23998    else {
23999      t = parent.predicate("fhir:"+parentType+'.'+name);
24000    }
24001    composeDomainResource(t, "SupplyRequest", name, element, index);
24002    for (int i = 0; i < element.getIdentifier().size(); i++) {
24003      composeIdentifier(t, "SupplyRequest", "identifier", element.getIdentifier().get(i), i);
24004    }
24005    if (element.hasStatusElement()) {
24006      composeEnum(t, "SupplyRequest", "status", element.getStatusElement(), -1);
24007    }
24008    for (int i = 0; i < element.getBasedOn().size(); i++) {
24009      composeReference(t, "SupplyRequest", "basedOn", element.getBasedOn().get(i), i);
24010    }
24011    if (element.hasCategory()) {
24012      composeCodeableConcept(t, "SupplyRequest", "category", element.getCategory(), -1);
24013    }
24014    if (element.hasPriorityElement()) {
24015      composeEnum(t, "SupplyRequest", "priority", element.getPriorityElement(), -1);
24016    }
24017    if (element.hasItem()) {
24018      composeCodeableReference(t, "SupplyRequest", "item", element.getItem(), -1);
24019    }
24020    if (element.hasQuantity()) {
24021      composeQuantity(t, "SupplyRequest", "quantity", element.getQuantity(), -1);
24022    }
24023    for (int i = 0; i < element.getParameter().size(); i++) {
24024      composeSupplyRequestParameterComponent(t, "SupplyRequest", "parameter", element.getParameter().get(i), i);
24025    }
24026    if (element.hasOccurrence()) {
24027      composeType(t, "SupplyRequest", "occurrence", element.getOccurrence(), -1);
24028    }
24029    if (element.hasAuthoredOnElement()) {
24030      composeDateTime(t, "SupplyRequest", "authoredOn", element.getAuthoredOnElement(), -1);
24031    }
24032    if (element.hasRequester()) {
24033      composeReference(t, "SupplyRequest", "requester", element.getRequester(), -1);
24034    }
24035    for (int i = 0; i < element.getSupplier().size(); i++) {
24036      composeReference(t, "SupplyRequest", "supplier", element.getSupplier().get(i), i);
24037    }
24038    for (int i = 0; i < element.getReason().size(); i++) {
24039      composeCodeableReference(t, "SupplyRequest", "reason", element.getReason().get(i), i);
24040    }
24041    if (element.hasDeliverFrom()) {
24042      composeReference(t, "SupplyRequest", "deliverFrom", element.getDeliverFrom(), -1);
24043    }
24044    if (element.hasDeliverTo()) {
24045      composeReference(t, "SupplyRequest", "deliverTo", element.getDeliverTo(), -1);
24046    }
24047  }
24048
24049  protected void composeSupplyRequestParameterComponent(Complex parent, String parentType, String name, SupplyRequest.SupplyRequestParameterComponent element, int index) {
24050    if (element == null) 
24051      return;
24052    Complex t;
24053    if (Utilities.noString(parentType))
24054      t = parent;
24055    else {
24056      t = parent.predicate("fhir:"+parentType+'.'+name);
24057    }
24058    composeBackboneElement(t, "parameter", name, element, index);
24059    if (element.hasCode()) {
24060      composeCodeableConcept(t, "SupplyRequestParameterComponent", "code", element.getCode(), -1);
24061    }
24062    if (element.hasValue()) {
24063      composeType(t, "SupplyRequestParameterComponent", "value", element.getValue(), -1);
24064    }
24065  }
24066
24067  protected void composeTask(Complex parent, String parentType, String name, Task element, int index) {
24068    if (element == null) 
24069      return;
24070    Complex t;
24071    if (Utilities.noString(parentType))
24072      t = parent;
24073    else {
24074      t = parent.predicate("fhir:"+parentType+'.'+name);
24075    }
24076    composeDomainResource(t, "Task", name, element, index);
24077    for (int i = 0; i < element.getIdentifier().size(); i++) {
24078      composeIdentifier(t, "Task", "identifier", element.getIdentifier().get(i), i);
24079    }
24080    if (element.hasInstantiatesCanonicalElement()) {
24081      composeCanonical(t, "Task", "instantiatesCanonical", element.getInstantiatesCanonicalElement(), -1);
24082    }
24083    if (element.hasInstantiatesUriElement()) {
24084      composeUri(t, "Task", "instantiatesUri", element.getInstantiatesUriElement(), -1);
24085    }
24086    for (int i = 0; i < element.getBasedOn().size(); i++) {
24087      composeReference(t, "Task", "basedOn", element.getBasedOn().get(i), i);
24088    }
24089    if (element.hasGroupIdentifier()) {
24090      composeIdentifier(t, "Task", "groupIdentifier", element.getGroupIdentifier(), -1);
24091    }
24092    for (int i = 0; i < element.getPartOf().size(); i++) {
24093      composeReference(t, "Task", "partOf", element.getPartOf().get(i), i);
24094    }
24095    if (element.hasStatusElement()) {
24096      composeEnum(t, "Task", "status", element.getStatusElement(), -1);
24097    }
24098    if (element.hasStatusReason()) {
24099      composeCodeableConcept(t, "Task", "statusReason", element.getStatusReason(), -1);
24100    }
24101    if (element.hasBusinessStatus()) {
24102      composeCodeableConcept(t, "Task", "businessStatus", element.getBusinessStatus(), -1);
24103    }
24104    if (element.hasIntentElement()) {
24105      composeEnum(t, "Task", "intent", element.getIntentElement(), -1);
24106    }
24107    if (element.hasPriorityElement()) {
24108      composeEnum(t, "Task", "priority", element.getPriorityElement(), -1);
24109    }
24110    if (element.hasCode()) {
24111      composeCodeableConcept(t, "Task", "code", element.getCode(), -1);
24112    }
24113    if (element.hasDescriptionElement()) {
24114      composeString(t, "Task", "description", element.getDescriptionElement(), -1);
24115    }
24116    if (element.hasFocus()) {
24117      composeReference(t, "Task", "focus", element.getFocus(), -1);
24118    }
24119    if (element.hasFor()) {
24120      composeReference(t, "Task", "for", element.getFor(), -1);
24121    }
24122    if (element.hasEncounter()) {
24123      composeReference(t, "Task", "encounter", element.getEncounter(), -1);
24124    }
24125    if (element.hasExecutionPeriod()) {
24126      composePeriod(t, "Task", "executionPeriod", element.getExecutionPeriod(), -1);
24127    }
24128    if (element.hasAuthoredOnElement()) {
24129      composeDateTime(t, "Task", "authoredOn", element.getAuthoredOnElement(), -1);
24130    }
24131    if (element.hasLastModifiedElement()) {
24132      composeDateTime(t, "Task", "lastModified", element.getLastModifiedElement(), -1);
24133    }
24134    if (element.hasRequester()) {
24135      composeReference(t, "Task", "requester", element.getRequester(), -1);
24136    }
24137    for (int i = 0; i < element.getPerformerType().size(); i++) {
24138      composeCodeableConcept(t, "Task", "performerType", element.getPerformerType().get(i), i);
24139    }
24140    if (element.hasOwner()) {
24141      composeReference(t, "Task", "owner", element.getOwner(), -1);
24142    }
24143    if (element.hasLocation()) {
24144      composeReference(t, "Task", "location", element.getLocation(), -1);
24145    }
24146    if (element.hasReasonCode()) {
24147      composeCodeableConcept(t, "Task", "reasonCode", element.getReasonCode(), -1);
24148    }
24149    if (element.hasReasonReference()) {
24150      composeReference(t, "Task", "reasonReference", element.getReasonReference(), -1);
24151    }
24152    for (int i = 0; i < element.getInsurance().size(); i++) {
24153      composeReference(t, "Task", "insurance", element.getInsurance().get(i), i);
24154    }
24155    for (int i = 0; i < element.getNote().size(); i++) {
24156      composeAnnotation(t, "Task", "note", element.getNote().get(i), i);
24157    }
24158    for (int i = 0; i < element.getRelevantHistory().size(); i++) {
24159      composeReference(t, "Task", "relevantHistory", element.getRelevantHistory().get(i), i);
24160    }
24161    if (element.hasRestriction()) {
24162      composeTaskRestrictionComponent(t, "Task", "restriction", element.getRestriction(), -1);
24163    }
24164    for (int i = 0; i < element.getInput().size(); i++) {
24165      composeTaskParameterComponent(t, "Task", "input", element.getInput().get(i), i);
24166    }
24167    for (int i = 0; i < element.getOutput().size(); i++) {
24168      composeTaskOutputComponent(t, "Task", "output", element.getOutput().get(i), i);
24169    }
24170  }
24171
24172  protected void composeTaskRestrictionComponent(Complex parent, String parentType, String name, Task.TaskRestrictionComponent element, int index) {
24173    if (element == null) 
24174      return;
24175    Complex t;
24176    if (Utilities.noString(parentType))
24177      t = parent;
24178    else {
24179      t = parent.predicate("fhir:"+parentType+'.'+name);
24180    }
24181    composeBackboneElement(t, "restriction", name, element, index);
24182    if (element.hasRepetitionsElement()) {
24183      composePositiveInt(t, "TaskRestrictionComponent", "repetitions", element.getRepetitionsElement(), -1);
24184    }
24185    if (element.hasPeriod()) {
24186      composePeriod(t, "TaskRestrictionComponent", "period", element.getPeriod(), -1);
24187    }
24188    for (int i = 0; i < element.getRecipient().size(); i++) {
24189      composeReference(t, "TaskRestrictionComponent", "recipient", element.getRecipient().get(i), i);
24190    }
24191  }
24192
24193  protected void composeTaskParameterComponent(Complex parent, String parentType, String name, Task.ParameterComponent element, int index) {
24194    if (element == null) 
24195      return;
24196    Complex t;
24197    if (Utilities.noString(parentType))
24198      t = parent;
24199    else {
24200      t = parent.predicate("fhir:"+parentType+'.'+name);
24201    }
24202    composeBackboneElement(t, "input", name, element, index);
24203    if (element.hasType()) {
24204      composeCodeableConcept(t, "ParameterComponent", "type", element.getType(), -1);
24205    }
24206    if (element.hasValue()) {
24207      composeType(t, "ParameterComponent", "value", element.getValue(), -1);
24208    }
24209  }
24210
24211  protected void composeTaskOutputComponent(Complex parent, String parentType, String name, Task.TaskOutputComponent element, int index) {
24212    if (element == null) 
24213      return;
24214    Complex t;
24215    if (Utilities.noString(parentType))
24216      t = parent;
24217    else {
24218      t = parent.predicate("fhir:"+parentType+'.'+name);
24219    }
24220    composeBackboneElement(t, "output", name, element, index);
24221    if (element.hasType()) {
24222      composeCodeableConcept(t, "TaskOutputComponent", "type", element.getType(), -1);
24223    }
24224    if (element.hasValue()) {
24225      composeType(t, "TaskOutputComponent", "value", element.getValue(), -1);
24226    }
24227  }
24228
24229  protected void composeTerminologyCapabilities(Complex parent, String parentType, String name, TerminologyCapabilities element, int index) {
24230    if (element == null) 
24231      return;
24232    Complex t;
24233    if (Utilities.noString(parentType))
24234      t = parent;
24235    else {
24236      t = parent.predicate("fhir:"+parentType+'.'+name);
24237    }
24238    composeCanonicalResource(t, "TerminologyCapabilities", name, element, index);
24239    if (element.hasUrlElement()) {
24240      composeUri(t, "TerminologyCapabilities", "url", element.getUrlElement(), -1);
24241    }
24242    for (int i = 0; i < element.getIdentifier().size(); i++) {
24243      composeIdentifier(t, "TerminologyCapabilities", "identifier", element.getIdentifier().get(i), i);
24244    }
24245    if (element.hasVersionElement()) {
24246      composeString(t, "TerminologyCapabilities", "version", element.getVersionElement(), -1);
24247    }
24248    if (element.hasNameElement()) {
24249      composeString(t, "TerminologyCapabilities", "name", element.getNameElement(), -1);
24250    }
24251    if (element.hasTitleElement()) {
24252      composeString(t, "TerminologyCapabilities", "title", element.getTitleElement(), -1);
24253    }
24254    if (element.hasStatusElement()) {
24255      composeEnum(t, "TerminologyCapabilities", "status", element.getStatusElement(), -1);
24256    }
24257    if (element.hasExperimentalElement()) {
24258      composeBoolean(t, "TerminologyCapabilities", "experimental", element.getExperimentalElement(), -1);
24259    }
24260    if (element.hasDateElement()) {
24261      composeDateTime(t, "TerminologyCapabilities", "date", element.getDateElement(), -1);
24262    }
24263    if (element.hasPublisherElement()) {
24264      composeString(t, "TerminologyCapabilities", "publisher", element.getPublisherElement(), -1);
24265    }
24266    for (int i = 0; i < element.getContact().size(); i++) {
24267      composeContactDetail(t, "TerminologyCapabilities", "contact", element.getContact().get(i), i);
24268    }
24269    if (element.hasDescriptionElement()) {
24270      composeMarkdown(t, "TerminologyCapabilities", "description", element.getDescriptionElement(), -1);
24271    }
24272    for (int i = 0; i < element.getUseContext().size(); i++) {
24273      composeUsageContext(t, "TerminologyCapabilities", "useContext", element.getUseContext().get(i), i);
24274    }
24275    for (int i = 0; i < element.getJurisdiction().size(); i++) {
24276      composeCodeableConcept(t, "TerminologyCapabilities", "jurisdiction", element.getJurisdiction().get(i), i);
24277    }
24278    if (element.hasPurposeElement()) {
24279      composeMarkdown(t, "TerminologyCapabilities", "purpose", element.getPurposeElement(), -1);
24280    }
24281    if (element.hasCopyrightElement()) {
24282      composeMarkdown(t, "TerminologyCapabilities", "copyright", element.getCopyrightElement(), -1);
24283    }
24284    if (element.hasKindElement()) {
24285      composeEnum(t, "TerminologyCapabilities", "kind", element.getKindElement(), -1);
24286    }
24287    if (element.hasSoftware()) {
24288      composeTerminologyCapabilitiesSoftwareComponent(t, "TerminologyCapabilities", "software", element.getSoftware(), -1);
24289    }
24290    if (element.hasImplementation()) {
24291      composeTerminologyCapabilitiesImplementationComponent(t, "TerminologyCapabilities", "implementation", element.getImplementation(), -1);
24292    }
24293    if (element.hasLockedDateElement()) {
24294      composeBoolean(t, "TerminologyCapabilities", "lockedDate", element.getLockedDateElement(), -1);
24295    }
24296    for (int i = 0; i < element.getCodeSystem().size(); i++) {
24297      composeTerminologyCapabilitiesCodeSystemComponent(t, "TerminologyCapabilities", "codeSystem", element.getCodeSystem().get(i), i);
24298    }
24299    if (element.hasExpansion()) {
24300      composeTerminologyCapabilitiesExpansionComponent(t, "TerminologyCapabilities", "expansion", element.getExpansion(), -1);
24301    }
24302    if (element.hasCodeSearchElement()) {
24303      composeEnum(t, "TerminologyCapabilities", "codeSearch", element.getCodeSearchElement(), -1);
24304    }
24305    if (element.hasValidateCode()) {
24306      composeTerminologyCapabilitiesValidateCodeComponent(t, "TerminologyCapabilities", "validateCode", element.getValidateCode(), -1);
24307    }
24308    if (element.hasTranslation()) {
24309      composeTerminologyCapabilitiesTranslationComponent(t, "TerminologyCapabilities", "translation", element.getTranslation(), -1);
24310    }
24311    if (element.hasClosure()) {
24312      composeTerminologyCapabilitiesClosureComponent(t, "TerminologyCapabilities", "closure", element.getClosure(), -1);
24313    }
24314  }
24315
24316  protected void composeTerminologyCapabilitiesSoftwareComponent(Complex parent, String parentType, String name, TerminologyCapabilities.TerminologyCapabilitiesSoftwareComponent 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:"+parentType+'.'+name);
24324    }
24325    composeBackboneElement(t, "software", name, element, index);
24326    if (element.hasNameElement()) {
24327      composeString(t, "TerminologyCapabilitiesSoftwareComponent", "name", element.getNameElement(), -1);
24328    }
24329    if (element.hasVersionElement()) {
24330      composeString(t, "TerminologyCapabilitiesSoftwareComponent", "version", element.getVersionElement(), -1);
24331    }
24332  }
24333
24334  protected void composeTerminologyCapabilitiesImplementationComponent(Complex parent, String parentType, String name, TerminologyCapabilities.TerminologyCapabilitiesImplementationComponent element, int index) {
24335    if (element == null) 
24336      return;
24337    Complex t;
24338    if (Utilities.noString(parentType))
24339      t = parent;
24340    else {
24341      t = parent.predicate("fhir:"+parentType+'.'+name);
24342    }
24343    composeBackboneElement(t, "implementation", name, element, index);
24344    if (element.hasDescriptionElement()) {
24345      composeString(t, "TerminologyCapabilitiesImplementationComponent", "description", element.getDescriptionElement(), -1);
24346    }
24347    if (element.hasUrlElement()) {
24348      composeUrl(t, "TerminologyCapabilitiesImplementationComponent", "url", element.getUrlElement(), -1);
24349    }
24350  }
24351
24352  protected void composeTerminologyCapabilitiesCodeSystemComponent(Complex parent, String parentType, String name, TerminologyCapabilities.TerminologyCapabilitiesCodeSystemComponent element, int index) {
24353    if (element == null) 
24354      return;
24355    Complex t;
24356    if (Utilities.noString(parentType))
24357      t = parent;
24358    else {
24359      t = parent.predicate("fhir:"+parentType+'.'+name);
24360    }
24361    composeBackboneElement(t, "codeSystem", name, element, index);
24362    if (element.hasUriElement()) {
24363      composeCanonical(t, "TerminologyCapabilitiesCodeSystemComponent", "uri", element.getUriElement(), -1);
24364    }
24365    for (int i = 0; i < element.getVersion().size(); i++) {
24366      composeTerminologyCapabilitiesCodeSystemVersionComponent(t, "TerminologyCapabilitiesCodeSystemComponent", "version", element.getVersion().get(i), i);
24367    }
24368    if (element.hasSubsumptionElement()) {
24369      composeBoolean(t, "TerminologyCapabilitiesCodeSystemComponent", "subsumption", element.getSubsumptionElement(), -1);
24370    }
24371  }
24372
24373  protected void composeTerminologyCapabilitiesCodeSystemVersionComponent(Complex parent, String parentType, String name, TerminologyCapabilities.TerminologyCapabilitiesCodeSystemVersionComponent element, int index) {
24374    if (element == null) 
24375      return;
24376    Complex t;
24377    if (Utilities.noString(parentType))
24378      t = parent;
24379    else {
24380      t = parent.predicate("fhir:"+parentType+'.'+name);
24381    }
24382    composeBackboneElement(t, "version", name, element, index);
24383    if (element.hasCodeElement()) {
24384      composeString(t, "TerminologyCapabilitiesCodeSystemVersionComponent", "code", element.getCodeElement(), -1);
24385    }
24386    if (element.hasIsDefaultElement()) {
24387      composeBoolean(t, "TerminologyCapabilitiesCodeSystemVersionComponent", "isDefault", element.getIsDefaultElement(), -1);
24388    }
24389    if (element.hasCompositionalElement()) {
24390      composeBoolean(t, "TerminologyCapabilitiesCodeSystemVersionComponent", "compositional", element.getCompositionalElement(), -1);
24391    }
24392    for (int i = 0; i < element.getLanguage().size(); i++) {
24393      composeCode(t, "TerminologyCapabilitiesCodeSystemVersionComponent", "language", element.getLanguage().get(i), i);
24394    }
24395    for (int i = 0; i < element.getFilter().size(); i++) {
24396      composeTerminologyCapabilitiesCodeSystemVersionFilterComponent(t, "TerminologyCapabilitiesCodeSystemVersionComponent", "filter", element.getFilter().get(i), i);
24397    }
24398    for (int i = 0; i < element.getProperty().size(); i++) {
24399      composeCode(t, "TerminologyCapabilitiesCodeSystemVersionComponent", "property", element.getProperty().get(i), i);
24400    }
24401  }
24402
24403  protected void composeTerminologyCapabilitiesCodeSystemVersionFilterComponent(Complex parent, String parentType, String name, TerminologyCapabilities.TerminologyCapabilitiesCodeSystemVersionFilterComponent element, int index) {
24404    if (element == null) 
24405      return;
24406    Complex t;
24407    if (Utilities.noString(parentType))
24408      t = parent;
24409    else {
24410      t = parent.predicate("fhir:"+parentType+'.'+name);
24411    }
24412    composeBackboneElement(t, "filter", name, element, index);
24413    if (element.hasCodeElement()) {
24414      composeCode(t, "TerminologyCapabilitiesCodeSystemVersionFilterComponent", "code", element.getCodeElement(), -1);
24415    }
24416    for (int i = 0; i < element.getOp().size(); i++) {
24417      composeCode(t, "TerminologyCapabilitiesCodeSystemVersionFilterComponent", "op", element.getOp().get(i), i);
24418    }
24419  }
24420
24421  protected void composeTerminologyCapabilitiesExpansionComponent(Complex parent, String parentType, String name, TerminologyCapabilities.TerminologyCapabilitiesExpansionComponent element, int index) {
24422    if (element == null) 
24423      return;
24424    Complex t;
24425    if (Utilities.noString(parentType))
24426      t = parent;
24427    else {
24428      t = parent.predicate("fhir:"+parentType+'.'+name);
24429    }
24430    composeBackboneElement(t, "expansion", name, element, index);
24431    if (element.hasHierarchicalElement()) {
24432      composeBoolean(t, "TerminologyCapabilitiesExpansionComponent", "hierarchical", element.getHierarchicalElement(), -1);
24433    }
24434    if (element.hasPagingElement()) {
24435      composeBoolean(t, "TerminologyCapabilitiesExpansionComponent", "paging", element.getPagingElement(), -1);
24436    }
24437    if (element.hasIncompleteElement()) {
24438      composeBoolean(t, "TerminologyCapabilitiesExpansionComponent", "incomplete", element.getIncompleteElement(), -1);
24439    }
24440    for (int i = 0; i < element.getParameter().size(); i++) {
24441      composeTerminologyCapabilitiesExpansionParameterComponent(t, "TerminologyCapabilitiesExpansionComponent", "parameter", element.getParameter().get(i), i);
24442    }
24443    if (element.hasTextFilterElement()) {
24444      composeMarkdown(t, "TerminologyCapabilitiesExpansionComponent", "textFilter", element.getTextFilterElement(), -1);
24445    }
24446  }
24447
24448  protected void composeTerminologyCapabilitiesExpansionParameterComponent(Complex parent, String parentType, String name, TerminologyCapabilities.TerminologyCapabilitiesExpansionParameterComponent element, int index) {
24449    if (element == null) 
24450      return;
24451    Complex t;
24452    if (Utilities.noString(parentType))
24453      t = parent;
24454    else {
24455      t = parent.predicate("fhir:"+parentType+'.'+name);
24456    }
24457    composeBackboneElement(t, "parameter", name, element, index);
24458    if (element.hasNameElement()) {
24459      composeCode(t, "TerminologyCapabilitiesExpansionParameterComponent", "name", element.getNameElement(), -1);
24460    }
24461    if (element.hasDocumentationElement()) {
24462      composeString(t, "TerminologyCapabilitiesExpansionParameterComponent", "documentation", element.getDocumentationElement(), -1);
24463    }
24464  }
24465
24466  protected void composeTerminologyCapabilitiesValidateCodeComponent(Complex parent, String parentType, String name, TerminologyCapabilities.TerminologyCapabilitiesValidateCodeComponent element, int index) {
24467    if (element == null) 
24468      return;
24469    Complex t;
24470    if (Utilities.noString(parentType))
24471      t = parent;
24472    else {
24473      t = parent.predicate("fhir:"+parentType+'.'+name);
24474    }
24475    composeBackboneElement(t, "validateCode", name, element, index);
24476    if (element.hasTranslationsElement()) {
24477      composeBoolean(t, "TerminologyCapabilitiesValidateCodeComponent", "translations", element.getTranslationsElement(), -1);
24478    }
24479  }
24480
24481  protected void composeTerminologyCapabilitiesTranslationComponent(Complex parent, String parentType, String name, TerminologyCapabilities.TerminologyCapabilitiesTranslationComponent element, int index) {
24482    if (element == null) 
24483      return;
24484    Complex t;
24485    if (Utilities.noString(parentType))
24486      t = parent;
24487    else {
24488      t = parent.predicate("fhir:"+parentType+'.'+name);
24489    }
24490    composeBackboneElement(t, "translation", name, element, index);
24491    if (element.hasNeedsMapElement()) {
24492      composeBoolean(t, "TerminologyCapabilitiesTranslationComponent", "needsMap", element.getNeedsMapElement(), -1);
24493    }
24494  }
24495
24496  protected void composeTerminologyCapabilitiesClosureComponent(Complex parent, String parentType, String name, TerminologyCapabilities.TerminologyCapabilitiesClosureComponent element, int index) {
24497    if (element == null) 
24498      return;
24499    Complex t;
24500    if (Utilities.noString(parentType))
24501      t = parent;
24502    else {
24503      t = parent.predicate("fhir:"+parentType+'.'+name);
24504    }
24505    composeBackboneElement(t, "closure", name, element, index);
24506    if (element.hasTranslationElement()) {
24507      composeBoolean(t, "TerminologyCapabilitiesClosureComponent", "translation", element.getTranslationElement(), -1);
24508    }
24509  }
24510
24511  protected void composeTestReport(Complex parent, String parentType, String name, TestReport element, int index) {
24512    if (element == null) 
24513      return;
24514    Complex t;
24515    if (Utilities.noString(parentType))
24516      t = parent;
24517    else {
24518      t = parent.predicate("fhir:"+parentType+'.'+name);
24519    }
24520    composeDomainResource(t, "TestReport", name, element, index);
24521    if (element.hasIdentifier()) {
24522      composeIdentifier(t, "TestReport", "identifier", element.getIdentifier(), -1);
24523    }
24524    if (element.hasNameElement()) {
24525      composeString(t, "TestReport", "name", element.getNameElement(), -1);
24526    }
24527    if (element.hasStatusElement()) {
24528      composeEnum(t, "TestReport", "status", element.getStatusElement(), -1);
24529    }
24530    if (element.hasTestScript()) {
24531      composeReference(t, "TestReport", "testScript", element.getTestScript(), -1);
24532    }
24533    if (element.hasResultElement()) {
24534      composeEnum(t, "TestReport", "result", element.getResultElement(), -1);
24535    }
24536    if (element.hasScoreElement()) {
24537      composeDecimal(t, "TestReport", "score", element.getScoreElement(), -1);
24538    }
24539    if (element.hasTesterElement()) {
24540      composeString(t, "TestReport", "tester", element.getTesterElement(), -1);
24541    }
24542    if (element.hasIssuedElement()) {
24543      composeDateTime(t, "TestReport", "issued", element.getIssuedElement(), -1);
24544    }
24545    for (int i = 0; i < element.getParticipant().size(); i++) {
24546      composeTestReportParticipantComponent(t, "TestReport", "participant", element.getParticipant().get(i), i);
24547    }
24548    if (element.hasSetup()) {
24549      composeTestReportSetupComponent(t, "TestReport", "setup", element.getSetup(), -1);
24550    }
24551    for (int i = 0; i < element.getTest().size(); i++) {
24552      composeTestReportTestComponent(t, "TestReport", "test", element.getTest().get(i), i);
24553    }
24554    if (element.hasTeardown()) {
24555      composeTestReportTeardownComponent(t, "TestReport", "teardown", element.getTeardown(), -1);
24556    }
24557  }
24558
24559  protected void composeTestReportParticipantComponent(Complex parent, String parentType, String name, TestReport.TestReportParticipantComponent 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:"+parentType+'.'+name);
24567    }
24568    composeBackboneElement(t, "participant", name, element, index);
24569    if (element.hasTypeElement()) {
24570      composeEnum(t, "TestReportParticipantComponent", "type", element.getTypeElement(), -1);
24571    }
24572    if (element.hasUriElement()) {
24573      composeUri(t, "TestReportParticipantComponent", "uri", element.getUriElement(), -1);
24574    }
24575    if (element.hasDisplayElement()) {
24576      composeString(t, "TestReportParticipantComponent", "display", element.getDisplayElement(), -1);
24577    }
24578  }
24579
24580  protected void composeTestReportSetupComponent(Complex parent, String parentType, String name, TestReport.TestReportSetupComponent 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:"+parentType+'.'+name);
24588    }
24589    composeBackboneElement(t, "setup", name, element, index);
24590    for (int i = 0; i < element.getAction().size(); i++) {
24591      composeTestReportSetupActionComponent(t, "TestReportSetupComponent", "action", element.getAction().get(i), i);
24592    }
24593  }
24594
24595  protected void composeTestReportSetupActionComponent(Complex parent, String parentType, String name, TestReport.SetupActionComponent element, int index) {
24596    if (element == null) 
24597      return;
24598    Complex t;
24599    if (Utilities.noString(parentType))
24600      t = parent;
24601    else {
24602      t = parent.predicate("fhir:"+parentType+'.'+name);
24603    }
24604    composeBackboneElement(t, "action", name, element, index);
24605    if (element.hasOperation()) {
24606      composeTestReportSetupActionOperationComponent(t, "SetupActionComponent", "operation", element.getOperation(), -1);
24607    }
24608    if (element.hasAssert()) {
24609      composeTestReportSetupActionAssertComponent(t, "SetupActionComponent", "assert", element.getAssert(), -1);
24610    }
24611  }
24612
24613  protected void composeTestReportSetupActionOperationComponent(Complex parent, String parentType, String name, TestReport.SetupActionOperationComponent element, int index) {
24614    if (element == null) 
24615      return;
24616    Complex t;
24617    if (Utilities.noString(parentType))
24618      t = parent;
24619    else {
24620      t = parent.predicate("fhir:"+parentType+'.'+name);
24621    }
24622    composeBackboneElement(t, "operation", name, element, index);
24623    if (element.hasResultElement()) {
24624      composeEnum(t, "SetupActionOperationComponent", "result", element.getResultElement(), -1);
24625    }
24626    if (element.hasMessageElement()) {
24627      composeMarkdown(t, "SetupActionOperationComponent", "message", element.getMessageElement(), -1);
24628    }
24629    if (element.hasDetailElement()) {
24630      composeUri(t, "SetupActionOperationComponent", "detail", element.getDetailElement(), -1);
24631    }
24632  }
24633
24634  protected void composeTestReportSetupActionAssertComponent(Complex parent, String parentType, String name, TestReport.SetupActionAssertComponent element, int index) {
24635    if (element == null) 
24636      return;
24637    Complex t;
24638    if (Utilities.noString(parentType))
24639      t = parent;
24640    else {
24641      t = parent.predicate("fhir:"+parentType+'.'+name);
24642    }
24643    composeBackboneElement(t, "assert", name, element, index);
24644    if (element.hasResultElement()) {
24645      composeEnum(t, "SetupActionAssertComponent", "result", element.getResultElement(), -1);
24646    }
24647    if (element.hasMessageElement()) {
24648      composeMarkdown(t, "SetupActionAssertComponent", "message", element.getMessageElement(), -1);
24649    }
24650    if (element.hasDetailElement()) {
24651      composeString(t, "SetupActionAssertComponent", "detail", element.getDetailElement(), -1);
24652    }
24653  }
24654
24655  protected void composeTestReportTestComponent(Complex parent, String parentType, String name, TestReport.TestReportTestComponent element, int index) {
24656    if (element == null) 
24657      return;
24658    Complex t;
24659    if (Utilities.noString(parentType))
24660      t = parent;
24661    else {
24662      t = parent.predicate("fhir:"+parentType+'.'+name);
24663    }
24664    composeBackboneElement(t, "test", name, element, index);
24665    if (element.hasNameElement()) {
24666      composeString(t, "TestReportTestComponent", "name", element.getNameElement(), -1);
24667    }
24668    if (element.hasDescriptionElement()) {
24669      composeString(t, "TestReportTestComponent", "description", element.getDescriptionElement(), -1);
24670    }
24671    for (int i = 0; i < element.getAction().size(); i++) {
24672      composeTestReportTestActionComponent(t, "TestReportTestComponent", "action", element.getAction().get(i), i);
24673    }
24674  }
24675
24676  protected void composeTestReportTestActionComponent(Complex parent, String parentType, String name, TestReport.TestActionComponent element, int index) {
24677    if (element == null) 
24678      return;
24679    Complex t;
24680    if (Utilities.noString(parentType))
24681      t = parent;
24682    else {
24683      t = parent.predicate("fhir:"+parentType+'.'+name);
24684    }
24685    composeBackboneElement(t, "action", name, element, index);
24686    if (element.hasOperation()) {
24687      composeTestReportSetupActionOperationComponent(t, "TestActionComponent", "operation", element.getOperation(), -1);
24688    }
24689    if (element.hasAssert()) {
24690      composeTestReportSetupActionAssertComponent(t, "TestActionComponent", "assert", element.getAssert(), -1);
24691    }
24692  }
24693
24694  protected void composeTestReportTeardownComponent(Complex parent, String parentType, String name, TestReport.TestReportTeardownComponent element, int index) {
24695    if (element == null) 
24696      return;
24697    Complex t;
24698    if (Utilities.noString(parentType))
24699      t = parent;
24700    else {
24701      t = parent.predicate("fhir:"+parentType+'.'+name);
24702    }
24703    composeBackboneElement(t, "teardown", name, element, index);
24704    for (int i = 0; i < element.getAction().size(); i++) {
24705      composeTestReportTeardownActionComponent(t, "TestReportTeardownComponent", "action", element.getAction().get(i), i);
24706    }
24707  }
24708
24709  protected void composeTestReportTeardownActionComponent(Complex parent, String parentType, String name, TestReport.TeardownActionComponent element, int index) {
24710    if (element == null) 
24711      return;
24712    Complex t;
24713    if (Utilities.noString(parentType))
24714      t = parent;
24715    else {
24716      t = parent.predicate("fhir:"+parentType+'.'+name);
24717    }
24718    composeBackboneElement(t, "action", name, element, index);
24719    if (element.hasOperation()) {
24720      composeTestReportSetupActionOperationComponent(t, "TeardownActionComponent", "operation", element.getOperation(), -1);
24721    }
24722  }
24723
24724  protected void composeTestScript(Complex parent, String parentType, String name, TestScript element, int index) {
24725    if (element == null) 
24726      return;
24727    Complex t;
24728    if (Utilities.noString(parentType))
24729      t = parent;
24730    else {
24731      t = parent.predicate("fhir:"+parentType+'.'+name);
24732    }
24733    composeCanonicalResource(t, "TestScript", name, element, index);
24734    if (element.hasUrlElement()) {
24735      composeUri(t, "TestScript", "url", element.getUrlElement(), -1);
24736    }
24737    for (int i = 0; i < element.getIdentifier().size(); i++) {
24738      composeIdentifier(t, "TestScript", "identifier", element.getIdentifier().get(i), i);
24739    }
24740    if (element.hasVersionElement()) {
24741      composeString(t, "TestScript", "version", element.getVersionElement(), -1);
24742    }
24743    if (element.hasNameElement()) {
24744      composeString(t, "TestScript", "name", element.getNameElement(), -1);
24745    }
24746    if (element.hasTitleElement()) {
24747      composeString(t, "TestScript", "title", element.getTitleElement(), -1);
24748    }
24749    if (element.hasStatusElement()) {
24750      composeEnum(t, "TestScript", "status", element.getStatusElement(), -1);
24751    }
24752    if (element.hasExperimentalElement()) {
24753      composeBoolean(t, "TestScript", "experimental", element.getExperimentalElement(), -1);
24754    }
24755    if (element.hasDateElement()) {
24756      composeDateTime(t, "TestScript", "date", element.getDateElement(), -1);
24757    }
24758    if (element.hasPublisherElement()) {
24759      composeString(t, "TestScript", "publisher", element.getPublisherElement(), -1);
24760    }
24761    for (int i = 0; i < element.getContact().size(); i++) {
24762      composeContactDetail(t, "TestScript", "contact", element.getContact().get(i), i);
24763    }
24764    if (element.hasDescriptionElement()) {
24765      composeMarkdown(t, "TestScript", "description", element.getDescriptionElement(), -1);
24766    }
24767    for (int i = 0; i < element.getUseContext().size(); i++) {
24768      composeUsageContext(t, "TestScript", "useContext", element.getUseContext().get(i), i);
24769    }
24770    for (int i = 0; i < element.getJurisdiction().size(); i++) {
24771      composeCodeableConcept(t, "TestScript", "jurisdiction", element.getJurisdiction().get(i), i);
24772    }
24773    if (element.hasPurposeElement()) {
24774      composeMarkdown(t, "TestScript", "purpose", element.getPurposeElement(), -1);
24775    }
24776    if (element.hasCopyrightElement()) {
24777      composeMarkdown(t, "TestScript", "copyright", element.getCopyrightElement(), -1);
24778    }
24779    for (int i = 0; i < element.getOrigin().size(); i++) {
24780      composeTestScriptOriginComponent(t, "TestScript", "origin", element.getOrigin().get(i), i);
24781    }
24782    for (int i = 0; i < element.getDestination().size(); i++) {
24783      composeTestScriptDestinationComponent(t, "TestScript", "destination", element.getDestination().get(i), i);
24784    }
24785    if (element.hasMetadata()) {
24786      composeTestScriptMetadataComponent(t, "TestScript", "metadata", element.getMetadata(), -1);
24787    }
24788    for (int i = 0; i < element.getScope().size(); i++) {
24789      composeTestScriptScopeComponent(t, "TestScript", "scope", element.getScope().get(i), i);
24790    }
24791    for (int i = 0; i < element.getFixture().size(); i++) {
24792      composeTestScriptFixtureComponent(t, "TestScript", "fixture", element.getFixture().get(i), i);
24793    }
24794    for (int i = 0; i < element.getProfile().size(); i++) {
24795      composeReference(t, "TestScript", "profile", element.getProfile().get(i), i);
24796    }
24797    for (int i = 0; i < element.getVariable().size(); i++) {
24798      composeTestScriptVariableComponent(t, "TestScript", "variable", element.getVariable().get(i), i);
24799    }
24800    if (element.hasSetup()) {
24801      composeTestScriptSetupComponent(t, "TestScript", "setup", element.getSetup(), -1);
24802    }
24803    for (int i = 0; i < element.getTest().size(); i++) {
24804      composeTestScriptTestComponent(t, "TestScript", "test", element.getTest().get(i), i);
24805    }
24806    if (element.hasTeardown()) {
24807      composeTestScriptTeardownComponent(t, "TestScript", "teardown", element.getTeardown(), -1);
24808    }
24809  }
24810
24811  protected void composeTestScriptOriginComponent(Complex parent, String parentType, String name, TestScript.TestScriptOriginComponent element, int index) {
24812    if (element == null) 
24813      return;
24814    Complex t;
24815    if (Utilities.noString(parentType))
24816      t = parent;
24817    else {
24818      t = parent.predicate("fhir:"+parentType+'.'+name);
24819    }
24820    composeBackboneElement(t, "origin", name, element, index);
24821    if (element.hasIndexElement()) {
24822      composeInteger(t, "TestScriptOriginComponent", "index", element.getIndexElement(), -1);
24823    }
24824    if (element.hasProfile()) {
24825      composeCoding(t, "TestScriptOriginComponent", "profile", element.getProfile(), -1);
24826    }
24827  }
24828
24829  protected void composeTestScriptDestinationComponent(Complex parent, String parentType, String name, TestScript.TestScriptDestinationComponent element, int index) {
24830    if (element == null) 
24831      return;
24832    Complex t;
24833    if (Utilities.noString(parentType))
24834      t = parent;
24835    else {
24836      t = parent.predicate("fhir:"+parentType+'.'+name);
24837    }
24838    composeBackboneElement(t, "destination", name, element, index);
24839    if (element.hasIndexElement()) {
24840      composeInteger(t, "TestScriptDestinationComponent", "index", element.getIndexElement(), -1);
24841    }
24842    if (element.hasProfile()) {
24843      composeCoding(t, "TestScriptDestinationComponent", "profile", element.getProfile(), -1);
24844    }
24845  }
24846
24847  protected void composeTestScriptMetadataComponent(Complex parent, String parentType, String name, TestScript.TestScriptMetadataComponent element, int index) {
24848    if (element == null) 
24849      return;
24850    Complex t;
24851    if (Utilities.noString(parentType))
24852      t = parent;
24853    else {
24854      t = parent.predicate("fhir:"+parentType+'.'+name);
24855    }
24856    composeBackboneElement(t, "metadata", name, element, index);
24857    for (int i = 0; i < element.getLink().size(); i++) {
24858      composeTestScriptMetadataLinkComponent(t, "TestScriptMetadataComponent", "link", element.getLink().get(i), i);
24859    }
24860    for (int i = 0; i < element.getCapability().size(); i++) {
24861      composeTestScriptMetadataCapabilityComponent(t, "TestScriptMetadataComponent", "capability", element.getCapability().get(i), i);
24862    }
24863  }
24864
24865  protected void composeTestScriptMetadataLinkComponent(Complex parent, String parentType, String name, TestScript.TestScriptMetadataLinkComponent element, int index) {
24866    if (element == null) 
24867      return;
24868    Complex t;
24869    if (Utilities.noString(parentType))
24870      t = parent;
24871    else {
24872      t = parent.predicate("fhir:"+parentType+'.'+name);
24873    }
24874    composeBackboneElement(t, "link", name, element, index);
24875    if (element.hasUrlElement()) {
24876      composeUri(t, "TestScriptMetadataLinkComponent", "url", element.getUrlElement(), -1);
24877    }
24878    if (element.hasDescriptionElement()) {
24879      composeString(t, "TestScriptMetadataLinkComponent", "description", element.getDescriptionElement(), -1);
24880    }
24881  }
24882
24883  protected void composeTestScriptMetadataCapabilityComponent(Complex parent, String parentType, String name, TestScript.TestScriptMetadataCapabilityComponent element, int index) {
24884    if (element == null) 
24885      return;
24886    Complex t;
24887    if (Utilities.noString(parentType))
24888      t = parent;
24889    else {
24890      t = parent.predicate("fhir:"+parentType+'.'+name);
24891    }
24892    composeBackboneElement(t, "capability", name, element, index);
24893    if (element.hasRequiredElement()) {
24894      composeBoolean(t, "TestScriptMetadataCapabilityComponent", "required", element.getRequiredElement(), -1);
24895    }
24896    if (element.hasValidatedElement()) {
24897      composeBoolean(t, "TestScriptMetadataCapabilityComponent", "validated", element.getValidatedElement(), -1);
24898    }
24899    if (element.hasDescriptionElement()) {
24900      composeString(t, "TestScriptMetadataCapabilityComponent", "description", element.getDescriptionElement(), -1);
24901    }
24902    for (int i = 0; i < element.getOrigin().size(); i++) {
24903      composeInteger(t, "TestScriptMetadataCapabilityComponent", "origin", element.getOrigin().get(i), i);
24904    }
24905    if (element.hasDestinationElement()) {
24906      composeInteger(t, "TestScriptMetadataCapabilityComponent", "destination", element.getDestinationElement(), -1);
24907    }
24908    for (int i = 0; i < element.getLink().size(); i++) {
24909      composeUri(t, "TestScriptMetadataCapabilityComponent", "link", element.getLink().get(i), i);
24910    }
24911    if (element.hasCapabilitiesElement()) {
24912      composeCanonical(t, "TestScriptMetadataCapabilityComponent", "capabilities", element.getCapabilitiesElement(), -1);
24913    }
24914  }
24915
24916  protected void composeTestScriptScopeComponent(Complex parent, String parentType, String name, TestScript.TestScriptScopeComponent element, int index) {
24917    if (element == null) 
24918      return;
24919    Complex t;
24920    if (Utilities.noString(parentType))
24921      t = parent;
24922    else {
24923      t = parent.predicate("fhir:"+parentType+'.'+name);
24924    }
24925    composeBackboneElement(t, "scope", name, element, index);
24926    if (element.hasArtifactElement()) {
24927      composeCanonical(t, "TestScriptScopeComponent", "artifact", element.getArtifactElement(), -1);
24928    }
24929    if (element.hasConformance()) {
24930      composeCodeableConcept(t, "TestScriptScopeComponent", "conformance", element.getConformance(), -1);
24931    }
24932    if (element.hasPhase()) {
24933      composeCodeableConcept(t, "TestScriptScopeComponent", "phase", element.getPhase(), -1);
24934    }
24935  }
24936
24937  protected void composeTestScriptFixtureComponent(Complex parent, String parentType, String name, TestScript.TestScriptFixtureComponent element, int index) {
24938    if (element == null) 
24939      return;
24940    Complex t;
24941    if (Utilities.noString(parentType))
24942      t = parent;
24943    else {
24944      t = parent.predicate("fhir:"+parentType+'.'+name);
24945    }
24946    composeBackboneElement(t, "fixture", name, element, index);
24947    if (element.hasAutocreateElement()) {
24948      composeBoolean(t, "TestScriptFixtureComponent", "autocreate", element.getAutocreateElement(), -1);
24949    }
24950    if (element.hasAutodeleteElement()) {
24951      composeBoolean(t, "TestScriptFixtureComponent", "autodelete", element.getAutodeleteElement(), -1);
24952    }
24953    if (element.hasResource()) {
24954      composeReference(t, "TestScriptFixtureComponent", "resource", element.getResource(), -1);
24955    }
24956  }
24957
24958  protected void composeTestScriptVariableComponent(Complex parent, String parentType, String name, TestScript.TestScriptVariableComponent 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:"+parentType+'.'+name);
24966    }
24967    composeBackboneElement(t, "variable", name, element, index);
24968    if (element.hasNameElement()) {
24969      composeString(t, "TestScriptVariableComponent", "name", element.getNameElement(), -1);
24970    }
24971    if (element.hasDefaultValueElement()) {
24972      composeString(t, "TestScriptVariableComponent", "defaultValue", element.getDefaultValueElement(), -1);
24973    }
24974    if (element.hasDescriptionElement()) {
24975      composeString(t, "TestScriptVariableComponent", "description", element.getDescriptionElement(), -1);
24976    }
24977    if (element.hasExpressionElement()) {
24978      composeString(t, "TestScriptVariableComponent", "expression", element.getExpressionElement(), -1);
24979    }
24980    if (element.hasHeaderFieldElement()) {
24981      composeString(t, "TestScriptVariableComponent", "headerField", element.getHeaderFieldElement(), -1);
24982    }
24983    if (element.hasHintElement()) {
24984      composeString(t, "TestScriptVariableComponent", "hint", element.getHintElement(), -1);
24985    }
24986    if (element.hasPathElement()) {
24987      composeString(t, "TestScriptVariableComponent", "path", element.getPathElement(), -1);
24988    }
24989    if (element.hasSourceIdElement()) {
24990      composeId(t, "TestScriptVariableComponent", "sourceId", element.getSourceIdElement(), -1);
24991    }
24992  }
24993
24994  protected void composeTestScriptSetupComponent(Complex parent, String parentType, String name, TestScript.TestScriptSetupComponent element, int index) {
24995    if (element == null) 
24996      return;
24997    Complex t;
24998    if (Utilities.noString(parentType))
24999      t = parent;
25000    else {
25001      t = parent.predicate("fhir:"+parentType+'.'+name);
25002    }
25003    composeBackboneElement(t, "setup", name, element, index);
25004    for (int i = 0; i < element.getAction().size(); i++) {
25005      composeTestScriptSetupActionComponent(t, "TestScriptSetupComponent", "action", element.getAction().get(i), i);
25006    }
25007  }
25008
25009  protected void composeTestScriptSetupActionComponent(Complex parent, String parentType, String name, TestScript.SetupActionComponent element, int index) {
25010    if (element == null) 
25011      return;
25012    Complex t;
25013    if (Utilities.noString(parentType))
25014      t = parent;
25015    else {
25016      t = parent.predicate("fhir:"+parentType+'.'+name);
25017    }
25018    composeBackboneElement(t, "action", name, element, index);
25019    if (element.hasOperation()) {
25020      composeTestScriptSetupActionOperationComponent(t, "SetupActionComponent", "operation", element.getOperation(), -1);
25021    }
25022    if (element.hasAssert()) {
25023      composeTestScriptSetupActionAssertComponent(t, "SetupActionComponent", "assert", element.getAssert(), -1);
25024    }
25025  }
25026
25027  protected void composeTestScriptSetupActionOperationComponent(Complex parent, String parentType, String name, TestScript.SetupActionOperationComponent element, int index) {
25028    if (element == null) 
25029      return;
25030    Complex t;
25031    if (Utilities.noString(parentType))
25032      t = parent;
25033    else {
25034      t = parent.predicate("fhir:"+parentType+'.'+name);
25035    }
25036    composeBackboneElement(t, "operation", name, element, index);
25037    if (element.hasType()) {
25038      composeCoding(t, "SetupActionOperationComponent", "type", element.getType(), -1);
25039    }
25040    if (element.hasResourceElement()) {
25041      composeEnum(t, "SetupActionOperationComponent", "resource", element.getResourceElement(), -1);
25042    }
25043    if (element.hasLabelElement()) {
25044      composeString(t, "SetupActionOperationComponent", "label", element.getLabelElement(), -1);
25045    }
25046    if (element.hasDescriptionElement()) {
25047      composeString(t, "SetupActionOperationComponent", "description", element.getDescriptionElement(), -1);
25048    }
25049    if (element.hasAcceptElement()) {
25050      composeCode(t, "SetupActionOperationComponent", "accept", element.getAcceptElement(), -1);
25051    }
25052    if (element.hasContentTypeElement()) {
25053      composeCode(t, "SetupActionOperationComponent", "contentType", element.getContentTypeElement(), -1);
25054    }
25055    if (element.hasDestinationElement()) {
25056      composeInteger(t, "SetupActionOperationComponent", "destination", element.getDestinationElement(), -1);
25057    }
25058    if (element.hasEncodeRequestUrlElement()) {
25059      composeBoolean(t, "SetupActionOperationComponent", "encodeRequestUrl", element.getEncodeRequestUrlElement(), -1);
25060    }
25061    if (element.hasMethodElement()) {
25062      composeEnum(t, "SetupActionOperationComponent", "method", element.getMethodElement(), -1);
25063    }
25064    if (element.hasOriginElement()) {
25065      composeInteger(t, "SetupActionOperationComponent", "origin", element.getOriginElement(), -1);
25066    }
25067    if (element.hasParamsElement()) {
25068      composeString(t, "SetupActionOperationComponent", "params", element.getParamsElement(), -1);
25069    }
25070    for (int i = 0; i < element.getRequestHeader().size(); i++) {
25071      composeTestScriptSetupActionOperationRequestHeaderComponent(t, "SetupActionOperationComponent", "requestHeader", element.getRequestHeader().get(i), i);
25072    }
25073    if (element.hasRequestIdElement()) {
25074      composeId(t, "SetupActionOperationComponent", "requestId", element.getRequestIdElement(), -1);
25075    }
25076    if (element.hasResponseIdElement()) {
25077      composeId(t, "SetupActionOperationComponent", "responseId", element.getResponseIdElement(), -1);
25078    }
25079    if (element.hasSourceIdElement()) {
25080      composeId(t, "SetupActionOperationComponent", "sourceId", element.getSourceIdElement(), -1);
25081    }
25082    if (element.hasTargetIdElement()) {
25083      composeId(t, "SetupActionOperationComponent", "targetId", element.getTargetIdElement(), -1);
25084    }
25085    if (element.hasUrlElement()) {
25086      composeString(t, "SetupActionOperationComponent", "url", element.getUrlElement(), -1);
25087    }
25088  }
25089
25090  protected void composeTestScriptSetupActionOperationRequestHeaderComponent(Complex parent, String parentType, String name, TestScript.SetupActionOperationRequestHeaderComponent element, int index) {
25091    if (element == null) 
25092      return;
25093    Complex t;
25094    if (Utilities.noString(parentType))
25095      t = parent;
25096    else {
25097      t = parent.predicate("fhir:"+parentType+'.'+name);
25098    }
25099    composeBackboneElement(t, "requestHeader", name, element, index);
25100    if (element.hasFieldElement()) {
25101      composeString(t, "SetupActionOperationRequestHeaderComponent", "field", element.getFieldElement(), -1);
25102    }
25103    if (element.hasValueElement()) {
25104      composeString(t, "SetupActionOperationRequestHeaderComponent", "value", element.getValueElement(), -1);
25105    }
25106  }
25107
25108  protected void composeTestScriptSetupActionAssertComponent(Complex parent, String parentType, String name, TestScript.SetupActionAssertComponent element, int index) {
25109    if (element == null) 
25110      return;
25111    Complex t;
25112    if (Utilities.noString(parentType))
25113      t = parent;
25114    else {
25115      t = parent.predicate("fhir:"+parentType+'.'+name);
25116    }
25117    composeBackboneElement(t, "assert", name, element, index);
25118    if (element.hasLabelElement()) {
25119      composeString(t, "SetupActionAssertComponent", "label", element.getLabelElement(), -1);
25120    }
25121    if (element.hasDescriptionElement()) {
25122      composeString(t, "SetupActionAssertComponent", "description", element.getDescriptionElement(), -1);
25123    }
25124    if (element.hasDirectionElement()) {
25125      composeEnum(t, "SetupActionAssertComponent", "direction", element.getDirectionElement(), -1);
25126    }
25127    if (element.hasCompareToSourceIdElement()) {
25128      composeString(t, "SetupActionAssertComponent", "compareToSourceId", element.getCompareToSourceIdElement(), -1);
25129    }
25130    if (element.hasCompareToSourceExpressionElement()) {
25131      composeString(t, "SetupActionAssertComponent", "compareToSourceExpression", element.getCompareToSourceExpressionElement(), -1);
25132    }
25133    if (element.hasCompareToSourcePathElement()) {
25134      composeString(t, "SetupActionAssertComponent", "compareToSourcePath", element.getCompareToSourcePathElement(), -1);
25135    }
25136    if (element.hasContentTypeElement()) {
25137      composeCode(t, "SetupActionAssertComponent", "contentType", element.getContentTypeElement(), -1);
25138    }
25139    if (element.hasExpressionElement()) {
25140      composeString(t, "SetupActionAssertComponent", "expression", element.getExpressionElement(), -1);
25141    }
25142    if (element.hasHeaderFieldElement()) {
25143      composeString(t, "SetupActionAssertComponent", "headerField", element.getHeaderFieldElement(), -1);
25144    }
25145    if (element.hasMinimumIdElement()) {
25146      composeString(t, "SetupActionAssertComponent", "minimumId", element.getMinimumIdElement(), -1);
25147    }
25148    if (element.hasNavigationLinksElement()) {
25149      composeBoolean(t, "SetupActionAssertComponent", "navigationLinks", element.getNavigationLinksElement(), -1);
25150    }
25151    if (element.hasOperatorElement()) {
25152      composeEnum(t, "SetupActionAssertComponent", "operator", element.getOperatorElement(), -1);
25153    }
25154    if (element.hasPathElement()) {
25155      composeString(t, "SetupActionAssertComponent", "path", element.getPathElement(), -1);
25156    }
25157    if (element.hasRequestMethodElement()) {
25158      composeEnum(t, "SetupActionAssertComponent", "requestMethod", element.getRequestMethodElement(), -1);
25159    }
25160    if (element.hasRequestURLElement()) {
25161      composeString(t, "SetupActionAssertComponent", "requestURL", element.getRequestURLElement(), -1);
25162    }
25163    if (element.hasResourceElement()) {
25164      composeEnum(t, "SetupActionAssertComponent", "resource", element.getResourceElement(), -1);
25165    }
25166    if (element.hasResponseElement()) {
25167      composeEnum(t, "SetupActionAssertComponent", "response", element.getResponseElement(), -1);
25168    }
25169    if (element.hasResponseCodeElement()) {
25170      composeString(t, "SetupActionAssertComponent", "responseCode", element.getResponseCodeElement(), -1);
25171    }
25172    if (element.hasSourceIdElement()) {
25173      composeId(t, "SetupActionAssertComponent", "sourceId", element.getSourceIdElement(), -1);
25174    }
25175    if (element.hasStopTestOnFailElement()) {
25176      composeBoolean(t, "SetupActionAssertComponent", "stopTestOnFail", element.getStopTestOnFailElement(), -1);
25177    }
25178    if (element.hasValidateProfileIdElement()) {
25179      composeId(t, "SetupActionAssertComponent", "validateProfileId", element.getValidateProfileIdElement(), -1);
25180    }
25181    if (element.hasValueElement()) {
25182      composeString(t, "SetupActionAssertComponent", "value", element.getValueElement(), -1);
25183    }
25184    if (element.hasWarningOnlyElement()) {
25185      composeBoolean(t, "SetupActionAssertComponent", "warningOnly", element.getWarningOnlyElement(), -1);
25186    }
25187  }
25188
25189  protected void composeTestScriptTestComponent(Complex parent, String parentType, String name, TestScript.TestScriptTestComponent element, int index) {
25190    if (element == null) 
25191      return;
25192    Complex t;
25193    if (Utilities.noString(parentType))
25194      t = parent;
25195    else {
25196      t = parent.predicate("fhir:"+parentType+'.'+name);
25197    }
25198    composeBackboneElement(t, "test", name, element, index);
25199    if (element.hasNameElement()) {
25200      composeString(t, "TestScriptTestComponent", "name", element.getNameElement(), -1);
25201    }
25202    if (element.hasDescriptionElement()) {
25203      composeString(t, "TestScriptTestComponent", "description", element.getDescriptionElement(), -1);
25204    }
25205    for (int i = 0; i < element.getAction().size(); i++) {
25206      composeTestScriptTestActionComponent(t, "TestScriptTestComponent", "action", element.getAction().get(i), i);
25207    }
25208  }
25209
25210  protected void composeTestScriptTestActionComponent(Complex parent, String parentType, String name, TestScript.TestActionComponent element, int index) {
25211    if (element == null) 
25212      return;
25213    Complex t;
25214    if (Utilities.noString(parentType))
25215      t = parent;
25216    else {
25217      t = parent.predicate("fhir:"+parentType+'.'+name);
25218    }
25219    composeBackboneElement(t, "action", name, element, index);
25220    if (element.hasOperation()) {
25221      composeTestScriptSetupActionOperationComponent(t, "TestActionComponent", "operation", element.getOperation(), -1);
25222    }
25223    if (element.hasAssert()) {
25224      composeTestScriptSetupActionAssertComponent(t, "TestActionComponent", "assert", element.getAssert(), -1);
25225    }
25226  }
25227
25228  protected void composeTestScriptTeardownComponent(Complex parent, String parentType, String name, TestScript.TestScriptTeardownComponent element, int index) {
25229    if (element == null) 
25230      return;
25231    Complex t;
25232    if (Utilities.noString(parentType))
25233      t = parent;
25234    else {
25235      t = parent.predicate("fhir:"+parentType+'.'+name);
25236    }
25237    composeBackboneElement(t, "teardown", name, element, index);
25238    for (int i = 0; i < element.getAction().size(); i++) {
25239      composeTestScriptTeardownActionComponent(t, "TestScriptTeardownComponent", "action", element.getAction().get(i), i);
25240    }
25241  }
25242
25243  protected void composeTestScriptTeardownActionComponent(Complex parent, String parentType, String name, TestScript.TeardownActionComponent element, int index) {
25244    if (element == null) 
25245      return;
25246    Complex t;
25247    if (Utilities.noString(parentType))
25248      t = parent;
25249    else {
25250      t = parent.predicate("fhir:"+parentType+'.'+name);
25251    }
25252    composeBackboneElement(t, "action", name, element, index);
25253    if (element.hasOperation()) {
25254      composeTestScriptSetupActionOperationComponent(t, "TeardownActionComponent", "operation", element.getOperation(), -1);
25255    }
25256  }
25257
25258  protected void composeValueSet(Complex parent, String parentType, String name, ValueSet element, int index) {
25259    if (element == null) 
25260      return;
25261    Complex t;
25262    if (Utilities.noString(parentType))
25263      t = parent;
25264    else {
25265      t = parent.predicate("fhir:"+parentType+'.'+name);
25266    }
25267    composeCanonicalResource(t, "ValueSet", name, element, index);
25268    if (element.hasUrlElement()) {
25269      composeUri(t, "ValueSet", "url", element.getUrlElement(), -1);
25270    }
25271    for (int i = 0; i < element.getIdentifier().size(); i++) {
25272      composeIdentifier(t, "ValueSet", "identifier", element.getIdentifier().get(i), i);
25273    }
25274    if (element.hasVersionElement()) {
25275      composeString(t, "ValueSet", "version", element.getVersionElement(), -1);
25276    }
25277    if (element.hasNameElement()) {
25278      composeString(t, "ValueSet", "name", element.getNameElement(), -1);
25279    }
25280    if (element.hasTitleElement()) {
25281      composeString(t, "ValueSet", "title", element.getTitleElement(), -1);
25282    }
25283    if (element.hasStatusElement()) {
25284      composeEnum(t, "ValueSet", "status", element.getStatusElement(), -1);
25285    }
25286    if (element.hasExperimentalElement()) {
25287      composeBoolean(t, "ValueSet", "experimental", element.getExperimentalElement(), -1);
25288    }
25289    if (element.hasDateElement()) {
25290      composeDateTime(t, "ValueSet", "date", element.getDateElement(), -1);
25291    }
25292    if (element.hasPublisherElement()) {
25293      composeString(t, "ValueSet", "publisher", element.getPublisherElement(), -1);
25294    }
25295    for (int i = 0; i < element.getContact().size(); i++) {
25296      composeContactDetail(t, "ValueSet", "contact", element.getContact().get(i), i);
25297    }
25298    if (element.hasDescriptionElement()) {
25299      composeMarkdown(t, "ValueSet", "description", element.getDescriptionElement(), -1);
25300    }
25301    for (int i = 0; i < element.getUseContext().size(); i++) {
25302      composeUsageContext(t, "ValueSet", "useContext", element.getUseContext().get(i), i);
25303    }
25304    for (int i = 0; i < element.getJurisdiction().size(); i++) {
25305      composeCodeableConcept(t, "ValueSet", "jurisdiction", element.getJurisdiction().get(i), i);
25306    }
25307    if (element.hasImmutableElement()) {
25308      composeBoolean(t, "ValueSet", "immutable", element.getImmutableElement(), -1);
25309    }
25310    if (element.hasPurposeElement()) {
25311      composeMarkdown(t, "ValueSet", "purpose", element.getPurposeElement(), -1);
25312    }
25313    if (element.hasCopyrightElement()) {
25314      composeMarkdown(t, "ValueSet", "copyright", element.getCopyrightElement(), -1);
25315    }
25316    if (element.hasCompose()) {
25317      composeValueSetComposeComponent(t, "ValueSet", "compose", element.getCompose(), -1);
25318    }
25319    if (element.hasExpansion()) {
25320      composeValueSetExpansionComponent(t, "ValueSet", "expansion", element.getExpansion(), -1);
25321    }
25322    if (element.hasScope()) {
25323      composeValueSetScopeComponent(t, "ValueSet", "scope", element.getScope(), -1);
25324    }
25325  }
25326
25327  protected void composeValueSetComposeComponent(Complex parent, String parentType, String name, ValueSet.ValueSetComposeComponent element, int index) {
25328    if (element == null) 
25329      return;
25330    Complex t;
25331    if (Utilities.noString(parentType))
25332      t = parent;
25333    else {
25334      t = parent.predicate("fhir:"+parentType+'.'+name);
25335    }
25336    composeBackboneElement(t, "compose", name, element, index);
25337    if (element.hasLockedDateElement()) {
25338      composeDate(t, "ValueSetComposeComponent", "lockedDate", element.getLockedDateElement(), -1);
25339    }
25340    if (element.hasInactiveElement()) {
25341      composeBoolean(t, "ValueSetComposeComponent", "inactive", element.getInactiveElement(), -1);
25342    }
25343    for (int i = 0; i < element.getInclude().size(); i++) {
25344      composeValueSetConceptSetComponent(t, "ValueSetComposeComponent", "include", element.getInclude().get(i), i);
25345    }
25346    for (int i = 0; i < element.getExclude().size(); i++) {
25347      composeValueSetConceptSetComponent(t, "ValueSetComposeComponent", "exclude", element.getExclude().get(i), i);
25348    }
25349    for (int i = 0; i < element.getProperty().size(); i++) {
25350      composeString(t, "ValueSetComposeComponent", "property", element.getProperty().get(i), i);
25351    }
25352  }
25353
25354  protected void composeValueSetConceptSetComponent(Complex parent, String parentType, String name, ValueSet.ConceptSetComponent element, int index) {
25355    if (element == null) 
25356      return;
25357    Complex t;
25358    if (Utilities.noString(parentType))
25359      t = parent;
25360    else {
25361      t = parent.predicate("fhir:"+parentType+'.'+name);
25362    }
25363    composeBackboneElement(t, "include", name, element, index);
25364    if (element.hasSystemElement()) {
25365      composeUri(t, "ConceptSetComponent", "system", element.getSystemElement(), -1);
25366    }
25367    if (element.hasVersionElement()) {
25368      composeString(t, "ConceptSetComponent", "version", element.getVersionElement(), -1);
25369    }
25370    for (int i = 0; i < element.getConcept().size(); i++) {
25371      composeValueSetConceptReferenceComponent(t, "ConceptSetComponent", "concept", element.getConcept().get(i), i);
25372    }
25373    for (int i = 0; i < element.getFilter().size(); i++) {
25374      composeValueSetConceptSetFilterComponent(t, "ConceptSetComponent", "filter", element.getFilter().get(i), i);
25375    }
25376    for (int i = 0; i < element.getValueSet().size(); i++) {
25377      composeCanonical(t, "ConceptSetComponent", "valueSet", element.getValueSet().get(i), i);
25378    }
25379    if (element.hasCopyrightElement()) {
25380      composeString(t, "ConceptSetComponent", "copyright", element.getCopyrightElement(), -1);
25381    }
25382  }
25383
25384  protected void composeValueSetConceptReferenceComponent(Complex parent, String parentType, String name, ValueSet.ConceptReferenceComponent element, int index) {
25385    if (element == null) 
25386      return;
25387    Complex t;
25388    if (Utilities.noString(parentType))
25389      t = parent;
25390    else {
25391      t = parent.predicate("fhir:"+parentType+'.'+name);
25392    }
25393    composeBackboneElement(t, "concept", name, element, index);
25394    if (element.hasCodeElement()) {
25395      composeCode(t, "ConceptReferenceComponent", "code", element.getCodeElement(), -1);
25396    }
25397    if (element.hasDisplayElement()) {
25398      composeString(t, "ConceptReferenceComponent", "display", element.getDisplayElement(), -1);
25399    }
25400    for (int i = 0; i < element.getDesignation().size(); i++) {
25401      composeValueSetConceptReferenceDesignationComponent(t, "ConceptReferenceComponent", "designation", element.getDesignation().get(i), i);
25402    }
25403  }
25404
25405  protected void composeValueSetConceptReferenceDesignationComponent(Complex parent, String parentType, String name, ValueSet.ConceptReferenceDesignationComponent element, int index) {
25406    if (element == null) 
25407      return;
25408    Complex t;
25409    if (Utilities.noString(parentType))
25410      t = parent;
25411    else {
25412      t = parent.predicate("fhir:"+parentType+'.'+name);
25413    }
25414    composeBackboneElement(t, "designation", name, element, index);
25415    if (element.hasLanguageElement()) {
25416      composeCode(t, "ConceptReferenceDesignationComponent", "language", element.getLanguageElement(), -1);
25417    }
25418    if (element.hasUse()) {
25419      composeCoding(t, "ConceptReferenceDesignationComponent", "use", element.getUse(), -1);
25420    }
25421    if (element.hasValueElement()) {
25422      composeString(t, "ConceptReferenceDesignationComponent", "value", element.getValueElement(), -1);
25423    }
25424  }
25425
25426  protected void composeValueSetConceptSetFilterComponent(Complex parent, String parentType, String name, ValueSet.ConceptSetFilterComponent element, int index) {
25427    if (element == null) 
25428      return;
25429    Complex t;
25430    if (Utilities.noString(parentType))
25431      t = parent;
25432    else {
25433      t = parent.predicate("fhir:"+parentType+'.'+name);
25434    }
25435    composeBackboneElement(t, "filter", name, element, index);
25436    if (element.hasPropertyElement()) {
25437      composeCode(t, "ConceptSetFilterComponent", "property", element.getPropertyElement(), -1);
25438    }
25439    if (element.hasOpElement()) {
25440      composeEnum(t, "ConceptSetFilterComponent", "op", element.getOpElement(), -1);
25441    }
25442    if (element.hasValueElement()) {
25443      composeString(t, "ConceptSetFilterComponent", "value", element.getValueElement(), -1);
25444    }
25445  }
25446
25447  protected void composeValueSetExpansionComponent(Complex parent, String parentType, String name, ValueSet.ValueSetExpansionComponent 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:"+parentType+'.'+name);
25455    }
25456    composeBackboneElement(t, "expansion", name, element, index);
25457    if (element.hasIdentifierElement()) {
25458      composeUri(t, "ValueSetExpansionComponent", "identifier", element.getIdentifierElement(), -1);
25459    }
25460    if (element.hasTimestampElement()) {
25461      composeDateTime(t, "ValueSetExpansionComponent", "timestamp", element.getTimestampElement(), -1);
25462    }
25463    if (element.hasTotalElement()) {
25464      composeInteger(t, "ValueSetExpansionComponent", "total", element.getTotalElement(), -1);
25465    }
25466    if (element.hasOffsetElement()) {
25467      composeInteger(t, "ValueSetExpansionComponent", "offset", element.getOffsetElement(), -1);
25468    }
25469    for (int i = 0; i < element.getParameter().size(); i++) {
25470      composeValueSetExpansionParameterComponent(t, "ValueSetExpansionComponent", "parameter", element.getParameter().get(i), i);
25471    }
25472    for (int i = 0; i < element.getProperty().size(); i++) {
25473      composeValueSetExpansionPropertyComponent(t, "ValueSetExpansionComponent", "property", element.getProperty().get(i), i);
25474    }
25475    for (int i = 0; i < element.getContains().size(); i++) {
25476      composeValueSetExpansionContainsComponent(t, "ValueSetExpansionComponent", "contains", element.getContains().get(i), i);
25477    }
25478  }
25479
25480  protected void composeValueSetExpansionParameterComponent(Complex parent, String parentType, String name, ValueSet.ValueSetExpansionParameterComponent element, int index) {
25481    if (element == null) 
25482      return;
25483    Complex t;
25484    if (Utilities.noString(parentType))
25485      t = parent;
25486    else {
25487      t = parent.predicate("fhir:"+parentType+'.'+name);
25488    }
25489    composeBackboneElement(t, "parameter", name, element, index);
25490    if (element.hasNameElement()) {
25491      composeString(t, "ValueSetExpansionParameterComponent", "name", element.getNameElement(), -1);
25492    }
25493    if (element.hasValue()) {
25494      composeType(t, "ValueSetExpansionParameterComponent", "value", element.getValue(), -1);
25495    }
25496  }
25497
25498  protected void composeValueSetExpansionPropertyComponent(Complex parent, String parentType, String name, ValueSet.ValueSetExpansionPropertyComponent element, int index) {
25499    if (element == null) 
25500      return;
25501    Complex t;
25502    if (Utilities.noString(parentType))
25503      t = parent;
25504    else {
25505      t = parent.predicate("fhir:"+parentType+'.'+name);
25506    }
25507    composeBackboneElement(t, "property", name, element, index);
25508    if (element.hasCodeElement()) {
25509      composeCode(t, "ValueSetExpansionPropertyComponent", "code", element.getCodeElement(), -1);
25510    }
25511    if (element.hasUriElement()) {
25512      composeUri(t, "ValueSetExpansionPropertyComponent", "uri", element.getUriElement(), -1);
25513    }
25514  }
25515
25516  protected void composeValueSetExpansionContainsComponent(Complex parent, String parentType, String name, ValueSet.ValueSetExpansionContainsComponent element, int index) {
25517    if (element == null) 
25518      return;
25519    Complex t;
25520    if (Utilities.noString(parentType))
25521      t = parent;
25522    else {
25523      t = parent.predicate("fhir:"+parentType+'.'+name);
25524    }
25525    composeBackboneElement(t, "contains", name, element, index);
25526    if (element.hasSystemElement()) {
25527      composeUri(t, "ValueSetExpansionContainsComponent", "system", element.getSystemElement(), -1);
25528    }
25529    if (element.hasAbstractElement()) {
25530      composeBoolean(t, "ValueSetExpansionContainsComponent", "abstract", element.getAbstractElement(), -1);
25531    }
25532    if (element.hasInactiveElement()) {
25533      composeBoolean(t, "ValueSetExpansionContainsComponent", "inactive", element.getInactiveElement(), -1);
25534    }
25535    if (element.hasVersionElement()) {
25536      composeString(t, "ValueSetExpansionContainsComponent", "version", element.getVersionElement(), -1);
25537    }
25538    if (element.hasCodeElement()) {
25539      composeCode(t, "ValueSetExpansionContainsComponent", "code", element.getCodeElement(), -1);
25540    }
25541    if (element.hasDisplayElement()) {
25542      composeString(t, "ValueSetExpansionContainsComponent", "display", element.getDisplayElement(), -1);
25543    }
25544    for (int i = 0; i < element.getDesignation().size(); i++) {
25545      composeValueSetConceptReferenceDesignationComponent(t, "ValueSetExpansionContainsComponent", "designation", element.getDesignation().get(i), i);
25546    }
25547    for (int i = 0; i < element.getProperty().size(); i++) {
25548      composeValueSetConceptPropertyComponent(t, "ValueSetExpansionContainsComponent", "property", element.getProperty().get(i), i);
25549    }
25550    for (int i = 0; i < element.getContains().size(); i++) {
25551      composeValueSetExpansionContainsComponent(t, "ValueSetExpansionContainsComponent", "contains", element.getContains().get(i), i);
25552    }
25553  }
25554
25555  protected void composeValueSetConceptPropertyComponent(Complex parent, String parentType, String name, ValueSet.ConceptPropertyComponent element, int index) {
25556    if (element == null) 
25557      return;
25558    Complex t;
25559    if (Utilities.noString(parentType))
25560      t = parent;
25561    else {
25562      t = parent.predicate("fhir:"+parentType+'.'+name);
25563    }
25564    composeBackboneElement(t, "property", name, element, index);
25565    if (element.hasCodeElement()) {
25566      composeCode(t, "ConceptPropertyComponent", "code", element.getCodeElement(), -1);
25567    }
25568    if (element.hasValue()) {
25569      composeType(t, "ConceptPropertyComponent", "value", element.getValue(), -1);
25570    }
25571  }
25572
25573  protected void composeValueSetScopeComponent(Complex parent, String parentType, String name, ValueSet.ValueSetScopeComponent element, int index) {
25574    if (element == null) 
25575      return;
25576    Complex t;
25577    if (Utilities.noString(parentType))
25578      t = parent;
25579    else {
25580      t = parent.predicate("fhir:"+parentType+'.'+name);
25581    }
25582    composeBackboneElement(t, "scope", name, element, index);
25583    if (element.hasFocusElement()) {
25584      composeString(t, "ValueSetScopeComponent", "focus", element.getFocusElement(), -1);
25585    }
25586    if (element.hasInclusionCriteriaElement()) {
25587      composeString(t, "ValueSetScopeComponent", "inclusionCriteria", element.getInclusionCriteriaElement(), -1);
25588    }
25589    if (element.hasExclusionCriteriaElement()) {
25590      composeString(t, "ValueSetScopeComponent", "exclusionCriteria", element.getExclusionCriteriaElement(), -1);
25591    }
25592  }
25593
25594  protected void composeVerificationResult(Complex parent, String parentType, String name, VerificationResult 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:"+parentType+'.'+name);
25602    }
25603    composeDomainResource(t, "VerificationResult", name, element, index);
25604    for (int i = 0; i < element.getTarget().size(); i++) {
25605      composeReference(t, "VerificationResult", "target", element.getTarget().get(i), i);
25606    }
25607    for (int i = 0; i < element.getTargetLocation().size(); i++) {
25608      composeString(t, "VerificationResult", "targetLocation", element.getTargetLocation().get(i), i);
25609    }
25610    if (element.hasNeed()) {
25611      composeCodeableConcept(t, "VerificationResult", "need", element.getNeed(), -1);
25612    }
25613    if (element.hasStatusElement()) {
25614      composeEnum(t, "VerificationResult", "status", element.getStatusElement(), -1);
25615    }
25616    if (element.hasStatusDateElement()) {
25617      composeDateTime(t, "VerificationResult", "statusDate", element.getStatusDateElement(), -1);
25618    }
25619    if (element.hasValidationType()) {
25620      composeCodeableConcept(t, "VerificationResult", "validationType", element.getValidationType(), -1);
25621    }
25622    for (int i = 0; i < element.getValidationProcess().size(); i++) {
25623      composeCodeableConcept(t, "VerificationResult", "validationProcess", element.getValidationProcess().get(i), i);
25624    }
25625    if (element.hasFrequency()) {
25626      composeTiming(t, "VerificationResult", "frequency", element.getFrequency(), -1);
25627    }
25628    if (element.hasLastPerformedElement()) {
25629      composeDateTime(t, "VerificationResult", "lastPerformed", element.getLastPerformedElement(), -1);
25630    }
25631    if (element.hasNextScheduledElement()) {
25632      composeDate(t, "VerificationResult", "nextScheduled", element.getNextScheduledElement(), -1);
25633    }
25634    if (element.hasFailureAction()) {
25635      composeCodeableConcept(t, "VerificationResult", "failureAction", element.getFailureAction(), -1);
25636    }
25637    for (int i = 0; i < element.getPrimarySource().size(); i++) {
25638      composeVerificationResultPrimarySourceComponent(t, "VerificationResult", "primarySource", element.getPrimarySource().get(i), i);
25639    }
25640    if (element.hasAttestation()) {
25641      composeVerificationResultAttestationComponent(t, "VerificationResult", "attestation", element.getAttestation(), -1);
25642    }
25643    for (int i = 0; i < element.getValidator().size(); i++) {
25644      composeVerificationResultValidatorComponent(t, "VerificationResult", "validator", element.getValidator().get(i), i);
25645    }
25646  }
25647
25648  protected void composeVerificationResultPrimarySourceComponent(Complex parent, String parentType, String name, VerificationResult.VerificationResultPrimarySourceComponent 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:"+parentType+'.'+name);
25656    }
25657    composeBackboneElement(t, "primarySource", name, element, index);
25658    if (element.hasWho()) {
25659      composeReference(t, "VerificationResultPrimarySourceComponent", "who", element.getWho(), -1);
25660    }
25661    for (int i = 0; i < element.getType().size(); i++) {
25662      composeCodeableConcept(t, "VerificationResultPrimarySourceComponent", "type", element.getType().get(i), i);
25663    }
25664    for (int i = 0; i < element.getCommunicationMethod().size(); i++) {
25665      composeCodeableConcept(t, "VerificationResultPrimarySourceComponent", "communicationMethod", element.getCommunicationMethod().get(i), i);
25666    }
25667    if (element.hasValidationStatus()) {
25668      composeCodeableConcept(t, "VerificationResultPrimarySourceComponent", "validationStatus", element.getValidationStatus(), -1);
25669    }
25670    if (element.hasValidationDateElement()) {
25671      composeDateTime(t, "VerificationResultPrimarySourceComponent", "validationDate", element.getValidationDateElement(), -1);
25672    }
25673    if (element.hasCanPushUpdates()) {
25674      composeCodeableConcept(t, "VerificationResultPrimarySourceComponent", "canPushUpdates", element.getCanPushUpdates(), -1);
25675    }
25676    for (int i = 0; i < element.getPushTypeAvailable().size(); i++) {
25677      composeCodeableConcept(t, "VerificationResultPrimarySourceComponent", "pushTypeAvailable", element.getPushTypeAvailable().get(i), i);
25678    }
25679  }
25680
25681  protected void composeVerificationResultAttestationComponent(Complex parent, String parentType, String name, VerificationResult.VerificationResultAttestationComponent element, int index) {
25682    if (element == null) 
25683      return;
25684    Complex t;
25685    if (Utilities.noString(parentType))
25686      t = parent;
25687    else {
25688      t = parent.predicate("fhir:"+parentType+'.'+name);
25689    }
25690    composeBackboneElement(t, "attestation", name, element, index);
25691    if (element.hasWho()) {
25692      composeReference(t, "VerificationResultAttestationComponent", "who", element.getWho(), -1);
25693    }
25694    if (element.hasOnBehalfOf()) {
25695      composeReference(t, "VerificationResultAttestationComponent", "onBehalfOf", element.getOnBehalfOf(), -1);
25696    }
25697    if (element.hasCommunicationMethod()) {
25698      composeCodeableConcept(t, "VerificationResultAttestationComponent", "communicationMethod", element.getCommunicationMethod(), -1);
25699    }
25700    if (element.hasDateElement()) {
25701      composeDate(t, "VerificationResultAttestationComponent", "date", element.getDateElement(), -1);
25702    }
25703    if (element.hasSourceIdentityCertificateElement()) {
25704      composeString(t, "VerificationResultAttestationComponent", "sourceIdentityCertificate", element.getSourceIdentityCertificateElement(), -1);
25705    }
25706    if (element.hasProxyIdentityCertificateElement()) {
25707      composeString(t, "VerificationResultAttestationComponent", "proxyIdentityCertificate", element.getProxyIdentityCertificateElement(), -1);
25708    }
25709    if (element.hasProxySignature()) {
25710      composeSignature(t, "VerificationResultAttestationComponent", "proxySignature", element.getProxySignature(), -1);
25711    }
25712    if (element.hasSourceSignature()) {
25713      composeSignature(t, "VerificationResultAttestationComponent", "sourceSignature", element.getSourceSignature(), -1);
25714    }
25715  }
25716
25717  protected void composeVerificationResultValidatorComponent(Complex parent, String parentType, String name, VerificationResult.VerificationResultValidatorComponent 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:"+parentType+'.'+name);
25725    }
25726    composeBackboneElement(t, "validator", name, element, index);
25727    if (element.hasOrganization()) {
25728      composeReference(t, "VerificationResultValidatorComponent", "organization", element.getOrganization(), -1);
25729    }
25730    if (element.hasIdentityCertificateElement()) {
25731      composeString(t, "VerificationResultValidatorComponent", "identityCertificate", element.getIdentityCertificateElement(), -1);
25732    }
25733    if (element.hasAttestationSignature()) {
25734      composeSignature(t, "VerificationResultValidatorComponent", "attestationSignature", element.getAttestationSignature(), -1);
25735    }
25736  }
25737
25738  protected void composeVisionPrescription(Complex parent, String parentType, String name, VisionPrescription element, int index) {
25739    if (element == null) 
25740      return;
25741    Complex t;
25742    if (Utilities.noString(parentType))
25743      t = parent;
25744    else {
25745      t = parent.predicate("fhir:"+parentType+'.'+name);
25746    }
25747    composeDomainResource(t, "VisionPrescription", name, element, index);
25748    for (int i = 0; i < element.getIdentifier().size(); i++) {
25749      composeIdentifier(t, "VisionPrescription", "identifier", element.getIdentifier().get(i), i);
25750    }
25751    if (element.hasStatusElement()) {
25752      composeEnum(t, "VisionPrescription", "status", element.getStatusElement(), -1);
25753    }
25754    if (element.hasCreatedElement()) {
25755      composeDateTime(t, "VisionPrescription", "created", element.getCreatedElement(), -1);
25756    }
25757    if (element.hasPatient()) {
25758      composeReference(t, "VisionPrescription", "patient", element.getPatient(), -1);
25759    }
25760    if (element.hasEncounter()) {
25761      composeReference(t, "VisionPrescription", "encounter", element.getEncounter(), -1);
25762    }
25763    if (element.hasDateWrittenElement()) {
25764      composeDateTime(t, "VisionPrescription", "dateWritten", element.getDateWrittenElement(), -1);
25765    }
25766    if (element.hasPrescriber()) {
25767      composeReference(t, "VisionPrescription", "prescriber", element.getPrescriber(), -1);
25768    }
25769    for (int i = 0; i < element.getLensSpecification().size(); i++) {
25770      composeVisionPrescriptionLensSpecificationComponent(t, "VisionPrescription", "lensSpecification", element.getLensSpecification().get(i), i);
25771    }
25772  }
25773
25774  protected void composeVisionPrescriptionLensSpecificationComponent(Complex parent, String parentType, String name, VisionPrescription.VisionPrescriptionLensSpecificationComponent element, int index) {
25775    if (element == null) 
25776      return;
25777    Complex t;
25778    if (Utilities.noString(parentType))
25779      t = parent;
25780    else {
25781      t = parent.predicate("fhir:"+parentType+'.'+name);
25782    }
25783    composeBackboneElement(t, "lensSpecification", name, element, index);
25784    if (element.hasProduct()) {
25785      composeCodeableConcept(t, "VisionPrescriptionLensSpecificationComponent", "product", element.getProduct(), -1);
25786    }
25787    if (element.hasEyeElement()) {
25788      composeEnum(t, "VisionPrescriptionLensSpecificationComponent", "eye", element.getEyeElement(), -1);
25789    }
25790    if (element.hasSphereElement()) {
25791      composeDecimal(t, "VisionPrescriptionLensSpecificationComponent", "sphere", element.getSphereElement(), -1);
25792    }
25793    if (element.hasCylinderElement()) {
25794      composeDecimal(t, "VisionPrescriptionLensSpecificationComponent", "cylinder", element.getCylinderElement(), -1);
25795    }
25796    if (element.hasAxisElement()) {
25797      composeInteger(t, "VisionPrescriptionLensSpecificationComponent", "axis", element.getAxisElement(), -1);
25798    }
25799    for (int i = 0; i < element.getPrism().size(); i++) {
25800      composeVisionPrescriptionPrismComponent(t, "VisionPrescriptionLensSpecificationComponent", "prism", element.getPrism().get(i), i);
25801    }
25802    if (element.hasAddElement()) {
25803      composeDecimal(t, "VisionPrescriptionLensSpecificationComponent", "add", element.getAddElement(), -1);
25804    }
25805    if (element.hasPowerElement()) {
25806      composeDecimal(t, "VisionPrescriptionLensSpecificationComponent", "power", element.getPowerElement(), -1);
25807    }
25808    if (element.hasBackCurveElement()) {
25809      composeDecimal(t, "VisionPrescriptionLensSpecificationComponent", "backCurve", element.getBackCurveElement(), -1);
25810    }
25811    if (element.hasDiameterElement()) {
25812      composeDecimal(t, "VisionPrescriptionLensSpecificationComponent", "diameter", element.getDiameterElement(), -1);
25813    }
25814    if (element.hasDuration()) {
25815      composeQuantity(t, "VisionPrescriptionLensSpecificationComponent", "duration", element.getDuration(), -1);
25816    }
25817    if (element.hasColorElement()) {
25818      composeString(t, "VisionPrescriptionLensSpecificationComponent", "color", element.getColorElement(), -1);
25819    }
25820    if (element.hasBrandElement()) {
25821      composeString(t, "VisionPrescriptionLensSpecificationComponent", "brand", element.getBrandElement(), -1);
25822    }
25823    for (int i = 0; i < element.getNote().size(); i++) {
25824      composeAnnotation(t, "VisionPrescriptionLensSpecificationComponent", "note", element.getNote().get(i), i);
25825    }
25826  }
25827
25828  protected void composeVisionPrescriptionPrismComponent(Complex parent, String parentType, String name, VisionPrescription.PrismComponent element, int index) {
25829    if (element == null) 
25830      return;
25831    Complex t;
25832    if (Utilities.noString(parentType))
25833      t = parent;
25834    else {
25835      t = parent.predicate("fhir:"+parentType+'.'+name);
25836    }
25837    composeBackboneElement(t, "prism", name, element, index);
25838    if (element.hasAmountElement()) {
25839      composeDecimal(t, "PrismComponent", "amount", element.getAmountElement(), -1);
25840    }
25841    if (element.hasBaseElement()) {
25842      composeEnum(t, "PrismComponent", "base", element.getBaseElement(), -1);
25843    }
25844  }
25845
25846
25847
25848
25849  @Override
25850  protected void composeResource(Complex parent, Resource resource) {
25851    if (parent == null) {
25852      throw new Error("parent == null");
25853    } else if (resource == null) {
25854      throw new Error("resource == null");
25855    } else if (resource instanceof Account) {
25856      composeAccount(parent, null, "Account", (Account)resource, -1);
25857    } else if (resource instanceof ActivityDefinition) {
25858      composeActivityDefinition(parent, null, "ActivityDefinition", (ActivityDefinition)resource, -1);
25859    } else if (resource instanceof AdministrableProductDefinition) {
25860      composeAdministrableProductDefinition(parent, null, "AdministrableProductDefinition", (AdministrableProductDefinition)resource, -1);
25861    } else if (resource instanceof AdverseEvent) {
25862      composeAdverseEvent(parent, null, "AdverseEvent", (AdverseEvent)resource, -1);
25863    } else if (resource instanceof AllergyIntolerance) {
25864      composeAllergyIntolerance(parent, null, "AllergyIntolerance", (AllergyIntolerance)resource, -1);
25865    } else if (resource instanceof Appointment) {
25866      composeAppointment(parent, null, "Appointment", (Appointment)resource, -1);
25867    } else if (resource instanceof AppointmentResponse) {
25868      composeAppointmentResponse(parent, null, "AppointmentResponse", (AppointmentResponse)resource, -1);
25869    } else if (resource instanceof ArtifactAssessment) {
25870      composeArtifactAssessment(parent, null, "ArtifactAssessment", (ArtifactAssessment)resource, -1);
25871    } else if (resource instanceof AuditEvent) {
25872      composeAuditEvent(parent, null, "AuditEvent", (AuditEvent)resource, -1);
25873    } else if (resource instanceof Basic) {
25874      composeBasic(parent, null, "Basic", (Basic)resource, -1);
25875    } else if (resource instanceof Binary) {
25876      composeBinary(parent, null, "Binary", (Binary)resource, -1);
25877    } else if (resource instanceof BiologicallyDerivedProduct) {
25878      composeBiologicallyDerivedProduct(parent, null, "BiologicallyDerivedProduct", (BiologicallyDerivedProduct)resource, -1);
25879    } else if (resource instanceof BodyStructure) {
25880      composeBodyStructure(parent, null, "BodyStructure", (BodyStructure)resource, -1);
25881    } else if (resource instanceof Bundle) {
25882      composeBundle(parent, null, "Bundle", (Bundle)resource, -1);
25883    } else if (resource instanceof CapabilityStatement) {
25884      composeCapabilityStatement(parent, null, "CapabilityStatement", (CapabilityStatement)resource, -1);
25885    } else if (resource instanceof CapabilityStatement2) {
25886      composeCapabilityStatement2(parent, null, "CapabilityStatement2", (CapabilityStatement2)resource, -1);
25887    } else if (resource instanceof CarePlan) {
25888      composeCarePlan(parent, null, "CarePlan", (CarePlan)resource, -1);
25889    } else if (resource instanceof CareTeam) {
25890      composeCareTeam(parent, null, "CareTeam", (CareTeam)resource, -1);
25891    } else if (resource instanceof ChargeItem) {
25892      composeChargeItem(parent, null, "ChargeItem", (ChargeItem)resource, -1);
25893    } else if (resource instanceof ChargeItemDefinition) {
25894      composeChargeItemDefinition(parent, null, "ChargeItemDefinition", (ChargeItemDefinition)resource, -1);
25895    } else if (resource instanceof Citation) {
25896      composeCitation(parent, null, "Citation", (Citation)resource, -1);
25897    } else if (resource instanceof Claim) {
25898      composeClaim(parent, null, "Claim", (Claim)resource, -1);
25899    } else if (resource instanceof ClaimResponse) {
25900      composeClaimResponse(parent, null, "ClaimResponse", (ClaimResponse)resource, -1);
25901    } else if (resource instanceof ClinicalImpression) {
25902      composeClinicalImpression(parent, null, "ClinicalImpression", (ClinicalImpression)resource, -1);
25903    } else if (resource instanceof ClinicalUseDefinition) {
25904      composeClinicalUseDefinition(parent, null, "ClinicalUseDefinition", (ClinicalUseDefinition)resource, -1);
25905    } else if (resource instanceof ClinicalUseIssue) {
25906      composeClinicalUseIssue(parent, null, "ClinicalUseIssue", (ClinicalUseIssue)resource, -1);
25907    } else if (resource instanceof CodeSystem) {
25908      composeCodeSystem(parent, null, "CodeSystem", (CodeSystem)resource, -1);
25909    } else if (resource instanceof Communication) {
25910      composeCommunication(parent, null, "Communication", (Communication)resource, -1);
25911    } else if (resource instanceof CommunicationRequest) {
25912      composeCommunicationRequest(parent, null, "CommunicationRequest", (CommunicationRequest)resource, -1);
25913    } else if (resource instanceof CompartmentDefinition) {
25914      composeCompartmentDefinition(parent, null, "CompartmentDefinition", (CompartmentDefinition)resource, -1);
25915    } else if (resource instanceof Composition) {
25916      composeComposition(parent, null, "Composition", (Composition)resource, -1);
25917    } else if (resource instanceof ConceptMap) {
25918      composeConceptMap(parent, null, "ConceptMap", (ConceptMap)resource, -1);
25919    } else if (resource instanceof ConceptMap2) {
25920      composeConceptMap2(parent, null, "ConceptMap2", (ConceptMap2)resource, -1);
25921    } else if (resource instanceof Condition) {
25922      composeCondition(parent, null, "Condition", (Condition)resource, -1);
25923    } else if (resource instanceof ConditionDefinition) {
25924      composeConditionDefinition(parent, null, "ConditionDefinition", (ConditionDefinition)resource, -1);
25925    } else if (resource instanceof Consent) {
25926      composeConsent(parent, null, "Consent", (Consent)resource, -1);
25927    } else if (resource instanceof Contract) {
25928      composeContract(parent, null, "Contract", (Contract)resource, -1);
25929    } else if (resource instanceof Coverage) {
25930      composeCoverage(parent, null, "Coverage", (Coverage)resource, -1);
25931    } else if (resource instanceof CoverageEligibilityRequest) {
25932      composeCoverageEligibilityRequest(parent, null, "CoverageEligibilityRequest", (CoverageEligibilityRequest)resource, -1);
25933    } else if (resource instanceof CoverageEligibilityResponse) {
25934      composeCoverageEligibilityResponse(parent, null, "CoverageEligibilityResponse", (CoverageEligibilityResponse)resource, -1);
25935    } else if (resource instanceof DetectedIssue) {
25936      composeDetectedIssue(parent, null, "DetectedIssue", (DetectedIssue)resource, -1);
25937    } else if (resource instanceof Device) {
25938      composeDevice(parent, null, "Device", (Device)resource, -1);
25939    } else if (resource instanceof DeviceDefinition) {
25940      composeDeviceDefinition(parent, null, "DeviceDefinition", (DeviceDefinition)resource, -1);
25941    } else if (resource instanceof DeviceDispense) {
25942      composeDeviceDispense(parent, null, "DeviceDispense", (DeviceDispense)resource, -1);
25943    } else if (resource instanceof DeviceMetric) {
25944      composeDeviceMetric(parent, null, "DeviceMetric", (DeviceMetric)resource, -1);
25945    } else if (resource instanceof DeviceRequest) {
25946      composeDeviceRequest(parent, null, "DeviceRequest", (DeviceRequest)resource, -1);
25947    } else if (resource instanceof DeviceUsage) {
25948      composeDeviceUsage(parent, null, "DeviceUsage", (DeviceUsage)resource, -1);
25949    } else if (resource instanceof DiagnosticReport) {
25950      composeDiagnosticReport(parent, null, "DiagnosticReport", (DiagnosticReport)resource, -1);
25951    } else if (resource instanceof DocumentManifest) {
25952      composeDocumentManifest(parent, null, "DocumentManifest", (DocumentManifest)resource, -1);
25953    } else if (resource instanceof DocumentReference) {
25954      composeDocumentReference(parent, null, "DocumentReference", (DocumentReference)resource, -1);
25955    } else if (resource instanceof Encounter) {
25956      composeEncounter(parent, null, "Encounter", (Encounter)resource, -1);
25957    } else if (resource instanceof Endpoint) {
25958      composeEndpoint(parent, null, "Endpoint", (Endpoint)resource, -1);
25959    } else if (resource instanceof EnrollmentRequest) {
25960      composeEnrollmentRequest(parent, null, "EnrollmentRequest", (EnrollmentRequest)resource, -1);
25961    } else if (resource instanceof EnrollmentResponse) {
25962      composeEnrollmentResponse(parent, null, "EnrollmentResponse", (EnrollmentResponse)resource, -1);
25963    } else if (resource instanceof EpisodeOfCare) {
25964      composeEpisodeOfCare(parent, null, "EpisodeOfCare", (EpisodeOfCare)resource, -1);
25965    } else if (resource instanceof EventDefinition) {
25966      composeEventDefinition(parent, null, "EventDefinition", (EventDefinition)resource, -1);
25967    } else if (resource instanceof Evidence) {
25968      composeEvidence(parent, null, "Evidence", (Evidence)resource, -1);
25969    } else if (resource instanceof EvidenceReport) {
25970      composeEvidenceReport(parent, null, "EvidenceReport", (EvidenceReport)resource, -1);
25971    } else if (resource instanceof EvidenceVariable) {
25972      composeEvidenceVariable(parent, null, "EvidenceVariable", (EvidenceVariable)resource, -1);
25973    } else if (resource instanceof ExampleScenario) {
25974      composeExampleScenario(parent, null, "ExampleScenario", (ExampleScenario)resource, -1);
25975    } else if (resource instanceof ExplanationOfBenefit) {
25976      composeExplanationOfBenefit(parent, null, "ExplanationOfBenefit", (ExplanationOfBenefit)resource, -1);
25977    } else if (resource instanceof FamilyMemberHistory) {
25978      composeFamilyMemberHistory(parent, null, "FamilyMemberHistory", (FamilyMemberHistory)resource, -1);
25979    } else if (resource instanceof Flag) {
25980      composeFlag(parent, null, "Flag", (Flag)resource, -1);
25981    } else if (resource instanceof Goal) {
25982      composeGoal(parent, null, "Goal", (Goal)resource, -1);
25983    } else if (resource instanceof GraphDefinition) {
25984      composeGraphDefinition(parent, null, "GraphDefinition", (GraphDefinition)resource, -1);
25985    } else if (resource instanceof Group) {
25986      composeGroup(parent, null, "Group", (Group)resource, -1);
25987    } else if (resource instanceof GuidanceResponse) {
25988      composeGuidanceResponse(parent, null, "GuidanceResponse", (GuidanceResponse)resource, -1);
25989    } else if (resource instanceof HealthcareService) {
25990      composeHealthcareService(parent, null, "HealthcareService", (HealthcareService)resource, -1);
25991    } else if (resource instanceof ImagingSelection) {
25992      composeImagingSelection(parent, null, "ImagingSelection", (ImagingSelection)resource, -1);
25993    } else if (resource instanceof ImagingStudy) {
25994      composeImagingStudy(parent, null, "ImagingStudy", (ImagingStudy)resource, -1);
25995    } else if (resource instanceof Immunization) {
25996      composeImmunization(parent, null, "Immunization", (Immunization)resource, -1);
25997    } else if (resource instanceof ImmunizationEvaluation) {
25998      composeImmunizationEvaluation(parent, null, "ImmunizationEvaluation", (ImmunizationEvaluation)resource, -1);
25999    } else if (resource instanceof ImmunizationRecommendation) {
26000      composeImmunizationRecommendation(parent, null, "ImmunizationRecommendation", (ImmunizationRecommendation)resource, -1);
26001    } else if (resource instanceof ImplementationGuide) {
26002      composeImplementationGuide(parent, null, "ImplementationGuide", (ImplementationGuide)resource, -1);
26003    } else if (resource instanceof Ingredient) {
26004      composeIngredient(parent, null, "Ingredient", (Ingredient)resource, -1);
26005    } else if (resource instanceof InsurancePlan) {
26006      composeInsurancePlan(parent, null, "InsurancePlan", (InsurancePlan)resource, -1);
26007    } else if (resource instanceof InventoryReport) {
26008      composeInventoryReport(parent, null, "InventoryReport", (InventoryReport)resource, -1);
26009    } else if (resource instanceof Invoice) {
26010      composeInvoice(parent, null, "Invoice", (Invoice)resource, -1);
26011    } else if (resource instanceof Library) {
26012      composeLibrary(parent, null, "Library", (Library)resource, -1);
26013    } else if (resource instanceof Linkage) {
26014      composeLinkage(parent, null, "Linkage", (Linkage)resource, -1);
26015    } else if (resource instanceof ListResource) {
26016      composeListResource(parent, null, "List", (ListResource)resource, -1);
26017    } else if (resource instanceof Location) {
26018      composeLocation(parent, null, "Location", (Location)resource, -1);
26019    } else if (resource instanceof ManufacturedItemDefinition) {
26020      composeManufacturedItemDefinition(parent, null, "ManufacturedItemDefinition", (ManufacturedItemDefinition)resource, -1);
26021    } else if (resource instanceof Measure) {
26022      composeMeasure(parent, null, "Measure", (Measure)resource, -1);
26023    } else if (resource instanceof MeasureReport) {
26024      composeMeasureReport(parent, null, "MeasureReport", (MeasureReport)resource, -1);
26025    } else if (resource instanceof Medication) {
26026      composeMedication(parent, null, "Medication", (Medication)resource, -1);
26027    } else if (resource instanceof MedicationAdministration) {
26028      composeMedicationAdministration(parent, null, "MedicationAdministration", (MedicationAdministration)resource, -1);
26029    } else if (resource instanceof MedicationDispense) {
26030      composeMedicationDispense(parent, null, "MedicationDispense", (MedicationDispense)resource, -1);
26031    } else if (resource instanceof MedicationKnowledge) {
26032      composeMedicationKnowledge(parent, null, "MedicationKnowledge", (MedicationKnowledge)resource, -1);
26033    } else if (resource instanceof MedicationRequest) {
26034      composeMedicationRequest(parent, null, "MedicationRequest", (MedicationRequest)resource, -1);
26035    } else if (resource instanceof MedicationUsage) {
26036      composeMedicationUsage(parent, null, "MedicationUsage", (MedicationUsage)resource, -1);
26037    } else if (resource instanceof MedicinalProductDefinition) {
26038      composeMedicinalProductDefinition(parent, null, "MedicinalProductDefinition", (MedicinalProductDefinition)resource, -1);
26039    } else if (resource instanceof MessageDefinition) {
26040      composeMessageDefinition(parent, null, "MessageDefinition", (MessageDefinition)resource, -1);
26041    } else if (resource instanceof MessageHeader) {
26042      composeMessageHeader(parent, null, "MessageHeader", (MessageHeader)resource, -1);
26043    } else if (resource instanceof MolecularSequence) {
26044      composeMolecularSequence(parent, null, "MolecularSequence", (MolecularSequence)resource, -1);
26045    } else if (resource instanceof NamingSystem) {
26046      composeNamingSystem(parent, null, "NamingSystem", (NamingSystem)resource, -1);
26047    } else if (resource instanceof NutritionIntake) {
26048      composeNutritionIntake(parent, null, "NutritionIntake", (NutritionIntake)resource, -1);
26049    } else if (resource instanceof NutritionOrder) {
26050      composeNutritionOrder(parent, null, "NutritionOrder", (NutritionOrder)resource, -1);
26051    } else if (resource instanceof NutritionProduct) {
26052      composeNutritionProduct(parent, null, "NutritionProduct", (NutritionProduct)resource, -1);
26053    } else if (resource instanceof Observation) {
26054      composeObservation(parent, null, "Observation", (Observation)resource, -1);
26055    } else if (resource instanceof ObservationDefinition) {
26056      composeObservationDefinition(parent, null, "ObservationDefinition", (ObservationDefinition)resource, -1);
26057    } else if (resource instanceof OperationDefinition) {
26058      composeOperationDefinition(parent, null, "OperationDefinition", (OperationDefinition)resource, -1);
26059    } else if (resource instanceof OperationOutcome) {
26060      composeOperationOutcome(parent, null, "OperationOutcome", (OperationOutcome)resource, -1);
26061    } else if (resource instanceof Organization) {
26062      composeOrganization(parent, null, "Organization", (Organization)resource, -1);
26063    } else if (resource instanceof OrganizationAffiliation) {
26064      composeOrganizationAffiliation(parent, null, "OrganizationAffiliation", (OrganizationAffiliation)resource, -1);
26065    } else if (resource instanceof PackagedProductDefinition) {
26066      composePackagedProductDefinition(parent, null, "PackagedProductDefinition", (PackagedProductDefinition)resource, -1);
26067    } else if (resource instanceof Parameters) {
26068      composeParameters(parent, null, "Parameters", (Parameters)resource, -1);
26069    } else if (resource instanceof Patient) {
26070      composePatient(parent, null, "Patient", (Patient)resource, -1);
26071    } else if (resource instanceof PaymentNotice) {
26072      composePaymentNotice(parent, null, "PaymentNotice", (PaymentNotice)resource, -1);
26073    } else if (resource instanceof PaymentReconciliation) {
26074      composePaymentReconciliation(parent, null, "PaymentReconciliation", (PaymentReconciliation)resource, -1);
26075    } else if (resource instanceof Permission) {
26076      composePermission(parent, null, "Permission", (Permission)resource, -1);
26077    } else if (resource instanceof Person) {
26078      composePerson(parent, null, "Person", (Person)resource, -1);
26079    } else if (resource instanceof PlanDefinition) {
26080      composePlanDefinition(parent, null, "PlanDefinition", (PlanDefinition)resource, -1);
26081    } else if (resource instanceof Practitioner) {
26082      composePractitioner(parent, null, "Practitioner", (Practitioner)resource, -1);
26083    } else if (resource instanceof PractitionerRole) {
26084      composePractitionerRole(parent, null, "PractitionerRole", (PractitionerRole)resource, -1);
26085    } else if (resource instanceof Procedure) {
26086      composeProcedure(parent, null, "Procedure", (Procedure)resource, -1);
26087    } else if (resource instanceof Provenance) {
26088      composeProvenance(parent, null, "Provenance", (Provenance)resource, -1);
26089    } else if (resource instanceof Questionnaire) {
26090      composeQuestionnaire(parent, null, "Questionnaire", (Questionnaire)resource, -1);
26091    } else if (resource instanceof QuestionnaireResponse) {
26092      composeQuestionnaireResponse(parent, null, "QuestionnaireResponse", (QuestionnaireResponse)resource, -1);
26093    } else if (resource instanceof RegulatedAuthorization) {
26094      composeRegulatedAuthorization(parent, null, "RegulatedAuthorization", (RegulatedAuthorization)resource, -1);
26095    } else if (resource instanceof RelatedPerson) {
26096      composeRelatedPerson(parent, null, "RelatedPerson", (RelatedPerson)resource, -1);
26097    } else if (resource instanceof RequestGroup) {
26098      composeRequestGroup(parent, null, "RequestGroup", (RequestGroup)resource, -1);
26099    } else if (resource instanceof ResearchStudy) {
26100      composeResearchStudy(parent, null, "ResearchStudy", (ResearchStudy)resource, -1);
26101    } else if (resource instanceof ResearchSubject) {
26102      composeResearchSubject(parent, null, "ResearchSubject", (ResearchSubject)resource, -1);
26103    } else if (resource instanceof RiskAssessment) {
26104      composeRiskAssessment(parent, null, "RiskAssessment", (RiskAssessment)resource, -1);
26105    } else if (resource instanceof Schedule) {
26106      composeSchedule(parent, null, "Schedule", (Schedule)resource, -1);
26107    } else if (resource instanceof SearchParameter) {
26108      composeSearchParameter(parent, null, "SearchParameter", (SearchParameter)resource, -1);
26109    } else if (resource instanceof ServiceRequest) {
26110      composeServiceRequest(parent, null, "ServiceRequest", (ServiceRequest)resource, -1);
26111    } else if (resource instanceof Slot) {
26112      composeSlot(parent, null, "Slot", (Slot)resource, -1);
26113    } else if (resource instanceof Specimen) {
26114      composeSpecimen(parent, null, "Specimen", (Specimen)resource, -1);
26115    } else if (resource instanceof SpecimenDefinition) {
26116      composeSpecimenDefinition(parent, null, "SpecimenDefinition", (SpecimenDefinition)resource, -1);
26117    } else if (resource instanceof StructureDefinition) {
26118      composeStructureDefinition(parent, null, "StructureDefinition", (StructureDefinition)resource, -1);
26119    } else if (resource instanceof StructureMap) {
26120      composeStructureMap(parent, null, "StructureMap", (StructureMap)resource, -1);
26121    } else if (resource instanceof Subscription) {
26122      composeSubscription(parent, null, "Subscription", (Subscription)resource, -1);
26123    } else if (resource instanceof SubscriptionStatus) {
26124      composeSubscriptionStatus(parent, null, "SubscriptionStatus", (SubscriptionStatus)resource, -1);
26125    } else if (resource instanceof SubscriptionTopic) {
26126      composeSubscriptionTopic(parent, null, "SubscriptionTopic", (SubscriptionTopic)resource, -1);
26127    } else if (resource instanceof Substance) {
26128      composeSubstance(parent, null, "Substance", (Substance)resource, -1);
26129    } else if (resource instanceof SubstanceDefinition) {
26130      composeSubstanceDefinition(parent, null, "SubstanceDefinition", (SubstanceDefinition)resource, -1);
26131    } else if (resource instanceof SubstanceNucleicAcid) {
26132      composeSubstanceNucleicAcid(parent, null, "SubstanceNucleicAcid", (SubstanceNucleicAcid)resource, -1);
26133    } else if (resource instanceof SubstancePolymer) {
26134      composeSubstancePolymer(parent, null, "SubstancePolymer", (SubstancePolymer)resource, -1);
26135    } else if (resource instanceof SubstanceProtein) {
26136      composeSubstanceProtein(parent, null, "SubstanceProtein", (SubstanceProtein)resource, -1);
26137    } else if (resource instanceof SubstanceReferenceInformation) {
26138      composeSubstanceReferenceInformation(parent, null, "SubstanceReferenceInformation", (SubstanceReferenceInformation)resource, -1);
26139    } else if (resource instanceof SubstanceSourceMaterial) {
26140      composeSubstanceSourceMaterial(parent, null, "SubstanceSourceMaterial", (SubstanceSourceMaterial)resource, -1);
26141    } else if (resource instanceof SupplyDelivery) {
26142      composeSupplyDelivery(parent, null, "SupplyDelivery", (SupplyDelivery)resource, -1);
26143    } else if (resource instanceof SupplyRequest) {
26144      composeSupplyRequest(parent, null, "SupplyRequest", (SupplyRequest)resource, -1);
26145    } else if (resource instanceof Task) {
26146      composeTask(parent, null, "Task", (Task)resource, -1);
26147    } else if (resource instanceof TerminologyCapabilities) {
26148      composeTerminologyCapabilities(parent, null, "TerminologyCapabilities", (TerminologyCapabilities)resource, -1);
26149    } else if (resource instanceof TestReport) {
26150      composeTestReport(parent, null, "TestReport", (TestReport)resource, -1);
26151    } else if (resource instanceof TestScript) {
26152      composeTestScript(parent, null, "TestScript", (TestScript)resource, -1);
26153    } else if (resource instanceof ValueSet) {
26154      composeValueSet(parent, null, "ValueSet", (ValueSet)resource, -1);
26155    } else if (resource instanceof VerificationResult) {
26156      composeVerificationResult(parent, null, "VerificationResult", (VerificationResult)resource, -1);
26157    } else if (resource instanceof VisionPrescription) {
26158      composeVisionPrescription(parent, null, "VisionPrescription", (VisionPrescription)resource, -1);
26159      
26160    } else {
26161      throw new Error("Unhandled resource type "+resource.getClass().getName());
26162    }
26163  }
26164
26165  protected void composeType(Complex parent, String parentType, String name, DataType value, int index) {
26166    if (parent == null) {
26167      throw new Error("parent == null");
26168    } else if (parentType == null) {
26169      throw new Error("parentType == null");
26170    } else if (name == null) {
26171      throw new Error("name == null");
26172    } else if (value == null) {
26173      throw new Error("value == null");
26174    } else if (value instanceof DateType) {
26175      composeDate(parent, parentType, name, (DateType)value, index);
26176    } else if (value instanceof DateTimeType) {
26177      composeDateTime(parent, parentType, name, (DateTimeType)value, index);
26178    } else if (value instanceof CodeType) {
26179      composeCode(parent, parentType, name, (CodeType)value, index);
26180    } else if (value instanceof StringType) {
26181      composeString(parent, parentType, name, (StringType)value, index);
26182    } else if (value instanceof IntegerType) {
26183      composeInteger(parent, parentType, name, (IntegerType)value, index);
26184    } else if (value instanceof Integer64Type) {
26185      composeInteger64(parent, parentType, name, (Integer64Type)value, index);
26186    } else if (value instanceof OidType) {
26187      composeOid(parent, parentType, name, (OidType)value, index);
26188    } else if (value instanceof CanonicalType) {
26189      composeCanonical(parent, parentType, name, (CanonicalType)value, index);
26190    } else if (value instanceof UriType) {
26191      composeUri(parent, parentType, name, (UriType)value, index);
26192    } else if (value instanceof UuidType) {
26193      composeUuid(parent, parentType, name, (UuidType)value, index);
26194    } else if (value instanceof UrlType) {
26195      composeUrl(parent, parentType, name, (UrlType)value, index);
26196    } else if (value instanceof InstantType) {
26197      composeInstant(parent, parentType, name, (InstantType)value, index);
26198    } else if (value instanceof BooleanType) {
26199      composeBoolean(parent, parentType, name, (BooleanType)value, index);
26200    } else if (value instanceof Base64BinaryType) {
26201      composeBase64Binary(parent, parentType, name, (Base64BinaryType)value, index);
26202    } else if (value instanceof UnsignedIntType) {
26203      composeUnsignedInt(parent, parentType, name, (UnsignedIntType)value, index);
26204    } else if (value instanceof MarkdownType) {
26205      composeMarkdown(parent, parentType, name, (MarkdownType)value, index);
26206    } else if (value instanceof TimeType) {
26207      composeTime(parent, parentType, name, (TimeType)value, index);
26208    } else if (value instanceof IdType) {
26209      composeId(parent, parentType, name, (IdType)value, index);
26210    } else if (value instanceof PositiveIntType) {
26211      composePositiveInt(parent, parentType, name, (PositiveIntType)value, index);
26212    } else if (value instanceof DecimalType) {
26213      composeDecimal(parent, parentType, name, (DecimalType)value, index);
26214    } else if (value instanceof Address) {
26215      composeAddress(parent, parentType, name, (Address)value, index);
26216    } else if (value instanceof Age) {
26217      composeAge(parent, parentType, name, (Age)value, index);
26218    } else if (value instanceof Annotation) {
26219      composeAnnotation(parent, parentType, name, (Annotation)value, index);
26220    } else if (value instanceof Attachment) {
26221      composeAttachment(parent, parentType, name, (Attachment)value, index);
26222    } else if (value instanceof CodeableConcept) {
26223      composeCodeableConcept(parent, parentType, name, (CodeableConcept)value, index);
26224    } else if (value instanceof CodeableReference) {
26225      composeCodeableReference(parent, parentType, name, (CodeableReference)value, index);
26226    } else if (value instanceof Coding) {
26227      composeCoding(parent, parentType, name, (Coding)value, index);
26228    } else if (value instanceof ContactDetail) {
26229      composeContactDetail(parent, parentType, name, (ContactDetail)value, index);
26230    } else if (value instanceof ContactPoint) {
26231      composeContactPoint(parent, parentType, name, (ContactPoint)value, index);
26232    } else if (value instanceof Contributor) {
26233      composeContributor(parent, parentType, name, (Contributor)value, index);
26234    } else if (value instanceof Count) {
26235      composeCount(parent, parentType, name, (Count)value, index);
26236    } else if (value instanceof DataRequirement) {
26237      composeDataRequirement(parent, parentType, name, (DataRequirement)value, index);
26238    } else if (value instanceof Distance) {
26239      composeDistance(parent, parentType, name, (Distance)value, index);
26240    } else if (value instanceof Dosage) {
26241      composeDosage(parent, parentType, name, (Dosage)value, index);
26242    } else if (value instanceof Duration) {
26243      composeDuration(parent, parentType, name, (Duration)value, index);
26244    } else if (value instanceof ElementDefinition) {
26245      composeElementDefinition(parent, parentType, name, (ElementDefinition)value, index);
26246    } else if (value instanceof Expression) {
26247      composeExpression(parent, parentType, name, (Expression)value, index);
26248    } else if (value instanceof Extension) {
26249      composeExtension(parent, parentType, name, (Extension)value, index);
26250    } else if (value instanceof HumanName) {
26251      composeHumanName(parent, parentType, name, (HumanName)value, index);
26252    } else if (value instanceof Identifier) {
26253      composeIdentifier(parent, parentType, name, (Identifier)value, index);
26254    } else if (value instanceof MarketingStatus) {
26255      composeMarketingStatus(parent, parentType, name, (MarketingStatus)value, index);
26256    } else if (value instanceof Meta) {
26257      composeMeta(parent, parentType, name, (Meta)value, index);
26258    } else if (value instanceof Money) {
26259      composeMoney(parent, parentType, name, (Money)value, index);
26260    } else if (value instanceof Narrative) {
26261      composeNarrative(parent, parentType, name, (Narrative)value, index);
26262    } else if (value instanceof ParameterDefinition) {
26263      composeParameterDefinition(parent, parentType, name, (ParameterDefinition)value, index);
26264    } else if (value instanceof Period) {
26265      composePeriod(parent, parentType, name, (Period)value, index);
26266    } else if (value instanceof Population) {
26267      composePopulation(parent, parentType, name, (Population)value, index);
26268    } else if (value instanceof ProdCharacteristic) {
26269      composeProdCharacteristic(parent, parentType, name, (ProdCharacteristic)value, index);
26270    } else if (value instanceof ProductShelfLife) {
26271      composeProductShelfLife(parent, parentType, name, (ProductShelfLife)value, index);
26272    } else if (value instanceof Quantity) {
26273      composeQuantity(parent, parentType, name, (Quantity)value, index);
26274    } else if (value instanceof Range) {
26275      composeRange(parent, parentType, name, (Range)value, index);
26276    } else if (value instanceof Ratio) {
26277      composeRatio(parent, parentType, name, (Ratio)value, index);
26278    } else if (value instanceof RatioRange) {
26279      composeRatioRange(parent, parentType, name, (RatioRange)value, index);
26280    } else if (value instanceof Reference) {
26281      composeReference(parent, parentType, name, (Reference)value, index);
26282    } else if (value instanceof RelatedArtifact) {
26283      composeRelatedArtifact(parent, parentType, name, (RelatedArtifact)value, index);
26284    } else if (value instanceof SampledData) {
26285      composeSampledData(parent, parentType, name, (SampledData)value, index);
26286    } else if (value instanceof Signature) {
26287      composeSignature(parent, parentType, name, (Signature)value, index);
26288    } else if (value instanceof Timing) {
26289      composeTiming(parent, parentType, name, (Timing)value, index);
26290    } else if (value instanceof TriggerDefinition) {
26291      composeTriggerDefinition(parent, parentType, name, (TriggerDefinition)value, index);
26292    } else if (value instanceof UsageContext) {
26293      composeUsageContext(parent, parentType, name, (UsageContext)value, index);
26294      
26295    } else {
26296      throw new Error("Unhandled type");
26297    }
26298  }
26299
26300}