001package org.hl7.fhir.r5.formats;
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.utilities.Utilities;
039import org.hl7.fhir.utilities.xhtml.XhtmlNode;
040import org.hl7.fhir.exceptions.FHIRFormatError;
041import org.hl7.fhir.exceptions.FHIRException;
042import org.hl7.fhir.utilities.json.JsonTrackingParser.PresentedBigDecimal;
043import com.google.gson.JsonObject;
044import com.google.gson.JsonArray;
045import com.google.gson.JsonElement;
046import java.io.IOException;
047
048public class JsonParser extends JsonParserBase {
049
050  public JsonParser() {
051    super();
052  }
053
054  public JsonParser(boolean allowUnknownContent) {
055    super();
056    setAllowUnknownContent(allowUnknownContent);
057  }
058
059  public JsonParser(boolean allowUnknownContent, boolean allowComments) {
060    super();
061    setAllowUnknownContent(allowUnknownContent);
062    setAllowComments(allowComments);
063  }
064
065  protected void parseBaseProperties(JsonObject json, Base res) throws IOException, FHIRFormatError {
066    // nothing
067  }
068
069  @SuppressWarnings("unchecked")
070  protected <E extends Enum<E>> Enumeration<E> parseEnumeration(String s, E item, EnumFactory e) throws IOException, FHIRFormatError {
071    Enumeration<E> res = new Enumeration<E>(e);
072    if (s != null)
073      res.setValue((E) e.fromCode(s));
074    return res;
075  }
076
077  protected DateType parseDate(String v) throws IOException, FHIRFormatError {
078    DateType res = new DateType(v);
079    return res;
080  }
081
082  protected DateTimeType parseDateTime(String v) throws IOException, FHIRFormatError {
083    DateTimeType res = new DateTimeType(v);
084    return res;
085  }
086
087  protected CodeType parseCode(String v) throws IOException, FHIRFormatError {
088    CodeType res = new CodeType(v);
089    return res;
090  }
091
092  protected StringType parseString(String v) throws IOException, FHIRFormatError {
093    StringType res = new StringType(v);
094    return res;
095  }
096
097  protected IntegerType parseInteger(java.lang.Long v) throws IOException, FHIRFormatError {
098    IntegerType res = new IntegerType(v);
099    return res;
100  }
101
102  protected Integer64Type parseInteger64(java.lang.Long v) throws IOException, FHIRFormatError {
103    Integer64Type res = new Integer64Type(v);
104    return res;
105  }
106
107  protected OidType parseOid(String v) throws IOException, FHIRFormatError {
108    OidType res = new OidType(v);
109    return res;
110  }
111
112  protected CanonicalType parseCanonical(String v) throws IOException, FHIRFormatError {
113    CanonicalType res = new CanonicalType(v);
114    return res;
115  }
116
117  protected UriType parseUri(String v) throws IOException, FHIRFormatError {
118    UriType res = new UriType(v);
119    return res;
120  }
121
122  protected UuidType parseUuid(String v) throws IOException, FHIRFormatError {
123    UuidType res = new UuidType(v);
124    return res;
125  }
126
127  protected UrlType parseUrl(String v) throws IOException, FHIRFormatError {
128    UrlType res = new UrlType(v);
129    return res;
130  }
131
132  protected InstantType parseInstant(String v) throws IOException, FHIRFormatError {
133    InstantType res = new InstantType(v);
134    return res;
135  }
136
137  protected BooleanType parseBoolean(java.lang.Boolean v) throws IOException, FHIRFormatError {
138    BooleanType res = new BooleanType(v);
139    return res;
140  }
141
142  protected Base64BinaryType parseBase64Binary(String v) throws IOException, FHIRFormatError {
143    Base64BinaryType res = new Base64BinaryType(v);
144    return res;
145  }
146
147  protected UnsignedIntType parseUnsignedInt(String v) throws IOException, FHIRFormatError {
148    UnsignedIntType res = new UnsignedIntType(v);
149    return res;
150  }
151
152  protected MarkdownType parseMarkdown(String v) throws IOException, FHIRFormatError {
153    MarkdownType res = new MarkdownType(v);
154    return res;
155  }
156
157  protected TimeType parseTime(String v) throws IOException, FHIRFormatError {
158    TimeType res = new TimeType(v);
159    return res;
160  }
161
162  protected IdType parseId(String v) throws IOException, FHIRFormatError {
163    IdType res = new IdType(v);
164    return res;
165  }
166
167  protected PositiveIntType parsePositiveInt(String v) throws IOException, FHIRFormatError {
168    PositiveIntType res = new PositiveIntType(v);
169    return res;
170  }
171
172  protected DecimalType parseDecimal(java.math.BigDecimal v) throws IOException, FHIRFormatError {
173    DecimalType res = new DecimalType(v);
174    if (v instanceof PresentedBigDecimal)
175      res.setRepresentation(((PresentedBigDecimal) v).getPresentation());
176    return res;
177  }
178
179
180
181  protected void parseBackboneElementProperties(JsonObject json, BackboneElement res) throws IOException, FHIRFormatError {
182    parseElementProperties(json, res);
183    if (json.has("modifierExtension")) {
184      JsonArray array = getJArray(json, "modifierExtension");
185      for (int i = 0; i < array.size(); i++) {
186        res.getModifierExtension().add(parseExtension(array.get(i).getAsJsonObject()));
187      }
188    };
189  }
190
191  protected void parseBackboneTypeProperties(JsonObject json, BackboneType res) throws IOException, FHIRFormatError {
192    parseDataTypeProperties(json, res);
193    if (json.has("modifierExtension")) {
194      JsonArray array = getJArray(json, "modifierExtension");
195      for (int i = 0; i < array.size(); i++) {
196        res.getModifierExtension().add(parseExtension(array.get(i).getAsJsonObject()));
197      }
198    };
199  }
200
201  protected void parseDataTypeProperties(JsonObject json, DataType res) throws IOException, FHIRFormatError {
202    parseElementProperties(json, res);
203  }
204
205  protected void parseElementProperties(JsonObject json, Element res) throws IOException, FHIRFormatError {
206    if (json.has("id"))
207      res.setIdElement(parseString(json.get("id").getAsString()));
208    if (json.has("_id"))
209      parseElementProperties(getJObject(json, "_id"), res.getIdElement());
210    if (json.has("extension")) {
211      JsonArray array = getJArray(json, "extension");
212      for (int i = 0; i < array.size(); i++) {
213        res.getExtension().add(parseExtension(array.get(i).getAsJsonObject()));
214      }
215    };
216  }
217
218  protected Address parseAddress(JsonObject json) throws IOException, FHIRFormatError {
219    Address res = new Address();
220    parseAddressProperties(json, res);
221    return res;
222  }
223
224  protected void parseAddressProperties(JsonObject json, Address res) throws IOException, FHIRFormatError {
225    parseDataTypeProperties(json, res);
226    if (json.has("use"))
227      res.setUseElement(parseEnumeration(json.get("use").getAsString(), Address.AddressUse.NULL, new Address.AddressUseEnumFactory()));
228    if (json.has("_use"))
229      parseElementProperties(getJObject(json, "_use"), res.getUseElement());
230    if (json.has("type"))
231      res.setTypeElement(parseEnumeration(json.get("type").getAsString(), Address.AddressType.NULL, new Address.AddressTypeEnumFactory()));
232    if (json.has("_type"))
233      parseElementProperties(getJObject(json, "_type"), res.getTypeElement());
234    if (json.has("text"))
235      res.setTextElement(parseString(json.get("text").getAsString()));
236    if (json.has("_text"))
237      parseElementProperties(getJObject(json, "_text"), res.getTextElement());
238    if (json.has("line")) {
239      JsonArray array = getJArray(json, "line");
240      for (int i = 0; i < array.size(); i++) {
241        if (array.get(i).isJsonNull()) {
242          res.getLine().add(new StringType());
243        } else {;
244          res.getLine().add(parseString(array.get(i).getAsString()));
245        }
246      }
247    };
248    if (json.has("_line")) {
249      JsonArray array = getJArray(json, "_line");
250      for (int i = 0; i < array.size(); i++) {
251        if (i == res.getLine().size())
252          res.getLine().add(parseString(null));
253        if (array.get(i) instanceof JsonObject) 
254          parseElementProperties(array.get(i).getAsJsonObject(), res.getLine().get(i));
255      }
256    };
257    if (json.has("city"))
258      res.setCityElement(parseString(json.get("city").getAsString()));
259    if (json.has("_city"))
260      parseElementProperties(getJObject(json, "_city"), res.getCityElement());
261    if (json.has("district"))
262      res.setDistrictElement(parseString(json.get("district").getAsString()));
263    if (json.has("_district"))
264      parseElementProperties(getJObject(json, "_district"), res.getDistrictElement());
265    if (json.has("state"))
266      res.setStateElement(parseString(json.get("state").getAsString()));
267    if (json.has("_state"))
268      parseElementProperties(getJObject(json, "_state"), res.getStateElement());
269    if (json.has("postalCode"))
270      res.setPostalCodeElement(parseString(json.get("postalCode").getAsString()));
271    if (json.has("_postalCode"))
272      parseElementProperties(getJObject(json, "_postalCode"), res.getPostalCodeElement());
273    if (json.has("country"))
274      res.setCountryElement(parseString(json.get("country").getAsString()));
275    if (json.has("_country"))
276      parseElementProperties(getJObject(json, "_country"), res.getCountryElement());
277    if (json.has("period"))
278      res.setPeriod(parsePeriod(getJObject(json, "period")));
279  }
280
281  protected Age parseAge(JsonObject json) throws IOException, FHIRFormatError {
282    Age res = new Age();
283    parseAgeProperties(json, res);
284    return res;
285  }
286
287  protected void parseAgeProperties(JsonObject json, Age res) throws IOException, FHIRFormatError {
288    parseQuantityProperties(json, res);
289  }
290
291  protected Annotation parseAnnotation(JsonObject json) throws IOException, FHIRFormatError {
292    Annotation res = new Annotation();
293    parseAnnotationProperties(json, res);
294    return res;
295  }
296
297  protected void parseAnnotationProperties(JsonObject json, Annotation res) throws IOException, FHIRFormatError {
298    parseDataTypeProperties(json, res);
299    DataType author = parseType("author", json);
300    if (author != null)
301      res.setAuthor(author);
302    if (json.has("time"))
303      res.setTimeElement(parseDateTime(json.get("time").getAsString()));
304    if (json.has("_time"))
305      parseElementProperties(getJObject(json, "_time"), res.getTimeElement());
306    if (json.has("text"))
307      res.setTextElement(parseMarkdown(json.get("text").getAsString()));
308    if (json.has("_text"))
309      parseElementProperties(getJObject(json, "_text"), res.getTextElement());
310  }
311
312  protected Attachment parseAttachment(JsonObject json) throws IOException, FHIRFormatError {
313    Attachment res = new Attachment();
314    parseAttachmentProperties(json, res);
315    return res;
316  }
317
318  protected void parseAttachmentProperties(JsonObject json, Attachment res) throws IOException, FHIRFormatError {
319    parseDataTypeProperties(json, res);
320    if (json.has("contentType"))
321      res.setContentTypeElement(parseCode(json.get("contentType").getAsString()));
322    if (json.has("_contentType"))
323      parseElementProperties(getJObject(json, "_contentType"), res.getContentTypeElement());
324    if (json.has("language"))
325      res.setLanguageElement(parseCode(json.get("language").getAsString()));
326    if (json.has("_language"))
327      parseElementProperties(getJObject(json, "_language"), res.getLanguageElement());
328    if (json.has("data"))
329      res.setDataElement(parseBase64Binary(json.get("data").getAsString()));
330    if (json.has("_data"))
331      parseElementProperties(getJObject(json, "_data"), res.getDataElement());
332    if (json.has("url"))
333      res.setUrlElement(parseUrl(json.get("url").getAsString()));
334    if (json.has("_url"))
335      parseElementProperties(getJObject(json, "_url"), res.getUrlElement());
336    if (json.has("size"))
337      res.setSizeElement(parseInteger64(json.get("size").getAsLong()));
338    if (json.has("_size"))
339      parseElementProperties(getJObject(json, "_size"), res.getSizeElement());
340    if (json.has("hash"))
341      res.setHashElement(parseBase64Binary(json.get("hash").getAsString()));
342    if (json.has("_hash"))
343      parseElementProperties(getJObject(json, "_hash"), res.getHashElement());
344    if (json.has("title"))
345      res.setTitleElement(parseString(json.get("title").getAsString()));
346    if (json.has("_title"))
347      parseElementProperties(getJObject(json, "_title"), res.getTitleElement());
348    if (json.has("creation"))
349      res.setCreationElement(parseDateTime(json.get("creation").getAsString()));
350    if (json.has("_creation"))
351      parseElementProperties(getJObject(json, "_creation"), res.getCreationElement());
352    if (json.has("height"))
353      res.setHeightElement(parsePositiveInt(json.get("height").getAsString()));
354    if (json.has("_height"))
355      parseElementProperties(getJObject(json, "_height"), res.getHeightElement());
356    if (json.has("width"))
357      res.setWidthElement(parsePositiveInt(json.get("width").getAsString()));
358    if (json.has("_width"))
359      parseElementProperties(getJObject(json, "_width"), res.getWidthElement());
360    if (json.has("frames"))
361      res.setFramesElement(parsePositiveInt(json.get("frames").getAsString()));
362    if (json.has("_frames"))
363      parseElementProperties(getJObject(json, "_frames"), res.getFramesElement());
364    if (json.has("duration"))
365      res.setDurationElement(parseDecimal(json.get("duration").getAsBigDecimal()));
366    if (json.has("_duration"))
367      parseElementProperties(getJObject(json, "_duration"), res.getDurationElement());
368    if (json.has("pages"))
369      res.setPagesElement(parsePositiveInt(json.get("pages").getAsString()));
370    if (json.has("_pages"))
371      parseElementProperties(getJObject(json, "_pages"), res.getPagesElement());
372  }
373
374  protected Availability parseAvailability(JsonObject json) throws IOException, FHIRFormatError {
375    Availability res = new Availability();
376    parseAvailabilityProperties(json, res);
377    return res;
378  }
379
380  protected void parseAvailabilityProperties(JsonObject json, Availability res) throws IOException, FHIRFormatError {
381    parseDataTypeProperties(json, res);
382    if (json.has("availableTime")) {
383      JsonArray array = getJArray(json, "availableTime");
384      for (int i = 0; i < array.size(); i++) {
385        res.getAvailableTime().add(parseAvailabilityAvailableTimeComponent(array.get(i).getAsJsonObject()));
386      }
387    };
388    if (json.has("notAvailableTime")) {
389      JsonArray array = getJArray(json, "notAvailableTime");
390      for (int i = 0; i < array.size(); i++) {
391        res.getNotAvailableTime().add(parseAvailabilityNotAvailableTimeComponent(array.get(i).getAsJsonObject()));
392      }
393    };
394  }
395
396  protected Availability.AvailabilityAvailableTimeComponent parseAvailabilityAvailableTimeComponent(JsonObject json) throws IOException, FHIRFormatError {
397    Availability.AvailabilityAvailableTimeComponent res = new Availability.AvailabilityAvailableTimeComponent();
398    parseAvailabilityAvailableTimeComponentProperties(json, res);
399    return res;
400  }
401
402  protected void parseAvailabilityAvailableTimeComponentProperties(JsonObject json, Availability.AvailabilityAvailableTimeComponent res) throws IOException, FHIRFormatError {
403    parseElementProperties(json, res);
404    if (json.has("daysOfWeek")) {
405      JsonArray array = getJArray(json, "daysOfWeek");
406      for (int i = 0; i < array.size(); i++) {
407        if (array.get(i).isJsonNull()) {
408          res.getDaysOfWeek().add(new Enumeration<Enumerations.DaysOfWeek>(new Enumerations.DaysOfWeekEnumFactory(), Enumerations.DaysOfWeek.NULL));
409        } else {;
410          res.getDaysOfWeek().add(parseEnumeration(array.get(i).getAsString(), Enumerations.DaysOfWeek.NULL, new Enumerations.DaysOfWeekEnumFactory()));
411        }
412      }
413    };
414    if (json.has("_daysOfWeek")) {
415      JsonArray array = getJArray(json, "_daysOfWeek");
416      for (int i = 0; i < array.size(); i++) {
417        if (i == res.getDaysOfWeek().size())
418          res.getDaysOfWeek().add(parseEnumeration(null, Enumerations.DaysOfWeek.NULL, new Enumerations.DaysOfWeekEnumFactory()));
419        if (array.get(i) instanceof JsonObject) 
420          parseElementProperties(array.get(i).getAsJsonObject(), res.getDaysOfWeek().get(i));
421      }
422    };
423    if (json.has("allDay"))
424      res.setAllDayElement(parseBoolean(json.get("allDay").getAsBoolean()));
425    if (json.has("_allDay"))
426      parseElementProperties(getJObject(json, "_allDay"), res.getAllDayElement());
427    if (json.has("availableStartTime"))
428      res.setAvailableStartTimeElement(parseTime(json.get("availableStartTime").getAsString()));
429    if (json.has("_availableStartTime"))
430      parseElementProperties(getJObject(json, "_availableStartTime"), res.getAvailableStartTimeElement());
431    if (json.has("availableEndTime"))
432      res.setAvailableEndTimeElement(parseTime(json.get("availableEndTime").getAsString()));
433    if (json.has("_availableEndTime"))
434      parseElementProperties(getJObject(json, "_availableEndTime"), res.getAvailableEndTimeElement());
435  }
436
437  protected Availability.AvailabilityNotAvailableTimeComponent parseAvailabilityNotAvailableTimeComponent(JsonObject json) throws IOException, FHIRFormatError {
438    Availability.AvailabilityNotAvailableTimeComponent res = new Availability.AvailabilityNotAvailableTimeComponent();
439    parseAvailabilityNotAvailableTimeComponentProperties(json, res);
440    return res;
441  }
442
443  protected void parseAvailabilityNotAvailableTimeComponentProperties(JsonObject json, Availability.AvailabilityNotAvailableTimeComponent res) throws IOException, FHIRFormatError {
444    parseElementProperties(json, res);
445    if (json.has("description"))
446      res.setDescriptionElement(parseString(json.get("description").getAsString()));
447    if (json.has("_description"))
448      parseElementProperties(getJObject(json, "_description"), res.getDescriptionElement());
449    if (json.has("during"))
450      res.setDuring(parsePeriod(getJObject(json, "during")));
451  }
452
453  protected CodeableConcept parseCodeableConcept(JsonObject json) throws IOException, FHIRFormatError {
454    CodeableConcept res = new CodeableConcept();
455    parseCodeableConceptProperties(json, res);
456    return res;
457  }
458
459  protected void parseCodeableConceptProperties(JsonObject json, CodeableConcept res) throws IOException, FHIRFormatError {
460    parseDataTypeProperties(json, res);
461    if (json.has("coding")) {
462      JsonArray array = getJArray(json, "coding");
463      for (int i = 0; i < array.size(); i++) {
464        res.getCoding().add(parseCoding(array.get(i).getAsJsonObject()));
465      }
466    };
467    if (json.has("text"))
468      res.setTextElement(parseString(json.get("text").getAsString()));
469    if (json.has("_text"))
470      parseElementProperties(getJObject(json, "_text"), res.getTextElement());
471  }
472
473  protected CodeableReference parseCodeableReference(JsonObject json) throws IOException, FHIRFormatError {
474    CodeableReference res = new CodeableReference();
475    parseCodeableReferenceProperties(json, res);
476    return res;
477  }
478
479  protected void parseCodeableReferenceProperties(JsonObject json, CodeableReference res) throws IOException, FHIRFormatError {
480    parseDataTypeProperties(json, res);
481    if (json.has("concept"))
482      res.setConcept(parseCodeableConcept(getJObject(json, "concept")));
483    if (json.has("reference"))
484      res.setReference(parseReference(getJObject(json, "reference")));
485  }
486
487  protected Coding parseCoding(JsonObject json) throws IOException, FHIRFormatError {
488    Coding res = new Coding();
489    parseCodingProperties(json, res);
490    return res;
491  }
492
493  protected void parseCodingProperties(JsonObject json, Coding res) throws IOException, FHIRFormatError {
494    parseDataTypeProperties(json, res);
495    if (json.has("system"))
496      res.setSystemElement(parseUri(json.get("system").getAsString()));
497    if (json.has("_system"))
498      parseElementProperties(getJObject(json, "_system"), res.getSystemElement());
499    if (json.has("version"))
500      res.setVersionElement(parseString(json.get("version").getAsString()));
501    if (json.has("_version"))
502      parseElementProperties(getJObject(json, "_version"), res.getVersionElement());
503    if (json.has("code"))
504      res.setCodeElement(parseCode(json.get("code").getAsString()));
505    if (json.has("_code"))
506      parseElementProperties(getJObject(json, "_code"), res.getCodeElement());
507    if (json.has("display"))
508      res.setDisplayElement(parseString(json.get("display").getAsString()));
509    if (json.has("_display"))
510      parseElementProperties(getJObject(json, "_display"), res.getDisplayElement());
511    if (json.has("userSelected"))
512      res.setUserSelectedElement(parseBoolean(json.get("userSelected").getAsBoolean()));
513    if (json.has("_userSelected"))
514      parseElementProperties(getJObject(json, "_userSelected"), res.getUserSelectedElement());
515  }
516
517  protected ContactDetail parseContactDetail(JsonObject json) throws IOException, FHIRFormatError {
518    ContactDetail res = new ContactDetail();
519    parseContactDetailProperties(json, res);
520    return res;
521  }
522
523  protected void parseContactDetailProperties(JsonObject json, ContactDetail res) throws IOException, FHIRFormatError {
524    parseDataTypeProperties(json, res);
525    if (json.has("name"))
526      res.setNameElement(parseString(json.get("name").getAsString()));
527    if (json.has("_name"))
528      parseElementProperties(getJObject(json, "_name"), res.getNameElement());
529    if (json.has("telecom")) {
530      JsonArray array = getJArray(json, "telecom");
531      for (int i = 0; i < array.size(); i++) {
532        res.getTelecom().add(parseContactPoint(array.get(i).getAsJsonObject()));
533      }
534    };
535  }
536
537  protected ContactPoint parseContactPoint(JsonObject json) throws IOException, FHIRFormatError {
538    ContactPoint res = new ContactPoint();
539    parseContactPointProperties(json, res);
540    return res;
541  }
542
543  protected void parseContactPointProperties(JsonObject json, ContactPoint res) throws IOException, FHIRFormatError {
544    parseDataTypeProperties(json, res);
545    if (json.has("system"))
546      res.setSystemElement(parseEnumeration(json.get("system").getAsString(), ContactPoint.ContactPointSystem.NULL, new ContactPoint.ContactPointSystemEnumFactory()));
547    if (json.has("_system"))
548      parseElementProperties(getJObject(json, "_system"), res.getSystemElement());
549    if (json.has("value"))
550      res.setValueElement(parseString(json.get("value").getAsString()));
551    if (json.has("_value"))
552      parseElementProperties(getJObject(json, "_value"), res.getValueElement());
553    if (json.has("use"))
554      res.setUseElement(parseEnumeration(json.get("use").getAsString(), ContactPoint.ContactPointUse.NULL, new ContactPoint.ContactPointUseEnumFactory()));
555    if (json.has("_use"))
556      parseElementProperties(getJObject(json, "_use"), res.getUseElement());
557    if (json.has("rank"))
558      res.setRankElement(parsePositiveInt(json.get("rank").getAsString()));
559    if (json.has("_rank"))
560      parseElementProperties(getJObject(json, "_rank"), res.getRankElement());
561    if (json.has("period"))
562      res.setPeriod(parsePeriod(getJObject(json, "period")));
563  }
564
565  protected Contributor parseContributor(JsonObject json) throws IOException, FHIRFormatError {
566    Contributor res = new Contributor();
567    parseContributorProperties(json, res);
568    return res;
569  }
570
571  protected void parseContributorProperties(JsonObject json, Contributor res) throws IOException, FHIRFormatError {
572    parseDataTypeProperties(json, res);
573    if (json.has("type"))
574      res.setTypeElement(parseEnumeration(json.get("type").getAsString(), Contributor.ContributorType.NULL, new Contributor.ContributorTypeEnumFactory()));
575    if (json.has("_type"))
576      parseElementProperties(getJObject(json, "_type"), res.getTypeElement());
577    if (json.has("name"))
578      res.setNameElement(parseString(json.get("name").getAsString()));
579    if (json.has("_name"))
580      parseElementProperties(getJObject(json, "_name"), res.getNameElement());
581    if (json.has("contact")) {
582      JsonArray array = getJArray(json, "contact");
583      for (int i = 0; i < array.size(); i++) {
584        res.getContact().add(parseContactDetail(array.get(i).getAsJsonObject()));
585      }
586    };
587  }
588
589  protected Count parseCount(JsonObject json) throws IOException, FHIRFormatError {
590    Count res = new Count();
591    parseCountProperties(json, res);
592    return res;
593  }
594
595  protected void parseCountProperties(JsonObject json, Count res) throws IOException, FHIRFormatError {
596    parseQuantityProperties(json, res);
597  }
598
599  protected DataRequirement parseDataRequirement(JsonObject json) throws IOException, FHIRFormatError {
600    DataRequirement res = new DataRequirement();
601    parseDataRequirementProperties(json, res);
602    return res;
603  }
604
605  protected void parseDataRequirementProperties(JsonObject json, DataRequirement res) throws IOException, FHIRFormatError {
606    parseDataTypeProperties(json, res);
607    if (json.has("type"))
608      res.setTypeElement(parseEnumeration(json.get("type").getAsString(), Enumerations.FHIRTypes.NULL, new Enumerations.FHIRTypesEnumFactory()));
609    if (json.has("_type"))
610      parseElementProperties(getJObject(json, "_type"), res.getTypeElement());
611    if (json.has("profile")) {
612      JsonArray array = getJArray(json, "profile");
613      for (int i = 0; i < array.size(); i++) {
614        if (array.get(i).isJsonNull()) {
615          res.getProfile().add(new CanonicalType());
616        } else {;
617          res.getProfile().add(parseCanonical(array.get(i).getAsString()));
618        }
619      }
620    };
621    if (json.has("_profile")) {
622      JsonArray array = getJArray(json, "_profile");
623      for (int i = 0; i < array.size(); i++) {
624        if (i == res.getProfile().size())
625          res.getProfile().add(parseCanonical(null));
626        if (array.get(i) instanceof JsonObject) 
627          parseElementProperties(array.get(i).getAsJsonObject(), res.getProfile().get(i));
628      }
629    };
630    DataType subject = parseType("subject", json);
631    if (subject != null)
632      res.setSubject(subject);
633    if (json.has("mustSupport")) {
634      JsonArray array = getJArray(json, "mustSupport");
635      for (int i = 0; i < array.size(); i++) {
636        if (array.get(i).isJsonNull()) {
637          res.getMustSupport().add(new StringType());
638        } else {;
639          res.getMustSupport().add(parseString(array.get(i).getAsString()));
640        }
641      }
642    };
643    if (json.has("_mustSupport")) {
644      JsonArray array = getJArray(json, "_mustSupport");
645      for (int i = 0; i < array.size(); i++) {
646        if (i == res.getMustSupport().size())
647          res.getMustSupport().add(parseString(null));
648        if (array.get(i) instanceof JsonObject) 
649          parseElementProperties(array.get(i).getAsJsonObject(), res.getMustSupport().get(i));
650      }
651    };
652    if (json.has("codeFilter")) {
653      JsonArray array = getJArray(json, "codeFilter");
654      for (int i = 0; i < array.size(); i++) {
655        res.getCodeFilter().add(parseDataRequirementCodeFilterComponent(array.get(i).getAsJsonObject()));
656      }
657    };
658    if (json.has("dateFilter")) {
659      JsonArray array = getJArray(json, "dateFilter");
660      for (int i = 0; i < array.size(); i++) {
661        res.getDateFilter().add(parseDataRequirementDateFilterComponent(array.get(i).getAsJsonObject()));
662      }
663    };
664    if (json.has("valueFilter")) {
665      JsonArray array = getJArray(json, "valueFilter");
666      for (int i = 0; i < array.size(); i++) {
667        res.getValueFilter().add(parseDataRequirementValueFilterComponent(array.get(i).getAsJsonObject()));
668      }
669    };
670    if (json.has("limit"))
671      res.setLimitElement(parsePositiveInt(json.get("limit").getAsString()));
672    if (json.has("_limit"))
673      parseElementProperties(getJObject(json, "_limit"), res.getLimitElement());
674    if (json.has("sort")) {
675      JsonArray array = getJArray(json, "sort");
676      for (int i = 0; i < array.size(); i++) {
677        res.getSort().add(parseDataRequirementSortComponent(array.get(i).getAsJsonObject()));
678      }
679    };
680  }
681
682  protected DataRequirement.DataRequirementCodeFilterComponent parseDataRequirementCodeFilterComponent(JsonObject json) throws IOException, FHIRFormatError {
683    DataRequirement.DataRequirementCodeFilterComponent res = new DataRequirement.DataRequirementCodeFilterComponent();
684    parseDataRequirementCodeFilterComponentProperties(json, res);
685    return res;
686  }
687
688  protected void parseDataRequirementCodeFilterComponentProperties(JsonObject json, DataRequirement.DataRequirementCodeFilterComponent res) throws IOException, FHIRFormatError {
689    parseElementProperties(json, res);
690    if (json.has("path"))
691      res.setPathElement(parseString(json.get("path").getAsString()));
692    if (json.has("_path"))
693      parseElementProperties(getJObject(json, "_path"), res.getPathElement());
694    if (json.has("searchParam"))
695      res.setSearchParamElement(parseString(json.get("searchParam").getAsString()));
696    if (json.has("_searchParam"))
697      parseElementProperties(getJObject(json, "_searchParam"), res.getSearchParamElement());
698    if (json.has("valueSet"))
699      res.setValueSetElement(parseCanonical(json.get("valueSet").getAsString()));
700    if (json.has("_valueSet"))
701      parseElementProperties(getJObject(json, "_valueSet"), res.getValueSetElement());
702    if (json.has("code")) {
703      JsonArray array = getJArray(json, "code");
704      for (int i = 0; i < array.size(); i++) {
705        res.getCode().add(parseCoding(array.get(i).getAsJsonObject()));
706      }
707    };
708  }
709
710  protected DataRequirement.DataRequirementDateFilterComponent parseDataRequirementDateFilterComponent(JsonObject json) throws IOException, FHIRFormatError {
711    DataRequirement.DataRequirementDateFilterComponent res = new DataRequirement.DataRequirementDateFilterComponent();
712    parseDataRequirementDateFilterComponentProperties(json, res);
713    return res;
714  }
715
716  protected void parseDataRequirementDateFilterComponentProperties(JsonObject json, DataRequirement.DataRequirementDateFilterComponent res) throws IOException, FHIRFormatError {
717    parseElementProperties(json, res);
718    if (json.has("path"))
719      res.setPathElement(parseString(json.get("path").getAsString()));
720    if (json.has("_path"))
721      parseElementProperties(getJObject(json, "_path"), res.getPathElement());
722    if (json.has("searchParam"))
723      res.setSearchParamElement(parseString(json.get("searchParam").getAsString()));
724    if (json.has("_searchParam"))
725      parseElementProperties(getJObject(json, "_searchParam"), res.getSearchParamElement());
726    DataType value = parseType("value", json);
727    if (value != null)
728      res.setValue(value);
729  }
730
731  protected DataRequirement.DataRequirementValueFilterComponent parseDataRequirementValueFilterComponent(JsonObject json) throws IOException, FHIRFormatError {
732    DataRequirement.DataRequirementValueFilterComponent res = new DataRequirement.DataRequirementValueFilterComponent();
733    parseDataRequirementValueFilterComponentProperties(json, res);
734    return res;
735  }
736
737  protected void parseDataRequirementValueFilterComponentProperties(JsonObject json, DataRequirement.DataRequirementValueFilterComponent res) throws IOException, FHIRFormatError {
738    parseElementProperties(json, res);
739    if (json.has("path"))
740      res.setPathElement(parseString(json.get("path").getAsString()));
741    if (json.has("_path"))
742      parseElementProperties(getJObject(json, "_path"), res.getPathElement());
743    if (json.has("searchParam"))
744      res.setSearchParamElement(parseString(json.get("searchParam").getAsString()));
745    if (json.has("_searchParam"))
746      parseElementProperties(getJObject(json, "_searchParam"), res.getSearchParamElement());
747    if (json.has("comparator"))
748      res.setComparatorElement(parseEnumeration(json.get("comparator").getAsString(), DataRequirement.ValueFilterComparator.NULL, new DataRequirement.ValueFilterComparatorEnumFactory()));
749    if (json.has("_comparator"))
750      parseElementProperties(getJObject(json, "_comparator"), res.getComparatorElement());
751    DataType value = parseType("value", json);
752    if (value != null)
753      res.setValue(value);
754  }
755
756  protected DataRequirement.DataRequirementSortComponent parseDataRequirementSortComponent(JsonObject json) throws IOException, FHIRFormatError {
757    DataRequirement.DataRequirementSortComponent res = new DataRequirement.DataRequirementSortComponent();
758    parseDataRequirementSortComponentProperties(json, res);
759    return res;
760  }
761
762  protected void parseDataRequirementSortComponentProperties(JsonObject json, DataRequirement.DataRequirementSortComponent res) throws IOException, FHIRFormatError {
763    parseElementProperties(json, res);
764    if (json.has("path"))
765      res.setPathElement(parseString(json.get("path").getAsString()));
766    if (json.has("_path"))
767      parseElementProperties(getJObject(json, "_path"), res.getPathElement());
768    if (json.has("direction"))
769      res.setDirectionElement(parseEnumeration(json.get("direction").getAsString(), DataRequirement.SortDirection.NULL, new DataRequirement.SortDirectionEnumFactory()));
770    if (json.has("_direction"))
771      parseElementProperties(getJObject(json, "_direction"), res.getDirectionElement());
772  }
773
774  protected Distance parseDistance(JsonObject json) throws IOException, FHIRFormatError {
775    Distance res = new Distance();
776    parseDistanceProperties(json, res);
777    return res;
778  }
779
780  protected void parseDistanceProperties(JsonObject json, Distance res) throws IOException, FHIRFormatError {
781    parseQuantityProperties(json, res);
782  }
783
784  protected Dosage parseDosage(JsonObject json) throws IOException, FHIRFormatError {
785    Dosage res = new Dosage();
786    parseDosageProperties(json, res);
787    return res;
788  }
789
790  protected void parseDosageProperties(JsonObject json, Dosage res) throws IOException, FHIRFormatError {
791    parseBackboneTypeProperties(json, res);
792    if (json.has("sequence"))
793      res.setSequenceElement(parseInteger(json.get("sequence").getAsLong()));
794    if (json.has("_sequence"))
795      parseElementProperties(getJObject(json, "_sequence"), res.getSequenceElement());
796    if (json.has("text"))
797      res.setTextElement(parseString(json.get("text").getAsString()));
798    if (json.has("_text"))
799      parseElementProperties(getJObject(json, "_text"), res.getTextElement());
800    if (json.has("additionalInstruction")) {
801      JsonArray array = getJArray(json, "additionalInstruction");
802      for (int i = 0; i < array.size(); i++) {
803        res.getAdditionalInstruction().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
804      }
805    };
806    if (json.has("patientInstruction"))
807      res.setPatientInstructionElement(parseString(json.get("patientInstruction").getAsString()));
808    if (json.has("_patientInstruction"))
809      parseElementProperties(getJObject(json, "_patientInstruction"), res.getPatientInstructionElement());
810    if (json.has("timing"))
811      res.setTiming(parseTiming(getJObject(json, "timing")));
812    if (json.has("asNeeded"))
813      res.setAsNeededElement(parseBoolean(json.get("asNeeded").getAsBoolean()));
814    if (json.has("_asNeeded"))
815      parseElementProperties(getJObject(json, "_asNeeded"), res.getAsNeededElement());
816    if (json.has("asNeededFor")) {
817      JsonArray array = getJArray(json, "asNeededFor");
818      for (int i = 0; i < array.size(); i++) {
819        res.getAsNeededFor().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
820      }
821    };
822    if (json.has("site"))
823      res.setSite(parseCodeableConcept(getJObject(json, "site")));
824    if (json.has("route"))
825      res.setRoute(parseCodeableConcept(getJObject(json, "route")));
826    if (json.has("method"))
827      res.setMethod(parseCodeableConcept(getJObject(json, "method")));
828    if (json.has("doseAndRate")) {
829      JsonArray array = getJArray(json, "doseAndRate");
830      for (int i = 0; i < array.size(); i++) {
831        res.getDoseAndRate().add(parseDosageDoseAndRateComponent(array.get(i).getAsJsonObject()));
832      }
833    };
834    if (json.has("maxDosePerPeriod")) {
835      JsonArray array = getJArray(json, "maxDosePerPeriod");
836      for (int i = 0; i < array.size(); i++) {
837        res.getMaxDosePerPeriod().add(parseRatio(array.get(i).getAsJsonObject()));
838      }
839    };
840    if (json.has("maxDosePerAdministration"))
841      res.setMaxDosePerAdministration(parseQuantity(getJObject(json, "maxDosePerAdministration")));
842    if (json.has("maxDosePerLifetime"))
843      res.setMaxDosePerLifetime(parseQuantity(getJObject(json, "maxDosePerLifetime")));
844  }
845
846  protected Dosage.DosageDoseAndRateComponent parseDosageDoseAndRateComponent(JsonObject json) throws IOException, FHIRFormatError {
847    Dosage.DosageDoseAndRateComponent res = new Dosage.DosageDoseAndRateComponent();
848    parseDosageDoseAndRateComponentProperties(json, res);
849    return res;
850  }
851
852  protected void parseDosageDoseAndRateComponentProperties(JsonObject json, Dosage.DosageDoseAndRateComponent res) throws IOException, FHIRFormatError {
853    parseElementProperties(json, res);
854    if (json.has("type"))
855      res.setType(parseCodeableConcept(getJObject(json, "type")));
856    DataType dose = parseType("dose", json);
857    if (dose != null)
858      res.setDose(dose);
859    DataType rate = parseType("rate", json);
860    if (rate != null)
861      res.setRate(rate);
862  }
863
864  protected Duration parseDuration(JsonObject json) throws IOException, FHIRFormatError {
865    Duration res = new Duration();
866    parseDurationProperties(json, res);
867    return res;
868  }
869
870  protected void parseDurationProperties(JsonObject json, Duration res) throws IOException, FHIRFormatError {
871    parseQuantityProperties(json, res);
872  }
873
874  protected ElementDefinition parseElementDefinition(JsonObject json) throws IOException, FHIRFormatError {
875    ElementDefinition res = new ElementDefinition();
876    parseElementDefinitionProperties(json, res);
877    return res;
878  }
879
880  protected void parseElementDefinitionProperties(JsonObject json, ElementDefinition res) throws IOException, FHIRFormatError {
881    parseBackboneTypeProperties(json, res);
882    if (json.has("path"))
883      res.setPathElement(parseString(json.get("path").getAsString()));
884    if (json.has("_path"))
885      parseElementProperties(getJObject(json, "_path"), res.getPathElement());
886    if (json.has("representation")) {
887      JsonArray array = getJArray(json, "representation");
888      for (int i = 0; i < array.size(); i++) {
889        if (array.get(i).isJsonNull()) {
890          res.getRepresentation().add(new Enumeration<ElementDefinition.PropertyRepresentation>(new ElementDefinition.PropertyRepresentationEnumFactory(), ElementDefinition.PropertyRepresentation.NULL));
891        } else {;
892          res.getRepresentation().add(parseEnumeration(array.get(i).getAsString(), ElementDefinition.PropertyRepresentation.NULL, new ElementDefinition.PropertyRepresentationEnumFactory()));
893        }
894      }
895    };
896    if (json.has("_representation")) {
897      JsonArray array = getJArray(json, "_representation");
898      for (int i = 0; i < array.size(); i++) {
899        if (i == res.getRepresentation().size())
900          res.getRepresentation().add(parseEnumeration(null, ElementDefinition.PropertyRepresentation.NULL, new ElementDefinition.PropertyRepresentationEnumFactory()));
901        if (array.get(i) instanceof JsonObject) 
902          parseElementProperties(array.get(i).getAsJsonObject(), res.getRepresentation().get(i));
903      }
904    };
905    if (json.has("sliceName"))
906      res.setSliceNameElement(parseString(json.get("sliceName").getAsString()));
907    if (json.has("_sliceName"))
908      parseElementProperties(getJObject(json, "_sliceName"), res.getSliceNameElement());
909    if (json.has("sliceIsConstraining"))
910      res.setSliceIsConstrainingElement(parseBoolean(json.get("sliceIsConstraining").getAsBoolean()));
911    if (json.has("_sliceIsConstraining"))
912      parseElementProperties(getJObject(json, "_sliceIsConstraining"), res.getSliceIsConstrainingElement());
913    if (json.has("label"))
914      res.setLabelElement(parseString(json.get("label").getAsString()));
915    if (json.has("_label"))
916      parseElementProperties(getJObject(json, "_label"), res.getLabelElement());
917    if (json.has("code")) {
918      JsonArray array = getJArray(json, "code");
919      for (int i = 0; i < array.size(); i++) {
920        res.getCode().add(parseCoding(array.get(i).getAsJsonObject()));
921      }
922    };
923    if (json.has("slicing"))
924      res.setSlicing(parseElementDefinitionSlicingComponent(getJObject(json, "slicing")));
925    if (json.has("short"))
926      res.setShortElement(parseString(json.get("short").getAsString()));
927    if (json.has("_short"))
928      parseElementProperties(getJObject(json, "_short"), res.getShortElement());
929    if (json.has("definition"))
930      res.setDefinitionElement(parseMarkdown(json.get("definition").getAsString()));
931    if (json.has("_definition"))
932      parseElementProperties(getJObject(json, "_definition"), res.getDefinitionElement());
933    if (json.has("comment"))
934      res.setCommentElement(parseMarkdown(json.get("comment").getAsString()));
935    if (json.has("_comment"))
936      parseElementProperties(getJObject(json, "_comment"), res.getCommentElement());
937    if (json.has("requirements"))
938      res.setRequirementsElement(parseMarkdown(json.get("requirements").getAsString()));
939    if (json.has("_requirements"))
940      parseElementProperties(getJObject(json, "_requirements"), res.getRequirementsElement());
941    if (json.has("alias")) {
942      JsonArray array = getJArray(json, "alias");
943      for (int i = 0; i < array.size(); i++) {
944        if (array.get(i).isJsonNull()) {
945          res.getAlias().add(new StringType());
946        } else {;
947          res.getAlias().add(parseString(array.get(i).getAsString()));
948        }
949      }
950    };
951    if (json.has("_alias")) {
952      JsonArray array = getJArray(json, "_alias");
953      for (int i = 0; i < array.size(); i++) {
954        if (i == res.getAlias().size())
955          res.getAlias().add(parseString(null));
956        if (array.get(i) instanceof JsonObject) 
957          parseElementProperties(array.get(i).getAsJsonObject(), res.getAlias().get(i));
958      }
959    };
960    if (json.has("min"))
961      res.setMinElement(parseUnsignedInt(json.get("min").getAsString()));
962    if (json.has("_min"))
963      parseElementProperties(getJObject(json, "_min"), res.getMinElement());
964    if (json.has("max"))
965      res.setMaxElement(parseString(json.get("max").getAsString()));
966    if (json.has("_max"))
967      parseElementProperties(getJObject(json, "_max"), res.getMaxElement());
968    if (json.has("base"))
969      res.setBase(parseElementDefinitionBaseComponent(getJObject(json, "base")));
970    if (json.has("contentReference"))
971      res.setContentReferenceElement(parseUri(json.get("contentReference").getAsString()));
972    if (json.has("_contentReference"))
973      parseElementProperties(getJObject(json, "_contentReference"), res.getContentReferenceElement());
974    if (json.has("type")) {
975      JsonArray array = getJArray(json, "type");
976      for (int i = 0; i < array.size(); i++) {
977        res.getType().add(parseElementDefinitionTypeRefComponent(array.get(i).getAsJsonObject()));
978      }
979    };
980    DataType defaultValue = parseType("defaultValue", json);
981    if (defaultValue != null)
982      res.setDefaultValue(defaultValue);
983    if (json.has("meaningWhenMissing"))
984      res.setMeaningWhenMissingElement(parseMarkdown(json.get("meaningWhenMissing").getAsString()));
985    if (json.has("_meaningWhenMissing"))
986      parseElementProperties(getJObject(json, "_meaningWhenMissing"), res.getMeaningWhenMissingElement());
987    if (json.has("orderMeaning"))
988      res.setOrderMeaningElement(parseString(json.get("orderMeaning").getAsString()));
989    if (json.has("_orderMeaning"))
990      parseElementProperties(getJObject(json, "_orderMeaning"), res.getOrderMeaningElement());
991    DataType fixed = parseType("fixed", json);
992    if (fixed != null)
993      res.setFixed(fixed);
994    DataType pattern = parseType("pattern", json);
995    if (pattern != null)
996      res.setPattern(pattern);
997    if (json.has("example")) {
998      JsonArray array = getJArray(json, "example");
999      for (int i = 0; i < array.size(); i++) {
1000        res.getExample().add(parseElementDefinitionExampleComponent(array.get(i).getAsJsonObject()));
1001      }
1002    };
1003    DataType minValue = parseType("minValue", json);
1004    if (minValue != null)
1005      res.setMinValue(minValue);
1006    DataType maxValue = parseType("maxValue", json);
1007    if (maxValue != null)
1008      res.setMaxValue(maxValue);
1009    if (json.has("maxLength"))
1010      res.setMaxLengthElement(parseInteger(json.get("maxLength").getAsLong()));
1011    if (json.has("_maxLength"))
1012      parseElementProperties(getJObject(json, "_maxLength"), res.getMaxLengthElement());
1013    if (json.has("condition")) {
1014      JsonArray array = getJArray(json, "condition");
1015      for (int i = 0; i < array.size(); i++) {
1016        if (array.get(i).isJsonNull()) {
1017          res.getCondition().add(new IdType());
1018        } else {;
1019          res.getCondition().add(parseId(array.get(i).getAsString()));
1020        }
1021      }
1022    };
1023    if (json.has("_condition")) {
1024      JsonArray array = getJArray(json, "_condition");
1025      for (int i = 0; i < array.size(); i++) {
1026        if (i == res.getCondition().size())
1027          res.getCondition().add(parseId(null));
1028        if (array.get(i) instanceof JsonObject) 
1029          parseElementProperties(array.get(i).getAsJsonObject(), res.getCondition().get(i));
1030      }
1031    };
1032    if (json.has("constraint")) {
1033      JsonArray array = getJArray(json, "constraint");
1034      for (int i = 0; i < array.size(); i++) {
1035        res.getConstraint().add(parseElementDefinitionConstraintComponent(array.get(i).getAsJsonObject()));
1036      }
1037    };
1038    if (json.has("mustHaveValue"))
1039      res.setMustHaveValueElement(parseBoolean(json.get("mustHaveValue").getAsBoolean()));
1040    if (json.has("_mustHaveValue"))
1041      parseElementProperties(getJObject(json, "_mustHaveValue"), res.getMustHaveValueElement());
1042    if (json.has("valueAlternatives")) {
1043      JsonArray array = getJArray(json, "valueAlternatives");
1044      for (int i = 0; i < array.size(); i++) {
1045        if (array.get(i).isJsonNull()) {
1046          res.getValueAlternatives().add(new CanonicalType());
1047        } else {;
1048          res.getValueAlternatives().add(parseCanonical(array.get(i).getAsString()));
1049        }
1050      }
1051    };
1052    if (json.has("_valueAlternatives")) {
1053      JsonArray array = getJArray(json, "_valueAlternatives");
1054      for (int i = 0; i < array.size(); i++) {
1055        if (i == res.getValueAlternatives().size())
1056          res.getValueAlternatives().add(parseCanonical(null));
1057        if (array.get(i) instanceof JsonObject) 
1058          parseElementProperties(array.get(i).getAsJsonObject(), res.getValueAlternatives().get(i));
1059      }
1060    };
1061    if (json.has("mustSupport"))
1062      res.setMustSupportElement(parseBoolean(json.get("mustSupport").getAsBoolean()));
1063    if (json.has("_mustSupport"))
1064      parseElementProperties(getJObject(json, "_mustSupport"), res.getMustSupportElement());
1065    if (json.has("isModifier"))
1066      res.setIsModifierElement(parseBoolean(json.get("isModifier").getAsBoolean()));
1067    if (json.has("_isModifier"))
1068      parseElementProperties(getJObject(json, "_isModifier"), res.getIsModifierElement());
1069    if (json.has("isModifierReason"))
1070      res.setIsModifierReasonElement(parseString(json.get("isModifierReason").getAsString()));
1071    if (json.has("_isModifierReason"))
1072      parseElementProperties(getJObject(json, "_isModifierReason"), res.getIsModifierReasonElement());
1073    if (json.has("isSummary"))
1074      res.setIsSummaryElement(parseBoolean(json.get("isSummary").getAsBoolean()));
1075    if (json.has("_isSummary"))
1076      parseElementProperties(getJObject(json, "_isSummary"), res.getIsSummaryElement());
1077    if (json.has("binding"))
1078      res.setBinding(parseElementDefinitionBindingComponent(getJObject(json, "binding")));
1079    if (json.has("mapping")) {
1080      JsonArray array = getJArray(json, "mapping");
1081      for (int i = 0; i < array.size(); i++) {
1082        res.getMapping().add(parseElementDefinitionMappingComponent(array.get(i).getAsJsonObject()));
1083      }
1084    };
1085  }
1086
1087  protected ElementDefinition.ElementDefinitionSlicingComponent parseElementDefinitionSlicingComponent(JsonObject json) throws IOException, FHIRFormatError {
1088    ElementDefinition.ElementDefinitionSlicingComponent res = new ElementDefinition.ElementDefinitionSlicingComponent();
1089    parseElementDefinitionSlicingComponentProperties(json, res);
1090    return res;
1091  }
1092
1093  protected void parseElementDefinitionSlicingComponentProperties(JsonObject json, ElementDefinition.ElementDefinitionSlicingComponent res) throws IOException, FHIRFormatError {
1094    parseElementProperties(json, res);
1095    if (json.has("discriminator")) {
1096      JsonArray array = getJArray(json, "discriminator");
1097      for (int i = 0; i < array.size(); i++) {
1098        res.getDiscriminator().add(parseElementDefinitionSlicingDiscriminatorComponent(array.get(i).getAsJsonObject()));
1099      }
1100    };
1101    if (json.has("description"))
1102      res.setDescriptionElement(parseString(json.get("description").getAsString()));
1103    if (json.has("_description"))
1104      parseElementProperties(getJObject(json, "_description"), res.getDescriptionElement());
1105    if (json.has("ordered"))
1106      res.setOrderedElement(parseBoolean(json.get("ordered").getAsBoolean()));
1107    if (json.has("_ordered"))
1108      parseElementProperties(getJObject(json, "_ordered"), res.getOrderedElement());
1109    if (json.has("rules"))
1110      res.setRulesElement(parseEnumeration(json.get("rules").getAsString(), ElementDefinition.SlicingRules.NULL, new ElementDefinition.SlicingRulesEnumFactory()));
1111    if (json.has("_rules"))
1112      parseElementProperties(getJObject(json, "_rules"), res.getRulesElement());
1113  }
1114
1115  protected ElementDefinition.ElementDefinitionSlicingDiscriminatorComponent parseElementDefinitionSlicingDiscriminatorComponent(JsonObject json) throws IOException, FHIRFormatError {
1116    ElementDefinition.ElementDefinitionSlicingDiscriminatorComponent res = new ElementDefinition.ElementDefinitionSlicingDiscriminatorComponent();
1117    parseElementDefinitionSlicingDiscriminatorComponentProperties(json, res);
1118    return res;
1119  }
1120
1121  protected void parseElementDefinitionSlicingDiscriminatorComponentProperties(JsonObject json, ElementDefinition.ElementDefinitionSlicingDiscriminatorComponent res) throws IOException, FHIRFormatError {
1122    parseElementProperties(json, res);
1123    if (json.has("type"))
1124      res.setTypeElement(parseEnumeration(json.get("type").getAsString(), ElementDefinition.DiscriminatorType.NULL, new ElementDefinition.DiscriminatorTypeEnumFactory()));
1125    if (json.has("_type"))
1126      parseElementProperties(getJObject(json, "_type"), res.getTypeElement());
1127    if (json.has("path"))
1128      res.setPathElement(parseString(json.get("path").getAsString()));
1129    if (json.has("_path"))
1130      parseElementProperties(getJObject(json, "_path"), res.getPathElement());
1131  }
1132
1133  protected ElementDefinition.ElementDefinitionBaseComponent parseElementDefinitionBaseComponent(JsonObject json) throws IOException, FHIRFormatError {
1134    ElementDefinition.ElementDefinitionBaseComponent res = new ElementDefinition.ElementDefinitionBaseComponent();
1135    parseElementDefinitionBaseComponentProperties(json, res);
1136    return res;
1137  }
1138
1139  protected void parseElementDefinitionBaseComponentProperties(JsonObject json, ElementDefinition.ElementDefinitionBaseComponent res) throws IOException, FHIRFormatError {
1140    parseElementProperties(json, res);
1141    if (json.has("path"))
1142      res.setPathElement(parseString(json.get("path").getAsString()));
1143    if (json.has("_path"))
1144      parseElementProperties(getJObject(json, "_path"), res.getPathElement());
1145    if (json.has("min"))
1146      res.setMinElement(parseUnsignedInt(json.get("min").getAsString()));
1147    if (json.has("_min"))
1148      parseElementProperties(getJObject(json, "_min"), res.getMinElement());
1149    if (json.has("max"))
1150      res.setMaxElement(parseString(json.get("max").getAsString()));
1151    if (json.has("_max"))
1152      parseElementProperties(getJObject(json, "_max"), res.getMaxElement());
1153  }
1154
1155  protected ElementDefinition.TypeRefComponent parseElementDefinitionTypeRefComponent(JsonObject json) throws IOException, FHIRFormatError {
1156    ElementDefinition.TypeRefComponent res = new ElementDefinition.TypeRefComponent();
1157    parseElementDefinitionTypeRefComponentProperties(json, res);
1158    return res;
1159  }
1160
1161  protected void parseElementDefinitionTypeRefComponentProperties(JsonObject json, ElementDefinition.TypeRefComponent res) throws IOException, FHIRFormatError {
1162    parseElementProperties(json, res);
1163    if (json.has("code"))
1164      res.setCodeElement(parseUri(json.get("code").getAsString()));
1165    if (json.has("_code"))
1166      parseElementProperties(getJObject(json, "_code"), res.getCodeElement());
1167    if (json.has("profile")) {
1168      JsonArray array = getJArray(json, "profile");
1169      for (int i = 0; i < array.size(); i++) {
1170        if (array.get(i).isJsonNull()) {
1171          res.getProfile().add(new CanonicalType());
1172        } else {;
1173          res.getProfile().add(parseCanonical(array.get(i).getAsString()));
1174        }
1175      }
1176    };
1177    if (json.has("_profile")) {
1178      JsonArray array = getJArray(json, "_profile");
1179      for (int i = 0; i < array.size(); i++) {
1180        if (i == res.getProfile().size())
1181          res.getProfile().add(parseCanonical(null));
1182        if (array.get(i) instanceof JsonObject) 
1183          parseElementProperties(array.get(i).getAsJsonObject(), res.getProfile().get(i));
1184      }
1185    };
1186    if (json.has("targetProfile")) {
1187      JsonArray array = getJArray(json, "targetProfile");
1188      for (int i = 0; i < array.size(); i++) {
1189        if (array.get(i).isJsonNull()) {
1190          res.getTargetProfile().add(new CanonicalType());
1191        } else {;
1192          res.getTargetProfile().add(parseCanonical(array.get(i).getAsString()));
1193        }
1194      }
1195    };
1196    if (json.has("_targetProfile")) {
1197      JsonArray array = getJArray(json, "_targetProfile");
1198      for (int i = 0; i < array.size(); i++) {
1199        if (i == res.getTargetProfile().size())
1200          res.getTargetProfile().add(parseCanonical(null));
1201        if (array.get(i) instanceof JsonObject) 
1202          parseElementProperties(array.get(i).getAsJsonObject(), res.getTargetProfile().get(i));
1203      }
1204    };
1205    if (json.has("aggregation")) {
1206      JsonArray array = getJArray(json, "aggregation");
1207      for (int i = 0; i < array.size(); i++) {
1208        if (array.get(i).isJsonNull()) {
1209          res.getAggregation().add(new Enumeration<ElementDefinition.AggregationMode>(new ElementDefinition.AggregationModeEnumFactory(), ElementDefinition.AggregationMode.NULL));
1210        } else {;
1211          res.getAggregation().add(parseEnumeration(array.get(i).getAsString(), ElementDefinition.AggregationMode.NULL, new ElementDefinition.AggregationModeEnumFactory()));
1212        }
1213      }
1214    };
1215    if (json.has("_aggregation")) {
1216      JsonArray array = getJArray(json, "_aggregation");
1217      for (int i = 0; i < array.size(); i++) {
1218        if (i == res.getAggregation().size())
1219          res.getAggregation().add(parseEnumeration(null, ElementDefinition.AggregationMode.NULL, new ElementDefinition.AggregationModeEnumFactory()));
1220        if (array.get(i) instanceof JsonObject) 
1221          parseElementProperties(array.get(i).getAsJsonObject(), res.getAggregation().get(i));
1222      }
1223    };
1224    if (json.has("versioning"))
1225      res.setVersioningElement(parseEnumeration(json.get("versioning").getAsString(), ElementDefinition.ReferenceVersionRules.NULL, new ElementDefinition.ReferenceVersionRulesEnumFactory()));
1226    if (json.has("_versioning"))
1227      parseElementProperties(getJObject(json, "_versioning"), res.getVersioningElement());
1228  }
1229
1230  protected ElementDefinition.ElementDefinitionExampleComponent parseElementDefinitionExampleComponent(JsonObject json) throws IOException, FHIRFormatError {
1231    ElementDefinition.ElementDefinitionExampleComponent res = new ElementDefinition.ElementDefinitionExampleComponent();
1232    parseElementDefinitionExampleComponentProperties(json, res);
1233    return res;
1234  }
1235
1236  protected void parseElementDefinitionExampleComponentProperties(JsonObject json, ElementDefinition.ElementDefinitionExampleComponent res) throws IOException, FHIRFormatError {
1237    parseElementProperties(json, res);
1238    if (json.has("label"))
1239      res.setLabelElement(parseString(json.get("label").getAsString()));
1240    if (json.has("_label"))
1241      parseElementProperties(getJObject(json, "_label"), res.getLabelElement());
1242    DataType value = parseType("value", json);
1243    if (value != null)
1244      res.setValue(value);
1245  }
1246
1247  protected ElementDefinition.ElementDefinitionConstraintComponent parseElementDefinitionConstraintComponent(JsonObject json) throws IOException, FHIRFormatError {
1248    ElementDefinition.ElementDefinitionConstraintComponent res = new ElementDefinition.ElementDefinitionConstraintComponent();
1249    parseElementDefinitionConstraintComponentProperties(json, res);
1250    return res;
1251  }
1252
1253  protected void parseElementDefinitionConstraintComponentProperties(JsonObject json, ElementDefinition.ElementDefinitionConstraintComponent res) throws IOException, FHIRFormatError {
1254    parseElementProperties(json, res);
1255    if (json.has("key"))
1256      res.setKeyElement(parseId(json.get("key").getAsString()));
1257    if (json.has("_key"))
1258      parseElementProperties(getJObject(json, "_key"), res.getKeyElement());
1259    if (json.has("requirements"))
1260      res.setRequirementsElement(parseMarkdown(json.get("requirements").getAsString()));
1261    if (json.has("_requirements"))
1262      parseElementProperties(getJObject(json, "_requirements"), res.getRequirementsElement());
1263    if (json.has("severity"))
1264      res.setSeverityElement(parseEnumeration(json.get("severity").getAsString(), ElementDefinition.ConstraintSeverity.NULL, new ElementDefinition.ConstraintSeverityEnumFactory()));
1265    if (json.has("_severity"))
1266      parseElementProperties(getJObject(json, "_severity"), res.getSeverityElement());
1267    if (json.has("suppress"))
1268      res.setSuppressElement(parseBoolean(json.get("suppress").getAsBoolean()));
1269    if (json.has("_suppress"))
1270      parseElementProperties(getJObject(json, "_suppress"), res.getSuppressElement());
1271    if (json.has("human"))
1272      res.setHumanElement(parseString(json.get("human").getAsString()));
1273    if (json.has("_human"))
1274      parseElementProperties(getJObject(json, "_human"), res.getHumanElement());
1275    if (json.has("expression"))
1276      res.setExpressionElement(parseString(json.get("expression").getAsString()));
1277    if (json.has("_expression"))
1278      parseElementProperties(getJObject(json, "_expression"), res.getExpressionElement());
1279    if (json.has("source"))
1280      res.setSourceElement(parseCanonical(json.get("source").getAsString()));
1281    if (json.has("_source"))
1282      parseElementProperties(getJObject(json, "_source"), res.getSourceElement());
1283  }
1284
1285  protected ElementDefinition.ElementDefinitionBindingComponent parseElementDefinitionBindingComponent(JsonObject json) throws IOException, FHIRFormatError {
1286    ElementDefinition.ElementDefinitionBindingComponent res = new ElementDefinition.ElementDefinitionBindingComponent();
1287    parseElementDefinitionBindingComponentProperties(json, res);
1288    return res;
1289  }
1290
1291  protected void parseElementDefinitionBindingComponentProperties(JsonObject json, ElementDefinition.ElementDefinitionBindingComponent res) throws IOException, FHIRFormatError {
1292    parseElementProperties(json, res);
1293    if (json.has("strength"))
1294      res.setStrengthElement(parseEnumeration(json.get("strength").getAsString(), Enumerations.BindingStrength.NULL, new Enumerations.BindingStrengthEnumFactory()));
1295    if (json.has("_strength"))
1296      parseElementProperties(getJObject(json, "_strength"), res.getStrengthElement());
1297    if (json.has("description"))
1298      res.setDescriptionElement(parseMarkdown(json.get("description").getAsString()));
1299    if (json.has("_description"))
1300      parseElementProperties(getJObject(json, "_description"), res.getDescriptionElement());
1301    if (json.has("valueSet"))
1302      res.setValueSetElement(parseCanonical(json.get("valueSet").getAsString()));
1303    if (json.has("_valueSet"))
1304      parseElementProperties(getJObject(json, "_valueSet"), res.getValueSetElement());
1305    if (json.has("additional")) {
1306      JsonArray array = getJArray(json, "additional");
1307      for (int i = 0; i < array.size(); i++) {
1308        res.getAdditional().add(parseElementDefinitionBindingAdditionalComponent(array.get(i).getAsJsonObject()));
1309      }
1310    };
1311  }
1312
1313  protected ElementDefinition.ElementDefinitionBindingAdditionalComponent parseElementDefinitionBindingAdditionalComponent(JsonObject json) throws IOException, FHIRFormatError {
1314    ElementDefinition.ElementDefinitionBindingAdditionalComponent res = new ElementDefinition.ElementDefinitionBindingAdditionalComponent();
1315    parseElementDefinitionBindingAdditionalComponentProperties(json, res);
1316    return res;
1317  }
1318
1319  protected void parseElementDefinitionBindingAdditionalComponentProperties(JsonObject json, ElementDefinition.ElementDefinitionBindingAdditionalComponent res) throws IOException, FHIRFormatError {
1320    parseElementProperties(json, res);
1321    if (json.has("purpose"))
1322      res.setPurposeElement(parseEnumeration(json.get("purpose").getAsString(), ElementDefinition.AdditionalBindingPurposeVS.NULL, new ElementDefinition.AdditionalBindingPurposeVSEnumFactory()));
1323    if (json.has("_purpose"))
1324      parseElementProperties(getJObject(json, "_purpose"), res.getPurposeElement());
1325    if (json.has("valueSet"))
1326      res.setValueSetElement(parseCanonical(json.get("valueSet").getAsString()));
1327    if (json.has("_valueSet"))
1328      parseElementProperties(getJObject(json, "_valueSet"), res.getValueSetElement());
1329    if (json.has("documentation"))
1330      res.setDocumentationElement(parseMarkdown(json.get("documentation").getAsString()));
1331    if (json.has("_documentation"))
1332      parseElementProperties(getJObject(json, "_documentation"), res.getDocumentationElement());
1333    if (json.has("shortDoco"))
1334      res.setShortDocoElement(parseString(json.get("shortDoco").getAsString()));
1335    if (json.has("_shortDoco"))
1336      parseElementProperties(getJObject(json, "_shortDoco"), res.getShortDocoElement());
1337    if (json.has("usage")) {
1338      JsonArray array = getJArray(json, "usage");
1339      for (int i = 0; i < array.size(); i++) {
1340        res.getUsage().add(parseUsageContext(array.get(i).getAsJsonObject()));
1341      }
1342    };
1343    if (json.has("any"))
1344      res.setAnyElement(parseBoolean(json.get("any").getAsBoolean()));
1345    if (json.has("_any"))
1346      parseElementProperties(getJObject(json, "_any"), res.getAnyElement());
1347  }
1348
1349  protected ElementDefinition.ElementDefinitionMappingComponent parseElementDefinitionMappingComponent(JsonObject json) throws IOException, FHIRFormatError {
1350    ElementDefinition.ElementDefinitionMappingComponent res = new ElementDefinition.ElementDefinitionMappingComponent();
1351    parseElementDefinitionMappingComponentProperties(json, res);
1352    return res;
1353  }
1354
1355  protected void parseElementDefinitionMappingComponentProperties(JsonObject json, ElementDefinition.ElementDefinitionMappingComponent res) throws IOException, FHIRFormatError {
1356    parseElementProperties(json, res);
1357    if (json.has("identity"))
1358      res.setIdentityElement(parseId(json.get("identity").getAsString()));
1359    if (json.has("_identity"))
1360      parseElementProperties(getJObject(json, "_identity"), res.getIdentityElement());
1361    if (json.has("language"))
1362      res.setLanguageElement(parseCode(json.get("language").getAsString()));
1363    if (json.has("_language"))
1364      parseElementProperties(getJObject(json, "_language"), res.getLanguageElement());
1365    if (json.has("map"))
1366      res.setMapElement(parseString(json.get("map").getAsString()));
1367    if (json.has("_map"))
1368      parseElementProperties(getJObject(json, "_map"), res.getMapElement());
1369    if (json.has("comment"))
1370      res.setCommentElement(parseMarkdown(json.get("comment").getAsString()));
1371    if (json.has("_comment"))
1372      parseElementProperties(getJObject(json, "_comment"), res.getCommentElement());
1373  }
1374
1375  protected Expression parseExpression(JsonObject json) throws IOException, FHIRFormatError {
1376    Expression res = new Expression();
1377    parseExpressionProperties(json, res);
1378    return res;
1379  }
1380
1381  protected void parseExpressionProperties(JsonObject json, Expression res) throws IOException, FHIRFormatError {
1382    parseDataTypeProperties(json, res);
1383    if (json.has("description"))
1384      res.setDescriptionElement(parseString(json.get("description").getAsString()));
1385    if (json.has("_description"))
1386      parseElementProperties(getJObject(json, "_description"), res.getDescriptionElement());
1387    if (json.has("name"))
1388      res.setNameElement(parseCode(json.get("name").getAsString()));
1389    if (json.has("_name"))
1390      parseElementProperties(getJObject(json, "_name"), res.getNameElement());
1391    if (json.has("language"))
1392      res.setLanguageElement(parseCode(json.get("language").getAsString()));
1393    if (json.has("_language"))
1394      parseElementProperties(getJObject(json, "_language"), res.getLanguageElement());
1395    if (json.has("expression"))
1396      res.setExpressionElement(parseString(json.get("expression").getAsString()));
1397    if (json.has("_expression"))
1398      parseElementProperties(getJObject(json, "_expression"), res.getExpressionElement());
1399    if (json.has("reference"))
1400      res.setReferenceElement(parseUri(json.get("reference").getAsString()));
1401    if (json.has("_reference"))
1402      parseElementProperties(getJObject(json, "_reference"), res.getReferenceElement());
1403  }
1404
1405  protected ExtendedContactDetail parseExtendedContactDetail(JsonObject json) throws IOException, FHIRFormatError {
1406    ExtendedContactDetail res = new ExtendedContactDetail();
1407    parseExtendedContactDetailProperties(json, res);
1408    return res;
1409  }
1410
1411  protected void parseExtendedContactDetailProperties(JsonObject json, ExtendedContactDetail res) throws IOException, FHIRFormatError {
1412    parseDataTypeProperties(json, res);
1413    if (json.has("purpose"))
1414      res.setPurpose(parseCodeableConcept(getJObject(json, "purpose")));
1415    if (json.has("name")) {
1416      JsonArray array = getJArray(json, "name");
1417      for (int i = 0; i < array.size(); i++) {
1418        res.getName().add(parseHumanName(array.get(i).getAsJsonObject()));
1419      }
1420    };
1421    if (json.has("telecom")) {
1422      JsonArray array = getJArray(json, "telecom");
1423      for (int i = 0; i < array.size(); i++) {
1424        res.getTelecom().add(parseContactPoint(array.get(i).getAsJsonObject()));
1425      }
1426    };
1427    if (json.has("address"))
1428      res.setAddress(parseAddress(getJObject(json, "address")));
1429    if (json.has("organization"))
1430      res.setOrganization(parseReference(getJObject(json, "organization")));
1431    if (json.has("period"))
1432      res.setPeriod(parsePeriod(getJObject(json, "period")));
1433  }
1434
1435  protected Extension parseExtension(JsonObject json) throws IOException, FHIRFormatError {
1436    Extension res = new Extension();
1437    parseExtensionProperties(json, res);
1438    return res;
1439  }
1440
1441  protected void parseExtensionProperties(JsonObject json, Extension res) throws IOException, FHIRFormatError {
1442    parseDataTypeProperties(json, res);
1443    if (json.has("url"))
1444      res.setUrlElement(parseUri(json.get("url").getAsString()));
1445    if (json.has("_url"))
1446      parseElementProperties(getJObject(json, "_url"), res.getUrlElement());
1447    DataType value = parseType("value", json);
1448    if (value != null)
1449      res.setValue(value);
1450  }
1451
1452  protected HumanName parseHumanName(JsonObject json) throws IOException, FHIRFormatError {
1453    HumanName res = new HumanName();
1454    parseHumanNameProperties(json, res);
1455    return res;
1456  }
1457
1458  protected void parseHumanNameProperties(JsonObject json, HumanName res) throws IOException, FHIRFormatError {
1459    parseDataTypeProperties(json, res);
1460    if (json.has("use"))
1461      res.setUseElement(parseEnumeration(json.get("use").getAsString(), HumanName.NameUse.NULL, new HumanName.NameUseEnumFactory()));
1462    if (json.has("_use"))
1463      parseElementProperties(getJObject(json, "_use"), res.getUseElement());
1464    if (json.has("text"))
1465      res.setTextElement(parseString(json.get("text").getAsString()));
1466    if (json.has("_text"))
1467      parseElementProperties(getJObject(json, "_text"), res.getTextElement());
1468    if (json.has("family"))
1469      res.setFamilyElement(parseString(json.get("family").getAsString()));
1470    if (json.has("_family"))
1471      parseElementProperties(getJObject(json, "_family"), res.getFamilyElement());
1472    if (json.has("given")) {
1473      JsonArray array = getJArray(json, "given");
1474      for (int i = 0; i < array.size(); i++) {
1475        if (array.get(i).isJsonNull()) {
1476          res.getGiven().add(new StringType());
1477        } else {;
1478          res.getGiven().add(parseString(array.get(i).getAsString()));
1479        }
1480      }
1481    };
1482    if (json.has("_given")) {
1483      JsonArray array = getJArray(json, "_given");
1484      for (int i = 0; i < array.size(); i++) {
1485        if (i == res.getGiven().size())
1486          res.getGiven().add(parseString(null));
1487        if (array.get(i) instanceof JsonObject) 
1488          parseElementProperties(array.get(i).getAsJsonObject(), res.getGiven().get(i));
1489      }
1490    };
1491    if (json.has("prefix")) {
1492      JsonArray array = getJArray(json, "prefix");
1493      for (int i = 0; i < array.size(); i++) {
1494        if (array.get(i).isJsonNull()) {
1495          res.getPrefix().add(new StringType());
1496        } else {;
1497          res.getPrefix().add(parseString(array.get(i).getAsString()));
1498        }
1499      }
1500    };
1501    if (json.has("_prefix")) {
1502      JsonArray array = getJArray(json, "_prefix");
1503      for (int i = 0; i < array.size(); i++) {
1504        if (i == res.getPrefix().size())
1505          res.getPrefix().add(parseString(null));
1506        if (array.get(i) instanceof JsonObject) 
1507          parseElementProperties(array.get(i).getAsJsonObject(), res.getPrefix().get(i));
1508      }
1509    };
1510    if (json.has("suffix")) {
1511      JsonArray array = getJArray(json, "suffix");
1512      for (int i = 0; i < array.size(); i++) {
1513        if (array.get(i).isJsonNull()) {
1514          res.getSuffix().add(new StringType());
1515        } else {;
1516          res.getSuffix().add(parseString(array.get(i).getAsString()));
1517        }
1518      }
1519    };
1520    if (json.has("_suffix")) {
1521      JsonArray array = getJArray(json, "_suffix");
1522      for (int i = 0; i < array.size(); i++) {
1523        if (i == res.getSuffix().size())
1524          res.getSuffix().add(parseString(null));
1525        if (array.get(i) instanceof JsonObject) 
1526          parseElementProperties(array.get(i).getAsJsonObject(), res.getSuffix().get(i));
1527      }
1528    };
1529    if (json.has("period"))
1530      res.setPeriod(parsePeriod(getJObject(json, "period")));
1531  }
1532
1533  protected Identifier parseIdentifier(JsonObject json) throws IOException, FHIRFormatError {
1534    Identifier res = new Identifier();
1535    parseIdentifierProperties(json, res);
1536    return res;
1537  }
1538
1539  protected void parseIdentifierProperties(JsonObject json, Identifier res) throws IOException, FHIRFormatError {
1540    parseDataTypeProperties(json, res);
1541    if (json.has("use"))
1542      res.setUseElement(parseEnumeration(json.get("use").getAsString(), Identifier.IdentifierUse.NULL, new Identifier.IdentifierUseEnumFactory()));
1543    if (json.has("_use"))
1544      parseElementProperties(getJObject(json, "_use"), res.getUseElement());
1545    if (json.has("type"))
1546      res.setType(parseCodeableConcept(getJObject(json, "type")));
1547    if (json.has("system"))
1548      res.setSystemElement(parseUri(json.get("system").getAsString()));
1549    if (json.has("_system"))
1550      parseElementProperties(getJObject(json, "_system"), res.getSystemElement());
1551    if (json.has("value"))
1552      res.setValueElement(parseString(json.get("value").getAsString()));
1553    if (json.has("_value"))
1554      parseElementProperties(getJObject(json, "_value"), res.getValueElement());
1555    if (json.has("period"))
1556      res.setPeriod(parsePeriod(getJObject(json, "period")));
1557    if (json.has("assigner"))
1558      res.setAssigner(parseReference(getJObject(json, "assigner")));
1559  }
1560
1561  protected MarketingStatus parseMarketingStatus(JsonObject json) throws IOException, FHIRFormatError {
1562    MarketingStatus res = new MarketingStatus();
1563    parseMarketingStatusProperties(json, res);
1564    return res;
1565  }
1566
1567  protected void parseMarketingStatusProperties(JsonObject json, MarketingStatus res) throws IOException, FHIRFormatError {
1568    parseBackboneTypeProperties(json, res);
1569    if (json.has("country"))
1570      res.setCountry(parseCodeableConcept(getJObject(json, "country")));
1571    if (json.has("jurisdiction"))
1572      res.setJurisdiction(parseCodeableConcept(getJObject(json, "jurisdiction")));
1573    if (json.has("status"))
1574      res.setStatus(parseCodeableConcept(getJObject(json, "status")));
1575    if (json.has("dateRange"))
1576      res.setDateRange(parsePeriod(getJObject(json, "dateRange")));
1577    if (json.has("restoreDate"))
1578      res.setRestoreDateElement(parseDateTime(json.get("restoreDate").getAsString()));
1579    if (json.has("_restoreDate"))
1580      parseElementProperties(getJObject(json, "_restoreDate"), res.getRestoreDateElement());
1581  }
1582
1583  protected Meta parseMeta(JsonObject json) throws IOException, FHIRFormatError {
1584    Meta res = new Meta();
1585    parseMetaProperties(json, res);
1586    return res;
1587  }
1588
1589  protected void parseMetaProperties(JsonObject json, Meta res) throws IOException, FHIRFormatError {
1590    parseDataTypeProperties(json, res);
1591    if (json.has("versionId"))
1592      res.setVersionIdElement(parseId(json.get("versionId").getAsString()));
1593    if (json.has("_versionId"))
1594      parseElementProperties(getJObject(json, "_versionId"), res.getVersionIdElement());
1595    if (json.has("lastUpdated"))
1596      res.setLastUpdatedElement(parseInstant(json.get("lastUpdated").getAsString()));
1597    if (json.has("_lastUpdated"))
1598      parseElementProperties(getJObject(json, "_lastUpdated"), res.getLastUpdatedElement());
1599    if (json.has("source"))
1600      res.setSourceElement(parseUri(json.get("source").getAsString()));
1601    if (json.has("_source"))
1602      parseElementProperties(getJObject(json, "_source"), res.getSourceElement());
1603    if (json.has("profile")) {
1604      JsonArray array = getJArray(json, "profile");
1605      for (int i = 0; i < array.size(); i++) {
1606        if (array.get(i).isJsonNull()) {
1607          res.getProfile().add(new CanonicalType());
1608        } else {;
1609          res.getProfile().add(parseCanonical(array.get(i).getAsString()));
1610        }
1611      }
1612    };
1613    if (json.has("_profile")) {
1614      JsonArray array = getJArray(json, "_profile");
1615      for (int i = 0; i < array.size(); i++) {
1616        if (i == res.getProfile().size())
1617          res.getProfile().add(parseCanonical(null));
1618        if (array.get(i) instanceof JsonObject) 
1619          parseElementProperties(array.get(i).getAsJsonObject(), res.getProfile().get(i));
1620      }
1621    };
1622    if (json.has("security")) {
1623      JsonArray array = getJArray(json, "security");
1624      for (int i = 0; i < array.size(); i++) {
1625        res.getSecurity().add(parseCoding(array.get(i).getAsJsonObject()));
1626      }
1627    };
1628    if (json.has("tag")) {
1629      JsonArray array = getJArray(json, "tag");
1630      for (int i = 0; i < array.size(); i++) {
1631        res.getTag().add(parseCoding(array.get(i).getAsJsonObject()));
1632      }
1633    };
1634  }
1635
1636  protected MonetaryComponent parseMonetaryComponent(JsonObject json) throws IOException, FHIRFormatError {
1637    MonetaryComponent res = new MonetaryComponent();
1638    parseMonetaryComponentProperties(json, res);
1639    return res;
1640  }
1641
1642  protected void parseMonetaryComponentProperties(JsonObject json, MonetaryComponent res) throws IOException, FHIRFormatError {
1643    parseDataTypeProperties(json, res);
1644    if (json.has("type"))
1645      res.setTypeElement(parseEnumeration(json.get("type").getAsString(), MonetaryComponent.PriceComponentType.NULL, new MonetaryComponent.PriceComponentTypeEnumFactory()));
1646    if (json.has("_type"))
1647      parseElementProperties(getJObject(json, "_type"), res.getTypeElement());
1648    if (json.has("code"))
1649      res.setCode(parseCodeableConcept(getJObject(json, "code")));
1650    if (json.has("factor"))
1651      res.setFactorElement(parseDecimal(json.get("factor").getAsBigDecimal()));
1652    if (json.has("_factor"))
1653      parseElementProperties(getJObject(json, "_factor"), res.getFactorElement());
1654    if (json.has("amount"))
1655      res.setAmount(parseMoney(getJObject(json, "amount")));
1656  }
1657
1658  protected Money parseMoney(JsonObject json) throws IOException, FHIRFormatError {
1659    Money res = new Money();
1660    parseMoneyProperties(json, res);
1661    return res;
1662  }
1663
1664  protected void parseMoneyProperties(JsonObject json, Money res) throws IOException, FHIRFormatError {
1665    parseDataTypeProperties(json, res);
1666    if (json.has("value"))
1667      res.setValueElement(parseDecimal(json.get("value").getAsBigDecimal()));
1668    if (json.has("_value"))
1669      parseElementProperties(getJObject(json, "_value"), res.getValueElement());
1670    if (json.has("currency"))
1671      res.setCurrencyElement(parseCode(json.get("currency").getAsString()));
1672    if (json.has("_currency"))
1673      parseElementProperties(getJObject(json, "_currency"), res.getCurrencyElement());
1674  }
1675
1676  protected Narrative parseNarrative(JsonObject json) throws IOException, FHIRFormatError {
1677    Narrative res = new Narrative();
1678    parseNarrativeProperties(json, res);
1679    return res;
1680  }
1681
1682  protected void parseNarrativeProperties(JsonObject json, Narrative res) throws IOException, FHIRFormatError {
1683    parseDataTypeProperties(json, res);
1684    if (json.has("status"))
1685      res.setStatusElement(parseEnumeration(json.get("status").getAsString(), Narrative.NarrativeStatus.NULL, new Narrative.NarrativeStatusEnumFactory()));
1686    if (json.has("_status"))
1687      parseElementProperties(getJObject(json, "_status"), res.getStatusElement());
1688    if (json.has("div"))
1689      res.setDiv(parseXhtml(json.get("div").getAsString()));
1690  }
1691
1692  protected ParameterDefinition parseParameterDefinition(JsonObject json) throws IOException, FHIRFormatError {
1693    ParameterDefinition res = new ParameterDefinition();
1694    parseParameterDefinitionProperties(json, res);
1695    return res;
1696  }
1697
1698  protected void parseParameterDefinitionProperties(JsonObject json, ParameterDefinition res) throws IOException, FHIRFormatError {
1699    parseDataTypeProperties(json, res);
1700    if (json.has("name"))
1701      res.setNameElement(parseCode(json.get("name").getAsString()));
1702    if (json.has("_name"))
1703      parseElementProperties(getJObject(json, "_name"), res.getNameElement());
1704    if (json.has("use"))
1705      res.setUseElement(parseEnumeration(json.get("use").getAsString(), Enumerations.OperationParameterUse.NULL, new Enumerations.OperationParameterUseEnumFactory()));
1706    if (json.has("_use"))
1707      parseElementProperties(getJObject(json, "_use"), res.getUseElement());
1708    if (json.has("min"))
1709      res.setMinElement(parseInteger(json.get("min").getAsLong()));
1710    if (json.has("_min"))
1711      parseElementProperties(getJObject(json, "_min"), res.getMinElement());
1712    if (json.has("max"))
1713      res.setMaxElement(parseString(json.get("max").getAsString()));
1714    if (json.has("_max"))
1715      parseElementProperties(getJObject(json, "_max"), res.getMaxElement());
1716    if (json.has("documentation"))
1717      res.setDocumentationElement(parseString(json.get("documentation").getAsString()));
1718    if (json.has("_documentation"))
1719      parseElementProperties(getJObject(json, "_documentation"), res.getDocumentationElement());
1720    if (json.has("type"))
1721      res.setTypeElement(parseEnumeration(json.get("type").getAsString(), Enumerations.FHIRTypes.NULL, new Enumerations.FHIRTypesEnumFactory()));
1722    if (json.has("_type"))
1723      parseElementProperties(getJObject(json, "_type"), res.getTypeElement());
1724    if (json.has("profile"))
1725      res.setProfileElement(parseCanonical(json.get("profile").getAsString()));
1726    if (json.has("_profile"))
1727      parseElementProperties(getJObject(json, "_profile"), res.getProfileElement());
1728  }
1729
1730  protected Period parsePeriod(JsonObject json) throws IOException, FHIRFormatError {
1731    Period res = new Period();
1732    parsePeriodProperties(json, res);
1733    return res;
1734  }
1735
1736  protected void parsePeriodProperties(JsonObject json, Period res) throws IOException, FHIRFormatError {
1737    parseDataTypeProperties(json, res);
1738    if (json.has("start"))
1739      res.setStartElement(parseDateTime(json.get("start").getAsString()));
1740    if (json.has("_start"))
1741      parseElementProperties(getJObject(json, "_start"), res.getStartElement());
1742    if (json.has("end"))
1743      res.setEndElement(parseDateTime(json.get("end").getAsString()));
1744    if (json.has("_end"))
1745      parseElementProperties(getJObject(json, "_end"), res.getEndElement());
1746  }
1747
1748  protected ProductShelfLife parseProductShelfLife(JsonObject json) throws IOException, FHIRFormatError {
1749    ProductShelfLife res = new ProductShelfLife();
1750    parseProductShelfLifeProperties(json, res);
1751    return res;
1752  }
1753
1754  protected void parseProductShelfLifeProperties(JsonObject json, ProductShelfLife res) throws IOException, FHIRFormatError {
1755    parseBackboneTypeProperties(json, res);
1756    if (json.has("type"))
1757      res.setType(parseCodeableConcept(getJObject(json, "type")));
1758    DataType period = parseType("period", json);
1759    if (period != null)
1760      res.setPeriod(period);
1761    if (json.has("specialPrecautionsForStorage")) {
1762      JsonArray array = getJArray(json, "specialPrecautionsForStorage");
1763      for (int i = 0; i < array.size(); i++) {
1764        res.getSpecialPrecautionsForStorage().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
1765      }
1766    };
1767  }
1768
1769  protected Quantity parseQuantity(JsonObject json) throws IOException, FHIRFormatError {
1770    Quantity res = new Quantity();
1771    parseQuantityProperties(json, res);
1772    return res;
1773  }
1774
1775  protected void parseQuantityProperties(JsonObject json, Quantity res) throws IOException, FHIRFormatError {
1776    parseDataTypeProperties(json, res);
1777    if (json.has("value"))
1778      res.setValueElement(parseDecimal(json.get("value").getAsBigDecimal()));
1779    if (json.has("_value"))
1780      parseElementProperties(getJObject(json, "_value"), res.getValueElement());
1781    if (json.has("comparator"))
1782      res.setComparatorElement(parseEnumeration(json.get("comparator").getAsString(), Enumerations.QuantityComparator.NULL, new Enumerations.QuantityComparatorEnumFactory()));
1783    if (json.has("_comparator"))
1784      parseElementProperties(getJObject(json, "_comparator"), res.getComparatorElement());
1785    if (json.has("unit"))
1786      res.setUnitElement(parseString(json.get("unit").getAsString()));
1787    if (json.has("_unit"))
1788      parseElementProperties(getJObject(json, "_unit"), res.getUnitElement());
1789    if (json.has("system"))
1790      res.setSystemElement(parseUri(json.get("system").getAsString()));
1791    if (json.has("_system"))
1792      parseElementProperties(getJObject(json, "_system"), res.getSystemElement());
1793    if (json.has("code"))
1794      res.setCodeElement(parseCode(json.get("code").getAsString()));
1795    if (json.has("_code"))
1796      parseElementProperties(getJObject(json, "_code"), res.getCodeElement());
1797  }
1798
1799  protected Range parseRange(JsonObject json) throws IOException, FHIRFormatError {
1800    Range res = new Range();
1801    parseRangeProperties(json, res);
1802    return res;
1803  }
1804
1805  protected void parseRangeProperties(JsonObject json, Range res) throws IOException, FHIRFormatError {
1806    parseDataTypeProperties(json, res);
1807    if (json.has("low"))
1808      res.setLow(parseQuantity(getJObject(json, "low")));
1809    if (json.has("high"))
1810      res.setHigh(parseQuantity(getJObject(json, "high")));
1811  }
1812
1813  protected Ratio parseRatio(JsonObject json) throws IOException, FHIRFormatError {
1814    Ratio res = new Ratio();
1815    parseRatioProperties(json, res);
1816    return res;
1817  }
1818
1819  protected void parseRatioProperties(JsonObject json, Ratio res) throws IOException, FHIRFormatError {
1820    parseDataTypeProperties(json, res);
1821    if (json.has("numerator"))
1822      res.setNumerator(parseQuantity(getJObject(json, "numerator")));
1823    if (json.has("denominator"))
1824      res.setDenominator(parseQuantity(getJObject(json, "denominator")));
1825  }
1826
1827  protected RatioRange parseRatioRange(JsonObject json) throws IOException, FHIRFormatError {
1828    RatioRange res = new RatioRange();
1829    parseRatioRangeProperties(json, res);
1830    return res;
1831  }
1832
1833  protected void parseRatioRangeProperties(JsonObject json, RatioRange res) throws IOException, FHIRFormatError {
1834    parseDataTypeProperties(json, res);
1835    if (json.has("lowNumerator"))
1836      res.setLowNumerator(parseQuantity(getJObject(json, "lowNumerator")));
1837    if (json.has("highNumerator"))
1838      res.setHighNumerator(parseQuantity(getJObject(json, "highNumerator")));
1839    if (json.has("denominator"))
1840      res.setDenominator(parseQuantity(getJObject(json, "denominator")));
1841  }
1842
1843  protected Reference parseReference(JsonObject json) throws IOException, FHIRFormatError {
1844    Reference res = new Reference();
1845    parseReferenceProperties(json, res);
1846    return res;
1847  }
1848
1849  protected void parseReferenceProperties(JsonObject json, Reference res) throws IOException, FHIRFormatError {
1850    parseDataTypeProperties(json, res);
1851    if (json.has("reference"))
1852      res.setReferenceElement(parseString(json.get("reference").getAsString()));
1853    if (json.has("_reference"))
1854      parseElementProperties(getJObject(json, "_reference"), res.getReferenceElement());
1855    if (json.has("type"))
1856      res.setTypeElement(parseUri(json.get("type").getAsString()));
1857    if (json.has("_type"))
1858      parseElementProperties(getJObject(json, "_type"), res.getTypeElement());
1859    if (json.has("identifier"))
1860      res.setIdentifier(parseIdentifier(getJObject(json, "identifier")));
1861    if (json.has("display"))
1862      res.setDisplayElement(parseString(json.get("display").getAsString()));
1863    if (json.has("_display"))
1864      parseElementProperties(getJObject(json, "_display"), res.getDisplayElement());
1865  }
1866
1867  protected RelatedArtifact parseRelatedArtifact(JsonObject json) throws IOException, FHIRFormatError {
1868    RelatedArtifact res = new RelatedArtifact();
1869    parseRelatedArtifactProperties(json, res);
1870    return res;
1871  }
1872
1873  protected void parseRelatedArtifactProperties(JsonObject json, RelatedArtifact res) throws IOException, FHIRFormatError {
1874    parseDataTypeProperties(json, res);
1875    if (json.has("type"))
1876      res.setTypeElement(parseEnumeration(json.get("type").getAsString(), RelatedArtifact.RelatedArtifactType.NULL, new RelatedArtifact.RelatedArtifactTypeEnumFactory()));
1877    if (json.has("_type"))
1878      parseElementProperties(getJObject(json, "_type"), res.getTypeElement());
1879    if (json.has("classifier")) {
1880      JsonArray array = getJArray(json, "classifier");
1881      for (int i = 0; i < array.size(); i++) {
1882        res.getClassifier().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
1883      }
1884    };
1885    if (json.has("label"))
1886      res.setLabelElement(parseString(json.get("label").getAsString()));
1887    if (json.has("_label"))
1888      parseElementProperties(getJObject(json, "_label"), res.getLabelElement());
1889    if (json.has("display"))
1890      res.setDisplayElement(parseString(json.get("display").getAsString()));
1891    if (json.has("_display"))
1892      parseElementProperties(getJObject(json, "_display"), res.getDisplayElement());
1893    if (json.has("citation"))
1894      res.setCitationElement(parseMarkdown(json.get("citation").getAsString()));
1895    if (json.has("_citation"))
1896      parseElementProperties(getJObject(json, "_citation"), res.getCitationElement());
1897    if (json.has("document"))
1898      res.setDocument(parseAttachment(getJObject(json, "document")));
1899    if (json.has("resource"))
1900      res.setResourceElement(parseCanonical(json.get("resource").getAsString()));
1901    if (json.has("_resource"))
1902      parseElementProperties(getJObject(json, "_resource"), res.getResourceElement());
1903    if (json.has("resourceReference"))
1904      res.setResourceReference(parseReference(getJObject(json, "resourceReference")));
1905    if (json.has("publicationStatus"))
1906      res.setPublicationStatusElement(parseEnumeration(json.get("publicationStatus").getAsString(), Enumerations.PublicationStatus.NULL, new Enumerations.PublicationStatusEnumFactory()));
1907    if (json.has("_publicationStatus"))
1908      parseElementProperties(getJObject(json, "_publicationStatus"), res.getPublicationStatusElement());
1909    if (json.has("publicationDate"))
1910      res.setPublicationDateElement(parseDate(json.get("publicationDate").getAsString()));
1911    if (json.has("_publicationDate"))
1912      parseElementProperties(getJObject(json, "_publicationDate"), res.getPublicationDateElement());
1913  }
1914
1915  protected SampledData parseSampledData(JsonObject json) throws IOException, FHIRFormatError {
1916    SampledData res = new SampledData();
1917    parseSampledDataProperties(json, res);
1918    return res;
1919  }
1920
1921  protected void parseSampledDataProperties(JsonObject json, SampledData res) throws IOException, FHIRFormatError {
1922    parseDataTypeProperties(json, res);
1923    if (json.has("origin"))
1924      res.setOrigin(parseQuantity(getJObject(json, "origin")));
1925    if (json.has("interval"))
1926      res.setIntervalElement(parseDecimal(json.get("interval").getAsBigDecimal()));
1927    if (json.has("_interval"))
1928      parseElementProperties(getJObject(json, "_interval"), res.getIntervalElement());
1929    if (json.has("intervalUnit"))
1930      res.setIntervalUnitElement(parseCode(json.get("intervalUnit").getAsString()));
1931    if (json.has("_intervalUnit"))
1932      parseElementProperties(getJObject(json, "_intervalUnit"), res.getIntervalUnitElement());
1933    if (json.has("factor"))
1934      res.setFactorElement(parseDecimal(json.get("factor").getAsBigDecimal()));
1935    if (json.has("_factor"))
1936      parseElementProperties(getJObject(json, "_factor"), res.getFactorElement());
1937    if (json.has("lowerLimit"))
1938      res.setLowerLimitElement(parseDecimal(json.get("lowerLimit").getAsBigDecimal()));
1939    if (json.has("_lowerLimit"))
1940      parseElementProperties(getJObject(json, "_lowerLimit"), res.getLowerLimitElement());
1941    if (json.has("upperLimit"))
1942      res.setUpperLimitElement(parseDecimal(json.get("upperLimit").getAsBigDecimal()));
1943    if (json.has("_upperLimit"))
1944      parseElementProperties(getJObject(json, "_upperLimit"), res.getUpperLimitElement());
1945    if (json.has("dimensions"))
1946      res.setDimensionsElement(parsePositiveInt(json.get("dimensions").getAsString()));
1947    if (json.has("_dimensions"))
1948      parseElementProperties(getJObject(json, "_dimensions"), res.getDimensionsElement());
1949    if (json.has("codeMap"))
1950      res.setCodeMapElement(parseCanonical(json.get("codeMap").getAsString()));
1951    if (json.has("_codeMap"))
1952      parseElementProperties(getJObject(json, "_codeMap"), res.getCodeMapElement());
1953    if (json.has("offsets"))
1954      res.setOffsetsElement(parseString(json.get("offsets").getAsString()));
1955    if (json.has("_offsets"))
1956      parseElementProperties(getJObject(json, "_offsets"), res.getOffsetsElement());
1957    if (json.has("data"))
1958      res.setDataElement(parseString(json.get("data").getAsString()));
1959    if (json.has("_data"))
1960      parseElementProperties(getJObject(json, "_data"), res.getDataElement());
1961  }
1962
1963  protected Signature parseSignature(JsonObject json) throws IOException, FHIRFormatError {
1964    Signature res = new Signature();
1965    parseSignatureProperties(json, res);
1966    return res;
1967  }
1968
1969  protected void parseSignatureProperties(JsonObject json, Signature res) throws IOException, FHIRFormatError {
1970    parseDataTypeProperties(json, res);
1971    if (json.has("type")) {
1972      JsonArray array = getJArray(json, "type");
1973      for (int i = 0; i < array.size(); i++) {
1974        res.getType().add(parseCoding(array.get(i).getAsJsonObject()));
1975      }
1976    };
1977    if (json.has("when"))
1978      res.setWhenElement(parseInstant(json.get("when").getAsString()));
1979    if (json.has("_when"))
1980      parseElementProperties(getJObject(json, "_when"), res.getWhenElement());
1981    if (json.has("who"))
1982      res.setWho(parseReference(getJObject(json, "who")));
1983    if (json.has("onBehalfOf"))
1984      res.setOnBehalfOf(parseReference(getJObject(json, "onBehalfOf")));
1985    if (json.has("targetFormat"))
1986      res.setTargetFormatElement(parseCode(json.get("targetFormat").getAsString()));
1987    if (json.has("_targetFormat"))
1988      parseElementProperties(getJObject(json, "_targetFormat"), res.getTargetFormatElement());
1989    if (json.has("sigFormat"))
1990      res.setSigFormatElement(parseCode(json.get("sigFormat").getAsString()));
1991    if (json.has("_sigFormat"))
1992      parseElementProperties(getJObject(json, "_sigFormat"), res.getSigFormatElement());
1993    if (json.has("data"))
1994      res.setDataElement(parseBase64Binary(json.get("data").getAsString()));
1995    if (json.has("_data"))
1996      parseElementProperties(getJObject(json, "_data"), res.getDataElement());
1997  }
1998
1999  protected Timing parseTiming(JsonObject json) throws IOException, FHIRFormatError {
2000    Timing res = new Timing();
2001    parseTimingProperties(json, res);
2002    return res;
2003  }
2004
2005  protected void parseTimingProperties(JsonObject json, Timing res) throws IOException, FHIRFormatError {
2006    parseBackboneTypeProperties(json, res);
2007    if (json.has("event")) {
2008      JsonArray array = getJArray(json, "event");
2009      for (int i = 0; i < array.size(); i++) {
2010        if (array.get(i).isJsonNull()) {
2011          res.getEvent().add(new DateTimeType());
2012        } else {;
2013          res.getEvent().add(parseDateTime(array.get(i).getAsString()));
2014        }
2015      }
2016    };
2017    if (json.has("_event")) {
2018      JsonArray array = getJArray(json, "_event");
2019      for (int i = 0; i < array.size(); i++) {
2020        if (i == res.getEvent().size())
2021          res.getEvent().add(parseDateTime(null));
2022        if (array.get(i) instanceof JsonObject) 
2023          parseElementProperties(array.get(i).getAsJsonObject(), res.getEvent().get(i));
2024      }
2025    };
2026    if (json.has("repeat"))
2027      res.setRepeat(parseTimingRepeatComponent(getJObject(json, "repeat")));
2028    if (json.has("code"))
2029      res.setCode(parseCodeableConcept(getJObject(json, "code")));
2030  }
2031
2032  protected Timing.TimingRepeatComponent parseTimingRepeatComponent(JsonObject json) throws IOException, FHIRFormatError {
2033    Timing.TimingRepeatComponent res = new Timing.TimingRepeatComponent();
2034    parseTimingRepeatComponentProperties(json, res);
2035    return res;
2036  }
2037
2038  protected void parseTimingRepeatComponentProperties(JsonObject json, Timing.TimingRepeatComponent res) throws IOException, FHIRFormatError {
2039    parseElementProperties(json, res);
2040    DataType bounds = parseType("bounds", json);
2041    if (bounds != null)
2042      res.setBounds(bounds);
2043    if (json.has("count"))
2044      res.setCountElement(parsePositiveInt(json.get("count").getAsString()));
2045    if (json.has("_count"))
2046      parseElementProperties(getJObject(json, "_count"), res.getCountElement());
2047    if (json.has("countMax"))
2048      res.setCountMaxElement(parsePositiveInt(json.get("countMax").getAsString()));
2049    if (json.has("_countMax"))
2050      parseElementProperties(getJObject(json, "_countMax"), res.getCountMaxElement());
2051    if (json.has("duration"))
2052      res.setDurationElement(parseDecimal(json.get("duration").getAsBigDecimal()));
2053    if (json.has("_duration"))
2054      parseElementProperties(getJObject(json, "_duration"), res.getDurationElement());
2055    if (json.has("durationMax"))
2056      res.setDurationMaxElement(parseDecimal(json.get("durationMax").getAsBigDecimal()));
2057    if (json.has("_durationMax"))
2058      parseElementProperties(getJObject(json, "_durationMax"), res.getDurationMaxElement());
2059    if (json.has("durationUnit"))
2060      res.setDurationUnitElement(parseEnumeration(json.get("durationUnit").getAsString(), Timing.UnitsOfTime.NULL, new Timing.UnitsOfTimeEnumFactory()));
2061    if (json.has("_durationUnit"))
2062      parseElementProperties(getJObject(json, "_durationUnit"), res.getDurationUnitElement());
2063    if (json.has("frequency"))
2064      res.setFrequencyElement(parsePositiveInt(json.get("frequency").getAsString()));
2065    if (json.has("_frequency"))
2066      parseElementProperties(getJObject(json, "_frequency"), res.getFrequencyElement());
2067    if (json.has("frequencyMax"))
2068      res.setFrequencyMaxElement(parsePositiveInt(json.get("frequencyMax").getAsString()));
2069    if (json.has("_frequencyMax"))
2070      parseElementProperties(getJObject(json, "_frequencyMax"), res.getFrequencyMaxElement());
2071    if (json.has("period"))
2072      res.setPeriodElement(parseDecimal(json.get("period").getAsBigDecimal()));
2073    if (json.has("_period"))
2074      parseElementProperties(getJObject(json, "_period"), res.getPeriodElement());
2075    if (json.has("periodMax"))
2076      res.setPeriodMaxElement(parseDecimal(json.get("periodMax").getAsBigDecimal()));
2077    if (json.has("_periodMax"))
2078      parseElementProperties(getJObject(json, "_periodMax"), res.getPeriodMaxElement());
2079    if (json.has("periodUnit"))
2080      res.setPeriodUnitElement(parseEnumeration(json.get("periodUnit").getAsString(), Timing.UnitsOfTime.NULL, new Timing.UnitsOfTimeEnumFactory()));
2081    if (json.has("_periodUnit"))
2082      parseElementProperties(getJObject(json, "_periodUnit"), res.getPeriodUnitElement());
2083    if (json.has("dayOfWeek")) {
2084      JsonArray array = getJArray(json, "dayOfWeek");
2085      for (int i = 0; i < array.size(); i++) {
2086        if (array.get(i).isJsonNull()) {
2087          res.getDayOfWeek().add(new Enumeration<Enumerations.DaysOfWeek>(new Enumerations.DaysOfWeekEnumFactory(), Enumerations.DaysOfWeek.NULL));
2088        } else {;
2089          res.getDayOfWeek().add(parseEnumeration(array.get(i).getAsString(), Enumerations.DaysOfWeek.NULL, new Enumerations.DaysOfWeekEnumFactory()));
2090        }
2091      }
2092    };
2093    if (json.has("_dayOfWeek")) {
2094      JsonArray array = getJArray(json, "_dayOfWeek");
2095      for (int i = 0; i < array.size(); i++) {
2096        if (i == res.getDayOfWeek().size())
2097          res.getDayOfWeek().add(parseEnumeration(null, Enumerations.DaysOfWeek.NULL, new Enumerations.DaysOfWeekEnumFactory()));
2098        if (array.get(i) instanceof JsonObject) 
2099          parseElementProperties(array.get(i).getAsJsonObject(), res.getDayOfWeek().get(i));
2100      }
2101    };
2102    if (json.has("timeOfDay")) {
2103      JsonArray array = getJArray(json, "timeOfDay");
2104      for (int i = 0; i < array.size(); i++) {
2105        if (array.get(i).isJsonNull()) {
2106          res.getTimeOfDay().add(new TimeType());
2107        } else {;
2108          res.getTimeOfDay().add(parseTime(array.get(i).getAsString()));
2109        }
2110      }
2111    };
2112    if (json.has("_timeOfDay")) {
2113      JsonArray array = getJArray(json, "_timeOfDay");
2114      for (int i = 0; i < array.size(); i++) {
2115        if (i == res.getTimeOfDay().size())
2116          res.getTimeOfDay().add(parseTime(null));
2117        if (array.get(i) instanceof JsonObject) 
2118          parseElementProperties(array.get(i).getAsJsonObject(), res.getTimeOfDay().get(i));
2119      }
2120    };
2121    if (json.has("when")) {
2122      JsonArray array = getJArray(json, "when");
2123      for (int i = 0; i < array.size(); i++) {
2124        if (array.get(i).isJsonNull()) {
2125          res.getWhen().add(new Enumeration<Timing.EventTiming>(new Timing.EventTimingEnumFactory(), Timing.EventTiming.NULL));
2126        } else {;
2127          res.getWhen().add(parseEnumeration(array.get(i).getAsString(), Timing.EventTiming.NULL, new Timing.EventTimingEnumFactory()));
2128        }
2129      }
2130    };
2131    if (json.has("_when")) {
2132      JsonArray array = getJArray(json, "_when");
2133      for (int i = 0; i < array.size(); i++) {
2134        if (i == res.getWhen().size())
2135          res.getWhen().add(parseEnumeration(null, Timing.EventTiming.NULL, new Timing.EventTimingEnumFactory()));
2136        if (array.get(i) instanceof JsonObject) 
2137          parseElementProperties(array.get(i).getAsJsonObject(), res.getWhen().get(i));
2138      }
2139    };
2140    if (json.has("offset"))
2141      res.setOffsetElement(parseUnsignedInt(json.get("offset").getAsString()));
2142    if (json.has("_offset"))
2143      parseElementProperties(getJObject(json, "_offset"), res.getOffsetElement());
2144  }
2145
2146  protected TriggerDefinition parseTriggerDefinition(JsonObject json) throws IOException, FHIRFormatError {
2147    TriggerDefinition res = new TriggerDefinition();
2148    parseTriggerDefinitionProperties(json, res);
2149    return res;
2150  }
2151
2152  protected void parseTriggerDefinitionProperties(JsonObject json, TriggerDefinition res) throws IOException, FHIRFormatError {
2153    parseDataTypeProperties(json, res);
2154    if (json.has("type"))
2155      res.setTypeElement(parseEnumeration(json.get("type").getAsString(), TriggerDefinition.TriggerType.NULL, new TriggerDefinition.TriggerTypeEnumFactory()));
2156    if (json.has("_type"))
2157      parseElementProperties(getJObject(json, "_type"), res.getTypeElement());
2158    if (json.has("name"))
2159      res.setNameElement(parseString(json.get("name").getAsString()));
2160    if (json.has("_name"))
2161      parseElementProperties(getJObject(json, "_name"), res.getNameElement());
2162    if (json.has("code"))
2163      res.setCode(parseCodeableConcept(getJObject(json, "code")));
2164    if (json.has("subscriptionTopic"))
2165      res.setSubscriptionTopicElement(parseCanonical(json.get("subscriptionTopic").getAsString()));
2166    if (json.has("_subscriptionTopic"))
2167      parseElementProperties(getJObject(json, "_subscriptionTopic"), res.getSubscriptionTopicElement());
2168    DataType timing = parseType("timing", json);
2169    if (timing != null)
2170      res.setTiming(timing);
2171    if (json.has("data")) {
2172      JsonArray array = getJArray(json, "data");
2173      for (int i = 0; i < array.size(); i++) {
2174        res.getData().add(parseDataRequirement(array.get(i).getAsJsonObject()));
2175      }
2176    };
2177    if (json.has("condition"))
2178      res.setCondition(parseExpression(getJObject(json, "condition")));
2179  }
2180
2181  protected UsageContext parseUsageContext(JsonObject json) throws IOException, FHIRFormatError {
2182    UsageContext res = new UsageContext();
2183    parseUsageContextProperties(json, res);
2184    return res;
2185  }
2186
2187  protected void parseUsageContextProperties(JsonObject json, UsageContext res) throws IOException, FHIRFormatError {
2188    parseDataTypeProperties(json, res);
2189    if (json.has("code"))
2190      res.setCode(parseCoding(getJObject(json, "code")));
2191    DataType value = parseType("value", json);
2192    if (value != null)
2193      res.setValue(value);
2194  }
2195
2196  protected VirtualServiceDetail parseVirtualServiceDetail(JsonObject json) throws IOException, FHIRFormatError {
2197    VirtualServiceDetail res = new VirtualServiceDetail();
2198    parseVirtualServiceDetailProperties(json, res);
2199    return res;
2200  }
2201
2202  protected void parseVirtualServiceDetailProperties(JsonObject json, VirtualServiceDetail res) throws IOException, FHIRFormatError {
2203    parseDataTypeProperties(json, res);
2204    if (json.has("channelType"))
2205      res.setChannelType(parseCoding(getJObject(json, "channelType")));
2206    DataType address = parseType("address", json);
2207    if (address != null)
2208      res.setAddress(address);
2209    if (json.has("additionalInfo")) {
2210      JsonArray array = getJArray(json, "additionalInfo");
2211      for (int i = 0; i < array.size(); i++) {
2212        if (array.get(i).isJsonNull()) {
2213          res.getAdditionalInfo().add(new UrlType());
2214        } else {;
2215          res.getAdditionalInfo().add(parseUrl(array.get(i).getAsString()));
2216        }
2217      }
2218    };
2219    if (json.has("_additionalInfo")) {
2220      JsonArray array = getJArray(json, "_additionalInfo");
2221      for (int i = 0; i < array.size(); i++) {
2222        if (i == res.getAdditionalInfo().size())
2223          res.getAdditionalInfo().add(parseUrl(null));
2224        if (array.get(i) instanceof JsonObject) 
2225          parseElementProperties(array.get(i).getAsJsonObject(), res.getAdditionalInfo().get(i));
2226      }
2227    };
2228    if (json.has("maxParticipants"))
2229      res.setMaxParticipantsElement(parsePositiveInt(json.get("maxParticipants").getAsString()));
2230    if (json.has("_maxParticipants"))
2231      parseElementProperties(getJObject(json, "_maxParticipants"), res.getMaxParticipantsElement());
2232    if (json.has("sessionKey"))
2233      res.setSessionKeyElement(parseString(json.get("sessionKey").getAsString()));
2234    if (json.has("_sessionKey"))
2235      parseElementProperties(getJObject(json, "_sessionKey"), res.getSessionKeyElement());
2236  }
2237
2238  protected void parseCanonicalResourceProperties(JsonObject json, CanonicalResource res) throws IOException, FHIRFormatError {
2239    parseDomainResourceProperties(json, res);
2240  }
2241
2242  protected void parseDomainResourceProperties(JsonObject json, DomainResource res) throws IOException, FHIRFormatError {
2243    parseResourceProperties(json, res);
2244    if (json.has("text"))
2245      res.setText(parseNarrative(getJObject(json, "text")));
2246    if (json.has("contained")) {
2247      JsonArray array = getJArray(json, "contained");
2248      for (int i = 0; i < array.size(); i++) {
2249        res.getContained().add(parseResource(array.get(i).getAsJsonObject()));
2250      }
2251    };
2252    if (json.has("extension")) {
2253      JsonArray array = getJArray(json, "extension");
2254      for (int i = 0; i < array.size(); i++) {
2255        res.getExtension().add(parseExtension(array.get(i).getAsJsonObject()));
2256      }
2257    };
2258    if (json.has("modifierExtension")) {
2259      JsonArray array = getJArray(json, "modifierExtension");
2260      for (int i = 0; i < array.size(); i++) {
2261        res.getModifierExtension().add(parseExtension(array.get(i).getAsJsonObject()));
2262      }
2263    };
2264  }
2265
2266  protected void parseMetadataResourceProperties(JsonObject json, MetadataResource res) throws IOException, FHIRFormatError {
2267    parseCanonicalResourceProperties(json, res);
2268  }
2269
2270  protected void parseResourceProperties(JsonObject json, Resource res) throws IOException, FHIRFormatError {
2271    parseBaseProperties(json, res);
2272    if (json.has("id"))
2273      res.setIdElement(parseId(json.get("id").getAsString()));
2274    if (json.has("_id"))
2275      parseElementProperties(getJObject(json, "_id"), res.getIdElement());
2276    if (json.has("meta"))
2277      res.setMeta(parseMeta(getJObject(json, "meta")));
2278    if (json.has("implicitRules"))
2279      res.setImplicitRulesElement(parseUri(json.get("implicitRules").getAsString()));
2280    if (json.has("_implicitRules"))
2281      parseElementProperties(getJObject(json, "_implicitRules"), res.getImplicitRulesElement());
2282    if (json.has("language"))
2283      res.setLanguageElement(parseCode(json.get("language").getAsString()));
2284    if (json.has("_language"))
2285      parseElementProperties(getJObject(json, "_language"), res.getLanguageElement());
2286  }
2287
2288  protected Account parseAccount(JsonObject json) throws IOException, FHIRFormatError {
2289    Account res = new Account();
2290    parseAccountProperties(json, res);
2291    return res;
2292  }
2293
2294  protected void parseAccountProperties(JsonObject json, Account res) throws IOException, FHIRFormatError {
2295    parseDomainResourceProperties(json, res);
2296    if (json.has("identifier")) {
2297      JsonArray array = getJArray(json, "identifier");
2298      for (int i = 0; i < array.size(); i++) {
2299        res.getIdentifier().add(parseIdentifier(array.get(i).getAsJsonObject()));
2300      }
2301    };
2302    if (json.has("status"))
2303      res.setStatusElement(parseEnumeration(json.get("status").getAsString(), Account.AccountStatus.NULL, new Account.AccountStatusEnumFactory()));
2304    if (json.has("_status"))
2305      parseElementProperties(getJObject(json, "_status"), res.getStatusElement());
2306    if (json.has("billingStatus"))
2307      res.setBillingStatus(parseCodeableConcept(getJObject(json, "billingStatus")));
2308    if (json.has("type"))
2309      res.setType(parseCodeableConcept(getJObject(json, "type")));
2310    if (json.has("name"))
2311      res.setNameElement(parseString(json.get("name").getAsString()));
2312    if (json.has("_name"))
2313      parseElementProperties(getJObject(json, "_name"), res.getNameElement());
2314    if (json.has("subject")) {
2315      JsonArray array = getJArray(json, "subject");
2316      for (int i = 0; i < array.size(); i++) {
2317        res.getSubject().add(parseReference(array.get(i).getAsJsonObject()));
2318      }
2319    };
2320    if (json.has("servicePeriod"))
2321      res.setServicePeriod(parsePeriod(getJObject(json, "servicePeriod")));
2322    if (json.has("coverage")) {
2323      JsonArray array = getJArray(json, "coverage");
2324      for (int i = 0; i < array.size(); i++) {
2325        res.getCoverage().add(parseAccountCoverageComponent(array.get(i).getAsJsonObject()));
2326      }
2327    };
2328    if (json.has("owner"))
2329      res.setOwner(parseReference(getJObject(json, "owner")));
2330    if (json.has("description"))
2331      res.setDescriptionElement(parseMarkdown(json.get("description").getAsString()));
2332    if (json.has("_description"))
2333      parseElementProperties(getJObject(json, "_description"), res.getDescriptionElement());
2334    if (json.has("guarantor")) {
2335      JsonArray array = getJArray(json, "guarantor");
2336      for (int i = 0; i < array.size(); i++) {
2337        res.getGuarantor().add(parseAccountGuarantorComponent(array.get(i).getAsJsonObject()));
2338      }
2339    };
2340    if (json.has("diagnosis")) {
2341      JsonArray array = getJArray(json, "diagnosis");
2342      for (int i = 0; i < array.size(); i++) {
2343        res.getDiagnosis().add(parseAccountDiagnosisComponent(array.get(i).getAsJsonObject()));
2344      }
2345    };
2346    if (json.has("procedure")) {
2347      JsonArray array = getJArray(json, "procedure");
2348      for (int i = 0; i < array.size(); i++) {
2349        res.getProcedure().add(parseAccountProcedureComponent(array.get(i).getAsJsonObject()));
2350      }
2351    };
2352    if (json.has("relatedAccount")) {
2353      JsonArray array = getJArray(json, "relatedAccount");
2354      for (int i = 0; i < array.size(); i++) {
2355        res.getRelatedAccount().add(parseAccountRelatedAccountComponent(array.get(i).getAsJsonObject()));
2356      }
2357    };
2358    if (json.has("currency"))
2359      res.setCurrency(parseCodeableConcept(getJObject(json, "currency")));
2360    if (json.has("balance")) {
2361      JsonArray array = getJArray(json, "balance");
2362      for (int i = 0; i < array.size(); i++) {
2363        res.getBalance().add(parseAccountBalanceComponent(array.get(i).getAsJsonObject()));
2364      }
2365    };
2366    if (json.has("calculatedAt"))
2367      res.setCalculatedAtElement(parseInstant(json.get("calculatedAt").getAsString()));
2368    if (json.has("_calculatedAt"))
2369      parseElementProperties(getJObject(json, "_calculatedAt"), res.getCalculatedAtElement());
2370  }
2371
2372  protected Account.CoverageComponent parseAccountCoverageComponent(JsonObject json) throws IOException, FHIRFormatError {
2373    Account.CoverageComponent res = new Account.CoverageComponent();
2374    parseAccountCoverageComponentProperties(json, res);
2375    return res;
2376  }
2377
2378  protected void parseAccountCoverageComponentProperties(JsonObject json, Account.CoverageComponent res) throws IOException, FHIRFormatError {
2379    parseBackboneElementProperties(json, res);
2380    if (json.has("coverage"))
2381      res.setCoverage(parseReference(getJObject(json, "coverage")));
2382    if (json.has("priority"))
2383      res.setPriorityElement(parsePositiveInt(json.get("priority").getAsString()));
2384    if (json.has("_priority"))
2385      parseElementProperties(getJObject(json, "_priority"), res.getPriorityElement());
2386  }
2387
2388  protected Account.GuarantorComponent parseAccountGuarantorComponent(JsonObject json) throws IOException, FHIRFormatError {
2389    Account.GuarantorComponent res = new Account.GuarantorComponent();
2390    parseAccountGuarantorComponentProperties(json, res);
2391    return res;
2392  }
2393
2394  protected void parseAccountGuarantorComponentProperties(JsonObject json, Account.GuarantorComponent res) throws IOException, FHIRFormatError {
2395    parseBackboneElementProperties(json, res);
2396    if (json.has("party"))
2397      res.setParty(parseReference(getJObject(json, "party")));
2398    if (json.has("onHold"))
2399      res.setOnHoldElement(parseBoolean(json.get("onHold").getAsBoolean()));
2400    if (json.has("_onHold"))
2401      parseElementProperties(getJObject(json, "_onHold"), res.getOnHoldElement());
2402    if (json.has("period"))
2403      res.setPeriod(parsePeriod(getJObject(json, "period")));
2404  }
2405
2406  protected Account.AccountDiagnosisComponent parseAccountDiagnosisComponent(JsonObject json) throws IOException, FHIRFormatError {
2407    Account.AccountDiagnosisComponent res = new Account.AccountDiagnosisComponent();
2408    parseAccountDiagnosisComponentProperties(json, res);
2409    return res;
2410  }
2411
2412  protected void parseAccountDiagnosisComponentProperties(JsonObject json, Account.AccountDiagnosisComponent res) throws IOException, FHIRFormatError {
2413    parseBackboneElementProperties(json, res);
2414    if (json.has("sequence"))
2415      res.setSequenceElement(parsePositiveInt(json.get("sequence").getAsString()));
2416    if (json.has("_sequence"))
2417      parseElementProperties(getJObject(json, "_sequence"), res.getSequenceElement());
2418    if (json.has("condition"))
2419      res.setCondition(parseCodeableReference(getJObject(json, "condition")));
2420    if (json.has("dateOfDiagnosis"))
2421      res.setDateOfDiagnosisElement(parseDateTime(json.get("dateOfDiagnosis").getAsString()));
2422    if (json.has("_dateOfDiagnosis"))
2423      parseElementProperties(getJObject(json, "_dateOfDiagnosis"), res.getDateOfDiagnosisElement());
2424    if (json.has("type")) {
2425      JsonArray array = getJArray(json, "type");
2426      for (int i = 0; i < array.size(); i++) {
2427        res.getType().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
2428      }
2429    };
2430    if (json.has("onAdmission"))
2431      res.setOnAdmissionElement(parseBoolean(json.get("onAdmission").getAsBoolean()));
2432    if (json.has("_onAdmission"))
2433      parseElementProperties(getJObject(json, "_onAdmission"), res.getOnAdmissionElement());
2434    if (json.has("packageCode")) {
2435      JsonArray array = getJArray(json, "packageCode");
2436      for (int i = 0; i < array.size(); i++) {
2437        res.getPackageCode().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
2438      }
2439    };
2440  }
2441
2442  protected Account.AccountProcedureComponent parseAccountProcedureComponent(JsonObject json) throws IOException, FHIRFormatError {
2443    Account.AccountProcedureComponent res = new Account.AccountProcedureComponent();
2444    parseAccountProcedureComponentProperties(json, res);
2445    return res;
2446  }
2447
2448  protected void parseAccountProcedureComponentProperties(JsonObject json, Account.AccountProcedureComponent res) throws IOException, FHIRFormatError {
2449    parseBackboneElementProperties(json, res);
2450    if (json.has("sequence"))
2451      res.setSequenceElement(parsePositiveInt(json.get("sequence").getAsString()));
2452    if (json.has("_sequence"))
2453      parseElementProperties(getJObject(json, "_sequence"), res.getSequenceElement());
2454    if (json.has("code"))
2455      res.setCode(parseCodeableReference(getJObject(json, "code")));
2456    if (json.has("dateOfService"))
2457      res.setDateOfServiceElement(parseDateTime(json.get("dateOfService").getAsString()));
2458    if (json.has("_dateOfService"))
2459      parseElementProperties(getJObject(json, "_dateOfService"), res.getDateOfServiceElement());
2460    if (json.has("type")) {
2461      JsonArray array = getJArray(json, "type");
2462      for (int i = 0; i < array.size(); i++) {
2463        res.getType().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
2464      }
2465    };
2466    if (json.has("packageCode")) {
2467      JsonArray array = getJArray(json, "packageCode");
2468      for (int i = 0; i < array.size(); i++) {
2469        res.getPackageCode().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
2470      }
2471    };
2472    if (json.has("device")) {
2473      JsonArray array = getJArray(json, "device");
2474      for (int i = 0; i < array.size(); i++) {
2475        res.getDevice().add(parseReference(array.get(i).getAsJsonObject()));
2476      }
2477    };
2478  }
2479
2480  protected Account.AccountRelatedAccountComponent parseAccountRelatedAccountComponent(JsonObject json) throws IOException, FHIRFormatError {
2481    Account.AccountRelatedAccountComponent res = new Account.AccountRelatedAccountComponent();
2482    parseAccountRelatedAccountComponentProperties(json, res);
2483    return res;
2484  }
2485
2486  protected void parseAccountRelatedAccountComponentProperties(JsonObject json, Account.AccountRelatedAccountComponent res) throws IOException, FHIRFormatError {
2487    parseBackboneElementProperties(json, res);
2488    if (json.has("relationship"))
2489      res.setRelationship(parseCodeableConcept(getJObject(json, "relationship")));
2490    if (json.has("account"))
2491      res.setAccount(parseReference(getJObject(json, "account")));
2492  }
2493
2494  protected Account.AccountBalanceComponent parseAccountBalanceComponent(JsonObject json) throws IOException, FHIRFormatError {
2495    Account.AccountBalanceComponent res = new Account.AccountBalanceComponent();
2496    parseAccountBalanceComponentProperties(json, res);
2497    return res;
2498  }
2499
2500  protected void parseAccountBalanceComponentProperties(JsonObject json, Account.AccountBalanceComponent res) throws IOException, FHIRFormatError {
2501    parseBackboneElementProperties(json, res);
2502    if (json.has("aggregate"))
2503      res.setAggregate(parseCodeableConcept(getJObject(json, "aggregate")));
2504    if (json.has("term"))
2505      res.setTerm(parseCodeableConcept(getJObject(json, "term")));
2506    if (json.has("estimate"))
2507      res.setEstimateElement(parseBoolean(json.get("estimate").getAsBoolean()));
2508    if (json.has("_estimate"))
2509      parseElementProperties(getJObject(json, "_estimate"), res.getEstimateElement());
2510    if (json.has("amount"))
2511      res.setAmount(parseMoney(getJObject(json, "amount")));
2512  }
2513
2514  protected ActivityDefinition parseActivityDefinition(JsonObject json) throws IOException, FHIRFormatError {
2515    ActivityDefinition res = new ActivityDefinition();
2516    parseActivityDefinitionProperties(json, res);
2517    return res;
2518  }
2519
2520  protected void parseActivityDefinitionProperties(JsonObject json, ActivityDefinition res) throws IOException, FHIRFormatError {
2521    parseMetadataResourceProperties(json, res);
2522    if (json.has("url"))
2523      res.setUrlElement(parseUri(json.get("url").getAsString()));
2524    if (json.has("_url"))
2525      parseElementProperties(getJObject(json, "_url"), res.getUrlElement());
2526    if (json.has("identifier")) {
2527      JsonArray array = getJArray(json, "identifier");
2528      for (int i = 0; i < array.size(); i++) {
2529        res.getIdentifier().add(parseIdentifier(array.get(i).getAsJsonObject()));
2530      }
2531    };
2532    if (json.has("version"))
2533      res.setVersionElement(parseString(json.get("version").getAsString()));
2534    if (json.has("_version"))
2535      parseElementProperties(getJObject(json, "_version"), res.getVersionElement());
2536    DataType versionAlgorithm = parseType("versionAlgorithm", json);
2537    if (versionAlgorithm != null)
2538      res.setVersionAlgorithm(versionAlgorithm);
2539    if (json.has("name"))
2540      res.setNameElement(parseString(json.get("name").getAsString()));
2541    if (json.has("_name"))
2542      parseElementProperties(getJObject(json, "_name"), res.getNameElement());
2543    if (json.has("title"))
2544      res.setTitleElement(parseString(json.get("title").getAsString()));
2545    if (json.has("_title"))
2546      parseElementProperties(getJObject(json, "_title"), res.getTitleElement());
2547    if (json.has("subtitle"))
2548      res.setSubtitleElement(parseString(json.get("subtitle").getAsString()));
2549    if (json.has("_subtitle"))
2550      parseElementProperties(getJObject(json, "_subtitle"), res.getSubtitleElement());
2551    if (json.has("status"))
2552      res.setStatusElement(parseEnumeration(json.get("status").getAsString(), Enumerations.PublicationStatus.NULL, new Enumerations.PublicationStatusEnumFactory()));
2553    if (json.has("_status"))
2554      parseElementProperties(getJObject(json, "_status"), res.getStatusElement());
2555    if (json.has("experimental"))
2556      res.setExperimentalElement(parseBoolean(json.get("experimental").getAsBoolean()));
2557    if (json.has("_experimental"))
2558      parseElementProperties(getJObject(json, "_experimental"), res.getExperimentalElement());
2559    DataType subject = parseType("subject", json);
2560    if (subject != null)
2561      res.setSubject(subject);
2562    if (json.has("date"))
2563      res.setDateElement(parseDateTime(json.get("date").getAsString()));
2564    if (json.has("_date"))
2565      parseElementProperties(getJObject(json, "_date"), res.getDateElement());
2566    if (json.has("publisher"))
2567      res.setPublisherElement(parseString(json.get("publisher").getAsString()));
2568    if (json.has("_publisher"))
2569      parseElementProperties(getJObject(json, "_publisher"), res.getPublisherElement());
2570    if (json.has("contact")) {
2571      JsonArray array = getJArray(json, "contact");
2572      for (int i = 0; i < array.size(); i++) {
2573        res.getContact().add(parseContactDetail(array.get(i).getAsJsonObject()));
2574      }
2575    };
2576    if (json.has("description"))
2577      res.setDescriptionElement(parseMarkdown(json.get("description").getAsString()));
2578    if (json.has("_description"))
2579      parseElementProperties(getJObject(json, "_description"), res.getDescriptionElement());
2580    if (json.has("useContext")) {
2581      JsonArray array = getJArray(json, "useContext");
2582      for (int i = 0; i < array.size(); i++) {
2583        res.getUseContext().add(parseUsageContext(array.get(i).getAsJsonObject()));
2584      }
2585    };
2586    if (json.has("jurisdiction")) {
2587      JsonArray array = getJArray(json, "jurisdiction");
2588      for (int i = 0; i < array.size(); i++) {
2589        res.getJurisdiction().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
2590      }
2591    };
2592    if (json.has("purpose"))
2593      res.setPurposeElement(parseMarkdown(json.get("purpose").getAsString()));
2594    if (json.has("_purpose"))
2595      parseElementProperties(getJObject(json, "_purpose"), res.getPurposeElement());
2596    if (json.has("usage"))
2597      res.setUsageElement(parseMarkdown(json.get("usage").getAsString()));
2598    if (json.has("_usage"))
2599      parseElementProperties(getJObject(json, "_usage"), res.getUsageElement());
2600    if (json.has("copyright"))
2601      res.setCopyrightElement(parseMarkdown(json.get("copyright").getAsString()));
2602    if (json.has("_copyright"))
2603      parseElementProperties(getJObject(json, "_copyright"), res.getCopyrightElement());
2604    if (json.has("copyrightLabel"))
2605      res.setCopyrightLabelElement(parseString(json.get("copyrightLabel").getAsString()));
2606    if (json.has("_copyrightLabel"))
2607      parseElementProperties(getJObject(json, "_copyrightLabel"), res.getCopyrightLabelElement());
2608    if (json.has("approvalDate"))
2609      res.setApprovalDateElement(parseDate(json.get("approvalDate").getAsString()));
2610    if (json.has("_approvalDate"))
2611      parseElementProperties(getJObject(json, "_approvalDate"), res.getApprovalDateElement());
2612    if (json.has("lastReviewDate"))
2613      res.setLastReviewDateElement(parseDate(json.get("lastReviewDate").getAsString()));
2614    if (json.has("_lastReviewDate"))
2615      parseElementProperties(getJObject(json, "_lastReviewDate"), res.getLastReviewDateElement());
2616    if (json.has("effectivePeriod"))
2617      res.setEffectivePeriod(parsePeriod(getJObject(json, "effectivePeriod")));
2618    if (json.has("topic")) {
2619      JsonArray array = getJArray(json, "topic");
2620      for (int i = 0; i < array.size(); i++) {
2621        res.getTopic().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
2622      }
2623    };
2624    if (json.has("author")) {
2625      JsonArray array = getJArray(json, "author");
2626      for (int i = 0; i < array.size(); i++) {
2627        res.getAuthor().add(parseContactDetail(array.get(i).getAsJsonObject()));
2628      }
2629    };
2630    if (json.has("editor")) {
2631      JsonArray array = getJArray(json, "editor");
2632      for (int i = 0; i < array.size(); i++) {
2633        res.getEditor().add(parseContactDetail(array.get(i).getAsJsonObject()));
2634      }
2635    };
2636    if (json.has("reviewer")) {
2637      JsonArray array = getJArray(json, "reviewer");
2638      for (int i = 0; i < array.size(); i++) {
2639        res.getReviewer().add(parseContactDetail(array.get(i).getAsJsonObject()));
2640      }
2641    };
2642    if (json.has("endorser")) {
2643      JsonArray array = getJArray(json, "endorser");
2644      for (int i = 0; i < array.size(); i++) {
2645        res.getEndorser().add(parseContactDetail(array.get(i).getAsJsonObject()));
2646      }
2647    };
2648    if (json.has("relatedArtifact")) {
2649      JsonArray array = getJArray(json, "relatedArtifact");
2650      for (int i = 0; i < array.size(); i++) {
2651        res.getRelatedArtifact().add(parseRelatedArtifact(array.get(i).getAsJsonObject()));
2652      }
2653    };
2654    if (json.has("library")) {
2655      JsonArray array = getJArray(json, "library");
2656      for (int i = 0; i < array.size(); i++) {
2657        if (array.get(i).isJsonNull()) {
2658          res.getLibrary().add(new CanonicalType());
2659        } else {;
2660          res.getLibrary().add(parseCanonical(array.get(i).getAsString()));
2661        }
2662      }
2663    };
2664    if (json.has("_library")) {
2665      JsonArray array = getJArray(json, "_library");
2666      for (int i = 0; i < array.size(); i++) {
2667        if (i == res.getLibrary().size())
2668          res.getLibrary().add(parseCanonical(null));
2669        if (array.get(i) instanceof JsonObject) 
2670          parseElementProperties(array.get(i).getAsJsonObject(), res.getLibrary().get(i));
2671      }
2672    };
2673    if (json.has("kind"))
2674      res.setKindElement(parseEnumeration(json.get("kind").getAsString(), ActivityDefinition.RequestResourceTypes.NULL, new ActivityDefinition.RequestResourceTypesEnumFactory()));
2675    if (json.has("_kind"))
2676      parseElementProperties(getJObject(json, "_kind"), res.getKindElement());
2677    if (json.has("profile"))
2678      res.setProfileElement(parseCanonical(json.get("profile").getAsString()));
2679    if (json.has("_profile"))
2680      parseElementProperties(getJObject(json, "_profile"), res.getProfileElement());
2681    if (json.has("code"))
2682      res.setCode(parseCodeableConcept(getJObject(json, "code")));
2683    if (json.has("intent"))
2684      res.setIntentElement(parseEnumeration(json.get("intent").getAsString(), Enumerations.RequestIntent.NULL, new Enumerations.RequestIntentEnumFactory()));
2685    if (json.has("_intent"))
2686      parseElementProperties(getJObject(json, "_intent"), res.getIntentElement());
2687    if (json.has("priority"))
2688      res.setPriorityElement(parseEnumeration(json.get("priority").getAsString(), Enumerations.RequestPriority.NULL, new Enumerations.RequestPriorityEnumFactory()));
2689    if (json.has("_priority"))
2690      parseElementProperties(getJObject(json, "_priority"), res.getPriorityElement());
2691    if (json.has("doNotPerform"))
2692      res.setDoNotPerformElement(parseBoolean(json.get("doNotPerform").getAsBoolean()));
2693    if (json.has("_doNotPerform"))
2694      parseElementProperties(getJObject(json, "_doNotPerform"), res.getDoNotPerformElement());
2695    DataType timing = parseType("timing", json);
2696    if (timing != null)
2697      res.setTiming(timing);
2698    DataType asNeeded = parseType("asNeeded", json);
2699    if (asNeeded != null)
2700      res.setAsNeeded(asNeeded);
2701    if (json.has("location"))
2702      res.setLocation(parseCodeableReference(getJObject(json, "location")));
2703    if (json.has("participant")) {
2704      JsonArray array = getJArray(json, "participant");
2705      for (int i = 0; i < array.size(); i++) {
2706        res.getParticipant().add(parseActivityDefinitionParticipantComponent(array.get(i).getAsJsonObject()));
2707      }
2708    };
2709    DataType product = parseType("product", json);
2710    if (product != null)
2711      res.setProduct(product);
2712    if (json.has("quantity"))
2713      res.setQuantity(parseQuantity(getJObject(json, "quantity")));
2714    if (json.has("dosage")) {
2715      JsonArray array = getJArray(json, "dosage");
2716      for (int i = 0; i < array.size(); i++) {
2717        res.getDosage().add(parseDosage(array.get(i).getAsJsonObject()));
2718      }
2719    };
2720    if (json.has("bodySite")) {
2721      JsonArray array = getJArray(json, "bodySite");
2722      for (int i = 0; i < array.size(); i++) {
2723        res.getBodySite().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
2724      }
2725    };
2726    if (json.has("specimenRequirement")) {
2727      JsonArray array = getJArray(json, "specimenRequirement");
2728      for (int i = 0; i < array.size(); i++) {
2729        if (array.get(i).isJsonNull()) {
2730          res.getSpecimenRequirement().add(new CanonicalType());
2731        } else {;
2732          res.getSpecimenRequirement().add(parseCanonical(array.get(i).getAsString()));
2733        }
2734      }
2735    };
2736    if (json.has("_specimenRequirement")) {
2737      JsonArray array = getJArray(json, "_specimenRequirement");
2738      for (int i = 0; i < array.size(); i++) {
2739        if (i == res.getSpecimenRequirement().size())
2740          res.getSpecimenRequirement().add(parseCanonical(null));
2741        if (array.get(i) instanceof JsonObject) 
2742          parseElementProperties(array.get(i).getAsJsonObject(), res.getSpecimenRequirement().get(i));
2743      }
2744    };
2745    if (json.has("observationRequirement")) {
2746      JsonArray array = getJArray(json, "observationRequirement");
2747      for (int i = 0; i < array.size(); i++) {
2748        if (array.get(i).isJsonNull()) {
2749          res.getObservationRequirement().add(new CanonicalType());
2750        } else {;
2751          res.getObservationRequirement().add(parseCanonical(array.get(i).getAsString()));
2752        }
2753      }
2754    };
2755    if (json.has("_observationRequirement")) {
2756      JsonArray array = getJArray(json, "_observationRequirement");
2757      for (int i = 0; i < array.size(); i++) {
2758        if (i == res.getObservationRequirement().size())
2759          res.getObservationRequirement().add(parseCanonical(null));
2760        if (array.get(i) instanceof JsonObject) 
2761          parseElementProperties(array.get(i).getAsJsonObject(), res.getObservationRequirement().get(i));
2762      }
2763    };
2764    if (json.has("observationResultRequirement")) {
2765      JsonArray array = getJArray(json, "observationResultRequirement");
2766      for (int i = 0; i < array.size(); i++) {
2767        if (array.get(i).isJsonNull()) {
2768          res.getObservationResultRequirement().add(new CanonicalType());
2769        } else {;
2770          res.getObservationResultRequirement().add(parseCanonical(array.get(i).getAsString()));
2771        }
2772      }
2773    };
2774    if (json.has("_observationResultRequirement")) {
2775      JsonArray array = getJArray(json, "_observationResultRequirement");
2776      for (int i = 0; i < array.size(); i++) {
2777        if (i == res.getObservationResultRequirement().size())
2778          res.getObservationResultRequirement().add(parseCanonical(null));
2779        if (array.get(i) instanceof JsonObject) 
2780          parseElementProperties(array.get(i).getAsJsonObject(), res.getObservationResultRequirement().get(i));
2781      }
2782    };
2783    if (json.has("transform"))
2784      res.setTransformElement(parseCanonical(json.get("transform").getAsString()));
2785    if (json.has("_transform"))
2786      parseElementProperties(getJObject(json, "_transform"), res.getTransformElement());
2787    if (json.has("dynamicValue")) {
2788      JsonArray array = getJArray(json, "dynamicValue");
2789      for (int i = 0; i < array.size(); i++) {
2790        res.getDynamicValue().add(parseActivityDefinitionDynamicValueComponent(array.get(i).getAsJsonObject()));
2791      }
2792    };
2793  }
2794
2795  protected ActivityDefinition.ActivityDefinitionParticipantComponent parseActivityDefinitionParticipantComponent(JsonObject json) throws IOException, FHIRFormatError {
2796    ActivityDefinition.ActivityDefinitionParticipantComponent res = new ActivityDefinition.ActivityDefinitionParticipantComponent();
2797    parseActivityDefinitionParticipantComponentProperties(json, res);
2798    return res;
2799  }
2800
2801  protected void parseActivityDefinitionParticipantComponentProperties(JsonObject json, ActivityDefinition.ActivityDefinitionParticipantComponent res) throws IOException, FHIRFormatError {
2802    parseBackboneElementProperties(json, res);
2803    if (json.has("type"))
2804      res.setTypeElement(parseEnumeration(json.get("type").getAsString(), Enumerations.ActionParticipantType.NULL, new Enumerations.ActionParticipantTypeEnumFactory()));
2805    if (json.has("_type"))
2806      parseElementProperties(getJObject(json, "_type"), res.getTypeElement());
2807    if (json.has("typeCanonical"))
2808      res.setTypeCanonicalElement(parseCanonical(json.get("typeCanonical").getAsString()));
2809    if (json.has("_typeCanonical"))
2810      parseElementProperties(getJObject(json, "_typeCanonical"), res.getTypeCanonicalElement());
2811    if (json.has("typeReference"))
2812      res.setTypeReference(parseReference(getJObject(json, "typeReference")));
2813    if (json.has("role"))
2814      res.setRole(parseCodeableConcept(getJObject(json, "role")));
2815    if (json.has("function"))
2816      res.setFunction(parseCodeableConcept(getJObject(json, "function")));
2817  }
2818
2819  protected ActivityDefinition.ActivityDefinitionDynamicValueComponent parseActivityDefinitionDynamicValueComponent(JsonObject json) throws IOException, FHIRFormatError {
2820    ActivityDefinition.ActivityDefinitionDynamicValueComponent res = new ActivityDefinition.ActivityDefinitionDynamicValueComponent();
2821    parseActivityDefinitionDynamicValueComponentProperties(json, res);
2822    return res;
2823  }
2824
2825  protected void parseActivityDefinitionDynamicValueComponentProperties(JsonObject json, ActivityDefinition.ActivityDefinitionDynamicValueComponent res) throws IOException, FHIRFormatError {
2826    parseBackboneElementProperties(json, res);
2827    if (json.has("path"))
2828      res.setPathElement(parseString(json.get("path").getAsString()));
2829    if (json.has("_path"))
2830      parseElementProperties(getJObject(json, "_path"), res.getPathElement());
2831    if (json.has("expression"))
2832      res.setExpression(parseExpression(getJObject(json, "expression")));
2833  }
2834
2835  protected ActorDefinition parseActorDefinition(JsonObject json) throws IOException, FHIRFormatError {
2836    ActorDefinition res = new ActorDefinition();
2837    parseActorDefinitionProperties(json, res);
2838    return res;
2839  }
2840
2841  protected void parseActorDefinitionProperties(JsonObject json, ActorDefinition res) throws IOException, FHIRFormatError {
2842    parseCanonicalResourceProperties(json, res);
2843    if (json.has("url"))
2844      res.setUrlElement(parseUri(json.get("url").getAsString()));
2845    if (json.has("_url"))
2846      parseElementProperties(getJObject(json, "_url"), res.getUrlElement());
2847    if (json.has("identifier")) {
2848      JsonArray array = getJArray(json, "identifier");
2849      for (int i = 0; i < array.size(); i++) {
2850        res.getIdentifier().add(parseIdentifier(array.get(i).getAsJsonObject()));
2851      }
2852    };
2853    if (json.has("version"))
2854      res.setVersionElement(parseString(json.get("version").getAsString()));
2855    if (json.has("_version"))
2856      parseElementProperties(getJObject(json, "_version"), res.getVersionElement());
2857    DataType versionAlgorithm = parseType("versionAlgorithm", json);
2858    if (versionAlgorithm != null)
2859      res.setVersionAlgorithm(versionAlgorithm);
2860    if (json.has("name"))
2861      res.setNameElement(parseString(json.get("name").getAsString()));
2862    if (json.has("_name"))
2863      parseElementProperties(getJObject(json, "_name"), res.getNameElement());
2864    if (json.has("title"))
2865      res.setTitleElement(parseString(json.get("title").getAsString()));
2866    if (json.has("_title"))
2867      parseElementProperties(getJObject(json, "_title"), res.getTitleElement());
2868    if (json.has("status"))
2869      res.setStatusElement(parseEnumeration(json.get("status").getAsString(), Enumerations.PublicationStatus.NULL, new Enumerations.PublicationStatusEnumFactory()));
2870    if (json.has("_status"))
2871      parseElementProperties(getJObject(json, "_status"), res.getStatusElement());
2872    if (json.has("experimental"))
2873      res.setExperimentalElement(parseBoolean(json.get("experimental").getAsBoolean()));
2874    if (json.has("_experimental"))
2875      parseElementProperties(getJObject(json, "_experimental"), res.getExperimentalElement());
2876    if (json.has("date"))
2877      res.setDateElement(parseDateTime(json.get("date").getAsString()));
2878    if (json.has("_date"))
2879      parseElementProperties(getJObject(json, "_date"), res.getDateElement());
2880    if (json.has("publisher"))
2881      res.setPublisherElement(parseString(json.get("publisher").getAsString()));
2882    if (json.has("_publisher"))
2883      parseElementProperties(getJObject(json, "_publisher"), res.getPublisherElement());
2884    if (json.has("contact")) {
2885      JsonArray array = getJArray(json, "contact");
2886      for (int i = 0; i < array.size(); i++) {
2887        res.getContact().add(parseContactDetail(array.get(i).getAsJsonObject()));
2888      }
2889    };
2890    if (json.has("description"))
2891      res.setDescriptionElement(parseMarkdown(json.get("description").getAsString()));
2892    if (json.has("_description"))
2893      parseElementProperties(getJObject(json, "_description"), res.getDescriptionElement());
2894    if (json.has("useContext")) {
2895      JsonArray array = getJArray(json, "useContext");
2896      for (int i = 0; i < array.size(); i++) {
2897        res.getUseContext().add(parseUsageContext(array.get(i).getAsJsonObject()));
2898      }
2899    };
2900    if (json.has("jurisdiction")) {
2901      JsonArray array = getJArray(json, "jurisdiction");
2902      for (int i = 0; i < array.size(); i++) {
2903        res.getJurisdiction().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
2904      }
2905    };
2906    if (json.has("purpose"))
2907      res.setPurposeElement(parseMarkdown(json.get("purpose").getAsString()));
2908    if (json.has("_purpose"))
2909      parseElementProperties(getJObject(json, "_purpose"), res.getPurposeElement());
2910    if (json.has("copyright"))
2911      res.setCopyrightElement(parseMarkdown(json.get("copyright").getAsString()));
2912    if (json.has("_copyright"))
2913      parseElementProperties(getJObject(json, "_copyright"), res.getCopyrightElement());
2914    if (json.has("copyrightLabel"))
2915      res.setCopyrightLabelElement(parseString(json.get("copyrightLabel").getAsString()));
2916    if (json.has("_copyrightLabel"))
2917      parseElementProperties(getJObject(json, "_copyrightLabel"), res.getCopyrightLabelElement());
2918    if (json.has("type"))
2919      res.setTypeElement(parseEnumeration(json.get("type").getAsString(), Enumerations.ExampleScenarioActorType.NULL, new Enumerations.ExampleScenarioActorTypeEnumFactory()));
2920    if (json.has("_type"))
2921      parseElementProperties(getJObject(json, "_type"), res.getTypeElement());
2922    if (json.has("documentation"))
2923      res.setDocumentationElement(parseMarkdown(json.get("documentation").getAsString()));
2924    if (json.has("_documentation"))
2925      parseElementProperties(getJObject(json, "_documentation"), res.getDocumentationElement());
2926    if (json.has("reference")) {
2927      JsonArray array = getJArray(json, "reference");
2928      for (int i = 0; i < array.size(); i++) {
2929        if (array.get(i).isJsonNull()) {
2930          res.getReference().add(new UrlType());
2931        } else {;
2932          res.getReference().add(parseUrl(array.get(i).getAsString()));
2933        }
2934      }
2935    };
2936    if (json.has("_reference")) {
2937      JsonArray array = getJArray(json, "_reference");
2938      for (int i = 0; i < array.size(); i++) {
2939        if (i == res.getReference().size())
2940          res.getReference().add(parseUrl(null));
2941        if (array.get(i) instanceof JsonObject) 
2942          parseElementProperties(array.get(i).getAsJsonObject(), res.getReference().get(i));
2943      }
2944    };
2945    if (json.has("capabilities"))
2946      res.setCapabilitiesElement(parseCanonical(json.get("capabilities").getAsString()));
2947    if (json.has("_capabilities"))
2948      parseElementProperties(getJObject(json, "_capabilities"), res.getCapabilitiesElement());
2949    if (json.has("derivedFrom")) {
2950      JsonArray array = getJArray(json, "derivedFrom");
2951      for (int i = 0; i < array.size(); i++) {
2952        if (array.get(i).isJsonNull()) {
2953          res.getDerivedFrom().add(new CanonicalType());
2954        } else {;
2955          res.getDerivedFrom().add(parseCanonical(array.get(i).getAsString()));
2956        }
2957      }
2958    };
2959    if (json.has("_derivedFrom")) {
2960      JsonArray array = getJArray(json, "_derivedFrom");
2961      for (int i = 0; i < array.size(); i++) {
2962        if (i == res.getDerivedFrom().size())
2963          res.getDerivedFrom().add(parseCanonical(null));
2964        if (array.get(i) instanceof JsonObject) 
2965          parseElementProperties(array.get(i).getAsJsonObject(), res.getDerivedFrom().get(i));
2966      }
2967    };
2968  }
2969
2970  protected AdministrableProductDefinition parseAdministrableProductDefinition(JsonObject json) throws IOException, FHIRFormatError {
2971    AdministrableProductDefinition res = new AdministrableProductDefinition();
2972    parseAdministrableProductDefinitionProperties(json, res);
2973    return res;
2974  }
2975
2976  protected void parseAdministrableProductDefinitionProperties(JsonObject json, AdministrableProductDefinition res) throws IOException, FHIRFormatError {
2977    parseDomainResourceProperties(json, res);
2978    if (json.has("identifier")) {
2979      JsonArray array = getJArray(json, "identifier");
2980      for (int i = 0; i < array.size(); i++) {
2981        res.getIdentifier().add(parseIdentifier(array.get(i).getAsJsonObject()));
2982      }
2983    };
2984    if (json.has("status"))
2985      res.setStatusElement(parseEnumeration(json.get("status").getAsString(), Enumerations.PublicationStatus.NULL, new Enumerations.PublicationStatusEnumFactory()));
2986    if (json.has("_status"))
2987      parseElementProperties(getJObject(json, "_status"), res.getStatusElement());
2988    if (json.has("formOf")) {
2989      JsonArray array = getJArray(json, "formOf");
2990      for (int i = 0; i < array.size(); i++) {
2991        res.getFormOf().add(parseReference(array.get(i).getAsJsonObject()));
2992      }
2993    };
2994    if (json.has("administrableDoseForm"))
2995      res.setAdministrableDoseForm(parseCodeableConcept(getJObject(json, "administrableDoseForm")));
2996    if (json.has("unitOfPresentation"))
2997      res.setUnitOfPresentation(parseCodeableConcept(getJObject(json, "unitOfPresentation")));
2998    if (json.has("producedFrom")) {
2999      JsonArray array = getJArray(json, "producedFrom");
3000      for (int i = 0; i < array.size(); i++) {
3001        res.getProducedFrom().add(parseReference(array.get(i).getAsJsonObject()));
3002      }
3003    };
3004    if (json.has("ingredient")) {
3005      JsonArray array = getJArray(json, "ingredient");
3006      for (int i = 0; i < array.size(); i++) {
3007        res.getIngredient().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
3008      }
3009    };
3010    if (json.has("device"))
3011      res.setDevice(parseReference(getJObject(json, "device")));
3012    if (json.has("description"))
3013      res.setDescriptionElement(parseMarkdown(json.get("description").getAsString()));
3014    if (json.has("_description"))
3015      parseElementProperties(getJObject(json, "_description"), res.getDescriptionElement());
3016    if (json.has("property")) {
3017      JsonArray array = getJArray(json, "property");
3018      for (int i = 0; i < array.size(); i++) {
3019        res.getProperty().add(parseAdministrableProductDefinitionPropertyComponent(array.get(i).getAsJsonObject()));
3020      }
3021    };
3022    if (json.has("routeOfAdministration")) {
3023      JsonArray array = getJArray(json, "routeOfAdministration");
3024      for (int i = 0; i < array.size(); i++) {
3025        res.getRouteOfAdministration().add(parseAdministrableProductDefinitionRouteOfAdministrationComponent(array.get(i).getAsJsonObject()));
3026      }
3027    };
3028  }
3029
3030  protected AdministrableProductDefinition.AdministrableProductDefinitionPropertyComponent parseAdministrableProductDefinitionPropertyComponent(JsonObject json) throws IOException, FHIRFormatError {
3031    AdministrableProductDefinition.AdministrableProductDefinitionPropertyComponent res = new AdministrableProductDefinition.AdministrableProductDefinitionPropertyComponent();
3032    parseAdministrableProductDefinitionPropertyComponentProperties(json, res);
3033    return res;
3034  }
3035
3036  protected void parseAdministrableProductDefinitionPropertyComponentProperties(JsonObject json, AdministrableProductDefinition.AdministrableProductDefinitionPropertyComponent res) throws IOException, FHIRFormatError {
3037    parseBackboneElementProperties(json, res);
3038    if (json.has("type"))
3039      res.setType(parseCodeableConcept(getJObject(json, "type")));
3040    DataType value = parseType("value", json);
3041    if (value != null)
3042      res.setValue(value);
3043    if (json.has("status"))
3044      res.setStatus(parseCodeableConcept(getJObject(json, "status")));
3045  }
3046
3047  protected AdministrableProductDefinition.AdministrableProductDefinitionRouteOfAdministrationComponent parseAdministrableProductDefinitionRouteOfAdministrationComponent(JsonObject json) throws IOException, FHIRFormatError {
3048    AdministrableProductDefinition.AdministrableProductDefinitionRouteOfAdministrationComponent res = new AdministrableProductDefinition.AdministrableProductDefinitionRouteOfAdministrationComponent();
3049    parseAdministrableProductDefinitionRouteOfAdministrationComponentProperties(json, res);
3050    return res;
3051  }
3052
3053  protected void parseAdministrableProductDefinitionRouteOfAdministrationComponentProperties(JsonObject json, AdministrableProductDefinition.AdministrableProductDefinitionRouteOfAdministrationComponent res) throws IOException, FHIRFormatError {
3054    parseBackboneElementProperties(json, res);
3055    if (json.has("code"))
3056      res.setCode(parseCodeableConcept(getJObject(json, "code")));
3057    if (json.has("firstDose"))
3058      res.setFirstDose(parseQuantity(getJObject(json, "firstDose")));
3059    if (json.has("maxSingleDose"))
3060      res.setMaxSingleDose(parseQuantity(getJObject(json, "maxSingleDose")));
3061    if (json.has("maxDosePerDay"))
3062      res.setMaxDosePerDay(parseQuantity(getJObject(json, "maxDosePerDay")));
3063    if (json.has("maxDosePerTreatmentPeriod"))
3064      res.setMaxDosePerTreatmentPeriod(parseRatio(getJObject(json, "maxDosePerTreatmentPeriod")));
3065    if (json.has("maxTreatmentPeriod"))
3066      res.setMaxTreatmentPeriod(parseDuration(getJObject(json, "maxTreatmentPeriod")));
3067    if (json.has("targetSpecies")) {
3068      JsonArray array = getJArray(json, "targetSpecies");
3069      for (int i = 0; i < array.size(); i++) {
3070        res.getTargetSpecies().add(parseAdministrableProductDefinitionRouteOfAdministrationTargetSpeciesComponent(array.get(i).getAsJsonObject()));
3071      }
3072    };
3073  }
3074
3075  protected AdministrableProductDefinition.AdministrableProductDefinitionRouteOfAdministrationTargetSpeciesComponent parseAdministrableProductDefinitionRouteOfAdministrationTargetSpeciesComponent(JsonObject json) throws IOException, FHIRFormatError {
3076    AdministrableProductDefinition.AdministrableProductDefinitionRouteOfAdministrationTargetSpeciesComponent res = new AdministrableProductDefinition.AdministrableProductDefinitionRouteOfAdministrationTargetSpeciesComponent();
3077    parseAdministrableProductDefinitionRouteOfAdministrationTargetSpeciesComponentProperties(json, res);
3078    return res;
3079  }
3080
3081  protected void parseAdministrableProductDefinitionRouteOfAdministrationTargetSpeciesComponentProperties(JsonObject json, AdministrableProductDefinition.AdministrableProductDefinitionRouteOfAdministrationTargetSpeciesComponent res) throws IOException, FHIRFormatError {
3082    parseBackboneElementProperties(json, res);
3083    if (json.has("code"))
3084      res.setCode(parseCodeableConcept(getJObject(json, "code")));
3085    if (json.has("withdrawalPeriod")) {
3086      JsonArray array = getJArray(json, "withdrawalPeriod");
3087      for (int i = 0; i < array.size(); i++) {
3088        res.getWithdrawalPeriod().add(parseAdministrableProductDefinitionRouteOfAdministrationTargetSpeciesWithdrawalPeriodComponent(array.get(i).getAsJsonObject()));
3089      }
3090    };
3091  }
3092
3093  protected AdministrableProductDefinition.AdministrableProductDefinitionRouteOfAdministrationTargetSpeciesWithdrawalPeriodComponent parseAdministrableProductDefinitionRouteOfAdministrationTargetSpeciesWithdrawalPeriodComponent(JsonObject json) throws IOException, FHIRFormatError {
3094    AdministrableProductDefinition.AdministrableProductDefinitionRouteOfAdministrationTargetSpeciesWithdrawalPeriodComponent res = new AdministrableProductDefinition.AdministrableProductDefinitionRouteOfAdministrationTargetSpeciesWithdrawalPeriodComponent();
3095    parseAdministrableProductDefinitionRouteOfAdministrationTargetSpeciesWithdrawalPeriodComponentProperties(json, res);
3096    return res;
3097  }
3098
3099  protected void parseAdministrableProductDefinitionRouteOfAdministrationTargetSpeciesWithdrawalPeriodComponentProperties(JsonObject json, AdministrableProductDefinition.AdministrableProductDefinitionRouteOfAdministrationTargetSpeciesWithdrawalPeriodComponent res) throws IOException, FHIRFormatError {
3100    parseBackboneElementProperties(json, res);
3101    if (json.has("tissue"))
3102      res.setTissue(parseCodeableConcept(getJObject(json, "tissue")));
3103    if (json.has("value"))
3104      res.setValue(parseQuantity(getJObject(json, "value")));
3105    if (json.has("supportingInformation"))
3106      res.setSupportingInformationElement(parseString(json.get("supportingInformation").getAsString()));
3107    if (json.has("_supportingInformation"))
3108      parseElementProperties(getJObject(json, "_supportingInformation"), res.getSupportingInformationElement());
3109  }
3110
3111  protected AdverseEvent parseAdverseEvent(JsonObject json) throws IOException, FHIRFormatError {
3112    AdverseEvent res = new AdverseEvent();
3113    parseAdverseEventProperties(json, res);
3114    return res;
3115  }
3116
3117  protected void parseAdverseEventProperties(JsonObject json, AdverseEvent res) throws IOException, FHIRFormatError {
3118    parseDomainResourceProperties(json, res);
3119    if (json.has("identifier")) {
3120      JsonArray array = getJArray(json, "identifier");
3121      for (int i = 0; i < array.size(); i++) {
3122        res.getIdentifier().add(parseIdentifier(array.get(i).getAsJsonObject()));
3123      }
3124    };
3125    if (json.has("status"))
3126      res.setStatusElement(parseEnumeration(json.get("status").getAsString(), AdverseEvent.AdverseEventStatus.NULL, new AdverseEvent.AdverseEventStatusEnumFactory()));
3127    if (json.has("_status"))
3128      parseElementProperties(getJObject(json, "_status"), res.getStatusElement());
3129    if (json.has("actuality"))
3130      res.setActualityElement(parseEnumeration(json.get("actuality").getAsString(), AdverseEvent.AdverseEventActuality.NULL, new AdverseEvent.AdverseEventActualityEnumFactory()));
3131    if (json.has("_actuality"))
3132      parseElementProperties(getJObject(json, "_actuality"), res.getActualityElement());
3133    if (json.has("category")) {
3134      JsonArray array = getJArray(json, "category");
3135      for (int i = 0; i < array.size(); i++) {
3136        res.getCategory().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
3137      }
3138    };
3139    if (json.has("code"))
3140      res.setCode(parseCodeableConcept(getJObject(json, "code")));
3141    if (json.has("subject"))
3142      res.setSubject(parseReference(getJObject(json, "subject")));
3143    if (json.has("encounter"))
3144      res.setEncounter(parseReference(getJObject(json, "encounter")));
3145    DataType occurrence = parseType("occurrence", json);
3146    if (occurrence != null)
3147      res.setOccurrence(occurrence);
3148    if (json.has("detected"))
3149      res.setDetectedElement(parseDateTime(json.get("detected").getAsString()));
3150    if (json.has("_detected"))
3151      parseElementProperties(getJObject(json, "_detected"), res.getDetectedElement());
3152    if (json.has("recordedDate"))
3153      res.setRecordedDateElement(parseDateTime(json.get("recordedDate").getAsString()));
3154    if (json.has("_recordedDate"))
3155      parseElementProperties(getJObject(json, "_recordedDate"), res.getRecordedDateElement());
3156    if (json.has("resultingEffect")) {
3157      JsonArray array = getJArray(json, "resultingEffect");
3158      for (int i = 0; i < array.size(); i++) {
3159        res.getResultingEffect().add(parseReference(array.get(i).getAsJsonObject()));
3160      }
3161    };
3162    if (json.has("location"))
3163      res.setLocation(parseReference(getJObject(json, "location")));
3164    if (json.has("seriousness"))
3165      res.setSeriousness(parseCodeableConcept(getJObject(json, "seriousness")));
3166    if (json.has("outcome")) {
3167      JsonArray array = getJArray(json, "outcome");
3168      for (int i = 0; i < array.size(); i++) {
3169        res.getOutcome().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
3170      }
3171    };
3172    if (json.has("recorder"))
3173      res.setRecorder(parseReference(getJObject(json, "recorder")));
3174    if (json.has("participant")) {
3175      JsonArray array = getJArray(json, "participant");
3176      for (int i = 0; i < array.size(); i++) {
3177        res.getParticipant().add(parseAdverseEventParticipantComponent(array.get(i).getAsJsonObject()));
3178      }
3179    };
3180    if (json.has("study")) {
3181      JsonArray array = getJArray(json, "study");
3182      for (int i = 0; i < array.size(); i++) {
3183        res.getStudy().add(parseReference(array.get(i).getAsJsonObject()));
3184      }
3185    };
3186    if (json.has("expectedInResearchStudy"))
3187      res.setExpectedInResearchStudyElement(parseBoolean(json.get("expectedInResearchStudy").getAsBoolean()));
3188    if (json.has("_expectedInResearchStudy"))
3189      parseElementProperties(getJObject(json, "_expectedInResearchStudy"), res.getExpectedInResearchStudyElement());
3190    if (json.has("suspectEntity")) {
3191      JsonArray array = getJArray(json, "suspectEntity");
3192      for (int i = 0; i < array.size(); i++) {
3193        res.getSuspectEntity().add(parseAdverseEventSuspectEntityComponent(array.get(i).getAsJsonObject()));
3194      }
3195    };
3196    if (json.has("contributingFactor")) {
3197      JsonArray array = getJArray(json, "contributingFactor");
3198      for (int i = 0; i < array.size(); i++) {
3199        res.getContributingFactor().add(parseAdverseEventContributingFactorComponent(array.get(i).getAsJsonObject()));
3200      }
3201    };
3202    if (json.has("preventiveAction")) {
3203      JsonArray array = getJArray(json, "preventiveAction");
3204      for (int i = 0; i < array.size(); i++) {
3205        res.getPreventiveAction().add(parseAdverseEventPreventiveActionComponent(array.get(i).getAsJsonObject()));
3206      }
3207    };
3208    if (json.has("mitigatingAction")) {
3209      JsonArray array = getJArray(json, "mitigatingAction");
3210      for (int i = 0; i < array.size(); i++) {
3211        res.getMitigatingAction().add(parseAdverseEventMitigatingActionComponent(array.get(i).getAsJsonObject()));
3212      }
3213    };
3214    if (json.has("supportingInfo")) {
3215      JsonArray array = getJArray(json, "supportingInfo");
3216      for (int i = 0; i < array.size(); i++) {
3217        res.getSupportingInfo().add(parseAdverseEventSupportingInfoComponent(array.get(i).getAsJsonObject()));
3218      }
3219    };
3220    if (json.has("note")) {
3221      JsonArray array = getJArray(json, "note");
3222      for (int i = 0; i < array.size(); i++) {
3223        res.getNote().add(parseAnnotation(array.get(i).getAsJsonObject()));
3224      }
3225    };
3226  }
3227
3228  protected AdverseEvent.AdverseEventParticipantComponent parseAdverseEventParticipantComponent(JsonObject json) throws IOException, FHIRFormatError {
3229    AdverseEvent.AdverseEventParticipantComponent res = new AdverseEvent.AdverseEventParticipantComponent();
3230    parseAdverseEventParticipantComponentProperties(json, res);
3231    return res;
3232  }
3233
3234  protected void parseAdverseEventParticipantComponentProperties(JsonObject json, AdverseEvent.AdverseEventParticipantComponent res) throws IOException, FHIRFormatError {
3235    parseBackboneElementProperties(json, res);
3236    if (json.has("function"))
3237      res.setFunction(parseCodeableConcept(getJObject(json, "function")));
3238    if (json.has("actor"))
3239      res.setActor(parseReference(getJObject(json, "actor")));
3240  }
3241
3242  protected AdverseEvent.AdverseEventSuspectEntityComponent parseAdverseEventSuspectEntityComponent(JsonObject json) throws IOException, FHIRFormatError {
3243    AdverseEvent.AdverseEventSuspectEntityComponent res = new AdverseEvent.AdverseEventSuspectEntityComponent();
3244    parseAdverseEventSuspectEntityComponentProperties(json, res);
3245    return res;
3246  }
3247
3248  protected void parseAdverseEventSuspectEntityComponentProperties(JsonObject json, AdverseEvent.AdverseEventSuspectEntityComponent res) throws IOException, FHIRFormatError {
3249    parseBackboneElementProperties(json, res);
3250    DataType instance = parseType("instance", json);
3251    if (instance != null)
3252      res.setInstance(instance);
3253    if (json.has("causality"))
3254      res.setCausality(parseAdverseEventSuspectEntityCausalityComponent(getJObject(json, "causality")));
3255  }
3256
3257  protected AdverseEvent.AdverseEventSuspectEntityCausalityComponent parseAdverseEventSuspectEntityCausalityComponent(JsonObject json) throws IOException, FHIRFormatError {
3258    AdverseEvent.AdverseEventSuspectEntityCausalityComponent res = new AdverseEvent.AdverseEventSuspectEntityCausalityComponent();
3259    parseAdverseEventSuspectEntityCausalityComponentProperties(json, res);
3260    return res;
3261  }
3262
3263  protected void parseAdverseEventSuspectEntityCausalityComponentProperties(JsonObject json, AdverseEvent.AdverseEventSuspectEntityCausalityComponent res) throws IOException, FHIRFormatError {
3264    parseBackboneElementProperties(json, res);
3265    if (json.has("assessmentMethod"))
3266      res.setAssessmentMethod(parseCodeableConcept(getJObject(json, "assessmentMethod")));
3267    if (json.has("entityRelatedness"))
3268      res.setEntityRelatedness(parseCodeableConcept(getJObject(json, "entityRelatedness")));
3269    if (json.has("author"))
3270      res.setAuthor(parseReference(getJObject(json, "author")));
3271  }
3272
3273  protected AdverseEvent.AdverseEventContributingFactorComponent parseAdverseEventContributingFactorComponent(JsonObject json) throws IOException, FHIRFormatError {
3274    AdverseEvent.AdverseEventContributingFactorComponent res = new AdverseEvent.AdverseEventContributingFactorComponent();
3275    parseAdverseEventContributingFactorComponentProperties(json, res);
3276    return res;
3277  }
3278
3279  protected void parseAdverseEventContributingFactorComponentProperties(JsonObject json, AdverseEvent.AdverseEventContributingFactorComponent res) throws IOException, FHIRFormatError {
3280    parseBackboneElementProperties(json, res);
3281    DataType item = parseType("item", json);
3282    if (item != null)
3283      res.setItem(item);
3284  }
3285
3286  protected AdverseEvent.AdverseEventPreventiveActionComponent parseAdverseEventPreventiveActionComponent(JsonObject json) throws IOException, FHIRFormatError {
3287    AdverseEvent.AdverseEventPreventiveActionComponent res = new AdverseEvent.AdverseEventPreventiveActionComponent();
3288    parseAdverseEventPreventiveActionComponentProperties(json, res);
3289    return res;
3290  }
3291
3292  protected void parseAdverseEventPreventiveActionComponentProperties(JsonObject json, AdverseEvent.AdverseEventPreventiveActionComponent res) throws IOException, FHIRFormatError {
3293    parseBackboneElementProperties(json, res);
3294    DataType item = parseType("item", json);
3295    if (item != null)
3296      res.setItem(item);
3297  }
3298
3299  protected AdverseEvent.AdverseEventMitigatingActionComponent parseAdverseEventMitigatingActionComponent(JsonObject json) throws IOException, FHIRFormatError {
3300    AdverseEvent.AdverseEventMitigatingActionComponent res = new AdverseEvent.AdverseEventMitigatingActionComponent();
3301    parseAdverseEventMitigatingActionComponentProperties(json, res);
3302    return res;
3303  }
3304
3305  protected void parseAdverseEventMitigatingActionComponentProperties(JsonObject json, AdverseEvent.AdverseEventMitigatingActionComponent res) throws IOException, FHIRFormatError {
3306    parseBackboneElementProperties(json, res);
3307    DataType item = parseType("item", json);
3308    if (item != null)
3309      res.setItem(item);
3310  }
3311
3312  protected AdverseEvent.AdverseEventSupportingInfoComponent parseAdverseEventSupportingInfoComponent(JsonObject json) throws IOException, FHIRFormatError {
3313    AdverseEvent.AdverseEventSupportingInfoComponent res = new AdverseEvent.AdverseEventSupportingInfoComponent();
3314    parseAdverseEventSupportingInfoComponentProperties(json, res);
3315    return res;
3316  }
3317
3318  protected void parseAdverseEventSupportingInfoComponentProperties(JsonObject json, AdverseEvent.AdverseEventSupportingInfoComponent res) throws IOException, FHIRFormatError {
3319    parseBackboneElementProperties(json, res);
3320    DataType item = parseType("item", json);
3321    if (item != null)
3322      res.setItem(item);
3323  }
3324
3325  protected AllergyIntolerance parseAllergyIntolerance(JsonObject json) throws IOException, FHIRFormatError {
3326    AllergyIntolerance res = new AllergyIntolerance();
3327    parseAllergyIntoleranceProperties(json, res);
3328    return res;
3329  }
3330
3331  protected void parseAllergyIntoleranceProperties(JsonObject json, AllergyIntolerance res) throws IOException, FHIRFormatError {
3332    parseDomainResourceProperties(json, res);
3333    if (json.has("identifier")) {
3334      JsonArray array = getJArray(json, "identifier");
3335      for (int i = 0; i < array.size(); i++) {
3336        res.getIdentifier().add(parseIdentifier(array.get(i).getAsJsonObject()));
3337      }
3338    };
3339    if (json.has("clinicalStatus"))
3340      res.setClinicalStatus(parseCodeableConcept(getJObject(json, "clinicalStatus")));
3341    if (json.has("verificationStatus"))
3342      res.setVerificationStatus(parseCodeableConcept(getJObject(json, "verificationStatus")));
3343    if (json.has("type"))
3344      res.setType(parseCodeableConcept(getJObject(json, "type")));
3345    if (json.has("category")) {
3346      JsonArray array = getJArray(json, "category");
3347      for (int i = 0; i < array.size(); i++) {
3348        if (array.get(i).isJsonNull()) {
3349          res.getCategory().add(new Enumeration<AllergyIntolerance.AllergyIntoleranceCategory>(new AllergyIntolerance.AllergyIntoleranceCategoryEnumFactory(), AllergyIntolerance.AllergyIntoleranceCategory.NULL));
3350        } else {;
3351          res.getCategory().add(parseEnumeration(array.get(i).getAsString(), AllergyIntolerance.AllergyIntoleranceCategory.NULL, new AllergyIntolerance.AllergyIntoleranceCategoryEnumFactory()));
3352        }
3353      }
3354    };
3355    if (json.has("_category")) {
3356      JsonArray array = getJArray(json, "_category");
3357      for (int i = 0; i < array.size(); i++) {
3358        if (i == res.getCategory().size())
3359          res.getCategory().add(parseEnumeration(null, AllergyIntolerance.AllergyIntoleranceCategory.NULL, new AllergyIntolerance.AllergyIntoleranceCategoryEnumFactory()));
3360        if (array.get(i) instanceof JsonObject) 
3361          parseElementProperties(array.get(i).getAsJsonObject(), res.getCategory().get(i));
3362      }
3363    };
3364    if (json.has("criticality"))
3365      res.setCriticalityElement(parseEnumeration(json.get("criticality").getAsString(), AllergyIntolerance.AllergyIntoleranceCriticality.NULL, new AllergyIntolerance.AllergyIntoleranceCriticalityEnumFactory()));
3366    if (json.has("_criticality"))
3367      parseElementProperties(getJObject(json, "_criticality"), res.getCriticalityElement());
3368    if (json.has("code"))
3369      res.setCode(parseCodeableConcept(getJObject(json, "code")));
3370    if (json.has("patient"))
3371      res.setPatient(parseReference(getJObject(json, "patient")));
3372    if (json.has("encounter"))
3373      res.setEncounter(parseReference(getJObject(json, "encounter")));
3374    DataType onset = parseType("onset", json);
3375    if (onset != null)
3376      res.setOnset(onset);
3377    if (json.has("recordedDate"))
3378      res.setRecordedDateElement(parseDateTime(json.get("recordedDate").getAsString()));
3379    if (json.has("_recordedDate"))
3380      parseElementProperties(getJObject(json, "_recordedDate"), res.getRecordedDateElement());
3381    if (json.has("participant")) {
3382      JsonArray array = getJArray(json, "participant");
3383      for (int i = 0; i < array.size(); i++) {
3384        res.getParticipant().add(parseAllergyIntoleranceParticipantComponent(array.get(i).getAsJsonObject()));
3385      }
3386    };
3387    if (json.has("lastOccurrence"))
3388      res.setLastOccurrenceElement(parseDateTime(json.get("lastOccurrence").getAsString()));
3389    if (json.has("_lastOccurrence"))
3390      parseElementProperties(getJObject(json, "_lastOccurrence"), res.getLastOccurrenceElement());
3391    if (json.has("note")) {
3392      JsonArray array = getJArray(json, "note");
3393      for (int i = 0; i < array.size(); i++) {
3394        res.getNote().add(parseAnnotation(array.get(i).getAsJsonObject()));
3395      }
3396    };
3397    if (json.has("reaction")) {
3398      JsonArray array = getJArray(json, "reaction");
3399      for (int i = 0; i < array.size(); i++) {
3400        res.getReaction().add(parseAllergyIntoleranceReactionComponent(array.get(i).getAsJsonObject()));
3401      }
3402    };
3403  }
3404
3405  protected AllergyIntolerance.AllergyIntoleranceParticipantComponent parseAllergyIntoleranceParticipantComponent(JsonObject json) throws IOException, FHIRFormatError {
3406    AllergyIntolerance.AllergyIntoleranceParticipantComponent res = new AllergyIntolerance.AllergyIntoleranceParticipantComponent();
3407    parseAllergyIntoleranceParticipantComponentProperties(json, res);
3408    return res;
3409  }
3410
3411  protected void parseAllergyIntoleranceParticipantComponentProperties(JsonObject json, AllergyIntolerance.AllergyIntoleranceParticipantComponent res) throws IOException, FHIRFormatError {
3412    parseBackboneElementProperties(json, res);
3413    if (json.has("function"))
3414      res.setFunction(parseCodeableConcept(getJObject(json, "function")));
3415    if (json.has("actor"))
3416      res.setActor(parseReference(getJObject(json, "actor")));
3417  }
3418
3419  protected AllergyIntolerance.AllergyIntoleranceReactionComponent parseAllergyIntoleranceReactionComponent(JsonObject json) throws IOException, FHIRFormatError {
3420    AllergyIntolerance.AllergyIntoleranceReactionComponent res = new AllergyIntolerance.AllergyIntoleranceReactionComponent();
3421    parseAllergyIntoleranceReactionComponentProperties(json, res);
3422    return res;
3423  }
3424
3425  protected void parseAllergyIntoleranceReactionComponentProperties(JsonObject json, AllergyIntolerance.AllergyIntoleranceReactionComponent res) throws IOException, FHIRFormatError {
3426    parseBackboneElementProperties(json, res);
3427    if (json.has("substance"))
3428      res.setSubstance(parseCodeableConcept(getJObject(json, "substance")));
3429    if (json.has("manifestation")) {
3430      JsonArray array = getJArray(json, "manifestation");
3431      for (int i = 0; i < array.size(); i++) {
3432        res.getManifestation().add(parseCodeableReference(array.get(i).getAsJsonObject()));
3433      }
3434    };
3435    if (json.has("description"))
3436      res.setDescriptionElement(parseString(json.get("description").getAsString()));
3437    if (json.has("_description"))
3438      parseElementProperties(getJObject(json, "_description"), res.getDescriptionElement());
3439    if (json.has("onset"))
3440      res.setOnsetElement(parseDateTime(json.get("onset").getAsString()));
3441    if (json.has("_onset"))
3442      parseElementProperties(getJObject(json, "_onset"), res.getOnsetElement());
3443    if (json.has("severity"))
3444      res.setSeverityElement(parseEnumeration(json.get("severity").getAsString(), AllergyIntolerance.AllergyIntoleranceSeverity.NULL, new AllergyIntolerance.AllergyIntoleranceSeverityEnumFactory()));
3445    if (json.has("_severity"))
3446      parseElementProperties(getJObject(json, "_severity"), res.getSeverityElement());
3447    if (json.has("exposureRoute"))
3448      res.setExposureRoute(parseCodeableConcept(getJObject(json, "exposureRoute")));
3449    if (json.has("note")) {
3450      JsonArray array = getJArray(json, "note");
3451      for (int i = 0; i < array.size(); i++) {
3452        res.getNote().add(parseAnnotation(array.get(i).getAsJsonObject()));
3453      }
3454    };
3455  }
3456
3457  protected Appointment parseAppointment(JsonObject json) throws IOException, FHIRFormatError {
3458    Appointment res = new Appointment();
3459    parseAppointmentProperties(json, res);
3460    return res;
3461  }
3462
3463  protected void parseAppointmentProperties(JsonObject json, Appointment res) throws IOException, FHIRFormatError {
3464    parseDomainResourceProperties(json, res);
3465    if (json.has("identifier")) {
3466      JsonArray array = getJArray(json, "identifier");
3467      for (int i = 0; i < array.size(); i++) {
3468        res.getIdentifier().add(parseIdentifier(array.get(i).getAsJsonObject()));
3469      }
3470    };
3471    if (json.has("status"))
3472      res.setStatusElement(parseEnumeration(json.get("status").getAsString(), Appointment.AppointmentStatus.NULL, new Appointment.AppointmentStatusEnumFactory()));
3473    if (json.has("_status"))
3474      parseElementProperties(getJObject(json, "_status"), res.getStatusElement());
3475    if (json.has("cancellationReason"))
3476      res.setCancellationReason(parseCodeableConcept(getJObject(json, "cancellationReason")));
3477    if (json.has("class")) {
3478      JsonArray array = getJArray(json, "class");
3479      for (int i = 0; i < array.size(); i++) {
3480        res.getClass_().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
3481      }
3482    };
3483    if (json.has("serviceCategory")) {
3484      JsonArray array = getJArray(json, "serviceCategory");
3485      for (int i = 0; i < array.size(); i++) {
3486        res.getServiceCategory().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
3487      }
3488    };
3489    if (json.has("serviceType")) {
3490      JsonArray array = getJArray(json, "serviceType");
3491      for (int i = 0; i < array.size(); i++) {
3492        res.getServiceType().add(parseCodeableReference(array.get(i).getAsJsonObject()));
3493      }
3494    };
3495    if (json.has("specialty")) {
3496      JsonArray array = getJArray(json, "specialty");
3497      for (int i = 0; i < array.size(); i++) {
3498        res.getSpecialty().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
3499      }
3500    };
3501    if (json.has("appointmentType"))
3502      res.setAppointmentType(parseCodeableConcept(getJObject(json, "appointmentType")));
3503    if (json.has("reason")) {
3504      JsonArray array = getJArray(json, "reason");
3505      for (int i = 0; i < array.size(); i++) {
3506        res.getReason().add(parseCodeableReference(array.get(i).getAsJsonObject()));
3507      }
3508    };
3509    if (json.has("priority"))
3510      res.setPriority(parseCodeableConcept(getJObject(json, "priority")));
3511    if (json.has("description"))
3512      res.setDescriptionElement(parseString(json.get("description").getAsString()));
3513    if (json.has("_description"))
3514      parseElementProperties(getJObject(json, "_description"), res.getDescriptionElement());
3515    if (json.has("replaces")) {
3516      JsonArray array = getJArray(json, "replaces");
3517      for (int i = 0; i < array.size(); i++) {
3518        res.getReplaces().add(parseReference(array.get(i).getAsJsonObject()));
3519      }
3520    };
3521    if (json.has("virtualService")) {
3522      JsonArray array = getJArray(json, "virtualService");
3523      for (int i = 0; i < array.size(); i++) {
3524        res.getVirtualService().add(parseVirtualServiceDetail(array.get(i).getAsJsonObject()));
3525      }
3526    };
3527    if (json.has("supportingInformation")) {
3528      JsonArray array = getJArray(json, "supportingInformation");
3529      for (int i = 0; i < array.size(); i++) {
3530        res.getSupportingInformation().add(parseReference(array.get(i).getAsJsonObject()));
3531      }
3532    };
3533    if (json.has("previousAppointment"))
3534      res.setPreviousAppointment(parseReference(getJObject(json, "previousAppointment")));
3535    if (json.has("originatingAppointment"))
3536      res.setOriginatingAppointment(parseReference(getJObject(json, "originatingAppointment")));
3537    if (json.has("start"))
3538      res.setStartElement(parseInstant(json.get("start").getAsString()));
3539    if (json.has("_start"))
3540      parseElementProperties(getJObject(json, "_start"), res.getStartElement());
3541    if (json.has("end"))
3542      res.setEndElement(parseInstant(json.get("end").getAsString()));
3543    if (json.has("_end"))
3544      parseElementProperties(getJObject(json, "_end"), res.getEndElement());
3545    if (json.has("minutesDuration"))
3546      res.setMinutesDurationElement(parsePositiveInt(json.get("minutesDuration").getAsString()));
3547    if (json.has("_minutesDuration"))
3548      parseElementProperties(getJObject(json, "_minutesDuration"), res.getMinutesDurationElement());
3549    if (json.has("requestedPeriod")) {
3550      JsonArray array = getJArray(json, "requestedPeriod");
3551      for (int i = 0; i < array.size(); i++) {
3552        res.getRequestedPeriod().add(parsePeriod(array.get(i).getAsJsonObject()));
3553      }
3554    };
3555    if (json.has("slot")) {
3556      JsonArray array = getJArray(json, "slot");
3557      for (int i = 0; i < array.size(); i++) {
3558        res.getSlot().add(parseReference(array.get(i).getAsJsonObject()));
3559      }
3560    };
3561    if (json.has("account")) {
3562      JsonArray array = getJArray(json, "account");
3563      for (int i = 0; i < array.size(); i++) {
3564        res.getAccount().add(parseReference(array.get(i).getAsJsonObject()));
3565      }
3566    };
3567    if (json.has("created"))
3568      res.setCreatedElement(parseDateTime(json.get("created").getAsString()));
3569    if (json.has("_created"))
3570      parseElementProperties(getJObject(json, "_created"), res.getCreatedElement());
3571    if (json.has("cancellationDate"))
3572      res.setCancellationDateElement(parseDateTime(json.get("cancellationDate").getAsString()));
3573    if (json.has("_cancellationDate"))
3574      parseElementProperties(getJObject(json, "_cancellationDate"), res.getCancellationDateElement());
3575    if (json.has("note")) {
3576      JsonArray array = getJArray(json, "note");
3577      for (int i = 0; i < array.size(); i++) {
3578        res.getNote().add(parseAnnotation(array.get(i).getAsJsonObject()));
3579      }
3580    };
3581    if (json.has("patientInstruction")) {
3582      JsonArray array = getJArray(json, "patientInstruction");
3583      for (int i = 0; i < array.size(); i++) {
3584        res.getPatientInstruction().add(parseCodeableReference(array.get(i).getAsJsonObject()));
3585      }
3586    };
3587    if (json.has("basedOn")) {
3588      JsonArray array = getJArray(json, "basedOn");
3589      for (int i = 0; i < array.size(); i++) {
3590        res.getBasedOn().add(parseReference(array.get(i).getAsJsonObject()));
3591      }
3592    };
3593    if (json.has("subject"))
3594      res.setSubject(parseReference(getJObject(json, "subject")));
3595    if (json.has("participant")) {
3596      JsonArray array = getJArray(json, "participant");
3597      for (int i = 0; i < array.size(); i++) {
3598        res.getParticipant().add(parseAppointmentParticipantComponent(array.get(i).getAsJsonObject()));
3599      }
3600    };
3601    if (json.has("recurrenceId"))
3602      res.setRecurrenceIdElement(parsePositiveInt(json.get("recurrenceId").getAsString()));
3603    if (json.has("_recurrenceId"))
3604      parseElementProperties(getJObject(json, "_recurrenceId"), res.getRecurrenceIdElement());
3605    if (json.has("occurrenceChanged"))
3606      res.setOccurrenceChangedElement(parseBoolean(json.get("occurrenceChanged").getAsBoolean()));
3607    if (json.has("_occurrenceChanged"))
3608      parseElementProperties(getJObject(json, "_occurrenceChanged"), res.getOccurrenceChangedElement());
3609    if (json.has("recurrenceTemplate")) {
3610      JsonArray array = getJArray(json, "recurrenceTemplate");
3611      for (int i = 0; i < array.size(); i++) {
3612        res.getRecurrenceTemplate().add(parseAppointmentRecurrenceTemplateComponent(array.get(i).getAsJsonObject()));
3613      }
3614    };
3615  }
3616
3617  protected Appointment.AppointmentParticipantComponent parseAppointmentParticipantComponent(JsonObject json) throws IOException, FHIRFormatError {
3618    Appointment.AppointmentParticipantComponent res = new Appointment.AppointmentParticipantComponent();
3619    parseAppointmentParticipantComponentProperties(json, res);
3620    return res;
3621  }
3622
3623  protected void parseAppointmentParticipantComponentProperties(JsonObject json, Appointment.AppointmentParticipantComponent res) throws IOException, FHIRFormatError {
3624    parseBackboneElementProperties(json, res);
3625    if (json.has("type")) {
3626      JsonArray array = getJArray(json, "type");
3627      for (int i = 0; i < array.size(); i++) {
3628        res.getType().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
3629      }
3630    };
3631    if (json.has("period"))
3632      res.setPeriod(parsePeriod(getJObject(json, "period")));
3633    if (json.has("actor"))
3634      res.setActor(parseReference(getJObject(json, "actor")));
3635    if (json.has("required"))
3636      res.setRequiredElement(parseBoolean(json.get("required").getAsBoolean()));
3637    if (json.has("_required"))
3638      parseElementProperties(getJObject(json, "_required"), res.getRequiredElement());
3639    if (json.has("status"))
3640      res.setStatusElement(parseEnumeration(json.get("status").getAsString(), Appointment.ParticipationStatus.NULL, new Appointment.ParticipationStatusEnumFactory()));
3641    if (json.has("_status"))
3642      parseElementProperties(getJObject(json, "_status"), res.getStatusElement());
3643  }
3644
3645  protected Appointment.AppointmentRecurrenceTemplateComponent parseAppointmentRecurrenceTemplateComponent(JsonObject json) throws IOException, FHIRFormatError {
3646    Appointment.AppointmentRecurrenceTemplateComponent res = new Appointment.AppointmentRecurrenceTemplateComponent();
3647    parseAppointmentRecurrenceTemplateComponentProperties(json, res);
3648    return res;
3649  }
3650
3651  protected void parseAppointmentRecurrenceTemplateComponentProperties(JsonObject json, Appointment.AppointmentRecurrenceTemplateComponent res) throws IOException, FHIRFormatError {
3652    parseBackboneElementProperties(json, res);
3653    if (json.has("timezone"))
3654      res.setTimezone(parseCodeableConcept(getJObject(json, "timezone")));
3655    if (json.has("recurrenceType"))
3656      res.setRecurrenceType(parseCodeableConcept(getJObject(json, "recurrenceType")));
3657    if (json.has("lastOccurrenceDate"))
3658      res.setLastOccurrenceDateElement(parseDate(json.get("lastOccurrenceDate").getAsString()));
3659    if (json.has("_lastOccurrenceDate"))
3660      parseElementProperties(getJObject(json, "_lastOccurrenceDate"), res.getLastOccurrenceDateElement());
3661    if (json.has("occurrenceCount"))
3662      res.setOccurrenceCountElement(parsePositiveInt(json.get("occurrenceCount").getAsString()));
3663    if (json.has("_occurrenceCount"))
3664      parseElementProperties(getJObject(json, "_occurrenceCount"), res.getOccurrenceCountElement());
3665    if (json.has("occurrenceDate")) {
3666      JsonArray array = getJArray(json, "occurrenceDate");
3667      for (int i = 0; i < array.size(); i++) {
3668        if (array.get(i).isJsonNull()) {
3669          res.getOccurrenceDate().add(new DateType());
3670        } else {;
3671          res.getOccurrenceDate().add(parseDate(array.get(i).getAsString()));
3672        }
3673      }
3674    };
3675    if (json.has("_occurrenceDate")) {
3676      JsonArray array = getJArray(json, "_occurrenceDate");
3677      for (int i = 0; i < array.size(); i++) {
3678        if (i == res.getOccurrenceDate().size())
3679          res.getOccurrenceDate().add(parseDate(null));
3680        if (array.get(i) instanceof JsonObject) 
3681          parseElementProperties(array.get(i).getAsJsonObject(), res.getOccurrenceDate().get(i));
3682      }
3683    };
3684    if (json.has("weeklyTemplate"))
3685      res.setWeeklyTemplate(parseAppointmentRecurrenceTemplateWeeklyTemplateComponent(getJObject(json, "weeklyTemplate")));
3686    if (json.has("monthlyTemplate"))
3687      res.setMonthlyTemplate(parseAppointmentRecurrenceTemplateMonthlyTemplateComponent(getJObject(json, "monthlyTemplate")));
3688    if (json.has("yearlyTemplate"))
3689      res.setYearlyTemplate(parseAppointmentRecurrenceTemplateYearlyTemplateComponent(getJObject(json, "yearlyTemplate")));
3690    if (json.has("excludingDate")) {
3691      JsonArray array = getJArray(json, "excludingDate");
3692      for (int i = 0; i < array.size(); i++) {
3693        if (array.get(i).isJsonNull()) {
3694          res.getExcludingDate().add(new DateType());
3695        } else {;
3696          res.getExcludingDate().add(parseDate(array.get(i).getAsString()));
3697        }
3698      }
3699    };
3700    if (json.has("_excludingDate")) {
3701      JsonArray array = getJArray(json, "_excludingDate");
3702      for (int i = 0; i < array.size(); i++) {
3703        if (i == res.getExcludingDate().size())
3704          res.getExcludingDate().add(parseDate(null));
3705        if (array.get(i) instanceof JsonObject) 
3706          parseElementProperties(array.get(i).getAsJsonObject(), res.getExcludingDate().get(i));
3707      }
3708    };
3709    if (json.has("excludingRecurrenceId")) {
3710      JsonArray array = getJArray(json, "excludingRecurrenceId");
3711      for (int i = 0; i < array.size(); i++) {
3712        if (array.get(i).isJsonNull()) {
3713          res.getExcludingRecurrenceId().add(new PositiveIntType());
3714        } else {;
3715          res.getExcludingRecurrenceId().add(parsePositiveInt(array.get(i).getAsString()));
3716        }
3717      }
3718    };
3719    if (json.has("_excludingRecurrenceId")) {
3720      JsonArray array = getJArray(json, "_excludingRecurrenceId");
3721      for (int i = 0; i < array.size(); i++) {
3722        if (i == res.getExcludingRecurrenceId().size())
3723          res.getExcludingRecurrenceId().add(parsePositiveInt(null));
3724        if (array.get(i) instanceof JsonObject) 
3725          parseElementProperties(array.get(i).getAsJsonObject(), res.getExcludingRecurrenceId().get(i));
3726      }
3727    };
3728  }
3729
3730  protected Appointment.AppointmentRecurrenceTemplateWeeklyTemplateComponent parseAppointmentRecurrenceTemplateWeeklyTemplateComponent(JsonObject json) throws IOException, FHIRFormatError {
3731    Appointment.AppointmentRecurrenceTemplateWeeklyTemplateComponent res = new Appointment.AppointmentRecurrenceTemplateWeeklyTemplateComponent();
3732    parseAppointmentRecurrenceTemplateWeeklyTemplateComponentProperties(json, res);
3733    return res;
3734  }
3735
3736  protected void parseAppointmentRecurrenceTemplateWeeklyTemplateComponentProperties(JsonObject json, Appointment.AppointmentRecurrenceTemplateWeeklyTemplateComponent res) throws IOException, FHIRFormatError {
3737    parseBackboneElementProperties(json, res);
3738    if (json.has("monday"))
3739      res.setMondayElement(parseBoolean(json.get("monday").getAsBoolean()));
3740    if (json.has("_monday"))
3741      parseElementProperties(getJObject(json, "_monday"), res.getMondayElement());
3742    if (json.has("tuesday"))
3743      res.setTuesdayElement(parseBoolean(json.get("tuesday").getAsBoolean()));
3744    if (json.has("_tuesday"))
3745      parseElementProperties(getJObject(json, "_tuesday"), res.getTuesdayElement());
3746    if (json.has("wednesday"))
3747      res.setWednesdayElement(parseBoolean(json.get("wednesday").getAsBoolean()));
3748    if (json.has("_wednesday"))
3749      parseElementProperties(getJObject(json, "_wednesday"), res.getWednesdayElement());
3750    if (json.has("thursday"))
3751      res.setThursdayElement(parseBoolean(json.get("thursday").getAsBoolean()));
3752    if (json.has("_thursday"))
3753      parseElementProperties(getJObject(json, "_thursday"), res.getThursdayElement());
3754    if (json.has("friday"))
3755      res.setFridayElement(parseBoolean(json.get("friday").getAsBoolean()));
3756    if (json.has("_friday"))
3757      parseElementProperties(getJObject(json, "_friday"), res.getFridayElement());
3758    if (json.has("saturday"))
3759      res.setSaturdayElement(parseBoolean(json.get("saturday").getAsBoolean()));
3760    if (json.has("_saturday"))
3761      parseElementProperties(getJObject(json, "_saturday"), res.getSaturdayElement());
3762    if (json.has("sunday"))
3763      res.setSundayElement(parseBoolean(json.get("sunday").getAsBoolean()));
3764    if (json.has("_sunday"))
3765      parseElementProperties(getJObject(json, "_sunday"), res.getSundayElement());
3766    if (json.has("weekInterval"))
3767      res.setWeekIntervalElement(parsePositiveInt(json.get("weekInterval").getAsString()));
3768    if (json.has("_weekInterval"))
3769      parseElementProperties(getJObject(json, "_weekInterval"), res.getWeekIntervalElement());
3770  }
3771
3772  protected Appointment.AppointmentRecurrenceTemplateMonthlyTemplateComponent parseAppointmentRecurrenceTemplateMonthlyTemplateComponent(JsonObject json) throws IOException, FHIRFormatError {
3773    Appointment.AppointmentRecurrenceTemplateMonthlyTemplateComponent res = new Appointment.AppointmentRecurrenceTemplateMonthlyTemplateComponent();
3774    parseAppointmentRecurrenceTemplateMonthlyTemplateComponentProperties(json, res);
3775    return res;
3776  }
3777
3778  protected void parseAppointmentRecurrenceTemplateMonthlyTemplateComponentProperties(JsonObject json, Appointment.AppointmentRecurrenceTemplateMonthlyTemplateComponent res) throws IOException, FHIRFormatError {
3779    parseBackboneElementProperties(json, res);
3780    if (json.has("dayOfMonth"))
3781      res.setDayOfMonthElement(parsePositiveInt(json.get("dayOfMonth").getAsString()));
3782    if (json.has("_dayOfMonth"))
3783      parseElementProperties(getJObject(json, "_dayOfMonth"), res.getDayOfMonthElement());
3784    if (json.has("nthWeekOfMonth"))
3785      res.setNthWeekOfMonth(parseCoding(getJObject(json, "nthWeekOfMonth")));
3786    if (json.has("dayOfWeek"))
3787      res.setDayOfWeek(parseCoding(getJObject(json, "dayOfWeek")));
3788    if (json.has("monthInterval"))
3789      res.setMonthIntervalElement(parsePositiveInt(json.get("monthInterval").getAsString()));
3790    if (json.has("_monthInterval"))
3791      parseElementProperties(getJObject(json, "_monthInterval"), res.getMonthIntervalElement());
3792  }
3793
3794  protected Appointment.AppointmentRecurrenceTemplateYearlyTemplateComponent parseAppointmentRecurrenceTemplateYearlyTemplateComponent(JsonObject json) throws IOException, FHIRFormatError {
3795    Appointment.AppointmentRecurrenceTemplateYearlyTemplateComponent res = new Appointment.AppointmentRecurrenceTemplateYearlyTemplateComponent();
3796    parseAppointmentRecurrenceTemplateYearlyTemplateComponentProperties(json, res);
3797    return res;
3798  }
3799
3800  protected void parseAppointmentRecurrenceTemplateYearlyTemplateComponentProperties(JsonObject json, Appointment.AppointmentRecurrenceTemplateYearlyTemplateComponent res) throws IOException, FHIRFormatError {
3801    parseBackboneElementProperties(json, res);
3802    if (json.has("yearInterval"))
3803      res.setYearIntervalElement(parsePositiveInt(json.get("yearInterval").getAsString()));
3804    if (json.has("_yearInterval"))
3805      parseElementProperties(getJObject(json, "_yearInterval"), res.getYearIntervalElement());
3806  }
3807
3808  protected AppointmentResponse parseAppointmentResponse(JsonObject json) throws IOException, FHIRFormatError {
3809    AppointmentResponse res = new AppointmentResponse();
3810    parseAppointmentResponseProperties(json, res);
3811    return res;
3812  }
3813
3814  protected void parseAppointmentResponseProperties(JsonObject json, AppointmentResponse res) throws IOException, FHIRFormatError {
3815    parseDomainResourceProperties(json, res);
3816    if (json.has("identifier")) {
3817      JsonArray array = getJArray(json, "identifier");
3818      for (int i = 0; i < array.size(); i++) {
3819        res.getIdentifier().add(parseIdentifier(array.get(i).getAsJsonObject()));
3820      }
3821    };
3822    if (json.has("appointment"))
3823      res.setAppointment(parseReference(getJObject(json, "appointment")));
3824    if (json.has("proposedNewTime"))
3825      res.setProposedNewTimeElement(parseBoolean(json.get("proposedNewTime").getAsBoolean()));
3826    if (json.has("_proposedNewTime"))
3827      parseElementProperties(getJObject(json, "_proposedNewTime"), res.getProposedNewTimeElement());
3828    if (json.has("start"))
3829      res.setStartElement(parseInstant(json.get("start").getAsString()));
3830    if (json.has("_start"))
3831      parseElementProperties(getJObject(json, "_start"), res.getStartElement());
3832    if (json.has("end"))
3833      res.setEndElement(parseInstant(json.get("end").getAsString()));
3834    if (json.has("_end"))
3835      parseElementProperties(getJObject(json, "_end"), res.getEndElement());
3836    if (json.has("participantType")) {
3837      JsonArray array = getJArray(json, "participantType");
3838      for (int i = 0; i < array.size(); i++) {
3839        res.getParticipantType().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
3840      }
3841    };
3842    if (json.has("actor"))
3843      res.setActor(parseReference(getJObject(json, "actor")));
3844    if (json.has("participantStatus"))
3845      res.setParticipantStatusElement(parseEnumeration(json.get("participantStatus").getAsString(), AppointmentResponse.AppointmentResponseStatus.NULL, new AppointmentResponse.AppointmentResponseStatusEnumFactory()));
3846    if (json.has("_participantStatus"))
3847      parseElementProperties(getJObject(json, "_participantStatus"), res.getParticipantStatusElement());
3848    if (json.has("comment"))
3849      res.setCommentElement(parseMarkdown(json.get("comment").getAsString()));
3850    if (json.has("_comment"))
3851      parseElementProperties(getJObject(json, "_comment"), res.getCommentElement());
3852    if (json.has("recurring"))
3853      res.setRecurringElement(parseBoolean(json.get("recurring").getAsBoolean()));
3854    if (json.has("_recurring"))
3855      parseElementProperties(getJObject(json, "_recurring"), res.getRecurringElement());
3856    if (json.has("occurrenceDate"))
3857      res.setOccurrenceDateElement(parseDate(json.get("occurrenceDate").getAsString()));
3858    if (json.has("_occurrenceDate"))
3859      parseElementProperties(getJObject(json, "_occurrenceDate"), res.getOccurrenceDateElement());
3860    if (json.has("recurrenceId"))
3861      res.setRecurrenceIdElement(parsePositiveInt(json.get("recurrenceId").getAsString()));
3862    if (json.has("_recurrenceId"))
3863      parseElementProperties(getJObject(json, "_recurrenceId"), res.getRecurrenceIdElement());
3864  }
3865
3866  protected ArtifactAssessment parseArtifactAssessment(JsonObject json) throws IOException, FHIRFormatError {
3867    ArtifactAssessment res = new ArtifactAssessment();
3868    parseArtifactAssessmentProperties(json, res);
3869    return res;
3870  }
3871
3872  protected void parseArtifactAssessmentProperties(JsonObject json, ArtifactAssessment res) throws IOException, FHIRFormatError {
3873    parseDomainResourceProperties(json, res);
3874    if (json.has("identifier")) {
3875      JsonArray array = getJArray(json, "identifier");
3876      for (int i = 0; i < array.size(); i++) {
3877        res.getIdentifier().add(parseIdentifier(array.get(i).getAsJsonObject()));
3878      }
3879    };
3880    if (json.has("title"))
3881      res.setTitleElement(parseString(json.get("title").getAsString()));
3882    if (json.has("_title"))
3883      parseElementProperties(getJObject(json, "_title"), res.getTitleElement());
3884    DataType citeAs = parseType("citeAs", json);
3885    if (citeAs != null)
3886      res.setCiteAs(citeAs);
3887    if (json.has("date"))
3888      res.setDateElement(parseDateTime(json.get("date").getAsString()));
3889    if (json.has("_date"))
3890      parseElementProperties(getJObject(json, "_date"), res.getDateElement());
3891    if (json.has("copyright"))
3892      res.setCopyrightElement(parseMarkdown(json.get("copyright").getAsString()));
3893    if (json.has("_copyright"))
3894      parseElementProperties(getJObject(json, "_copyright"), res.getCopyrightElement());
3895    if (json.has("approvalDate"))
3896      res.setApprovalDateElement(parseDate(json.get("approvalDate").getAsString()));
3897    if (json.has("_approvalDate"))
3898      parseElementProperties(getJObject(json, "_approvalDate"), res.getApprovalDateElement());
3899    if (json.has("lastReviewDate"))
3900      res.setLastReviewDateElement(parseDate(json.get("lastReviewDate").getAsString()));
3901    if (json.has("_lastReviewDate"))
3902      parseElementProperties(getJObject(json, "_lastReviewDate"), res.getLastReviewDateElement());
3903    DataType artifact = parseType("artifact", json);
3904    if (artifact != null)
3905      res.setArtifact(artifact);
3906    if (json.has("content")) {
3907      JsonArray array = getJArray(json, "content");
3908      for (int i = 0; i < array.size(); i++) {
3909        res.getContent().add(parseArtifactAssessmentContentComponent(array.get(i).getAsJsonObject()));
3910      }
3911    };
3912    if (json.has("workflowStatus"))
3913      res.setWorkflowStatusElement(parseEnumeration(json.get("workflowStatus").getAsString(), ArtifactAssessment.ArtifactAssessmentWorkflowStatus.NULL, new ArtifactAssessment.ArtifactAssessmentWorkflowStatusEnumFactory()));
3914    if (json.has("_workflowStatus"))
3915      parseElementProperties(getJObject(json, "_workflowStatus"), res.getWorkflowStatusElement());
3916    if (json.has("disposition"))
3917      res.setDispositionElement(parseEnumeration(json.get("disposition").getAsString(), ArtifactAssessment.ArtifactAssessmentDisposition.NULL, new ArtifactAssessment.ArtifactAssessmentDispositionEnumFactory()));
3918    if (json.has("_disposition"))
3919      parseElementProperties(getJObject(json, "_disposition"), res.getDispositionElement());
3920  }
3921
3922  protected ArtifactAssessment.ArtifactAssessmentContentComponent parseArtifactAssessmentContentComponent(JsonObject json) throws IOException, FHIRFormatError {
3923    ArtifactAssessment.ArtifactAssessmentContentComponent res = new ArtifactAssessment.ArtifactAssessmentContentComponent();
3924    parseArtifactAssessmentContentComponentProperties(json, res);
3925    return res;
3926  }
3927
3928  protected void parseArtifactAssessmentContentComponentProperties(JsonObject json, ArtifactAssessment.ArtifactAssessmentContentComponent res) throws IOException, FHIRFormatError {
3929    parseBackboneElementProperties(json, res);
3930    if (json.has("informationType"))
3931      res.setInformationTypeElement(parseEnumeration(json.get("informationType").getAsString(), ArtifactAssessment.ArtifactAssessmentInformationType.NULL, new ArtifactAssessment.ArtifactAssessmentInformationTypeEnumFactory()));
3932    if (json.has("_informationType"))
3933      parseElementProperties(getJObject(json, "_informationType"), res.getInformationTypeElement());
3934    if (json.has("summary"))
3935      res.setSummaryElement(parseMarkdown(json.get("summary").getAsString()));
3936    if (json.has("_summary"))
3937      parseElementProperties(getJObject(json, "_summary"), res.getSummaryElement());
3938    if (json.has("type"))
3939      res.setType(parseCodeableConcept(getJObject(json, "type")));
3940    if (json.has("classifier")) {
3941      JsonArray array = getJArray(json, "classifier");
3942      for (int i = 0; i < array.size(); i++) {
3943        res.getClassifier().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
3944      }
3945    };
3946    if (json.has("quantity"))
3947      res.setQuantity(parseQuantity(getJObject(json, "quantity")));
3948    if (json.has("author"))
3949      res.setAuthor(parseReference(getJObject(json, "author")));
3950    if (json.has("path")) {
3951      JsonArray array = getJArray(json, "path");
3952      for (int i = 0; i < array.size(); i++) {
3953        if (array.get(i).isJsonNull()) {
3954          res.getPath().add(new UriType());
3955        } else {;
3956          res.getPath().add(parseUri(array.get(i).getAsString()));
3957        }
3958      }
3959    };
3960    if (json.has("_path")) {
3961      JsonArray array = getJArray(json, "_path");
3962      for (int i = 0; i < array.size(); i++) {
3963        if (i == res.getPath().size())
3964          res.getPath().add(parseUri(null));
3965        if (array.get(i) instanceof JsonObject) 
3966          parseElementProperties(array.get(i).getAsJsonObject(), res.getPath().get(i));
3967      }
3968    };
3969    if (json.has("relatedArtifact")) {
3970      JsonArray array = getJArray(json, "relatedArtifact");
3971      for (int i = 0; i < array.size(); i++) {
3972        res.getRelatedArtifact().add(parseRelatedArtifact(array.get(i).getAsJsonObject()));
3973      }
3974    };
3975    if (json.has("freeToShare"))
3976      res.setFreeToShareElement(parseBoolean(json.get("freeToShare").getAsBoolean()));
3977    if (json.has("_freeToShare"))
3978      parseElementProperties(getJObject(json, "_freeToShare"), res.getFreeToShareElement());
3979    if (json.has("component")) {
3980      JsonArray array = getJArray(json, "component");
3981      for (int i = 0; i < array.size(); i++) {
3982        res.getComponent().add(parseArtifactAssessmentContentComponent(array.get(i).getAsJsonObject()));
3983      }
3984    };
3985  }
3986
3987  protected AuditEvent parseAuditEvent(JsonObject json) throws IOException, FHIRFormatError {
3988    AuditEvent res = new AuditEvent();
3989    parseAuditEventProperties(json, res);
3990    return res;
3991  }
3992
3993  protected void parseAuditEventProperties(JsonObject json, AuditEvent res) throws IOException, FHIRFormatError {
3994    parseDomainResourceProperties(json, res);
3995    if (json.has("category")) {
3996      JsonArray array = getJArray(json, "category");
3997      for (int i = 0; i < array.size(); i++) {
3998        res.getCategory().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
3999      }
4000    };
4001    if (json.has("code"))
4002      res.setCode(parseCodeableConcept(getJObject(json, "code")));
4003    if (json.has("action"))
4004      res.setActionElement(parseEnumeration(json.get("action").getAsString(), AuditEvent.AuditEventAction.NULL, new AuditEvent.AuditEventActionEnumFactory()));
4005    if (json.has("_action"))
4006      parseElementProperties(getJObject(json, "_action"), res.getActionElement());
4007    if (json.has("severity"))
4008      res.setSeverityElement(parseEnumeration(json.get("severity").getAsString(), AuditEvent.AuditEventSeverity.NULL, new AuditEvent.AuditEventSeverityEnumFactory()));
4009    if (json.has("_severity"))
4010      parseElementProperties(getJObject(json, "_severity"), res.getSeverityElement());
4011    DataType occurred = parseType("occurred", json);
4012    if (occurred != null)
4013      res.setOccurred(occurred);
4014    if (json.has("recorded"))
4015      res.setRecordedElement(parseInstant(json.get("recorded").getAsString()));
4016    if (json.has("_recorded"))
4017      parseElementProperties(getJObject(json, "_recorded"), res.getRecordedElement());
4018    if (json.has("outcome"))
4019      res.setOutcome(parseAuditEventOutcomeComponent(getJObject(json, "outcome")));
4020    if (json.has("authorization")) {
4021      JsonArray array = getJArray(json, "authorization");
4022      for (int i = 0; i < array.size(); i++) {
4023        res.getAuthorization().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
4024      }
4025    };
4026    if (json.has("basedOn")) {
4027      JsonArray array = getJArray(json, "basedOn");
4028      for (int i = 0; i < array.size(); i++) {
4029        res.getBasedOn().add(parseReference(array.get(i).getAsJsonObject()));
4030      }
4031    };
4032    if (json.has("patient"))
4033      res.setPatient(parseReference(getJObject(json, "patient")));
4034    if (json.has("encounter"))
4035      res.setEncounter(parseReference(getJObject(json, "encounter")));
4036    if (json.has("agent")) {
4037      JsonArray array = getJArray(json, "agent");
4038      for (int i = 0; i < array.size(); i++) {
4039        res.getAgent().add(parseAuditEventAgentComponent(array.get(i).getAsJsonObject()));
4040      }
4041    };
4042    if (json.has("source"))
4043      res.setSource(parseAuditEventSourceComponent(getJObject(json, "source")));
4044    if (json.has("entity")) {
4045      JsonArray array = getJArray(json, "entity");
4046      for (int i = 0; i < array.size(); i++) {
4047        res.getEntity().add(parseAuditEventEntityComponent(array.get(i).getAsJsonObject()));
4048      }
4049    };
4050  }
4051
4052  protected AuditEvent.AuditEventOutcomeComponent parseAuditEventOutcomeComponent(JsonObject json) throws IOException, FHIRFormatError {
4053    AuditEvent.AuditEventOutcomeComponent res = new AuditEvent.AuditEventOutcomeComponent();
4054    parseAuditEventOutcomeComponentProperties(json, res);
4055    return res;
4056  }
4057
4058  protected void parseAuditEventOutcomeComponentProperties(JsonObject json, AuditEvent.AuditEventOutcomeComponent res) throws IOException, FHIRFormatError {
4059    parseBackboneElementProperties(json, res);
4060    if (json.has("code"))
4061      res.setCode(parseCoding(getJObject(json, "code")));
4062    if (json.has("detail")) {
4063      JsonArray array = getJArray(json, "detail");
4064      for (int i = 0; i < array.size(); i++) {
4065        res.getDetail().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
4066      }
4067    };
4068  }
4069
4070  protected AuditEvent.AuditEventAgentComponent parseAuditEventAgentComponent(JsonObject json) throws IOException, FHIRFormatError {
4071    AuditEvent.AuditEventAgentComponent res = new AuditEvent.AuditEventAgentComponent();
4072    parseAuditEventAgentComponentProperties(json, res);
4073    return res;
4074  }
4075
4076  protected void parseAuditEventAgentComponentProperties(JsonObject json, AuditEvent.AuditEventAgentComponent res) throws IOException, FHIRFormatError {
4077    parseBackboneElementProperties(json, res);
4078    if (json.has("type"))
4079      res.setType(parseCodeableConcept(getJObject(json, "type")));
4080    if (json.has("role")) {
4081      JsonArray array = getJArray(json, "role");
4082      for (int i = 0; i < array.size(); i++) {
4083        res.getRole().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
4084      }
4085    };
4086    if (json.has("who"))
4087      res.setWho(parseReference(getJObject(json, "who")));
4088    if (json.has("requestor"))
4089      res.setRequestorElement(parseBoolean(json.get("requestor").getAsBoolean()));
4090    if (json.has("_requestor"))
4091      parseElementProperties(getJObject(json, "_requestor"), res.getRequestorElement());
4092    if (json.has("location"))
4093      res.setLocation(parseReference(getJObject(json, "location")));
4094    if (json.has("policy")) {
4095      JsonArray array = getJArray(json, "policy");
4096      for (int i = 0; i < array.size(); i++) {
4097        if (array.get(i).isJsonNull()) {
4098          res.getPolicy().add(new UriType());
4099        } else {;
4100          res.getPolicy().add(parseUri(array.get(i).getAsString()));
4101        }
4102      }
4103    };
4104    if (json.has("_policy")) {
4105      JsonArray array = getJArray(json, "_policy");
4106      for (int i = 0; i < array.size(); i++) {
4107        if (i == res.getPolicy().size())
4108          res.getPolicy().add(parseUri(null));
4109        if (array.get(i) instanceof JsonObject) 
4110          parseElementProperties(array.get(i).getAsJsonObject(), res.getPolicy().get(i));
4111      }
4112    };
4113    DataType network = parseType("network", json);
4114    if (network != null)
4115      res.setNetwork(network);
4116    if (json.has("authorization")) {
4117      JsonArray array = getJArray(json, "authorization");
4118      for (int i = 0; i < array.size(); i++) {
4119        res.getAuthorization().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
4120      }
4121    };
4122  }
4123
4124  protected AuditEvent.AuditEventSourceComponent parseAuditEventSourceComponent(JsonObject json) throws IOException, FHIRFormatError {
4125    AuditEvent.AuditEventSourceComponent res = new AuditEvent.AuditEventSourceComponent();
4126    parseAuditEventSourceComponentProperties(json, res);
4127    return res;
4128  }
4129
4130  protected void parseAuditEventSourceComponentProperties(JsonObject json, AuditEvent.AuditEventSourceComponent res) throws IOException, FHIRFormatError {
4131    parseBackboneElementProperties(json, res);
4132    if (json.has("site"))
4133      res.setSite(parseReference(getJObject(json, "site")));
4134    if (json.has("observer"))
4135      res.setObserver(parseReference(getJObject(json, "observer")));
4136    if (json.has("type")) {
4137      JsonArray array = getJArray(json, "type");
4138      for (int i = 0; i < array.size(); i++) {
4139        res.getType().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
4140      }
4141    };
4142  }
4143
4144  protected AuditEvent.AuditEventEntityComponent parseAuditEventEntityComponent(JsonObject json) throws IOException, FHIRFormatError {
4145    AuditEvent.AuditEventEntityComponent res = new AuditEvent.AuditEventEntityComponent();
4146    parseAuditEventEntityComponentProperties(json, res);
4147    return res;
4148  }
4149
4150  protected void parseAuditEventEntityComponentProperties(JsonObject json, AuditEvent.AuditEventEntityComponent res) throws IOException, FHIRFormatError {
4151    parseBackboneElementProperties(json, res);
4152    if (json.has("what"))
4153      res.setWhat(parseReference(getJObject(json, "what")));
4154    if (json.has("role"))
4155      res.setRole(parseCodeableConcept(getJObject(json, "role")));
4156    if (json.has("securityLabel")) {
4157      JsonArray array = getJArray(json, "securityLabel");
4158      for (int i = 0; i < array.size(); i++) {
4159        res.getSecurityLabel().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
4160      }
4161    };
4162    if (json.has("query"))
4163      res.setQueryElement(parseBase64Binary(json.get("query").getAsString()));
4164    if (json.has("_query"))
4165      parseElementProperties(getJObject(json, "_query"), res.getQueryElement());
4166    if (json.has("detail")) {
4167      JsonArray array = getJArray(json, "detail");
4168      for (int i = 0; i < array.size(); i++) {
4169        res.getDetail().add(parseAuditEventEntityDetailComponent(array.get(i).getAsJsonObject()));
4170      }
4171    };
4172    if (json.has("agent")) {
4173      JsonArray array = getJArray(json, "agent");
4174      for (int i = 0; i < array.size(); i++) {
4175        res.getAgent().add(parseAuditEventAgentComponent(array.get(i).getAsJsonObject()));
4176      }
4177    };
4178  }
4179
4180  protected AuditEvent.AuditEventEntityDetailComponent parseAuditEventEntityDetailComponent(JsonObject json) throws IOException, FHIRFormatError {
4181    AuditEvent.AuditEventEntityDetailComponent res = new AuditEvent.AuditEventEntityDetailComponent();
4182    parseAuditEventEntityDetailComponentProperties(json, res);
4183    return res;
4184  }
4185
4186  protected void parseAuditEventEntityDetailComponentProperties(JsonObject json, AuditEvent.AuditEventEntityDetailComponent res) throws IOException, FHIRFormatError {
4187    parseBackboneElementProperties(json, res);
4188    if (json.has("type"))
4189      res.setType(parseCodeableConcept(getJObject(json, "type")));
4190    DataType value = parseType("value", json);
4191    if (value != null)
4192      res.setValue(value);
4193  }
4194
4195  protected Basic parseBasic(JsonObject json) throws IOException, FHIRFormatError {
4196    Basic res = new Basic();
4197    parseBasicProperties(json, res);
4198    return res;
4199  }
4200
4201  protected void parseBasicProperties(JsonObject json, Basic res) throws IOException, FHIRFormatError {
4202    parseDomainResourceProperties(json, res);
4203    if (json.has("identifier")) {
4204      JsonArray array = getJArray(json, "identifier");
4205      for (int i = 0; i < array.size(); i++) {
4206        res.getIdentifier().add(parseIdentifier(array.get(i).getAsJsonObject()));
4207      }
4208    };
4209    if (json.has("code"))
4210      res.setCode(parseCodeableConcept(getJObject(json, "code")));
4211    if (json.has("subject"))
4212      res.setSubject(parseReference(getJObject(json, "subject")));
4213    if (json.has("created"))
4214      res.setCreatedElement(parseDateTime(json.get("created").getAsString()));
4215    if (json.has("_created"))
4216      parseElementProperties(getJObject(json, "_created"), res.getCreatedElement());
4217    if (json.has("author"))
4218      res.setAuthor(parseReference(getJObject(json, "author")));
4219  }
4220
4221  protected Binary parseBinary(JsonObject json) throws IOException, FHIRFormatError {
4222    Binary res = new Binary();
4223    parseBinaryProperties(json, res);
4224    return res;
4225  }
4226
4227  protected void parseBinaryProperties(JsonObject json, Binary res) throws IOException, FHIRFormatError {
4228    parseResourceProperties(json, res);
4229    if (json.has("contentType"))
4230      res.setContentTypeElement(parseCode(json.get("contentType").getAsString()));
4231    if (json.has("_contentType"))
4232      parseElementProperties(getJObject(json, "_contentType"), res.getContentTypeElement());
4233    if (json.has("securityContext"))
4234      res.setSecurityContext(parseReference(getJObject(json, "securityContext")));
4235    if (json.has("data"))
4236      res.setDataElement(parseBase64Binary(json.get("data").getAsString()));
4237    if (json.has("_data"))
4238      parseElementProperties(getJObject(json, "_data"), res.getDataElement());
4239  }
4240
4241  protected BiologicallyDerivedProduct parseBiologicallyDerivedProduct(JsonObject json) throws IOException, FHIRFormatError {
4242    BiologicallyDerivedProduct res = new BiologicallyDerivedProduct();
4243    parseBiologicallyDerivedProductProperties(json, res);
4244    return res;
4245  }
4246
4247  protected void parseBiologicallyDerivedProductProperties(JsonObject json, BiologicallyDerivedProduct res) throws IOException, FHIRFormatError {
4248    parseDomainResourceProperties(json, res);
4249    if (json.has("productCategory"))
4250      res.setProductCategory(parseCoding(getJObject(json, "productCategory")));
4251    if (json.has("productCode"))
4252      res.setProductCode(parseCodeableConcept(getJObject(json, "productCode")));
4253    if (json.has("parent")) {
4254      JsonArray array = getJArray(json, "parent");
4255      for (int i = 0; i < array.size(); i++) {
4256        res.getParent().add(parseReference(array.get(i).getAsJsonObject()));
4257      }
4258    };
4259    if (json.has("request")) {
4260      JsonArray array = getJArray(json, "request");
4261      for (int i = 0; i < array.size(); i++) {
4262        res.getRequest().add(parseReference(array.get(i).getAsJsonObject()));
4263      }
4264    };
4265    if (json.has("identifier")) {
4266      JsonArray array = getJArray(json, "identifier");
4267      for (int i = 0; i < array.size(); i++) {
4268        res.getIdentifier().add(parseIdentifier(array.get(i).getAsJsonObject()));
4269      }
4270    };
4271    if (json.has("biologicalSourceEvent"))
4272      res.setBiologicalSourceEvent(parseIdentifier(getJObject(json, "biologicalSourceEvent")));
4273    if (json.has("processingFacility")) {
4274      JsonArray array = getJArray(json, "processingFacility");
4275      for (int i = 0; i < array.size(); i++) {
4276        res.getProcessingFacility().add(parseReference(array.get(i).getAsJsonObject()));
4277      }
4278    };
4279    if (json.has("division"))
4280      res.setDivisionElement(parseString(json.get("division").getAsString()));
4281    if (json.has("_division"))
4282      parseElementProperties(getJObject(json, "_division"), res.getDivisionElement());
4283    if (json.has("productStatus"))
4284      res.setProductStatus(parseCoding(getJObject(json, "productStatus")));
4285    if (json.has("expirationDate"))
4286      res.setExpirationDateElement(parseDateTime(json.get("expirationDate").getAsString()));
4287    if (json.has("_expirationDate"))
4288      parseElementProperties(getJObject(json, "_expirationDate"), res.getExpirationDateElement());
4289    if (json.has("collection"))
4290      res.setCollection(parseBiologicallyDerivedProductCollectionComponent(getJObject(json, "collection")));
4291    if (json.has("storageTempRequirements"))
4292      res.setStorageTempRequirements(parseRange(getJObject(json, "storageTempRequirements")));
4293    if (json.has("property")) {
4294      JsonArray array = getJArray(json, "property");
4295      for (int i = 0; i < array.size(); i++) {
4296        res.getProperty().add(parseBiologicallyDerivedProductPropertyComponent(array.get(i).getAsJsonObject()));
4297      }
4298    };
4299  }
4300
4301  protected BiologicallyDerivedProduct.BiologicallyDerivedProductCollectionComponent parseBiologicallyDerivedProductCollectionComponent(JsonObject json) throws IOException, FHIRFormatError {
4302    BiologicallyDerivedProduct.BiologicallyDerivedProductCollectionComponent res = new BiologicallyDerivedProduct.BiologicallyDerivedProductCollectionComponent();
4303    parseBiologicallyDerivedProductCollectionComponentProperties(json, res);
4304    return res;
4305  }
4306
4307  protected void parseBiologicallyDerivedProductCollectionComponentProperties(JsonObject json, BiologicallyDerivedProduct.BiologicallyDerivedProductCollectionComponent res) throws IOException, FHIRFormatError {
4308    parseBackboneElementProperties(json, res);
4309    if (json.has("collector"))
4310      res.setCollector(parseReference(getJObject(json, "collector")));
4311    if (json.has("source"))
4312      res.setSource(parseReference(getJObject(json, "source")));
4313    DataType collected = parseType("collected", json);
4314    if (collected != null)
4315      res.setCollected(collected);
4316  }
4317
4318  protected BiologicallyDerivedProduct.BiologicallyDerivedProductPropertyComponent parseBiologicallyDerivedProductPropertyComponent(JsonObject json) throws IOException, FHIRFormatError {
4319    BiologicallyDerivedProduct.BiologicallyDerivedProductPropertyComponent res = new BiologicallyDerivedProduct.BiologicallyDerivedProductPropertyComponent();
4320    parseBiologicallyDerivedProductPropertyComponentProperties(json, res);
4321    return res;
4322  }
4323
4324  protected void parseBiologicallyDerivedProductPropertyComponentProperties(JsonObject json, BiologicallyDerivedProduct.BiologicallyDerivedProductPropertyComponent res) throws IOException, FHIRFormatError {
4325    parseBackboneElementProperties(json, res);
4326    if (json.has("type"))
4327      res.setType(parseCodeableConcept(getJObject(json, "type")));
4328    DataType value = parseType("value", json);
4329    if (value != null)
4330      res.setValue(value);
4331  }
4332
4333  protected BiologicallyDerivedProductDispense parseBiologicallyDerivedProductDispense(JsonObject json) throws IOException, FHIRFormatError {
4334    BiologicallyDerivedProductDispense res = new BiologicallyDerivedProductDispense();
4335    parseBiologicallyDerivedProductDispenseProperties(json, res);
4336    return res;
4337  }
4338
4339  protected void parseBiologicallyDerivedProductDispenseProperties(JsonObject json, BiologicallyDerivedProductDispense res) throws IOException, FHIRFormatError {
4340    parseDomainResourceProperties(json, res);
4341    if (json.has("identifier")) {
4342      JsonArray array = getJArray(json, "identifier");
4343      for (int i = 0; i < array.size(); i++) {
4344        res.getIdentifier().add(parseIdentifier(array.get(i).getAsJsonObject()));
4345      }
4346    };
4347    if (json.has("basedOn")) {
4348      JsonArray array = getJArray(json, "basedOn");
4349      for (int i = 0; i < array.size(); i++) {
4350        res.getBasedOn().add(parseReference(array.get(i).getAsJsonObject()));
4351      }
4352    };
4353    if (json.has("partOf")) {
4354      JsonArray array = getJArray(json, "partOf");
4355      for (int i = 0; i < array.size(); i++) {
4356        res.getPartOf().add(parseReference(array.get(i).getAsJsonObject()));
4357      }
4358    };
4359    if (json.has("status"))
4360      res.setStatusElement(parseEnumeration(json.get("status").getAsString(), BiologicallyDerivedProductDispense.BiologicallyDerivedProductDispenseCodes.NULL, new BiologicallyDerivedProductDispense.BiologicallyDerivedProductDispenseCodesEnumFactory()));
4361    if (json.has("_status"))
4362      parseElementProperties(getJObject(json, "_status"), res.getStatusElement());
4363    if (json.has("originRelationshipType"))
4364      res.setOriginRelationshipType(parseCodeableConcept(getJObject(json, "originRelationshipType")));
4365    if (json.has("product"))
4366      res.setProduct(parseReference(getJObject(json, "product")));
4367    if (json.has("patient"))
4368      res.setPatient(parseReference(getJObject(json, "patient")));
4369    if (json.has("matchStatus"))
4370      res.setMatchStatus(parseCodeableConcept(getJObject(json, "matchStatus")));
4371    if (json.has("performer")) {
4372      JsonArray array = getJArray(json, "performer");
4373      for (int i = 0; i < array.size(); i++) {
4374        res.getPerformer().add(parseBiologicallyDerivedProductDispensePerformerComponent(array.get(i).getAsJsonObject()));
4375      }
4376    };
4377    if (json.has("location"))
4378      res.setLocation(parseReference(getJObject(json, "location")));
4379    if (json.has("quantity"))
4380      res.setQuantity(parseQuantity(getJObject(json, "quantity")));
4381    if (json.has("preparedDate"))
4382      res.setPreparedDateElement(parseDateTime(json.get("preparedDate").getAsString()));
4383    if (json.has("_preparedDate"))
4384      parseElementProperties(getJObject(json, "_preparedDate"), res.getPreparedDateElement());
4385    if (json.has("whenHandedOver"))
4386      res.setWhenHandedOverElement(parseDateTime(json.get("whenHandedOver").getAsString()));
4387    if (json.has("_whenHandedOver"))
4388      parseElementProperties(getJObject(json, "_whenHandedOver"), res.getWhenHandedOverElement());
4389    if (json.has("destination"))
4390      res.setDestination(parseReference(getJObject(json, "destination")));
4391    if (json.has("note")) {
4392      JsonArray array = getJArray(json, "note");
4393      for (int i = 0; i < array.size(); i++) {
4394        res.getNote().add(parseAnnotation(array.get(i).getAsJsonObject()));
4395      }
4396    };
4397    if (json.has("usageInstruction"))
4398      res.setUsageInstructionElement(parseString(json.get("usageInstruction").getAsString()));
4399    if (json.has("_usageInstruction"))
4400      parseElementProperties(getJObject(json, "_usageInstruction"), res.getUsageInstructionElement());
4401  }
4402
4403  protected BiologicallyDerivedProductDispense.BiologicallyDerivedProductDispensePerformerComponent parseBiologicallyDerivedProductDispensePerformerComponent(JsonObject json) throws IOException, FHIRFormatError {
4404    BiologicallyDerivedProductDispense.BiologicallyDerivedProductDispensePerformerComponent res = new BiologicallyDerivedProductDispense.BiologicallyDerivedProductDispensePerformerComponent();
4405    parseBiologicallyDerivedProductDispensePerformerComponentProperties(json, res);
4406    return res;
4407  }
4408
4409  protected void parseBiologicallyDerivedProductDispensePerformerComponentProperties(JsonObject json, BiologicallyDerivedProductDispense.BiologicallyDerivedProductDispensePerformerComponent res) throws IOException, FHIRFormatError {
4410    parseBackboneElementProperties(json, res);
4411    if (json.has("function"))
4412      res.setFunction(parseCodeableConcept(getJObject(json, "function")));
4413    if (json.has("actor"))
4414      res.setActor(parseReference(getJObject(json, "actor")));
4415  }
4416
4417  protected BodyStructure parseBodyStructure(JsonObject json) throws IOException, FHIRFormatError {
4418    BodyStructure res = new BodyStructure();
4419    parseBodyStructureProperties(json, res);
4420    return res;
4421  }
4422
4423  protected void parseBodyStructureProperties(JsonObject json, BodyStructure res) throws IOException, FHIRFormatError {
4424    parseDomainResourceProperties(json, res);
4425    if (json.has("identifier")) {
4426      JsonArray array = getJArray(json, "identifier");
4427      for (int i = 0; i < array.size(); i++) {
4428        res.getIdentifier().add(parseIdentifier(array.get(i).getAsJsonObject()));
4429      }
4430    };
4431    if (json.has("active"))
4432      res.setActiveElement(parseBoolean(json.get("active").getAsBoolean()));
4433    if (json.has("_active"))
4434      parseElementProperties(getJObject(json, "_active"), res.getActiveElement());
4435    if (json.has("morphology"))
4436      res.setMorphology(parseCodeableConcept(getJObject(json, "morphology")));
4437    if (json.has("includedStructure")) {
4438      JsonArray array = getJArray(json, "includedStructure");
4439      for (int i = 0; i < array.size(); i++) {
4440        res.getIncludedStructure().add(parseBodyStructureIncludedStructureComponent(array.get(i).getAsJsonObject()));
4441      }
4442    };
4443    if (json.has("excludedStructure")) {
4444      JsonArray array = getJArray(json, "excludedStructure");
4445      for (int i = 0; i < array.size(); i++) {
4446        res.getExcludedStructure().add(parseBodyStructureIncludedStructureComponent(array.get(i).getAsJsonObject()));
4447      }
4448    };
4449    if (json.has("description"))
4450      res.setDescriptionElement(parseMarkdown(json.get("description").getAsString()));
4451    if (json.has("_description"))
4452      parseElementProperties(getJObject(json, "_description"), res.getDescriptionElement());
4453    if (json.has("image")) {
4454      JsonArray array = getJArray(json, "image");
4455      for (int i = 0; i < array.size(); i++) {
4456        res.getImage().add(parseAttachment(array.get(i).getAsJsonObject()));
4457      }
4458    };
4459    if (json.has("patient"))
4460      res.setPatient(parseReference(getJObject(json, "patient")));
4461  }
4462
4463  protected BodyStructure.BodyStructureIncludedStructureComponent parseBodyStructureIncludedStructureComponent(JsonObject json) throws IOException, FHIRFormatError {
4464    BodyStructure.BodyStructureIncludedStructureComponent res = new BodyStructure.BodyStructureIncludedStructureComponent();
4465    parseBodyStructureIncludedStructureComponentProperties(json, res);
4466    return res;
4467  }
4468
4469  protected void parseBodyStructureIncludedStructureComponentProperties(JsonObject json, BodyStructure.BodyStructureIncludedStructureComponent res) throws IOException, FHIRFormatError {
4470    parseBackboneElementProperties(json, res);
4471    if (json.has("structure"))
4472      res.setStructure(parseCodeableConcept(getJObject(json, "structure")));
4473    if (json.has("laterality"))
4474      res.setLaterality(parseCodeableConcept(getJObject(json, "laterality")));
4475    if (json.has("bodyLandmarkOrientation")) {
4476      JsonArray array = getJArray(json, "bodyLandmarkOrientation");
4477      for (int i = 0; i < array.size(); i++) {
4478        res.getBodyLandmarkOrientation().add(parseBodyStructureIncludedStructureBodyLandmarkOrientationComponent(array.get(i).getAsJsonObject()));
4479      }
4480    };
4481    if (json.has("spatialReference")) {
4482      JsonArray array = getJArray(json, "spatialReference");
4483      for (int i = 0; i < array.size(); i++) {
4484        res.getSpatialReference().add(parseReference(array.get(i).getAsJsonObject()));
4485      }
4486    };
4487    if (json.has("qualifier")) {
4488      JsonArray array = getJArray(json, "qualifier");
4489      for (int i = 0; i < array.size(); i++) {
4490        res.getQualifier().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
4491      }
4492    };
4493  }
4494
4495  protected BodyStructure.BodyStructureIncludedStructureBodyLandmarkOrientationComponent parseBodyStructureIncludedStructureBodyLandmarkOrientationComponent(JsonObject json) throws IOException, FHIRFormatError {
4496    BodyStructure.BodyStructureIncludedStructureBodyLandmarkOrientationComponent res = new BodyStructure.BodyStructureIncludedStructureBodyLandmarkOrientationComponent();
4497    parseBodyStructureIncludedStructureBodyLandmarkOrientationComponentProperties(json, res);
4498    return res;
4499  }
4500
4501  protected void parseBodyStructureIncludedStructureBodyLandmarkOrientationComponentProperties(JsonObject json, BodyStructure.BodyStructureIncludedStructureBodyLandmarkOrientationComponent res) throws IOException, FHIRFormatError {
4502    parseBackboneElementProperties(json, res);
4503    if (json.has("landmarkDescription")) {
4504      JsonArray array = getJArray(json, "landmarkDescription");
4505      for (int i = 0; i < array.size(); i++) {
4506        res.getLandmarkDescription().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
4507      }
4508    };
4509    if (json.has("clockFacePosition")) {
4510      JsonArray array = getJArray(json, "clockFacePosition");
4511      for (int i = 0; i < array.size(); i++) {
4512        res.getClockFacePosition().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
4513      }
4514    };
4515    if (json.has("distanceFromLandmark")) {
4516      JsonArray array = getJArray(json, "distanceFromLandmark");
4517      for (int i = 0; i < array.size(); i++) {
4518        res.getDistanceFromLandmark().add(parseBodyStructureIncludedStructureBodyLandmarkOrientationDistanceFromLandmarkComponent(array.get(i).getAsJsonObject()));
4519      }
4520    };
4521    if (json.has("surfaceOrientation")) {
4522      JsonArray array = getJArray(json, "surfaceOrientation");
4523      for (int i = 0; i < array.size(); i++) {
4524        res.getSurfaceOrientation().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
4525      }
4526    };
4527  }
4528
4529  protected BodyStructure.BodyStructureIncludedStructureBodyLandmarkOrientationDistanceFromLandmarkComponent parseBodyStructureIncludedStructureBodyLandmarkOrientationDistanceFromLandmarkComponent(JsonObject json) throws IOException, FHIRFormatError {
4530    BodyStructure.BodyStructureIncludedStructureBodyLandmarkOrientationDistanceFromLandmarkComponent res = new BodyStructure.BodyStructureIncludedStructureBodyLandmarkOrientationDistanceFromLandmarkComponent();
4531    parseBodyStructureIncludedStructureBodyLandmarkOrientationDistanceFromLandmarkComponentProperties(json, res);
4532    return res;
4533  }
4534
4535  protected void parseBodyStructureIncludedStructureBodyLandmarkOrientationDistanceFromLandmarkComponentProperties(JsonObject json, BodyStructure.BodyStructureIncludedStructureBodyLandmarkOrientationDistanceFromLandmarkComponent res) throws IOException, FHIRFormatError {
4536    parseBackboneElementProperties(json, res);
4537    if (json.has("device")) {
4538      JsonArray array = getJArray(json, "device");
4539      for (int i = 0; i < array.size(); i++) {
4540        res.getDevice().add(parseCodeableReference(array.get(i).getAsJsonObject()));
4541      }
4542    };
4543    if (json.has("value")) {
4544      JsonArray array = getJArray(json, "value");
4545      for (int i = 0; i < array.size(); i++) {
4546        res.getValue().add(parseQuantity(array.get(i).getAsJsonObject()));
4547      }
4548    };
4549  }
4550
4551  protected Bundle parseBundle(JsonObject json) throws IOException, FHIRFormatError {
4552    Bundle res = new Bundle();
4553    parseBundleProperties(json, res);
4554    return res;
4555  }
4556
4557  protected void parseBundleProperties(JsonObject json, Bundle res) throws IOException, FHIRFormatError {
4558    parseResourceProperties(json, res);
4559    if (json.has("identifier"))
4560      res.setIdentifier(parseIdentifier(getJObject(json, "identifier")));
4561    if (json.has("type"))
4562      res.setTypeElement(parseEnumeration(json.get("type").getAsString(), Bundle.BundleType.NULL, new Bundle.BundleTypeEnumFactory()));
4563    if (json.has("_type"))
4564      parseElementProperties(getJObject(json, "_type"), res.getTypeElement());
4565    if (json.has("timestamp"))
4566      res.setTimestampElement(parseInstant(json.get("timestamp").getAsString()));
4567    if (json.has("_timestamp"))
4568      parseElementProperties(getJObject(json, "_timestamp"), res.getTimestampElement());
4569    if (json.has("total"))
4570      res.setTotalElement(parseUnsignedInt(json.get("total").getAsString()));
4571    if (json.has("_total"))
4572      parseElementProperties(getJObject(json, "_total"), res.getTotalElement());
4573    if (json.has("link")) {
4574      JsonArray array = getJArray(json, "link");
4575      for (int i = 0; i < array.size(); i++) {
4576        res.getLink().add(parseBundleLinkComponent(array.get(i).getAsJsonObject()));
4577      }
4578    };
4579    if (json.has("entry")) {
4580      JsonArray array = getJArray(json, "entry");
4581      for (int i = 0; i < array.size(); i++) {
4582        res.getEntry().add(parseBundleEntryComponent(array.get(i).getAsJsonObject()));
4583      }
4584    };
4585    if (json.has("signature"))
4586      res.setSignature(parseSignature(getJObject(json, "signature")));
4587    if (json.has("issues"))
4588      res.setIssues(parseResource(getJObject(json, "issues")));
4589  }
4590
4591  protected Bundle.BundleLinkComponent parseBundleLinkComponent(JsonObject json) throws IOException, FHIRFormatError {
4592    Bundle.BundleLinkComponent res = new Bundle.BundleLinkComponent();
4593    parseBundleLinkComponentProperties(json, res);
4594    return res;
4595  }
4596
4597  protected void parseBundleLinkComponentProperties(JsonObject json, Bundle.BundleLinkComponent res) throws IOException, FHIRFormatError {
4598    parseBackboneElementProperties(json, res);
4599    if (json.has("relation"))
4600      res.setRelationElement(parseEnumeration(json.get("relation").getAsString(), Bundle.LinkRelationTypes.NULL, new Bundle.LinkRelationTypesEnumFactory()));
4601    if (json.has("_relation"))
4602      parseElementProperties(getJObject(json, "_relation"), res.getRelationElement());
4603    if (json.has("url"))
4604      res.setUrlElement(parseUri(json.get("url").getAsString()));
4605    if (json.has("_url"))
4606      parseElementProperties(getJObject(json, "_url"), res.getUrlElement());
4607  }
4608
4609  protected Bundle.BundleEntryComponent parseBundleEntryComponent(JsonObject json) throws IOException, FHIRFormatError {
4610    Bundle.BundleEntryComponent res = new Bundle.BundleEntryComponent();
4611    parseBundleEntryComponentProperties(json, res);
4612    return res;
4613  }
4614
4615  protected void parseBundleEntryComponentProperties(JsonObject json, Bundle.BundleEntryComponent res) throws IOException, FHIRFormatError {
4616    parseBackboneElementProperties(json, res);
4617    if (json.has("link")) {
4618      JsonArray array = getJArray(json, "link");
4619      for (int i = 0; i < array.size(); i++) {
4620        res.getLink().add(parseBundleLinkComponent(array.get(i).getAsJsonObject()));
4621      }
4622    };
4623    if (json.has("fullUrl"))
4624      res.setFullUrlElement(parseUri(json.get("fullUrl").getAsString()));
4625    if (json.has("_fullUrl"))
4626      parseElementProperties(getJObject(json, "_fullUrl"), res.getFullUrlElement());
4627    if (json.has("resource"))
4628      res.setResource(parseResource(getJObject(json, "resource")));
4629    if (json.has("search"))
4630      res.setSearch(parseBundleEntrySearchComponent(getJObject(json, "search")));
4631    if (json.has("request"))
4632      res.setRequest(parseBundleEntryRequestComponent(getJObject(json, "request")));
4633    if (json.has("response"))
4634      res.setResponse(parseBundleEntryResponseComponent(getJObject(json, "response")));
4635  }
4636
4637  protected Bundle.BundleEntrySearchComponent parseBundleEntrySearchComponent(JsonObject json) throws IOException, FHIRFormatError {
4638    Bundle.BundleEntrySearchComponent res = new Bundle.BundleEntrySearchComponent();
4639    parseBundleEntrySearchComponentProperties(json, res);
4640    return res;
4641  }
4642
4643  protected void parseBundleEntrySearchComponentProperties(JsonObject json, Bundle.BundleEntrySearchComponent res) throws IOException, FHIRFormatError {
4644    parseBackboneElementProperties(json, res);
4645    if (json.has("mode"))
4646      res.setModeElement(parseEnumeration(json.get("mode").getAsString(), Bundle.SearchEntryMode.NULL, new Bundle.SearchEntryModeEnumFactory()));
4647    if (json.has("_mode"))
4648      parseElementProperties(getJObject(json, "_mode"), res.getModeElement());
4649    if (json.has("score"))
4650      res.setScoreElement(parseDecimal(json.get("score").getAsBigDecimal()));
4651    if (json.has("_score"))
4652      parseElementProperties(getJObject(json, "_score"), res.getScoreElement());
4653  }
4654
4655  protected Bundle.BundleEntryRequestComponent parseBundleEntryRequestComponent(JsonObject json) throws IOException, FHIRFormatError {
4656    Bundle.BundleEntryRequestComponent res = new Bundle.BundleEntryRequestComponent();
4657    parseBundleEntryRequestComponentProperties(json, res);
4658    return res;
4659  }
4660
4661  protected void parseBundleEntryRequestComponentProperties(JsonObject json, Bundle.BundleEntryRequestComponent res) throws IOException, FHIRFormatError {
4662    parseBackboneElementProperties(json, res);
4663    if (json.has("method"))
4664      res.setMethodElement(parseEnumeration(json.get("method").getAsString(), Bundle.HTTPVerb.NULL, new Bundle.HTTPVerbEnumFactory()));
4665    if (json.has("_method"))
4666      parseElementProperties(getJObject(json, "_method"), res.getMethodElement());
4667    if (json.has("url"))
4668      res.setUrlElement(parseUri(json.get("url").getAsString()));
4669    if (json.has("_url"))
4670      parseElementProperties(getJObject(json, "_url"), res.getUrlElement());
4671    if (json.has("ifNoneMatch"))
4672      res.setIfNoneMatchElement(parseString(json.get("ifNoneMatch").getAsString()));
4673    if (json.has("_ifNoneMatch"))
4674      parseElementProperties(getJObject(json, "_ifNoneMatch"), res.getIfNoneMatchElement());
4675    if (json.has("ifModifiedSince"))
4676      res.setIfModifiedSinceElement(parseInstant(json.get("ifModifiedSince").getAsString()));
4677    if (json.has("_ifModifiedSince"))
4678      parseElementProperties(getJObject(json, "_ifModifiedSince"), res.getIfModifiedSinceElement());
4679    if (json.has("ifMatch"))
4680      res.setIfMatchElement(parseString(json.get("ifMatch").getAsString()));
4681    if (json.has("_ifMatch"))
4682      parseElementProperties(getJObject(json, "_ifMatch"), res.getIfMatchElement());
4683    if (json.has("ifNoneExist"))
4684      res.setIfNoneExistElement(parseString(json.get("ifNoneExist").getAsString()));
4685    if (json.has("_ifNoneExist"))
4686      parseElementProperties(getJObject(json, "_ifNoneExist"), res.getIfNoneExistElement());
4687  }
4688
4689  protected Bundle.BundleEntryResponseComponent parseBundleEntryResponseComponent(JsonObject json) throws IOException, FHIRFormatError {
4690    Bundle.BundleEntryResponseComponent res = new Bundle.BundleEntryResponseComponent();
4691    parseBundleEntryResponseComponentProperties(json, res);
4692    return res;
4693  }
4694
4695  protected void parseBundleEntryResponseComponentProperties(JsonObject json, Bundle.BundleEntryResponseComponent res) throws IOException, FHIRFormatError {
4696    parseBackboneElementProperties(json, res);
4697    if (json.has("status"))
4698      res.setStatusElement(parseString(json.get("status").getAsString()));
4699    if (json.has("_status"))
4700      parseElementProperties(getJObject(json, "_status"), res.getStatusElement());
4701    if (json.has("location"))
4702      res.setLocationElement(parseUri(json.get("location").getAsString()));
4703    if (json.has("_location"))
4704      parseElementProperties(getJObject(json, "_location"), res.getLocationElement());
4705    if (json.has("etag"))
4706      res.setEtagElement(parseString(json.get("etag").getAsString()));
4707    if (json.has("_etag"))
4708      parseElementProperties(getJObject(json, "_etag"), res.getEtagElement());
4709    if (json.has("lastModified"))
4710      res.setLastModifiedElement(parseInstant(json.get("lastModified").getAsString()));
4711    if (json.has("_lastModified"))
4712      parseElementProperties(getJObject(json, "_lastModified"), res.getLastModifiedElement());
4713    if (json.has("outcome"))
4714      res.setOutcome(parseResource(getJObject(json, "outcome")));
4715  }
4716
4717  protected CapabilityStatement parseCapabilityStatement(JsonObject json) throws IOException, FHIRFormatError {
4718    CapabilityStatement res = new CapabilityStatement();
4719    parseCapabilityStatementProperties(json, res);
4720    return res;
4721  }
4722
4723  protected void parseCapabilityStatementProperties(JsonObject json, CapabilityStatement res) throws IOException, FHIRFormatError {
4724    parseCanonicalResourceProperties(json, res);
4725    if (json.has("url"))
4726      res.setUrlElement(parseUri(json.get("url").getAsString()));
4727    if (json.has("_url"))
4728      parseElementProperties(getJObject(json, "_url"), res.getUrlElement());
4729    if (json.has("identifier")) {
4730      JsonArray array = getJArray(json, "identifier");
4731      for (int i = 0; i < array.size(); i++) {
4732        res.getIdentifier().add(parseIdentifier(array.get(i).getAsJsonObject()));
4733      }
4734    };
4735    if (json.has("version"))
4736      res.setVersionElement(parseString(json.get("version").getAsString()));
4737    if (json.has("_version"))
4738      parseElementProperties(getJObject(json, "_version"), res.getVersionElement());
4739    DataType versionAlgorithm = parseType("versionAlgorithm", json);
4740    if (versionAlgorithm != null)
4741      res.setVersionAlgorithm(versionAlgorithm);
4742    if (json.has("name"))
4743      res.setNameElement(parseString(json.get("name").getAsString()));
4744    if (json.has("_name"))
4745      parseElementProperties(getJObject(json, "_name"), res.getNameElement());
4746    if (json.has("title"))
4747      res.setTitleElement(parseString(json.get("title").getAsString()));
4748    if (json.has("_title"))
4749      parseElementProperties(getJObject(json, "_title"), res.getTitleElement());
4750    if (json.has("status"))
4751      res.setStatusElement(parseEnumeration(json.get("status").getAsString(), Enumerations.PublicationStatus.NULL, new Enumerations.PublicationStatusEnumFactory()));
4752    if (json.has("_status"))
4753      parseElementProperties(getJObject(json, "_status"), res.getStatusElement());
4754    if (json.has("experimental"))
4755      res.setExperimentalElement(parseBoolean(json.get("experimental").getAsBoolean()));
4756    if (json.has("_experimental"))
4757      parseElementProperties(getJObject(json, "_experimental"), res.getExperimentalElement());
4758    if (json.has("date"))
4759      res.setDateElement(parseDateTime(json.get("date").getAsString()));
4760    if (json.has("_date"))
4761      parseElementProperties(getJObject(json, "_date"), res.getDateElement());
4762    if (json.has("publisher"))
4763      res.setPublisherElement(parseString(json.get("publisher").getAsString()));
4764    if (json.has("_publisher"))
4765      parseElementProperties(getJObject(json, "_publisher"), res.getPublisherElement());
4766    if (json.has("contact")) {
4767      JsonArray array = getJArray(json, "contact");
4768      for (int i = 0; i < array.size(); i++) {
4769        res.getContact().add(parseContactDetail(array.get(i).getAsJsonObject()));
4770      }
4771    };
4772    if (json.has("description"))
4773      res.setDescriptionElement(parseMarkdown(json.get("description").getAsString()));
4774    if (json.has("_description"))
4775      parseElementProperties(getJObject(json, "_description"), res.getDescriptionElement());
4776    if (json.has("useContext")) {
4777      JsonArray array = getJArray(json, "useContext");
4778      for (int i = 0; i < array.size(); i++) {
4779        res.getUseContext().add(parseUsageContext(array.get(i).getAsJsonObject()));
4780      }
4781    };
4782    if (json.has("jurisdiction")) {
4783      JsonArray array = getJArray(json, "jurisdiction");
4784      for (int i = 0; i < array.size(); i++) {
4785        res.getJurisdiction().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
4786      }
4787    };
4788    if (json.has("purpose"))
4789      res.setPurposeElement(parseMarkdown(json.get("purpose").getAsString()));
4790    if (json.has("_purpose"))
4791      parseElementProperties(getJObject(json, "_purpose"), res.getPurposeElement());
4792    if (json.has("copyright"))
4793      res.setCopyrightElement(parseMarkdown(json.get("copyright").getAsString()));
4794    if (json.has("_copyright"))
4795      parseElementProperties(getJObject(json, "_copyright"), res.getCopyrightElement());
4796    if (json.has("copyrightLabel"))
4797      res.setCopyrightLabelElement(parseString(json.get("copyrightLabel").getAsString()));
4798    if (json.has("_copyrightLabel"))
4799      parseElementProperties(getJObject(json, "_copyrightLabel"), res.getCopyrightLabelElement());
4800    if (json.has("kind"))
4801      res.setKindElement(parseEnumeration(json.get("kind").getAsString(), Enumerations.CapabilityStatementKind.NULL, new Enumerations.CapabilityStatementKindEnumFactory()));
4802    if (json.has("_kind"))
4803      parseElementProperties(getJObject(json, "_kind"), res.getKindElement());
4804    if (json.has("instantiates")) {
4805      JsonArray array = getJArray(json, "instantiates");
4806      for (int i = 0; i < array.size(); i++) {
4807        if (array.get(i).isJsonNull()) {
4808          res.getInstantiates().add(new CanonicalType());
4809        } else {;
4810          res.getInstantiates().add(parseCanonical(array.get(i).getAsString()));
4811        }
4812      }
4813    };
4814    if (json.has("_instantiates")) {
4815      JsonArray array = getJArray(json, "_instantiates");
4816      for (int i = 0; i < array.size(); i++) {
4817        if (i == res.getInstantiates().size())
4818          res.getInstantiates().add(parseCanonical(null));
4819        if (array.get(i) instanceof JsonObject) 
4820          parseElementProperties(array.get(i).getAsJsonObject(), res.getInstantiates().get(i));
4821      }
4822    };
4823    if (json.has("imports")) {
4824      JsonArray array = getJArray(json, "imports");
4825      for (int i = 0; i < array.size(); i++) {
4826        if (array.get(i).isJsonNull()) {
4827          res.getImports().add(new CanonicalType());
4828        } else {;
4829          res.getImports().add(parseCanonical(array.get(i).getAsString()));
4830        }
4831      }
4832    };
4833    if (json.has("_imports")) {
4834      JsonArray array = getJArray(json, "_imports");
4835      for (int i = 0; i < array.size(); i++) {
4836        if (i == res.getImports().size())
4837          res.getImports().add(parseCanonical(null));
4838        if (array.get(i) instanceof JsonObject) 
4839          parseElementProperties(array.get(i).getAsJsonObject(), res.getImports().get(i));
4840      }
4841    };
4842    if (json.has("software"))
4843      res.setSoftware(parseCapabilityStatementSoftwareComponent(getJObject(json, "software")));
4844    if (json.has("implementation"))
4845      res.setImplementation(parseCapabilityStatementImplementationComponent(getJObject(json, "implementation")));
4846    if (json.has("fhirVersion"))
4847      res.setFhirVersionElement(parseEnumeration(json.get("fhirVersion").getAsString(), Enumerations.FHIRVersion.NULL, new Enumerations.FHIRVersionEnumFactory()));
4848    if (json.has("_fhirVersion"))
4849      parseElementProperties(getJObject(json, "_fhirVersion"), res.getFhirVersionElement());
4850    if (json.has("format")) {
4851      JsonArray array = getJArray(json, "format");
4852      for (int i = 0; i < array.size(); i++) {
4853        if (array.get(i).isJsonNull()) {
4854          res.getFormat().add(new CodeType());
4855        } else {;
4856          res.getFormat().add(parseCode(array.get(i).getAsString()));
4857        }
4858      }
4859    };
4860    if (json.has("_format")) {
4861      JsonArray array = getJArray(json, "_format");
4862      for (int i = 0; i < array.size(); i++) {
4863        if (i == res.getFormat().size())
4864          res.getFormat().add(parseCode(null));
4865        if (array.get(i) instanceof JsonObject) 
4866          parseElementProperties(array.get(i).getAsJsonObject(), res.getFormat().get(i));
4867      }
4868    };
4869    if (json.has("patchFormat")) {
4870      JsonArray array = getJArray(json, "patchFormat");
4871      for (int i = 0; i < array.size(); i++) {
4872        if (array.get(i).isJsonNull()) {
4873          res.getPatchFormat().add(new CodeType());
4874        } else {;
4875          res.getPatchFormat().add(parseCode(array.get(i).getAsString()));
4876        }
4877      }
4878    };
4879    if (json.has("_patchFormat")) {
4880      JsonArray array = getJArray(json, "_patchFormat");
4881      for (int i = 0; i < array.size(); i++) {
4882        if (i == res.getPatchFormat().size())
4883          res.getPatchFormat().add(parseCode(null));
4884        if (array.get(i) instanceof JsonObject) 
4885          parseElementProperties(array.get(i).getAsJsonObject(), res.getPatchFormat().get(i));
4886      }
4887    };
4888    if (json.has("acceptLanguage")) {
4889      JsonArray array = getJArray(json, "acceptLanguage");
4890      for (int i = 0; i < array.size(); i++) {
4891        if (array.get(i).isJsonNull()) {
4892          res.getAcceptLanguage().add(new CodeType());
4893        } else {;
4894          res.getAcceptLanguage().add(parseCode(array.get(i).getAsString()));
4895        }
4896      }
4897    };
4898    if (json.has("_acceptLanguage")) {
4899      JsonArray array = getJArray(json, "_acceptLanguage");
4900      for (int i = 0; i < array.size(); i++) {
4901        if (i == res.getAcceptLanguage().size())
4902          res.getAcceptLanguage().add(parseCode(null));
4903        if (array.get(i) instanceof JsonObject) 
4904          parseElementProperties(array.get(i).getAsJsonObject(), res.getAcceptLanguage().get(i));
4905      }
4906    };
4907    if (json.has("implementationGuide")) {
4908      JsonArray array = getJArray(json, "implementationGuide");
4909      for (int i = 0; i < array.size(); i++) {
4910        if (array.get(i).isJsonNull()) {
4911          res.getImplementationGuide().add(new CanonicalType());
4912        } else {;
4913          res.getImplementationGuide().add(parseCanonical(array.get(i).getAsString()));
4914        }
4915      }
4916    };
4917    if (json.has("_implementationGuide")) {
4918      JsonArray array = getJArray(json, "_implementationGuide");
4919      for (int i = 0; i < array.size(); i++) {
4920        if (i == res.getImplementationGuide().size())
4921          res.getImplementationGuide().add(parseCanonical(null));
4922        if (array.get(i) instanceof JsonObject) 
4923          parseElementProperties(array.get(i).getAsJsonObject(), res.getImplementationGuide().get(i));
4924      }
4925    };
4926    if (json.has("rest")) {
4927      JsonArray array = getJArray(json, "rest");
4928      for (int i = 0; i < array.size(); i++) {
4929        res.getRest().add(parseCapabilityStatementRestComponent(array.get(i).getAsJsonObject()));
4930      }
4931    };
4932    if (json.has("messaging")) {
4933      JsonArray array = getJArray(json, "messaging");
4934      for (int i = 0; i < array.size(); i++) {
4935        res.getMessaging().add(parseCapabilityStatementMessagingComponent(array.get(i).getAsJsonObject()));
4936      }
4937    };
4938    if (json.has("document")) {
4939      JsonArray array = getJArray(json, "document");
4940      for (int i = 0; i < array.size(); i++) {
4941        res.getDocument().add(parseCapabilityStatementDocumentComponent(array.get(i).getAsJsonObject()));
4942      }
4943    };
4944  }
4945
4946  protected CapabilityStatement.CapabilityStatementSoftwareComponent parseCapabilityStatementSoftwareComponent(JsonObject json) throws IOException, FHIRFormatError {
4947    CapabilityStatement.CapabilityStatementSoftwareComponent res = new CapabilityStatement.CapabilityStatementSoftwareComponent();
4948    parseCapabilityStatementSoftwareComponentProperties(json, res);
4949    return res;
4950  }
4951
4952  protected void parseCapabilityStatementSoftwareComponentProperties(JsonObject json, CapabilityStatement.CapabilityStatementSoftwareComponent res) throws IOException, FHIRFormatError {
4953    parseBackboneElementProperties(json, res);
4954    if (json.has("name"))
4955      res.setNameElement(parseString(json.get("name").getAsString()));
4956    if (json.has("_name"))
4957      parseElementProperties(getJObject(json, "_name"), res.getNameElement());
4958    if (json.has("version"))
4959      res.setVersionElement(parseString(json.get("version").getAsString()));
4960    if (json.has("_version"))
4961      parseElementProperties(getJObject(json, "_version"), res.getVersionElement());
4962    if (json.has("releaseDate"))
4963      res.setReleaseDateElement(parseDateTime(json.get("releaseDate").getAsString()));
4964    if (json.has("_releaseDate"))
4965      parseElementProperties(getJObject(json, "_releaseDate"), res.getReleaseDateElement());
4966  }
4967
4968  protected CapabilityStatement.CapabilityStatementImplementationComponent parseCapabilityStatementImplementationComponent(JsonObject json) throws IOException, FHIRFormatError {
4969    CapabilityStatement.CapabilityStatementImplementationComponent res = new CapabilityStatement.CapabilityStatementImplementationComponent();
4970    parseCapabilityStatementImplementationComponentProperties(json, res);
4971    return res;
4972  }
4973
4974  protected void parseCapabilityStatementImplementationComponentProperties(JsonObject json, CapabilityStatement.CapabilityStatementImplementationComponent res) throws IOException, FHIRFormatError {
4975    parseBackboneElementProperties(json, res);
4976    if (json.has("description"))
4977      res.setDescriptionElement(parseMarkdown(json.get("description").getAsString()));
4978    if (json.has("_description"))
4979      parseElementProperties(getJObject(json, "_description"), res.getDescriptionElement());
4980    if (json.has("url"))
4981      res.setUrlElement(parseUrl(json.get("url").getAsString()));
4982    if (json.has("_url"))
4983      parseElementProperties(getJObject(json, "_url"), res.getUrlElement());
4984    if (json.has("custodian"))
4985      res.setCustodian(parseReference(getJObject(json, "custodian")));
4986  }
4987
4988  protected CapabilityStatement.CapabilityStatementRestComponent parseCapabilityStatementRestComponent(JsonObject json) throws IOException, FHIRFormatError {
4989    CapabilityStatement.CapabilityStatementRestComponent res = new CapabilityStatement.CapabilityStatementRestComponent();
4990    parseCapabilityStatementRestComponentProperties(json, res);
4991    return res;
4992  }
4993
4994  protected void parseCapabilityStatementRestComponentProperties(JsonObject json, CapabilityStatement.CapabilityStatementRestComponent res) throws IOException, FHIRFormatError {
4995    parseBackboneElementProperties(json, res);
4996    if (json.has("mode"))
4997      res.setModeElement(parseEnumeration(json.get("mode").getAsString(), CapabilityStatement.RestfulCapabilityMode.NULL, new CapabilityStatement.RestfulCapabilityModeEnumFactory()));
4998    if (json.has("_mode"))
4999      parseElementProperties(getJObject(json, "_mode"), res.getModeElement());
5000    if (json.has("documentation"))
5001      res.setDocumentationElement(parseMarkdown(json.get("documentation").getAsString()));
5002    if (json.has("_documentation"))
5003      parseElementProperties(getJObject(json, "_documentation"), res.getDocumentationElement());
5004    if (json.has("security"))
5005      res.setSecurity(parseCapabilityStatementRestSecurityComponent(getJObject(json, "security")));
5006    if (json.has("resource")) {
5007      JsonArray array = getJArray(json, "resource");
5008      for (int i = 0; i < array.size(); i++) {
5009        res.getResource().add(parseCapabilityStatementRestResourceComponent(array.get(i).getAsJsonObject()));
5010      }
5011    };
5012    if (json.has("interaction")) {
5013      JsonArray array = getJArray(json, "interaction");
5014      for (int i = 0; i < array.size(); i++) {
5015        res.getInteraction().add(parseCapabilityStatementSystemInteractionComponent(array.get(i).getAsJsonObject()));
5016      }
5017    };
5018    if (json.has("searchParam")) {
5019      JsonArray array = getJArray(json, "searchParam");
5020      for (int i = 0; i < array.size(); i++) {
5021        res.getSearchParam().add(parseCapabilityStatementRestResourceSearchParamComponent(array.get(i).getAsJsonObject()));
5022      }
5023    };
5024    if (json.has("operation")) {
5025      JsonArray array = getJArray(json, "operation");
5026      for (int i = 0; i < array.size(); i++) {
5027        res.getOperation().add(parseCapabilityStatementRestResourceOperationComponent(array.get(i).getAsJsonObject()));
5028      }
5029    };
5030    if (json.has("compartment")) {
5031      JsonArray array = getJArray(json, "compartment");
5032      for (int i = 0; i < array.size(); i++) {
5033        if (array.get(i).isJsonNull()) {
5034          res.getCompartment().add(new CanonicalType());
5035        } else {;
5036          res.getCompartment().add(parseCanonical(array.get(i).getAsString()));
5037        }
5038      }
5039    };
5040    if (json.has("_compartment")) {
5041      JsonArray array = getJArray(json, "_compartment");
5042      for (int i = 0; i < array.size(); i++) {
5043        if (i == res.getCompartment().size())
5044          res.getCompartment().add(parseCanonical(null));
5045        if (array.get(i) instanceof JsonObject) 
5046          parseElementProperties(array.get(i).getAsJsonObject(), res.getCompartment().get(i));
5047      }
5048    };
5049  }
5050
5051  protected CapabilityStatement.CapabilityStatementRestSecurityComponent parseCapabilityStatementRestSecurityComponent(JsonObject json) throws IOException, FHIRFormatError {
5052    CapabilityStatement.CapabilityStatementRestSecurityComponent res = new CapabilityStatement.CapabilityStatementRestSecurityComponent();
5053    parseCapabilityStatementRestSecurityComponentProperties(json, res);
5054    return res;
5055  }
5056
5057  protected void parseCapabilityStatementRestSecurityComponentProperties(JsonObject json, CapabilityStatement.CapabilityStatementRestSecurityComponent res) throws IOException, FHIRFormatError {
5058    parseBackboneElementProperties(json, res);
5059    if (json.has("cors"))
5060      res.setCorsElement(parseBoolean(json.get("cors").getAsBoolean()));
5061    if (json.has("_cors"))
5062      parseElementProperties(getJObject(json, "_cors"), res.getCorsElement());
5063    if (json.has("service")) {
5064      JsonArray array = getJArray(json, "service");
5065      for (int i = 0; i < array.size(); i++) {
5066        res.getService().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
5067      }
5068    };
5069    if (json.has("description"))
5070      res.setDescriptionElement(parseMarkdown(json.get("description").getAsString()));
5071    if (json.has("_description"))
5072      parseElementProperties(getJObject(json, "_description"), res.getDescriptionElement());
5073  }
5074
5075  protected CapabilityStatement.CapabilityStatementRestResourceComponent parseCapabilityStatementRestResourceComponent(JsonObject json) throws IOException, FHIRFormatError {
5076    CapabilityStatement.CapabilityStatementRestResourceComponent res = new CapabilityStatement.CapabilityStatementRestResourceComponent();
5077    parseCapabilityStatementRestResourceComponentProperties(json, res);
5078    return res;
5079  }
5080
5081  protected void parseCapabilityStatementRestResourceComponentProperties(JsonObject json, CapabilityStatement.CapabilityStatementRestResourceComponent res) throws IOException, FHIRFormatError {
5082    parseBackboneElementProperties(json, res);
5083    if (json.has("type"))
5084      res.setTypeElement(parseCode(json.get("type").getAsString()));
5085    if (json.has("_type"))
5086      parseElementProperties(getJObject(json, "_type"), res.getTypeElement());
5087    if (json.has("profile"))
5088      res.setProfileElement(parseCanonical(json.get("profile").getAsString()));
5089    if (json.has("_profile"))
5090      parseElementProperties(getJObject(json, "_profile"), res.getProfileElement());
5091    if (json.has("supportedProfile")) {
5092      JsonArray array = getJArray(json, "supportedProfile");
5093      for (int i = 0; i < array.size(); i++) {
5094        if (array.get(i).isJsonNull()) {
5095          res.getSupportedProfile().add(new CanonicalType());
5096        } else {;
5097          res.getSupportedProfile().add(parseCanonical(array.get(i).getAsString()));
5098        }
5099      }
5100    };
5101    if (json.has("_supportedProfile")) {
5102      JsonArray array = getJArray(json, "_supportedProfile");
5103      for (int i = 0; i < array.size(); i++) {
5104        if (i == res.getSupportedProfile().size())
5105          res.getSupportedProfile().add(parseCanonical(null));
5106        if (array.get(i) instanceof JsonObject) 
5107          parseElementProperties(array.get(i).getAsJsonObject(), res.getSupportedProfile().get(i));
5108      }
5109    };
5110    if (json.has("documentation"))
5111      res.setDocumentationElement(parseMarkdown(json.get("documentation").getAsString()));
5112    if (json.has("_documentation"))
5113      parseElementProperties(getJObject(json, "_documentation"), res.getDocumentationElement());
5114    if (json.has("interaction")) {
5115      JsonArray array = getJArray(json, "interaction");
5116      for (int i = 0; i < array.size(); i++) {
5117        res.getInteraction().add(parseCapabilityStatementResourceInteractionComponent(array.get(i).getAsJsonObject()));
5118      }
5119    };
5120    if (json.has("versioning"))
5121      res.setVersioningElement(parseEnumeration(json.get("versioning").getAsString(), CapabilityStatement.ResourceVersionPolicy.NULL, new CapabilityStatement.ResourceVersionPolicyEnumFactory()));
5122    if (json.has("_versioning"))
5123      parseElementProperties(getJObject(json, "_versioning"), res.getVersioningElement());
5124    if (json.has("readHistory"))
5125      res.setReadHistoryElement(parseBoolean(json.get("readHistory").getAsBoolean()));
5126    if (json.has("_readHistory"))
5127      parseElementProperties(getJObject(json, "_readHistory"), res.getReadHistoryElement());
5128    if (json.has("updateCreate"))
5129      res.setUpdateCreateElement(parseBoolean(json.get("updateCreate").getAsBoolean()));
5130    if (json.has("_updateCreate"))
5131      parseElementProperties(getJObject(json, "_updateCreate"), res.getUpdateCreateElement());
5132    if (json.has("conditionalCreate"))
5133      res.setConditionalCreateElement(parseBoolean(json.get("conditionalCreate").getAsBoolean()));
5134    if (json.has("_conditionalCreate"))
5135      parseElementProperties(getJObject(json, "_conditionalCreate"), res.getConditionalCreateElement());
5136    if (json.has("conditionalRead"))
5137      res.setConditionalReadElement(parseEnumeration(json.get("conditionalRead").getAsString(), CapabilityStatement.ConditionalReadStatus.NULL, new CapabilityStatement.ConditionalReadStatusEnumFactory()));
5138    if (json.has("_conditionalRead"))
5139      parseElementProperties(getJObject(json, "_conditionalRead"), res.getConditionalReadElement());
5140    if (json.has("conditionalUpdate"))
5141      res.setConditionalUpdateElement(parseBoolean(json.get("conditionalUpdate").getAsBoolean()));
5142    if (json.has("_conditionalUpdate"))
5143      parseElementProperties(getJObject(json, "_conditionalUpdate"), res.getConditionalUpdateElement());
5144    if (json.has("conditionalPatch"))
5145      res.setConditionalPatchElement(parseBoolean(json.get("conditionalPatch").getAsBoolean()));
5146    if (json.has("_conditionalPatch"))
5147      parseElementProperties(getJObject(json, "_conditionalPatch"), res.getConditionalPatchElement());
5148    if (json.has("conditionalDelete"))
5149      res.setConditionalDeleteElement(parseEnumeration(json.get("conditionalDelete").getAsString(), CapabilityStatement.ConditionalDeleteStatus.NULL, new CapabilityStatement.ConditionalDeleteStatusEnumFactory()));
5150    if (json.has("_conditionalDelete"))
5151      parseElementProperties(getJObject(json, "_conditionalDelete"), res.getConditionalDeleteElement());
5152    if (json.has("referencePolicy")) {
5153      JsonArray array = getJArray(json, "referencePolicy");
5154      for (int i = 0; i < array.size(); i++) {
5155        if (array.get(i).isJsonNull()) {
5156          res.getReferencePolicy().add(new Enumeration<CapabilityStatement.ReferenceHandlingPolicy>(new CapabilityStatement.ReferenceHandlingPolicyEnumFactory(), CapabilityStatement.ReferenceHandlingPolicy.NULL));
5157        } else {;
5158          res.getReferencePolicy().add(parseEnumeration(array.get(i).getAsString(), CapabilityStatement.ReferenceHandlingPolicy.NULL, new CapabilityStatement.ReferenceHandlingPolicyEnumFactory()));
5159        }
5160      }
5161    };
5162    if (json.has("_referencePolicy")) {
5163      JsonArray array = getJArray(json, "_referencePolicy");
5164      for (int i = 0; i < array.size(); i++) {
5165        if (i == res.getReferencePolicy().size())
5166          res.getReferencePolicy().add(parseEnumeration(null, CapabilityStatement.ReferenceHandlingPolicy.NULL, new CapabilityStatement.ReferenceHandlingPolicyEnumFactory()));
5167        if (array.get(i) instanceof JsonObject) 
5168          parseElementProperties(array.get(i).getAsJsonObject(), res.getReferencePolicy().get(i));
5169      }
5170    };
5171    if (json.has("searchInclude")) {
5172      JsonArray array = getJArray(json, "searchInclude");
5173      for (int i = 0; i < array.size(); i++) {
5174        if (array.get(i).isJsonNull()) {
5175          res.getSearchInclude().add(new StringType());
5176        } else {;
5177          res.getSearchInclude().add(parseString(array.get(i).getAsString()));
5178        }
5179      }
5180    };
5181    if (json.has("_searchInclude")) {
5182      JsonArray array = getJArray(json, "_searchInclude");
5183      for (int i = 0; i < array.size(); i++) {
5184        if (i == res.getSearchInclude().size())
5185          res.getSearchInclude().add(parseString(null));
5186        if (array.get(i) instanceof JsonObject) 
5187          parseElementProperties(array.get(i).getAsJsonObject(), res.getSearchInclude().get(i));
5188      }
5189    };
5190    if (json.has("searchRevInclude")) {
5191      JsonArray array = getJArray(json, "searchRevInclude");
5192      for (int i = 0; i < array.size(); i++) {
5193        if (array.get(i).isJsonNull()) {
5194          res.getSearchRevInclude().add(new StringType());
5195        } else {;
5196          res.getSearchRevInclude().add(parseString(array.get(i).getAsString()));
5197        }
5198      }
5199    };
5200    if (json.has("_searchRevInclude")) {
5201      JsonArray array = getJArray(json, "_searchRevInclude");
5202      for (int i = 0; i < array.size(); i++) {
5203        if (i == res.getSearchRevInclude().size())
5204          res.getSearchRevInclude().add(parseString(null));
5205        if (array.get(i) instanceof JsonObject) 
5206          parseElementProperties(array.get(i).getAsJsonObject(), res.getSearchRevInclude().get(i));
5207      }
5208    };
5209    if (json.has("searchParam")) {
5210      JsonArray array = getJArray(json, "searchParam");
5211      for (int i = 0; i < array.size(); i++) {
5212        res.getSearchParam().add(parseCapabilityStatementRestResourceSearchParamComponent(array.get(i).getAsJsonObject()));
5213      }
5214    };
5215    if (json.has("operation")) {
5216      JsonArray array = getJArray(json, "operation");
5217      for (int i = 0; i < array.size(); i++) {
5218        res.getOperation().add(parseCapabilityStatementRestResourceOperationComponent(array.get(i).getAsJsonObject()));
5219      }
5220    };
5221  }
5222
5223  protected CapabilityStatement.ResourceInteractionComponent parseCapabilityStatementResourceInteractionComponent(JsonObject json) throws IOException, FHIRFormatError {
5224    CapabilityStatement.ResourceInteractionComponent res = new CapabilityStatement.ResourceInteractionComponent();
5225    parseCapabilityStatementResourceInteractionComponentProperties(json, res);
5226    return res;
5227  }
5228
5229  protected void parseCapabilityStatementResourceInteractionComponentProperties(JsonObject json, CapabilityStatement.ResourceInteractionComponent res) throws IOException, FHIRFormatError {
5230    parseBackboneElementProperties(json, res);
5231    if (json.has("code"))
5232      res.setCodeElement(parseEnumeration(json.get("code").getAsString(), CapabilityStatement.TypeRestfulInteraction.NULL, new CapabilityStatement.TypeRestfulInteractionEnumFactory()));
5233    if (json.has("_code"))
5234      parseElementProperties(getJObject(json, "_code"), res.getCodeElement());
5235    if (json.has("documentation"))
5236      res.setDocumentationElement(parseMarkdown(json.get("documentation").getAsString()));
5237    if (json.has("_documentation"))
5238      parseElementProperties(getJObject(json, "_documentation"), res.getDocumentationElement());
5239  }
5240
5241  protected CapabilityStatement.CapabilityStatementRestResourceSearchParamComponent parseCapabilityStatementRestResourceSearchParamComponent(JsonObject json) throws IOException, FHIRFormatError {
5242    CapabilityStatement.CapabilityStatementRestResourceSearchParamComponent res = new CapabilityStatement.CapabilityStatementRestResourceSearchParamComponent();
5243    parseCapabilityStatementRestResourceSearchParamComponentProperties(json, res);
5244    return res;
5245  }
5246
5247  protected void parseCapabilityStatementRestResourceSearchParamComponentProperties(JsonObject json, CapabilityStatement.CapabilityStatementRestResourceSearchParamComponent res) throws IOException, FHIRFormatError {
5248    parseBackboneElementProperties(json, res);
5249    if (json.has("name"))
5250      res.setNameElement(parseString(json.get("name").getAsString()));
5251    if (json.has("_name"))
5252      parseElementProperties(getJObject(json, "_name"), res.getNameElement());
5253    if (json.has("definition"))
5254      res.setDefinitionElement(parseCanonical(json.get("definition").getAsString()));
5255    if (json.has("_definition"))
5256      parseElementProperties(getJObject(json, "_definition"), res.getDefinitionElement());
5257    if (json.has("type"))
5258      res.setTypeElement(parseEnumeration(json.get("type").getAsString(), Enumerations.SearchParamType.NULL, new Enumerations.SearchParamTypeEnumFactory()));
5259    if (json.has("_type"))
5260      parseElementProperties(getJObject(json, "_type"), res.getTypeElement());
5261    if (json.has("documentation"))
5262      res.setDocumentationElement(parseMarkdown(json.get("documentation").getAsString()));
5263    if (json.has("_documentation"))
5264      parseElementProperties(getJObject(json, "_documentation"), res.getDocumentationElement());
5265  }
5266
5267  protected CapabilityStatement.CapabilityStatementRestResourceOperationComponent parseCapabilityStatementRestResourceOperationComponent(JsonObject json) throws IOException, FHIRFormatError {
5268    CapabilityStatement.CapabilityStatementRestResourceOperationComponent res = new CapabilityStatement.CapabilityStatementRestResourceOperationComponent();
5269    parseCapabilityStatementRestResourceOperationComponentProperties(json, res);
5270    return res;
5271  }
5272
5273  protected void parseCapabilityStatementRestResourceOperationComponentProperties(JsonObject json, CapabilityStatement.CapabilityStatementRestResourceOperationComponent res) throws IOException, FHIRFormatError {
5274    parseBackboneElementProperties(json, res);
5275    if (json.has("name"))
5276      res.setNameElement(parseString(json.get("name").getAsString()));
5277    if (json.has("_name"))
5278      parseElementProperties(getJObject(json, "_name"), res.getNameElement());
5279    if (json.has("definition"))
5280      res.setDefinitionElement(parseCanonical(json.get("definition").getAsString()));
5281    if (json.has("_definition"))
5282      parseElementProperties(getJObject(json, "_definition"), res.getDefinitionElement());
5283    if (json.has("documentation"))
5284      res.setDocumentationElement(parseMarkdown(json.get("documentation").getAsString()));
5285    if (json.has("_documentation"))
5286      parseElementProperties(getJObject(json, "_documentation"), res.getDocumentationElement());
5287  }
5288
5289  protected CapabilityStatement.SystemInteractionComponent parseCapabilityStatementSystemInteractionComponent(JsonObject json) throws IOException, FHIRFormatError {
5290    CapabilityStatement.SystemInteractionComponent res = new CapabilityStatement.SystemInteractionComponent();
5291    parseCapabilityStatementSystemInteractionComponentProperties(json, res);
5292    return res;
5293  }
5294
5295  protected void parseCapabilityStatementSystemInteractionComponentProperties(JsonObject json, CapabilityStatement.SystemInteractionComponent res) throws IOException, FHIRFormatError {
5296    parseBackboneElementProperties(json, res);
5297    if (json.has("code"))
5298      res.setCodeElement(parseEnumeration(json.get("code").getAsString(), CapabilityStatement.SystemRestfulInteraction.NULL, new CapabilityStatement.SystemRestfulInteractionEnumFactory()));
5299    if (json.has("_code"))
5300      parseElementProperties(getJObject(json, "_code"), res.getCodeElement());
5301    if (json.has("documentation"))
5302      res.setDocumentationElement(parseMarkdown(json.get("documentation").getAsString()));
5303    if (json.has("_documentation"))
5304      parseElementProperties(getJObject(json, "_documentation"), res.getDocumentationElement());
5305  }
5306
5307  protected CapabilityStatement.CapabilityStatementMessagingComponent parseCapabilityStatementMessagingComponent(JsonObject json) throws IOException, FHIRFormatError {
5308    CapabilityStatement.CapabilityStatementMessagingComponent res = new CapabilityStatement.CapabilityStatementMessagingComponent();
5309    parseCapabilityStatementMessagingComponentProperties(json, res);
5310    return res;
5311  }
5312
5313  protected void parseCapabilityStatementMessagingComponentProperties(JsonObject json, CapabilityStatement.CapabilityStatementMessagingComponent res) throws IOException, FHIRFormatError {
5314    parseBackboneElementProperties(json, res);
5315    if (json.has("endpoint")) {
5316      JsonArray array = getJArray(json, "endpoint");
5317      for (int i = 0; i < array.size(); i++) {
5318        res.getEndpoint().add(parseCapabilityStatementMessagingEndpointComponent(array.get(i).getAsJsonObject()));
5319      }
5320    };
5321    if (json.has("reliableCache"))
5322      res.setReliableCacheElement(parseUnsignedInt(json.get("reliableCache").getAsString()));
5323    if (json.has("_reliableCache"))
5324      parseElementProperties(getJObject(json, "_reliableCache"), res.getReliableCacheElement());
5325    if (json.has("documentation"))
5326      res.setDocumentationElement(parseMarkdown(json.get("documentation").getAsString()));
5327    if (json.has("_documentation"))
5328      parseElementProperties(getJObject(json, "_documentation"), res.getDocumentationElement());
5329    if (json.has("supportedMessage")) {
5330      JsonArray array = getJArray(json, "supportedMessage");
5331      for (int i = 0; i < array.size(); i++) {
5332        res.getSupportedMessage().add(parseCapabilityStatementMessagingSupportedMessageComponent(array.get(i).getAsJsonObject()));
5333      }
5334    };
5335  }
5336
5337  protected CapabilityStatement.CapabilityStatementMessagingEndpointComponent parseCapabilityStatementMessagingEndpointComponent(JsonObject json) throws IOException, FHIRFormatError {
5338    CapabilityStatement.CapabilityStatementMessagingEndpointComponent res = new CapabilityStatement.CapabilityStatementMessagingEndpointComponent();
5339    parseCapabilityStatementMessagingEndpointComponentProperties(json, res);
5340    return res;
5341  }
5342
5343  protected void parseCapabilityStatementMessagingEndpointComponentProperties(JsonObject json, CapabilityStatement.CapabilityStatementMessagingEndpointComponent res) throws IOException, FHIRFormatError {
5344    parseBackboneElementProperties(json, res);
5345    if (json.has("protocol"))
5346      res.setProtocol(parseCoding(getJObject(json, "protocol")));
5347    if (json.has("address"))
5348      res.setAddressElement(parseUrl(json.get("address").getAsString()));
5349    if (json.has("_address"))
5350      parseElementProperties(getJObject(json, "_address"), res.getAddressElement());
5351  }
5352
5353  protected CapabilityStatement.CapabilityStatementMessagingSupportedMessageComponent parseCapabilityStatementMessagingSupportedMessageComponent(JsonObject json) throws IOException, FHIRFormatError {
5354    CapabilityStatement.CapabilityStatementMessagingSupportedMessageComponent res = new CapabilityStatement.CapabilityStatementMessagingSupportedMessageComponent();
5355    parseCapabilityStatementMessagingSupportedMessageComponentProperties(json, res);
5356    return res;
5357  }
5358
5359  protected void parseCapabilityStatementMessagingSupportedMessageComponentProperties(JsonObject json, CapabilityStatement.CapabilityStatementMessagingSupportedMessageComponent res) throws IOException, FHIRFormatError {
5360    parseBackboneElementProperties(json, res);
5361    if (json.has("mode"))
5362      res.setModeElement(parseEnumeration(json.get("mode").getAsString(), CapabilityStatement.EventCapabilityMode.NULL, new CapabilityStatement.EventCapabilityModeEnumFactory()));
5363    if (json.has("_mode"))
5364      parseElementProperties(getJObject(json, "_mode"), res.getModeElement());
5365    if (json.has("definition"))
5366      res.setDefinitionElement(parseCanonical(json.get("definition").getAsString()));
5367    if (json.has("_definition"))
5368      parseElementProperties(getJObject(json, "_definition"), res.getDefinitionElement());
5369  }
5370
5371  protected CapabilityStatement.CapabilityStatementDocumentComponent parseCapabilityStatementDocumentComponent(JsonObject json) throws IOException, FHIRFormatError {
5372    CapabilityStatement.CapabilityStatementDocumentComponent res = new CapabilityStatement.CapabilityStatementDocumentComponent();
5373    parseCapabilityStatementDocumentComponentProperties(json, res);
5374    return res;
5375  }
5376
5377  protected void parseCapabilityStatementDocumentComponentProperties(JsonObject json, CapabilityStatement.CapabilityStatementDocumentComponent res) throws IOException, FHIRFormatError {
5378    parseBackboneElementProperties(json, res);
5379    if (json.has("mode"))
5380      res.setModeElement(parseEnumeration(json.get("mode").getAsString(), CapabilityStatement.DocumentMode.NULL, new CapabilityStatement.DocumentModeEnumFactory()));
5381    if (json.has("_mode"))
5382      parseElementProperties(getJObject(json, "_mode"), res.getModeElement());
5383    if (json.has("documentation"))
5384      res.setDocumentationElement(parseMarkdown(json.get("documentation").getAsString()));
5385    if (json.has("_documentation"))
5386      parseElementProperties(getJObject(json, "_documentation"), res.getDocumentationElement());
5387    if (json.has("profile"))
5388      res.setProfileElement(parseCanonical(json.get("profile").getAsString()));
5389    if (json.has("_profile"))
5390      parseElementProperties(getJObject(json, "_profile"), res.getProfileElement());
5391  }
5392
5393  protected CarePlan parseCarePlan(JsonObject json) throws IOException, FHIRFormatError {
5394    CarePlan res = new CarePlan();
5395    parseCarePlanProperties(json, res);
5396    return res;
5397  }
5398
5399  protected void parseCarePlanProperties(JsonObject json, CarePlan res) throws IOException, FHIRFormatError {
5400    parseDomainResourceProperties(json, res);
5401    if (json.has("identifier")) {
5402      JsonArray array = getJArray(json, "identifier");
5403      for (int i = 0; i < array.size(); i++) {
5404        res.getIdentifier().add(parseIdentifier(array.get(i).getAsJsonObject()));
5405      }
5406    };
5407    if (json.has("instantiatesCanonical")) {
5408      JsonArray array = getJArray(json, "instantiatesCanonical");
5409      for (int i = 0; i < array.size(); i++) {
5410        if (array.get(i).isJsonNull()) {
5411          res.getInstantiatesCanonical().add(new CanonicalType());
5412        } else {;
5413          res.getInstantiatesCanonical().add(parseCanonical(array.get(i).getAsString()));
5414        }
5415      }
5416    };
5417    if (json.has("_instantiatesCanonical")) {
5418      JsonArray array = getJArray(json, "_instantiatesCanonical");
5419      for (int i = 0; i < array.size(); i++) {
5420        if (i == res.getInstantiatesCanonical().size())
5421          res.getInstantiatesCanonical().add(parseCanonical(null));
5422        if (array.get(i) instanceof JsonObject) 
5423          parseElementProperties(array.get(i).getAsJsonObject(), res.getInstantiatesCanonical().get(i));
5424      }
5425    };
5426    if (json.has("instantiatesUri")) {
5427      JsonArray array = getJArray(json, "instantiatesUri");
5428      for (int i = 0; i < array.size(); i++) {
5429        if (array.get(i).isJsonNull()) {
5430          res.getInstantiatesUri().add(new UriType());
5431        } else {;
5432          res.getInstantiatesUri().add(parseUri(array.get(i).getAsString()));
5433        }
5434      }
5435    };
5436    if (json.has("_instantiatesUri")) {
5437      JsonArray array = getJArray(json, "_instantiatesUri");
5438      for (int i = 0; i < array.size(); i++) {
5439        if (i == res.getInstantiatesUri().size())
5440          res.getInstantiatesUri().add(parseUri(null));
5441        if (array.get(i) instanceof JsonObject) 
5442          parseElementProperties(array.get(i).getAsJsonObject(), res.getInstantiatesUri().get(i));
5443      }
5444    };
5445    if (json.has("basedOn")) {
5446      JsonArray array = getJArray(json, "basedOn");
5447      for (int i = 0; i < array.size(); i++) {
5448        res.getBasedOn().add(parseReference(array.get(i).getAsJsonObject()));
5449      }
5450    };
5451    if (json.has("replaces")) {
5452      JsonArray array = getJArray(json, "replaces");
5453      for (int i = 0; i < array.size(); i++) {
5454        res.getReplaces().add(parseReference(array.get(i).getAsJsonObject()));
5455      }
5456    };
5457    if (json.has("partOf")) {
5458      JsonArray array = getJArray(json, "partOf");
5459      for (int i = 0; i < array.size(); i++) {
5460        res.getPartOf().add(parseReference(array.get(i).getAsJsonObject()));
5461      }
5462    };
5463    if (json.has("status"))
5464      res.setStatusElement(parseEnumeration(json.get("status").getAsString(), Enumerations.RequestStatus.NULL, new Enumerations.RequestStatusEnumFactory()));
5465    if (json.has("_status"))
5466      parseElementProperties(getJObject(json, "_status"), res.getStatusElement());
5467    if (json.has("intent"))
5468      res.setIntentElement(parseEnumeration(json.get("intent").getAsString(), CarePlan.CarePlanIntent.NULL, new CarePlan.CarePlanIntentEnumFactory()));
5469    if (json.has("_intent"))
5470      parseElementProperties(getJObject(json, "_intent"), res.getIntentElement());
5471    if (json.has("category")) {
5472      JsonArray array = getJArray(json, "category");
5473      for (int i = 0; i < array.size(); i++) {
5474        res.getCategory().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
5475      }
5476    };
5477    if (json.has("title"))
5478      res.setTitleElement(parseString(json.get("title").getAsString()));
5479    if (json.has("_title"))
5480      parseElementProperties(getJObject(json, "_title"), res.getTitleElement());
5481    if (json.has("description"))
5482      res.setDescriptionElement(parseString(json.get("description").getAsString()));
5483    if (json.has("_description"))
5484      parseElementProperties(getJObject(json, "_description"), res.getDescriptionElement());
5485    if (json.has("subject"))
5486      res.setSubject(parseReference(getJObject(json, "subject")));
5487    if (json.has("encounter"))
5488      res.setEncounter(parseReference(getJObject(json, "encounter")));
5489    if (json.has("period"))
5490      res.setPeriod(parsePeriod(getJObject(json, "period")));
5491    if (json.has("created"))
5492      res.setCreatedElement(parseDateTime(json.get("created").getAsString()));
5493    if (json.has("_created"))
5494      parseElementProperties(getJObject(json, "_created"), res.getCreatedElement());
5495    if (json.has("custodian"))
5496      res.setCustodian(parseReference(getJObject(json, "custodian")));
5497    if (json.has("contributor")) {
5498      JsonArray array = getJArray(json, "contributor");
5499      for (int i = 0; i < array.size(); i++) {
5500        res.getContributor().add(parseReference(array.get(i).getAsJsonObject()));
5501      }
5502    };
5503    if (json.has("careTeam")) {
5504      JsonArray array = getJArray(json, "careTeam");
5505      for (int i = 0; i < array.size(); i++) {
5506        res.getCareTeam().add(parseReference(array.get(i).getAsJsonObject()));
5507      }
5508    };
5509    if (json.has("addresses")) {
5510      JsonArray array = getJArray(json, "addresses");
5511      for (int i = 0; i < array.size(); i++) {
5512        res.getAddresses().add(parseCodeableReference(array.get(i).getAsJsonObject()));
5513      }
5514    };
5515    if (json.has("supportingInfo")) {
5516      JsonArray array = getJArray(json, "supportingInfo");
5517      for (int i = 0; i < array.size(); i++) {
5518        res.getSupportingInfo().add(parseReference(array.get(i).getAsJsonObject()));
5519      }
5520    };
5521    if (json.has("goal")) {
5522      JsonArray array = getJArray(json, "goal");
5523      for (int i = 0; i < array.size(); i++) {
5524        res.getGoal().add(parseReference(array.get(i).getAsJsonObject()));
5525      }
5526    };
5527    if (json.has("activity")) {
5528      JsonArray array = getJArray(json, "activity");
5529      for (int i = 0; i < array.size(); i++) {
5530        res.getActivity().add(parseCarePlanActivityComponent(array.get(i).getAsJsonObject()));
5531      }
5532    };
5533    if (json.has("note")) {
5534      JsonArray array = getJArray(json, "note");
5535      for (int i = 0; i < array.size(); i++) {
5536        res.getNote().add(parseAnnotation(array.get(i).getAsJsonObject()));
5537      }
5538    };
5539  }
5540
5541  protected CarePlan.CarePlanActivityComponent parseCarePlanActivityComponent(JsonObject json) throws IOException, FHIRFormatError {
5542    CarePlan.CarePlanActivityComponent res = new CarePlan.CarePlanActivityComponent();
5543    parseCarePlanActivityComponentProperties(json, res);
5544    return res;
5545  }
5546
5547  protected void parseCarePlanActivityComponentProperties(JsonObject json, CarePlan.CarePlanActivityComponent res) throws IOException, FHIRFormatError {
5548    parseBackboneElementProperties(json, res);
5549    if (json.has("performedActivity")) {
5550      JsonArray array = getJArray(json, "performedActivity");
5551      for (int i = 0; i < array.size(); i++) {
5552        res.getPerformedActivity().add(parseCodeableReference(array.get(i).getAsJsonObject()));
5553      }
5554    };
5555    if (json.has("progress")) {
5556      JsonArray array = getJArray(json, "progress");
5557      for (int i = 0; i < array.size(); i++) {
5558        res.getProgress().add(parseAnnotation(array.get(i).getAsJsonObject()));
5559      }
5560    };
5561    if (json.has("plannedActivityReference"))
5562      res.setPlannedActivityReference(parseReference(getJObject(json, "plannedActivityReference")));
5563  }
5564
5565  protected CareTeam parseCareTeam(JsonObject json) throws IOException, FHIRFormatError {
5566    CareTeam res = new CareTeam();
5567    parseCareTeamProperties(json, res);
5568    return res;
5569  }
5570
5571  protected void parseCareTeamProperties(JsonObject json, CareTeam res) throws IOException, FHIRFormatError {
5572    parseDomainResourceProperties(json, res);
5573    if (json.has("identifier")) {
5574      JsonArray array = getJArray(json, "identifier");
5575      for (int i = 0; i < array.size(); i++) {
5576        res.getIdentifier().add(parseIdentifier(array.get(i).getAsJsonObject()));
5577      }
5578    };
5579    if (json.has("status"))
5580      res.setStatusElement(parseEnumeration(json.get("status").getAsString(), CareTeam.CareTeamStatus.NULL, new CareTeam.CareTeamStatusEnumFactory()));
5581    if (json.has("_status"))
5582      parseElementProperties(getJObject(json, "_status"), res.getStatusElement());
5583    if (json.has("category")) {
5584      JsonArray array = getJArray(json, "category");
5585      for (int i = 0; i < array.size(); i++) {
5586        res.getCategory().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
5587      }
5588    };
5589    if (json.has("name"))
5590      res.setNameElement(parseString(json.get("name").getAsString()));
5591    if (json.has("_name"))
5592      parseElementProperties(getJObject(json, "_name"), res.getNameElement());
5593    if (json.has("subject"))
5594      res.setSubject(parseReference(getJObject(json, "subject")));
5595    if (json.has("period"))
5596      res.setPeriod(parsePeriod(getJObject(json, "period")));
5597    if (json.has("participant")) {
5598      JsonArray array = getJArray(json, "participant");
5599      for (int i = 0; i < array.size(); i++) {
5600        res.getParticipant().add(parseCareTeamParticipantComponent(array.get(i).getAsJsonObject()));
5601      }
5602    };
5603    if (json.has("reason")) {
5604      JsonArray array = getJArray(json, "reason");
5605      for (int i = 0; i < array.size(); i++) {
5606        res.getReason().add(parseCodeableReference(array.get(i).getAsJsonObject()));
5607      }
5608    };
5609    if (json.has("managingOrganization")) {
5610      JsonArray array = getJArray(json, "managingOrganization");
5611      for (int i = 0; i < array.size(); i++) {
5612        res.getManagingOrganization().add(parseReference(array.get(i).getAsJsonObject()));
5613      }
5614    };
5615    if (json.has("telecom")) {
5616      JsonArray array = getJArray(json, "telecom");
5617      for (int i = 0; i < array.size(); i++) {
5618        res.getTelecom().add(parseContactPoint(array.get(i).getAsJsonObject()));
5619      }
5620    };
5621    if (json.has("note")) {
5622      JsonArray array = getJArray(json, "note");
5623      for (int i = 0; i < array.size(); i++) {
5624        res.getNote().add(parseAnnotation(array.get(i).getAsJsonObject()));
5625      }
5626    };
5627  }
5628
5629  protected CareTeam.CareTeamParticipantComponent parseCareTeamParticipantComponent(JsonObject json) throws IOException, FHIRFormatError {
5630    CareTeam.CareTeamParticipantComponent res = new CareTeam.CareTeamParticipantComponent();
5631    parseCareTeamParticipantComponentProperties(json, res);
5632    return res;
5633  }
5634
5635  protected void parseCareTeamParticipantComponentProperties(JsonObject json, CareTeam.CareTeamParticipantComponent res) throws IOException, FHIRFormatError {
5636    parseBackboneElementProperties(json, res);
5637    if (json.has("role"))
5638      res.setRole(parseCodeableConcept(getJObject(json, "role")));
5639    if (json.has("member"))
5640      res.setMember(parseReference(getJObject(json, "member")));
5641    if (json.has("onBehalfOf"))
5642      res.setOnBehalfOf(parseReference(getJObject(json, "onBehalfOf")));
5643    DataType coverage = parseType("coverage", json);
5644    if (coverage != null)
5645      res.setCoverage(coverage);
5646  }
5647
5648  protected ChargeItem parseChargeItem(JsonObject json) throws IOException, FHIRFormatError {
5649    ChargeItem res = new ChargeItem();
5650    parseChargeItemProperties(json, res);
5651    return res;
5652  }
5653
5654  protected void parseChargeItemProperties(JsonObject json, ChargeItem res) throws IOException, FHIRFormatError {
5655    parseDomainResourceProperties(json, res);
5656    if (json.has("identifier")) {
5657      JsonArray array = getJArray(json, "identifier");
5658      for (int i = 0; i < array.size(); i++) {
5659        res.getIdentifier().add(parseIdentifier(array.get(i).getAsJsonObject()));
5660      }
5661    };
5662    if (json.has("definitionUri")) {
5663      JsonArray array = getJArray(json, "definitionUri");
5664      for (int i = 0; i < array.size(); i++) {
5665        if (array.get(i).isJsonNull()) {
5666          res.getDefinitionUri().add(new UriType());
5667        } else {;
5668          res.getDefinitionUri().add(parseUri(array.get(i).getAsString()));
5669        }
5670      }
5671    };
5672    if (json.has("_definitionUri")) {
5673      JsonArray array = getJArray(json, "_definitionUri");
5674      for (int i = 0; i < array.size(); i++) {
5675        if (i == res.getDefinitionUri().size())
5676          res.getDefinitionUri().add(parseUri(null));
5677        if (array.get(i) instanceof JsonObject) 
5678          parseElementProperties(array.get(i).getAsJsonObject(), res.getDefinitionUri().get(i));
5679      }
5680    };
5681    if (json.has("definitionCanonical")) {
5682      JsonArray array = getJArray(json, "definitionCanonical");
5683      for (int i = 0; i < array.size(); i++) {
5684        if (array.get(i).isJsonNull()) {
5685          res.getDefinitionCanonical().add(new CanonicalType());
5686        } else {;
5687          res.getDefinitionCanonical().add(parseCanonical(array.get(i).getAsString()));
5688        }
5689      }
5690    };
5691    if (json.has("_definitionCanonical")) {
5692      JsonArray array = getJArray(json, "_definitionCanonical");
5693      for (int i = 0; i < array.size(); i++) {
5694        if (i == res.getDefinitionCanonical().size())
5695          res.getDefinitionCanonical().add(parseCanonical(null));
5696        if (array.get(i) instanceof JsonObject) 
5697          parseElementProperties(array.get(i).getAsJsonObject(), res.getDefinitionCanonical().get(i));
5698      }
5699    };
5700    if (json.has("status"))
5701      res.setStatusElement(parseEnumeration(json.get("status").getAsString(), ChargeItem.ChargeItemStatus.NULL, new ChargeItem.ChargeItemStatusEnumFactory()));
5702    if (json.has("_status"))
5703      parseElementProperties(getJObject(json, "_status"), res.getStatusElement());
5704    if (json.has("partOf")) {
5705      JsonArray array = getJArray(json, "partOf");
5706      for (int i = 0; i < array.size(); i++) {
5707        res.getPartOf().add(parseReference(array.get(i).getAsJsonObject()));
5708      }
5709    };
5710    if (json.has("code"))
5711      res.setCode(parseCodeableConcept(getJObject(json, "code")));
5712    if (json.has("subject"))
5713      res.setSubject(parseReference(getJObject(json, "subject")));
5714    if (json.has("encounter"))
5715      res.setEncounter(parseReference(getJObject(json, "encounter")));
5716    DataType occurrence = parseType("occurrence", json);
5717    if (occurrence != null)
5718      res.setOccurrence(occurrence);
5719    if (json.has("performer")) {
5720      JsonArray array = getJArray(json, "performer");
5721      for (int i = 0; i < array.size(); i++) {
5722        res.getPerformer().add(parseChargeItemPerformerComponent(array.get(i).getAsJsonObject()));
5723      }
5724    };
5725    if (json.has("performingOrganization"))
5726      res.setPerformingOrganization(parseReference(getJObject(json, "performingOrganization")));
5727    if (json.has("requestingOrganization"))
5728      res.setRequestingOrganization(parseReference(getJObject(json, "requestingOrganization")));
5729    if (json.has("costCenter"))
5730      res.setCostCenter(parseReference(getJObject(json, "costCenter")));
5731    if (json.has("quantity"))
5732      res.setQuantity(parseQuantity(getJObject(json, "quantity")));
5733    if (json.has("bodysite")) {
5734      JsonArray array = getJArray(json, "bodysite");
5735      for (int i = 0; i < array.size(); i++) {
5736        res.getBodysite().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
5737      }
5738    };
5739    if (json.has("unitPriceComponent"))
5740      res.setUnitPriceComponent(parseMonetaryComponent(getJObject(json, "unitPriceComponent")));
5741    if (json.has("totalPriceComponent"))
5742      res.setTotalPriceComponent(parseMonetaryComponent(getJObject(json, "totalPriceComponent")));
5743    if (json.has("overrideReason"))
5744      res.setOverrideReason(parseCodeableConcept(getJObject(json, "overrideReason")));
5745    if (json.has("enterer"))
5746      res.setEnterer(parseReference(getJObject(json, "enterer")));
5747    if (json.has("enteredDate"))
5748      res.setEnteredDateElement(parseDateTime(json.get("enteredDate").getAsString()));
5749    if (json.has("_enteredDate"))
5750      parseElementProperties(getJObject(json, "_enteredDate"), res.getEnteredDateElement());
5751    if (json.has("reason")) {
5752      JsonArray array = getJArray(json, "reason");
5753      for (int i = 0; i < array.size(); i++) {
5754        res.getReason().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
5755      }
5756    };
5757    if (json.has("service")) {
5758      JsonArray array = getJArray(json, "service");
5759      for (int i = 0; i < array.size(); i++) {
5760        res.getService().add(parseCodeableReference(array.get(i).getAsJsonObject()));
5761      }
5762    };
5763    if (json.has("product")) {
5764      JsonArray array = getJArray(json, "product");
5765      for (int i = 0; i < array.size(); i++) {
5766        res.getProduct().add(parseCodeableReference(array.get(i).getAsJsonObject()));
5767      }
5768    };
5769    if (json.has("account")) {
5770      JsonArray array = getJArray(json, "account");
5771      for (int i = 0; i < array.size(); i++) {
5772        res.getAccount().add(parseReference(array.get(i).getAsJsonObject()));
5773      }
5774    };
5775    if (json.has("note")) {
5776      JsonArray array = getJArray(json, "note");
5777      for (int i = 0; i < array.size(); i++) {
5778        res.getNote().add(parseAnnotation(array.get(i).getAsJsonObject()));
5779      }
5780    };
5781    if (json.has("supportingInformation")) {
5782      JsonArray array = getJArray(json, "supportingInformation");
5783      for (int i = 0; i < array.size(); i++) {
5784        res.getSupportingInformation().add(parseReference(array.get(i).getAsJsonObject()));
5785      }
5786    };
5787  }
5788
5789  protected ChargeItem.ChargeItemPerformerComponent parseChargeItemPerformerComponent(JsonObject json) throws IOException, FHIRFormatError {
5790    ChargeItem.ChargeItemPerformerComponent res = new ChargeItem.ChargeItemPerformerComponent();
5791    parseChargeItemPerformerComponentProperties(json, res);
5792    return res;
5793  }
5794
5795  protected void parseChargeItemPerformerComponentProperties(JsonObject json, ChargeItem.ChargeItemPerformerComponent res) throws IOException, FHIRFormatError {
5796    parseBackboneElementProperties(json, res);
5797    if (json.has("function"))
5798      res.setFunction(parseCodeableConcept(getJObject(json, "function")));
5799    if (json.has("actor"))
5800      res.setActor(parseReference(getJObject(json, "actor")));
5801  }
5802
5803  protected ChargeItemDefinition parseChargeItemDefinition(JsonObject json) throws IOException, FHIRFormatError {
5804    ChargeItemDefinition res = new ChargeItemDefinition();
5805    parseChargeItemDefinitionProperties(json, res);
5806    return res;
5807  }
5808
5809  protected void parseChargeItemDefinitionProperties(JsonObject json, ChargeItemDefinition res) throws IOException, FHIRFormatError {
5810    parseMetadataResourceProperties(json, res);
5811    if (json.has("url"))
5812      res.setUrlElement(parseUri(json.get("url").getAsString()));
5813    if (json.has("_url"))
5814      parseElementProperties(getJObject(json, "_url"), res.getUrlElement());
5815    if (json.has("identifier")) {
5816      JsonArray array = getJArray(json, "identifier");
5817      for (int i = 0; i < array.size(); i++) {
5818        res.getIdentifier().add(parseIdentifier(array.get(i).getAsJsonObject()));
5819      }
5820    };
5821    if (json.has("version"))
5822      res.setVersionElement(parseString(json.get("version").getAsString()));
5823    if (json.has("_version"))
5824      parseElementProperties(getJObject(json, "_version"), res.getVersionElement());
5825    DataType versionAlgorithm = parseType("versionAlgorithm", json);
5826    if (versionAlgorithm != null)
5827      res.setVersionAlgorithm(versionAlgorithm);
5828    if (json.has("name"))
5829      res.setNameElement(parseString(json.get("name").getAsString()));
5830    if (json.has("_name"))
5831      parseElementProperties(getJObject(json, "_name"), res.getNameElement());
5832    if (json.has("title"))
5833      res.setTitleElement(parseString(json.get("title").getAsString()));
5834    if (json.has("_title"))
5835      parseElementProperties(getJObject(json, "_title"), res.getTitleElement());
5836    if (json.has("derivedFromUri")) {
5837      JsonArray array = getJArray(json, "derivedFromUri");
5838      for (int i = 0; i < array.size(); i++) {
5839        if (array.get(i).isJsonNull()) {
5840          res.getDerivedFromUri().add(new UriType());
5841        } else {;
5842          res.getDerivedFromUri().add(parseUri(array.get(i).getAsString()));
5843        }
5844      }
5845    };
5846    if (json.has("_derivedFromUri")) {
5847      JsonArray array = getJArray(json, "_derivedFromUri");
5848      for (int i = 0; i < array.size(); i++) {
5849        if (i == res.getDerivedFromUri().size())
5850          res.getDerivedFromUri().add(parseUri(null));
5851        if (array.get(i) instanceof JsonObject) 
5852          parseElementProperties(array.get(i).getAsJsonObject(), res.getDerivedFromUri().get(i));
5853      }
5854    };
5855    if (json.has("partOf")) {
5856      JsonArray array = getJArray(json, "partOf");
5857      for (int i = 0; i < array.size(); i++) {
5858        if (array.get(i).isJsonNull()) {
5859          res.getPartOf().add(new CanonicalType());
5860        } else {;
5861          res.getPartOf().add(parseCanonical(array.get(i).getAsString()));
5862        }
5863      }
5864    };
5865    if (json.has("_partOf")) {
5866      JsonArray array = getJArray(json, "_partOf");
5867      for (int i = 0; i < array.size(); i++) {
5868        if (i == res.getPartOf().size())
5869          res.getPartOf().add(parseCanonical(null));
5870        if (array.get(i) instanceof JsonObject) 
5871          parseElementProperties(array.get(i).getAsJsonObject(), res.getPartOf().get(i));
5872      }
5873    };
5874    if (json.has("replaces")) {
5875      JsonArray array = getJArray(json, "replaces");
5876      for (int i = 0; i < array.size(); i++) {
5877        if (array.get(i).isJsonNull()) {
5878          res.getReplaces().add(new CanonicalType());
5879        } else {;
5880          res.getReplaces().add(parseCanonical(array.get(i).getAsString()));
5881        }
5882      }
5883    };
5884    if (json.has("_replaces")) {
5885      JsonArray array = getJArray(json, "_replaces");
5886      for (int i = 0; i < array.size(); i++) {
5887        if (i == res.getReplaces().size())
5888          res.getReplaces().add(parseCanonical(null));
5889        if (array.get(i) instanceof JsonObject) 
5890          parseElementProperties(array.get(i).getAsJsonObject(), res.getReplaces().get(i));
5891      }
5892    };
5893    if (json.has("status"))
5894      res.setStatusElement(parseEnumeration(json.get("status").getAsString(), Enumerations.PublicationStatus.NULL, new Enumerations.PublicationStatusEnumFactory()));
5895    if (json.has("_status"))
5896      parseElementProperties(getJObject(json, "_status"), res.getStatusElement());
5897    if (json.has("experimental"))
5898      res.setExperimentalElement(parseBoolean(json.get("experimental").getAsBoolean()));
5899    if (json.has("_experimental"))
5900      parseElementProperties(getJObject(json, "_experimental"), res.getExperimentalElement());
5901    if (json.has("date"))
5902      res.setDateElement(parseDateTime(json.get("date").getAsString()));
5903    if (json.has("_date"))
5904      parseElementProperties(getJObject(json, "_date"), res.getDateElement());
5905    if (json.has("publisher"))
5906      res.setPublisherElement(parseString(json.get("publisher").getAsString()));
5907    if (json.has("_publisher"))
5908      parseElementProperties(getJObject(json, "_publisher"), res.getPublisherElement());
5909    if (json.has("contact")) {
5910      JsonArray array = getJArray(json, "contact");
5911      for (int i = 0; i < array.size(); i++) {
5912        res.getContact().add(parseContactDetail(array.get(i).getAsJsonObject()));
5913      }
5914    };
5915    if (json.has("description"))
5916      res.setDescriptionElement(parseMarkdown(json.get("description").getAsString()));
5917    if (json.has("_description"))
5918      parseElementProperties(getJObject(json, "_description"), res.getDescriptionElement());
5919    if (json.has("useContext")) {
5920      JsonArray array = getJArray(json, "useContext");
5921      for (int i = 0; i < array.size(); i++) {
5922        res.getUseContext().add(parseUsageContext(array.get(i).getAsJsonObject()));
5923      }
5924    };
5925    if (json.has("jurisdiction")) {
5926      JsonArray array = getJArray(json, "jurisdiction");
5927      for (int i = 0; i < array.size(); i++) {
5928        res.getJurisdiction().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
5929      }
5930    };
5931    if (json.has("purpose"))
5932      res.setPurposeElement(parseMarkdown(json.get("purpose").getAsString()));
5933    if (json.has("_purpose"))
5934      parseElementProperties(getJObject(json, "_purpose"), res.getPurposeElement());
5935    if (json.has("copyright"))
5936      res.setCopyrightElement(parseMarkdown(json.get("copyright").getAsString()));
5937    if (json.has("_copyright"))
5938      parseElementProperties(getJObject(json, "_copyright"), res.getCopyrightElement());
5939    if (json.has("copyrightLabel"))
5940      res.setCopyrightLabelElement(parseString(json.get("copyrightLabel").getAsString()));
5941    if (json.has("_copyrightLabel"))
5942      parseElementProperties(getJObject(json, "_copyrightLabel"), res.getCopyrightLabelElement());
5943    if (json.has("approvalDate"))
5944      res.setApprovalDateElement(parseDate(json.get("approvalDate").getAsString()));
5945    if (json.has("_approvalDate"))
5946      parseElementProperties(getJObject(json, "_approvalDate"), res.getApprovalDateElement());
5947    if (json.has("lastReviewDate"))
5948      res.setLastReviewDateElement(parseDate(json.get("lastReviewDate").getAsString()));
5949    if (json.has("_lastReviewDate"))
5950      parseElementProperties(getJObject(json, "_lastReviewDate"), res.getLastReviewDateElement());
5951    if (json.has("code"))
5952      res.setCode(parseCodeableConcept(getJObject(json, "code")));
5953    if (json.has("instance")) {
5954      JsonArray array = getJArray(json, "instance");
5955      for (int i = 0; i < array.size(); i++) {
5956        res.getInstance().add(parseReference(array.get(i).getAsJsonObject()));
5957      }
5958    };
5959    if (json.has("applicability")) {
5960      JsonArray array = getJArray(json, "applicability");
5961      for (int i = 0; i < array.size(); i++) {
5962        res.getApplicability().add(parseChargeItemDefinitionApplicabilityComponent(array.get(i).getAsJsonObject()));
5963      }
5964    };
5965    if (json.has("propertyGroup")) {
5966      JsonArray array = getJArray(json, "propertyGroup");
5967      for (int i = 0; i < array.size(); i++) {
5968        res.getPropertyGroup().add(parseChargeItemDefinitionPropertyGroupComponent(array.get(i).getAsJsonObject()));
5969      }
5970    };
5971  }
5972
5973  protected ChargeItemDefinition.ChargeItemDefinitionApplicabilityComponent parseChargeItemDefinitionApplicabilityComponent(JsonObject json) throws IOException, FHIRFormatError {
5974    ChargeItemDefinition.ChargeItemDefinitionApplicabilityComponent res = new ChargeItemDefinition.ChargeItemDefinitionApplicabilityComponent();
5975    parseChargeItemDefinitionApplicabilityComponentProperties(json, res);
5976    return res;
5977  }
5978
5979  protected void parseChargeItemDefinitionApplicabilityComponentProperties(JsonObject json, ChargeItemDefinition.ChargeItemDefinitionApplicabilityComponent res) throws IOException, FHIRFormatError {
5980    parseBackboneElementProperties(json, res);
5981    if (json.has("condition"))
5982      res.setCondition(parseExpression(getJObject(json, "condition")));
5983    if (json.has("effectivePeriod"))
5984      res.setEffectivePeriod(parsePeriod(getJObject(json, "effectivePeriod")));
5985    if (json.has("relatedArtifact"))
5986      res.setRelatedArtifact(parseRelatedArtifact(getJObject(json, "relatedArtifact")));
5987  }
5988
5989  protected ChargeItemDefinition.ChargeItemDefinitionPropertyGroupComponent parseChargeItemDefinitionPropertyGroupComponent(JsonObject json) throws IOException, FHIRFormatError {
5990    ChargeItemDefinition.ChargeItemDefinitionPropertyGroupComponent res = new ChargeItemDefinition.ChargeItemDefinitionPropertyGroupComponent();
5991    parseChargeItemDefinitionPropertyGroupComponentProperties(json, res);
5992    return res;
5993  }
5994
5995  protected void parseChargeItemDefinitionPropertyGroupComponentProperties(JsonObject json, ChargeItemDefinition.ChargeItemDefinitionPropertyGroupComponent res) throws IOException, FHIRFormatError {
5996    parseBackboneElementProperties(json, res);
5997    if (json.has("applicability")) {
5998      JsonArray array = getJArray(json, "applicability");
5999      for (int i = 0; i < array.size(); i++) {
6000        res.getApplicability().add(parseChargeItemDefinitionApplicabilityComponent(array.get(i).getAsJsonObject()));
6001      }
6002    };
6003    if (json.has("priceComponent")) {
6004      JsonArray array = getJArray(json, "priceComponent");
6005      for (int i = 0; i < array.size(); i++) {
6006        res.getPriceComponent().add(parseMonetaryComponent(array.get(i).getAsJsonObject()));
6007      }
6008    };
6009  }
6010
6011  protected Citation parseCitation(JsonObject json) throws IOException, FHIRFormatError {
6012    Citation res = new Citation();
6013    parseCitationProperties(json, res);
6014    return res;
6015  }
6016
6017  protected void parseCitationProperties(JsonObject json, Citation res) throws IOException, FHIRFormatError {
6018    parseMetadataResourceProperties(json, res);
6019    if (json.has("url"))
6020      res.setUrlElement(parseUri(json.get("url").getAsString()));
6021    if (json.has("_url"))
6022      parseElementProperties(getJObject(json, "_url"), res.getUrlElement());
6023    if (json.has("identifier")) {
6024      JsonArray array = getJArray(json, "identifier");
6025      for (int i = 0; i < array.size(); i++) {
6026        res.getIdentifier().add(parseIdentifier(array.get(i).getAsJsonObject()));
6027      }
6028    };
6029    if (json.has("version"))
6030      res.setVersionElement(parseString(json.get("version").getAsString()));
6031    if (json.has("_version"))
6032      parseElementProperties(getJObject(json, "_version"), res.getVersionElement());
6033    DataType versionAlgorithm = parseType("versionAlgorithm", json);
6034    if (versionAlgorithm != null)
6035      res.setVersionAlgorithm(versionAlgorithm);
6036    if (json.has("name"))
6037      res.setNameElement(parseString(json.get("name").getAsString()));
6038    if (json.has("_name"))
6039      parseElementProperties(getJObject(json, "_name"), res.getNameElement());
6040    if (json.has("title"))
6041      res.setTitleElement(parseString(json.get("title").getAsString()));
6042    if (json.has("_title"))
6043      parseElementProperties(getJObject(json, "_title"), res.getTitleElement());
6044    if (json.has("status"))
6045      res.setStatusElement(parseEnumeration(json.get("status").getAsString(), Enumerations.PublicationStatus.NULL, new Enumerations.PublicationStatusEnumFactory()));
6046    if (json.has("_status"))
6047      parseElementProperties(getJObject(json, "_status"), res.getStatusElement());
6048    if (json.has("experimental"))
6049      res.setExperimentalElement(parseBoolean(json.get("experimental").getAsBoolean()));
6050    if (json.has("_experimental"))
6051      parseElementProperties(getJObject(json, "_experimental"), res.getExperimentalElement());
6052    if (json.has("date"))
6053      res.setDateElement(parseDateTime(json.get("date").getAsString()));
6054    if (json.has("_date"))
6055      parseElementProperties(getJObject(json, "_date"), res.getDateElement());
6056    if (json.has("publisher"))
6057      res.setPublisherElement(parseString(json.get("publisher").getAsString()));
6058    if (json.has("_publisher"))
6059      parseElementProperties(getJObject(json, "_publisher"), res.getPublisherElement());
6060    if (json.has("contact")) {
6061      JsonArray array = getJArray(json, "contact");
6062      for (int i = 0; i < array.size(); i++) {
6063        res.getContact().add(parseContactDetail(array.get(i).getAsJsonObject()));
6064      }
6065    };
6066    if (json.has("description"))
6067      res.setDescriptionElement(parseMarkdown(json.get("description").getAsString()));
6068    if (json.has("_description"))
6069      parseElementProperties(getJObject(json, "_description"), res.getDescriptionElement());
6070    if (json.has("useContext")) {
6071      JsonArray array = getJArray(json, "useContext");
6072      for (int i = 0; i < array.size(); i++) {
6073        res.getUseContext().add(parseUsageContext(array.get(i).getAsJsonObject()));
6074      }
6075    };
6076    if (json.has("jurisdiction")) {
6077      JsonArray array = getJArray(json, "jurisdiction");
6078      for (int i = 0; i < array.size(); i++) {
6079        res.getJurisdiction().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
6080      }
6081    };
6082    if (json.has("purpose"))
6083      res.setPurposeElement(parseMarkdown(json.get("purpose").getAsString()));
6084    if (json.has("_purpose"))
6085      parseElementProperties(getJObject(json, "_purpose"), res.getPurposeElement());
6086    if (json.has("copyright"))
6087      res.setCopyrightElement(parseMarkdown(json.get("copyright").getAsString()));
6088    if (json.has("_copyright"))
6089      parseElementProperties(getJObject(json, "_copyright"), res.getCopyrightElement());
6090    if (json.has("copyrightLabel"))
6091      res.setCopyrightLabelElement(parseString(json.get("copyrightLabel").getAsString()));
6092    if (json.has("_copyrightLabel"))
6093      parseElementProperties(getJObject(json, "_copyrightLabel"), res.getCopyrightLabelElement());
6094    if (json.has("approvalDate"))
6095      res.setApprovalDateElement(parseDate(json.get("approvalDate").getAsString()));
6096    if (json.has("_approvalDate"))
6097      parseElementProperties(getJObject(json, "_approvalDate"), res.getApprovalDateElement());
6098    if (json.has("lastReviewDate"))
6099      res.setLastReviewDateElement(parseDate(json.get("lastReviewDate").getAsString()));
6100    if (json.has("_lastReviewDate"))
6101      parseElementProperties(getJObject(json, "_lastReviewDate"), res.getLastReviewDateElement());
6102    if (json.has("effectivePeriod"))
6103      res.setEffectivePeriod(parsePeriod(getJObject(json, "effectivePeriod")));
6104    if (json.has("author")) {
6105      JsonArray array = getJArray(json, "author");
6106      for (int i = 0; i < array.size(); i++) {
6107        res.getAuthor().add(parseContactDetail(array.get(i).getAsJsonObject()));
6108      }
6109    };
6110    if (json.has("editor")) {
6111      JsonArray array = getJArray(json, "editor");
6112      for (int i = 0; i < array.size(); i++) {
6113        res.getEditor().add(parseContactDetail(array.get(i).getAsJsonObject()));
6114      }
6115    };
6116    if (json.has("reviewer")) {
6117      JsonArray array = getJArray(json, "reviewer");
6118      for (int i = 0; i < array.size(); i++) {
6119        res.getReviewer().add(parseContactDetail(array.get(i).getAsJsonObject()));
6120      }
6121    };
6122    if (json.has("endorser")) {
6123      JsonArray array = getJArray(json, "endorser");
6124      for (int i = 0; i < array.size(); i++) {
6125        res.getEndorser().add(parseContactDetail(array.get(i).getAsJsonObject()));
6126      }
6127    };
6128    if (json.has("summary")) {
6129      JsonArray array = getJArray(json, "summary");
6130      for (int i = 0; i < array.size(); i++) {
6131        res.getSummary().add(parseCitationSummaryComponent(array.get(i).getAsJsonObject()));
6132      }
6133    };
6134    if (json.has("classification")) {
6135      JsonArray array = getJArray(json, "classification");
6136      for (int i = 0; i < array.size(); i++) {
6137        res.getClassification().add(parseCitationClassificationComponent(array.get(i).getAsJsonObject()));
6138      }
6139    };
6140    if (json.has("note")) {
6141      JsonArray array = getJArray(json, "note");
6142      for (int i = 0; i < array.size(); i++) {
6143        res.getNote().add(parseAnnotation(array.get(i).getAsJsonObject()));
6144      }
6145    };
6146    if (json.has("currentState")) {
6147      JsonArray array = getJArray(json, "currentState");
6148      for (int i = 0; i < array.size(); i++) {
6149        res.getCurrentState().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
6150      }
6151    };
6152    if (json.has("statusDate")) {
6153      JsonArray array = getJArray(json, "statusDate");
6154      for (int i = 0; i < array.size(); i++) {
6155        res.getStatusDate().add(parseCitationStatusDateComponent(array.get(i).getAsJsonObject()));
6156      }
6157    };
6158    if (json.has("relatedArtifact")) {
6159      JsonArray array = getJArray(json, "relatedArtifact");
6160      for (int i = 0; i < array.size(); i++) {
6161        res.getRelatedArtifact().add(parseRelatedArtifact(array.get(i).getAsJsonObject()));
6162      }
6163    };
6164    if (json.has("citedArtifact"))
6165      res.setCitedArtifact(parseCitationCitedArtifactComponent(getJObject(json, "citedArtifact")));
6166  }
6167
6168  protected Citation.CitationSummaryComponent parseCitationSummaryComponent(JsonObject json) throws IOException, FHIRFormatError {
6169    Citation.CitationSummaryComponent res = new Citation.CitationSummaryComponent();
6170    parseCitationSummaryComponentProperties(json, res);
6171    return res;
6172  }
6173
6174  protected void parseCitationSummaryComponentProperties(JsonObject json, Citation.CitationSummaryComponent res) throws IOException, FHIRFormatError {
6175    parseBackboneElementProperties(json, res);
6176    if (json.has("style"))
6177      res.setStyle(parseCodeableConcept(getJObject(json, "style")));
6178    if (json.has("text"))
6179      res.setTextElement(parseMarkdown(json.get("text").getAsString()));
6180    if (json.has("_text"))
6181      parseElementProperties(getJObject(json, "_text"), res.getTextElement());
6182  }
6183
6184  protected Citation.CitationClassificationComponent parseCitationClassificationComponent(JsonObject json) throws IOException, FHIRFormatError {
6185    Citation.CitationClassificationComponent res = new Citation.CitationClassificationComponent();
6186    parseCitationClassificationComponentProperties(json, res);
6187    return res;
6188  }
6189
6190  protected void parseCitationClassificationComponentProperties(JsonObject json, Citation.CitationClassificationComponent res) throws IOException, FHIRFormatError {
6191    parseBackboneElementProperties(json, res);
6192    if (json.has("type"))
6193      res.setType(parseCodeableConcept(getJObject(json, "type")));
6194    if (json.has("classifier")) {
6195      JsonArray array = getJArray(json, "classifier");
6196      for (int i = 0; i < array.size(); i++) {
6197        res.getClassifier().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
6198      }
6199    };
6200  }
6201
6202  protected Citation.CitationStatusDateComponent parseCitationStatusDateComponent(JsonObject json) throws IOException, FHIRFormatError {
6203    Citation.CitationStatusDateComponent res = new Citation.CitationStatusDateComponent();
6204    parseCitationStatusDateComponentProperties(json, res);
6205    return res;
6206  }
6207
6208  protected void parseCitationStatusDateComponentProperties(JsonObject json, Citation.CitationStatusDateComponent res) throws IOException, FHIRFormatError {
6209    parseBackboneElementProperties(json, res);
6210    if (json.has("activity"))
6211      res.setActivity(parseCodeableConcept(getJObject(json, "activity")));
6212    if (json.has("actual"))
6213      res.setActualElement(parseBoolean(json.get("actual").getAsBoolean()));
6214    if (json.has("_actual"))
6215      parseElementProperties(getJObject(json, "_actual"), res.getActualElement());
6216    if (json.has("period"))
6217      res.setPeriod(parsePeriod(getJObject(json, "period")));
6218  }
6219
6220  protected Citation.CitationCitedArtifactComponent parseCitationCitedArtifactComponent(JsonObject json) throws IOException, FHIRFormatError {
6221    Citation.CitationCitedArtifactComponent res = new Citation.CitationCitedArtifactComponent();
6222    parseCitationCitedArtifactComponentProperties(json, res);
6223    return res;
6224  }
6225
6226  protected void parseCitationCitedArtifactComponentProperties(JsonObject json, Citation.CitationCitedArtifactComponent res) throws IOException, FHIRFormatError {
6227    parseBackboneElementProperties(json, res);
6228    if (json.has("identifier")) {
6229      JsonArray array = getJArray(json, "identifier");
6230      for (int i = 0; i < array.size(); i++) {
6231        res.getIdentifier().add(parseIdentifier(array.get(i).getAsJsonObject()));
6232      }
6233    };
6234    if (json.has("relatedIdentifier")) {
6235      JsonArray array = getJArray(json, "relatedIdentifier");
6236      for (int i = 0; i < array.size(); i++) {
6237        res.getRelatedIdentifier().add(parseIdentifier(array.get(i).getAsJsonObject()));
6238      }
6239    };
6240    if (json.has("dateAccessed"))
6241      res.setDateAccessedElement(parseDateTime(json.get("dateAccessed").getAsString()));
6242    if (json.has("_dateAccessed"))
6243      parseElementProperties(getJObject(json, "_dateAccessed"), res.getDateAccessedElement());
6244    if (json.has("version"))
6245      res.setVersion(parseCitationCitedArtifactVersionComponent(getJObject(json, "version")));
6246    if (json.has("currentState")) {
6247      JsonArray array = getJArray(json, "currentState");
6248      for (int i = 0; i < array.size(); i++) {
6249        res.getCurrentState().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
6250      }
6251    };
6252    if (json.has("statusDate")) {
6253      JsonArray array = getJArray(json, "statusDate");
6254      for (int i = 0; i < array.size(); i++) {
6255        res.getStatusDate().add(parseCitationCitedArtifactStatusDateComponent(array.get(i).getAsJsonObject()));
6256      }
6257    };
6258    if (json.has("title")) {
6259      JsonArray array = getJArray(json, "title");
6260      for (int i = 0; i < array.size(); i++) {
6261        res.getTitle().add(parseCitationCitedArtifactTitleComponent(array.get(i).getAsJsonObject()));
6262      }
6263    };
6264    if (json.has("abstract")) {
6265      JsonArray array = getJArray(json, "abstract");
6266      for (int i = 0; i < array.size(); i++) {
6267        res.getAbstract().add(parseCitationCitedArtifactAbstractComponent(array.get(i).getAsJsonObject()));
6268      }
6269    };
6270    if (json.has("part"))
6271      res.setPart(parseCitationCitedArtifactPartComponent(getJObject(json, "part")));
6272    if (json.has("relatesTo")) {
6273      JsonArray array = getJArray(json, "relatesTo");
6274      for (int i = 0; i < array.size(); i++) {
6275        res.getRelatesTo().add(parseCitationCitedArtifactRelatesToComponent(array.get(i).getAsJsonObject()));
6276      }
6277    };
6278    if (json.has("publicationForm")) {
6279      JsonArray array = getJArray(json, "publicationForm");
6280      for (int i = 0; i < array.size(); i++) {
6281        res.getPublicationForm().add(parseCitationCitedArtifactPublicationFormComponent(array.get(i).getAsJsonObject()));
6282      }
6283    };
6284    if (json.has("webLocation")) {
6285      JsonArray array = getJArray(json, "webLocation");
6286      for (int i = 0; i < array.size(); i++) {
6287        res.getWebLocation().add(parseCitationCitedArtifactWebLocationComponent(array.get(i).getAsJsonObject()));
6288      }
6289    };
6290    if (json.has("classification")) {
6291      JsonArray array = getJArray(json, "classification");
6292      for (int i = 0; i < array.size(); i++) {
6293        res.getClassification().add(parseCitationCitedArtifactClassificationComponent(array.get(i).getAsJsonObject()));
6294      }
6295    };
6296    if (json.has("contributorship"))
6297      res.setContributorship(parseCitationCitedArtifactContributorshipComponent(getJObject(json, "contributorship")));
6298    if (json.has("note")) {
6299      JsonArray array = getJArray(json, "note");
6300      for (int i = 0; i < array.size(); i++) {
6301        res.getNote().add(parseAnnotation(array.get(i).getAsJsonObject()));
6302      }
6303    };
6304  }
6305
6306  protected Citation.CitationCitedArtifactVersionComponent parseCitationCitedArtifactVersionComponent(JsonObject json) throws IOException, FHIRFormatError {
6307    Citation.CitationCitedArtifactVersionComponent res = new Citation.CitationCitedArtifactVersionComponent();
6308    parseCitationCitedArtifactVersionComponentProperties(json, res);
6309    return res;
6310  }
6311
6312  protected void parseCitationCitedArtifactVersionComponentProperties(JsonObject json, Citation.CitationCitedArtifactVersionComponent res) throws IOException, FHIRFormatError {
6313    parseBackboneElementProperties(json, res);
6314    if (json.has("value"))
6315      res.setValueElement(parseString(json.get("value").getAsString()));
6316    if (json.has("_value"))
6317      parseElementProperties(getJObject(json, "_value"), res.getValueElement());
6318    if (json.has("baseCitation"))
6319      res.setBaseCitation(parseReference(getJObject(json, "baseCitation")));
6320  }
6321
6322  protected Citation.CitationCitedArtifactStatusDateComponent parseCitationCitedArtifactStatusDateComponent(JsonObject json) throws IOException, FHIRFormatError {
6323    Citation.CitationCitedArtifactStatusDateComponent res = new Citation.CitationCitedArtifactStatusDateComponent();
6324    parseCitationCitedArtifactStatusDateComponentProperties(json, res);
6325    return res;
6326  }
6327
6328  protected void parseCitationCitedArtifactStatusDateComponentProperties(JsonObject json, Citation.CitationCitedArtifactStatusDateComponent res) throws IOException, FHIRFormatError {
6329    parseBackboneElementProperties(json, res);
6330    if (json.has("activity"))
6331      res.setActivity(parseCodeableConcept(getJObject(json, "activity")));
6332    if (json.has("actual"))
6333      res.setActualElement(parseBoolean(json.get("actual").getAsBoolean()));
6334    if (json.has("_actual"))
6335      parseElementProperties(getJObject(json, "_actual"), res.getActualElement());
6336    if (json.has("period"))
6337      res.setPeriod(parsePeriod(getJObject(json, "period")));
6338  }
6339
6340  protected Citation.CitationCitedArtifactTitleComponent parseCitationCitedArtifactTitleComponent(JsonObject json) throws IOException, FHIRFormatError {
6341    Citation.CitationCitedArtifactTitleComponent res = new Citation.CitationCitedArtifactTitleComponent();
6342    parseCitationCitedArtifactTitleComponentProperties(json, res);
6343    return res;
6344  }
6345
6346  protected void parseCitationCitedArtifactTitleComponentProperties(JsonObject json, Citation.CitationCitedArtifactTitleComponent res) throws IOException, FHIRFormatError {
6347    parseBackboneElementProperties(json, res);
6348    if (json.has("type")) {
6349      JsonArray array = getJArray(json, "type");
6350      for (int i = 0; i < array.size(); i++) {
6351        res.getType().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
6352      }
6353    };
6354    if (json.has("language"))
6355      res.setLanguage(parseCodeableConcept(getJObject(json, "language")));
6356    if (json.has("text"))
6357      res.setTextElement(parseMarkdown(json.get("text").getAsString()));
6358    if (json.has("_text"))
6359      parseElementProperties(getJObject(json, "_text"), res.getTextElement());
6360  }
6361
6362  protected Citation.CitationCitedArtifactAbstractComponent parseCitationCitedArtifactAbstractComponent(JsonObject json) throws IOException, FHIRFormatError {
6363    Citation.CitationCitedArtifactAbstractComponent res = new Citation.CitationCitedArtifactAbstractComponent();
6364    parseCitationCitedArtifactAbstractComponentProperties(json, res);
6365    return res;
6366  }
6367
6368  protected void parseCitationCitedArtifactAbstractComponentProperties(JsonObject json, Citation.CitationCitedArtifactAbstractComponent res) throws IOException, FHIRFormatError {
6369    parseBackboneElementProperties(json, res);
6370    if (json.has("type"))
6371      res.setType(parseCodeableConcept(getJObject(json, "type")));
6372    if (json.has("language"))
6373      res.setLanguage(parseCodeableConcept(getJObject(json, "language")));
6374    if (json.has("text"))
6375      res.setTextElement(parseMarkdown(json.get("text").getAsString()));
6376    if (json.has("_text"))
6377      parseElementProperties(getJObject(json, "_text"), res.getTextElement());
6378    if (json.has("copyright"))
6379      res.setCopyrightElement(parseMarkdown(json.get("copyright").getAsString()));
6380    if (json.has("_copyright"))
6381      parseElementProperties(getJObject(json, "_copyright"), res.getCopyrightElement());
6382  }
6383
6384  protected Citation.CitationCitedArtifactPartComponent parseCitationCitedArtifactPartComponent(JsonObject json) throws IOException, FHIRFormatError {
6385    Citation.CitationCitedArtifactPartComponent res = new Citation.CitationCitedArtifactPartComponent();
6386    parseCitationCitedArtifactPartComponentProperties(json, res);
6387    return res;
6388  }
6389
6390  protected void parseCitationCitedArtifactPartComponentProperties(JsonObject json, Citation.CitationCitedArtifactPartComponent res) throws IOException, FHIRFormatError {
6391    parseBackboneElementProperties(json, res);
6392    if (json.has("type"))
6393      res.setType(parseCodeableConcept(getJObject(json, "type")));
6394    if (json.has("value"))
6395      res.setValueElement(parseString(json.get("value").getAsString()));
6396    if (json.has("_value"))
6397      parseElementProperties(getJObject(json, "_value"), res.getValueElement());
6398    if (json.has("baseCitation"))
6399      res.setBaseCitation(parseReference(getJObject(json, "baseCitation")));
6400  }
6401
6402  protected Citation.CitationCitedArtifactRelatesToComponent parseCitationCitedArtifactRelatesToComponent(JsonObject json) throws IOException, FHIRFormatError {
6403    Citation.CitationCitedArtifactRelatesToComponent res = new Citation.CitationCitedArtifactRelatesToComponent();
6404    parseCitationCitedArtifactRelatesToComponentProperties(json, res);
6405    return res;
6406  }
6407
6408  protected void parseCitationCitedArtifactRelatesToComponentProperties(JsonObject json, Citation.CitationCitedArtifactRelatesToComponent res) throws IOException, FHIRFormatError {
6409    parseBackboneElementProperties(json, res);
6410    if (json.has("type"))
6411      res.setTypeElement(parseEnumeration(json.get("type").getAsString(), Citation.RelatedArtifactTypeExpanded.NULL, new Citation.RelatedArtifactTypeExpandedEnumFactory()));
6412    if (json.has("_type"))
6413      parseElementProperties(getJObject(json, "_type"), res.getTypeElement());
6414    if (json.has("classifier")) {
6415      JsonArray array = getJArray(json, "classifier");
6416      for (int i = 0; i < array.size(); i++) {
6417        res.getClassifier().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
6418      }
6419    };
6420    if (json.has("label"))
6421      res.setLabelElement(parseString(json.get("label").getAsString()));
6422    if (json.has("_label"))
6423      parseElementProperties(getJObject(json, "_label"), res.getLabelElement());
6424    if (json.has("display"))
6425      res.setDisplayElement(parseString(json.get("display").getAsString()));
6426    if (json.has("_display"))
6427      parseElementProperties(getJObject(json, "_display"), res.getDisplayElement());
6428    if (json.has("citation"))
6429      res.setCitationElement(parseMarkdown(json.get("citation").getAsString()));
6430    if (json.has("_citation"))
6431      parseElementProperties(getJObject(json, "_citation"), res.getCitationElement());
6432    if (json.has("document"))
6433      res.setDocument(parseAttachment(getJObject(json, "document")));
6434    if (json.has("resource"))
6435      res.setResourceElement(parseCanonical(json.get("resource").getAsString()));
6436    if (json.has("_resource"))
6437      parseElementProperties(getJObject(json, "_resource"), res.getResourceElement());
6438    if (json.has("resourceReference"))
6439      res.setResourceReference(parseReference(getJObject(json, "resourceReference")));
6440  }
6441
6442  protected Citation.CitationCitedArtifactPublicationFormComponent parseCitationCitedArtifactPublicationFormComponent(JsonObject json) throws IOException, FHIRFormatError {
6443    Citation.CitationCitedArtifactPublicationFormComponent res = new Citation.CitationCitedArtifactPublicationFormComponent();
6444    parseCitationCitedArtifactPublicationFormComponentProperties(json, res);
6445    return res;
6446  }
6447
6448  protected void parseCitationCitedArtifactPublicationFormComponentProperties(JsonObject json, Citation.CitationCitedArtifactPublicationFormComponent res) throws IOException, FHIRFormatError {
6449    parseBackboneElementProperties(json, res);
6450    if (json.has("publishedIn"))
6451      res.setPublishedIn(parseCitationCitedArtifactPublicationFormPublishedInComponent(getJObject(json, "publishedIn")));
6452    if (json.has("citedMedium"))
6453      res.setCitedMedium(parseCodeableConcept(getJObject(json, "citedMedium")));
6454    if (json.has("volume"))
6455      res.setVolumeElement(parseString(json.get("volume").getAsString()));
6456    if (json.has("_volume"))
6457      parseElementProperties(getJObject(json, "_volume"), res.getVolumeElement());
6458    if (json.has("issue"))
6459      res.setIssueElement(parseString(json.get("issue").getAsString()));
6460    if (json.has("_issue"))
6461      parseElementProperties(getJObject(json, "_issue"), res.getIssueElement());
6462    if (json.has("articleDate"))
6463      res.setArticleDateElement(parseDateTime(json.get("articleDate").getAsString()));
6464    if (json.has("_articleDate"))
6465      parseElementProperties(getJObject(json, "_articleDate"), res.getArticleDateElement());
6466    if (json.has("publicationDateText"))
6467      res.setPublicationDateTextElement(parseString(json.get("publicationDateText").getAsString()));
6468    if (json.has("_publicationDateText"))
6469      parseElementProperties(getJObject(json, "_publicationDateText"), res.getPublicationDateTextElement());
6470    if (json.has("publicationDateSeason"))
6471      res.setPublicationDateSeasonElement(parseString(json.get("publicationDateSeason").getAsString()));
6472    if (json.has("_publicationDateSeason"))
6473      parseElementProperties(getJObject(json, "_publicationDateSeason"), res.getPublicationDateSeasonElement());
6474    if (json.has("lastRevisionDate"))
6475      res.setLastRevisionDateElement(parseDateTime(json.get("lastRevisionDate").getAsString()));
6476    if (json.has("_lastRevisionDate"))
6477      parseElementProperties(getJObject(json, "_lastRevisionDate"), res.getLastRevisionDateElement());
6478    if (json.has("language")) {
6479      JsonArray array = getJArray(json, "language");
6480      for (int i = 0; i < array.size(); i++) {
6481        res.getLanguage().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
6482      }
6483    };
6484    if (json.has("accessionNumber"))
6485      res.setAccessionNumberElement(parseString(json.get("accessionNumber").getAsString()));
6486    if (json.has("_accessionNumber"))
6487      parseElementProperties(getJObject(json, "_accessionNumber"), res.getAccessionNumberElement());
6488    if (json.has("pageString"))
6489      res.setPageStringElement(parseString(json.get("pageString").getAsString()));
6490    if (json.has("_pageString"))
6491      parseElementProperties(getJObject(json, "_pageString"), res.getPageStringElement());
6492    if (json.has("firstPage"))
6493      res.setFirstPageElement(parseString(json.get("firstPage").getAsString()));
6494    if (json.has("_firstPage"))
6495      parseElementProperties(getJObject(json, "_firstPage"), res.getFirstPageElement());
6496    if (json.has("lastPage"))
6497      res.setLastPageElement(parseString(json.get("lastPage").getAsString()));
6498    if (json.has("_lastPage"))
6499      parseElementProperties(getJObject(json, "_lastPage"), res.getLastPageElement());
6500    if (json.has("pageCount"))
6501      res.setPageCountElement(parseString(json.get("pageCount").getAsString()));
6502    if (json.has("_pageCount"))
6503      parseElementProperties(getJObject(json, "_pageCount"), res.getPageCountElement());
6504    if (json.has("copyright"))
6505      res.setCopyrightElement(parseMarkdown(json.get("copyright").getAsString()));
6506    if (json.has("_copyright"))
6507      parseElementProperties(getJObject(json, "_copyright"), res.getCopyrightElement());
6508  }
6509
6510  protected Citation.CitationCitedArtifactPublicationFormPublishedInComponent parseCitationCitedArtifactPublicationFormPublishedInComponent(JsonObject json) throws IOException, FHIRFormatError {
6511    Citation.CitationCitedArtifactPublicationFormPublishedInComponent res = new Citation.CitationCitedArtifactPublicationFormPublishedInComponent();
6512    parseCitationCitedArtifactPublicationFormPublishedInComponentProperties(json, res);
6513    return res;
6514  }
6515
6516  protected void parseCitationCitedArtifactPublicationFormPublishedInComponentProperties(JsonObject json, Citation.CitationCitedArtifactPublicationFormPublishedInComponent res) throws IOException, FHIRFormatError {
6517    parseBackboneElementProperties(json, res);
6518    if (json.has("type"))
6519      res.setType(parseCodeableConcept(getJObject(json, "type")));
6520    if (json.has("identifier")) {
6521      JsonArray array = getJArray(json, "identifier");
6522      for (int i = 0; i < array.size(); i++) {
6523        res.getIdentifier().add(parseIdentifier(array.get(i).getAsJsonObject()));
6524      }
6525    };
6526    if (json.has("title"))
6527      res.setTitleElement(parseString(json.get("title").getAsString()));
6528    if (json.has("_title"))
6529      parseElementProperties(getJObject(json, "_title"), res.getTitleElement());
6530    if (json.has("publisher"))
6531      res.setPublisher(parseReference(getJObject(json, "publisher")));
6532    if (json.has("publisherLocation"))
6533      res.setPublisherLocationElement(parseString(json.get("publisherLocation").getAsString()));
6534    if (json.has("_publisherLocation"))
6535      parseElementProperties(getJObject(json, "_publisherLocation"), res.getPublisherLocationElement());
6536  }
6537
6538  protected Citation.CitationCitedArtifactWebLocationComponent parseCitationCitedArtifactWebLocationComponent(JsonObject json) throws IOException, FHIRFormatError {
6539    Citation.CitationCitedArtifactWebLocationComponent res = new Citation.CitationCitedArtifactWebLocationComponent();
6540    parseCitationCitedArtifactWebLocationComponentProperties(json, res);
6541    return res;
6542  }
6543
6544  protected void parseCitationCitedArtifactWebLocationComponentProperties(JsonObject json, Citation.CitationCitedArtifactWebLocationComponent res) throws IOException, FHIRFormatError {
6545    parseBackboneElementProperties(json, res);
6546    if (json.has("classifier")) {
6547      JsonArray array = getJArray(json, "classifier");
6548      for (int i = 0; i < array.size(); i++) {
6549        res.getClassifier().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
6550      }
6551    };
6552    if (json.has("url"))
6553      res.setUrlElement(parseUri(json.get("url").getAsString()));
6554    if (json.has("_url"))
6555      parseElementProperties(getJObject(json, "_url"), res.getUrlElement());
6556  }
6557
6558  protected Citation.CitationCitedArtifactClassificationComponent parseCitationCitedArtifactClassificationComponent(JsonObject json) throws IOException, FHIRFormatError {
6559    Citation.CitationCitedArtifactClassificationComponent res = new Citation.CitationCitedArtifactClassificationComponent();
6560    parseCitationCitedArtifactClassificationComponentProperties(json, res);
6561    return res;
6562  }
6563
6564  protected void parseCitationCitedArtifactClassificationComponentProperties(JsonObject json, Citation.CitationCitedArtifactClassificationComponent res) throws IOException, FHIRFormatError {
6565    parseBackboneElementProperties(json, res);
6566    if (json.has("type"))
6567      res.setType(parseCodeableConcept(getJObject(json, "type")));
6568    if (json.has("classifier")) {
6569      JsonArray array = getJArray(json, "classifier");
6570      for (int i = 0; i < array.size(); i++) {
6571        res.getClassifier().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
6572      }
6573    };
6574    if (json.has("artifactAssessment")) {
6575      JsonArray array = getJArray(json, "artifactAssessment");
6576      for (int i = 0; i < array.size(); i++) {
6577        res.getArtifactAssessment().add(parseReference(array.get(i).getAsJsonObject()));
6578      }
6579    };
6580  }
6581
6582  protected Citation.CitationCitedArtifactContributorshipComponent parseCitationCitedArtifactContributorshipComponent(JsonObject json) throws IOException, FHIRFormatError {
6583    Citation.CitationCitedArtifactContributorshipComponent res = new Citation.CitationCitedArtifactContributorshipComponent();
6584    parseCitationCitedArtifactContributorshipComponentProperties(json, res);
6585    return res;
6586  }
6587
6588  protected void parseCitationCitedArtifactContributorshipComponentProperties(JsonObject json, Citation.CitationCitedArtifactContributorshipComponent res) throws IOException, FHIRFormatError {
6589    parseBackboneElementProperties(json, res);
6590    if (json.has("complete"))
6591      res.setCompleteElement(parseBoolean(json.get("complete").getAsBoolean()));
6592    if (json.has("_complete"))
6593      parseElementProperties(getJObject(json, "_complete"), res.getCompleteElement());
6594    if (json.has("entry")) {
6595      JsonArray array = getJArray(json, "entry");
6596      for (int i = 0; i < array.size(); i++) {
6597        res.getEntry().add(parseCitationCitedArtifactContributorshipEntryComponent(array.get(i).getAsJsonObject()));
6598      }
6599    };
6600    if (json.has("summary")) {
6601      JsonArray array = getJArray(json, "summary");
6602      for (int i = 0; i < array.size(); i++) {
6603        res.getSummary().add(parseCitationContributorshipSummaryComponent(array.get(i).getAsJsonObject()));
6604      }
6605    };
6606  }
6607
6608  protected Citation.CitationCitedArtifactContributorshipEntryComponent parseCitationCitedArtifactContributorshipEntryComponent(JsonObject json) throws IOException, FHIRFormatError {
6609    Citation.CitationCitedArtifactContributorshipEntryComponent res = new Citation.CitationCitedArtifactContributorshipEntryComponent();
6610    parseCitationCitedArtifactContributorshipEntryComponentProperties(json, res);
6611    return res;
6612  }
6613
6614  protected void parseCitationCitedArtifactContributorshipEntryComponentProperties(JsonObject json, Citation.CitationCitedArtifactContributorshipEntryComponent res) throws IOException, FHIRFormatError {
6615    parseBackboneElementProperties(json, res);
6616    if (json.has("contributor"))
6617      res.setContributor(parseReference(getJObject(json, "contributor")));
6618    if (json.has("forenameInitials"))
6619      res.setForenameInitialsElement(parseString(json.get("forenameInitials").getAsString()));
6620    if (json.has("_forenameInitials"))
6621      parseElementProperties(getJObject(json, "_forenameInitials"), res.getForenameInitialsElement());
6622    if (json.has("affiliation")) {
6623      JsonArray array = getJArray(json, "affiliation");
6624      for (int i = 0; i < array.size(); i++) {
6625        res.getAffiliation().add(parseReference(array.get(i).getAsJsonObject()));
6626      }
6627    };
6628    if (json.has("contributionType")) {
6629      JsonArray array = getJArray(json, "contributionType");
6630      for (int i = 0; i < array.size(); i++) {
6631        res.getContributionType().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
6632      }
6633    };
6634    if (json.has("role"))
6635      res.setRole(parseCodeableConcept(getJObject(json, "role")));
6636    if (json.has("contributionInstance")) {
6637      JsonArray array = getJArray(json, "contributionInstance");
6638      for (int i = 0; i < array.size(); i++) {
6639        res.getContributionInstance().add(parseCitationCitedArtifactContributorshipEntryContributionInstanceComponent(array.get(i).getAsJsonObject()));
6640      }
6641    };
6642    if (json.has("correspondingContact"))
6643      res.setCorrespondingContactElement(parseBoolean(json.get("correspondingContact").getAsBoolean()));
6644    if (json.has("_correspondingContact"))
6645      parseElementProperties(getJObject(json, "_correspondingContact"), res.getCorrespondingContactElement());
6646    if (json.has("rankingOrder"))
6647      res.setRankingOrderElement(parsePositiveInt(json.get("rankingOrder").getAsString()));
6648    if (json.has("_rankingOrder"))
6649      parseElementProperties(getJObject(json, "_rankingOrder"), res.getRankingOrderElement());
6650  }
6651
6652  protected Citation.CitationCitedArtifactContributorshipEntryContributionInstanceComponent parseCitationCitedArtifactContributorshipEntryContributionInstanceComponent(JsonObject json) throws IOException, FHIRFormatError {
6653    Citation.CitationCitedArtifactContributorshipEntryContributionInstanceComponent res = new Citation.CitationCitedArtifactContributorshipEntryContributionInstanceComponent();
6654    parseCitationCitedArtifactContributorshipEntryContributionInstanceComponentProperties(json, res);
6655    return res;
6656  }
6657
6658  protected void parseCitationCitedArtifactContributorshipEntryContributionInstanceComponentProperties(JsonObject json, Citation.CitationCitedArtifactContributorshipEntryContributionInstanceComponent res) throws IOException, FHIRFormatError {
6659    parseBackboneElementProperties(json, res);
6660    if (json.has("type"))
6661      res.setType(parseCodeableConcept(getJObject(json, "type")));
6662    if (json.has("time"))
6663      res.setTimeElement(parseDateTime(json.get("time").getAsString()));
6664    if (json.has("_time"))
6665      parseElementProperties(getJObject(json, "_time"), res.getTimeElement());
6666  }
6667
6668  protected Citation.ContributorshipSummaryComponent parseCitationContributorshipSummaryComponent(JsonObject json) throws IOException, FHIRFormatError {
6669    Citation.ContributorshipSummaryComponent res = new Citation.ContributorshipSummaryComponent();
6670    parseCitationContributorshipSummaryComponentProperties(json, res);
6671    return res;
6672  }
6673
6674  protected void parseCitationContributorshipSummaryComponentProperties(JsonObject json, Citation.ContributorshipSummaryComponent res) throws IOException, FHIRFormatError {
6675    parseBackboneElementProperties(json, res);
6676    if (json.has("type"))
6677      res.setType(parseCodeableConcept(getJObject(json, "type")));
6678    if (json.has("style"))
6679      res.setStyle(parseCodeableConcept(getJObject(json, "style")));
6680    if (json.has("source"))
6681      res.setSource(parseCodeableConcept(getJObject(json, "source")));
6682    if (json.has("value"))
6683      res.setValueElement(parseMarkdown(json.get("value").getAsString()));
6684    if (json.has("_value"))
6685      parseElementProperties(getJObject(json, "_value"), res.getValueElement());
6686  }
6687
6688  protected Claim parseClaim(JsonObject json) throws IOException, FHIRFormatError {
6689    Claim res = new Claim();
6690    parseClaimProperties(json, res);
6691    return res;
6692  }
6693
6694  protected void parseClaimProperties(JsonObject json, Claim res) throws IOException, FHIRFormatError {
6695    parseDomainResourceProperties(json, res);
6696    if (json.has("identifier")) {
6697      JsonArray array = getJArray(json, "identifier");
6698      for (int i = 0; i < array.size(); i++) {
6699        res.getIdentifier().add(parseIdentifier(array.get(i).getAsJsonObject()));
6700      }
6701    };
6702    if (json.has("traceNumber")) {
6703      JsonArray array = getJArray(json, "traceNumber");
6704      for (int i = 0; i < array.size(); i++) {
6705        res.getTraceNumber().add(parseIdentifier(array.get(i).getAsJsonObject()));
6706      }
6707    };
6708    if (json.has("status"))
6709      res.setStatusElement(parseEnumeration(json.get("status").getAsString(), Enumerations.FinancialResourceStatusCodes.NULL, new Enumerations.FinancialResourceStatusCodesEnumFactory()));
6710    if (json.has("_status"))
6711      parseElementProperties(getJObject(json, "_status"), res.getStatusElement());
6712    if (json.has("type"))
6713      res.setType(parseCodeableConcept(getJObject(json, "type")));
6714    if (json.has("subType"))
6715      res.setSubType(parseCodeableConcept(getJObject(json, "subType")));
6716    if (json.has("use"))
6717      res.setUseElement(parseEnumeration(json.get("use").getAsString(), Enumerations.Use.NULL, new Enumerations.UseEnumFactory()));
6718    if (json.has("_use"))
6719      parseElementProperties(getJObject(json, "_use"), res.getUseElement());
6720    if (json.has("patient"))
6721      res.setPatient(parseReference(getJObject(json, "patient")));
6722    if (json.has("billablePeriod"))
6723      res.setBillablePeriod(parsePeriod(getJObject(json, "billablePeriod")));
6724    if (json.has("created"))
6725      res.setCreatedElement(parseDateTime(json.get("created").getAsString()));
6726    if (json.has("_created"))
6727      parseElementProperties(getJObject(json, "_created"), res.getCreatedElement());
6728    if (json.has("enterer"))
6729      res.setEnterer(parseReference(getJObject(json, "enterer")));
6730    if (json.has("insurer"))
6731      res.setInsurer(parseReference(getJObject(json, "insurer")));
6732    if (json.has("provider"))
6733      res.setProvider(parseReference(getJObject(json, "provider")));
6734    if (json.has("priority"))
6735      res.setPriority(parseCodeableConcept(getJObject(json, "priority")));
6736    if (json.has("fundsReserve"))
6737      res.setFundsReserve(parseCodeableConcept(getJObject(json, "fundsReserve")));
6738    if (json.has("related")) {
6739      JsonArray array = getJArray(json, "related");
6740      for (int i = 0; i < array.size(); i++) {
6741        res.getRelated().add(parseClaimRelatedClaimComponent(array.get(i).getAsJsonObject()));
6742      }
6743    };
6744    if (json.has("prescription"))
6745      res.setPrescription(parseReference(getJObject(json, "prescription")));
6746    if (json.has("originalPrescription"))
6747      res.setOriginalPrescription(parseReference(getJObject(json, "originalPrescription")));
6748    if (json.has("payee"))
6749      res.setPayee(parseClaimPayeeComponent(getJObject(json, "payee")));
6750    if (json.has("referral"))
6751      res.setReferral(parseReference(getJObject(json, "referral")));
6752    if (json.has("encounter")) {
6753      JsonArray array = getJArray(json, "encounter");
6754      for (int i = 0; i < array.size(); i++) {
6755        res.getEncounter().add(parseReference(array.get(i).getAsJsonObject()));
6756      }
6757    };
6758    if (json.has("facility"))
6759      res.setFacility(parseReference(getJObject(json, "facility")));
6760    if (json.has("diagnosisRelatedGroup"))
6761      res.setDiagnosisRelatedGroup(parseCodeableConcept(getJObject(json, "diagnosisRelatedGroup")));
6762    if (json.has("event")) {
6763      JsonArray array = getJArray(json, "event");
6764      for (int i = 0; i < array.size(); i++) {
6765        res.getEvent().add(parseClaimEventComponent(array.get(i).getAsJsonObject()));
6766      }
6767    };
6768    if (json.has("careTeam")) {
6769      JsonArray array = getJArray(json, "careTeam");
6770      for (int i = 0; i < array.size(); i++) {
6771        res.getCareTeam().add(parseClaimCareTeamComponent(array.get(i).getAsJsonObject()));
6772      }
6773    };
6774    if (json.has("supportingInfo")) {
6775      JsonArray array = getJArray(json, "supportingInfo");
6776      for (int i = 0; i < array.size(); i++) {
6777        res.getSupportingInfo().add(parseClaimSupportingInformationComponent(array.get(i).getAsJsonObject()));
6778      }
6779    };
6780    if (json.has("diagnosis")) {
6781      JsonArray array = getJArray(json, "diagnosis");
6782      for (int i = 0; i < array.size(); i++) {
6783        res.getDiagnosis().add(parseClaimDiagnosisComponent(array.get(i).getAsJsonObject()));
6784      }
6785    };
6786    if (json.has("procedure")) {
6787      JsonArray array = getJArray(json, "procedure");
6788      for (int i = 0; i < array.size(); i++) {
6789        res.getProcedure().add(parseClaimProcedureComponent(array.get(i).getAsJsonObject()));
6790      }
6791    };
6792    if (json.has("insurance")) {
6793      JsonArray array = getJArray(json, "insurance");
6794      for (int i = 0; i < array.size(); i++) {
6795        res.getInsurance().add(parseClaimInsuranceComponent(array.get(i).getAsJsonObject()));
6796      }
6797    };
6798    if (json.has("accident"))
6799      res.setAccident(parseClaimAccidentComponent(getJObject(json, "accident")));
6800    if (json.has("patientPaid"))
6801      res.setPatientPaid(parseMoney(getJObject(json, "patientPaid")));
6802    if (json.has("item")) {
6803      JsonArray array = getJArray(json, "item");
6804      for (int i = 0; i < array.size(); i++) {
6805        res.getItem().add(parseClaimItemComponent(array.get(i).getAsJsonObject()));
6806      }
6807    };
6808    if (json.has("total"))
6809      res.setTotal(parseMoney(getJObject(json, "total")));
6810  }
6811
6812  protected Claim.RelatedClaimComponent parseClaimRelatedClaimComponent(JsonObject json) throws IOException, FHIRFormatError {
6813    Claim.RelatedClaimComponent res = new Claim.RelatedClaimComponent();
6814    parseClaimRelatedClaimComponentProperties(json, res);
6815    return res;
6816  }
6817
6818  protected void parseClaimRelatedClaimComponentProperties(JsonObject json, Claim.RelatedClaimComponent res) throws IOException, FHIRFormatError {
6819    parseBackboneElementProperties(json, res);
6820    if (json.has("claim"))
6821      res.setClaim(parseReference(getJObject(json, "claim")));
6822    if (json.has("relationship"))
6823      res.setRelationship(parseCodeableConcept(getJObject(json, "relationship")));
6824    if (json.has("reference"))
6825      res.setReference(parseIdentifier(getJObject(json, "reference")));
6826  }
6827
6828  protected Claim.PayeeComponent parseClaimPayeeComponent(JsonObject json) throws IOException, FHIRFormatError {
6829    Claim.PayeeComponent res = new Claim.PayeeComponent();
6830    parseClaimPayeeComponentProperties(json, res);
6831    return res;
6832  }
6833
6834  protected void parseClaimPayeeComponentProperties(JsonObject json, Claim.PayeeComponent res) throws IOException, FHIRFormatError {
6835    parseBackboneElementProperties(json, res);
6836    if (json.has("type"))
6837      res.setType(parseCodeableConcept(getJObject(json, "type")));
6838    if (json.has("party"))
6839      res.setParty(parseReference(getJObject(json, "party")));
6840  }
6841
6842  protected Claim.ClaimEventComponent parseClaimEventComponent(JsonObject json) throws IOException, FHIRFormatError {
6843    Claim.ClaimEventComponent res = new Claim.ClaimEventComponent();
6844    parseClaimEventComponentProperties(json, res);
6845    return res;
6846  }
6847
6848  protected void parseClaimEventComponentProperties(JsonObject json, Claim.ClaimEventComponent res) throws IOException, FHIRFormatError {
6849    parseBackboneElementProperties(json, res);
6850    if (json.has("type"))
6851      res.setType(parseCodeableConcept(getJObject(json, "type")));
6852    DataType when = parseType("when", json);
6853    if (when != null)
6854      res.setWhen(when);
6855  }
6856
6857  protected Claim.CareTeamComponent parseClaimCareTeamComponent(JsonObject json) throws IOException, FHIRFormatError {
6858    Claim.CareTeamComponent res = new Claim.CareTeamComponent();
6859    parseClaimCareTeamComponentProperties(json, res);
6860    return res;
6861  }
6862
6863  protected void parseClaimCareTeamComponentProperties(JsonObject json, Claim.CareTeamComponent res) throws IOException, FHIRFormatError {
6864    parseBackboneElementProperties(json, res);
6865    if (json.has("sequence"))
6866      res.setSequenceElement(parsePositiveInt(json.get("sequence").getAsString()));
6867    if (json.has("_sequence"))
6868      parseElementProperties(getJObject(json, "_sequence"), res.getSequenceElement());
6869    if (json.has("provider"))
6870      res.setProvider(parseReference(getJObject(json, "provider")));
6871    if (json.has("responsible"))
6872      res.setResponsibleElement(parseBoolean(json.get("responsible").getAsBoolean()));
6873    if (json.has("_responsible"))
6874      parseElementProperties(getJObject(json, "_responsible"), res.getResponsibleElement());
6875    if (json.has("role"))
6876      res.setRole(parseCodeableConcept(getJObject(json, "role")));
6877    if (json.has("specialty"))
6878      res.setSpecialty(parseCodeableConcept(getJObject(json, "specialty")));
6879  }
6880
6881  protected Claim.SupportingInformationComponent parseClaimSupportingInformationComponent(JsonObject json) throws IOException, FHIRFormatError {
6882    Claim.SupportingInformationComponent res = new Claim.SupportingInformationComponent();
6883    parseClaimSupportingInformationComponentProperties(json, res);
6884    return res;
6885  }
6886
6887  protected void parseClaimSupportingInformationComponentProperties(JsonObject json, Claim.SupportingInformationComponent res) throws IOException, FHIRFormatError {
6888    parseBackboneElementProperties(json, res);
6889    if (json.has("sequence"))
6890      res.setSequenceElement(parsePositiveInt(json.get("sequence").getAsString()));
6891    if (json.has("_sequence"))
6892      parseElementProperties(getJObject(json, "_sequence"), res.getSequenceElement());
6893    if (json.has("category"))
6894      res.setCategory(parseCodeableConcept(getJObject(json, "category")));
6895    if (json.has("code"))
6896      res.setCode(parseCodeableConcept(getJObject(json, "code")));
6897    DataType timing = parseType("timing", json);
6898    if (timing != null)
6899      res.setTiming(timing);
6900    DataType value = parseType("value", json);
6901    if (value != null)
6902      res.setValue(value);
6903    if (json.has("reason"))
6904      res.setReason(parseCodeableConcept(getJObject(json, "reason")));
6905  }
6906
6907  protected Claim.DiagnosisComponent parseClaimDiagnosisComponent(JsonObject json) throws IOException, FHIRFormatError {
6908    Claim.DiagnosisComponent res = new Claim.DiagnosisComponent();
6909    parseClaimDiagnosisComponentProperties(json, res);
6910    return res;
6911  }
6912
6913  protected void parseClaimDiagnosisComponentProperties(JsonObject json, Claim.DiagnosisComponent res) throws IOException, FHIRFormatError {
6914    parseBackboneElementProperties(json, res);
6915    if (json.has("sequence"))
6916      res.setSequenceElement(parsePositiveInt(json.get("sequence").getAsString()));
6917    if (json.has("_sequence"))
6918      parseElementProperties(getJObject(json, "_sequence"), res.getSequenceElement());
6919    DataType diagnosis = parseType("diagnosis", json);
6920    if (diagnosis != null)
6921      res.setDiagnosis(diagnosis);
6922    if (json.has("type")) {
6923      JsonArray array = getJArray(json, "type");
6924      for (int i = 0; i < array.size(); i++) {
6925        res.getType().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
6926      }
6927    };
6928    if (json.has("onAdmission"))
6929      res.setOnAdmission(parseCodeableConcept(getJObject(json, "onAdmission")));
6930  }
6931
6932  protected Claim.ProcedureComponent parseClaimProcedureComponent(JsonObject json) throws IOException, FHIRFormatError {
6933    Claim.ProcedureComponent res = new Claim.ProcedureComponent();
6934    parseClaimProcedureComponentProperties(json, res);
6935    return res;
6936  }
6937
6938  protected void parseClaimProcedureComponentProperties(JsonObject json, Claim.ProcedureComponent res) throws IOException, FHIRFormatError {
6939    parseBackboneElementProperties(json, res);
6940    if (json.has("sequence"))
6941      res.setSequenceElement(parsePositiveInt(json.get("sequence").getAsString()));
6942    if (json.has("_sequence"))
6943      parseElementProperties(getJObject(json, "_sequence"), res.getSequenceElement());
6944    if (json.has("type")) {
6945      JsonArray array = getJArray(json, "type");
6946      for (int i = 0; i < array.size(); i++) {
6947        res.getType().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
6948      }
6949    };
6950    if (json.has("date"))
6951      res.setDateElement(parseDateTime(json.get("date").getAsString()));
6952    if (json.has("_date"))
6953      parseElementProperties(getJObject(json, "_date"), res.getDateElement());
6954    DataType procedure = parseType("procedure", json);
6955    if (procedure != null)
6956      res.setProcedure(procedure);
6957    if (json.has("udi")) {
6958      JsonArray array = getJArray(json, "udi");
6959      for (int i = 0; i < array.size(); i++) {
6960        res.getUdi().add(parseReference(array.get(i).getAsJsonObject()));
6961      }
6962    };
6963  }
6964
6965  protected Claim.InsuranceComponent parseClaimInsuranceComponent(JsonObject json) throws IOException, FHIRFormatError {
6966    Claim.InsuranceComponent res = new Claim.InsuranceComponent();
6967    parseClaimInsuranceComponentProperties(json, res);
6968    return res;
6969  }
6970
6971  protected void parseClaimInsuranceComponentProperties(JsonObject json, Claim.InsuranceComponent res) throws IOException, FHIRFormatError {
6972    parseBackboneElementProperties(json, res);
6973    if (json.has("sequence"))
6974      res.setSequenceElement(parsePositiveInt(json.get("sequence").getAsString()));
6975    if (json.has("_sequence"))
6976      parseElementProperties(getJObject(json, "_sequence"), res.getSequenceElement());
6977    if (json.has("focal"))
6978      res.setFocalElement(parseBoolean(json.get("focal").getAsBoolean()));
6979    if (json.has("_focal"))
6980      parseElementProperties(getJObject(json, "_focal"), res.getFocalElement());
6981    if (json.has("identifier"))
6982      res.setIdentifier(parseIdentifier(getJObject(json, "identifier")));
6983    if (json.has("coverage"))
6984      res.setCoverage(parseReference(getJObject(json, "coverage")));
6985    if (json.has("businessArrangement"))
6986      res.setBusinessArrangementElement(parseString(json.get("businessArrangement").getAsString()));
6987    if (json.has("_businessArrangement"))
6988      parseElementProperties(getJObject(json, "_businessArrangement"), res.getBusinessArrangementElement());
6989    if (json.has("preAuthRef")) {
6990      JsonArray array = getJArray(json, "preAuthRef");
6991      for (int i = 0; i < array.size(); i++) {
6992        if (array.get(i).isJsonNull()) {
6993          res.getPreAuthRef().add(new StringType());
6994        } else {;
6995          res.getPreAuthRef().add(parseString(array.get(i).getAsString()));
6996        }
6997      }
6998    };
6999    if (json.has("_preAuthRef")) {
7000      JsonArray array = getJArray(json, "_preAuthRef");
7001      for (int i = 0; i < array.size(); i++) {
7002        if (i == res.getPreAuthRef().size())
7003          res.getPreAuthRef().add(parseString(null));
7004        if (array.get(i) instanceof JsonObject) 
7005          parseElementProperties(array.get(i).getAsJsonObject(), res.getPreAuthRef().get(i));
7006      }
7007    };
7008    if (json.has("claimResponse"))
7009      res.setClaimResponse(parseReference(getJObject(json, "claimResponse")));
7010  }
7011
7012  protected Claim.AccidentComponent parseClaimAccidentComponent(JsonObject json) throws IOException, FHIRFormatError {
7013    Claim.AccidentComponent res = new Claim.AccidentComponent();
7014    parseClaimAccidentComponentProperties(json, res);
7015    return res;
7016  }
7017
7018  protected void parseClaimAccidentComponentProperties(JsonObject json, Claim.AccidentComponent res) throws IOException, FHIRFormatError {
7019    parseBackboneElementProperties(json, res);
7020    if (json.has("date"))
7021      res.setDateElement(parseDate(json.get("date").getAsString()));
7022    if (json.has("_date"))
7023      parseElementProperties(getJObject(json, "_date"), res.getDateElement());
7024    if (json.has("type"))
7025      res.setType(parseCodeableConcept(getJObject(json, "type")));
7026    DataType location = parseType("location", json);
7027    if (location != null)
7028      res.setLocation(location);
7029  }
7030
7031  protected Claim.ItemComponent parseClaimItemComponent(JsonObject json) throws IOException, FHIRFormatError {
7032    Claim.ItemComponent res = new Claim.ItemComponent();
7033    parseClaimItemComponentProperties(json, res);
7034    return res;
7035  }
7036
7037  protected void parseClaimItemComponentProperties(JsonObject json, Claim.ItemComponent res) throws IOException, FHIRFormatError {
7038    parseBackboneElementProperties(json, res);
7039    if (json.has("sequence"))
7040      res.setSequenceElement(parsePositiveInt(json.get("sequence").getAsString()));
7041    if (json.has("_sequence"))
7042      parseElementProperties(getJObject(json, "_sequence"), res.getSequenceElement());
7043    if (json.has("traceNumber")) {
7044      JsonArray array = getJArray(json, "traceNumber");
7045      for (int i = 0; i < array.size(); i++) {
7046        res.getTraceNumber().add(parseIdentifier(array.get(i).getAsJsonObject()));
7047      }
7048    };
7049    if (json.has("careTeamSequence")) {
7050      JsonArray array = getJArray(json, "careTeamSequence");
7051      for (int i = 0; i < array.size(); i++) {
7052        if (array.get(i).isJsonNull()) {
7053          res.getCareTeamSequence().add(new PositiveIntType());
7054        } else {;
7055          res.getCareTeamSequence().add(parsePositiveInt(array.get(i).getAsString()));
7056        }
7057      }
7058    };
7059    if (json.has("_careTeamSequence")) {
7060      JsonArray array = getJArray(json, "_careTeamSequence");
7061      for (int i = 0; i < array.size(); i++) {
7062        if (i == res.getCareTeamSequence().size())
7063          res.getCareTeamSequence().add(parsePositiveInt(null));
7064        if (array.get(i) instanceof JsonObject) 
7065          parseElementProperties(array.get(i).getAsJsonObject(), res.getCareTeamSequence().get(i));
7066      }
7067    };
7068    if (json.has("diagnosisSequence")) {
7069      JsonArray array = getJArray(json, "diagnosisSequence");
7070      for (int i = 0; i < array.size(); i++) {
7071        if (array.get(i).isJsonNull()) {
7072          res.getDiagnosisSequence().add(new PositiveIntType());
7073        } else {;
7074          res.getDiagnosisSequence().add(parsePositiveInt(array.get(i).getAsString()));
7075        }
7076      }
7077    };
7078    if (json.has("_diagnosisSequence")) {
7079      JsonArray array = getJArray(json, "_diagnosisSequence");
7080      for (int i = 0; i < array.size(); i++) {
7081        if (i == res.getDiagnosisSequence().size())
7082          res.getDiagnosisSequence().add(parsePositiveInt(null));
7083        if (array.get(i) instanceof JsonObject) 
7084          parseElementProperties(array.get(i).getAsJsonObject(), res.getDiagnosisSequence().get(i));
7085      }
7086    };
7087    if (json.has("procedureSequence")) {
7088      JsonArray array = getJArray(json, "procedureSequence");
7089      for (int i = 0; i < array.size(); i++) {
7090        if (array.get(i).isJsonNull()) {
7091          res.getProcedureSequence().add(new PositiveIntType());
7092        } else {;
7093          res.getProcedureSequence().add(parsePositiveInt(array.get(i).getAsString()));
7094        }
7095      }
7096    };
7097    if (json.has("_procedureSequence")) {
7098      JsonArray array = getJArray(json, "_procedureSequence");
7099      for (int i = 0; i < array.size(); i++) {
7100        if (i == res.getProcedureSequence().size())
7101          res.getProcedureSequence().add(parsePositiveInt(null));
7102        if (array.get(i) instanceof JsonObject) 
7103          parseElementProperties(array.get(i).getAsJsonObject(), res.getProcedureSequence().get(i));
7104      }
7105    };
7106    if (json.has("informationSequence")) {
7107      JsonArray array = getJArray(json, "informationSequence");
7108      for (int i = 0; i < array.size(); i++) {
7109        if (array.get(i).isJsonNull()) {
7110          res.getInformationSequence().add(new PositiveIntType());
7111        } else {;
7112          res.getInformationSequence().add(parsePositiveInt(array.get(i).getAsString()));
7113        }
7114      }
7115    };
7116    if (json.has("_informationSequence")) {
7117      JsonArray array = getJArray(json, "_informationSequence");
7118      for (int i = 0; i < array.size(); i++) {
7119        if (i == res.getInformationSequence().size())
7120          res.getInformationSequence().add(parsePositiveInt(null));
7121        if (array.get(i) instanceof JsonObject) 
7122          parseElementProperties(array.get(i).getAsJsonObject(), res.getInformationSequence().get(i));
7123      }
7124    };
7125    if (json.has("revenue"))
7126      res.setRevenue(parseCodeableConcept(getJObject(json, "revenue")));
7127    if (json.has("category"))
7128      res.setCategory(parseCodeableConcept(getJObject(json, "category")));
7129    if (json.has("productOrService"))
7130      res.setProductOrService(parseCodeableConcept(getJObject(json, "productOrService")));
7131    if (json.has("productOrServiceEnd"))
7132      res.setProductOrServiceEnd(parseCodeableConcept(getJObject(json, "productOrServiceEnd")));
7133    if (json.has("request")) {
7134      JsonArray array = getJArray(json, "request");
7135      for (int i = 0; i < array.size(); i++) {
7136        res.getRequest().add(parseReference(array.get(i).getAsJsonObject()));
7137      }
7138    };
7139    if (json.has("modifier")) {
7140      JsonArray array = getJArray(json, "modifier");
7141      for (int i = 0; i < array.size(); i++) {
7142        res.getModifier().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
7143      }
7144    };
7145    if (json.has("programCode")) {
7146      JsonArray array = getJArray(json, "programCode");
7147      for (int i = 0; i < array.size(); i++) {
7148        res.getProgramCode().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
7149      }
7150    };
7151    DataType serviced = parseType("serviced", json);
7152    if (serviced != null)
7153      res.setServiced(serviced);
7154    DataType location = parseType("location", json);
7155    if (location != null)
7156      res.setLocation(location);
7157    if (json.has("patientPaid"))
7158      res.setPatientPaid(parseMoney(getJObject(json, "patientPaid")));
7159    if (json.has("quantity"))
7160      res.setQuantity(parseQuantity(getJObject(json, "quantity")));
7161    if (json.has("unitPrice"))
7162      res.setUnitPrice(parseMoney(getJObject(json, "unitPrice")));
7163    if (json.has("factor"))
7164      res.setFactorElement(parseDecimal(json.get("factor").getAsBigDecimal()));
7165    if (json.has("_factor"))
7166      parseElementProperties(getJObject(json, "_factor"), res.getFactorElement());
7167    if (json.has("tax"))
7168      res.setTax(parseMoney(getJObject(json, "tax")));
7169    if (json.has("net"))
7170      res.setNet(parseMoney(getJObject(json, "net")));
7171    if (json.has("udi")) {
7172      JsonArray array = getJArray(json, "udi");
7173      for (int i = 0; i < array.size(); i++) {
7174        res.getUdi().add(parseReference(array.get(i).getAsJsonObject()));
7175      }
7176    };
7177    if (json.has("bodySite")) {
7178      JsonArray array = getJArray(json, "bodySite");
7179      for (int i = 0; i < array.size(); i++) {
7180        res.getBodySite().add(parseClaimBodySiteComponent(array.get(i).getAsJsonObject()));
7181      }
7182    };
7183    if (json.has("encounter")) {
7184      JsonArray array = getJArray(json, "encounter");
7185      for (int i = 0; i < array.size(); i++) {
7186        res.getEncounter().add(parseReference(array.get(i).getAsJsonObject()));
7187      }
7188    };
7189    if (json.has("detail")) {
7190      JsonArray array = getJArray(json, "detail");
7191      for (int i = 0; i < array.size(); i++) {
7192        res.getDetail().add(parseClaimDetailComponent(array.get(i).getAsJsonObject()));
7193      }
7194    };
7195  }
7196
7197  protected Claim.BodySiteComponent parseClaimBodySiteComponent(JsonObject json) throws IOException, FHIRFormatError {
7198    Claim.BodySiteComponent res = new Claim.BodySiteComponent();
7199    parseClaimBodySiteComponentProperties(json, res);
7200    return res;
7201  }
7202
7203  protected void parseClaimBodySiteComponentProperties(JsonObject json, Claim.BodySiteComponent res) throws IOException, FHIRFormatError {
7204    parseBackboneElementProperties(json, res);
7205    if (json.has("site")) {
7206      JsonArray array = getJArray(json, "site");
7207      for (int i = 0; i < array.size(); i++) {
7208        res.getSite().add(parseCodeableReference(array.get(i).getAsJsonObject()));
7209      }
7210    };
7211    if (json.has("subSite")) {
7212      JsonArray array = getJArray(json, "subSite");
7213      for (int i = 0; i < array.size(); i++) {
7214        res.getSubSite().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
7215      }
7216    };
7217  }
7218
7219  protected Claim.DetailComponent parseClaimDetailComponent(JsonObject json) throws IOException, FHIRFormatError {
7220    Claim.DetailComponent res = new Claim.DetailComponent();
7221    parseClaimDetailComponentProperties(json, res);
7222    return res;
7223  }
7224
7225  protected void parseClaimDetailComponentProperties(JsonObject json, Claim.DetailComponent res) throws IOException, FHIRFormatError {
7226    parseBackboneElementProperties(json, res);
7227    if (json.has("sequence"))
7228      res.setSequenceElement(parsePositiveInt(json.get("sequence").getAsString()));
7229    if (json.has("_sequence"))
7230      parseElementProperties(getJObject(json, "_sequence"), res.getSequenceElement());
7231    if (json.has("traceNumber")) {
7232      JsonArray array = getJArray(json, "traceNumber");
7233      for (int i = 0; i < array.size(); i++) {
7234        res.getTraceNumber().add(parseIdentifier(array.get(i).getAsJsonObject()));
7235      }
7236    };
7237    if (json.has("revenue"))
7238      res.setRevenue(parseCodeableConcept(getJObject(json, "revenue")));
7239    if (json.has("category"))
7240      res.setCategory(parseCodeableConcept(getJObject(json, "category")));
7241    if (json.has("productOrService"))
7242      res.setProductOrService(parseCodeableConcept(getJObject(json, "productOrService")));
7243    if (json.has("productOrServiceEnd"))
7244      res.setProductOrServiceEnd(parseCodeableConcept(getJObject(json, "productOrServiceEnd")));
7245    if (json.has("modifier")) {
7246      JsonArray array = getJArray(json, "modifier");
7247      for (int i = 0; i < array.size(); i++) {
7248        res.getModifier().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
7249      }
7250    };
7251    if (json.has("programCode")) {
7252      JsonArray array = getJArray(json, "programCode");
7253      for (int i = 0; i < array.size(); i++) {
7254        res.getProgramCode().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
7255      }
7256    };
7257    if (json.has("patientPaid"))
7258      res.setPatientPaid(parseMoney(getJObject(json, "patientPaid")));
7259    if (json.has("quantity"))
7260      res.setQuantity(parseQuantity(getJObject(json, "quantity")));
7261    if (json.has("unitPrice"))
7262      res.setUnitPrice(parseMoney(getJObject(json, "unitPrice")));
7263    if (json.has("factor"))
7264      res.setFactorElement(parseDecimal(json.get("factor").getAsBigDecimal()));
7265    if (json.has("_factor"))
7266      parseElementProperties(getJObject(json, "_factor"), res.getFactorElement());
7267    if (json.has("tax"))
7268      res.setTax(parseMoney(getJObject(json, "tax")));
7269    if (json.has("net"))
7270      res.setNet(parseMoney(getJObject(json, "net")));
7271    if (json.has("udi")) {
7272      JsonArray array = getJArray(json, "udi");
7273      for (int i = 0; i < array.size(); i++) {
7274        res.getUdi().add(parseReference(array.get(i).getAsJsonObject()));
7275      }
7276    };
7277    if (json.has("subDetail")) {
7278      JsonArray array = getJArray(json, "subDetail");
7279      for (int i = 0; i < array.size(); i++) {
7280        res.getSubDetail().add(parseClaimSubDetailComponent(array.get(i).getAsJsonObject()));
7281      }
7282    };
7283  }
7284
7285  protected Claim.SubDetailComponent parseClaimSubDetailComponent(JsonObject json) throws IOException, FHIRFormatError {
7286    Claim.SubDetailComponent res = new Claim.SubDetailComponent();
7287    parseClaimSubDetailComponentProperties(json, res);
7288    return res;
7289  }
7290
7291  protected void parseClaimSubDetailComponentProperties(JsonObject json, Claim.SubDetailComponent res) throws IOException, FHIRFormatError {
7292    parseBackboneElementProperties(json, res);
7293    if (json.has("sequence"))
7294      res.setSequenceElement(parsePositiveInt(json.get("sequence").getAsString()));
7295    if (json.has("_sequence"))
7296      parseElementProperties(getJObject(json, "_sequence"), res.getSequenceElement());
7297    if (json.has("traceNumber")) {
7298      JsonArray array = getJArray(json, "traceNumber");
7299      for (int i = 0; i < array.size(); i++) {
7300        res.getTraceNumber().add(parseIdentifier(array.get(i).getAsJsonObject()));
7301      }
7302    };
7303    if (json.has("revenue"))
7304      res.setRevenue(parseCodeableConcept(getJObject(json, "revenue")));
7305    if (json.has("category"))
7306      res.setCategory(parseCodeableConcept(getJObject(json, "category")));
7307    if (json.has("productOrService"))
7308      res.setProductOrService(parseCodeableConcept(getJObject(json, "productOrService")));
7309    if (json.has("productOrServiceEnd"))
7310      res.setProductOrServiceEnd(parseCodeableConcept(getJObject(json, "productOrServiceEnd")));
7311    if (json.has("modifier")) {
7312      JsonArray array = getJArray(json, "modifier");
7313      for (int i = 0; i < array.size(); i++) {
7314        res.getModifier().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
7315      }
7316    };
7317    if (json.has("programCode")) {
7318      JsonArray array = getJArray(json, "programCode");
7319      for (int i = 0; i < array.size(); i++) {
7320        res.getProgramCode().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
7321      }
7322    };
7323    if (json.has("patientPaid"))
7324      res.setPatientPaid(parseMoney(getJObject(json, "patientPaid")));
7325    if (json.has("quantity"))
7326      res.setQuantity(parseQuantity(getJObject(json, "quantity")));
7327    if (json.has("unitPrice"))
7328      res.setUnitPrice(parseMoney(getJObject(json, "unitPrice")));
7329    if (json.has("factor"))
7330      res.setFactorElement(parseDecimal(json.get("factor").getAsBigDecimal()));
7331    if (json.has("_factor"))
7332      parseElementProperties(getJObject(json, "_factor"), res.getFactorElement());
7333    if (json.has("tax"))
7334      res.setTax(parseMoney(getJObject(json, "tax")));
7335    if (json.has("net"))
7336      res.setNet(parseMoney(getJObject(json, "net")));
7337    if (json.has("udi")) {
7338      JsonArray array = getJArray(json, "udi");
7339      for (int i = 0; i < array.size(); i++) {
7340        res.getUdi().add(parseReference(array.get(i).getAsJsonObject()));
7341      }
7342    };
7343  }
7344
7345  protected ClaimResponse parseClaimResponse(JsonObject json) throws IOException, FHIRFormatError {
7346    ClaimResponse res = new ClaimResponse();
7347    parseClaimResponseProperties(json, res);
7348    return res;
7349  }
7350
7351  protected void parseClaimResponseProperties(JsonObject json, ClaimResponse res) throws IOException, FHIRFormatError {
7352    parseDomainResourceProperties(json, res);
7353    if (json.has("identifier")) {
7354      JsonArray array = getJArray(json, "identifier");
7355      for (int i = 0; i < array.size(); i++) {
7356        res.getIdentifier().add(parseIdentifier(array.get(i).getAsJsonObject()));
7357      }
7358    };
7359    if (json.has("traceNumber")) {
7360      JsonArray array = getJArray(json, "traceNumber");
7361      for (int i = 0; i < array.size(); i++) {
7362        res.getTraceNumber().add(parseIdentifier(array.get(i).getAsJsonObject()));
7363      }
7364    };
7365    if (json.has("status"))
7366      res.setStatusElement(parseEnumeration(json.get("status").getAsString(), Enumerations.FinancialResourceStatusCodes.NULL, new Enumerations.FinancialResourceStatusCodesEnumFactory()));
7367    if (json.has("_status"))
7368      parseElementProperties(getJObject(json, "_status"), res.getStatusElement());
7369    if (json.has("type"))
7370      res.setType(parseCodeableConcept(getJObject(json, "type")));
7371    if (json.has("subType"))
7372      res.setSubType(parseCodeableConcept(getJObject(json, "subType")));
7373    if (json.has("use"))
7374      res.setUseElement(parseEnumeration(json.get("use").getAsString(), Enumerations.Use.NULL, new Enumerations.UseEnumFactory()));
7375    if (json.has("_use"))
7376      parseElementProperties(getJObject(json, "_use"), res.getUseElement());
7377    if (json.has("patient"))
7378      res.setPatient(parseReference(getJObject(json, "patient")));
7379    if (json.has("created"))
7380      res.setCreatedElement(parseDateTime(json.get("created").getAsString()));
7381    if (json.has("_created"))
7382      parseElementProperties(getJObject(json, "_created"), res.getCreatedElement());
7383    if (json.has("insurer"))
7384      res.setInsurer(parseReference(getJObject(json, "insurer")));
7385    if (json.has("requestor"))
7386      res.setRequestor(parseReference(getJObject(json, "requestor")));
7387    if (json.has("request"))
7388      res.setRequest(parseReference(getJObject(json, "request")));
7389    if (json.has("outcome"))
7390      res.setOutcomeElement(parseEnumeration(json.get("outcome").getAsString(), Enumerations.ClaimProcessingCodes.NULL, new Enumerations.ClaimProcessingCodesEnumFactory()));
7391    if (json.has("_outcome"))
7392      parseElementProperties(getJObject(json, "_outcome"), res.getOutcomeElement());
7393    if (json.has("decision"))
7394      res.setDecision(parseCodeableConcept(getJObject(json, "decision")));
7395    if (json.has("disposition"))
7396      res.setDispositionElement(parseString(json.get("disposition").getAsString()));
7397    if (json.has("_disposition"))
7398      parseElementProperties(getJObject(json, "_disposition"), res.getDispositionElement());
7399    if (json.has("preAuthRef"))
7400      res.setPreAuthRefElement(parseString(json.get("preAuthRef").getAsString()));
7401    if (json.has("_preAuthRef"))
7402      parseElementProperties(getJObject(json, "_preAuthRef"), res.getPreAuthRefElement());
7403    if (json.has("preAuthPeriod"))
7404      res.setPreAuthPeriod(parsePeriod(getJObject(json, "preAuthPeriod")));
7405    if (json.has("event")) {
7406      JsonArray array = getJArray(json, "event");
7407      for (int i = 0; i < array.size(); i++) {
7408        res.getEvent().add(parseClaimResponseEventComponent(array.get(i).getAsJsonObject()));
7409      }
7410    };
7411    if (json.has("payeeType"))
7412      res.setPayeeType(parseCodeableConcept(getJObject(json, "payeeType")));
7413    if (json.has("encounter")) {
7414      JsonArray array = getJArray(json, "encounter");
7415      for (int i = 0; i < array.size(); i++) {
7416        res.getEncounter().add(parseReference(array.get(i).getAsJsonObject()));
7417      }
7418    };
7419    if (json.has("diagnosisRelatedGroup"))
7420      res.setDiagnosisRelatedGroup(parseCodeableConcept(getJObject(json, "diagnosisRelatedGroup")));
7421    if (json.has("item")) {
7422      JsonArray array = getJArray(json, "item");
7423      for (int i = 0; i < array.size(); i++) {
7424        res.getItem().add(parseClaimResponseItemComponent(array.get(i).getAsJsonObject()));
7425      }
7426    };
7427    if (json.has("addItem")) {
7428      JsonArray array = getJArray(json, "addItem");
7429      for (int i = 0; i < array.size(); i++) {
7430        res.getAddItem().add(parseClaimResponseAddedItemComponent(array.get(i).getAsJsonObject()));
7431      }
7432    };
7433    if (json.has("adjudication")) {
7434      JsonArray array = getJArray(json, "adjudication");
7435      for (int i = 0; i < array.size(); i++) {
7436        res.getAdjudication().add(parseClaimResponseAdjudicationComponent(array.get(i).getAsJsonObject()));
7437      }
7438    };
7439    if (json.has("total")) {
7440      JsonArray array = getJArray(json, "total");
7441      for (int i = 0; i < array.size(); i++) {
7442        res.getTotal().add(parseClaimResponseTotalComponent(array.get(i).getAsJsonObject()));
7443      }
7444    };
7445    if (json.has("payment"))
7446      res.setPayment(parseClaimResponsePaymentComponent(getJObject(json, "payment")));
7447    if (json.has("fundsReserve"))
7448      res.setFundsReserve(parseCodeableConcept(getJObject(json, "fundsReserve")));
7449    if (json.has("formCode"))
7450      res.setFormCode(parseCodeableConcept(getJObject(json, "formCode")));
7451    if (json.has("form"))
7452      res.setForm(parseAttachment(getJObject(json, "form")));
7453    if (json.has("processNote")) {
7454      JsonArray array = getJArray(json, "processNote");
7455      for (int i = 0; i < array.size(); i++) {
7456        res.getProcessNote().add(parseClaimResponseNoteComponent(array.get(i).getAsJsonObject()));
7457      }
7458    };
7459    if (json.has("communicationRequest")) {
7460      JsonArray array = getJArray(json, "communicationRequest");
7461      for (int i = 0; i < array.size(); i++) {
7462        res.getCommunicationRequest().add(parseReference(array.get(i).getAsJsonObject()));
7463      }
7464    };
7465    if (json.has("insurance")) {
7466      JsonArray array = getJArray(json, "insurance");
7467      for (int i = 0; i < array.size(); i++) {
7468        res.getInsurance().add(parseClaimResponseInsuranceComponent(array.get(i).getAsJsonObject()));
7469      }
7470    };
7471    if (json.has("error")) {
7472      JsonArray array = getJArray(json, "error");
7473      for (int i = 0; i < array.size(); i++) {
7474        res.getError().add(parseClaimResponseErrorComponent(array.get(i).getAsJsonObject()));
7475      }
7476    };
7477  }
7478
7479  protected ClaimResponse.ClaimResponseEventComponent parseClaimResponseEventComponent(JsonObject json) throws IOException, FHIRFormatError {
7480    ClaimResponse.ClaimResponseEventComponent res = new ClaimResponse.ClaimResponseEventComponent();
7481    parseClaimResponseEventComponentProperties(json, res);
7482    return res;
7483  }
7484
7485  protected void parseClaimResponseEventComponentProperties(JsonObject json, ClaimResponse.ClaimResponseEventComponent res) throws IOException, FHIRFormatError {
7486    parseBackboneElementProperties(json, res);
7487    if (json.has("type"))
7488      res.setType(parseCodeableConcept(getJObject(json, "type")));
7489    DataType when = parseType("when", json);
7490    if (when != null)
7491      res.setWhen(when);
7492  }
7493
7494  protected ClaimResponse.ItemComponent parseClaimResponseItemComponent(JsonObject json) throws IOException, FHIRFormatError {
7495    ClaimResponse.ItemComponent res = new ClaimResponse.ItemComponent();
7496    parseClaimResponseItemComponentProperties(json, res);
7497    return res;
7498  }
7499
7500  protected void parseClaimResponseItemComponentProperties(JsonObject json, ClaimResponse.ItemComponent res) throws IOException, FHIRFormatError {
7501    parseBackboneElementProperties(json, res);
7502    if (json.has("itemSequence"))
7503      res.setItemSequenceElement(parsePositiveInt(json.get("itemSequence").getAsString()));
7504    if (json.has("_itemSequence"))
7505      parseElementProperties(getJObject(json, "_itemSequence"), res.getItemSequenceElement());
7506    if (json.has("traceNumber")) {
7507      JsonArray array = getJArray(json, "traceNumber");
7508      for (int i = 0; i < array.size(); i++) {
7509        res.getTraceNumber().add(parseIdentifier(array.get(i).getAsJsonObject()));
7510      }
7511    };
7512    if (json.has("noteNumber")) {
7513      JsonArray array = getJArray(json, "noteNumber");
7514      for (int i = 0; i < array.size(); i++) {
7515        if (array.get(i).isJsonNull()) {
7516          res.getNoteNumber().add(new PositiveIntType());
7517        } else {;
7518          res.getNoteNumber().add(parsePositiveInt(array.get(i).getAsString()));
7519        }
7520      }
7521    };
7522    if (json.has("_noteNumber")) {
7523      JsonArray array = getJArray(json, "_noteNumber");
7524      for (int i = 0; i < array.size(); i++) {
7525        if (i == res.getNoteNumber().size())
7526          res.getNoteNumber().add(parsePositiveInt(null));
7527        if (array.get(i) instanceof JsonObject) 
7528          parseElementProperties(array.get(i).getAsJsonObject(), res.getNoteNumber().get(i));
7529      }
7530    };
7531    if (json.has("reviewOutcome"))
7532      res.setReviewOutcome(parseClaimResponseReviewOutcomeComponent(getJObject(json, "reviewOutcome")));
7533    if (json.has("adjudication")) {
7534      JsonArray array = getJArray(json, "adjudication");
7535      for (int i = 0; i < array.size(); i++) {
7536        res.getAdjudication().add(parseClaimResponseAdjudicationComponent(array.get(i).getAsJsonObject()));
7537      }
7538    };
7539    if (json.has("detail")) {
7540      JsonArray array = getJArray(json, "detail");
7541      for (int i = 0; i < array.size(); i++) {
7542        res.getDetail().add(parseClaimResponseItemDetailComponent(array.get(i).getAsJsonObject()));
7543      }
7544    };
7545  }
7546
7547  protected ClaimResponse.ReviewOutcomeComponent parseClaimResponseReviewOutcomeComponent(JsonObject json) throws IOException, FHIRFormatError {
7548    ClaimResponse.ReviewOutcomeComponent res = new ClaimResponse.ReviewOutcomeComponent();
7549    parseClaimResponseReviewOutcomeComponentProperties(json, res);
7550    return res;
7551  }
7552
7553  protected void parseClaimResponseReviewOutcomeComponentProperties(JsonObject json, ClaimResponse.ReviewOutcomeComponent res) throws IOException, FHIRFormatError {
7554    parseBackboneElementProperties(json, res);
7555    if (json.has("decision"))
7556      res.setDecision(parseCodeableConcept(getJObject(json, "decision")));
7557    if (json.has("reason")) {
7558      JsonArray array = getJArray(json, "reason");
7559      for (int i = 0; i < array.size(); i++) {
7560        res.getReason().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
7561      }
7562    };
7563    if (json.has("preAuthRef"))
7564      res.setPreAuthRefElement(parseString(json.get("preAuthRef").getAsString()));
7565    if (json.has("_preAuthRef"))
7566      parseElementProperties(getJObject(json, "_preAuthRef"), res.getPreAuthRefElement());
7567    if (json.has("preAuthPeriod"))
7568      res.setPreAuthPeriod(parsePeriod(getJObject(json, "preAuthPeriod")));
7569  }
7570
7571  protected ClaimResponse.AdjudicationComponent parseClaimResponseAdjudicationComponent(JsonObject json) throws IOException, FHIRFormatError {
7572    ClaimResponse.AdjudicationComponent res = new ClaimResponse.AdjudicationComponent();
7573    parseClaimResponseAdjudicationComponentProperties(json, res);
7574    return res;
7575  }
7576
7577  protected void parseClaimResponseAdjudicationComponentProperties(JsonObject json, ClaimResponse.AdjudicationComponent res) throws IOException, FHIRFormatError {
7578    parseBackboneElementProperties(json, res);
7579    if (json.has("category"))
7580      res.setCategory(parseCodeableConcept(getJObject(json, "category")));
7581    if (json.has("reason"))
7582      res.setReason(parseCodeableConcept(getJObject(json, "reason")));
7583    if (json.has("amount"))
7584      res.setAmount(parseMoney(getJObject(json, "amount")));
7585    if (json.has("quantity"))
7586      res.setQuantity(parseQuantity(getJObject(json, "quantity")));
7587  }
7588
7589  protected ClaimResponse.ItemDetailComponent parseClaimResponseItemDetailComponent(JsonObject json) throws IOException, FHIRFormatError {
7590    ClaimResponse.ItemDetailComponent res = new ClaimResponse.ItemDetailComponent();
7591    parseClaimResponseItemDetailComponentProperties(json, res);
7592    return res;
7593  }
7594
7595  protected void parseClaimResponseItemDetailComponentProperties(JsonObject json, ClaimResponse.ItemDetailComponent res) throws IOException, FHIRFormatError {
7596    parseBackboneElementProperties(json, res);
7597    if (json.has("detailSequence"))
7598      res.setDetailSequenceElement(parsePositiveInt(json.get("detailSequence").getAsString()));
7599    if (json.has("_detailSequence"))
7600      parseElementProperties(getJObject(json, "_detailSequence"), res.getDetailSequenceElement());
7601    if (json.has("traceNumber")) {
7602      JsonArray array = getJArray(json, "traceNumber");
7603      for (int i = 0; i < array.size(); i++) {
7604        res.getTraceNumber().add(parseIdentifier(array.get(i).getAsJsonObject()));
7605      }
7606    };
7607    if (json.has("noteNumber")) {
7608      JsonArray array = getJArray(json, "noteNumber");
7609      for (int i = 0; i < array.size(); i++) {
7610        if (array.get(i).isJsonNull()) {
7611          res.getNoteNumber().add(new PositiveIntType());
7612        } else {;
7613          res.getNoteNumber().add(parsePositiveInt(array.get(i).getAsString()));
7614        }
7615      }
7616    };
7617    if (json.has("_noteNumber")) {
7618      JsonArray array = getJArray(json, "_noteNumber");
7619      for (int i = 0; i < array.size(); i++) {
7620        if (i == res.getNoteNumber().size())
7621          res.getNoteNumber().add(parsePositiveInt(null));
7622        if (array.get(i) instanceof JsonObject) 
7623          parseElementProperties(array.get(i).getAsJsonObject(), res.getNoteNumber().get(i));
7624      }
7625    };
7626    if (json.has("reviewOutcome"))
7627      res.setReviewOutcome(parseClaimResponseReviewOutcomeComponent(getJObject(json, "reviewOutcome")));
7628    if (json.has("adjudication")) {
7629      JsonArray array = getJArray(json, "adjudication");
7630      for (int i = 0; i < array.size(); i++) {
7631        res.getAdjudication().add(parseClaimResponseAdjudicationComponent(array.get(i).getAsJsonObject()));
7632      }
7633    };
7634    if (json.has("subDetail")) {
7635      JsonArray array = getJArray(json, "subDetail");
7636      for (int i = 0; i < array.size(); i++) {
7637        res.getSubDetail().add(parseClaimResponseSubDetailComponent(array.get(i).getAsJsonObject()));
7638      }
7639    };
7640  }
7641
7642  protected ClaimResponse.SubDetailComponent parseClaimResponseSubDetailComponent(JsonObject json) throws IOException, FHIRFormatError {
7643    ClaimResponse.SubDetailComponent res = new ClaimResponse.SubDetailComponent();
7644    parseClaimResponseSubDetailComponentProperties(json, res);
7645    return res;
7646  }
7647
7648  protected void parseClaimResponseSubDetailComponentProperties(JsonObject json, ClaimResponse.SubDetailComponent res) throws IOException, FHIRFormatError {
7649    parseBackboneElementProperties(json, res);
7650    if (json.has("subDetailSequence"))
7651      res.setSubDetailSequenceElement(parsePositiveInt(json.get("subDetailSequence").getAsString()));
7652    if (json.has("_subDetailSequence"))
7653      parseElementProperties(getJObject(json, "_subDetailSequence"), res.getSubDetailSequenceElement());
7654    if (json.has("traceNumber")) {
7655      JsonArray array = getJArray(json, "traceNumber");
7656      for (int i = 0; i < array.size(); i++) {
7657        res.getTraceNumber().add(parseIdentifier(array.get(i).getAsJsonObject()));
7658      }
7659    };
7660    if (json.has("noteNumber")) {
7661      JsonArray array = getJArray(json, "noteNumber");
7662      for (int i = 0; i < array.size(); i++) {
7663        if (array.get(i).isJsonNull()) {
7664          res.getNoteNumber().add(new PositiveIntType());
7665        } else {;
7666          res.getNoteNumber().add(parsePositiveInt(array.get(i).getAsString()));
7667        }
7668      }
7669    };
7670    if (json.has("_noteNumber")) {
7671      JsonArray array = getJArray(json, "_noteNumber");
7672      for (int i = 0; i < array.size(); i++) {
7673        if (i == res.getNoteNumber().size())
7674          res.getNoteNumber().add(parsePositiveInt(null));
7675        if (array.get(i) instanceof JsonObject) 
7676          parseElementProperties(array.get(i).getAsJsonObject(), res.getNoteNumber().get(i));
7677      }
7678    };
7679    if (json.has("reviewOutcome"))
7680      res.setReviewOutcome(parseClaimResponseReviewOutcomeComponent(getJObject(json, "reviewOutcome")));
7681    if (json.has("adjudication")) {
7682      JsonArray array = getJArray(json, "adjudication");
7683      for (int i = 0; i < array.size(); i++) {
7684        res.getAdjudication().add(parseClaimResponseAdjudicationComponent(array.get(i).getAsJsonObject()));
7685      }
7686    };
7687  }
7688
7689  protected ClaimResponse.AddedItemComponent parseClaimResponseAddedItemComponent(JsonObject json) throws IOException, FHIRFormatError {
7690    ClaimResponse.AddedItemComponent res = new ClaimResponse.AddedItemComponent();
7691    parseClaimResponseAddedItemComponentProperties(json, res);
7692    return res;
7693  }
7694
7695  protected void parseClaimResponseAddedItemComponentProperties(JsonObject json, ClaimResponse.AddedItemComponent res) throws IOException, FHIRFormatError {
7696    parseBackboneElementProperties(json, res);
7697    if (json.has("itemSequence")) {
7698      JsonArray array = getJArray(json, "itemSequence");
7699      for (int i = 0; i < array.size(); i++) {
7700        if (array.get(i).isJsonNull()) {
7701          res.getItemSequence().add(new PositiveIntType());
7702        } else {;
7703          res.getItemSequence().add(parsePositiveInt(array.get(i).getAsString()));
7704        }
7705      }
7706    };
7707    if (json.has("_itemSequence")) {
7708      JsonArray array = getJArray(json, "_itemSequence");
7709      for (int i = 0; i < array.size(); i++) {
7710        if (i == res.getItemSequence().size())
7711          res.getItemSequence().add(parsePositiveInt(null));
7712        if (array.get(i) instanceof JsonObject) 
7713          parseElementProperties(array.get(i).getAsJsonObject(), res.getItemSequence().get(i));
7714      }
7715    };
7716    if (json.has("detailSequence")) {
7717      JsonArray array = getJArray(json, "detailSequence");
7718      for (int i = 0; i < array.size(); i++) {
7719        if (array.get(i).isJsonNull()) {
7720          res.getDetailSequence().add(new PositiveIntType());
7721        } else {;
7722          res.getDetailSequence().add(parsePositiveInt(array.get(i).getAsString()));
7723        }
7724      }
7725    };
7726    if (json.has("_detailSequence")) {
7727      JsonArray array = getJArray(json, "_detailSequence");
7728      for (int i = 0; i < array.size(); i++) {
7729        if (i == res.getDetailSequence().size())
7730          res.getDetailSequence().add(parsePositiveInt(null));
7731        if (array.get(i) instanceof JsonObject) 
7732          parseElementProperties(array.get(i).getAsJsonObject(), res.getDetailSequence().get(i));
7733      }
7734    };
7735    if (json.has("subdetailSequence")) {
7736      JsonArray array = getJArray(json, "subdetailSequence");
7737      for (int i = 0; i < array.size(); i++) {
7738        if (array.get(i).isJsonNull()) {
7739          res.getSubdetailSequence().add(new PositiveIntType());
7740        } else {;
7741          res.getSubdetailSequence().add(parsePositiveInt(array.get(i).getAsString()));
7742        }
7743      }
7744    };
7745    if (json.has("_subdetailSequence")) {
7746      JsonArray array = getJArray(json, "_subdetailSequence");
7747      for (int i = 0; i < array.size(); i++) {
7748        if (i == res.getSubdetailSequence().size())
7749          res.getSubdetailSequence().add(parsePositiveInt(null));
7750        if (array.get(i) instanceof JsonObject) 
7751          parseElementProperties(array.get(i).getAsJsonObject(), res.getSubdetailSequence().get(i));
7752      }
7753    };
7754    if (json.has("traceNumber")) {
7755      JsonArray array = getJArray(json, "traceNumber");
7756      for (int i = 0; i < array.size(); i++) {
7757        res.getTraceNumber().add(parseIdentifier(array.get(i).getAsJsonObject()));
7758      }
7759    };
7760    if (json.has("provider")) {
7761      JsonArray array = getJArray(json, "provider");
7762      for (int i = 0; i < array.size(); i++) {
7763        res.getProvider().add(parseReference(array.get(i).getAsJsonObject()));
7764      }
7765    };
7766    if (json.has("revenue"))
7767      res.setRevenue(parseCodeableConcept(getJObject(json, "revenue")));
7768    if (json.has("productOrService"))
7769      res.setProductOrService(parseCodeableConcept(getJObject(json, "productOrService")));
7770    if (json.has("productOrServiceEnd"))
7771      res.setProductOrServiceEnd(parseCodeableConcept(getJObject(json, "productOrServiceEnd")));
7772    if (json.has("request")) {
7773      JsonArray array = getJArray(json, "request");
7774      for (int i = 0; i < array.size(); i++) {
7775        res.getRequest().add(parseReference(array.get(i).getAsJsonObject()));
7776      }
7777    };
7778    if (json.has("modifier")) {
7779      JsonArray array = getJArray(json, "modifier");
7780      for (int i = 0; i < array.size(); i++) {
7781        res.getModifier().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
7782      }
7783    };
7784    if (json.has("programCode")) {
7785      JsonArray array = getJArray(json, "programCode");
7786      for (int i = 0; i < array.size(); i++) {
7787        res.getProgramCode().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
7788      }
7789    };
7790    DataType serviced = parseType("serviced", json);
7791    if (serviced != null)
7792      res.setServiced(serviced);
7793    DataType location = parseType("location", json);
7794    if (location != null)
7795      res.setLocation(location);
7796    if (json.has("quantity"))
7797      res.setQuantity(parseQuantity(getJObject(json, "quantity")));
7798    if (json.has("unitPrice"))
7799      res.setUnitPrice(parseMoney(getJObject(json, "unitPrice")));
7800    if (json.has("factor"))
7801      res.setFactorElement(parseDecimal(json.get("factor").getAsBigDecimal()));
7802    if (json.has("_factor"))
7803      parseElementProperties(getJObject(json, "_factor"), res.getFactorElement());
7804    if (json.has("tax"))
7805      res.setTax(parseMoney(getJObject(json, "tax")));
7806    if (json.has("net"))
7807      res.setNet(parseMoney(getJObject(json, "net")));
7808    if (json.has("bodySite")) {
7809      JsonArray array = getJArray(json, "bodySite");
7810      for (int i = 0; i < array.size(); i++) {
7811        res.getBodySite().add(parseClaimResponseBodySiteComponent(array.get(i).getAsJsonObject()));
7812      }
7813    };
7814    if (json.has("noteNumber")) {
7815      JsonArray array = getJArray(json, "noteNumber");
7816      for (int i = 0; i < array.size(); i++) {
7817        if (array.get(i).isJsonNull()) {
7818          res.getNoteNumber().add(new PositiveIntType());
7819        } else {;
7820          res.getNoteNumber().add(parsePositiveInt(array.get(i).getAsString()));
7821        }
7822      }
7823    };
7824    if (json.has("_noteNumber")) {
7825      JsonArray array = getJArray(json, "_noteNumber");
7826      for (int i = 0; i < array.size(); i++) {
7827        if (i == res.getNoteNumber().size())
7828          res.getNoteNumber().add(parsePositiveInt(null));
7829        if (array.get(i) instanceof JsonObject) 
7830          parseElementProperties(array.get(i).getAsJsonObject(), res.getNoteNumber().get(i));
7831      }
7832    };
7833    if (json.has("reviewOutcome"))
7834      res.setReviewOutcome(parseClaimResponseReviewOutcomeComponent(getJObject(json, "reviewOutcome")));
7835    if (json.has("adjudication")) {
7836      JsonArray array = getJArray(json, "adjudication");
7837      for (int i = 0; i < array.size(); i++) {
7838        res.getAdjudication().add(parseClaimResponseAdjudicationComponent(array.get(i).getAsJsonObject()));
7839      }
7840    };
7841    if (json.has("detail")) {
7842      JsonArray array = getJArray(json, "detail");
7843      for (int i = 0; i < array.size(); i++) {
7844        res.getDetail().add(parseClaimResponseAddedItemDetailComponent(array.get(i).getAsJsonObject()));
7845      }
7846    };
7847  }
7848
7849  protected ClaimResponse.BodySiteComponent parseClaimResponseBodySiteComponent(JsonObject json) throws IOException, FHIRFormatError {
7850    ClaimResponse.BodySiteComponent res = new ClaimResponse.BodySiteComponent();
7851    parseClaimResponseBodySiteComponentProperties(json, res);
7852    return res;
7853  }
7854
7855  protected void parseClaimResponseBodySiteComponentProperties(JsonObject json, ClaimResponse.BodySiteComponent res) throws IOException, FHIRFormatError {
7856    parseBackboneElementProperties(json, res);
7857    if (json.has("site")) {
7858      JsonArray array = getJArray(json, "site");
7859      for (int i = 0; i < array.size(); i++) {
7860        res.getSite().add(parseCodeableReference(array.get(i).getAsJsonObject()));
7861      }
7862    };
7863    if (json.has("subSite")) {
7864      JsonArray array = getJArray(json, "subSite");
7865      for (int i = 0; i < array.size(); i++) {
7866        res.getSubSite().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
7867      }
7868    };
7869  }
7870
7871  protected ClaimResponse.AddedItemDetailComponent parseClaimResponseAddedItemDetailComponent(JsonObject json) throws IOException, FHIRFormatError {
7872    ClaimResponse.AddedItemDetailComponent res = new ClaimResponse.AddedItemDetailComponent();
7873    parseClaimResponseAddedItemDetailComponentProperties(json, res);
7874    return res;
7875  }
7876
7877  protected void parseClaimResponseAddedItemDetailComponentProperties(JsonObject json, ClaimResponse.AddedItemDetailComponent res) throws IOException, FHIRFormatError {
7878    parseBackboneElementProperties(json, res);
7879    if (json.has("traceNumber")) {
7880      JsonArray array = getJArray(json, "traceNumber");
7881      for (int i = 0; i < array.size(); i++) {
7882        res.getTraceNumber().add(parseIdentifier(array.get(i).getAsJsonObject()));
7883      }
7884    };
7885    if (json.has("revenue"))
7886      res.setRevenue(parseCodeableConcept(getJObject(json, "revenue")));
7887    if (json.has("productOrService"))
7888      res.setProductOrService(parseCodeableConcept(getJObject(json, "productOrService")));
7889    if (json.has("productOrServiceEnd"))
7890      res.setProductOrServiceEnd(parseCodeableConcept(getJObject(json, "productOrServiceEnd")));
7891    if (json.has("modifier")) {
7892      JsonArray array = getJArray(json, "modifier");
7893      for (int i = 0; i < array.size(); i++) {
7894        res.getModifier().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
7895      }
7896    };
7897    if (json.has("quantity"))
7898      res.setQuantity(parseQuantity(getJObject(json, "quantity")));
7899    if (json.has("unitPrice"))
7900      res.setUnitPrice(parseMoney(getJObject(json, "unitPrice")));
7901    if (json.has("factor"))
7902      res.setFactorElement(parseDecimal(json.get("factor").getAsBigDecimal()));
7903    if (json.has("_factor"))
7904      parseElementProperties(getJObject(json, "_factor"), res.getFactorElement());
7905    if (json.has("tax"))
7906      res.setTax(parseMoney(getJObject(json, "tax")));
7907    if (json.has("net"))
7908      res.setNet(parseMoney(getJObject(json, "net")));
7909    if (json.has("noteNumber")) {
7910      JsonArray array = getJArray(json, "noteNumber");
7911      for (int i = 0; i < array.size(); i++) {
7912        if (array.get(i).isJsonNull()) {
7913          res.getNoteNumber().add(new PositiveIntType());
7914        } else {;
7915          res.getNoteNumber().add(parsePositiveInt(array.get(i).getAsString()));
7916        }
7917      }
7918    };
7919    if (json.has("_noteNumber")) {
7920      JsonArray array = getJArray(json, "_noteNumber");
7921      for (int i = 0; i < array.size(); i++) {
7922        if (i == res.getNoteNumber().size())
7923          res.getNoteNumber().add(parsePositiveInt(null));
7924        if (array.get(i) instanceof JsonObject) 
7925          parseElementProperties(array.get(i).getAsJsonObject(), res.getNoteNumber().get(i));
7926      }
7927    };
7928    if (json.has("reviewOutcome"))
7929      res.setReviewOutcome(parseClaimResponseReviewOutcomeComponent(getJObject(json, "reviewOutcome")));
7930    if (json.has("adjudication")) {
7931      JsonArray array = getJArray(json, "adjudication");
7932      for (int i = 0; i < array.size(); i++) {
7933        res.getAdjudication().add(parseClaimResponseAdjudicationComponent(array.get(i).getAsJsonObject()));
7934      }
7935    };
7936    if (json.has("subDetail")) {
7937      JsonArray array = getJArray(json, "subDetail");
7938      for (int i = 0; i < array.size(); i++) {
7939        res.getSubDetail().add(parseClaimResponseAddedItemSubDetailComponent(array.get(i).getAsJsonObject()));
7940      }
7941    };
7942  }
7943
7944  protected ClaimResponse.AddedItemSubDetailComponent parseClaimResponseAddedItemSubDetailComponent(JsonObject json) throws IOException, FHIRFormatError {
7945    ClaimResponse.AddedItemSubDetailComponent res = new ClaimResponse.AddedItemSubDetailComponent();
7946    parseClaimResponseAddedItemSubDetailComponentProperties(json, res);
7947    return res;
7948  }
7949
7950  protected void parseClaimResponseAddedItemSubDetailComponentProperties(JsonObject json, ClaimResponse.AddedItemSubDetailComponent res) throws IOException, FHIRFormatError {
7951    parseBackboneElementProperties(json, res);
7952    if (json.has("traceNumber")) {
7953      JsonArray array = getJArray(json, "traceNumber");
7954      for (int i = 0; i < array.size(); i++) {
7955        res.getTraceNumber().add(parseIdentifier(array.get(i).getAsJsonObject()));
7956      }
7957    };
7958    if (json.has("revenue"))
7959      res.setRevenue(parseCodeableConcept(getJObject(json, "revenue")));
7960    if (json.has("productOrService"))
7961      res.setProductOrService(parseCodeableConcept(getJObject(json, "productOrService")));
7962    if (json.has("productOrServiceEnd"))
7963      res.setProductOrServiceEnd(parseCodeableConcept(getJObject(json, "productOrServiceEnd")));
7964    if (json.has("modifier")) {
7965      JsonArray array = getJArray(json, "modifier");
7966      for (int i = 0; i < array.size(); i++) {
7967        res.getModifier().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
7968      }
7969    };
7970    if (json.has("quantity"))
7971      res.setQuantity(parseQuantity(getJObject(json, "quantity")));
7972    if (json.has("unitPrice"))
7973      res.setUnitPrice(parseMoney(getJObject(json, "unitPrice")));
7974    if (json.has("factor"))
7975      res.setFactorElement(parseDecimal(json.get("factor").getAsBigDecimal()));
7976    if (json.has("_factor"))
7977      parseElementProperties(getJObject(json, "_factor"), res.getFactorElement());
7978    if (json.has("tax"))
7979      res.setTax(parseMoney(getJObject(json, "tax")));
7980    if (json.has("net"))
7981      res.setNet(parseMoney(getJObject(json, "net")));
7982    if (json.has("noteNumber")) {
7983      JsonArray array = getJArray(json, "noteNumber");
7984      for (int i = 0; i < array.size(); i++) {
7985        if (array.get(i).isJsonNull()) {
7986          res.getNoteNumber().add(new PositiveIntType());
7987        } else {;
7988          res.getNoteNumber().add(parsePositiveInt(array.get(i).getAsString()));
7989        }
7990      }
7991    };
7992    if (json.has("_noteNumber")) {
7993      JsonArray array = getJArray(json, "_noteNumber");
7994      for (int i = 0; i < array.size(); i++) {
7995        if (i == res.getNoteNumber().size())
7996          res.getNoteNumber().add(parsePositiveInt(null));
7997        if (array.get(i) instanceof JsonObject) 
7998          parseElementProperties(array.get(i).getAsJsonObject(), res.getNoteNumber().get(i));
7999      }
8000    };
8001    if (json.has("reviewOutcome"))
8002      res.setReviewOutcome(parseClaimResponseReviewOutcomeComponent(getJObject(json, "reviewOutcome")));
8003    if (json.has("adjudication")) {
8004      JsonArray array = getJArray(json, "adjudication");
8005      for (int i = 0; i < array.size(); i++) {
8006        res.getAdjudication().add(parseClaimResponseAdjudicationComponent(array.get(i).getAsJsonObject()));
8007      }
8008    };
8009  }
8010
8011  protected ClaimResponse.TotalComponent parseClaimResponseTotalComponent(JsonObject json) throws IOException, FHIRFormatError {
8012    ClaimResponse.TotalComponent res = new ClaimResponse.TotalComponent();
8013    parseClaimResponseTotalComponentProperties(json, res);
8014    return res;
8015  }
8016
8017  protected void parseClaimResponseTotalComponentProperties(JsonObject json, ClaimResponse.TotalComponent res) throws IOException, FHIRFormatError {
8018    parseBackboneElementProperties(json, res);
8019    if (json.has("category"))
8020      res.setCategory(parseCodeableConcept(getJObject(json, "category")));
8021    if (json.has("amount"))
8022      res.setAmount(parseMoney(getJObject(json, "amount")));
8023  }
8024
8025  protected ClaimResponse.PaymentComponent parseClaimResponsePaymentComponent(JsonObject json) throws IOException, FHIRFormatError {
8026    ClaimResponse.PaymentComponent res = new ClaimResponse.PaymentComponent();
8027    parseClaimResponsePaymentComponentProperties(json, res);
8028    return res;
8029  }
8030
8031  protected void parseClaimResponsePaymentComponentProperties(JsonObject json, ClaimResponse.PaymentComponent res) throws IOException, FHIRFormatError {
8032    parseBackboneElementProperties(json, res);
8033    if (json.has("type"))
8034      res.setType(parseCodeableConcept(getJObject(json, "type")));
8035    if (json.has("adjustment"))
8036      res.setAdjustment(parseMoney(getJObject(json, "adjustment")));
8037    if (json.has("adjustmentReason"))
8038      res.setAdjustmentReason(parseCodeableConcept(getJObject(json, "adjustmentReason")));
8039    if (json.has("date"))
8040      res.setDateElement(parseDate(json.get("date").getAsString()));
8041    if (json.has("_date"))
8042      parseElementProperties(getJObject(json, "_date"), res.getDateElement());
8043    if (json.has("amount"))
8044      res.setAmount(parseMoney(getJObject(json, "amount")));
8045    if (json.has("identifier"))
8046      res.setIdentifier(parseIdentifier(getJObject(json, "identifier")));
8047  }
8048
8049  protected ClaimResponse.NoteComponent parseClaimResponseNoteComponent(JsonObject json) throws IOException, FHIRFormatError {
8050    ClaimResponse.NoteComponent res = new ClaimResponse.NoteComponent();
8051    parseClaimResponseNoteComponentProperties(json, res);
8052    return res;
8053  }
8054
8055  protected void parseClaimResponseNoteComponentProperties(JsonObject json, ClaimResponse.NoteComponent res) throws IOException, FHIRFormatError {
8056    parseBackboneElementProperties(json, res);
8057    if (json.has("number"))
8058      res.setNumberElement(parsePositiveInt(json.get("number").getAsString()));
8059    if (json.has("_number"))
8060      parseElementProperties(getJObject(json, "_number"), res.getNumberElement());
8061    if (json.has("type"))
8062      res.setType(parseCodeableConcept(getJObject(json, "type")));
8063    if (json.has("text"))
8064      res.setTextElement(parseString(json.get("text").getAsString()));
8065    if (json.has("_text"))
8066      parseElementProperties(getJObject(json, "_text"), res.getTextElement());
8067    if (json.has("language"))
8068      res.setLanguage(parseCodeableConcept(getJObject(json, "language")));
8069  }
8070
8071  protected ClaimResponse.InsuranceComponent parseClaimResponseInsuranceComponent(JsonObject json) throws IOException, FHIRFormatError {
8072    ClaimResponse.InsuranceComponent res = new ClaimResponse.InsuranceComponent();
8073    parseClaimResponseInsuranceComponentProperties(json, res);
8074    return res;
8075  }
8076
8077  protected void parseClaimResponseInsuranceComponentProperties(JsonObject json, ClaimResponse.InsuranceComponent res) throws IOException, FHIRFormatError {
8078    parseBackboneElementProperties(json, res);
8079    if (json.has("sequence"))
8080      res.setSequenceElement(parsePositiveInt(json.get("sequence").getAsString()));
8081    if (json.has("_sequence"))
8082      parseElementProperties(getJObject(json, "_sequence"), res.getSequenceElement());
8083    if (json.has("focal"))
8084      res.setFocalElement(parseBoolean(json.get("focal").getAsBoolean()));
8085    if (json.has("_focal"))
8086      parseElementProperties(getJObject(json, "_focal"), res.getFocalElement());
8087    if (json.has("coverage"))
8088      res.setCoverage(parseReference(getJObject(json, "coverage")));
8089    if (json.has("businessArrangement"))
8090      res.setBusinessArrangementElement(parseString(json.get("businessArrangement").getAsString()));
8091    if (json.has("_businessArrangement"))
8092      parseElementProperties(getJObject(json, "_businessArrangement"), res.getBusinessArrangementElement());
8093    if (json.has("claimResponse"))
8094      res.setClaimResponse(parseReference(getJObject(json, "claimResponse")));
8095  }
8096
8097  protected ClaimResponse.ErrorComponent parseClaimResponseErrorComponent(JsonObject json) throws IOException, FHIRFormatError {
8098    ClaimResponse.ErrorComponent res = new ClaimResponse.ErrorComponent();
8099    parseClaimResponseErrorComponentProperties(json, res);
8100    return res;
8101  }
8102
8103  protected void parseClaimResponseErrorComponentProperties(JsonObject json, ClaimResponse.ErrorComponent res) throws IOException, FHIRFormatError {
8104    parseBackboneElementProperties(json, res);
8105    if (json.has("itemSequence"))
8106      res.setItemSequenceElement(parsePositiveInt(json.get("itemSequence").getAsString()));
8107    if (json.has("_itemSequence"))
8108      parseElementProperties(getJObject(json, "_itemSequence"), res.getItemSequenceElement());
8109    if (json.has("detailSequence"))
8110      res.setDetailSequenceElement(parsePositiveInt(json.get("detailSequence").getAsString()));
8111    if (json.has("_detailSequence"))
8112      parseElementProperties(getJObject(json, "_detailSequence"), res.getDetailSequenceElement());
8113    if (json.has("subDetailSequence"))
8114      res.setSubDetailSequenceElement(parsePositiveInt(json.get("subDetailSequence").getAsString()));
8115    if (json.has("_subDetailSequence"))
8116      parseElementProperties(getJObject(json, "_subDetailSequence"), res.getSubDetailSequenceElement());
8117    if (json.has("code"))
8118      res.setCode(parseCodeableConcept(getJObject(json, "code")));
8119    if (json.has("expression")) {
8120      JsonArray array = getJArray(json, "expression");
8121      for (int i = 0; i < array.size(); i++) {
8122        if (array.get(i).isJsonNull()) {
8123          res.getExpression().add(new StringType());
8124        } else {;
8125          res.getExpression().add(parseString(array.get(i).getAsString()));
8126        }
8127      }
8128    };
8129    if (json.has("_expression")) {
8130      JsonArray array = getJArray(json, "_expression");
8131      for (int i = 0; i < array.size(); i++) {
8132        if (i == res.getExpression().size())
8133          res.getExpression().add(parseString(null));
8134        if (array.get(i) instanceof JsonObject) 
8135          parseElementProperties(array.get(i).getAsJsonObject(), res.getExpression().get(i));
8136      }
8137    };
8138  }
8139
8140  protected ClinicalImpression parseClinicalImpression(JsonObject json) throws IOException, FHIRFormatError {
8141    ClinicalImpression res = new ClinicalImpression();
8142    parseClinicalImpressionProperties(json, res);
8143    return res;
8144  }
8145
8146  protected void parseClinicalImpressionProperties(JsonObject json, ClinicalImpression res) throws IOException, FHIRFormatError {
8147    parseDomainResourceProperties(json, res);
8148    if (json.has("identifier")) {
8149      JsonArray array = getJArray(json, "identifier");
8150      for (int i = 0; i < array.size(); i++) {
8151        res.getIdentifier().add(parseIdentifier(array.get(i).getAsJsonObject()));
8152      }
8153    };
8154    if (json.has("status"))
8155      res.setStatusElement(parseEnumeration(json.get("status").getAsString(), Enumerations.EventStatus.NULL, new Enumerations.EventStatusEnumFactory()));
8156    if (json.has("_status"))
8157      parseElementProperties(getJObject(json, "_status"), res.getStatusElement());
8158    if (json.has("statusReason"))
8159      res.setStatusReason(parseCodeableConcept(getJObject(json, "statusReason")));
8160    if (json.has("description"))
8161      res.setDescriptionElement(parseString(json.get("description").getAsString()));
8162    if (json.has("_description"))
8163      parseElementProperties(getJObject(json, "_description"), res.getDescriptionElement());
8164    if (json.has("subject"))
8165      res.setSubject(parseReference(getJObject(json, "subject")));
8166    if (json.has("encounter"))
8167      res.setEncounter(parseReference(getJObject(json, "encounter")));
8168    DataType effective = parseType("effective", json);
8169    if (effective != null)
8170      res.setEffective(effective);
8171    if (json.has("date"))
8172      res.setDateElement(parseDateTime(json.get("date").getAsString()));
8173    if (json.has("_date"))
8174      parseElementProperties(getJObject(json, "_date"), res.getDateElement());
8175    if (json.has("performer"))
8176      res.setPerformer(parseReference(getJObject(json, "performer")));
8177    if (json.has("previous"))
8178      res.setPrevious(parseReference(getJObject(json, "previous")));
8179    if (json.has("problem")) {
8180      JsonArray array = getJArray(json, "problem");
8181      for (int i = 0; i < array.size(); i++) {
8182        res.getProblem().add(parseReference(array.get(i).getAsJsonObject()));
8183      }
8184    };
8185    if (json.has("changePattern"))
8186      res.setChangePattern(parseCodeableConcept(getJObject(json, "changePattern")));
8187    if (json.has("protocol")) {
8188      JsonArray array = getJArray(json, "protocol");
8189      for (int i = 0; i < array.size(); i++) {
8190        if (array.get(i).isJsonNull()) {
8191          res.getProtocol().add(new UriType());
8192        } else {;
8193          res.getProtocol().add(parseUri(array.get(i).getAsString()));
8194        }
8195      }
8196    };
8197    if (json.has("_protocol")) {
8198      JsonArray array = getJArray(json, "_protocol");
8199      for (int i = 0; i < array.size(); i++) {
8200        if (i == res.getProtocol().size())
8201          res.getProtocol().add(parseUri(null));
8202        if (array.get(i) instanceof JsonObject) 
8203          parseElementProperties(array.get(i).getAsJsonObject(), res.getProtocol().get(i));
8204      }
8205    };
8206    if (json.has("summary"))
8207      res.setSummaryElement(parseString(json.get("summary").getAsString()));
8208    if (json.has("_summary"))
8209      parseElementProperties(getJObject(json, "_summary"), res.getSummaryElement());
8210    if (json.has("finding")) {
8211      JsonArray array = getJArray(json, "finding");
8212      for (int i = 0; i < array.size(); i++) {
8213        res.getFinding().add(parseClinicalImpressionFindingComponent(array.get(i).getAsJsonObject()));
8214      }
8215    };
8216    if (json.has("prognosisCodeableConcept")) {
8217      JsonArray array = getJArray(json, "prognosisCodeableConcept");
8218      for (int i = 0; i < array.size(); i++) {
8219        res.getPrognosisCodeableConcept().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
8220      }
8221    };
8222    if (json.has("prognosisReference")) {
8223      JsonArray array = getJArray(json, "prognosisReference");
8224      for (int i = 0; i < array.size(); i++) {
8225        res.getPrognosisReference().add(parseReference(array.get(i).getAsJsonObject()));
8226      }
8227    };
8228    if (json.has("supportingInfo")) {
8229      JsonArray array = getJArray(json, "supportingInfo");
8230      for (int i = 0; i < array.size(); i++) {
8231        res.getSupportingInfo().add(parseReference(array.get(i).getAsJsonObject()));
8232      }
8233    };
8234    if (json.has("note")) {
8235      JsonArray array = getJArray(json, "note");
8236      for (int i = 0; i < array.size(); i++) {
8237        res.getNote().add(parseAnnotation(array.get(i).getAsJsonObject()));
8238      }
8239    };
8240  }
8241
8242  protected ClinicalImpression.ClinicalImpressionFindingComponent parseClinicalImpressionFindingComponent(JsonObject json) throws IOException, FHIRFormatError {
8243    ClinicalImpression.ClinicalImpressionFindingComponent res = new ClinicalImpression.ClinicalImpressionFindingComponent();
8244    parseClinicalImpressionFindingComponentProperties(json, res);
8245    return res;
8246  }
8247
8248  protected void parseClinicalImpressionFindingComponentProperties(JsonObject json, ClinicalImpression.ClinicalImpressionFindingComponent res) throws IOException, FHIRFormatError {
8249    parseBackboneElementProperties(json, res);
8250    if (json.has("item"))
8251      res.setItem(parseCodeableReference(getJObject(json, "item")));
8252    if (json.has("basis"))
8253      res.setBasisElement(parseString(json.get("basis").getAsString()));
8254    if (json.has("_basis"))
8255      parseElementProperties(getJObject(json, "_basis"), res.getBasisElement());
8256  }
8257
8258  protected ClinicalUseDefinition parseClinicalUseDefinition(JsonObject json) throws IOException, FHIRFormatError {
8259    ClinicalUseDefinition res = new ClinicalUseDefinition();
8260    parseClinicalUseDefinitionProperties(json, res);
8261    return res;
8262  }
8263
8264  protected void parseClinicalUseDefinitionProperties(JsonObject json, ClinicalUseDefinition res) throws IOException, FHIRFormatError {
8265    parseDomainResourceProperties(json, res);
8266    if (json.has("identifier")) {
8267      JsonArray array = getJArray(json, "identifier");
8268      for (int i = 0; i < array.size(); i++) {
8269        res.getIdentifier().add(parseIdentifier(array.get(i).getAsJsonObject()));
8270      }
8271    };
8272    if (json.has("type"))
8273      res.setTypeElement(parseEnumeration(json.get("type").getAsString(), ClinicalUseDefinition.ClinicalUseDefinitionType.NULL, new ClinicalUseDefinition.ClinicalUseDefinitionTypeEnumFactory()));
8274    if (json.has("_type"))
8275      parseElementProperties(getJObject(json, "_type"), res.getTypeElement());
8276    if (json.has("category")) {
8277      JsonArray array = getJArray(json, "category");
8278      for (int i = 0; i < array.size(); i++) {
8279        res.getCategory().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
8280      }
8281    };
8282    if (json.has("subject")) {
8283      JsonArray array = getJArray(json, "subject");
8284      for (int i = 0; i < array.size(); i++) {
8285        res.getSubject().add(parseReference(array.get(i).getAsJsonObject()));
8286      }
8287    };
8288    if (json.has("status"))
8289      res.setStatus(parseCodeableConcept(getJObject(json, "status")));
8290    if (json.has("contraindication"))
8291      res.setContraindication(parseClinicalUseDefinitionContraindicationComponent(getJObject(json, "contraindication")));
8292    if (json.has("indication"))
8293      res.setIndication(parseClinicalUseDefinitionIndicationComponent(getJObject(json, "indication")));
8294    if (json.has("interaction"))
8295      res.setInteraction(parseClinicalUseDefinitionInteractionComponent(getJObject(json, "interaction")));
8296    if (json.has("population")) {
8297      JsonArray array = getJArray(json, "population");
8298      for (int i = 0; i < array.size(); i++) {
8299        res.getPopulation().add(parseReference(array.get(i).getAsJsonObject()));
8300      }
8301    };
8302    if (json.has("library")) {
8303      JsonArray array = getJArray(json, "library");
8304      for (int i = 0; i < array.size(); i++) {
8305        if (array.get(i).isJsonNull()) {
8306          res.getLibrary().add(new CanonicalType());
8307        } else {;
8308          res.getLibrary().add(parseCanonical(array.get(i).getAsString()));
8309        }
8310      }
8311    };
8312    if (json.has("_library")) {
8313      JsonArray array = getJArray(json, "_library");
8314      for (int i = 0; i < array.size(); i++) {
8315        if (i == res.getLibrary().size())
8316          res.getLibrary().add(parseCanonical(null));
8317        if (array.get(i) instanceof JsonObject) 
8318          parseElementProperties(array.get(i).getAsJsonObject(), res.getLibrary().get(i));
8319      }
8320    };
8321    if (json.has("undesirableEffect"))
8322      res.setUndesirableEffect(parseClinicalUseDefinitionUndesirableEffectComponent(getJObject(json, "undesirableEffect")));
8323    if (json.has("warning"))
8324      res.setWarning(parseClinicalUseDefinitionWarningComponent(getJObject(json, "warning")));
8325  }
8326
8327  protected ClinicalUseDefinition.ClinicalUseDefinitionContraindicationComponent parseClinicalUseDefinitionContraindicationComponent(JsonObject json) throws IOException, FHIRFormatError {
8328    ClinicalUseDefinition.ClinicalUseDefinitionContraindicationComponent res = new ClinicalUseDefinition.ClinicalUseDefinitionContraindicationComponent();
8329    parseClinicalUseDefinitionContraindicationComponentProperties(json, res);
8330    return res;
8331  }
8332
8333  protected void parseClinicalUseDefinitionContraindicationComponentProperties(JsonObject json, ClinicalUseDefinition.ClinicalUseDefinitionContraindicationComponent res) throws IOException, FHIRFormatError {
8334    parseBackboneElementProperties(json, res);
8335    if (json.has("diseaseSymptomProcedure"))
8336      res.setDiseaseSymptomProcedure(parseCodeableReference(getJObject(json, "diseaseSymptomProcedure")));
8337    if (json.has("diseaseStatus"))
8338      res.setDiseaseStatus(parseCodeableReference(getJObject(json, "diseaseStatus")));
8339    if (json.has("comorbidity")) {
8340      JsonArray array = getJArray(json, "comorbidity");
8341      for (int i = 0; i < array.size(); i++) {
8342        res.getComorbidity().add(parseCodeableReference(array.get(i).getAsJsonObject()));
8343      }
8344    };
8345    if (json.has("indication")) {
8346      JsonArray array = getJArray(json, "indication");
8347      for (int i = 0; i < array.size(); i++) {
8348        res.getIndication().add(parseReference(array.get(i).getAsJsonObject()));
8349      }
8350    };
8351    if (json.has("applicability"))
8352      res.setApplicability(parseExpression(getJObject(json, "applicability")));
8353    if (json.has("otherTherapy")) {
8354      JsonArray array = getJArray(json, "otherTherapy");
8355      for (int i = 0; i < array.size(); i++) {
8356        res.getOtherTherapy().add(parseClinicalUseDefinitionContraindicationOtherTherapyComponent(array.get(i).getAsJsonObject()));
8357      }
8358    };
8359  }
8360
8361  protected ClinicalUseDefinition.ClinicalUseDefinitionContraindicationOtherTherapyComponent parseClinicalUseDefinitionContraindicationOtherTherapyComponent(JsonObject json) throws IOException, FHIRFormatError {
8362    ClinicalUseDefinition.ClinicalUseDefinitionContraindicationOtherTherapyComponent res = new ClinicalUseDefinition.ClinicalUseDefinitionContraindicationOtherTherapyComponent();
8363    parseClinicalUseDefinitionContraindicationOtherTherapyComponentProperties(json, res);
8364    return res;
8365  }
8366
8367  protected void parseClinicalUseDefinitionContraindicationOtherTherapyComponentProperties(JsonObject json, ClinicalUseDefinition.ClinicalUseDefinitionContraindicationOtherTherapyComponent res) throws IOException, FHIRFormatError {
8368    parseBackboneElementProperties(json, res);
8369    if (json.has("relationshipType"))
8370      res.setRelationshipType(parseCodeableConcept(getJObject(json, "relationshipType")));
8371    if (json.has("treatment"))
8372      res.setTreatment(parseCodeableReference(getJObject(json, "treatment")));
8373  }
8374
8375  protected ClinicalUseDefinition.ClinicalUseDefinitionIndicationComponent parseClinicalUseDefinitionIndicationComponent(JsonObject json) throws IOException, FHIRFormatError {
8376    ClinicalUseDefinition.ClinicalUseDefinitionIndicationComponent res = new ClinicalUseDefinition.ClinicalUseDefinitionIndicationComponent();
8377    parseClinicalUseDefinitionIndicationComponentProperties(json, res);
8378    return res;
8379  }
8380
8381  protected void parseClinicalUseDefinitionIndicationComponentProperties(JsonObject json, ClinicalUseDefinition.ClinicalUseDefinitionIndicationComponent res) throws IOException, FHIRFormatError {
8382    parseBackboneElementProperties(json, res);
8383    if (json.has("diseaseSymptomProcedure"))
8384      res.setDiseaseSymptomProcedure(parseCodeableReference(getJObject(json, "diseaseSymptomProcedure")));
8385    if (json.has("diseaseStatus"))
8386      res.setDiseaseStatus(parseCodeableReference(getJObject(json, "diseaseStatus")));
8387    if (json.has("comorbidity")) {
8388      JsonArray array = getJArray(json, "comorbidity");
8389      for (int i = 0; i < array.size(); i++) {
8390        res.getComorbidity().add(parseCodeableReference(array.get(i).getAsJsonObject()));
8391      }
8392    };
8393    if (json.has("intendedEffect"))
8394      res.setIntendedEffect(parseCodeableReference(getJObject(json, "intendedEffect")));
8395    DataType duration = parseType("duration", json);
8396    if (duration != null)
8397      res.setDuration(duration);
8398    if (json.has("undesirableEffect")) {
8399      JsonArray array = getJArray(json, "undesirableEffect");
8400      for (int i = 0; i < array.size(); i++) {
8401        res.getUndesirableEffect().add(parseReference(array.get(i).getAsJsonObject()));
8402      }
8403    };
8404    if (json.has("applicability"))
8405      res.setApplicability(parseExpression(getJObject(json, "applicability")));
8406    if (json.has("otherTherapy")) {
8407      JsonArray array = getJArray(json, "otherTherapy");
8408      for (int i = 0; i < array.size(); i++) {
8409        res.getOtherTherapy().add(parseClinicalUseDefinitionContraindicationOtherTherapyComponent(array.get(i).getAsJsonObject()));
8410      }
8411    };
8412  }
8413
8414  protected ClinicalUseDefinition.ClinicalUseDefinitionInteractionComponent parseClinicalUseDefinitionInteractionComponent(JsonObject json) throws IOException, FHIRFormatError {
8415    ClinicalUseDefinition.ClinicalUseDefinitionInteractionComponent res = new ClinicalUseDefinition.ClinicalUseDefinitionInteractionComponent();
8416    parseClinicalUseDefinitionInteractionComponentProperties(json, res);
8417    return res;
8418  }
8419
8420  protected void parseClinicalUseDefinitionInteractionComponentProperties(JsonObject json, ClinicalUseDefinition.ClinicalUseDefinitionInteractionComponent res) throws IOException, FHIRFormatError {
8421    parseBackboneElementProperties(json, res);
8422    if (json.has("interactant")) {
8423      JsonArray array = getJArray(json, "interactant");
8424      for (int i = 0; i < array.size(); i++) {
8425        res.getInteractant().add(parseClinicalUseDefinitionInteractionInteractantComponent(array.get(i).getAsJsonObject()));
8426      }
8427    };
8428    if (json.has("type"))
8429      res.setType(parseCodeableConcept(getJObject(json, "type")));
8430    if (json.has("effect"))
8431      res.setEffect(parseCodeableReference(getJObject(json, "effect")));
8432    if (json.has("incidence"))
8433      res.setIncidence(parseCodeableConcept(getJObject(json, "incidence")));
8434    if (json.has("management")) {
8435      JsonArray array = getJArray(json, "management");
8436      for (int i = 0; i < array.size(); i++) {
8437        res.getManagement().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
8438      }
8439    };
8440  }
8441
8442  protected ClinicalUseDefinition.ClinicalUseDefinitionInteractionInteractantComponent parseClinicalUseDefinitionInteractionInteractantComponent(JsonObject json) throws IOException, FHIRFormatError {
8443    ClinicalUseDefinition.ClinicalUseDefinitionInteractionInteractantComponent res = new ClinicalUseDefinition.ClinicalUseDefinitionInteractionInteractantComponent();
8444    parseClinicalUseDefinitionInteractionInteractantComponentProperties(json, res);
8445    return res;
8446  }
8447
8448  protected void parseClinicalUseDefinitionInteractionInteractantComponentProperties(JsonObject json, ClinicalUseDefinition.ClinicalUseDefinitionInteractionInteractantComponent res) throws IOException, FHIRFormatError {
8449    parseBackboneElementProperties(json, res);
8450    DataType item = parseType("item", json);
8451    if (item != null)
8452      res.setItem(item);
8453  }
8454
8455  protected ClinicalUseDefinition.ClinicalUseDefinitionUndesirableEffectComponent parseClinicalUseDefinitionUndesirableEffectComponent(JsonObject json) throws IOException, FHIRFormatError {
8456    ClinicalUseDefinition.ClinicalUseDefinitionUndesirableEffectComponent res = new ClinicalUseDefinition.ClinicalUseDefinitionUndesirableEffectComponent();
8457    parseClinicalUseDefinitionUndesirableEffectComponentProperties(json, res);
8458    return res;
8459  }
8460
8461  protected void parseClinicalUseDefinitionUndesirableEffectComponentProperties(JsonObject json, ClinicalUseDefinition.ClinicalUseDefinitionUndesirableEffectComponent res) throws IOException, FHIRFormatError {
8462    parseBackboneElementProperties(json, res);
8463    if (json.has("symptomConditionEffect"))
8464      res.setSymptomConditionEffect(parseCodeableReference(getJObject(json, "symptomConditionEffect")));
8465    if (json.has("classification"))
8466      res.setClassification(parseCodeableConcept(getJObject(json, "classification")));
8467    if (json.has("frequencyOfOccurrence"))
8468      res.setFrequencyOfOccurrence(parseCodeableConcept(getJObject(json, "frequencyOfOccurrence")));
8469  }
8470
8471  protected ClinicalUseDefinition.ClinicalUseDefinitionWarningComponent parseClinicalUseDefinitionWarningComponent(JsonObject json) throws IOException, FHIRFormatError {
8472    ClinicalUseDefinition.ClinicalUseDefinitionWarningComponent res = new ClinicalUseDefinition.ClinicalUseDefinitionWarningComponent();
8473    parseClinicalUseDefinitionWarningComponentProperties(json, res);
8474    return res;
8475  }
8476
8477  protected void parseClinicalUseDefinitionWarningComponentProperties(JsonObject json, ClinicalUseDefinition.ClinicalUseDefinitionWarningComponent res) throws IOException, FHIRFormatError {
8478    parseBackboneElementProperties(json, res);
8479    if (json.has("description"))
8480      res.setDescriptionElement(parseMarkdown(json.get("description").getAsString()));
8481    if (json.has("_description"))
8482      parseElementProperties(getJObject(json, "_description"), res.getDescriptionElement());
8483    if (json.has("code"))
8484      res.setCode(parseCodeableConcept(getJObject(json, "code")));
8485  }
8486
8487  protected CodeSystem parseCodeSystem(JsonObject json) throws IOException, FHIRFormatError {
8488    CodeSystem res = new CodeSystem();
8489    parseCodeSystemProperties(json, res);
8490    return res;
8491  }
8492
8493  protected void parseCodeSystemProperties(JsonObject json, CodeSystem res) throws IOException, FHIRFormatError {
8494    parseMetadataResourceProperties(json, res);
8495    if (json.has("url"))
8496      res.setUrlElement(parseUri(json.get("url").getAsString()));
8497    if (json.has("_url"))
8498      parseElementProperties(getJObject(json, "_url"), res.getUrlElement());
8499    if (json.has("identifier")) {
8500      JsonArray array = getJArray(json, "identifier");
8501      for (int i = 0; i < array.size(); i++) {
8502        res.getIdentifier().add(parseIdentifier(array.get(i).getAsJsonObject()));
8503      }
8504    };
8505    if (json.has("version"))
8506      res.setVersionElement(parseString(json.get("version").getAsString()));
8507    if (json.has("_version"))
8508      parseElementProperties(getJObject(json, "_version"), res.getVersionElement());
8509    DataType versionAlgorithm = parseType("versionAlgorithm", json);
8510    if (versionAlgorithm != null)
8511      res.setVersionAlgorithm(versionAlgorithm);
8512    if (json.has("name"))
8513      res.setNameElement(parseString(json.get("name").getAsString()));
8514    if (json.has("_name"))
8515      parseElementProperties(getJObject(json, "_name"), res.getNameElement());
8516    if (json.has("title"))
8517      res.setTitleElement(parseString(json.get("title").getAsString()));
8518    if (json.has("_title"))
8519      parseElementProperties(getJObject(json, "_title"), res.getTitleElement());
8520    if (json.has("status"))
8521      res.setStatusElement(parseEnumeration(json.get("status").getAsString(), Enumerations.PublicationStatus.NULL, new Enumerations.PublicationStatusEnumFactory()));
8522    if (json.has("_status"))
8523      parseElementProperties(getJObject(json, "_status"), res.getStatusElement());
8524    if (json.has("experimental"))
8525      res.setExperimentalElement(parseBoolean(json.get("experimental").getAsBoolean()));
8526    if (json.has("_experimental"))
8527      parseElementProperties(getJObject(json, "_experimental"), res.getExperimentalElement());
8528    if (json.has("date"))
8529      res.setDateElement(parseDateTime(json.get("date").getAsString()));
8530    if (json.has("_date"))
8531      parseElementProperties(getJObject(json, "_date"), res.getDateElement());
8532    if (json.has("publisher"))
8533      res.setPublisherElement(parseString(json.get("publisher").getAsString()));
8534    if (json.has("_publisher"))
8535      parseElementProperties(getJObject(json, "_publisher"), res.getPublisherElement());
8536    if (json.has("contact")) {
8537      JsonArray array = getJArray(json, "contact");
8538      for (int i = 0; i < array.size(); i++) {
8539        res.getContact().add(parseContactDetail(array.get(i).getAsJsonObject()));
8540      }
8541    };
8542    if (json.has("description"))
8543      res.setDescriptionElement(parseMarkdown(json.get("description").getAsString()));
8544    if (json.has("_description"))
8545      parseElementProperties(getJObject(json, "_description"), res.getDescriptionElement());
8546    if (json.has("useContext")) {
8547      JsonArray array = getJArray(json, "useContext");
8548      for (int i = 0; i < array.size(); i++) {
8549        res.getUseContext().add(parseUsageContext(array.get(i).getAsJsonObject()));
8550      }
8551    };
8552    if (json.has("jurisdiction")) {
8553      JsonArray array = getJArray(json, "jurisdiction");
8554      for (int i = 0; i < array.size(); i++) {
8555        res.getJurisdiction().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
8556      }
8557    };
8558    if (json.has("purpose"))
8559      res.setPurposeElement(parseMarkdown(json.get("purpose").getAsString()));
8560    if (json.has("_purpose"))
8561      parseElementProperties(getJObject(json, "_purpose"), res.getPurposeElement());
8562    if (json.has("copyright"))
8563      res.setCopyrightElement(parseMarkdown(json.get("copyright").getAsString()));
8564    if (json.has("_copyright"))
8565      parseElementProperties(getJObject(json, "_copyright"), res.getCopyrightElement());
8566    if (json.has("copyrightLabel"))
8567      res.setCopyrightLabelElement(parseString(json.get("copyrightLabel").getAsString()));
8568    if (json.has("_copyrightLabel"))
8569      parseElementProperties(getJObject(json, "_copyrightLabel"), res.getCopyrightLabelElement());
8570    if (json.has("approvalDate"))
8571      res.setApprovalDateElement(parseDate(json.get("approvalDate").getAsString()));
8572    if (json.has("_approvalDate"))
8573      parseElementProperties(getJObject(json, "_approvalDate"), res.getApprovalDateElement());
8574    if (json.has("lastReviewDate"))
8575      res.setLastReviewDateElement(parseDate(json.get("lastReviewDate").getAsString()));
8576    if (json.has("_lastReviewDate"))
8577      parseElementProperties(getJObject(json, "_lastReviewDate"), res.getLastReviewDateElement());
8578    if (json.has("effectivePeriod"))
8579      res.setEffectivePeriod(parsePeriod(getJObject(json, "effectivePeriod")));
8580    if (json.has("topic")) {
8581      JsonArray array = getJArray(json, "topic");
8582      for (int i = 0; i < array.size(); i++) {
8583        res.getTopic().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
8584      }
8585    };
8586    if (json.has("author")) {
8587      JsonArray array = getJArray(json, "author");
8588      for (int i = 0; i < array.size(); i++) {
8589        res.getAuthor().add(parseContactDetail(array.get(i).getAsJsonObject()));
8590      }
8591    };
8592    if (json.has("editor")) {
8593      JsonArray array = getJArray(json, "editor");
8594      for (int i = 0; i < array.size(); i++) {
8595        res.getEditor().add(parseContactDetail(array.get(i).getAsJsonObject()));
8596      }
8597    };
8598    if (json.has("reviewer")) {
8599      JsonArray array = getJArray(json, "reviewer");
8600      for (int i = 0; i < array.size(); i++) {
8601        res.getReviewer().add(parseContactDetail(array.get(i).getAsJsonObject()));
8602      }
8603    };
8604    if (json.has("endorser")) {
8605      JsonArray array = getJArray(json, "endorser");
8606      for (int i = 0; i < array.size(); i++) {
8607        res.getEndorser().add(parseContactDetail(array.get(i).getAsJsonObject()));
8608      }
8609    };
8610    if (json.has("relatedArtifact")) {
8611      JsonArray array = getJArray(json, "relatedArtifact");
8612      for (int i = 0; i < array.size(); i++) {
8613        res.getRelatedArtifact().add(parseRelatedArtifact(array.get(i).getAsJsonObject()));
8614      }
8615    };
8616    if (json.has("caseSensitive"))
8617      res.setCaseSensitiveElement(parseBoolean(json.get("caseSensitive").getAsBoolean()));
8618    if (json.has("_caseSensitive"))
8619      parseElementProperties(getJObject(json, "_caseSensitive"), res.getCaseSensitiveElement());
8620    if (json.has("valueSet"))
8621      res.setValueSetElement(parseCanonical(json.get("valueSet").getAsString()));
8622    if (json.has("_valueSet"))
8623      parseElementProperties(getJObject(json, "_valueSet"), res.getValueSetElement());
8624    if (json.has("hierarchyMeaning"))
8625      res.setHierarchyMeaningElement(parseEnumeration(json.get("hierarchyMeaning").getAsString(), CodeSystem.CodeSystemHierarchyMeaning.NULL, new CodeSystem.CodeSystemHierarchyMeaningEnumFactory()));
8626    if (json.has("_hierarchyMeaning"))
8627      parseElementProperties(getJObject(json, "_hierarchyMeaning"), res.getHierarchyMeaningElement());
8628    if (json.has("compositional"))
8629      res.setCompositionalElement(parseBoolean(json.get("compositional").getAsBoolean()));
8630    if (json.has("_compositional"))
8631      parseElementProperties(getJObject(json, "_compositional"), res.getCompositionalElement());
8632    if (json.has("versionNeeded"))
8633      res.setVersionNeededElement(parseBoolean(json.get("versionNeeded").getAsBoolean()));
8634    if (json.has("_versionNeeded"))
8635      parseElementProperties(getJObject(json, "_versionNeeded"), res.getVersionNeededElement());
8636    if (json.has("content"))
8637      res.setContentElement(parseEnumeration(json.get("content").getAsString(), Enumerations.CodeSystemContentMode.NULL, new Enumerations.CodeSystemContentModeEnumFactory()));
8638    if (json.has("_content"))
8639      parseElementProperties(getJObject(json, "_content"), res.getContentElement());
8640    if (json.has("supplements"))
8641      res.setSupplementsElement(parseCanonical(json.get("supplements").getAsString()));
8642    if (json.has("_supplements"))
8643      parseElementProperties(getJObject(json, "_supplements"), res.getSupplementsElement());
8644    if (json.has("count"))
8645      res.setCountElement(parseUnsignedInt(json.get("count").getAsString()));
8646    if (json.has("_count"))
8647      parseElementProperties(getJObject(json, "_count"), res.getCountElement());
8648    if (json.has("filter")) {
8649      JsonArray array = getJArray(json, "filter");
8650      for (int i = 0; i < array.size(); i++) {
8651        res.getFilter().add(parseCodeSystemFilterComponent(array.get(i).getAsJsonObject()));
8652      }
8653    };
8654    if (json.has("property")) {
8655      JsonArray array = getJArray(json, "property");
8656      for (int i = 0; i < array.size(); i++) {
8657        res.getProperty().add(parseCodeSystemPropertyComponent(array.get(i).getAsJsonObject()));
8658      }
8659    };
8660    if (json.has("concept")) {
8661      JsonArray array = getJArray(json, "concept");
8662      for (int i = 0; i < array.size(); i++) {
8663        res.getConcept().add(parseCodeSystemConceptDefinitionComponent(array.get(i).getAsJsonObject()));
8664      }
8665    };
8666  }
8667
8668  protected CodeSystem.CodeSystemFilterComponent parseCodeSystemFilterComponent(JsonObject json) throws IOException, FHIRFormatError {
8669    CodeSystem.CodeSystemFilterComponent res = new CodeSystem.CodeSystemFilterComponent();
8670    parseCodeSystemFilterComponentProperties(json, res);
8671    return res;
8672  }
8673
8674  protected void parseCodeSystemFilterComponentProperties(JsonObject json, CodeSystem.CodeSystemFilterComponent res) throws IOException, FHIRFormatError {
8675    parseBackboneElementProperties(json, res);
8676    if (json.has("code"))
8677      res.setCodeElement(parseCode(json.get("code").getAsString()));
8678    if (json.has("_code"))
8679      parseElementProperties(getJObject(json, "_code"), res.getCodeElement());
8680    if (json.has("description"))
8681      res.setDescriptionElement(parseString(json.get("description").getAsString()));
8682    if (json.has("_description"))
8683      parseElementProperties(getJObject(json, "_description"), res.getDescriptionElement());
8684    if (json.has("operator")) {
8685      JsonArray array = getJArray(json, "operator");
8686      for (int i = 0; i < array.size(); i++) {
8687        if (array.get(i).isJsonNull()) {
8688          res.getOperator().add(new Enumeration<Enumerations.FilterOperator>(new Enumerations.FilterOperatorEnumFactory(), Enumerations.FilterOperator.NULL));
8689        } else {;
8690          res.getOperator().add(parseEnumeration(array.get(i).getAsString(), Enumerations.FilterOperator.NULL, new Enumerations.FilterOperatorEnumFactory()));
8691        }
8692      }
8693    };
8694    if (json.has("_operator")) {
8695      JsonArray array = getJArray(json, "_operator");
8696      for (int i = 0; i < array.size(); i++) {
8697        if (i == res.getOperator().size())
8698          res.getOperator().add(parseEnumeration(null, Enumerations.FilterOperator.NULL, new Enumerations.FilterOperatorEnumFactory()));
8699        if (array.get(i) instanceof JsonObject) 
8700          parseElementProperties(array.get(i).getAsJsonObject(), res.getOperator().get(i));
8701      }
8702    };
8703    if (json.has("value"))
8704      res.setValueElement(parseString(json.get("value").getAsString()));
8705    if (json.has("_value"))
8706      parseElementProperties(getJObject(json, "_value"), res.getValueElement());
8707  }
8708
8709  protected CodeSystem.PropertyComponent parseCodeSystemPropertyComponent(JsonObject json) throws IOException, FHIRFormatError {
8710    CodeSystem.PropertyComponent res = new CodeSystem.PropertyComponent();
8711    parseCodeSystemPropertyComponentProperties(json, res);
8712    return res;
8713  }
8714
8715  protected void parseCodeSystemPropertyComponentProperties(JsonObject json, CodeSystem.PropertyComponent res) throws IOException, FHIRFormatError {
8716    parseBackboneElementProperties(json, res);
8717    if (json.has("code"))
8718      res.setCodeElement(parseCode(json.get("code").getAsString()));
8719    if (json.has("_code"))
8720      parseElementProperties(getJObject(json, "_code"), res.getCodeElement());
8721    if (json.has("uri"))
8722      res.setUriElement(parseUri(json.get("uri").getAsString()));
8723    if (json.has("_uri"))
8724      parseElementProperties(getJObject(json, "_uri"), res.getUriElement());
8725    if (json.has("description"))
8726      res.setDescriptionElement(parseString(json.get("description").getAsString()));
8727    if (json.has("_description"))
8728      parseElementProperties(getJObject(json, "_description"), res.getDescriptionElement());
8729    if (json.has("type"))
8730      res.setTypeElement(parseEnumeration(json.get("type").getAsString(), CodeSystem.PropertyType.NULL, new CodeSystem.PropertyTypeEnumFactory()));
8731    if (json.has("_type"))
8732      parseElementProperties(getJObject(json, "_type"), res.getTypeElement());
8733  }
8734
8735  protected CodeSystem.ConceptDefinitionComponent parseCodeSystemConceptDefinitionComponent(JsonObject json) throws IOException, FHIRFormatError {
8736    CodeSystem.ConceptDefinitionComponent res = new CodeSystem.ConceptDefinitionComponent();
8737    parseCodeSystemConceptDefinitionComponentProperties(json, res);
8738    return res;
8739  }
8740
8741  protected void parseCodeSystemConceptDefinitionComponentProperties(JsonObject json, CodeSystem.ConceptDefinitionComponent res) throws IOException, FHIRFormatError {
8742    parseBackboneElementProperties(json, res);
8743    if (json.has("code"))
8744      res.setCodeElement(parseCode(json.get("code").getAsString()));
8745    if (json.has("_code"))
8746      parseElementProperties(getJObject(json, "_code"), res.getCodeElement());
8747    if (json.has("display"))
8748      res.setDisplayElement(parseString(json.get("display").getAsString()));
8749    if (json.has("_display"))
8750      parseElementProperties(getJObject(json, "_display"), res.getDisplayElement());
8751    if (json.has("definition"))
8752      res.setDefinitionElement(parseString(json.get("definition").getAsString()));
8753    if (json.has("_definition"))
8754      parseElementProperties(getJObject(json, "_definition"), res.getDefinitionElement());
8755    if (json.has("designation")) {
8756      JsonArray array = getJArray(json, "designation");
8757      for (int i = 0; i < array.size(); i++) {
8758        res.getDesignation().add(parseCodeSystemConceptDefinitionDesignationComponent(array.get(i).getAsJsonObject()));
8759      }
8760    };
8761    if (json.has("property")) {
8762      JsonArray array = getJArray(json, "property");
8763      for (int i = 0; i < array.size(); i++) {
8764        res.getProperty().add(parseCodeSystemConceptPropertyComponent(array.get(i).getAsJsonObject()));
8765      }
8766    };
8767    if (json.has("concept")) {
8768      JsonArray array = getJArray(json, "concept");
8769      for (int i = 0; i < array.size(); i++) {
8770        res.getConcept().add(parseCodeSystemConceptDefinitionComponent(array.get(i).getAsJsonObject()));
8771      }
8772    };
8773  }
8774
8775  protected CodeSystem.ConceptDefinitionDesignationComponent parseCodeSystemConceptDefinitionDesignationComponent(JsonObject json) throws IOException, FHIRFormatError {
8776    CodeSystem.ConceptDefinitionDesignationComponent res = new CodeSystem.ConceptDefinitionDesignationComponent();
8777    parseCodeSystemConceptDefinitionDesignationComponentProperties(json, res);
8778    return res;
8779  }
8780
8781  protected void parseCodeSystemConceptDefinitionDesignationComponentProperties(JsonObject json, CodeSystem.ConceptDefinitionDesignationComponent res) throws IOException, FHIRFormatError {
8782    parseBackboneElementProperties(json, res);
8783    if (json.has("language"))
8784      res.setLanguageElement(parseCode(json.get("language").getAsString()));
8785    if (json.has("_language"))
8786      parseElementProperties(getJObject(json, "_language"), res.getLanguageElement());
8787    if (json.has("use"))
8788      res.setUse(parseCoding(getJObject(json, "use")));
8789    if (json.has("additionalUse")) {
8790      JsonArray array = getJArray(json, "additionalUse");
8791      for (int i = 0; i < array.size(); i++) {
8792        res.getAdditionalUse().add(parseCoding(array.get(i).getAsJsonObject()));
8793      }
8794    };
8795    if (json.has("value"))
8796      res.setValueElement(parseString(json.get("value").getAsString()));
8797    if (json.has("_value"))
8798      parseElementProperties(getJObject(json, "_value"), res.getValueElement());
8799  }
8800
8801  protected CodeSystem.ConceptPropertyComponent parseCodeSystemConceptPropertyComponent(JsonObject json) throws IOException, FHIRFormatError {
8802    CodeSystem.ConceptPropertyComponent res = new CodeSystem.ConceptPropertyComponent();
8803    parseCodeSystemConceptPropertyComponentProperties(json, res);
8804    return res;
8805  }
8806
8807  protected void parseCodeSystemConceptPropertyComponentProperties(JsonObject json, CodeSystem.ConceptPropertyComponent res) throws IOException, FHIRFormatError {
8808    parseBackboneElementProperties(json, res);
8809    if (json.has("code"))
8810      res.setCodeElement(parseCode(json.get("code").getAsString()));
8811    if (json.has("_code"))
8812      parseElementProperties(getJObject(json, "_code"), res.getCodeElement());
8813    DataType value = parseType("value", json);
8814    if (value != null)
8815      res.setValue(value);
8816  }
8817
8818  protected Communication parseCommunication(JsonObject json) throws IOException, FHIRFormatError {
8819    Communication res = new Communication();
8820    parseCommunicationProperties(json, res);
8821    return res;
8822  }
8823
8824  protected void parseCommunicationProperties(JsonObject json, Communication res) throws IOException, FHIRFormatError {
8825    parseDomainResourceProperties(json, res);
8826    if (json.has("identifier")) {
8827      JsonArray array = getJArray(json, "identifier");
8828      for (int i = 0; i < array.size(); i++) {
8829        res.getIdentifier().add(parseIdentifier(array.get(i).getAsJsonObject()));
8830      }
8831    };
8832    if (json.has("instantiatesCanonical")) {
8833      JsonArray array = getJArray(json, "instantiatesCanonical");
8834      for (int i = 0; i < array.size(); i++) {
8835        if (array.get(i).isJsonNull()) {
8836          res.getInstantiatesCanonical().add(new CanonicalType());
8837        } else {;
8838          res.getInstantiatesCanonical().add(parseCanonical(array.get(i).getAsString()));
8839        }
8840      }
8841    };
8842    if (json.has("_instantiatesCanonical")) {
8843      JsonArray array = getJArray(json, "_instantiatesCanonical");
8844      for (int i = 0; i < array.size(); i++) {
8845        if (i == res.getInstantiatesCanonical().size())
8846          res.getInstantiatesCanonical().add(parseCanonical(null));
8847        if (array.get(i) instanceof JsonObject) 
8848          parseElementProperties(array.get(i).getAsJsonObject(), res.getInstantiatesCanonical().get(i));
8849      }
8850    };
8851    if (json.has("instantiatesUri")) {
8852      JsonArray array = getJArray(json, "instantiatesUri");
8853      for (int i = 0; i < array.size(); i++) {
8854        if (array.get(i).isJsonNull()) {
8855          res.getInstantiatesUri().add(new UriType());
8856        } else {;
8857          res.getInstantiatesUri().add(parseUri(array.get(i).getAsString()));
8858        }
8859      }
8860    };
8861    if (json.has("_instantiatesUri")) {
8862      JsonArray array = getJArray(json, "_instantiatesUri");
8863      for (int i = 0; i < array.size(); i++) {
8864        if (i == res.getInstantiatesUri().size())
8865          res.getInstantiatesUri().add(parseUri(null));
8866        if (array.get(i) instanceof JsonObject) 
8867          parseElementProperties(array.get(i).getAsJsonObject(), res.getInstantiatesUri().get(i));
8868      }
8869    };
8870    if (json.has("basedOn")) {
8871      JsonArray array = getJArray(json, "basedOn");
8872      for (int i = 0; i < array.size(); i++) {
8873        res.getBasedOn().add(parseReference(array.get(i).getAsJsonObject()));
8874      }
8875    };
8876    if (json.has("partOf")) {
8877      JsonArray array = getJArray(json, "partOf");
8878      for (int i = 0; i < array.size(); i++) {
8879        res.getPartOf().add(parseReference(array.get(i).getAsJsonObject()));
8880      }
8881    };
8882    if (json.has("inResponseTo")) {
8883      JsonArray array = getJArray(json, "inResponseTo");
8884      for (int i = 0; i < array.size(); i++) {
8885        res.getInResponseTo().add(parseReference(array.get(i).getAsJsonObject()));
8886      }
8887    };
8888    if (json.has("status"))
8889      res.setStatusElement(parseEnumeration(json.get("status").getAsString(), Enumerations.EventStatus.NULL, new Enumerations.EventStatusEnumFactory()));
8890    if (json.has("_status"))
8891      parseElementProperties(getJObject(json, "_status"), res.getStatusElement());
8892    if (json.has("statusReason"))
8893      res.setStatusReason(parseCodeableConcept(getJObject(json, "statusReason")));
8894    if (json.has("category")) {
8895      JsonArray array = getJArray(json, "category");
8896      for (int i = 0; i < array.size(); i++) {
8897        res.getCategory().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
8898      }
8899    };
8900    if (json.has("priority"))
8901      res.setPriorityElement(parseEnumeration(json.get("priority").getAsString(), Enumerations.RequestPriority.NULL, new Enumerations.RequestPriorityEnumFactory()));
8902    if (json.has("_priority"))
8903      parseElementProperties(getJObject(json, "_priority"), res.getPriorityElement());
8904    if (json.has("medium")) {
8905      JsonArray array = getJArray(json, "medium");
8906      for (int i = 0; i < array.size(); i++) {
8907        res.getMedium().add(parseCodeableConcept(array.get(i).getAsJsonObject()));
8908      }
8909    };
8910    if (json.has("subject"))
8911      res.setSubject(parseReference(getJObject(json, "subject")));
8912    if (json.has("topic"))
8913      res.setTopic(parseCodeableConcept(getJObject(json, "topic")));
8914    if (json.has("about")) {
8915      JsonArray array = getJArray(json, "about");
8916      for (int i = 0; i < array.size(); i++) {
8917        res.getAbout().add(parseReference(array.get(i).getAsJsonObject()));
8918      }
8919    };
8920    if (json.has("encounter"))
8921      res.setEncounter(parseReference(getJObject(json, "encounter")));
8922    if (json.has("sent"))
8923      res.setSentElement(parseDateTime(json.get("sent").getAsString()));
8924    if (json.has("_sent"))
8925      parseElementProperties(getJObject(json, "_sent"), res.getSentElement());
8926    if (json.has("received"))
8927      res.setReceivedElement(parseDateTime(json.get("received").getAsString()));
8928    if (json.has("_received"))
8929      parseElementProperties(getJObject(json, "_received"), res.getReceivedElement());
8930    if (json.has("recipient")) {
8931      JsonArray array = getJArray(json, "recipient");
8932      for (int i = 0; i < array.size(); i++) {
8933        res.getRecipient().add(parseReference(array.get(i).getAsJsonObject()));
8934      }
8935    };
8936    if (json.has("sender"))
8937      res.setSender(parseReference(getJObject(json, "sender")));
8938    if (json.has("reason")) {
8939      JsonArray array = getJArray(json, "reason");
8940      for (int i = 0; i < array.size(); i++) {
8941        res.getReason().add(parseCodeableReference(array.get(i).getAsJsonObject()));
8942      }
8943    };
8944    if (json.has("payload")) {
8945      JsonArray array = getJArray(json, "payload");
8946      for (int i = 0; i < array.size(); i++) {
8947        res.getPayload().add(parseCommunicationPayloadComponent(array.get(i).getAsJsonObject()));
8948      }
8949    };
8950    if (json.has("note")) {
8951      JsonArray array = getJArray(json, "note");
8952      for (int i = 0; i < array.size(); i++) {
8953        res.getNote().add(parseAnnotation(array.get(i).getAsJsonObject()));
8954      }