add the -verbose parameter, and add additional verbose messages
This commit is contained in:
parent
e3cf0afec2
commit
8088cedb66
|
@ -65,6 +65,7 @@ public class OperationOutcomeUtilities {
|
|||
if (message.getSource() != null) {
|
||||
issue.getExtension().add(ToolingExtensions.makeIssueSource(message.getSource()));
|
||||
}
|
||||
issue.setUserData("source.msg", message);
|
||||
return issue;
|
||||
}
|
||||
|
||||
|
|
|
@ -511,6 +511,7 @@ public class ValidationMessage implements Comparator<ValidationMessage>, Compara
|
|||
private String locationLink;
|
||||
private String txLink;
|
||||
public String sliceHtml;
|
||||
public String[] sliceText;
|
||||
private boolean slicingHint;
|
||||
private boolean signpost;
|
||||
|
||||
|
@ -771,8 +772,9 @@ public class ValidationMessage implements Comparator<ValidationMessage>, Compara
|
|||
return sliceHtml;
|
||||
}
|
||||
|
||||
public void setSliceHtml(String sliceHtml) {
|
||||
public void setSliceHtml(String sliceHtml, String[] text) {
|
||||
this.sliceHtml = sliceHtml;
|
||||
this.sliceText = text;
|
||||
}
|
||||
|
||||
public String getMessageId() {
|
||||
|
|
|
@ -262,9 +262,9 @@ public class BaseValidator {
|
|||
* @return Returns <code>thePass</code> (in other words, returns <code>true</code> if the rule did not fail validation)
|
||||
*/
|
||||
//FIXME: formatMessage should be done here
|
||||
protected boolean slicingHint(List<ValidationMessage> errors, IssueType type, int line, int col, String path, boolean thePass, String msg, String html) {
|
||||
protected boolean slicingHint(List<ValidationMessage> errors, IssueType type, int line, int col, String path, boolean thePass, String msg, String html, String[] text) {
|
||||
if (!thePass) {
|
||||
addValidationMessage(errors, type, line, col, path, msg, IssueSeverity.INFORMATION, null).setSlicingHint(true).setSliceHtml(html);
|
||||
addValidationMessage(errors, type, line, col, path, msg, IssueSeverity.INFORMATION, null).setSlicingHint(true).setSliceHtml(html, text);
|
||||
}
|
||||
return thePass;
|
||||
}
|
||||
|
|
|
@ -97,12 +97,12 @@ public class ValidationService {
|
|||
if (cliContext.getOutput() == null) {
|
||||
if (r instanceof Bundle)
|
||||
for (Bundle.BundleEntryComponent e : ((Bundle) r).getEntry())
|
||||
ec = ec + displayOperationOutcome((OperationOutcome) e.getResource(), ((Bundle) r).getEntry().size() > 1) + ec;
|
||||
ec = ec + displayOperationOutcome((OperationOutcome) e.getResource(), ((Bundle) r).getEntry().size() > 1, validator.isCrumbTrails()) + ec;
|
||||
else if (r == null) {
|
||||
ec = ec + 1;
|
||||
System.out.println("No output from validation - nothing to validate");
|
||||
} else {
|
||||
ec = displayOperationOutcome((OperationOutcome) r, false);
|
||||
ec = displayOperationOutcome((OperationOutcome) r, false, validator.isCrumbTrails());
|
||||
}
|
||||
} else {
|
||||
IParser x;
|
||||
|
@ -262,7 +262,7 @@ public class ValidationService {
|
|||
return sessionId;
|
||||
}
|
||||
|
||||
public int displayOperationOutcome(OperationOutcome oo, boolean hasMultiples) {
|
||||
public int displayOperationOutcome(OperationOutcome oo, boolean hasMultiples, boolean crumbs) {
|
||||
int error = 0;
|
||||
int warn = 0;
|
||||
int info = 0;
|
||||
|
@ -286,6 +286,16 @@ public class ValidationService {
|
|||
System.out.println((error == 0 ? "Success" : "*FAILURE*") + ": " + Integer.toString(error) + " errors, " + Integer.toString(warn) + " warnings, " + Integer.toString(info) + " notes");
|
||||
for (OperationOutcome.OperationOutcomeIssueComponent issue : oo.getIssue()) {
|
||||
System.out.println(getIssueSummary(issue));
|
||||
if (crumbs) {
|
||||
ValidationMessage vm = (ValidationMessage) issue.getUserData("source.msg");
|
||||
if (vm != null) {
|
||||
if (vm.sliceText != null) {
|
||||
for (String s : vm.sliceText) {
|
||||
System.out.println(" slice info: "+s);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (hasMultiples) {
|
||||
System.out.print("---");
|
||||
|
|
|
@ -56,6 +56,7 @@ public class Params {
|
|||
public static final String WANT_INVARIANTS_IN_MESSAGES = "-want-invariants-in-messages";
|
||||
public static final String SECURITY_CHECKS = "-security-checks";
|
||||
public static final String CRUMB_TRAIL = "-crumb-trails";
|
||||
public static final String VERBOSE = "-verbose";
|
||||
public static final String SHOW_TIMES = "-show-times";
|
||||
public static final String ALLOW_EXAMPLE_URLS = "-allow-example-urls";
|
||||
|
||||
|
@ -183,6 +184,8 @@ public class Params {
|
|||
cliContext.setSecurityChecks(true);
|
||||
} else if (args[i].equals(CRUMB_TRAIL)) {
|
||||
cliContext.setCrumbTrails(true);
|
||||
} else if (args[i].equals(VERBOSE)) {
|
||||
cliContext.setCrumbTrails(true);
|
||||
} else if (args[i].equals(ALLOW_EXAMPLE_URLS)) {
|
||||
String bl = args[++i];
|
||||
if ("true".equals(bl)) {
|
||||
|
|
|
@ -2722,7 +2722,8 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
|
|||
rule(errors, IssueType.STRUCTURE, element.line(), element.col(), path, areAllBaseProfiles(profiles), I18nConstants.REFERENCE_REF_CANTMATCHCHOICE, ref, asList(type.getTargetProfile()));
|
||||
for (StructureDefinition sd : badProfiles.keySet()) {
|
||||
slicingHint(errors, IssueType.STRUCTURE, element.line(), element.col(), path, false,
|
||||
context.formatMessage(I18nConstants.DETAILS_FOR__MATCHING_AGAINST_PROFILE_, ref, sd.getUrl()), errorSummaryForSlicingAsHtml(badProfiles.get(sd)));
|
||||
context.formatMessage(I18nConstants.DETAILS_FOR__MATCHING_AGAINST_PROFILE_, ref, sd.getUrl()),
|
||||
errorSummaryForSlicingAsHtml(badProfiles.get(sd)), errorSummaryForSlicingAsText(badProfiles.get(sd)));
|
||||
}
|
||||
} else {
|
||||
rule(errors, IssueType.STRUCTURE, element.line(), element.col(), path, profiles.size() == 1, I18nConstants.REFERENCE_REF_CANTMATCHCHOICE, ref, asList(type.getTargetProfile()));
|
||||
|
@ -2738,7 +2739,8 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
|
|||
if (!isShowMessagesFromReferences()) {
|
||||
warning(errors, IssueType.STRUCTURE, element.line(), element.col(), path, false, I18nConstants.REFERENCE_REF_MULTIPLEMATCHES, ref, asListByUrl(goodProfiles.keySet()));
|
||||
for (StructureDefinition sd : badProfiles.keySet()) {
|
||||
slicingHint(errors, IssueType.STRUCTURE, element.line(), element.col(), path, false, context.formatMessage(I18nConstants.DETAILS_FOR__MATCHING_AGAINST_PROFILE_, ref, sd.getUrl()), errorSummaryForSlicingAsHtml(badProfiles.get(sd)));
|
||||
slicingHint(errors, IssueType.STRUCTURE, element.line(), element.col(), path, false, context.formatMessage(I18nConstants.DETAILS_FOR__MATCHING_AGAINST_PROFILE_, ref, sd.getUrl()),
|
||||
errorSummaryForSlicingAsHtml(badProfiles.get(sd)), errorSummaryForSlicingAsText(badProfiles.get(sd)));
|
||||
}
|
||||
} else {
|
||||
warning(errors, IssueType.STRUCTURE, element.line(), element.col(), path, false, I18nConstants.REFERENCE_REF_MULTIPLEMATCHES, ref, asListByUrl(goodProfiles.keySet()));
|
||||
|
@ -2864,6 +2866,24 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
|
|||
return "<ul>" + b.toString() + "</ul>";
|
||||
}
|
||||
|
||||
private String[] errorSummaryForSlicingAsText(List<ValidationMessage> list) {
|
||||
List<String> res = new ArrayList<String>();
|
||||
for (ValidationMessage vm : list) {
|
||||
if (vm.isSlicingHint()) {
|
||||
if (vm.sliceText != null) {
|
||||
for (String s : vm.sliceText) {
|
||||
res.add(vm.getLocation() + ": " + s);
|
||||
}
|
||||
} else {
|
||||
res.add(vm.getLocation() + ": " + vm.getMessage());
|
||||
}
|
||||
} else if (vm.getLevel() == IssueSeverity.ERROR || vm.getLevel() == IssueSeverity.FATAL) {
|
||||
res.add(vm.getLocation() + ": " + vm.getHtml());
|
||||
}
|
||||
}
|
||||
return res.toArray(new String[0]);
|
||||
}
|
||||
|
||||
private TypeRefComponent getReferenceTypeRef(List<TypeRefComponent> types) {
|
||||
for (TypeRefComponent tr : types) {
|
||||
if ("Reference".equals(tr.getCode())) {
|
||||
|
@ -3619,13 +3639,13 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
|
|||
ValidatorHostContext shc = hostContext.forSlicing();
|
||||
boolean pass = evaluateSlicingExpression(shc, element, path, profile, n);
|
||||
if (!pass) {
|
||||
slicingHint(sliceInfo, IssueType.STRUCTURE, element.line(), element.col(), path, false, (context.formatMessage(I18nConstants.DOES_NOT_MATCH_SLICE_, ed.getSliceName())), "discriminator = " + Utilities.escapeXml(n.toString()));
|
||||
slicingHint(sliceInfo, IssueType.STRUCTURE, element.line(), element.col(), path, false, (context.formatMessage(I18nConstants.DOES_NOT_MATCH_SLICE_, ed.getSliceName())), "discriminator = " + Utilities.escapeXml(n.toString()), null);
|
||||
for (String url : shc.getSliceRecords().keySet()) {
|
||||
slicingHint(sliceInfo, IssueType.STRUCTURE, element.line(), element.col(), path, false,
|
||||
context.formatMessage(I18nConstants.DETAILS_FOR__MATCHING_AGAINST_PROFILE_, stack.getLiteralPath(), url),
|
||||
context.formatMessage(I18nConstants.PROFILE__DOES_NOT_MATCH_FOR__BECAUSE_OF_THE_FOLLOWING_PROFILE_ISSUES__,
|
||||
url,
|
||||
stack.getLiteralPath(), errorSummaryForSlicingAsHtml(shc.getSliceRecords().get(url))));
|
||||
stack.getLiteralPath(), errorSummaryForSlicingAsHtml(shc.getSliceRecords().get(url))), errorSummaryForSlicingAsText(shc.getSliceRecords().get(url)));
|
||||
}
|
||||
}
|
||||
return pass;
|
||||
|
@ -4830,7 +4850,8 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
|
|||
slicingHint(errors, IssueType.INFORMATIONAL, ei.line(), ei.col(), ei.getPath(), false,
|
||||
context.formatMessage(I18nConstants.THIS_ELEMENT_DOES_NOT_MATCH_ANY_KNOWN_SLICE_,
|
||||
profile == null ? "" : " defined in the profile " + profile.getUrl()),
|
||||
context.formatMessage(I18nConstants.THIS_ELEMENT_DOES_NOT_MATCH_ANY_KNOWN_SLICE_, profile == null ? "" : I18nConstants.DEFINED_IN_THE_PROFILE + profile.getUrl()) + errorSummaryForSlicingAsHtml(ei.sliceInfo));
|
||||
context.formatMessage(I18nConstants.THIS_ELEMENT_DOES_NOT_MATCH_ANY_KNOWN_SLICE_, profile == null ? "" : I18nConstants.DEFINED_IN_THE_PROFILE + profile.getUrl()) + errorSummaryForSlicingAsHtml(ei.sliceInfo),
|
||||
errorSummaryForSlicingAsText(ei.sliceInfo));
|
||||
} else if (ei.definition.getSlicing().getRules().equals(ElementDefinition.SlicingRules.CLOSED)) {
|
||||
rule(errors, IssueType.INVALID, ei.line(), ei.col(), ei.getPath(), false, I18nConstants.VALIDATION_VAL_PROFILE_NOTSLICE, (profile == null ? "" : " defined in the profile " + profile.getUrl()), errorSummaryForSlicing(ei.sliceInfo));
|
||||
}
|
||||
|
@ -5337,7 +5358,7 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
|
|||
|
||||
public ValidationResult checkCodeOnServer(NodeStack stack, ValueSet valueset, Coding c, boolean checkMembership) {
|
||||
if (checkMembership) {
|
||||
return context.validateCode(new ValidationOptions(stack.getWorkingLang()), c, valueset);
|
||||
return context.validateCode(new ValidationOptions(stack.getWorkingLang()).checkValueSetOnly(), c, valueset);
|
||||
} else {
|
||||
return context.validateCode(new ValidationOptions(stack.getWorkingLang()).noCheckValueSetMembership(), c, valueset);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue