Fix typos in phrases, and fix up handling of apostrophes in messages without parameters
This commit is contained in:
parent
2f38cb544c
commit
2eee0c7e93
|
@ -0,0 +1,78 @@
|
||||||
|
package org.hl7.fhir.utilities.filesystem;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.hl7.fhir.utilities.Utilities;
|
||||||
|
|
||||||
|
public class DirectoryVisitor {
|
||||||
|
|
||||||
|
public interface IDirectoryVisitorImplementation {
|
||||||
|
boolean enterDirectory(File directory) throws IOException;
|
||||||
|
boolean visitFile(File file) throws IOException; // return true if count
|
||||||
|
}
|
||||||
|
|
||||||
|
private IDirectoryVisitorImplementation worker;
|
||||||
|
private Set<String> extensions;
|
||||||
|
|
||||||
|
public DirectoryVisitor(IDirectoryVisitorImplementation worker, Set<String> extensions) {
|
||||||
|
super();
|
||||||
|
this.worker = worker;
|
||||||
|
this.extensions = extensions;
|
||||||
|
if (this.extensions == null) {
|
||||||
|
extensions = new HashSet<>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public DirectoryVisitor(IDirectoryVisitorImplementation worker, String... extensionList) {
|
||||||
|
super();
|
||||||
|
this.worker = worker;
|
||||||
|
extensions = new HashSet<>();
|
||||||
|
for (String s : extensionList) {
|
||||||
|
extensions.add(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public DirectoryVisitor(IDirectoryVisitorImplementation worker) {
|
||||||
|
super();
|
||||||
|
this.worker = worker;
|
||||||
|
extensions = new HashSet<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int visitDirectory(IDirectoryVisitorImplementation worker, String path) throws IOException {
|
||||||
|
return new DirectoryVisitor(worker).visit(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int visitDirectory(IDirectoryVisitorImplementation worker, String path, Set<String> extensions) throws IOException {
|
||||||
|
return new DirectoryVisitor(worker, extensions).visit(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int visitDirectory(IDirectoryVisitorImplementation worker, String path, String... extensionList) throws IOException {
|
||||||
|
return new DirectoryVisitor(worker, extensionList).visit(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int visit(String path) throws IOException {
|
||||||
|
return visit(ManagedFileAccess.file(path));
|
||||||
|
}
|
||||||
|
|
||||||
|
private int visit(File file) throws IOException {
|
||||||
|
int count = 0;
|
||||||
|
if (file.isDirectory()) {
|
||||||
|
if (worker.enterDirectory(file)) {
|
||||||
|
for (File f : ManagedFileAccess.listFiles(file)) {
|
||||||
|
count += visit(f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
String ext = file.getName().substring(file.getName().lastIndexOf(".")+1);
|
||||||
|
if (extensions.isEmpty() || extensions.contains(ext)) {
|
||||||
|
if (worker.visitFile(file)) {
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
}
|
|
@ -61,6 +61,7 @@ public class ManagedFileAccess {
|
||||||
FileInputStream inStream(String pathname);
|
FileInputStream inStream(String pathname);
|
||||||
FileOutputStream outStream(String pathname);
|
FileOutputStream outStream(String pathname);
|
||||||
CSFile csfile(String pathname);
|
CSFile csfile(String pathname);
|
||||||
|
File[] listFiles(File file) throws IOException; // file would be returned from file() above
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum FileAccessPolicy {
|
public enum FileAccessPolicy {
|
||||||
|
@ -222,4 +223,20 @@ public class ManagedFileAccess {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static File[] listFiles(File f) throws IOException {
|
||||||
|
switch (accessPolicy) {
|
||||||
|
case DIRECT:
|
||||||
|
if (!inAllowedPaths(f.getAbsolutePath())) {
|
||||||
|
throw new IOException("The pathname '"+f.getAbsolutePath()+"' cannot be accessed by policy");
|
||||||
|
}
|
||||||
|
return f.listFiles();
|
||||||
|
case MANAGED:
|
||||||
|
return accessor.listFiles(f);
|
||||||
|
case PROHIBITED:
|
||||||
|
throw new IOException("Access to files is not allowed by local security policy");
|
||||||
|
default:
|
||||||
|
throw new IOException("Internal Error");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1079,4 +1079,5 @@ public class I18nConstants {
|
||||||
public static final String SD_TYPE_PARAMETER_INVALID = "SD_TYPE_PARAMETER_INVALID";
|
public static final String SD_TYPE_PARAMETER_INVALID = "SD_TYPE_PARAMETER_INVALID";
|
||||||
public static final String SD_TYPE_PARAMETER_INVALID_REF = "SD_TYPE_PARAMETER_INVALID_REF";
|
public static final String SD_TYPE_PARAMETER_INVALID_REF = "SD_TYPE_PARAMETER_INVALID_REF";
|
||||||
public static final String SD_TYPE_PARAM_NOT_SPECIFIED = "SD_TYPE_PARAM_NOT_SPECIFIED";
|
public static final String SD_TYPE_PARAM_NOT_SPECIFIED = "SD_TYPE_PARAM_NOT_SPECIFIED";
|
||||||
|
public static final String SD_TYPE_PARAMETER_ABSTRACT_WARNING = "SD_TYPE_PARAMETER_ABSTRACT_WARNING";
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,8 @@ import java.util.Set;
|
||||||
import org.hl7.fhir.utilities.StringPair;
|
import org.hl7.fhir.utilities.StringPair;
|
||||||
import org.hl7.fhir.utilities.TextFile;
|
import org.hl7.fhir.utilities.TextFile;
|
||||||
import org.hl7.fhir.utilities.Utilities;
|
import org.hl7.fhir.utilities.Utilities;
|
||||||
|
import org.hl7.fhir.utilities.filesystem.DirectoryVisitor;
|
||||||
|
import org.hl7.fhir.utilities.filesystem.DirectoryVisitor.IDirectoryVisitorImplementation;
|
||||||
import org.hl7.fhir.utilities.filesystem.ManagedFileAccess;
|
import org.hl7.fhir.utilities.filesystem.ManagedFileAccess;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -123,9 +125,9 @@ public class POGenerator {
|
||||||
}
|
}
|
||||||
cd.defined = found;
|
cd.defined = found;
|
||||||
}
|
}
|
||||||
scanJavaSource(new File(core), consts, "RenderingI18nContext", "RenderingContext");
|
scanJavaSource(core, consts, "RenderingI18nContext", "RenderingContext");
|
||||||
scanJavaSource(new File(igpub), consts, "RenderingI18nContext", "RenderingContext");
|
scanJavaSource(igpub, consts, "RenderingI18nContext", "RenderingContext");
|
||||||
scanPascalSource(new File(pascal), props);
|
scanPascalSource(pascal, props);
|
||||||
|
|
||||||
Set<String> pns = new HashSet<>();
|
Set<String> pns = new HashSet<>();
|
||||||
for (PropertyValue p : props) {
|
for (PropertyValue p : props) {
|
||||||
|
@ -170,9 +172,9 @@ public class POGenerator {
|
||||||
cd.defined = found;
|
cd.defined = found;
|
||||||
}
|
}
|
||||||
|
|
||||||
scanJavaSource(new File(core), consts, "I18nConstants");
|
scanJavaSource(core, consts, "I18nConstants");
|
||||||
scanJavaSource(new File(igpub), consts, "I18nConstants");
|
scanJavaSource(igpub, consts, "I18nConstants");
|
||||||
scanPascalSource(new File(pascal), props);
|
scanPascalSource(pascal, props);
|
||||||
|
|
||||||
pns = new HashSet<>();
|
pns = new HashSet<>();
|
||||||
for (PropertyValue p : props) {
|
for (PropertyValue p : props) {
|
||||||
|
@ -212,18 +214,17 @@ public class POGenerator {
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean scanJavaSource(File file, List<ConstantDefinition> consts, String... names) throws FileNotFoundException, IOException {
|
private class JavaScanner implements IDirectoryVisitorImplementation {
|
||||||
if (file.isDirectory()) {
|
List<ConstantDefinition> consts;
|
||||||
boolean found = true;
|
List<String> names;
|
||||||
for (File f : file.listFiles()) {
|
|
||||||
if (!Utilities.existsInList(f.getName(), "model", "formats")) {
|
@Override
|
||||||
found = scanJavaSource(f, consts, names) && found;
|
public boolean enterDirectory(File f) throws IOException {
|
||||||
|
return !Utilities.existsInList(f.getName(), "model", "formats");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return false;
|
@Override
|
||||||
} else {
|
public boolean visitFile(File file) throws IOException {
|
||||||
String ext = file.getName().substring(file.getName().lastIndexOf(".")+1);
|
|
||||||
if ("java".equals(ext)) {
|
|
||||||
String source = TextFile.fileToString(file);
|
String source = TextFile.fileToString(file);
|
||||||
for (ConstantDefinition cd : consts) {
|
for (ConstantDefinition cd : consts) {
|
||||||
if (!cd.used) {
|
if (!cd.used) {
|
||||||
|
@ -248,21 +249,29 @@ public class POGenerator {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void scanJavaSource(String path, List<ConstantDefinition> consts, String... names) throws FileNotFoundException, IOException {
|
||||||
private void scanPascalSource(File file, List<PropertyValue> defs) throws FileNotFoundException, IOException {
|
JavaScanner scanner = new JavaScanner();
|
||||||
if (file.isDirectory()) {
|
scanner.consts = consts;
|
||||||
for (File f : file.listFiles()) {
|
scanner.names = new ArrayList<String>();
|
||||||
scanPascalSource(f, defs);
|
for (String s : names) {
|
||||||
|
scanner.names.add(s);
|
||||||
}
|
}
|
||||||
} else {
|
DirectoryVisitor.visitDirectory(scanner, path, "java");
|
||||||
String ext = file.getName().substring(file.getName().lastIndexOf(".")+1);
|
}
|
||||||
if ("pas".equals(ext)) {
|
|
||||||
|
private class PascalScanner implements IDirectoryVisitorImplementation {
|
||||||
|
private List<PropertyValue> defs;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean enterDirectory(File directory) throws IOException {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean visitFile(File file) throws IOException {
|
||||||
String source = TextFile.fileToString(file);
|
String source = TextFile.fileToString(file);
|
||||||
for (PropertyValue pv : defs) {
|
for (PropertyValue pv : defs) {
|
||||||
if (!pv.used) {
|
if (!pv.used) {
|
||||||
|
@ -276,8 +285,14 @@ public class POGenerator {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void scanPascalSource(String path, List<PropertyValue> defs) throws FileNotFoundException, IOException {
|
||||||
|
PascalScanner scanner = new PascalScanner();
|
||||||
|
scanner.defs = defs;
|
||||||
|
DirectoryVisitor.visitDirectory(scanner, path, "pas");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -438,7 +453,7 @@ public class POGenerator {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// we don't care; nothing to do
|
o.oldMsgId = null;
|
||||||
}
|
}
|
||||||
} else if (mode == 1) {
|
} else if (mode == 1) {
|
||||||
if (!value.equals(o.msgid)) {
|
if (!value.equals(o.msgid)) {
|
||||||
|
@ -451,7 +466,7 @@ public class POGenerator {
|
||||||
o.msgstr.set(0, "!!"+o.msgstr.get(0));
|
o.msgstr.set(0, "!!"+o.msgstr.get(0));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// we don't care; nothing to do
|
o.oldMsgId = null;
|
||||||
}
|
}
|
||||||
} else if (mode == 2) {
|
} else if (mode == 2) {
|
||||||
if (!value.equals(o.msgidPlural)) {
|
if (!value.equals(o.msgidPlural)) {
|
||||||
|
@ -464,7 +479,7 @@ public class POGenerator {
|
||||||
o.msgstr.set(1, "!!"+o.msgstr.get(1));
|
o.msgstr.set(1, "!!"+o.msgstr.get(1));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// we don't care; nothing to do
|
o.oldMsgId = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,7 @@ BUNDLE_BUNDLE_ENTRY_FOUND_MULTIPLE_FRAGMENT = Found {0} matches for fragment {2}
|
||||||
BUNDLE_BUNDLE_ENTRY_FULLURL_REQUIRED = Except for transactions and batches, each entry in a Bundle must have a fullUrl which is the identity of the resource in the entry
|
BUNDLE_BUNDLE_ENTRY_FULLURL_REQUIRED = Except for transactions and batches, each entry in a Bundle must have a fullUrl which is the identity of the resource in the entry
|
||||||
BUNDLE_BUNDLE_ENTRY_MULTIPLE_PROFILES_MULTIPLE_MATCHES = The {1} resource matched more than one of the allowed profiles ({3})
|
BUNDLE_BUNDLE_ENTRY_MULTIPLE_PROFILES_MULTIPLE_MATCHES = The {1} resource matched more than one of the allowed profiles ({3})
|
||||||
BUNDLE_BUNDLE_ENTRY_MULTIPLE_PROFILES_NO_MATCH = The {1} resource did not match any of the allowed profiles (Type {2}: {3})
|
BUNDLE_BUNDLE_ENTRY_MULTIPLE_PROFILES_NO_MATCH = The {1} resource did not match any of the allowed profiles (Type {2}: {3})
|
||||||
BUNDLE_BUNDLE_ENTRY_MULTIPLE_PROFILES_NO_MATCH_REASON = The {1} resource did not math the profile {2} because: {3}
|
BUNDLE_BUNDLE_ENTRY_MULTIPLE_PROFILES_NO_MATCH_REASON = The {1} resource did not match the profile {2} because: {3}
|
||||||
BUNDLE_BUNDLE_ENTRY_NOTFOUND_APPARENT_one = Can''t find ''{1}'' in the bundle ({2}). Note that there is a resource in the bundle with the same type and id, but it does not match because of the fullUrl based rules around matching relative references (must be ``{3}``)
|
BUNDLE_BUNDLE_ENTRY_NOTFOUND_APPARENT_one = Can''t find ''{1}'' in the bundle ({2}). Note that there is a resource in the bundle with the same type and id, but it does not match because of the fullUrl based rules around matching relative references (must be ``{3}``)
|
||||||
BUNDLE_BUNDLE_ENTRY_NOTFOUND_APPARENT_other = Can''t find ''{1}'' in the bundle ({2}). Note that there are {0} resources in the bundle with the same type and id, but they do not match because of the fullUrl based rules around matching relative references (one of ``{3}``)
|
BUNDLE_BUNDLE_ENTRY_NOTFOUND_APPARENT_other = Can''t find ''{1}'' in the bundle ({2}). Note that there are {0} resources in the bundle with the same type and id, but they do not match because of the fullUrl based rules around matching relative references (one of ``{3}``)
|
||||||
BUNDLE_BUNDLE_ENTRY_NOTFOUND_FRAGMENT = Can''t find ''{0}'' in the bundle ({1})
|
BUNDLE_BUNDLE_ENTRY_NOTFOUND_FRAGMENT = Can''t find ''{0}'' in the bundle ({1})
|
||||||
|
@ -1107,3 +1107,4 @@ SD_TYPE_PARAMETER_UNKNOWN = The type definition ''{0}'' has the type parameter '
|
||||||
SD_TYPE_PARAMETER_INVALID = The type definition ''{2}'' has a type parameter ''{3}'', which is not consistent with it''s ancestor type definition ''{0}'' which has the type parameter ''{1}''
|
SD_TYPE_PARAMETER_INVALID = The type definition ''{2}'' has a type parameter ''{3}'', which is not consistent with it''s ancestor type definition ''{0}'' which has the type parameter ''{1}''
|
||||||
SD_TYPE_PARAMETER_INVALID_REF = The type ''{0}'' is a reference to ''{1}'' which has a type parameter ''{2}'' with a base type of {3} but the type parameter provided is ''{4}'' which is not the right type
|
SD_TYPE_PARAMETER_INVALID_REF = The type ''{0}'' is a reference to ''{1}'' which has a type parameter ''{2}'' with a base type of {3} but the type parameter provided is ''{4}'' which is not the right type
|
||||||
SD_TYPE_PARAM_NOT_SPECIFIED = The type ''{0}'' at {3} is a reference to ''{1}'' which needs a type parameter ''{2}'' but a type parameter is not provided for ''{2}''
|
SD_TYPE_PARAM_NOT_SPECIFIED = The type ''{0}'' at {3} is a reference to ''{1}'' which needs a type parameter ''{2}'' but a type parameter is not provided for ''{2}''
|
||||||
|
SD_TYPE_PARAMETER_ABSTRACT_WARNING = The type ''{0}'' at {3} refers to the abstract type ''{1}'' but the context is not an abstract type - this is usually an error
|
||||||
|
|
|
@ -132,7 +132,7 @@ CAPABILITY_TYPS = Types
|
||||||
CAPABILITY_TYP_PRES = ype are only present if at least one of the resources has support for them.
|
CAPABILITY_TYP_PRES = ype are only present if at least one of the resources has support for them.
|
||||||
CAPABILITY_UPDATE_INT = PUT a new resource version (update interaction)
|
CAPABILITY_UPDATE_INT = PUT a new resource version (update interaction)
|
||||||
CAPABILITY_VREAD_INT = GET past versions of resources (vread interaction)
|
CAPABILITY_VREAD_INT = GET past versions of resources (vread interaction)
|
||||||
CAPABILTY_ALLOW_CAP = Any FHIR capability may be 'allowed' by the system unless explicitly marked as 'SHALL NOT'. A few items are marked as MAY in the Implementation Guide to highlight their potential relevance to the use case.
|
CAPABILTY_ALLOW_CAP = Any FHIR capability may be ''allowed'' by the system unless explicitly marked as ''SHALL NOT''. A few items are marked as MAY in the Implementation Guide to highlight their potential relevance to the use case.
|
||||||
CAPABILTY_SHALL_SUPP = SHALL Support the Following Implementation Guides
|
CAPABILTY_SHALL_SUPP = SHALL Support the Following Implementation Guides
|
||||||
CODESYSTEM_CONCEPTS = Concepts
|
CODESYSTEM_CONCEPTS = Concepts
|
||||||
CODESYSTEM_CONTENT_COMPLETE = This <param name="cased"/> code system <param name="cs"/> defines the following code<if test="code-count != 1">s</if><param name="h"/>:
|
CODESYSTEM_CONTENT_COMPLETE = This <param name="cased"/> code system <param name="cs"/> defines the following code<if test="code-count != 1">s</if><param name="h"/>:
|
||||||
|
@ -537,10 +537,10 @@ GENERAL_MODIFIERS = Modifiers
|
||||||
SEARCH_PAR_MULTIPLES = Multiples
|
SEARCH_PAR_MULTIPLES = Multiples
|
||||||
SEARCH_PAR_MULTIPLE_AND_APPEAR = multipleAnd: The parameter may only appear once
|
SEARCH_PAR_MULTIPLE_AND_APPEAR = multipleAnd: The parameter may only appear once
|
||||||
SEARCH_PAR_MULTIPLE_AND_REPEAT = multipleAnd: The parameter may repeat in order to specify multiple values that must all be true
|
SEARCH_PAR_MULTIPLE_AND_REPEAT = multipleAnd: The parameter may repeat in order to specify multiple values that must all be true
|
||||||
SEARCH_PAR_MULTIPLE_AND_SERVER = multipleAnd: It's up to the server whether the parameter may repeat in order to specify multiple values that must all be true
|
SEARCH_PAR_MULTIPLE_AND_SERVER = multipleAnd: It''s up to the server whether the parameter may repeat in order to specify multiple values that must all be true
|
||||||
SEARCH_PAR_MULTIPLE_OR_MULTIPLE = multipleOr: The parameter may have multiple values (separated by comma) where at least one must be true
|
SEARCH_PAR_MULTIPLE_OR_MULTIPLE = multipleOr: The parameter may have multiple values (separated by comma) where at least one must be true
|
||||||
SEARCH_PAR_MULTIPLE_OR_ONE = multipleOr: The parameter may only have one value (no comma separators)
|
SEARCH_PAR_MULTIPLE_OR_ONE = multipleOr: The parameter may only have one value (no comma separators)
|
||||||
SEARCH_PAR_MULTIPLE_OR_SERVER = multipleOr: It's up to the server whether the parameter can have multiple values (separated by comma) where at least one must be true
|
SEARCH_PAR_MULTIPLE_OR_SERVER = multipleOr: It''s up to the server whether the parameter can have multiple values (separated by comma) where at least one must be true
|
||||||
SEARCH_PAR_NONE = (none)
|
SEARCH_PAR_NONE = (none)
|
||||||
SEARCH_PAR_PROC = Processing Mode
|
SEARCH_PAR_PROC = Processing Mode
|
||||||
SEARCH_PAR_REND_TARGET = Target Resources
|
SEARCH_PAR_REND_TARGET = Target Resources
|
||||||
|
|
Loading…
Reference in New Issue