Add UTGCaseConvertor for future reference

This commit is contained in:
Grahame Grieve 2022-02-19 21:40:16 +11:00
parent c9b6ab4e64
commit d66c5abec0
1 changed files with 105 additions and 0 deletions

View File

@ -0,0 +1,105 @@
package org.hl7.fhir.convertors.misc.utg;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Calendar;
import java.util.Date;
import org.hl7.fhir.exceptions.FHIRFormatError;
import org.hl7.fhir.r4.formats.IParser;
import org.hl7.fhir.r4.formats.IParser.OutputStyle;
import org.hl7.fhir.r4.formats.JsonParser;
import org.hl7.fhir.r4.formats.XmlParser;
import org.hl7.fhir.r4.model.Bundle;
import org.hl7.fhir.r4.model.Bundle.BundleType;
import org.hl7.fhir.r4.model.CodeSystem;
import org.hl7.fhir.r4.model.CodeSystem.CodeSystemContentMode;
import org.hl7.fhir.r4.model.Period;
import org.hl7.fhir.r4.model.Provenance;
import org.hl7.fhir.r4.model.Provenance.ProvenanceAgentComponent;
import org.hl7.fhir.r4.model.Resource;
import org.hl7.fhir.utilities.Utilities;
public class UTGCaseSensitivePopulator {
public static void main(String[] args) throws FileNotFoundException, IOException {
new UTGCaseSensitivePopulator().process(new File(args[0]));
}
private void process(File root) throws FileNotFoundException, IOException {
Bundle bundle = new Bundle();
bundle.setType(BundleType.COLLECTION);
bundle.setId("hxutg1-1-0-12");
scanFolders(root, bundle);
new JsonParser().setOutputStyle(OutputStyle.PRETTY).compose(new FileOutputStream(Utilities.path(root.getAbsolutePath(), "input", "sourceOfTruth", "history", "utgrel1hx-1-0-12.json")), bundle);
System.out.println("Done");
}
private void scanFolders(File folder, Bundle bundle) throws FileNotFoundException, IOException {
Calendar today = Calendar.getInstance();
Date dt = today.getTime();
today.set(Calendar.HOUR_OF_DAY, 0);
Date d = today.getTime();
System.out.println("Scan "+folder.getAbsolutePath());
for (File f : folder.listFiles()) {
if (f.isDirectory() && !f.getName().equals("retired")) {
scanFolders(f, bundle);
} else if (f.getName().endsWith(".xml")) {
processFile(f, bundle, new XmlParser(), d, dt);
} else if (f.getName().endsWith(".json")) {
processFile(f, bundle, new JsonParser(), d, dt);
}
}
}
private void processFile(File f, Bundle bundle, IParser parser, Date d, Date dt) {
try {
Resource r = parser.parse(new FileInputStream(f));
if (r instanceof CodeSystem) {
if (processCodeSystem((CodeSystem) r, bundle, d, dt)) {
parser.setOutputStyle(OutputStyle.PRETTY).compose(new FileOutputStream(f), r);
}
}
} catch (Exception e) {
}
}
private boolean processCodeSystem(CodeSystem cs, Bundle bundle, Date d, Date dt) {
if (cs.hasCaseSensitive()) {
return false;
}
if (!cs.getUrl().startsWith("http://terminology.hl7.org") || cs.getContent() == CodeSystemContentMode.NOTPRESENT) {
return false;
}
cs.setCaseSensitive(true);
Provenance p = new Provenance();
p.setId("cs-286-"+cs.getId());
p.addTarget().setReference("CodeSystem/"+cs.getId());
p.setOccurred(new Period());
p.getOccurredPeriod().setEnd(d);
p.setRecorded(dt);
p.addReason().setText("Populate Missing caseSensitive property;UP-286").addCoding().setSystem("http://terminology.hl7.org/CodeSystem/v3-ActReason").setCode("METAMGT");
p.getActivity().addCoding().setSystem("http://terminology.hl7.org/CodeSystem/v3-DataOperation").setCode("UPDATE");
ProvenanceAgentComponent agent = p.addAgent();
agent.getType().addCoding().setSystem("http://terminology.hl7.org/CodeSystem/provenance-participant-type").setCode("author");
agent.getWho().setDisplay("Grahame Grieve");
agent = p.addAgent();
agent.getType().addCoding().setSystem("http://terminology.hl7.org/CodeSystem/provenance-participant-type").setCode("custodian");
agent.getWho().setDisplay("Vocabulary WG");
bundle.addEntry().setFullUrl("http://terminology.hl7.org/fhir/Provenance/cs-286-"+cs.getId()).setResource(p);
return true;
}
}