public void checkConditions(List<String> errors, Map<String, Long> dates) throws Exception { Utilities.checkFolder(srcDir, errors); Utilities.checkFolder(termDir, errors); Utilities.checkFolder(imgDir, errors); this.dates = dates; checkFile("required", termDir, "bindings.xml", errors, "all"); checkFile("required", dtDir, "primitives.xml", errors, "all"); for (String n : ini.getPropertyNames("types")) if (ini.getStringProperty("types", n).equals("")) { TypeRef t = new TypeParser().parse(n).get(0); checkFile("type definition", dtDir, t.getName().toLowerCase() + ".xml", errors, "all"); } for (String n : ini.getPropertyNames("structures")) checkFile("structure definition", dtDir, n.toLowerCase() + ".xml", errors, "all"); String[] shared = ini.getPropertyNames("shared"); if (shared != null) for (String n : shared) checkFile("shared structure definition", dtDir, n.toLowerCase() + ".xml", errors, "all"); for (String n : ini.getPropertyNames("infrastructure")) checkFile("infrastructure definition", dtDir, n.toLowerCase() + ".xml", errors, "all"); for (String n : ini.getPropertyNames("resources")) { if (!new File(srcDir + n).exists()) errors.add("unable to find folder for resource " + n); else { if (new CSFile(srcDir + n + File.separatorChar + n + "-spreadsheet.xml").exists()) { checkFile( "definition", srcDir + n + File.separatorChar, n + "-spreadsheet.xml", errors, n); } else checkFile("definition", srcDir + n + File.separatorChar, n + "-def.xml", errors, n); checkFile("example xml", srcDir + n + File.separatorChar, n + "-example.xml", errors, n); // now iterate all the files in the directory checking data for (String fn : new File(srcDir + n + File.separatorChar).list()) checkFile("source", srcDir + n + File.separatorChar, fn, errors, n); } } for (String n : ini.getPropertyNames("special-resources")) { if (new CSFile(srcDir + n + File.separatorChar + n + "-spreadsheet.xml").exists()) checkFile("definition", srcDir + n + File.separatorChar, n + "-spreadsheet.xml", errors, n); else checkFile("definition", srcDir + n + File.separatorChar, n + "-def.xml", errors, n); // now iterate all the files in the directory checking data for (String fn : new File(srcDir + n + File.separatorChar).list()) checkFile("source", srcDir + n + File.separatorChar, fn, errors, n); } }
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)); } } }