From 42b54f7e185b6fdc2830b1f18d07096da905c3c2 Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Sat, 6 Jan 2024 21:56:59 +1100 Subject: [PATCH 1/6] fix presentation issues for formatted xml and json --- .../org/hl7/fhir/igtools/renderers/JsonXhtmlRenderer.java | 4 ++-- .../java/org/hl7/fhir/igtools/renderers/XmlXHtmlRenderer.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/org.hl7.fhir.publisher.core/src/main/java/org/hl7/fhir/igtools/renderers/JsonXhtmlRenderer.java b/org.hl7.fhir.publisher.core/src/main/java/org/hl7/fhir/igtools/renderers/JsonXhtmlRenderer.java index f6f45aebe..60357c269 100644 --- a/org.hl7.fhir.publisher.core/src/main/java/org/hl7/fhir/igtools/renderers/JsonXhtmlRenderer.java +++ b/org.hl7.fhir.publisher.core/src/main/java/org/hl7/fhir/igtools/renderers/JsonXhtmlRenderer.java @@ -70,9 +70,9 @@ public void beginObject() throws IOException { if (b == null) { b = new StringBuilder(); if (prism) { - b.append("
\r\n");
+        b.append("
\r\n");
       } else {
-        b.append("
\r\n");
+        b.append("
\r\n");
       }
     }
     commitComments();
diff --git a/org.hl7.fhir.publisher.core/src/main/java/org/hl7/fhir/igtools/renderers/XmlXHtmlRenderer.java b/org.hl7.fhir.publisher.core/src/main/java/org/hl7/fhir/igtools/renderers/XmlXHtmlRenderer.java
index 246435614..730e6882b 100644
--- a/org.hl7.fhir.publisher.core/src/main/java/org/hl7/fhir/igtools/renderers/XmlXHtmlRenderer.java
+++ b/org.hl7.fhir.publisher.core/src/main/java/org/hl7/fhir/igtools/renderers/XmlXHtmlRenderer.java
@@ -81,9 +81,9 @@ public void start() throws IOException {
     started = true;
     b = new StringBuilder();
     if (prism) {
-      b.append("
\r\n");
+      b.append("
\r\n");
     } else {
-      b.append("
\r\n");
+      b.append("
\r\n");
     }
   }
 

From 6c5a5784f97a19ad2ae23433e9016f0ae2f1ca2f Mon Sep 17 00:00:00 2001
From: Grahame Grieve 
Date: Sat, 6 Jan 2024 21:57:34 +1100
Subject: [PATCH 2/6] update

---
 pom.xml              |   2 +-
 test-statistics.csv  |   3 +-
 test-statistics.json | 109 +++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 112 insertions(+), 2 deletions(-)

diff --git a/pom.xml b/pom.xml
index eaf76e610..c906f73f6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,7 +24,7 @@
     1.5.9-SNAPSHOT 
 
     
-        6.2.7-SNAPSHOT
+        6.2.8-SNAPSHOT
         3.0.0-M5
         5.2.1
         4.11.0
diff --git a/test-statistics.csv b/test-statistics.csv
index b3ba13bf3..3436da9c8 100644
--- a/test-statistics.csv
+++ b/test-statistics.csv
@@ -1,4 +1,4 @@
-Version,example.fhir.uv.myig,fhir.base.template.ig,hl7.base.template.ig,hl7.cda.uv.core,hl7.fhir.au.base,hl7.fhir.template.ig,hl7.fhir.us.core,hl7.fhir.us.ecr,hl7.fhir.uv.extensions,hl7.fhir.uv.howto,hl7.fhir.uv.ipa,hl7.fhir.uv.ips,hl7.fhir.uv.sdc,hl7.fhir.uv.tools,ihe.mhd.fhir
+Version,example.fhir.uv.myig,fhir.base.template.ig,hl7.base.template.ig,hl7.cda.uv.core,hl7.fhir.au.base,hl7.fhir.template.ig,hl7.fhir.us.core,hl7.fhir.us.ecr,hl7.fhir.uv.extensions,hl7.fhir.uv.howto,hl7.fhir.uv.ipa,hl7.fhir.uv.ips,hl7.fhir.uv.sdc,hl7.fhir.uv.tools,ihe.mhd.fhir
 1.4.16,47947,1190,95,,261378,647,442875,420864,635057,20723,56572,151202,130359,45377,211383
 1.4.17,45405,1152,90,,333893,713,576428,510291,688062,20062,77921,292184,255657,49109,182535
 1.5.0,48649,1349,129,128937,254417,1494,385606,446970,760444,42358,73453,185270,225642,59841,200877
@@ -8,3 +8,4 @@ Version,example.fhir.uv.myig,fhir.base.template.ig,hl7.base.template.ig,hl7.cda.
 1.5.4,201239,1080,83,122179,498340,842,1226556,425324,735786,32039,86648,362312,299788,55033,229902
 1.5.5,50609,1074,90,125547,251320,779,410524,522019,679770,30849,62479,180025,221887,49386,197513
 1.5.6,39036,1006,81,118795,249589,655,401210,500039,724565,33258,58936,162012,214448,54851,189666
+1.5.9,50136,1043,236,121066,384970,443,668589,447787,732281,34760,70664,303013,298312,58334,218387
diff --git a/test-statistics.json b/test-statistics.json
index c54b4819f..01572d8d3 100644
--- a/test-statistics.json
+++ b/test-statistics.json
@@ -952,5 +952,114 @@
       "time" : 724565,
       "memory" : 4594904176
     }
+  },
+  "1.5.9" : {
+    "sync-date" : "2023-11-24",
+    "date" : "2024-01-04",
+    "hl7.fhir.template.ig" : {
+      "errors" : 0,
+      "warnings" : 0,
+      "hints" : 0,
+      "time" : 443,
+      "memory" : 16527640
+    },
+    "hl7.cda.uv.core" : {
+      "errors" : 1,
+      "warnings" : 1,
+      "hints" : 2,
+      "time" : 121066,
+      "memory" : 4815343776
+    },
+    "hl7.fhir.us.ecr" : {
+      "errors" : 38,
+      "warnings" : 100,
+      "hints" : 126,
+      "time" : 447787,
+      "memory" : 6853710608
+    },
+    "hl7.fhir.uv.ipa" : {
+      "errors" : 29,
+      "warnings" : 9,
+      "hints" : 43,
+      "time" : 70664,
+      "memory" : 2092151144
+    },
+    "hl7.fhir.uv.ips" : {
+      "errors" : 141,
+      "warnings" : 40,
+      "hints" : 53,
+      "time" : 303013,
+      "memory" : 2679302976
+    },
+    "ihe.mhd.fhir" : {
+      "errors" : 0,
+      "warnings" : 0,
+      "hints" : 107,
+      "time" : 218387,
+      "memory" : 2364045136
+    },
+    "hl7.fhir.uv.sdc" : {
+      "errors" : 127,
+      "warnings" : 56,
+      "hints" : 197,
+      "time" : 298312,
+      "memory" : 2144125344
+    },
+    "hl7.fhir.uv.tools" : {
+      "errors" : 68,
+      "warnings" : 4,
+      "hints" : 69,
+      "time" : 58334,
+      "memory" : 3121540040
+    },
+    "hl7.base.template.ig" : {
+      "errors" : 0,
+      "warnings" : 0,
+      "hints" : 0,
+      "time" : 236,
+      "memory" : 8390632
+    },
+    "hl7.fhir.uv.howto" : {
+      "errors" : 1,
+      "warnings" : 0,
+      "hints" : 1,
+      "time" : 34760,
+      "memory" : 2003867416
+    },
+    "fhir.base.template.ig" : {
+      "errors" : 0,
+      "warnings" : 0,
+      "hints" : 0,
+      "time" : 1043,
+      "memory" : 91563480
+    },
+    "hl7.fhir.au.base" : {
+      "errors" : 9,
+      "warnings" : 190,
+      "hints" : 136,
+      "time" : 384970,
+      "memory" : 2982222752
+    },
+    "example.fhir.uv.myig" : {
+      "errors" : 17,
+      "warnings" : 15,
+      "hints" : 3,
+      "time" : 50136,
+      "memory" : 1647777792
+    },
+    "hl7.fhir.us.core" : {
+      "errors" : 8,
+      "warnings" : 28,
+      "hints" : 80,
+      "time" : 668589,
+      "memory" : 5895608160
+    },
+    "hl7.fhir.uv.extensions" : {
+      "errors" : 29,
+      "warnings" : 33,
+      "hints" : 1520,
+      "time" : 732281,
+      "memory" : 4788178656
+    }
   }
 }

From 33c8ff04e1116125206cd26d624656b146c1ecae Mon Sep 17 00:00:00 2001
From: Grahame Grieve 
Date: Sat, 6 Jan 2024 21:58:46 +1100
Subject: [PATCH 3/6] show source server for message in QA + add editor
 comments to errors + be explicit about tooling IG dependency

---
 .../hl7/fhir/igtools/publisher/Publisher.java | 36 ++++++++----
 .../SuppressedMessageInformation.java         |  1 +
 .../renderers/ValidationPresenter.java        | 55 ++++++++++++++++---
 3 files changed, 74 insertions(+), 18 deletions(-)

diff --git a/org.hl7.fhir.publisher.core/src/main/java/org/hl7/fhir/igtools/publisher/Publisher.java b/org.hl7.fhir.publisher.core/src/main/java/org/hl7/fhir/igtools/publisher/Publisher.java
index 109299d5b..ab34d944d 100644
--- a/org.hl7.fhir.publisher.core/src/main/java/org/hl7/fhir/igtools/publisher/Publisher.java
+++ b/org.hl7.fhir.publisher.core/src/main/java/org/hl7/fhir/igtools/publisher/Publisher.java
@@ -1150,7 +1150,7 @@ public void createIg() throws Exception, IOException, EOperationOutcome, FHIRExc
           new DependencyRenderer(pcm, outputDir, npmName, templateManager, dependencyList, context, markdownEngine).render(publishedIg, true, false, false), new HTAAnalysisRenderer(context, outputDir, markdownEngine).render(publishedIg.getPackageId(), fileList, publishedIg.present()),
           new PublicationChecker(repoRoot, historyPage, markdownEngine).check(), renderGlobals(), copyrightYear, context, scanForR5Extensions(), modifierExtensions,
           generateDraftDependencies(),
-          noNarrativeResources, noValidateResources, validationOff, generationOff, dependentIgFinder);
+          noNarrativeResources, noValidateResources, validationOff, generationOff, dependentIgFinder, context.getTxCache().servers());
       tts.end();
       if (isChild()) {
         log("Built. "+tt.report());
@@ -3065,12 +3065,15 @@ else if (vsCache == null) {
       dep.setVersion(pcm.getLatestVersion(dep.getPackageId()));
       dep.addExtension(ToolingExtensions.EXT_IGDEP_COMMENT, new MarkdownType("Automatically added as a dependency - all IGs depend on HL7 Terminology"));
       sourceIg.getDependsOn().add(0, dep);
+    }    
+    if (!"hl7.fhir.uv.tools".equals(sourceIg.getPackageId()) && !dependsOnTooling(sourceIg.getDependsOn())) {
+      if (sourceIg.getDefinition().hasExtension("http://hl7.org/fhir/tools/StructureDefinition/ig-internal-dependency")) {
+        sourceIg.getDefinition().getExtensionByUrl("http://hl7.org/fhir/tools/StructureDefinition/ig-internal-dependency").setValue(new CodeType("hl7.fhir.uv.tools#0.1.0"));      
+      } else {
+        sourceIg.getDefinition().addExtension("http://hl7.org/fhir/tools/StructureDefinition/ig-internal-dependency", new CodeType("hl7.fhir.uv.tools#0.1.0"));
+      }
     }
-    if (sourceIg.getDefinition().hasExtension("http://hl7.org/fhir/tools/StructureDefinition/ig-internal-dependency")) {
-      sourceIg.getDefinition().getExtensionByUrl("http://hl7.org/fhir/tools/StructureDefinition/ig-internal-dependency").setValue(new CodeType("hl7.fhir.uv.tools#current"));      
-    } else {
-      sourceIg.getDefinition().addExtension("http://hl7.org/fhir/tools/StructureDefinition/ig-internal-dependency", new CodeType("hl7.fhir.uv.tools#current"));
-    }
+    
     inspector = new HTMLInspector(outputDir, specMaps, linkSpecMaps, this, igpkp.getCanonical(), sourceIg.getPackageId(), trackedFragments);
     inspector.getManual().add("full-ig.zip");
     if (historyPage != null) {
@@ -3087,15 +3090,15 @@ else if (vsCache == null) {
       loadIg(dep, i, !dep.hasUserData("no-load-deps"));
       i++;
     }
-    
+    if (!"hl7.fhir.uv.tools".equals(sourceIg.getPackageId()) && !dependsOnTooling(sourceIg.getDependsOn())) {
+      loadIg("igtools", "hl7.fhir.uv.tools", "0.1.0", "http://hl7.org/fhir/tools/ImplementationGuide/hl7.fhir.uv.tools", i, false);   
+    }
+
     // we're also going to look for packages that can be referred to but aren't dependencies
     for (Extension ext : sourceIg.getDefinition().getExtensionsByUrl("http://hl7.org/fhir/tools/StructureDefinition/ig-link-dependency")) {
       loadLinkIg(ext.getValue().primitiveValue());
     }
 
-    if (!"hl7.fhir.uv.tools".equals(sourceIg.getPackageId())) {
-      loadIg("igtools", "hl7.fhir.uv.tools", "current", "http://hl7.org/fhir/tools/ImplementationGuide/hl7.fhir.uv.tools", i, false);   
-    }
 
     if (!VersionUtilities.isR5Plus(context.getVersion())) {
       System.out.println("Load R5 Specials");
@@ -3286,6 +3289,19 @@ private boolean dependsOnUTG(List depends
   }
 
 
+  private boolean dependsOnTooling(List dependsOn) {
+    for (ImplementationGuideDependsOnComponent d : dependsOn) {
+      if (d.hasPackageId() && d.getPackageId().contains("hl7.fhir.uv.tools")) {
+        return true;
+      }
+      if (d.hasUri() && d.getUri().contains("hl7.org/fhir/tools")) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+
   private boolean dependsOnExtensions(List dependsOn) {
     for (ImplementationGuideDependsOnComponent d : dependsOn) {
       if (d.hasPackageId() && d.getPackageId().equals("hl7.fhir.uv.extensions")) {
diff --git a/org.hl7.fhir.publisher.core/src/main/java/org/hl7/fhir/igtools/publisher/SuppressedMessageInformation.java b/org.hl7.fhir.publisher.core/src/main/java/org/hl7/fhir/igtools/publisher/SuppressedMessageInformation.java
index f37e3db20..c81d0b553 100644
--- a/org.hl7.fhir.publisher.core/src/main/java/org/hl7/fhir/igtools/publisher/SuppressedMessageInformation.java
+++ b/org.hl7.fhir.publisher.core/src/main/java/org/hl7/fhir/igtools/publisher/SuppressedMessageInformation.java
@@ -100,6 +100,7 @@ public boolean contains(String message, ValidationMessage vMsg) {
           if (!vMsg.isMatched()) {
             sm.use();
             vMsg.setMatched(true);
+            vMsg.setComment(c.name);
           }
           return true;
         }
diff --git a/org.hl7.fhir.publisher.core/src/main/java/org/hl7/fhir/igtools/renderers/ValidationPresenter.java b/org.hl7.fhir.publisher.core/src/main/java/org/hl7/fhir/igtools/renderers/ValidationPresenter.java
index a42d0f7d9..d75700e46 100644
--- a/org.hl7.fhir.publisher.core/src/main/java/org/hl7/fhir/igtools/renderers/ValidationPresenter.java
+++ b/org.hl7.fhir.publisher.core/src/main/java/org/hl7/fhir/igtools/renderers/ValidationPresenter.java
@@ -34,6 +34,7 @@
 import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import org.hl7.fhir.igtools.publisher.DependentIGFinder;
@@ -285,12 +286,13 @@ public ValidationMessage getVm() {
   private List modifierExtensions;
   private String globalCheck;
   private String draftDependencies;
+  private Map txServers;
   
   public ValidationPresenter(String statedVersion, String igVersion, IGKnowledgeProvider provider, IGKnowledgeProvider altProvider, String root, String packageId, String altPackageId, 
       String toolsVersion, String currentToolsVersion, RealmBusinessRules realm, PreviousVersionComparator previousVersionComparator, IpaComparator ipaComparator, IpsComparator ipsComparator,
       String dependencies, String csAnalysis, String pubReqCheck, String globalCheck, String copyrightYear, IWorkerContext context,
       Set r5Extensions, List modifierExtensions, String draftDependencies,
-      List noNarratives, List noValidation, boolean noValidate, boolean noGenerate, DependentIGFinder dependentIgs) {
+      List noNarratives, List noValidation, boolean noValidate, boolean noGenerate, DependentIGFinder dependentIgs, Map txServers) {
     super();
     this.statedVersion = statedVersion;
     this.igVersion = igVersion;
@@ -319,6 +321,7 @@ public ValidationPresenter(String statedVersion, String igVersion, IGKnowledgePr
     this.modifierExtensions = modifierExtensions;
     this.draftDependencies = draftDependencies;
     this.globalCheck = globalCheck;
+    this.txServers = txServers;
     ruleDateCutoff = Date.from(LocalDate.now().minusMonths(1).atStartOfDay(ZoneId.systemDefault()).toInstant());
     determineCode();
   }
@@ -632,6 +635,15 @@ public static List filterMessages(List mes
           passesFilter = false;
         }
       }
+      if (message.getLevel().isError()) {
+        if (suppressedMessages.contains(message.getDisplay(), message) || suppressedMessages.contains(message.getMessage(), message) ||
+            suppressedMessages.contains(message.getHtml(), message) || suppressedMessages.contains(message.getMessageId(), message) || 
+            suppressedMessages.contains(message.getInvId(), message)) {
+          // nothing - we're just letting the message get a comment here
+      } else if (msgs.contains(message.getLocation()+"|"+message.getMessage())) {
+        // nothing - we're just letting the message get a comment here
+      }
+    }
       if (NO_FILTER) {
         passesFilter = true;
       }
@@ -751,28 +763,33 @@ public static List filterMessages(List mes
 
   private final String detailsTemplate = 
       "   \r\n"+
-      "     $path$$level$$msg$\r\n"+
+      "     $path$$level$$msg$$comment$\r\n"+
       "   \r\n";
   
   private final String groupDetailsTemplate = 
       "   \r\n"+
-      "     $fpath$$msg$\r\n"+
+      "     $fpath$$msg$$comment$\r\n"+
       "   \r\n";
   
   
-  private final String detailsTemplateTx = 
+  private final String detailsTemplateTxLink = 
+      "   \r\n"+
+      "     $path$$level$$msg$$comment$ (from $txsrvr$, see log)\r\n"+
+      "   \r\n";
+  
+  private final String detailsTemplateTxNoLink = 
       "   \r\n"+
-      "     $path$$level$$msg$ (see Tx log)\r\n"+
+      "     $path$$level$$msg$$comment$ (from $txsrvr$)\r\n"+
       "   \r\n";
   
   private final String detailsTemplateWithExtraDetails = 
       "   \r\n"+
-      "     $path$$level$$msg$ Show Reasoning

 

$msgdetails$
\r\n"+ + " $path$$level$$msg$$comment$ Show Reasoning

 

$msgdetails$
\r\n"+ " \r\n"; private final String detailsTemplateWithLink = " \r\n"+ - " $path$$level$$msg$\r\n"+ + " $path$$level$$msg$$comment$\r\n"+ " \r\n"; private final String footerTemplate = @@ -1163,7 +1180,19 @@ private String genStartTxt(FetchedFile f) { } private String genDetails(ValidationMessage vm, int id) { - ST t = template(vm.isSlicingHint() ? detailsTemplateWithExtraDetails : vm.getLocationLink() != null ? detailsTemplateWithLink : vm.getTxLink() != null ? detailsTemplateTx : detailsTemplate); + String tid = null; + if (vm.isSlicingHint()) { + tid = detailsTemplateWithExtraDetails; + } else if (vm.getLocationLink() != null) { + tid = detailsTemplateWithLink; + } else if (vm.getTxLink() != null) { + tid = detailsTemplateTxLink; + } else if (vm.getServer() != null) { + tid = detailsTemplateTxNoLink; + } else { + tid = detailsTemplate; + } + ST t = template(tid); if (vm.getLocation()!=null) { t.add("path", makeBreakable(stripId(makeLocal(vm.getLocation())+lineCol(vm)))); t.add("pathlink", vm.getLocationLink()); @@ -1178,10 +1207,20 @@ private String genDetails(ValidationMessage vm, int id) { t.add("mid", vm.getMessageId()); t.add("msg", (isNewRule(vm) ? "\"New " : "")+ vm.getHtml()); t.add("msgdetails", vm.isSlicingHint() ? vm.getSliceHtml() : vm.getHtml()); + t.add("comment", vm.getComment() == null ? "" : "

Editor's Comment: "+Utilities.escapeXml(vm.getComment())+""); t.add("tx", "qa-tx.html#l"+vm.getTxLink()); + t.add("txsrvr", getServer(vm.getServer())); return t.render(); } + private String getServer(String server) { + if (txServers.containsKey(server)) { + return txServers.get(server); + } else { + return server; + } + } + private Object makeBreakable(String path) { if (path == null || path.length() < MAX_PATH_LENGTH_NO_BREAK) { return path; From 51286b224a0cc4cadcf3ff397c3cae6b8cc8d133 Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Sat, 6 Jan 2024 21:59:00 +1100 Subject: [PATCH 4/6] fix for NPE --- .../igtools/renderers/StructureDefinitionRenderer.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/org.hl7.fhir.publisher.core/src/main/java/org/hl7/fhir/igtools/renderers/StructureDefinitionRenderer.java b/org.hl7.fhir.publisher.core/src/main/java/org/hl7/fhir/igtools/renderers/StructureDefinitionRenderer.java index 6aebb45b6..ee0b43d27 100644 --- a/org.hl7.fhir.publisher.core/src/main/java/org/hl7/fhir/igtools/renderers/StructureDefinitionRenderer.java +++ b/org.hl7.fhir.publisher.core/src/main/java/org/hl7/fhir/igtools/renderers/StructureDefinitionRenderer.java @@ -1485,7 +1485,7 @@ public String pseudoJson() throws Exception { generateCoreElemExtension(b, sd.getSnapshot().getElement(), child, children, 2, rn, false, child.getType().get(0), ++c == l, complex); extDone = true; } else if (child.hasSlicing()) - generateCoreElemSliced(b, sd.getSnapshot().getElement(), child, children, 2, rn, false, child.getType().get(0), ++c == l, complex); + generateCoreElemSliced(b, sd.getSnapshot().getElement(), child, children, 2, rn, false, child.getType().isEmpty() ? null : child.getType().get(0), ++c == l, complex); else if (wasSliced(child, children)) ; // nothing else if (child.getType().size() == 1 || allTypesAreReference(child)) @@ -1711,8 +1711,12 @@ private void generateCoreElemSliced(StringBuilder b, List ele String name = tail(elem.getPath()); String en = asValue ? "value[x]" : name; - if (en.contains("[x]")) + if (en.contains("[x]")) { + if (type == null) { + throw new Error("Type cannot be unknown for element with [x] in the name @ "+pathName); + } en = en.replace("[x]", upFirst(type.getWorkingCode())); + } boolean unbounded = elem.hasMax() && elem.getMax().equals("*"); String indentS = ""; From 3e70b9df9966779b9f25ae51cee3c02b09cb08d9 Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Sat, 6 Jan 2024 21:59:09 +1100 Subject: [PATCH 5/6] Compile fixes for core --- .../igtools/publisher/ValidationServices.java | 41 ++++++++++++++++--- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/org.hl7.fhir.publisher.core/src/main/java/org/hl7/fhir/igtools/publisher/ValidationServices.java b/org.hl7.fhir.publisher.core/src/main/java/org/hl7/fhir/igtools/publisher/ValidationServices.java index 4ae3baaec..361efca9b 100644 --- a/org.hl7.fhir.publisher.core/src/main/java/org/hl7/fhir/igtools/publisher/ValidationServices.java +++ b/org.hl7.fhir.publisher.core/src/main/java/org/hl7/fhir/igtools/publisher/ValidationServices.java @@ -27,6 +27,7 @@ import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; +import java.util.EnumSet; import java.util.List; import java.util.Locale; @@ -52,6 +53,10 @@ import org.hl7.fhir.r5.utils.validation.IResourceValidator; import org.hl7.fhir.r5.utils.validation.IValidationPolicyAdvisor; import org.hl7.fhir.r5.utils.validation.IValidatorResourceFetcher; +import org.hl7.fhir.r5.utils.validation.IValidationPolicyAdvisor.AdditionalBindingPurpose; +import org.hl7.fhir.r5.utils.validation.IValidationPolicyAdvisor.CodedContentValidationAction; +import org.hl7.fhir.r5.utils.validation.IValidationPolicyAdvisor.ElementValidationAction; +import org.hl7.fhir.r5.utils.validation.IValidationPolicyAdvisor.ResourceValidationAction; import org.hl7.fhir.r5.utils.validation.constants.BindingKind; import org.hl7.fhir.r5.utils.validation.constants.CodedContentValidationPolicy; import org.hl7.fhir.r5.utils.validation.constants.ContainedReferenceValidationPolicy; @@ -191,7 +196,15 @@ private Class getResourceType(String url) { } @Override - public ContainedReferenceValidationPolicy policyForContained(IResourceValidator validator, Object appContext, String containerType, String containerId, Element.SpecialElement containingResourceType, String path, String url) { + public ContainedReferenceValidationPolicy policyForContained(IResourceValidator validator, + Object appContext, + StructureDefinition structure, + ElementDefinition element, + String containerType, + String containerId, + Element.SpecialElement containingResourceType, + String path, + String url) { return ContainedReferenceValidationPolicy.CHECK_VALID; } @@ -333,13 +346,31 @@ public boolean fetchesCanonicalResource(IResourceValidator validator, String url } @Override - public CodedContentValidationPolicy policyForCodedContent(IResourceValidator validator, Object appContext, String stackPath, ElementDefinition definition, - StructureDefinition structure, BindingKind kind, ValueSet valueSet, List systems) { + public EnumSet policyForCodedContent(IResourceValidator validator, + Object appContext, + String stackPath, + ElementDefinition definition, + StructureDefinition structure, + BindingKind kind, + AdditionalBindingPurpose purpose, + ValueSet valueSet, + List systems) { if (VersionUtilities.isR4BVer(context.getVersion()) && "ImplementationGuide.definition.parameter.code".equals(definition.getBase().getPath())) { - return CodedContentValidationPolicy.IGNORE; + return EnumSet.noneOf(CodedContentValidationAction.class); } - return CodedContentValidationPolicy.VALUESET; + return EnumSet.allOf(CodedContentValidationAction.class); } + @Override + public EnumSet policyForResource(IResourceValidator validator, Object appContext, + StructureDefinition type, String path) { + return EnumSet.allOf(ResourceValidationAction.class); + } + + @Override + public EnumSet policyForElement(IResourceValidator validator, Object appContext, + StructureDefinition structure, ElementDefinition element, String path) { + return EnumSet.allOf(ElementValidationAction.class); + } } From 19f4430d440ba02663e0c081d217e3e5c2e639dd Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Sat, 6 Jan 2024 22:01:18 +1100 Subject: [PATCH 6/6] release notes --- RELEASE_NOTES.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index e69de29bb..00f9e638c 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -0,0 +1,13 @@ +* Terminology System: Properly populate property definitions in expansions +* Validator: Major rework of tx and validation test cases associated with reworking terminology / validator interface and ongoing testing + reconciliation with Ontoserver +major upgrade to validation - use terminology server to perform more logic, and standardise interface based on agreements with Vocab & Ontoserver +* Validator: Improve slicing error message +* Validator: Add warning to user when referencing an extension that doesn't exist in FHIRPath +* Validator: Fix bugs in FHIRPath implementation of split() and join() +* Validator: Fix bug handling null objects in JSON (R5) +* Validator: Fix for missing search parameter definition in R4 +* Validator: fix bug handling XML name extension +* Renderer: fix presentation issues for formatted xml and json +* QA: show source server for message in QA +* QA: add editor comments to errors + be explicit about tooling IG dependency +* Publication Process: Improved errors publishing IGs