private void fixTypeRefs(org.hl7.fhir.definitions.ecore.fhir.Definitions defs) { for (CompositeTypeDefn composite : defs.getLocalCompositeTypes()) CompositeTypeConverter.FixTypeRefs(composite); for (ConstrainedTypeDefn constrained : defs.getLocalConstrainedTypes()) ConstrainedTypeConverter.FixTypeRefs(constrained); for (org.hl7.fhir.definitions.ecore.fhir.ResourceDefn resource : defs.getResources()) CompositeTypeConverter.FixTypeRefs(resource); }
public void parse(Calendar genDate, String version) throws Exception { logger.log("Loading", LogMessageType.Process); eCoreParseResults = DefinitionsImpl.build(genDate.getTime(), version); loadGlobalConceptDomains(); eCoreParseResults .getBinding() .addAll( sortBindings( BindingConverter.buildBindingsFromFhirModel( definitions.getBindings().values(), null))); loadPrimitives(); eCoreParseResults .getPrimitive() .addAll( PrimitiveConverter.buildPrimitiveTypesFromFhirModel( definitions.getPrimitives().values())); for (String n : ini.getPropertyNames("removed-resources")) definitions.getDeletedResources().add(n); for (String n : ini.getPropertyNames("types")) loadCompositeType(n, definitions.getTypes()); for (String n : ini.getPropertyNames("structures")) loadCompositeType(n, definitions.getStructures()); String[] shared = ini.getPropertyNames("shared"); if (shared != null) for (String n : shared) definitions.getShared().add(loadCompositeType(n, definitions.getStructures())); for (String n : ini.getPropertyNames("infrastructure")) loadCompositeType(n, definitions.getInfrastructure()); List<TypeDefn> allFhirComposites = new ArrayList<TypeDefn>(); allFhirComposites.add(CompositeTypeConverter.buildElementBaseType()); allFhirComposites.addAll( PrimitiveConverter.buildCompositeTypesForPrimitives(eCoreParseResults.getPrimitive())); allFhirComposites.addAll( CompositeTypeConverter.buildCompositeTypesFromFhirModel( definitions.getTypes().values(), null)); allFhirComposites.addAll( CompositeTypeConverter.buildCompositeTypesFromFhirModel( definitions.getStructures().values(), null)); List<CompositeTypeDefn> infra = CompositeTypeConverter.buildCompositeTypesFromFhirModel( definitions.getInfrastructure().values(), null); for (CompositeTypeDefn composite : infra) composite.setInfrastructure(true); allFhirComposites.addAll(infra); allFhirComposites.addAll( ConstrainedTypeConverter.buildConstrainedTypesFromFhirModel( definitions.getConstraints().values(), definitions.getConstraintInvariants())); eCoreParseResults.getType().addAll(sortTypes(allFhirComposites)); for (String n : ini.getPropertyNames("resources")) loadResource(n, definitions.getResources(), false); ResourceDefn baseResource = loadResource("resource", null, false); baseResource.setAbstract(true); definitions.setBaseResource(baseResource); loadCompartments(); loadStatusCodes(); org.hl7.fhir.definitions.ecore.fhir.ResourceDefn eCoreBaseResource = CompositeTypeConverter.buildResourceFromFhirModel(baseResource, null); eCoreBaseResource.getElement().add(CompositeTypeConverter.buildInternalIdElement()); eCoreParseResults.getType().add(eCoreBaseResource); eCoreParseResults .getType() .addAll( sortTypes( CompositeTypeConverter.buildResourcesFromFhirModel( definitions.getResources().values()))); eCoreParseResults.getType().add(CompositeTypeConverter.buildBinaryResourceDefn()); for (String n : ini.getPropertyNames("svg")) definitions.getDiagrams().put(n, ini.getStringProperty("svg", n)); if (ini.getPropertyNames("future-resources") != null) for (String n : ini.getPropertyNames("future-resources")) { DefinedCode cd = new DefinedCode(ini.getStringProperty("future-resources", n), "Yet to be defined", n); definitions.getKnownResources().put(n, cd); ResourceDefn futureResource = new ResourceDefn(); futureResource.setName(cd.getCode()); futureResource.setDefinition("Future resource " + cd.getCode() + ". As yet undefined."); futureResource.setForFutureUse(true); definitions.getFutureResources().put(cd.getCode(), futureResource); } eCoreParseResults .getType() .addAll( CompositeTypeConverter.buildResourcesFromFhirModel( definitions.getFutureResources().values())); eCoreParseResults .getEvent() .addAll(EventConverter.buildEventsFromFhirModel(definitions.getEvents().values())); // As a second pass, resolve typerefs to the types fixTypeRefs(eCoreParseResults); eCoreParseResults .getBinding() .add(BindingConverter.buildResourceTypeBinding(eCoreParseResults)); for (String n : ini.getPropertyNames("special-resources")) definitions.getAggregationEndpoints().add(n); String[] pn = ini.getPropertyNames("valuesets"); if (pn != null) for (String n : pn) { loadValueSet(n); } for (String n : ini.getPropertyNames("profiles")) { loadProfile(n, definitions.getProfiles()); } for (ResourceDefn r : definitions.getResources().values()) { for (RegisteredProfile p : r.getProfiles()) { SpreadsheetParser sparser = new SpreadsheetParser( new CSFileInputStream(p.getFilepath()), p.getName(), definitions, srcDir, logger, registry); sparser.setFolder(Utilities.getDirectoryForFile(p.getFilepath())); p.setProfile(sparser.parseProfile(definitions)); } } }