Skip to content

Commit 68b8b78

Browse files
committed
Show available fixes in violation reports
1 parent 75a893b commit 68b8b78

File tree

3 files changed

+29
-1
lines changed

3 files changed

+29
-1
lines changed

core/sds-aspect-model-validator/src/main/java/io/openmanufacturing/sds/aspectmodel/validation/services/DetailedViolationFormatter.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
import io.openmanufacturing.sds.aspectmodel.shacl.constraint.PatternConstraint;
5555
import io.openmanufacturing.sds.aspectmodel.shacl.constraint.SparqlConstraint;
5656
import io.openmanufacturing.sds.aspectmodel.shacl.constraint.XoneConstraint;
57+
import io.openmanufacturing.sds.aspectmodel.shacl.fix.Fix;
5758
import io.openmanufacturing.sds.aspectmodel.shacl.violation.ClassTypeViolation;
5859
import io.openmanufacturing.sds.aspectmodel.shacl.violation.ClosedViolation;
5960
import io.openmanufacturing.sds.aspectmodel.shacl.violation.DatatypeViolation;
@@ -130,6 +131,12 @@ protected String processSemanticViolations( final List<Violation> violations ) {
130131
builder.append( String.format( " context-property: %s%n", violation.shortUri( property.getURI() ) ) );
131132
builder.append( String.format( " context-property-full: %s%n", property.getURI() ) );
132133
} );
134+
if ( violation.fixes().size() > 0 ) {
135+
builder.append( String.format( " possible-fixes:%n" ) );
136+
for ( final Fix fix : violation.fixes() ) {
137+
builder.append( String.format( " - %s%n", fix.description() ) );
138+
}
139+
}
133140

134141
for ( final String line : violation.accept( this ).split( "\n" ) ) {
135142
builder.append( String.format( " %s%n", line ) );

core/sds-aspect-model-validator/src/main/java/io/openmanufacturing/sds/aspectmodel/validation/services/ViolationFormatter.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import java.util.function.Function;
1919
import java.util.stream.Collectors;
2020

21+
import io.openmanufacturing.sds.aspectmodel.shacl.fix.Fix;
2122
import io.openmanufacturing.sds.aspectmodel.shacl.violation.InvalidSyntaxViolation;
2223
import io.openmanufacturing.sds.aspectmodel.shacl.violation.ProcessingViolation;
2324
import io.openmanufacturing.sds.aspectmodel.shacl.violation.Violation;
@@ -70,7 +71,12 @@ protected String processSemanticViolations( final List<Violation> violations ) {
7071
*/
7172
@Override
7273
public String visit( final Violation violation ) {
73-
return violation.message();
74+
final StringBuilder builder = new StringBuilder();
75+
builder.append( violation.message() );
76+
for ( final Fix possibleFix : violation.fixes() ) {
77+
builder.append( String.format( "%n > Possible fix: %s", possibleFix.description() ) );
78+
}
79+
return builder.toString();
7480
}
7581

7682
/**

core/sds-aspect-model-validator/src/test/java/io/openmanufacturing/sds/aspectmodel/validation/services/AspectModelValidatorTest.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131

3232
import io.openmanufacturing.sds.aspectmetamodel.KnownVersion;
3333
import io.openmanufacturing.sds.aspectmodel.resolver.services.VersionedModel;
34+
import io.openmanufacturing.sds.aspectmodel.shacl.fix.Fix;
35+
import io.openmanufacturing.sds.aspectmodel.shacl.violation.DatatypeViolation;
3436
import io.openmanufacturing.sds.aspectmodel.shacl.violation.InvalidSyntaxViolation;
3537
import io.openmanufacturing.sds.aspectmodel.shacl.violation.MinCountViolation;
3638
import io.openmanufacturing.sds.aspectmodel.shacl.violation.ProcessingViolation;
@@ -115,6 +117,19 @@ public void testValidateInvalidTestAspectModel( final InvalidTestAspect testMode
115117
assertThat( violations ).isNotEmpty();
116118
}
117119

120+
@ParameterizedTest
121+
@MethodSource( "versionsStartingWith2_0_0" )
122+
public void testGetFixForInvalidTestAspectModel( final KnownVersion metaModelVersion ) {
123+
final TestModel testModel = InvalidTestAspect.INVALID_PREFERRED_NAME_DATATYPE;
124+
final Try<VersionedModel> invalidAspectModel = TestResources.getModel( testModel, metaModelVersion );
125+
final List<Violation> violations = service.get( metaModelVersion ).validateModel( invalidAspectModel );
126+
assertThat( violations ).isNotEmpty();
127+
final DatatypeViolation violation = (DatatypeViolation) violations.get( 0 );
128+
assertThat( violation.fixes() ).isNotEmpty();
129+
final Fix fix = violation.fixes().get( 0 );
130+
assertThat( fix.description() ).isEqualTo( "Add default @en language tag to value" );
131+
}
132+
118133
private static Stream<Arguments> invalidTestModels() {
119134
return Arrays.stream( InvalidTestAspect.values() )
120135
.flatMap( testModel -> KnownVersion.getVersions().stream().flatMap( metaModelVersion -> {

0 commit comments

Comments
 (0)