diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/conformance/profile/ProfileUtilities.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/conformance/profile/ProfileUtilities.java index 468430552..79d668b36 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/conformance/profile/ProfileUtilities.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/conformance/profile/ProfileUtilities.java @@ -3463,6 +3463,11 @@ public class ProfileUtilities { public void sortDifferential(StructureDefinition base, StructureDefinition diff, String name, List errors, boolean errorIfChanges) throws FHIRException { + int index = 0; + for (ElementDefinition ed : diff.getDifferential().getElement()) { + ed.setUserData("ed.index", Integer.toString(index)); + index++; + } List original = new ArrayList<>(); original.addAll(diff.getDifferential().getElement()); final List diffList = diff.getDifferential().getElement(); @@ -3520,7 +3525,7 @@ public class ProfileUtilities { ElementDefinition e = diffList.get(i); ElementDefinition n = newDiff.get(i); if (!n.getPath().equals(e.getPath())) { - errors.add("The element "+e.getPath()+" is out of order (and maybe others after it)"); + errors.add("The element "+(e.hasId() ? e.getId() : e.getPath())+" @diff["+e.getUserString("ed.index")+"] is out of order (and maybe others after it)"); return; } } diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/LanguageUtils.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/LanguageUtils.java index fa957c861..59598312c 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/LanguageUtils.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/LanguageUtils.java @@ -166,7 +166,9 @@ public class LanguageUtils { } for (TranslationUnit t : translations) { if (!usedUnits.contains(t)) { - messages.add(new ValidationMessage(Source.Publisher, IssueType.INFORMATIONAL, t.getId(), "Unused '"+t.getLanguage()+"' translation '"+t.getSrcText()+"' -> '"+t.getTgtText()+"'", IssueSeverity.INFORMATION)); + if (messages != null) { + messages.add(new ValidationMessage(Source.Publisher, IssueType.INFORMATIONAL, t.getId(), "Unused '"+t.getLanguage()+"' translation '"+t.getSrcText()+"' -> '"+t.getTgtText()+"'", IssueSeverity.INFORMATION)); + } } } return r; @@ -182,7 +184,9 @@ public class LanguageUtils { } for (TranslationUnit t : translations) { if (!usedUnits.contains(t)) { - messages.add(new ValidationMessage(Source.Publisher, IssueType.INFORMATIONAL, t.getId(), "Unused '"+t.getLanguage()+"' translation '"+t.getSrcText()+"' -> '"+t.getTgtText()+"'", IssueSeverity.INFORMATION)); + if (messages != null) { + messages.add(new ValidationMessage(Source.Publisher, IssueType.INFORMATIONAL, t.getId(), "Unused '"+t.getLanguage()+"' translation '"+t.getSrcText()+"' -> '"+t.getTgtText()+"'", IssueSeverity.INFORMATION)); + } } } return r; @@ -296,7 +300,9 @@ public class LanguageUtils { } } } - for (Element c : element.getChildren()) { + // Create a copy of the children collection before iterating + List childrenCopy = List.copyOf(element.getChildren()); + for (Element c : childrenCopy) { if (!c.getName().equals("designation")) { t = t + importFromTranslations(element, c, translations, usedUnits); } diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/StructureDefinitionRenderer.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/StructureDefinitionRenderer.java index e2276d692..bcb245cc6 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/StructureDefinitionRenderer.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/StructureDefinitionRenderer.java @@ -897,7 +897,7 @@ public class StructureDefinitionRenderer extends ResourceRenderer { Row parent = null; if (child.hasSliceName()) { // ok, we're a slice - if (slicer == null || !slicer.getId().equals(child.getPath())) { + if (slicer == null || !noTail(slicer.getId()).equals(child.getPath())) { parent = gen.new Row(); String anchorE = child.getPath(); anchorE = makeAnchorUnique(anchorE); @@ -906,7 +906,7 @@ public class StructureDefinitionRenderer extends ResourceRenderer { parent.setColor(context.getProfileUtilities().getRowColor(child, isConstraintMode)); parent.setLineColor(1); parent.setIcon("icon_slice.png", context.formatPhrase(RenderingContext.TEXT_ICON_SLICE)); - parent.getCells().add(gen.new Cell(null, null, "Slices for "+ child.getName(), "", null)); + parent.getCells().add(gen.new Cell(null, null, context.formatPhrase(RenderingContext.STRUC_DEF_SLICE_FOR, child.getName()), "", null)); switch (context.getStructureMode()) { case BINDINGS: case OBLIGATIONS: @@ -947,6 +947,16 @@ public class StructureDefinitionRenderer extends ResourceRenderer { return slicingRow; } + private String noTail(String id) { + if (id.contains(".")) { + String t = id.substring(id.lastIndexOf(".")+1); + if (Utilities.isInteger(t)) { + return id.substring(0, id.lastIndexOf(".")); + } + } + return id; + } + private String makeAnchorUnique(String anchor) { if (anchors.containsKey(anchor)) { int c = anchors.get(anchor)+1; @@ -1063,7 +1073,7 @@ public class StructureDefinitionRenderer extends ResourceRenderer { hint = checkAdd(hint, !hasDef ? null : gt(element.getDefinitionElement())); } if (element.hasSlicing() && slicesExist(elements, element)) { // some elements set up slicing but don't actually slice, so we don't augment the name - sName = context.formatPhrase(RenderingContext.STRUC_DEF_SLICE_FOR, sName); + sName = context.formatPhrase(RenderingContext.STRUC_DEF_SLICE_FOR, sName); } Cell left = gen.new Cell(null, ref, sName, hint, null); row.getCells().add(left); diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/spreadsheets/SpreadsheetGenerator.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/spreadsheets/SpreadsheetGenerator.java index 18a7e22cf..ab82995d8 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/spreadsheets/SpreadsheetGenerator.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/spreadsheets/SpreadsheetGenerator.java @@ -100,7 +100,8 @@ public class SpreadsheetGenerator { if (name.length() > MAX_SENSITIVE_SHEET_NAME_LEN - 2) { name = name.substring(0, MAX_SENSITIVE_SHEET_NAME_LEN - 2); } - String s = fixSheetNameChars(name); + name = fixSheetNameChars(name); + String s = name; if (sheetNames.containsKey(s)) { int i = 1; do { diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/spreadsheets/ValueSetSpreadsheetGenerator.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/spreadsheets/ValueSetSpreadsheetGenerator.java index 106a581e2..942c43eb6 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/spreadsheets/ValueSetSpreadsheetGenerator.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/spreadsheets/ValueSetSpreadsheetGenerator.java @@ -1,25 +1,17 @@ package org.hl7.fhir.r5.renderers.spreadsheets; -import java.io.FileOutputStream; import java.io.IOException; -import java.io.OutputStream; import java.util.List; -import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; -import org.hl7.fhir.exceptions.DefinitionException; import org.hl7.fhir.r5.context.IWorkerContext; -import org.hl7.fhir.r5.context.SimpleWorkerContext; import org.hl7.fhir.r5.model.CanonicalType; -import org.hl7.fhir.r5.model.ElementDefinition; import org.hl7.fhir.r5.model.ValueSet; import org.hl7.fhir.r5.model.ValueSet.ConceptReferenceComponent; import org.hl7.fhir.r5.model.ValueSet.ConceptSetComponent; import org.hl7.fhir.r5.model.ValueSet.ConceptSetFilterComponent; import org.hl7.fhir.r5.model.ValueSet.ValueSetExpansionContainsComponent; import org.hl7.fhir.r5.model.ValueSet.ValueSetExpansionParameterComponent; -import org.hl7.fhir.r5.model.StructureDefinition.StructureDefinitionMappingComponent; -import org.hl7.fhir.utilities.i18n.I18nConstants; public class ValueSetSpreadsheetGenerator extends CanonicalSpreadsheetGenerator { @@ -36,11 +28,12 @@ public class ValueSetSpreadsheetGenerator extends CanonicalSpreadsheetGenerator System.out.println("no valueset!"); } addValueSetMetadata(renderCanonicalResource(vs, false), vs); + int i = 0; for (ConceptSetComponent inc : vs.getCompose().getInclude()) { - genInclude(vs, inc, "Include"); + genInclude(vs, inc, "Include", i++); } for (ConceptSetComponent exc : vs.getCompose().getExclude()) { - genInclude(vs, exc, "Exclude"); + genInclude(vs, exc, "Exclude", i++); } if (vs.hasExpansion()) { if (vs.getExpansion().hasParameter()) { @@ -82,11 +75,11 @@ public class ValueSetSpreadsheetGenerator extends CanonicalSpreadsheetGenerator return value ? "" : "false"; } - private void genInclude(ValueSet vs, ConceptSetComponent inc, String mode) { + private void genInclude(ValueSet vs, ConceptSetComponent inc, String mode, int count) { if (inc.hasSystem()) { - genIncludeSystem(vs, inc, mode); + genIncludeSystem(vs, inc, mode, count); } else { - genIncludeValueSets(vs, inc, mode); + genIncludeValueSets(vs, inc, mode, count); } // String subname = inc.hasSystem() ? : "ValueSets"; // @@ -107,14 +100,14 @@ public class ValueSetSpreadsheetGenerator extends CanonicalSpreadsheetGenerator // configureSheet(sheet, sd); } - private void genIncludeValueSets(ValueSet vs, ConceptSetComponent inc, String mode) { - Sheet sheet = makeSheet(mode+" ValueSets"); + private void genIncludeValueSets(ValueSet vs, ConceptSetComponent inc, String mode, int count) { + Sheet sheet = makeSheet(mode+" ValueSet #"+count); addValueSets(sheet, inc.getValueSet()); configureSheet(sheet); } - private void genIncludeSystem(ValueSet vs, ConceptSetComponent inc, String mode) { - Sheet sheet = makeSheet(mode+" from "+dr.displaySystem(inc.getSystem())); + private void genIncludeSystem(ValueSet vs, ConceptSetComponent inc, String mode, int count) { + Sheet sheet = makeSheet(mode+" #"+count); if (inc.hasValueSet()) { addValueSets(sheet, inc.getValueSet()); } diff --git a/org.hl7.fhir.r5/src/test/java/org/hl7/fhir/r5/elementmodel/LanguageUtilsTest.java b/org.hl7.fhir.r5/src/test/java/org/hl7/fhir/r5/elementmodel/LanguageUtilsTest.java new file mode 100644 index 000000000..631731b27 --- /dev/null +++ b/org.hl7.fhir.r5/src/test/java/org/hl7/fhir/r5/elementmodel/LanguageUtilsTest.java @@ -0,0 +1,55 @@ +package org.hl7.fhir.r5.elementmodel; + +import org.hl7.fhir.r5.context.IWorkerContext; +import org.hl7.fhir.r5.formats.JsonCreatorDirect; +import org.hl7.fhir.r5.test.utils.CompareUtilities; +import org.hl7.fhir.r5.test.utils.TestingUtilities; +import org.hl7.fhir.utilities.i18n.LanguageFileProducer; +import org.hl7.fhir.utilities.i18n.PoGetTextProducer; +import org.hl7.fhir.utilities.tests.ResourceLoaderTests; +import org.hl7.fhir.utilities.validation.ValidationMessage; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.io.*; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + + +class LanguageUtilsTest implements ResourceLoaderTests { + + @Test + void importFromTranslations() throws Exception { + + IWorkerContext context = TestingUtilities.getSharedWorkerContext(); + + org.hl7.fhir.r5.elementmodel.JsonParser jp = new org.hl7.fhir.r5.elementmodel.JsonParser(context); + InputStream resource = getResourceAsInputStream("languageUtils", "CodeSystem-answer.json"); + Element element = jp.parseSingle(resource, null); + + PoGetTextProducer lp = new PoGetTextProducer(); + List res = new ArrayList<>(); + res.addAll(lp.loadSource(getResourceAsInputStream("languageUtils", "CodeSystem-answer.po"))); + + List lvm = new ArrayList<>(); + lvm.add(new ValidationMessage()); + LanguageUtils languageUtils = new LanguageUtils(context); + int result = languageUtils.importFromTranslations(element, res, lvm); + + Writer generatedResource = new StringWriter(); + jp.compose(element, new JsonCreatorDirect(generatedResource, false, false)); + + assert result == 3; + + InputStream translatedResource = getResourceAsInputStream("languageUtils", "CodeSystem-answer-translated.json"); + String text = new BufferedReader(new InputStreamReader(translatedResource)) + .lines() + .collect(Collectors.joining("\n")); + + String msg = CompareUtilities.checkJsonSrcIsSame("", generatedResource.toString(),text, null); + Assertions.assertNull(msg); + + } + +} \ No newline at end of file diff --git a/org.hl7.fhir.r5/src/test/java/org/hl7/fhir/r5/test/NarrativeGenerationTests.java b/org.hl7.fhir.r5/src/test/java/org/hl7/fhir/r5/test/NarrativeGenerationTests.java index 2372a130d..cab59327e 100644 --- a/org.hl7.fhir.r5/src/test/java/org/hl7/fhir/r5/test/NarrativeGenerationTests.java +++ b/org.hl7.fhir.r5/src/test/java/org/hl7/fhir/r5/test/NarrativeGenerationTests.java @@ -84,12 +84,12 @@ public class NarrativeGenerationTests { @Override public String getLinkFor(String corePath, String typeSimple) { - throw new NotImplementedException(); + return "http://test/link"; } @Override public BindingResolution resolveBinding(StructureDefinition def, ElementDefinitionBindingComponent binding, String path) throws FHIRException { - throw new NotImplementedException(); + return new BindingResolution("test", "http://test"); } @Override @@ -102,7 +102,7 @@ public class NarrativeGenerationTests { return new BindingResolution(vs.present(), "valueset-"+vs.getIdBase()+".html"); } } - throw new NotImplementedException(); + return new BindingResolution("test", "http://test/ns"); } @Override @@ -120,7 +120,7 @@ public class NarrativeGenerationTests { @Override public String getLinkForUrl(String corePath, String s) { - throw new NotImplementedException(); + return "http://test/link/url"; } @Override diff --git a/org.hl7.fhir.r5/src/test/resources/languageUtils/CodeSystem-answer-translated.json b/org.hl7.fhir.r5/src/test/resources/languageUtils/CodeSystem-answer-translated.json new file mode 100644 index 000000000..06f059bde --- /dev/null +++ b/org.hl7.fhir.r5/src/test/resources/languageUtils/CodeSystem-answer-translated.json @@ -0,0 +1,38 @@ +{ + "resourceType" : "CodeSystem", + "id" : "basic-answer", + "language" : "en", + "url" : "https://example.com/CodeSystem/basic-answer", + "version" : "0.1.0", + "name" : "BasicAnswer", + "title" : "Administration-Method", + "status" : "active", + "date" : "2024-04-07", + "publisher" : "Sample", + "description" : "Basic answers for any kind of questions.", + "caseSensitive" : false, + "content" : "complete", + "count" : 3, + "concept" : [ { + "code" : "ok", + "display" : "OK", + "designation" : [ { + "language" : "it", + "value" : "OK" + } ] + }, { + "code" : "yes", + "display" : "Yes", + "designation" : [ { + "language" : "it", + "value" : "Si" + } ] + }, { + "code" : "no", + "display" : "No", + "designation" : [ { + "language" : "it", + "value" : "No" + } ] + } ] +} \ No newline at end of file diff --git a/org.hl7.fhir.r5/src/test/resources/languageUtils/CodeSystem-answer.json b/org.hl7.fhir.r5/src/test/resources/languageUtils/CodeSystem-answer.json new file mode 100644 index 000000000..fe6f0d690 --- /dev/null +++ b/org.hl7.fhir.r5/src/test/resources/languageUtils/CodeSystem-answer.json @@ -0,0 +1,30 @@ +{ + "resourceType": "CodeSystem", + "status": "active", + "content": "complete", + "name": "BasicAnswer", + "id": "basic-answer", + "title": "Administration-Method", + "description": "Basic answers for any kind of questions.", + "url": "https://example.com/CodeSystem/basic-answer", + "concept": [ + { + "code": "ok", + "display": "OK" + }, + { + "code": "yes", + "display": "Yes" + }, + { + "code": "no", + "display": "No" + } + ], + "language": "en", + "version": "0.1.0", + "date": "2024-04-07", + "publisher": "Sample", + "caseSensitive": false, + "count": 3 +} diff --git a/org.hl7.fhir.r5/src/test/resources/languageUtils/CodeSystem-answer.po b/org.hl7.fhir.r5/src/test/resources/languageUtils/CodeSystem-answer.po new file mode 100644 index 000000000..becb6026b --- /dev/null +++ b/org.hl7.fhir.r5/src/test/resources/languageUtils/CodeSystem-answer.po @@ -0,0 +1,37 @@ +# en -> it + +#: CanonicalResource.name +#. A natural language name identifying the code system. This name should be usable as an identifier for the module by machine processing applications such as code generation. +msgid "BasicAnswer" +msgstr "" + +#: CanonicalResource.title +#. A short, descriptive, user-friendly title for the code system. +msgid "Administration-Method" +msgstr "" + +#: CanonicalResource.publisher +#. The name of the organization or individual that published the code system. +msgid "Example Publisher" +msgstr "" + +#: CanonicalResource.description +#. A free text natural language description of the code system from a consumer's perspective. +msgid "Basic answers for any kind of questions." +msgstr "" + +#: CodeSystem.concept.display +#. A human readable string that is the recommended default way to present this concept to a user. +msgid "OK" +msgstr "OK" + +#: CodeSystem.concept.display +#. A human readable string that is the recommended default way to present this concept to a user. +msgid "Yes" +msgstr "Si" + +#: CodeSystem.concept.display +#. A human readable string that is the recommended default way to present this concept to a user. +msgid "No" +msgstr "No" + diff --git a/org.hl7.fhir.report/pom.xml b/org.hl7.fhir.report/pom.xml index 14605cc43..7889e540c 100644 --- a/org.hl7.fhir.report/pom.xml +++ b/org.hl7.fhir.report/pom.xml @@ -89,7 +89,7 @@ org.sonatype.plugins nexus-staging-maven-plugin - true + true diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/PackageHacker.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/PackageHacker.java index 6aba70e60..2e9a45283 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/PackageHacker.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/PackageHacker.java @@ -30,61 +30,73 @@ public class PackageHacker { private static boolean useSecureReferences = false; public static void main(String[] args) throws FileNotFoundException, IOException { - new PackageHacker().massEdit(new File("/Users/grahamegrieve/web/hl7.org/fhir")); - // new PackageHacker().edit("/Users/grahamegrieve/web/hl7.org/fhir/us/vitals/2020Sep/package.tgz"); +// new PackageHacker().massEdit(new File("/Users/grahamegrieve/web/hl7.org/fhir")); + new PackageHacker().edit("/Users/grahamegrieve/web/hl7.org/fhir/6.0.0-ballot1/hl7.fhir.r6.core.tgz"); + new PackageHacker().edit("/Users/grahamegrieve/web/hl7.org/fhir/6.0.0-ballot1/hl7.fhir.r6.corexml.tgz"); + new PackageHacker().edit("/Users/grahamegrieve/web/hl7.org/fhir/6.0.0-ballot1/hl7.fhir.r6.examples.tgz"); + new PackageHacker().edit("/Users/grahamegrieve/web/hl7.org/fhir/6.0.0-ballot1/hl7.fhir.r6.expansions.tgz"); + new PackageHacker().edit("/Users/grahamegrieve/web/hl7.org/fhir/6.0.0-ballot1/hl7.fhir.r6.search.tgz"); + new PackageHacker().edit("/Users/grahamegrieve/web/hl7.org/fhir/6.0.0-ballot2/hl7.fhir.r6.core.tgz"); + new PackageHacker().edit("/Users/grahamegrieve/web/hl7.org/fhir/6.0.0-ballot2/hl7.fhir.r6.corexml.tgz"); + new PackageHacker().edit("/Users/grahamegrieve/web/hl7.org/fhir/6.0.0-ballot2/hl7.fhir.r6.examples.tgz"); + new PackageHacker().edit("/Users/grahamegrieve/web/hl7.org/fhir/6.0.0-ballot2/hl7.fhir.r6.expansions.tgz"); + new PackageHacker().edit("/Users/grahamegrieve/web/hl7.org/fhir/6.0.0-ballot2/hl7.fhir.r6.search.tgz"); + +// new PackageHacker().edit(args[0]); } - private void massEdit(File dir) throws IOException { - System.out.println("process "+dir.getAbsolutePath()); - for (File f : dir.listFiles()) { - if (f.isDirectory()) { - massEdit(f); - } else if (f.getName().equals("package.tgz")) { - try { - FileInputStream fs = ManagedFileAccess.inStream(f); - NpmPackage pck = NpmPackage.fromPackage(fs); - if ("fhir.core".equals(pck.getNpm().str("type"))) { - System.out.println("!!change "+f.getAbsolutePath()); - pck.getNpm().remove("type"); - pck.getNpm().set("type", "Core"); - FileOutputStream fso = ManagedFileAccess.outStream(f); - try { - pck.save(fso); - } finally { - fso.close(); - } - } - } catch (Exception e) { - System.out.println("!!Error: "+e.getMessage()); - } - } else if (f.getName().startsWith("hl7.fhir.r") && f.getName().endsWith(".examples.tgz")) { - try { - FileInputStream fs = ManagedFileAccess.inStream(f); - NpmPackage pck = NpmPackage.fromPackage(fs); - if ("fhir.examples".equals(pck.getNpm().str("type"))) { - System.out.println("!!change "+f.getAbsolutePath()); - pck.getNpm().remove("type"); - pck.getNpm().set("type", "Examples"); - FileOutputStream fso = ManagedFileAccess.outStream(f); - try { - pck.save(fso); - } finally { - fso.close(); - } - } - } catch (Exception e) { - System.out.println("!!Error: "+e.getMessage()); - } - - } - } - } +// private void massEdit(File dir) throws IOException { +// System.out.println("process "+dir.getAbsolutePath()); +// for (File f : dir.listFiles()) { +// if (f.isDirectory()) { +// massEdit(f); +// } else if (f.getName().equals("package.tgz")) { +// try { +// FileInputStream fs = ManagedFileAccess.inStream(f); +// NpmPackage pck = NpmPackage.fromPackage(fs); +// if ("fhir.core".equals(pck.getNpm().str("type"))) { +// System.out.println("!!change "+f.getAbsolutePath()); +// pck.getNpm().remove("type"); +// pck.getNpm().set("type", "Core"); +// FileOutputStream fso = ManagedFileAccess.outStream(f); +// try { +// pck.save(fso); +// } finally { +// fso.close(); +// } +// } +// } catch (Exception e) { +// System.out.println("!!Error: "+e.getMessage()); +// } +// } else if (f.getName().startsWith("hl7.fhir.r") && f.getName().endsWith(".examples.tgz")) { +// try { +// FileInputStream fs = ManagedFileAccess.inStream(f); +// NpmPackage pck = NpmPackage.fromPackage(fs); +// if ("fhir.examples".equals(pck.getNpm().str("type"))) { +// System.out.println("!!change "+f.getAbsolutePath()); +// pck.getNpm().remove("type"); +// pck.getNpm().set("type", "Examples"); +// FileOutputStream fso = ManagedFileAccess.outStream(f); +// try { +// pck.save(fso); +// } finally { +// fso.close(); +// } +// } +// } catch (Exception e) { +// System.out.println("!!Error: "+e.getMessage()); +// } +// +// } +// } +// } private void edit(String name) throws FileNotFoundException, IOException { File f = ManagedFileAccess.file(name); if (!f.exists()) throw new Error("Unable to find "+f.getAbsolutePath()); + System.out.println("Loading Package "+f.getAbsolutePath()); NpmPackage pck = null; FileInputStream fs = ManagedFileAccess.inStream(f); try { @@ -95,15 +107,15 @@ public class PackageHacker { System.out.println("Altering Package "+f.getAbsolutePath()); System.out.println(nice(pck.getNpm())); - change(pck.getNpm()); + if (change(pck.getNpm())) { 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') { +// System.out.print("save? y/n: "); +// int r = System.in.read(); +// if (r == 'y') { f.renameTo(ManagedFileAccess.file(Utilities.changeFileExt(name, ".tgz.bak"))); FileOutputStream fso = ManagedFileAccess.outStream(f); try { @@ -111,7 +123,8 @@ public class PackageHacker { } finally { fso.close(); } - } +// } + } } private void fixExampleContent(Map content) { @@ -129,10 +142,13 @@ public class PackageHacker { return JsonParser.compose(json, true); } - private void change(JsonObject npm) throws FileNotFoundException, IOException { + private boolean change(JsonObject npm) throws FileNotFoundException, IOException { // fixVersions(npm, ver); - npm.remove("notForPublication"); - npm.set("name", "hl7.fhir.us.vitals"); + if (npm.has("notForPublication")) { + npm.remove("notForPublication"); + return true; + } + return false; } private void fixVersionInContent(Map content) { diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/xhtml/HierarchicalTableGenerator.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/xhtml/HierarchicalTableGenerator.java index 9fc5f29ff..b4cb4bc5d 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/xhtml/HierarchicalTableGenerator.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/xhtml/HierarchicalTableGenerator.java @@ -560,7 +560,6 @@ public class HierarchicalTableGenerator { } return b.toString(); } - } public class TableModel { diff --git a/org.hl7.fhir.validation.cli/pom.xml b/org.hl7.fhir.validation.cli/pom.xml index e6da91b3d..f0907cd29 100644 --- a/org.hl7.fhir.validation.cli/pom.xml +++ b/org.hl7.fhir.validation.cli/pom.xml @@ -405,7 +405,7 @@ org.sonatype.plugins nexus-staging-maven-plugin - true + true diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/type/ConceptMapValidator.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/type/ConceptMapValidator.java index 0d6892c17..b3aeb1c4c 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/type/ConceptMapValidator.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/type/ConceptMapValidator.java @@ -34,9 +34,9 @@ public class ConceptMapValidator extends BaseValidator { private static final int TOO_MANY_CODES_TO_VALIDATE = 500; public static class PropertyDefinition { - private String type; - private String system; - private CodeSystem cs; + private final String type; + private final String system; + private final CodeSystem cs; protected PropertyDefinition(String type, String system, CodeSystem cs) { super(); this.type = type; @@ -94,7 +94,7 @@ public class ConceptMapValidator extends BaseValidator { public class CMCodingValidationRequest extends CodingValidationRequest { - private NodeStack stack; + private final NodeStack stack; public CMCodingValidationRequest(NodeStack stack, Coding code, ValueSet vs) { super(code, vs); @@ -106,7 +106,7 @@ public class ConceptMapValidator extends BaseValidator { } } - private List batch = new ArrayList<>(); + private final List batch = new ArrayList<>(); public ConceptMapValidator(BaseValidator parent) { super(parent); @@ -237,7 +237,7 @@ public class ConceptMapValidator extends BaseValidator { } else { warning(errors, "2023-03-05", IssueType.NOTFOUND, grp.line(), grp.col(), stack.push(e, -1, null, null).getLiteralPath(), sourceScope != null, I18nConstants.CONCEPTMAP_GROUP_SOURCE_UNKNOWN, e.getValue()); } - if (ctxt.source.version == null && ctxt.source.cs != null && !CodeSystemUtilities.isExemptFromMultipleVersionChecking(ctxt.source.url)) { + if (ctxt.source.version == null && ctxt.source.cs != null && !CodeSystemUtilities.isExemptFromMultipleVersionChecking(ctxt.source.url) && fetcher != null) { Set possibleVersions = fetcher.fetchCanonicalResourceVersions(null, valContext.getAppContext(), ctxt.source.url); warning(errors, NO_RULE_DATE, IssueType.INVALID, grp.line(), grp.col(), stack.getLiteralPath(), possibleVersions.size() <= 1, I18nConstants.TYPE_SPECIFIC_CHECKS_DT_CANONICAL_MULTIPLE_POSSIBLE_VERSIONS, ctxt.source.url, ctxt.source.cs.getVersion(), CommaSeparatedStringBuilder.join(", ", Utilities.sorted(possibleVersions))); diff --git a/pom.xml b/pom.xml index e6239ddee..61877213b 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ 1.26.0 32.0.1-jre 6.4.1 - 1.5.20 + 1.5.21-SNAPSHOT 2.17.0 5.9.2 1.8.2 @@ -710,7 +710,7 @@ org.sonatype.plugins nexus-staging-maven-plugin - 1.6.13 + 1.7.0 true ossrh