001package org.hl7.fhir.r5.tools;
002
003// generated
004
005/*
006  Copyright (c) 2011+, HL7, Inc.
007  All rights reserved.
008  
009  Redistribution and use in source and binary forms, with or without modification, \
010  are permitted provided that the following conditions are met:
011  
012   * Redistributions of source code must retain the above copyright notice, this \
013     list of conditions and the following disclaimer.
014   * Redistributions in binary form must reproduce the above copyright notice, \
015     this list of conditions and the following disclaimer in the documentation \
016     and/or other materials provided with the distribution.
017   * Neither the name of HL7 nor the names of its contributors may be used to 
018     endorse or promote products derived from this software without specific 
019     prior written permission.
020  
021  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND \
022  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED \
023  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \
024  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, \
025  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT \
026  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR \
027  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, \
028  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \
029  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \
030  POSSIBILITY OF SUCH DAMAGE.
031  */
032
033// Generated on Thu, Mar 23, 2023 19:59+1100 for FHIR v5.0.0
034
035
036
037import org.hl7.fhir.r5.model.*;
038import org.hl7.fhir.r5.formats.*;
039import org.xmlpull.v1.*;
040import org.hl7.fhir.utilities.xml.IXMLWriter;
041import org.hl7.fhir.utilities.Utilities;
042import org.hl7.fhir.exceptions.FHIRFormatError;
043import org.hl7.fhir.exceptions.FHIRException;
044import java.io.IOException;
045import java.util.Enumeration;
046
047public class ToolsXmlParser extends org.hl7.fhir.r5.formats.XmlParser {
048
049  public ToolsXmlParser(boolean allowUnknownContent) {
050    super();
051    setAllowUnknownContent(allowUnknownContent);
052  }
053
054  public ToolsXmlParser(IXMLWriter xml) {
055    super();
056    this.xml = xml;
057  }
058
059  protected boolean parseCDSHookContextContent(int eventType, XmlPullParser xpp, CDSHookContext res) throws XmlPullParserException, IOException, FHIRFormatError {
060    if (!parseBaseContent(eventType, xpp, res)) { //3 
061        return false;
062    }
063    return true;
064  }
065
066  protected boolean parseCDSHooksElementContent(int eventType, XmlPullParser xpp, CDSHooksElement res) throws XmlPullParserException, IOException, FHIRFormatError {
067    if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("extension")) {
068      res.setExtension(parseCDSHooksExtensions(xpp));
069    } else if (!parseBaseContent(eventType, xpp, res)) { //3 
070        return false;
071    }
072    return true;
073  }
074
075  protected CDSHookOrderSelectContext parseCDSHookOrderSelectContext(XmlPullParser xpp) throws XmlPullParserException, IOException, FHIRFormatError {
076    CDSHookOrderSelectContext res = new CDSHookOrderSelectContext();
077    next(xpp);
078    int eventType = nextNoWhitespace(xpp);
079    while (eventType != XmlPullParser.END_TAG) {
080    if (!parseCDSHookOrderSelectContextContent(eventType, xpp, res)) // 1
081        unknownContent(xpp);
082      eventType = nextNoWhitespace(xpp);
083    }
084    next(xpp);
085    parseElementClose(res);
086    return res;
087  }
088
089  protected boolean parseCDSHookOrderSelectContextContent(int eventType, XmlPullParser xpp, CDSHookOrderSelectContext res) throws XmlPullParserException, IOException, FHIRFormatError {
090    if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("userId")) {
091      res.setUserIdElement(parseUrl(xpp));
092    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("patientId")) {
093      res.setPatientIdElement(parseId(xpp));
094    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("encounterId")) {
095      res.setEncounterIdElement(parseId(xpp));
096    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("selections")) {
097      res.getSelectionsList().add(parseUri(xpp));
098    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("draftOrders")) {
099      res.setDraftOrders(parseBundle(xpp));
100    } else if (!parseCDSHookContextContent(eventType, xpp, res)){ //2
101      return false;
102    }
103    return true;
104  }
105
106  protected CDSHookOrderSignContext parseCDSHookOrderSignContext(XmlPullParser xpp) throws XmlPullParserException, IOException, FHIRFormatError {
107    CDSHookOrderSignContext res = new CDSHookOrderSignContext();
108    next(xpp);
109    int eventType = nextNoWhitespace(xpp);
110    while (eventType != XmlPullParser.END_TAG) {
111    if (!parseCDSHookOrderSignContextContent(eventType, xpp, res)) // 1
112        unknownContent(xpp);
113      eventType = nextNoWhitespace(xpp);
114    }
115    next(xpp);
116    parseElementClose(res);
117    return res;
118  }
119
120  protected boolean parseCDSHookOrderSignContextContent(int eventType, XmlPullParser xpp, CDSHookOrderSignContext res) throws XmlPullParserException, IOException, FHIRFormatError {
121    if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("userId")) {
122      res.setUserIdElement(parseUrl(xpp));
123    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("patientId")) {
124      res.setPatientIdElement(parseId(xpp));
125    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("encounterId")) {
126      res.setEncounterIdElement(parseId(xpp));
127    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("draftOrders")) {
128      res.setDraftOrders(parseBundle(xpp));
129    } else if (!parseCDSHookContextContent(eventType, xpp, res)){ //2
130      return false;
131    }
132    return true;
133  }
134
135  protected CDSHookPatientViewContext parseCDSHookPatientViewContext(XmlPullParser xpp) throws XmlPullParserException, IOException, FHIRFormatError {
136    CDSHookPatientViewContext res = new CDSHookPatientViewContext();
137    next(xpp);
138    int eventType = nextNoWhitespace(xpp);
139    while (eventType != XmlPullParser.END_TAG) {
140    if (!parseCDSHookPatientViewContextContent(eventType, xpp, res)) // 1
141        unknownContent(xpp);
142      eventType = nextNoWhitespace(xpp);
143    }
144    next(xpp);
145    parseElementClose(res);
146    return res;
147  }
148
149  protected boolean parseCDSHookPatientViewContextContent(int eventType, XmlPullParser xpp, CDSHookPatientViewContext res) throws XmlPullParserException, IOException, FHIRFormatError {
150    if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("userId")) {
151      res.setUserIdElement(parseUrl(xpp));
152    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("patientId")) {
153      res.setPatientIdElement(parseId(xpp));
154    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("encounterId")) {
155      res.setEncounterIdElement(parseId(xpp));
156    } else if (!parseCDSHookContextContent(eventType, xpp, res)){ //2
157      return false;
158    }
159    return true;
160  }
161
162  protected CDSHooksExtensions parseCDSHooksExtensions(XmlPullParser xpp) throws XmlPullParserException, IOException, FHIRFormatError {
163    CDSHooksExtensions res = new CDSHooksExtensions();
164    next(xpp);
165    int eventType = nextNoWhitespace(xpp);
166    while (eventType != XmlPullParser.END_TAG) {
167    if (!parseCDSHooksExtensionsContent(eventType, xpp, res)) // 1
168        unknownContent(xpp);
169      eventType = nextNoWhitespace(xpp);
170    }
171    next(xpp);
172    parseElementClose(res);
173    return res;
174  }
175
176  protected boolean parseCDSHooksExtensionsContent(int eventType, XmlPullParser xpp, CDSHooksExtensions res) throws XmlPullParserException, IOException, FHIRFormatError {
177    if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("extension")) {
178    // todo: Named Element Extensions
179    } else if (!parseBaseContent(eventType, xpp, res)){ //2
180      return false;
181    }
182    return true;
183  }
184
185    // todo: Named Element Extensions
186  protected CDSHooksRequest parseCDSHooksRequest(XmlPullParser xpp) throws XmlPullParserException, IOException, FHIRFormatError {
187    CDSHooksRequest res = new CDSHooksRequest();
188    next(xpp);
189    int eventType = nextNoWhitespace(xpp);
190    while (eventType != XmlPullParser.END_TAG) {
191    if (!parseCDSHooksRequestContent(eventType, xpp, res)) // 1
192        unknownContent(xpp);
193      eventType = nextNoWhitespace(xpp);
194    }
195    next(xpp);
196    parseElementClose(res);
197    return res;
198  }
199
200  protected boolean parseCDSHooksRequestContent(int eventType, XmlPullParser xpp, CDSHooksRequest res) throws XmlPullParserException, IOException, FHIRFormatError {
201    if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("hook")) {
202      res.setHookElement(parseCode(xpp));
203    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("hookInstance")) {
204      res.setHookInstanceElement(parseUuid(xpp));
205    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("fhirServer")) {
206      res.setFhirServerElement(parseUrl(xpp));
207    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("fhirAuthorization")) {
208      res.setFhirAuthorization(parseCDSHooksRequestFhirAuthorizationComponent(xpp));
209    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("context")) {
210      res.setContext(parseCDSHookContext(xpp));
211    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("prefetch")) {
212      res.getPrefetchList().add(parseCDSHooksRequestPrefetchComponent(xpp));
213    } else if (!parseCDSHooksElementContent(eventType, xpp, res)){ //2
214      return false;
215    }
216    return true;
217  }
218
219  protected CDSHookContext parseCDSHookContext(XmlPullParser xpp) throws XmlPullParserException, IOException, FHIRFormatError {
220    String xsiType = xpp.getAttributeValue("xsi", "type");
221    if ("CDSHookPatientViewContext".equals(xsiType)) {
222      return parseCDSHookPatientViewContext(xpp);
223    }
224    if ("CDSHookOrderSignContext".equals(xsiType)) {
225      return parseCDSHookOrderSignContext(xpp);
226    }
227    if ("CDSHookOrderSelectContext".equals(xsiType)) {
228      return parseCDSHookOrderSelectContext(xpp);
229    }
230    throw new FHIRFormatError("Unable to parse CDSHookContext: xsi:type '"+xsiType+"' not known");
231  }
232
233  protected CDSHooksRequest.CDSHooksRequestFhirAuthorizationComponent parseCDSHooksRequestFhirAuthorizationComponent(XmlPullParser xpp) throws XmlPullParserException, IOException, FHIRFormatError {
234    CDSHooksRequest.CDSHooksRequestFhirAuthorizationComponent res = new CDSHooksRequest.CDSHooksRequestFhirAuthorizationComponent();
235    next(xpp);
236    int eventType = nextNoWhitespace(xpp);
237    while (eventType != XmlPullParser.END_TAG) {
238    if (!parseCDSHooksRequestFhirAuthorizationComponentContent(eventType, xpp, res)) // 1
239        unknownContent(xpp);
240      eventType = nextNoWhitespace(xpp);
241    }
242    next(xpp);
243    parseElementClose(res);
244    return res;
245  }
246
247  protected boolean parseCDSHooksRequestFhirAuthorizationComponentContent(int eventType, XmlPullParser xpp, CDSHooksRequest.CDSHooksRequestFhirAuthorizationComponent res) throws XmlPullParserException, IOException, FHIRFormatError {
248    if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("accessToken")) {
249      res.setAccessTokenElement(parseString(xpp));
250    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("tokenType")) {
251      res.setTokenTypeElement(parseCode(xpp));
252    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("expiresIn")) {
253      res.setExpiresInElement(parseInteger(xpp));
254    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("scope")) {
255      res.setScopeElement(parseString(xpp));
256    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("subject")) {
257      res.setSubjectElement(parseString(xpp));
258    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("patient")) {
259      res.setPatientElement(parseId(xpp));
260    } else if (!parseCDSHooksElementContent(eventType, xpp, res)){ //2
261      return false;
262    }
263    return true;
264  }
265
266  protected CDSHooksRequest.CDSHooksRequestPrefetchComponent parseCDSHooksRequestPrefetchComponent(XmlPullParser xpp) throws XmlPullParserException, IOException, FHIRFormatError {
267    CDSHooksRequest.CDSHooksRequestPrefetchComponent res = new CDSHooksRequest.CDSHooksRequestPrefetchComponent();
268    next(xpp);
269    int eventType = nextNoWhitespace(xpp);
270    while (eventType != XmlPullParser.END_TAG) {
271    if (!parseCDSHooksRequestPrefetchComponentContent(eventType, xpp, res)) // 1
272        unknownContent(xpp);
273      eventType = nextNoWhitespace(xpp);
274    }
275    next(xpp);
276    parseElementClose(res);
277    return res;
278  }
279
280  protected boolean parseCDSHooksRequestPrefetchComponentContent(int eventType, XmlPullParser xpp, CDSHooksRequest.CDSHooksRequestPrefetchComponent res) throws XmlPullParserException, IOException, FHIRFormatError {
281    if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("key")) {
282      res.setKeyElement(parseCode(xpp));
283    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("value")) {
284      res.setValue(parseResourceContained(xpp));
285    } else if (!parseBaseContent(eventType, xpp, res)){ //2
286      return false;
287    }
288    return true;
289  }
290
291  protected CDSHooksResponse parseCDSHooksResponse(XmlPullParser xpp) throws XmlPullParserException, IOException, FHIRFormatError {
292    CDSHooksResponse res = new CDSHooksResponse();
293    next(xpp);
294    int eventType = nextNoWhitespace(xpp);
295    while (eventType != XmlPullParser.END_TAG) {
296    if (!parseCDSHooksResponseContent(eventType, xpp, res)) // 1
297        unknownContent(xpp);
298      eventType = nextNoWhitespace(xpp);
299    }
300    next(xpp);
301    parseElementClose(res);
302    return res;
303  }
304
305  protected boolean parseCDSHooksResponseContent(int eventType, XmlPullParser xpp, CDSHooksResponse res) throws XmlPullParserException, IOException, FHIRFormatError {
306    if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("cards")) {
307      res.getCardsList().add(parseCDSHooksResponseCardsComponent(xpp));
308    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("systemActions")) {
309      res.getSystemActionsList().add(parseCDSHooksResponseCardsSuggestionsActionsComponent(xpp));
310    } else if (!parseCDSHooksElementContent(eventType, xpp, res)){ //2
311      return false;
312    }
313    return true;
314  }
315
316  protected CDSHooksResponse.CDSHooksResponseCardsComponent parseCDSHooksResponseCardsComponent(XmlPullParser xpp) throws XmlPullParserException, IOException, FHIRFormatError {
317    CDSHooksResponse.CDSHooksResponseCardsComponent res = new CDSHooksResponse.CDSHooksResponseCardsComponent();
318    next(xpp);
319    int eventType = nextNoWhitespace(xpp);
320    while (eventType != XmlPullParser.END_TAG) {
321    if (!parseCDSHooksResponseCardsComponentContent(eventType, xpp, res)) // 1
322        unknownContent(xpp);
323      eventType = nextNoWhitespace(xpp);
324    }
325    next(xpp);
326    parseElementClose(res);
327    return res;
328  }
329
330  protected boolean parseCDSHooksResponseCardsComponentContent(int eventType, XmlPullParser xpp, CDSHooksResponse.CDSHooksResponseCardsComponent res) throws XmlPullParserException, IOException, FHIRFormatError {
331    if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("uuid")) {
332      res.setUuidElement(parseUuid(xpp));
333    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("summary")) {
334      res.setSummaryElement(parseString(xpp));
335    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("detail")) {
336      res.setDetailElement(parseMarkdown(xpp));
337    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("indicator")) {
338      res.setIndicatorElement(parseEnumeration(xpp, CDSHooksResponse.CDSIndicatorCodesVS.NULL, new CDSHooksResponse.CDSIndicatorCodesVSEnumFactory()));
339    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("source")) {
340      res.setSource(parseCDSHooksResponseCardsSourceComponent(xpp));
341    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("suggestions")) {
342      res.getSuggestionsList().add(parseCDSHooksResponseCardsSuggestionsComponent(xpp));
343    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("selectionBehavior")) {
344      res.setSelectionBehaviorElement(parseEnumeration(xpp, CDSHooksResponse.CDSSelectionBehaviorCodesVS.NULL, new CDSHooksResponse.CDSSelectionBehaviorCodesVSEnumFactory()));
345    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("overrideReasons")) {
346      res.getOverrideReasonsList().add(parseCoding(xpp));
347    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("links")) {
348      res.getLinksList().add(parseCDSHooksResponseCardsLinksComponent(xpp));
349    } else if (!parseCDSHooksElementContent(eventType, xpp, res)){ //2
350      return false;
351    }
352    return true;
353  }
354
355  protected CDSHooksResponse.CDSHooksResponseCardsSourceComponent parseCDSHooksResponseCardsSourceComponent(XmlPullParser xpp) throws XmlPullParserException, IOException, FHIRFormatError {
356    CDSHooksResponse.CDSHooksResponseCardsSourceComponent res = new CDSHooksResponse.CDSHooksResponseCardsSourceComponent();
357    next(xpp);
358    int eventType = nextNoWhitespace(xpp);
359    while (eventType != XmlPullParser.END_TAG) {
360    if (!parseCDSHooksResponseCardsSourceComponentContent(eventType, xpp, res)) // 1
361        unknownContent(xpp);
362      eventType = nextNoWhitespace(xpp);
363    }
364    next(xpp);
365    parseElementClose(res);
366    return res;
367  }
368
369  protected boolean parseCDSHooksResponseCardsSourceComponentContent(int eventType, XmlPullParser xpp, CDSHooksResponse.CDSHooksResponseCardsSourceComponent res) throws XmlPullParserException, IOException, FHIRFormatError {
370    if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("label")) {
371      res.setLabelElement(parseString(xpp));
372    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("url")) {
373      res.setUrlElement(parseUrl(xpp));
374    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("icon")) {
375      res.setIconElement(parseUrl(xpp));
376    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("topic")) {
377      res.setTopic(parseCoding(xpp));
378    } else if (!parseCDSHooksElementContent(eventType, xpp, res)){ //2
379      return false;
380    }
381    return true;
382  }
383
384  protected CDSHooksResponse.CDSHooksResponseCardsSuggestionsComponent parseCDSHooksResponseCardsSuggestionsComponent(XmlPullParser xpp) throws XmlPullParserException, IOException, FHIRFormatError {
385    CDSHooksResponse.CDSHooksResponseCardsSuggestionsComponent res = new CDSHooksResponse.CDSHooksResponseCardsSuggestionsComponent();
386    next(xpp);
387    int eventType = nextNoWhitespace(xpp);
388    while (eventType != XmlPullParser.END_TAG) {
389    if (!parseCDSHooksResponseCardsSuggestionsComponentContent(eventType, xpp, res)) // 1
390        unknownContent(xpp);
391      eventType = nextNoWhitespace(xpp);
392    }
393    next(xpp);
394    parseElementClose(res);
395    return res;
396  }
397
398  protected boolean parseCDSHooksResponseCardsSuggestionsComponentContent(int eventType, XmlPullParser xpp, CDSHooksResponse.CDSHooksResponseCardsSuggestionsComponent res) throws XmlPullParserException, IOException, FHIRFormatError {
399    if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("label")) {
400      res.setLabelElement(parseString(xpp));
401    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("uuid")) {
402      res.setUuidElement(parseUuid(xpp));
403    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("isRecommended")) {
404      res.setIsRecommendedElement(parseBoolean(xpp));
405    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("actions")) {
406      res.getActionsList().add(parseCDSHooksResponseCardsSuggestionsActionsComponent(xpp));
407    } else if (!parseCDSHooksElementContent(eventType, xpp, res)){ //2
408      return false;
409    }
410    return true;
411  }
412
413  protected CDSHooksResponse.CDSHooksResponseCardsSuggestionsActionsComponent parseCDSHooksResponseCardsSuggestionsActionsComponent(XmlPullParser xpp) throws XmlPullParserException, IOException, FHIRFormatError {
414    CDSHooksResponse.CDSHooksResponseCardsSuggestionsActionsComponent res = new CDSHooksResponse.CDSHooksResponseCardsSuggestionsActionsComponent();
415    next(xpp);
416    int eventType = nextNoWhitespace(xpp);
417    while (eventType != XmlPullParser.END_TAG) {
418    if (!parseCDSHooksResponseCardsSuggestionsActionsComponentContent(eventType, xpp, res)) // 1
419        unknownContent(xpp);
420      eventType = nextNoWhitespace(xpp);
421    }
422    next(xpp);
423    parseElementClose(res);
424    return res;
425  }
426
427  protected boolean parseCDSHooksResponseCardsSuggestionsActionsComponentContent(int eventType, XmlPullParser xpp, CDSHooksResponse.CDSHooksResponseCardsSuggestionsActionsComponent res) throws XmlPullParserException, IOException, FHIRFormatError {
428    if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("type")) {
429      res.setTypeElement(parseEnumeration(xpp, CDSHooksResponse.CDSActionTypeCodesVS.NULL, new CDSHooksResponse.CDSActionTypeCodesVSEnumFactory()));
430    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("description")) {
431      res.setDescriptionElement(parseString(xpp));
432    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("resource")) {
433      res.setResource(parseResourceContained(xpp));
434    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("resourceId")) {
435      res.setResourceIdElement(parseUrl(xpp));
436    } else if (!parseCDSHooksElementContent(eventType, xpp, res)){ //2
437      return false;
438    }
439    return true;
440  }
441
442  protected CDSHooksResponse.CDSHooksResponseCardsLinksComponent parseCDSHooksResponseCardsLinksComponent(XmlPullParser xpp) throws XmlPullParserException, IOException, FHIRFormatError {
443    CDSHooksResponse.CDSHooksResponseCardsLinksComponent res = new CDSHooksResponse.CDSHooksResponseCardsLinksComponent();
444    next(xpp);
445    int eventType = nextNoWhitespace(xpp);
446    while (eventType != XmlPullParser.END_TAG) {
447    if (!parseCDSHooksResponseCardsLinksComponentContent(eventType, xpp, res)) // 1
448        unknownContent(xpp);
449      eventType = nextNoWhitespace(xpp);
450    }
451    next(xpp);
452    parseElementClose(res);
453    return res;
454  }
455
456  protected boolean parseCDSHooksResponseCardsLinksComponentContent(int eventType, XmlPullParser xpp, CDSHooksResponse.CDSHooksResponseCardsLinksComponent res) throws XmlPullParserException, IOException, FHIRFormatError {
457    if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("label")) {
458      res.setLabelElement(parseString(xpp));
459    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("url")) {
460      res.setUrlElement(parseUrl(xpp));
461    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("type")) {
462      res.setTypeElement(parseEnumeration(xpp, CDSHooksResponse.CDSLinkTypeCodesVS.NULL, new CDSHooksResponse.CDSLinkTypeCodesVSEnumFactory()));
463    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("appContext")) {
464      res.setAppContextElement(parseString(xpp));
465    } else if (!parseCDSHooksElementContent(eventType, xpp, res)){ //2
466      return false;
467    }
468    return true;
469  }
470
471  protected CDSHooksServices parseCDSHooksServices(XmlPullParser xpp) throws XmlPullParserException, IOException, FHIRFormatError {
472    CDSHooksServices res = new CDSHooksServices();
473    next(xpp);
474    int eventType = nextNoWhitespace(xpp);
475    while (eventType != XmlPullParser.END_TAG) {
476    if (!parseCDSHooksServicesContent(eventType, xpp, res)) // 1
477        unknownContent(xpp);
478      eventType = nextNoWhitespace(xpp);
479    }
480    next(xpp);
481    parseElementClose(res);
482    return res;
483  }
484
485  protected boolean parseCDSHooksServicesContent(int eventType, XmlPullParser xpp, CDSHooksServices res) throws XmlPullParserException, IOException, FHIRFormatError {
486    if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("services")) {
487      res.getServicesList().add(parseCDSHooksServicesServicesComponent(xpp));
488    } else if (!parseCDSHooksElementContent(eventType, xpp, res)){ //2
489      return false;
490    }
491    return true;
492  }
493
494  protected CDSHooksServices.CDSHooksServicesServicesComponent parseCDSHooksServicesServicesComponent(XmlPullParser xpp) throws XmlPullParserException, IOException, FHIRFormatError {
495    CDSHooksServices.CDSHooksServicesServicesComponent res = new CDSHooksServices.CDSHooksServicesServicesComponent();
496    next(xpp);
497    int eventType = nextNoWhitespace(xpp);
498    while (eventType != XmlPullParser.END_TAG) {
499    if (!parseCDSHooksServicesServicesComponentContent(eventType, xpp, res)) // 1
500        unknownContent(xpp);
501      eventType = nextNoWhitespace(xpp);
502    }
503    next(xpp);
504    parseElementClose(res);
505    return res;
506  }
507
508  protected boolean parseCDSHooksServicesServicesComponentContent(int eventType, XmlPullParser xpp, CDSHooksServices.CDSHooksServicesServicesComponent res) throws XmlPullParserException, IOException, FHIRFormatError {
509    if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("hook")) {
510      res.setHookElement(parseString(xpp));
511    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("title")) {
512      res.setTitleElement(parseString(xpp));
513    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("id")) {
514      res.setIdElement(parseCode(xpp));
515    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("description")) {
516      res.setDescriptionElement(parseString(xpp));
517    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("usageRequirements")) {
518      res.setUsageRequirementsElement(parseString(xpp));
519    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("prefetch")) {
520      res.getPrefetchList().add(parseCDSHooksServicesServicesPrefetchComponent(xpp));
521    } else if (!parseCDSHooksElementContent(eventType, xpp, res)){ //2
522      return false;
523    }
524    return true;
525  }
526
527  protected CDSHooksServices.CDSHooksServicesServicesPrefetchComponent parseCDSHooksServicesServicesPrefetchComponent(XmlPullParser xpp) throws XmlPullParserException, IOException, FHIRFormatError {
528    CDSHooksServices.CDSHooksServicesServicesPrefetchComponent res = new CDSHooksServices.CDSHooksServicesServicesPrefetchComponent();
529    next(xpp);
530    int eventType = nextNoWhitespace(xpp);
531    while (eventType != XmlPullParser.END_TAG) {
532    if (!parseCDSHooksServicesServicesPrefetchComponentContent(eventType, xpp, res)) // 1
533        unknownContent(xpp);
534      eventType = nextNoWhitespace(xpp);
535    }
536    next(xpp);
537    parseElementClose(res);
538    return res;
539  }
540
541  protected boolean parseCDSHooksServicesServicesPrefetchComponentContent(int eventType, XmlPullParser xpp, CDSHooksServices.CDSHooksServicesServicesPrefetchComponent res) throws XmlPullParserException, IOException, FHIRFormatError {
542    if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("key")) {
543      res.setKeyElement(parseCode(xpp));
544    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("value")) {
545      res.setValueElement(parseString(xpp));
546    } else if (!parseBaseContent(eventType, xpp, res)){ //2
547      return false;
548    }
549    return true;
550  }
551
552  protected TestCases parseTestCases(XmlPullParser xpp) throws XmlPullParserException, IOException, FHIRFormatError {
553    TestCases res = new TestCases();
554    next(xpp);
555    int eventType = nextNoWhitespace(xpp);
556    while (eventType != XmlPullParser.END_TAG) {
557    if (!parseTestCasesContent(eventType, xpp, res)) // 1
558        unknownContent(xpp);
559      eventType = nextNoWhitespace(xpp);
560    }
561    next(xpp);
562    parseElementClose(res);
563    return res;
564  }
565
566  protected boolean parseTestCasesContent(int eventType, XmlPullParser xpp, TestCases res) throws XmlPullParserException, IOException, FHIRFormatError {
567    if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("url")) {
568      res.setUrlElement(parseUri(xpp));
569    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("version")) {
570      res.setVersionElement(parseString(xpp));
571    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("name")) {
572      res.setNameElement(parseString(xpp));
573    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("description")) {
574      res.setDescriptionElement(parseMarkdown(xpp));
575    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("runner")) {
576      res.setRunnerElement(parseUrl(xpp));
577    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("mode")) {
578      res.getModeList().add(parseTestCasesModeComponent(xpp));
579    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("suite")) {
580      res.getSuiteList().add(parseTestCasesSuiteComponent(xpp));
581    } else if (!parseResourceContent(eventType, xpp, res)){ //2
582      return false;
583    }
584    return true;
585  }
586
587  protected TestCases.TestCasesModeComponent parseTestCasesModeComponent(XmlPullParser xpp) throws XmlPullParserException, IOException, FHIRFormatError {
588    TestCases.TestCasesModeComponent res = new TestCases.TestCasesModeComponent();
589    next(xpp);
590    int eventType = nextNoWhitespace(xpp);
591    while (eventType != XmlPullParser.END_TAG) {
592    if (!parseTestCasesModeComponentContent(eventType, xpp, res)) // 1
593        unknownContent(xpp);
594      eventType = nextNoWhitespace(xpp);
595    }
596    next(xpp);
597    parseElementClose(res);
598    return res;
599  }
600
601  protected boolean parseTestCasesModeComponentContent(int eventType, XmlPullParser xpp, TestCases.TestCasesModeComponent res) throws XmlPullParserException, IOException, FHIRFormatError {
602    if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("code")) {
603      res.setCodeElement(parseString(xpp));
604    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("description")) {
605      res.setDescriptionElement(parseString(xpp));
606    } else if (!parseBaseContent(eventType, xpp, res)){ //2
607      return false;
608    }
609    return true;
610  }
611
612  protected TestCases.TestCasesSuiteComponent parseTestCasesSuiteComponent(XmlPullParser xpp) throws XmlPullParserException, IOException, FHIRFormatError {
613    TestCases.TestCasesSuiteComponent res = new TestCases.TestCasesSuiteComponent();
614    next(xpp);
615    int eventType = nextNoWhitespace(xpp);
616    while (eventType != XmlPullParser.END_TAG) {
617    if (!parseTestCasesSuiteComponentContent(eventType, xpp, res)) // 1
618        unknownContent(xpp);
619      eventType = nextNoWhitespace(xpp);
620    }
621    next(xpp);
622    parseElementClose(res);
623    return res;
624  }
625
626  protected boolean parseTestCasesSuiteComponentContent(int eventType, XmlPullParser xpp, TestCases.TestCasesSuiteComponent res) throws XmlPullParserException, IOException, FHIRFormatError {
627    if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("name")) {
628      res.setNameElement(parseString(xpp));
629    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("description")) {
630      res.setDescriptionElement(parseString(xpp));
631    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("mode")) {
632      res.setModeElement(parseCode(xpp));
633    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("resource")) {
634      res.getResourceList().add(parseTestCasesSuiteResourceComponent(xpp));
635    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("parameter")) {
636      res.getParameterList().add(parseTestCasesSuiteParameterComponent(xpp));
637    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("test")) {
638      res.getTestList().add(parseTestCasesSuiteTestComponent(xpp));
639    } else if (!parseBaseContent(eventType, xpp, res)){ //2
640      return false;
641    }
642    return true;
643  }
644
645  protected TestCases.TestCasesSuiteResourceComponent parseTestCasesSuiteResourceComponent(XmlPullParser xpp) throws XmlPullParserException, IOException, FHIRFormatError {
646    TestCases.TestCasesSuiteResourceComponent res = new TestCases.TestCasesSuiteResourceComponent();
647    next(xpp);
648    int eventType = nextNoWhitespace(xpp);
649    while (eventType != XmlPullParser.END_TAG) {
650    if (!parseTestCasesSuiteResourceComponentContent(eventType, xpp, res)) // 1
651        unknownContent(xpp);
652      eventType = nextNoWhitespace(xpp);
653    }
654    next(xpp);
655    parseElementClose(res);
656    return res;
657  }
658
659  protected boolean parseTestCasesSuiteResourceComponentContent(int eventType, XmlPullParser xpp, TestCases.TestCasesSuiteResourceComponent res) throws XmlPullParserException, IOException, FHIRFormatError {
660    if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("name")) {
661      res.setNameElement(parseString(xpp));
662    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("file")) {
663      res.setFileElement(parseString(xpp));
664    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("resource")) {
665      res.setResource(parseResourceContained(xpp));
666    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("mode")) {
667      res.setModeElement(parseCode(xpp));
668    } else if (!parseBaseContent(eventType, xpp, res)){ //2
669      return false;
670    }
671    return true;
672  }
673
674  protected TestCases.TestCasesSuiteParameterComponent parseTestCasesSuiteParameterComponent(XmlPullParser xpp) throws XmlPullParserException, IOException, FHIRFormatError {
675    TestCases.TestCasesSuiteParameterComponent res = new TestCases.TestCasesSuiteParameterComponent();
676    next(xpp);
677    int eventType = nextNoWhitespace(xpp);
678    while (eventType != XmlPullParser.END_TAG) {
679    if (!parseTestCasesSuiteParameterComponentContent(eventType, xpp, res)) // 1
680        unknownContent(xpp);
681      eventType = nextNoWhitespace(xpp);
682    }
683    next(xpp);
684    parseElementClose(res);
685    return res;
686  }
687
688  protected boolean parseTestCasesSuiteParameterComponentContent(int eventType, XmlPullParser xpp, TestCases.TestCasesSuiteParameterComponent res) throws XmlPullParserException, IOException, FHIRFormatError {
689    if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("name")) {
690      res.setNameElement(parseString(xpp));
691    } else if (eventType == XmlPullParser.START_TAG && nameIsTypeName(xpp, "value")) {
692      res.setValue(parseType("value", xpp));
693    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("mode")) {
694      res.setModeElement(parseCode(xpp));
695    } else if (!parseBaseContent(eventType, xpp, res)){ //2
696      return false;
697    }
698    return true;
699  }
700
701  protected TestCases.TestCasesSuiteTestComponent parseTestCasesSuiteTestComponent(XmlPullParser xpp) throws XmlPullParserException, IOException, FHIRFormatError {
702    TestCases.TestCasesSuiteTestComponent res = new TestCases.TestCasesSuiteTestComponent();
703    next(xpp);
704    int eventType = nextNoWhitespace(xpp);
705    while (eventType != XmlPullParser.END_TAG) {
706    if (!parseTestCasesSuiteTestComponentContent(eventType, xpp, res)) // 1
707        unknownContent(xpp);
708      eventType = nextNoWhitespace(xpp);
709    }
710    next(xpp);
711    parseElementClose(res);
712    return res;
713  }
714
715  protected boolean parseTestCasesSuiteTestComponentContent(int eventType, XmlPullParser xpp, TestCases.TestCasesSuiteTestComponent res) throws XmlPullParserException, IOException, FHIRFormatError {
716    if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("name")) {
717      res.setNameElement(parseString(xpp));
718    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("description")) {
719      res.setDescriptionElement(parseString(xpp));
720    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("operation")) {
721      res.setOperationElement(parseCode(xpp));
722    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("mode")) {
723      res.setModeElement(parseString(xpp));
724    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("parameter")) {
725      res.getParameterList().add(parseTestCasesSuiteParameterComponent(xpp));
726    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("input")) {
727      res.getInputList().add(parseTestCasesSuiteResourceComponent(xpp));
728    } else if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("output")) {
729      res.getOutputList().add(parseTestCasesSuiteResourceComponent(xpp));
730    } else if (!parseBaseContent(eventType, xpp, res)){ //2
731      return false;
732    }
733    return true;
734  }
735
736
737  
738  @Override
739  protected Resource parseResource(XmlPullParser xpp) throws XmlPullParserException, IOException, FHIRFormatError {
740    if (xpp == null) {
741      throw new IOException("xpp == null!");
742    } else if (xpp.getName().equals("TestCases")) {
743      return parseTestCases(xpp);
744
745    } else {
746      throw new FHIRFormatError("Unknown resource type "+xpp.getName()+"");
747    }
748  }
749
750  protected DataType parseType(String prefix, XmlPullParser xpp) throws XmlPullParserException, IOException, FHIRFormatError {
751    if (prefix == null) {
752      throw new IOException("prefix == null!");
753    } else if (xpp == null) {
754      throw new IOException("xpp == null!");
755    } else if (xpp.getName().equals(prefix+"Date")) {
756      return parseDate(xpp);
757    } else if (xpp.getName().equals(prefix+"DateTime")) {
758      return parseDateTime(xpp);
759    } else if (xpp.getName().equals(prefix+"Code")) {
760      return parseCode(xpp);
761    } else if (xpp.getName().equals(prefix+"String")) {
762      return parseString(xpp);
763    } else if (xpp.getName().equals(prefix+"Integer")) {
764      return parseInteger(xpp);
765    } else if (xpp.getName().equals(prefix+"Integer64")) {
766      return parseInteger64(xpp);
767    } else if (xpp.getName().equals(prefix+"Oid")) {
768      return parseOid(xpp);
769    } else if (xpp.getName().equals(prefix+"Canonical")) {
770      return parseCanonical(xpp);
771    } else if (xpp.getName().equals(prefix+"Uri")) {
772      return parseUri(xpp);
773    } else if (xpp.getName().equals(prefix+"Uuid")) {
774      return parseUuid(xpp);
775    } else if (xpp.getName().equals(prefix+"Url")) {
776      return parseUrl(xpp);
777    } else if (xpp.getName().equals(prefix+"Instant")) {
778      return parseInstant(xpp);
779    } else if (xpp.getName().equals(prefix+"Boolean")) {
780      return parseBoolean(xpp);
781    } else if (xpp.getName().equals(prefix+"Base64Binary")) {
782      return parseBase64Binary(xpp);
783    } else if (xpp.getName().equals(prefix+"UnsignedInt")) {
784      return parseUnsignedInt(xpp);
785    } else if (xpp.getName().equals(prefix+"Markdown")) {
786      return parseMarkdown(xpp);
787    } else if (xpp.getName().equals(prefix+"Time")) {
788      return parseTime(xpp);
789    } else if (xpp.getName().equals(prefix+"Id")) {
790      return parseId(xpp);
791    } else if (xpp.getName().equals(prefix+"PositiveInt")) {
792      return parsePositiveInt(xpp);
793    } else if (xpp.getName().equals(prefix+"Decimal")) {
794      return parseDecimal(xpp);
795
796    } else {
797      throw new FHIRFormatError("Unknown type "+xpp.getName());
798    }
799  }
800
801  protected DataType parseType(XmlPullParser xpp, String type) throws XmlPullParserException, IOException, FHIRFormatError {
802    if (type == null) {
803      throw new IOException("type == null!");
804    } else if (xpp == null) {
805      throw new IOException("xpp == null!");
806    } else if (type.equals("date")) {
807      return parseDate(xpp);
808    } else if (type.equals("dateTime")) {
809      return parseDateTime(xpp);
810    } else if (type.equals("code")) {
811      return parseCode(xpp);
812    } else if (type.equals("string")) {
813      return parseString(xpp);
814    } else if (type.equals("integer")) {
815      return parseInteger(xpp);
816    } else if (type.equals("integer64")) {
817      return parseInteger64(xpp);
818    } else if (type.equals("oid")) {
819      return parseOid(xpp);
820    } else if (type.equals("canonical")) {
821      return parseCanonical(xpp);
822    } else if (type.equals("uri")) {
823      return parseUri(xpp);
824    } else if (type.equals("uuid")) {
825      return parseUuid(xpp);
826    } else if (type.equals("url")) {
827      return parseUrl(xpp);
828    } else if (type.equals("instant")) {
829      return parseInstant(xpp);
830    } else if (type.equals("boolean")) {
831      return parseBoolean(xpp);
832    } else if (type.equals("base64Binary")) {
833      return parseBase64Binary(xpp);
834    } else if (type.equals("unsignedInt")) {
835      return parseUnsignedInt(xpp);
836    } else if (type.equals("markdown")) {
837      return parseMarkdown(xpp);
838    } else if (type.equals("time")) {
839      return parseTime(xpp);
840    } else if (type.equals("id")) {
841      return parseId(xpp);
842    } else if (type.equals("positiveInt")) {
843      return parsePositiveInt(xpp);
844    } else if (type.equals("decimal")) {
845      return parseDecimal(xpp);
846
847    } else {
848      throw new FHIRFormatError("Unknown type "+type);
849    }
850  }
851
852  public Base parseFragment(XmlPullParser xpp, String type) throws XmlPullParserException, IOException, FHIRFormatError {
853    if (type == null) {
854      throw new IOException("type == null!");
855    } else if (xpp == null) {
856      throw new IOException("xpp == null!");
857    } else if (type.equals("CDSHookOrderSelectContext")) {
858      return parseCDSHookOrderSelectContext(xpp);
859    } else if (type.equals("CDSHookOrderSignContext")) {
860      return parseCDSHookOrderSignContext(xpp);
861    } else if (type.equals("CDSHookPatientViewContext")) {
862      return parseCDSHookPatientViewContext(xpp);
863    } else if (type.equals("CDSHooksExtensions")) {
864      return parseCDSHooksExtensions(xpp);
865    } else if (type.equals("CDSHooksRequest")) {
866      return parseCDSHooksRequest(xpp);
867    } else if (type.equals("CDSHooksResponse")) {
868      return parseCDSHooksResponse(xpp);
869    } else if (type.equals("CDSHooksServices")) {
870      return parseCDSHooksServices(xpp);
871    } else if (type.equals("TestCases")) {
872      return parseTestCases(xpp);
873      
874    } else if (type.equals("date")) {
875      return parseDate(xpp);
876    } else if (type.equals("dateTime")) {
877      return parseDateTime(xpp);
878    } else if (type.equals("code")) {
879      return parseCode(xpp);
880    } else if (type.equals("string")) {
881      return parseString(xpp);
882    } else if (type.equals("integer")) {
883      return parseInteger(xpp);
884    } else if (type.equals("integer64")) {
885      return parseInteger64(xpp);
886    } else if (type.equals("oid")) {
887      return parseOid(xpp);
888    } else if (type.equals("canonical")) {
889      return parseCanonical(xpp);
890    } else if (type.equals("uri")) {
891      return parseUri(xpp);
892    } else if (type.equals("uuid")) {
893      return parseUuid(xpp);
894    } else if (type.equals("url")) {
895      return parseUrl(xpp);
896    } else if (type.equals("instant")) {
897      return parseInstant(xpp);
898    } else if (type.equals("boolean")) {
899      return parseBoolean(xpp);
900    } else if (type.equals("base64Binary")) {
901      return parseBase64Binary(xpp);
902    } else if (type.equals("unsignedInt")) {
903      return parseUnsignedInt(xpp);
904    } else if (type.equals("markdown")) {
905      return parseMarkdown(xpp);
906    } else if (type.equals("time")) {
907      return parseTime(xpp);
908    } else if (type.equals("id")) {
909      return parseId(xpp);
910    } else if (type.equals("positiveInt")) {
911      return parsePositiveInt(xpp);
912    } else if (type.equals("decimal")) {
913      return parseDecimal(xpp);
914    } else {
915      throw new FHIRFormatError("Unknown type "+type);
916    }
917  }
918
919  private boolean nameIsTypeName(XmlPullParser xpp, String prefix) throws IOException {  
920    if (prefix == null) {
921      throw new IOException("prefix == null!");
922    } else if (xpp == null) {
923      throw new IOException("xpp == null!");
924    } else if (xpp.getName().equals(prefix+"CDSHookOrderSelectContext")) {
925      return true;
926    } else if (xpp.getName().equals(prefix+"CDSHookOrderSignContext")) {
927      return true;
928    } else if (xpp.getName().equals(prefix+"CDSHookPatientViewContext")) {
929      return true;
930    } else if (xpp.getName().equals(prefix+"CDSHooksExtensions")) {
931      return true;
932    } else if (xpp.getName().equals(prefix+"CDSHooksRequest")) {
933      return true;
934    } else if (xpp.getName().equals(prefix+"CDSHooksResponse")) {
935      return true;
936    } else if (xpp.getName().equals(prefix+"CDSHooksServices")) {
937      return true;
938    } else if (xpp.getName().equals(prefix+"TestCases")) {
939      return true;
940
941    } else if (xpp.getName().equals(prefix+"Date")) {
942      return true;
943    } else if (xpp.getName().equals(prefix+"DateTime")) {
944      return true;
945    } else if (xpp.getName().equals(prefix+"Code")) {
946      return true;
947    } else if (xpp.getName().equals(prefix+"String")) {
948      return true;
949    } else if (xpp.getName().equals(prefix+"Integer")) {
950      return true;
951    } else if (xpp.getName().equals(prefix+"Integer64")) {
952      return true;
953    } else if (xpp.getName().equals(prefix+"Oid")) {
954      return true;
955    } else if (xpp.getName().equals(prefix+"Canonical")) {
956      return true;
957    } else if (xpp.getName().equals(prefix+"Uri")) {
958      return true;
959    } else if (xpp.getName().equals(prefix+"Uuid")) {
960      return true;
961    } else if (xpp.getName().equals(prefix+"Url")) {
962      return true;
963    } else if (xpp.getName().equals(prefix+"Instant")) {
964      return true;
965    } else if (xpp.getName().equals(prefix+"Boolean")) {
966      return true;
967    } else if (xpp.getName().equals(prefix+"Base64Binary")) {
968      return true;
969    } else if (xpp.getName().equals(prefix+"UnsignedInt")) {
970      return true;
971    } else if (xpp.getName().equals(prefix+"Markdown")) {
972      return true;
973    } else if (xpp.getName().equals(prefix+"Time")) {
974      return true;
975    } else if (xpp.getName().equals(prefix+"Id")) {
976      return true;
977    } else if (xpp.getName().equals(prefix+"PositiveInt")) {
978      return true;
979    } else if (xpp.getName().equals(prefix+"Decimal")) {
980      return true;
981    } else {
982      return false;
983    }
984  }
985
986  @Override
987  protected DataType parseAnyType(XmlPullParser xpp, String type) throws XmlPullParserException, IOException, FHIRFormatError {
988    return parseType(xpp, type);
989  }
990
991
992//----------------- Composer -------------------------------------------------------------------------------------------
993
994  protected void composeCDSHookContextElements(CDSHookContext element) throws IOException {
995    composeBaseElements(element);
996  }
997
998  protected void composeCDSHooksElementElements(CDSHooksElement element) throws IOException {
999    composeBaseElements(element);
1000    if (element.hasExtension()) {
1001      composeCDSHooksExtensions("extension", element.getExtension());
1002    }
1003  }
1004
1005  protected void composeCDSHookOrderSelectContext(String name, CDSHookOrderSelectContext element) throws IOException {
1006    if (element != null) {
1007      xml.enter(FHIR_NS, name);
1008      composeCDSHookOrderSelectContextElements(element);
1009      composeElementClose(element);
1010      xml.exit(FHIR_NS, name);
1011    }
1012  }
1013
1014  protected void composeCDSHookOrderSelectContextElements(CDSHookOrderSelectContext element) throws IOException {
1015    composeCDSHookContextElements(element);
1016    if (element.hasUserIdElement()) {
1017      composeUrl("userId", element.getUserIdElement());
1018    }
1019    if (element.hasPatientIdElement()) {
1020      composeId("patientId", element.getPatientIdElement());
1021    }
1022    if (element.hasEncounterIdElement()) {
1023      composeId("encounterId", element.getEncounterIdElement());
1024    }
1025    if (element.hasSelections()) { 
1026      for (UriType e : element.getSelectionsList()) 
1027          composeUri("selections", e); // a
1028    }
1029    if (element.hasDraftOrders()) {
1030      composeBundle("draftOrders", element.getDraftOrders());
1031    }
1032  }
1033
1034  protected void composeCDSHookOrderSignContext(String name, CDSHookOrderSignContext element) throws IOException {
1035    if (element != null) {
1036      xml.enter(FHIR_NS, name);
1037      composeCDSHookOrderSignContextElements(element);
1038      composeElementClose(element);
1039      xml.exit(FHIR_NS, name);
1040    }
1041  }
1042
1043  protected void composeCDSHookOrderSignContextElements(CDSHookOrderSignContext element) throws IOException {
1044    composeCDSHookContextElements(element);
1045    if (element.hasUserIdElement()) {
1046      composeUrl("userId", element.getUserIdElement());
1047    }
1048    if (element.hasPatientIdElement()) {
1049      composeId("patientId", element.getPatientIdElement());
1050    }
1051    if (element.hasEncounterIdElement()) {
1052      composeId("encounterId", element.getEncounterIdElement());
1053    }
1054    if (element.hasDraftOrders()) {
1055      composeBundle("draftOrders", element.getDraftOrders());
1056    }
1057  }
1058
1059  protected void composeCDSHookPatientViewContext(String name, CDSHookPatientViewContext element) throws IOException {
1060    if (element != null) {
1061      xml.enter(FHIR_NS, name);
1062      composeCDSHookPatientViewContextElements(element);
1063      composeElementClose(element);
1064      xml.exit(FHIR_NS, name);
1065    }
1066  }
1067
1068  protected void composeCDSHookPatientViewContextElements(CDSHookPatientViewContext element) throws IOException {
1069    composeCDSHookContextElements(element);
1070    if (element.hasUserIdElement()) {
1071      composeUrl("userId", element.getUserIdElement());
1072    }
1073    if (element.hasPatientIdElement()) {
1074      composeId("patientId", element.getPatientIdElement());
1075    }
1076    if (element.hasEncounterIdElement()) {
1077      composeId("encounterId", element.getEncounterIdElement());
1078    }
1079  }
1080
1081  protected void composeCDSHooksExtensions(String name, CDSHooksExtensions element) throws IOException {
1082    if (element != null) {
1083      xml.enter(FHIR_NS, name);
1084      composeCDSHooksExtensionsElements(element);
1085      composeElementClose(element);
1086      xml.exit(FHIR_NS, name);
1087    }
1088  }
1089
1090  protected void composeCDSHooksExtensionsElements(CDSHooksExtensions element) throws IOException {
1091    composeBaseElements(element);
1092  }
1093
1094  protected void composeCDSHooksRequest(String name, CDSHooksRequest element) throws IOException {
1095    if (element != null) {
1096      xml.enter(FHIR_NS, name);
1097      composeCDSHooksRequestElements(element);
1098      composeElementClose(element);
1099      xml.exit(FHIR_NS, name);
1100    }
1101  }
1102
1103  protected void composeCDSHooksRequestElements(CDSHooksRequest element) throws IOException {
1104    composeCDSHooksElementElements(element);
1105    if (element.hasHookElement()) {
1106      composeCode("hook", element.getHookElement());
1107    }
1108    if (element.hasHookInstanceElement()) {
1109      composeUuid("hookInstance", element.getHookInstanceElement());
1110    }
1111    if (element.hasFhirServerElement()) {
1112      composeUrl("fhirServer", element.getFhirServerElement());
1113    }
1114    if (element.hasFhirAuthorization()) {
1115      composeCDSHooksRequestFhirAuthorizationComponent("fhirAuthorization", element.getFhirAuthorization());
1116    }
1117    if (element.hasContext()) {
1118      composeCDSHookContext("context", element.getContext());
1119    }
1120    if (element.hasPrefetch()) { 
1121      for (CDSHooksRequest.CDSHooksRequestPrefetchComponent e : element.getPrefetchList()) 
1122          composeCDSHooksRequestPrefetchComponent("prefetch", e); // a
1123    }
1124  }
1125
1126  protected void composeCDSHookContext(String name, CDSHookContext element) throws IOException {
1127    if (element instanceof CDSHookPatientViewContext) {
1128      composeCDSHookPatientViewContext(name, (CDSHookPatientViewContext) element);
1129    } else if (element instanceof CDSHookOrderSignContext) {
1130      composeCDSHookOrderSignContext(name, (CDSHookOrderSignContext) element);
1131    } else if (element instanceof CDSHookOrderSelectContext) {
1132      composeCDSHookOrderSelectContext(name, (CDSHookOrderSelectContext) element);
1133    } else {
1134      throw new FHIRFormatError("Unable to compose CDSHookContext: Unexpected type "+element.getClass().getName());
1135    }
1136  }
1137
1138  protected void composeCDSHooksRequestFhirAuthorizationComponent(String name, CDSHooksRequest.CDSHooksRequestFhirAuthorizationComponent element) throws IOException {
1139    if (element != null) {
1140      xml.enter(FHIR_NS, name);
1141      composeCDSHooksRequestFhirAuthorizationComponentElements(element);
1142      composeElementClose(element);
1143      xml.exit(FHIR_NS, name);
1144    }
1145  }
1146
1147  protected void composeCDSHooksRequestFhirAuthorizationComponentElements(CDSHooksRequest.CDSHooksRequestFhirAuthorizationComponent element) throws IOException {
1148    composehttp://hl7.org/fhir/tools/StructureDefinition/CDSHooksElementElements(element);
1149    if (element.hasAccessTokenElement()) {
1150      composeString("accessToken", element.getAccessTokenElement());
1151    }
1152    if (element.hasTokenTypeElement()) {
1153      composeCode("tokenType", element.getTokenTypeElement());
1154    }
1155    if (element.hasExpiresInElement()) {
1156      composeInteger("expiresIn", element.getExpiresInElement());
1157    }
1158    if (element.hasScopeElement()) {
1159      composeString("scope", element.getScopeElement());
1160    }
1161    if (element.hasSubjectElement()) {
1162      composeString("subject", element.getSubjectElement());
1163    }
1164    if (element.hasPatientElement()) {
1165      composeId("patient", element.getPatientElement());
1166    }
1167  }
1168
1169  protected void composeCDSHooksRequestPrefetchComponent(String name, CDSHooksRequest.CDSHooksRequestPrefetchComponent element) throws IOException {
1170    if (element != null) {
1171      xml.enter(FHIR_NS, name);
1172      composeCDSHooksRequestPrefetchComponentElements(element);
1173      composeElementClose(element);
1174      xml.exit(FHIR_NS, name);
1175    }
1176  }
1177
1178  protected void composeCDSHooksRequestPrefetchComponentElements(CDSHooksRequest.CDSHooksRequestPrefetchComponent element) throws IOException {
1179    composeBaseElements(element);
1180    if (element.hasKeyElement()) {
1181      composeCode("key", element.getKeyElement());
1182    }
1183    if (element.hasValue()) {
1184      xml.enter(FHIR_NS, "value");
1185      composeResource(element.getValue());
1186      xml.exit(FHIR_NS, "value");
1187    }
1188  }
1189
1190  protected void composeCDSHooksResponse(String name, CDSHooksResponse element) throws IOException {
1191    if (element != null) {
1192      xml.enter(FHIR_NS, name);
1193      composeCDSHooksResponseElements(element);
1194      composeElementClose(element);
1195      xml.exit(FHIR_NS, name);
1196    }
1197  }
1198
1199  protected void composeCDSHooksResponseElements(CDSHooksResponse element) throws IOException {
1200    composeCDSHooksElementElements(element);
1201    if (element.hasCards()) { 
1202      for (CDSHooksResponse.CDSHooksResponseCardsComponent e : element.getCardsList()) 
1203          composeCDSHooksResponseCardsComponent("cards", e); // a
1204    }
1205    if (element.hasSystemActions()) { 
1206      for (CDSHooksResponse.CDSHooksResponseCardsSuggestionsActionsComponent e : element.getSystemActionsList()) 
1207          composeCDSHooksResponseCardsSuggestionsActionsComponent("systemActions", e); // a
1208    }
1209  }
1210
1211  protected void composeCDSHooksResponseCardsComponent(String name, CDSHooksResponse.CDSHooksResponseCardsComponent element) throws IOException {
1212    if (element != null) {
1213      xml.enter(FHIR_NS, name);
1214      composeCDSHooksResponseCardsComponentElements(element);
1215      composeElementClose(element);
1216      xml.exit(FHIR_NS, name);
1217    }
1218  }
1219
1220  protected void composeCDSHooksResponseCardsComponentElements(CDSHooksResponse.CDSHooksResponseCardsComponent element) throws IOException {
1221    composehttp://hl7.org/fhir/tools/StructureDefinition/CDSHooksElementElements(element);
1222    if (element.hasUuidElement()) {
1223      composeUuid("uuid", element.getUuidElement());
1224    }
1225    if (element.hasSummaryElement()) {
1226      composeString("summary", element.getSummaryElement());
1227    }
1228    if (element.hasDetailElement()) {
1229      composeMarkdown("detail", element.getDetailElement());
1230    }
1231    if (element.hasIndicatorElement())
1232      composeEnumeration("indicator", element.getIndicatorElement(), new CDSHooksResponse.CDSIndicatorCodesVSEnumFactory());
1233    if (element.hasSource()) {
1234      composeCDSHooksResponseCardsSourceComponent("source", element.getSource());
1235    }
1236    if (element.hasSuggestions()) { 
1237      for (CDSHooksResponse.CDSHooksResponseCardsSuggestionsComponent e : element.getSuggestionsList()) 
1238          composeCDSHooksResponseCardsSuggestionsComponent("suggestions", e); // a
1239    }
1240    if (element.hasSelectionBehaviorElement())
1241      composeEnumeration("selectionBehavior", element.getSelectionBehaviorElement(), new CDSHooksResponse.CDSSelectionBehaviorCodesVSEnumFactory());
1242    if (element.hasOverrideReasons()) { 
1243      for (Coding e : element.getOverrideReasonsList()) 
1244          composeCoding("overrideReasons", e); // a
1245    }
1246    if (element.hasLinks()) { 
1247      for (CDSHooksResponse.CDSHooksResponseCardsLinksComponent e : element.getLinksList()) 
1248          composeCDSHooksResponseCardsLinksComponent("links", e); // a
1249    }
1250  }
1251
1252  protected void composeCDSHooksResponseCardsSourceComponent(String name, CDSHooksResponse.CDSHooksResponseCardsSourceComponent element) throws IOException {
1253    if (element != null) {
1254      xml.enter(FHIR_NS, name);
1255      composeCDSHooksResponseCardsSourceComponentElements(element);
1256      composeElementClose(element);
1257      xml.exit(FHIR_NS, name);
1258    }
1259  }
1260
1261  protected void composeCDSHooksResponseCardsSourceComponentElements(CDSHooksResponse.CDSHooksResponseCardsSourceComponent element) throws IOException {
1262    composehttp://hl7.org/fhir/tools/StructureDefinition/CDSHooksElementElements(element);
1263    if (element.hasLabelElement()) {
1264      composeString("label", element.getLabelElement());
1265    }
1266    if (element.hasUrlElement()) {
1267      composeUrl("url", element.getUrlElement());
1268    }
1269    if (element.hasIconElement()) {
1270      composeUrl("icon", element.getIconElement());
1271    }
1272    if (element.hasTopic()) {
1273      composeCoding("topic", element.getTopic());
1274    }
1275  }
1276
1277  protected void composeCDSHooksResponseCardsSuggestionsComponent(String name, CDSHooksResponse.CDSHooksResponseCardsSuggestionsComponent element) throws IOException {
1278    if (element != null) {
1279      xml.enter(FHIR_NS, name);
1280      composeCDSHooksResponseCardsSuggestionsComponentElements(element);
1281      composeElementClose(element);
1282      xml.exit(FHIR_NS, name);
1283    }
1284  }
1285
1286  protected void composeCDSHooksResponseCardsSuggestionsComponentElements(CDSHooksResponse.CDSHooksResponseCardsSuggestionsComponent element) throws IOException {
1287    composehttp://hl7.org/fhir/tools/StructureDefinition/CDSHooksElementElements(element);
1288    if (element.hasLabelElement()) {
1289      composeString("label", element.getLabelElement());
1290    }
1291    if (element.hasUuidElement()) {
1292      composeUuid("uuid", element.getUuidElement());
1293    }
1294    if (element.hasIsRecommendedElement()) {
1295      composeBoolean("isRecommended", element.getIsRecommendedElement());
1296    }
1297    if (element.hasActions()) { 
1298      for (CDSHooksResponse.CDSHooksResponseCardsSuggestionsActionsComponent e : element.getActionsList()) 
1299          composeCDSHooksResponseCardsSuggestionsActionsComponent("actions", e); // a
1300    }
1301  }
1302
1303  protected void composeCDSHooksResponseCardsSuggestionsActionsComponent(String name, CDSHooksResponse.CDSHooksResponseCardsSuggestionsActionsComponent element) throws IOException {
1304    if (element != null) {
1305      xml.enter(FHIR_NS, name);
1306      composeCDSHooksResponseCardsSuggestionsActionsComponentElements(element);
1307      composeElementClose(element);
1308      xml.exit(FHIR_NS, name);
1309    }
1310  }
1311
1312  protected void composeCDSHooksResponseCardsSuggestionsActionsComponentElements(CDSHooksResponse.CDSHooksResponseCardsSuggestionsActionsComponent element) throws IOException {
1313    composehttp://hl7.org/fhir/tools/StructureDefinition/CDSHooksElementElements(element);
1314    if (element.hasTypeElement())
1315      composeEnumeration("type", element.getTypeElement(), new CDSHooksResponse.CDSActionTypeCodesVSEnumFactory());
1316    if (element.hasDescriptionElement()) {
1317      composeString("description", element.getDescriptionElement());
1318    }
1319    if (element.hasResource()) {
1320      xml.enter(FHIR_NS, "resource");
1321      composeResource(element.getResource());
1322      xml.exit(FHIR_NS, "resource");
1323    }
1324    if (element.hasResourceIdElement()) {
1325      composeUrl("resourceId", element.getResourceIdElement());
1326    }
1327  }
1328
1329  protected void composeCDSHooksResponseCardsLinksComponent(String name, CDSHooksResponse.CDSHooksResponseCardsLinksComponent element) throws IOException {
1330    if (element != null) {
1331      xml.enter(FHIR_NS, name);
1332      composeCDSHooksResponseCardsLinksComponentElements(element);
1333      composeElementClose(element);
1334      xml.exit(FHIR_NS, name);
1335    }
1336  }
1337
1338  protected void composeCDSHooksResponseCardsLinksComponentElements(CDSHooksResponse.CDSHooksResponseCardsLinksComponent element) throws IOException {
1339    composehttp://hl7.org/fhir/tools/StructureDefinition/CDSHooksElementElements(element);
1340    if (element.hasLabelElement()) {
1341      composeString("label", element.getLabelElement());
1342    }
1343    if (element.hasUrlElement()) {
1344      composeUrl("url", element.getUrlElement());
1345    }
1346    if (element.hasTypeElement())
1347      composeEnumeration("type", element.getTypeElement(), new CDSHooksResponse.CDSLinkTypeCodesVSEnumFactory());
1348    if (element.hasAppContextElement()) {
1349      composeString("appContext", element.getAppContextElement());
1350    }
1351  }
1352
1353  protected void composeCDSHooksServices(String name, CDSHooksServices element) throws IOException {
1354    if (element != null) {
1355      xml.enter(FHIR_NS, name);
1356      composeCDSHooksServicesElements(element);
1357      composeElementClose(element);
1358      xml.exit(FHIR_NS, name);
1359    }
1360  }
1361
1362  protected void composeCDSHooksServicesElements(CDSHooksServices element) throws IOException {
1363    composeCDSHooksElementElements(element);
1364    if (element.hasServices()) { 
1365      for (CDSHooksServices.CDSHooksServicesServicesComponent e : element.getServicesList()) 
1366          composeCDSHooksServicesServicesComponent("services", e); // a
1367    }
1368  }
1369
1370  protected void composeCDSHooksServicesServicesComponent(String name, CDSHooksServices.CDSHooksServicesServicesComponent element) throws IOException {
1371    if (element != null) {
1372      xml.enter(FHIR_NS, name);
1373      composeCDSHooksServicesServicesComponentElements(element);
1374      composeElementClose(element);
1375      xml.exit(FHIR_NS, name);
1376    }
1377  }
1378
1379  protected void composeCDSHooksServicesServicesComponentElements(CDSHooksServices.CDSHooksServicesServicesComponent element) throws IOException {
1380    composehttp://hl7.org/fhir/tools/StructureDefinition/CDSHooksElementElements(element);
1381    if (element.hasHookElement()) {
1382      composeString("hook", element.getHookElement());
1383    }
1384    if (element.hasTitleElement()) {
1385      composeString("title", element.getTitleElement());
1386    }
1387    if (element.hasIdElement()) {
1388      composeCode("id", element.getIdElement());
1389    }
1390    if (element.hasDescriptionElement()) {
1391      composeString("description", element.getDescriptionElement());
1392    }
1393    if (element.hasUsageRequirementsElement()) {
1394      composeString("usageRequirements", element.getUsageRequirementsElement());
1395    }
1396    if (element.hasPrefetch()) { 
1397      for (CDSHooksServices.CDSHooksServicesServicesPrefetchComponent e : element.getPrefetchList()) 
1398          composeCDSHooksServicesServicesPrefetchComponent("prefetch", e); // a
1399    }
1400  }
1401
1402  protected void composeCDSHooksServicesServicesPrefetchComponent(String name, CDSHooksServices.CDSHooksServicesServicesPrefetchComponent element) throws IOException {
1403    if (element != null) {
1404      xml.enter(FHIR_NS, name);
1405      composeCDSHooksServicesServicesPrefetchComponentElements(element);
1406      composeElementClose(element);
1407      xml.exit(FHIR_NS, name);
1408    }
1409  }
1410
1411  protected void composeCDSHooksServicesServicesPrefetchComponentElements(CDSHooksServices.CDSHooksServicesServicesPrefetchComponent element) throws IOException {
1412    composeBaseElements(element);
1413    if (element.hasKeyElement()) {
1414      composeCode("key", element.getKeyElement());
1415    }
1416    if (element.hasValueElement()) {
1417      composeString("value", element.getValueElement());
1418    }
1419  }
1420
1421  protected void composeTestCases(String name, TestCases element) throws IOException {
1422    if (element != null) {
1423      xml.enter(FHIR_NS, name);
1424      composeTestCasesElements(element);
1425      composeElementClose(element);
1426      xml.exit(FHIR_NS, name);
1427    }
1428  }
1429
1430  protected void composeTestCasesElements(TestCases element) throws IOException {
1431    composeResourceElements(element);
1432    if (element.hasUrlElement()) {
1433      composeUri("url", element.getUrlElement());
1434    }
1435    if (element.hasVersionElement()) {
1436      composeString("version", element.getVersionElement());
1437    }
1438    if (element.hasNameElement()) {
1439      composeString("name", element.getNameElement());
1440    }
1441    if (element.hasDescriptionElement()) {
1442      composeMarkdown("description", element.getDescriptionElement());
1443    }
1444    if (element.hasRunnerElement()) {
1445      composeUrl("runner", element.getRunnerElement());
1446    }
1447    if (element.hasMode()) { 
1448      for (TestCases.TestCasesModeComponent e : element.getModeList()) 
1449          composeTestCasesModeComponent("mode", e); // a
1450    }
1451    if (element.hasSuite()) { 
1452      for (TestCases.TestCasesSuiteComponent e : element.getSuiteList()) 
1453          composeTestCasesSuiteComponent("suite", e); // a
1454    }
1455  }
1456
1457  protected void composeTestCasesModeComponent(String name, TestCases.TestCasesModeComponent element) throws IOException {
1458    if (element != null) {
1459      xml.enter(FHIR_NS, name);
1460      composeTestCasesModeComponentElements(element);
1461      composeElementClose(element);
1462      xml.exit(FHIR_NS, name);
1463    }
1464  }
1465
1466  protected void composeTestCasesModeComponentElements(TestCases.TestCasesModeComponent element) throws IOException {
1467    composeBaseElements(element);
1468    if (element.hasCodeElement()) {
1469      composeString("code", element.getCodeElement());
1470    }
1471    if (element.hasDescriptionElement()) {
1472      composeString("description", element.getDescriptionElement());
1473    }
1474  }
1475
1476  protected void composeTestCasesSuiteComponent(String name, TestCases.TestCasesSuiteComponent element) throws IOException {
1477    if (element != null) {
1478      xml.enter(FHIR_NS, name);
1479      composeTestCasesSuiteComponentElements(element);
1480      composeElementClose(element);
1481      xml.exit(FHIR_NS, name);
1482    }
1483  }
1484
1485  protected void composeTestCasesSuiteComponentElements(TestCases.TestCasesSuiteComponent element) throws IOException {
1486    composeBaseElements(element);
1487    if (element.hasNameElement()) {
1488      composeString("name", element.getNameElement());
1489    }
1490    if (element.hasDescriptionElement()) {
1491      composeString("description", element.getDescriptionElement());
1492    }
1493    if (element.hasModeElement()) {
1494      composeCode("mode", element.getModeElement());
1495    }
1496    if (element.hasResource()) { 
1497      for (TestCases.TestCasesSuiteResourceComponent e : element.getResourceList()) 
1498          composeTestCasesSuiteResourceComponent("resource", e); // a
1499    }
1500    if (element.hasParameter()) { 
1501      for (TestCases.TestCasesSuiteParameterComponent e : element.getParameterList()) 
1502          composeTestCasesSuiteParameterComponent("parameter", e); // a
1503    }
1504    if (element.hasTest()) { 
1505      for (TestCases.TestCasesSuiteTestComponent e : element.getTestList()) 
1506          composeTestCasesSuiteTestComponent("test", e); // a
1507    }
1508  }
1509
1510  protected void composeTestCasesSuiteResourceComponent(String name, TestCases.TestCasesSuiteResourceComponent element) throws IOException {
1511    if (element != null) {
1512      xml.enter(FHIR_NS, name);
1513      composeTestCasesSuiteResourceComponentElements(element);
1514      composeElementClose(element);
1515      xml.exit(FHIR_NS, name);
1516    }
1517  }
1518
1519  protected void composeTestCasesSuiteResourceComponentElements(TestCases.TestCasesSuiteResourceComponent element) throws IOException {
1520    composeBaseElements(element);
1521    if (element.hasNameElement()) {
1522      composeString("name", element.getNameElement());
1523    }
1524    if (element.hasFileElement()) {
1525      composeString("file", element.getFileElement());
1526    }
1527    if (element.hasResource()) {
1528      xml.enter(FHIR_NS, "resource");
1529      composeResource(element.getResource());
1530      xml.exit(FHIR_NS, "resource");
1531    }
1532    if (element.hasModeElement()) {
1533      composeCode("mode", element.getModeElement());
1534    }
1535  }
1536
1537  protected void composeTestCasesSuiteParameterComponent(String name, TestCases.TestCasesSuiteParameterComponent element) throws IOException {
1538    if (element != null) {
1539      xml.enter(FHIR_NS, name);
1540      composeTestCasesSuiteParameterComponentElements(element);
1541      composeElementClose(element);
1542      xml.exit(FHIR_NS, name);
1543    }
1544  }
1545
1546  protected void composeTestCasesSuiteParameterComponentElements(TestCases.TestCasesSuiteParameterComponent element) throws IOException {
1547    composeBaseElements(element);
1548    if (element.hasNameElement()) {
1549      composeString("name", element.getNameElement());
1550    }
1551    if (element.hasValue()) {
1552      composeType("value", element.getValue());
1553    }    if (element.hasModeElement()) {
1554      composeCode("mode", element.getModeElement());
1555    }
1556  }
1557
1558  protected void composeTestCasesSuiteTestComponent(String name, TestCases.TestCasesSuiteTestComponent element) throws IOException {
1559    if (element != null) {
1560      xml.enter(FHIR_NS, name);
1561      composeTestCasesSuiteTestComponentElements(element);
1562      composeElementClose(element);
1563      xml.exit(FHIR_NS, name);
1564    }
1565  }
1566
1567  protected void composeTestCasesSuiteTestComponentElements(TestCases.TestCasesSuiteTestComponent element) throws IOException {
1568    composeBaseElements(element);
1569    if (element.hasNameElement()) {
1570      composeString("name", element.getNameElement());
1571    }
1572    if (element.hasDescriptionElement()) {
1573      composeString("description", element.getDescriptionElement());
1574    }
1575    if (element.hasOperationElement()) {
1576      composeCode("operation", element.getOperationElement());
1577    }
1578    if (element.hasModeElement()) {
1579      composeString("mode", element.getModeElement());
1580    }
1581    if (element.hasParameter()) { 
1582      for (TestCases.TestCasesSuiteParameterComponent e : element.getParameterList()) 
1583          composeTestCasesSuiteParameterComponent("parameter", e); // a
1584    }
1585    if (element.hasInput()) { 
1586      for (TestCases.TestCasesSuiteResourceComponent e : element.getInputList()) 
1587          composeTestCasesSuiteResourceComponent("input", e); // a
1588    }
1589    if (element.hasOutput()) { 
1590      for (TestCases.TestCasesSuiteResourceComponent e : element.getOutputList()) 
1591          composeTestCasesSuiteResourceComponent("output", e); // a
1592    }
1593  }
1594
1595
1596
1597  @Override
1598  protected void composeResource(Resource resource) throws IOException {
1599    if (resource == null) {
1600      throw new IOException("resource == null");
1601    } else if (resource instanceof TestCases) {
1602      composeTestCases("TestCases", (TestCases)resource);
1603      
1604    } else {
1605      throw new Error("Unhandled resource type "+resource.getClass().getName());
1606    }
1607  }
1608
1609  protected void composeResource(String name, Resource resource) throws IOException {
1610    if (name == null) {
1611      throw new IOException("name == null");
1612    } else if (resource == null) {
1613      throw new IOException("resource == null");
1614    } else if (resource instanceof TestCases) {
1615      composeTestCases(name, (TestCases)resource);
1616      
1617    } else {
1618      throw new Error("Unhandled resource type "+resource.getClass().getName());
1619    }
1620  }
1621
1622  protected void composeType(String prefix, DataType type) throws IOException {
1623    if (prefix == null) {
1624      throw new IOException("prefix == null");
1625    } else if (type == null) {
1626      throw new IOException("type == null");
1627
1628    } else if (type instanceof CodeType) {
1629       composeCode(prefix+"Code", (CodeType) type);
1630    } else if (type instanceof OidType) {
1631       composeOid(prefix+"Oid", (OidType) type);
1632    } else if (type instanceof CanonicalType) {
1633       composeCanonical(prefix+"Canonical", (CanonicalType) type);
1634    } else if (type instanceof UuidType) {
1635       composeUuid(prefix+"Uuid", (UuidType) type);
1636    } else if (type instanceof UrlType) {
1637       composeUrl(prefix+"Url", (UrlType) type);
1638    } else if (type instanceof UnsignedIntType) {
1639       composeUnsignedInt(prefix+"UnsignedInt", (UnsignedIntType) type);
1640    } else if (type instanceof MarkdownType) {
1641       composeMarkdown(prefix+"Markdown", (MarkdownType) type);
1642    } else if (type instanceof IdType) {
1643       composeId(prefix+"Id", (IdType) type);
1644    } else if (type instanceof PositiveIntType) {
1645       composePositiveInt(prefix+"PositiveInt", (PositiveIntType) type);
1646    } else if (type instanceof DateType) {
1647       composeDate(prefix+"Date", (DateType) type);
1648    } else if (type instanceof DateTimeType) {
1649       composeDateTime(prefix+"DateTime", (DateTimeType) type);
1650    } else if (type instanceof StringType) {
1651       composeString(prefix+"String", (StringType) type);
1652    } else if (type instanceof IntegerType) {
1653      composeInteger(prefix+"Integer", (IntegerType) type);
1654    } else if (type instanceof Integer64Type) {
1655      composeInteger64(prefix+"Integer64", (Integer64Type) type);
1656    } else if (type instanceof UriType) {
1657       composeUri(prefix+"Uri", (UriType) type);
1658    } else if (type instanceof InstantType) {
1659       composeInstant(prefix+"Instant", (InstantType) type);
1660    } else if (type instanceof BooleanType) {
1661       composeBoolean(prefix+"Boolean", (BooleanType) type);
1662    } else if (type instanceof Base64BinaryType) {
1663       composeBase64Binary(prefix+"Base64Binary", (Base64BinaryType) type);
1664    } else if (type instanceof TimeType) {
1665       composeTime(prefix+"Time", (TimeType) type);
1666    } else if (type instanceof DecimalType) {
1667       composeDecimal(prefix+"Decimal", (DecimalType) type);
1668    } else {
1669      throw new Error("Unhandled type "+type.fhirType());
1670    }
1671  }
1672
1673}