add more log statements
This commit is contained in:
parent
662f18e09f
commit
4f048776ba
|
@ -286,6 +286,7 @@ public class SimpleWorkerContext extends BaseWorkerContext implements IWorkerCon
|
||||||
}
|
}
|
||||||
|
|
||||||
public void loadFromPackage(NpmPackage pi, IContextResourceLoader loader, String... types) throws FileNotFoundException, IOException, FHIRException {
|
public void loadFromPackage(NpmPackage pi, IContextResourceLoader loader, String... types) throws FileNotFoundException, IOException, FHIRException {
|
||||||
|
System.out.println("Load Package "+pi.name()+"#"+pi.version());
|
||||||
if (types.length == 0)
|
if (types.length == 0)
|
||||||
types = new String[] { "StructureDefinition", "ValueSet", "CodeSystem", "SearchParameter", "OperationDefinition", "Questionnaire","ConceptMap","StructureMap", "NamingSystem"};
|
types = new String[] { "StructureDefinition", "ValueSet", "CodeSystem", "SearchParameter", "OperationDefinition", "Questionnaire","ConceptMap","StructureMap", "NamingSystem"};
|
||||||
for (String s : pi.listResources(types)) {
|
for (String s : pi.listResources(types)) {
|
||||||
|
|
|
@ -1,94 +0,0 @@
|
||||||
package org.hl7.fhir.utilities.cache;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import org.hl7.fhir.utilities.TextFile;
|
|
||||||
import org.hl7.fhir.utilities.Utilities;
|
|
||||||
|
|
||||||
import com.google.gson.GsonBuilder;
|
|
||||||
import com.google.gson.JsonArray;
|
|
||||||
import com.google.gson.JsonObject;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* intenral use only - set the file name to edit in main(), and fill out the edit routine
|
|
||||||
*
|
|
||||||
* @author grahame
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class PackageHacker {
|
|
||||||
|
|
||||||
public static void main(String[] args) throws FileNotFoundException, IOException {
|
|
||||||
new PackageHacker().edit("C:\\web\\hl7.org\\fhir\\uv\\pocd\\2018Jan\\package.tgz");
|
|
||||||
}
|
|
||||||
|
|
||||||
private void edit(String name) throws FileNotFoundException, IOException {
|
|
||||||
File f = new File(name);
|
|
||||||
if (!f.exists())
|
|
||||||
throw new Error("Unable to find "+f.getAbsolutePath());
|
|
||||||
|
|
||||||
NpmPackage pck = NpmPackage.fromPackage(new FileInputStream(f));
|
|
||||||
System.out.println("Altering Package "+f.getAbsolutePath());
|
|
||||||
System.out.println(nice(pck.getNpm()));
|
|
||||||
|
|
||||||
change(pck.getNpm(), pck.getContent());
|
|
||||||
|
|
||||||
System.out.println("Revised Package");
|
|
||||||
System.out.println("=======================");
|
|
||||||
System.out.println(nice(pck.getNpm()));
|
|
||||||
System.out.println("=======================");
|
|
||||||
System.out.print("save? y/n: ");
|
|
||||||
int r = System.in.read();
|
|
||||||
if (r == 'y') {
|
|
||||||
f.renameTo(new File(Utilities.changeFileExt(name, ".tgz.bak")));
|
|
||||||
pck.save(new FileOutputStream(f));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private String nice(JsonObject json) {
|
|
||||||
return new GsonBuilder().setPrettyPrinting().create().toJson(json);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void change(JsonObject npm, Map<String, byte[]> content) throws FileNotFoundException, IOException {
|
|
||||||
// addContentFrom("C:\\web\\hl7.org\\fhir\\us\\meds", content);
|
|
||||||
fixNames(content);
|
|
||||||
// setProperty(npm, "homepage", "http://hl7.org/fhir");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setProperty(JsonObject npm, String name, String value) {
|
|
||||||
npm.remove("homepage");
|
|
||||||
npm.addProperty("homepage", "http://hl7.org/fhir");
|
|
||||||
}
|
|
||||||
|
|
||||||
private void fixNames(Map<String, byte[]> content) {
|
|
||||||
List<String> names = new ArrayList<>();
|
|
||||||
names.addAll(content.keySet());
|
|
||||||
for (String s : names) {
|
|
||||||
if (s.endsWith("json") && !s.endsWith(".json")) {
|
|
||||||
String n = s.substring(0, s.length()-4)+".json";
|
|
||||||
content.put(n, content.get(s));
|
|
||||||
content.remove(s);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void addContentFrom(String folder, Map<String, byte[]> content) throws FileNotFoundException, IOException {
|
|
||||||
for (File f : new File(folder).listFiles()) {
|
|
||||||
if (f.getName().endsWith(".json") && !f.getName().endsWith(".canonical.json")) {
|
|
||||||
String cnt = TextFile.fileToString(f);
|
|
||||||
if (cnt.contains("\"resourceType\"")) {
|
|
||||||
content.put("package/"+f.getName(), TextFile.fileToBytes(f));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,219 +0,0 @@
|
||||||
package org.hl7.fhir.utilities.cache;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map.Entry;
|
|
||||||
|
|
||||||
import org.hl7.fhir.utilities.CSVWriter;
|
|
||||||
import org.hl7.fhir.utilities.TextFile;
|
|
||||||
import org.hl7.fhir.utilities.Utilities;
|
|
||||||
import org.hl7.fhir.utilities.cache.PackageScanner.ResourceInfo;
|
|
||||||
import org.hl7.fhir.utilities.json.JsonTrackingParser;
|
|
||||||
|
|
||||||
import com.google.gson.JsonArray;
|
|
||||||
import com.google.gson.JsonElement;
|
|
||||||
import com.google.gson.JsonObject;
|
|
||||||
|
|
||||||
public class PackageScanner {
|
|
||||||
public class ResourceInfo {
|
|
||||||
|
|
||||||
private String filenameRoot;
|
|
||||||
private String htmlName;
|
|
||||||
private String id;
|
|
||||||
|
|
||||||
public ResourceInfo(String filename, String id) {
|
|
||||||
this.filenameRoot = Utilities.changeFileExt(filename, "");
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String[] args) throws FileNotFoundException, IOException {
|
|
||||||
new PackageScanner().scan(new File("C:\\web\\hl7.org\\fhir"), "c:\\temp\\package-scan.csv", "http://hl7.org/fhir");
|
|
||||||
}
|
|
||||||
|
|
||||||
private void scan(File folder, String dest, String url) throws IOException {
|
|
||||||
CSVWriter csv = new CSVWriter(new FileOutputStream(dest));
|
|
||||||
csv.line("path", "error", "name", "version", "fhir-version", "fhir-version-explicit", "canonical", "homepage",
|
|
||||||
"url", "type", "#types", "#urls", "dependencies", "spec.internals");
|
|
||||||
scanFolders(folder, csv, folder.getAbsolutePath(), url);
|
|
||||||
csv.close();
|
|
||||||
System.out.println("done");
|
|
||||||
}
|
|
||||||
|
|
||||||
private void scanFolders(File folder, CSVWriter csv, String root, String url) {
|
|
||||||
System.out.println(folder.getAbsolutePath());
|
|
||||||
for (File file : folder.listFiles()) {
|
|
||||||
if (file.isDirectory()) {
|
|
||||||
scanFolders(file, csv, root, url);
|
|
||||||
} else if (file.getName().endsWith(".tgz")) {
|
|
||||||
processPackage(file, csv, root, url);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void processPackage(File file, CSVWriter csv, String root, String url) {
|
|
||||||
try {
|
|
||||||
NpmPackage npm = NpmPackage.fromPackage(new FileInputStream(file));
|
|
||||||
fix(npm, file, root, url);
|
|
||||||
csv.line(file.getAbsolutePath(), "", npm.name(), npm.version(), npm.fhirVersion(), npm.fhirVersionList(), npm.canonical(), npm.homepage(),
|
|
||||||
npm.url(), npm.type(), Integer.toString(npm.getTypes().size()), Integer.toString(npm.getUrls().size()), npm.dependencySummary(), Boolean.toString(npm.hasFile("other", "spec.internals")));
|
|
||||||
} catch (Exception e) {
|
|
||||||
try {
|
|
||||||
csv.line(file.getAbsolutePath(), e.getMessage() == null ? "NPE" : e.getMessage());
|
|
||||||
} catch (IOException e1) {
|
|
||||||
e1.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void fix(NpmPackage npm, File file, String root, String url) throws FileNotFoundException, IOException {
|
|
||||||
String u = Utilities.pathURL(url, Utilities.getDirectoryForFile(file.getAbsolutePath()).substring(root.length()).replace("\\", "/"));
|
|
||||||
if (Utilities.getDirectoryForFile(file.getAbsolutePath()).equals("C:\\web\\hl7.org\\fhir")) {
|
|
||||||
u = "http://hl7.org/fhir/R4";
|
|
||||||
}
|
|
||||||
boolean save = false;
|
|
||||||
List<String> names = new ArrayList<>();
|
|
||||||
names.addAll(npm.getContent().keySet());
|
|
||||||
for (String s : names) {
|
|
||||||
if (!s.startsWith("package/")) {
|
|
||||||
save = true;
|
|
||||||
String n = "package/"+s;
|
|
||||||
npm.getContent().put(n, npm.getContent().get(s));
|
|
||||||
npm.getContent().remove(s);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!npm.getNpm().has("fhirVersions")) {
|
|
||||||
JsonArray fv = new JsonArray();
|
|
||||||
fv.add(npm.fhirVersion());
|
|
||||||
npm.getNpm().add("fhirVersions", fv);
|
|
||||||
save = true;
|
|
||||||
}
|
|
||||||
if (npm.getNpm().has("dependencies")) {
|
|
||||||
JsonObject dep = npm.getNpm().getAsJsonObject("dependencies");
|
|
||||||
for (Entry<String, JsonElement> e : dep.entrySet()) {
|
|
||||||
if ("current".equals(e.getValue().getAsString())) {
|
|
||||||
save = true;
|
|
||||||
if ("hl7.fhir.us.core.r4".equals(e.getKey())) {
|
|
||||||
dep.remove("hl7.fhir.us.core.r4");
|
|
||||||
dep.addProperty("hl7.fhir.us.core", "3.0.1");
|
|
||||||
} else if ("hl7.fhir.us.davinci-pas".equals(e.getKey())) {
|
|
||||||
dep.remove("hl7.fhir.us.davinci-pas");
|
|
||||||
dep.addProperty("hl7.fhir.us.davinci-pas", "0.1.0");
|
|
||||||
} else if ("hl7.fhir.uv.sdc".equals(e.getKey())) {
|
|
||||||
dep.remove("hl7.fhir.uv.sdc");
|
|
||||||
if ("0.1.0".equals(npm.version()))
|
|
||||||
dep.addProperty("hl7.fhir.uv.sdc", "2.5.0");
|
|
||||||
else
|
|
||||||
dep.addProperty("hl7.fhir.uv.sdc", "2.7.0");
|
|
||||||
} else if ("hl7.fhir.us.core".equals(e.getKey())) {
|
|
||||||
dep.remove("hl7.fhir.us.core");
|
|
||||||
dep.addProperty("hl7.fhir.us.core", "3.0.1");
|
|
||||||
} else if ("hl7.fhir.us.ccda.r4".equals(e.getKey())) {
|
|
||||||
dep.remove("hl7.fhir.us.ccda.r4");
|
|
||||||
dep.addProperty("hl7.fhir.us.ccda", "1.0.0");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!npm.hasFile("other", "spec.internals") && !file.getName().startsWith("hl7.fhir.r")) {
|
|
||||||
save = true;
|
|
||||||
npm.getContent().put("package/other/spec.internals", buildSpecInternals(npm.canonical(), Utilities.getDirectoryForFile(file.getAbsolutePath())));
|
|
||||||
}
|
|
||||||
// if (npm.url() == null || !npm.url().equals(u)) {
|
|
||||||
// npm.getNpm().remove("url");
|
|
||||||
// npm.getNpm().addProperty("url", u);
|
|
||||||
// save = true;
|
|
||||||
// }
|
|
||||||
// if (!npm.canonical().startsWith("http://hl7.org")) {
|
|
||||||
// npm.getNpm().remove("canonical");
|
|
||||||
// npm.getNpm().addProperty("canonical", "http://hl7.org/fhir/smart-app-launch");
|
|
||||||
// save = true;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
if (save) {
|
|
||||||
File bck = new File(Utilities.changeFileExt(file.getAbsolutePath(), ".bcknpm"));
|
|
||||||
if (bck.exists()) {
|
|
||||||
bck.delete();
|
|
||||||
}
|
|
||||||
file.renameTo(bck);
|
|
||||||
npm.save(new FileOutputStream(file));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private byte[] buildSpecInternals(String canonical, String dir) throws FileNotFoundException, IOException {
|
|
||||||
// the spec internals file contains 2 important things: a map from canonical URL to html path
|
|
||||||
// and a list of html target files
|
|
||||||
|
|
||||||
List<ResourceInfo> rl = makeResList(dir);
|
|
||||||
List<String> targets = new ArrayList<>();
|
|
||||||
for (File f : new File(dir).listFiles()) {
|
|
||||||
if (f.getName().endsWith(".html")) {
|
|
||||||
targets.add(f.getName());
|
|
||||||
String src = TextFile.fileToString(f);
|
|
||||||
for (ResourceInfo r : rl) {
|
|
||||||
if (r.htmlName == null) {
|
|
||||||
if (src.contains(r.filenameRoot+".json")) {
|
|
||||||
r.htmlName = f.getName();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
StringBuilder b = new StringBuilder();
|
|
||||||
b.append("{\r\n");
|
|
||||||
b.append(" \"paths\": {");
|
|
||||||
boolean first = true;
|
|
||||||
for (ResourceInfo r : rl) {
|
|
||||||
String link = r.htmlName;
|
|
||||||
if (link == null) {
|
|
||||||
System.out.println("No link found for "+r.id);
|
|
||||||
} else {
|
|
||||||
if (first) first = false; else b.append(",");
|
|
||||||
b.append("\r\n \"");
|
|
||||||
b.append(Utilities.pathURL(canonical, r.id));
|
|
||||||
b.append("\": \"");
|
|
||||||
if (link.contains(".json.html") && new File(Utilities.path(dir,link. replace(".json", ""))).exists()) {
|
|
||||||
link = link.replace(".json", "");
|
|
||||||
}
|
|
||||||
b.append(link);
|
|
||||||
b.append("\"");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
b.append("\r\n },\r\n");
|
|
||||||
b.append(" \"targets\": [");
|
|
||||||
first = true;
|
|
||||||
for (String s : targets) {
|
|
||||||
if (first) first = false; else b.append(",");
|
|
||||||
b.append("\r\n \"");
|
|
||||||
b.append(s);
|
|
||||||
b.append("\"");
|
|
||||||
}
|
|
||||||
b.append(" ]\r\n");
|
|
||||||
b.append("}\r\n");
|
|
||||||
return TextFile.stringToBytes(b.toString(), false);
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<ResourceInfo> makeResList(String dir) {
|
|
||||||
List<ResourceInfo> rl = new ArrayList<>();
|
|
||||||
for (File f : new File(dir).listFiles()) {
|
|
||||||
if (f.getName().endsWith(".json") && !f.getName().endsWith(".canonical.json")) {
|
|
||||||
try {
|
|
||||||
JsonObject obj = JsonTrackingParser.parseJson(f);
|
|
||||||
if (obj.has("resourceType") && obj.has("id")) {
|
|
||||||
rl.add(new ResourceInfo(f.getName(), obj.get("resourceType").getAsString() +"/"+ obj.get("id").getAsString()));
|
|
||||||
}
|
|
||||||
} catch (IOException e) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return rl;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in New Issue