Skip to content

Commit

Permalink
Add line output (#7)
Browse files Browse the repository at this point in the history
* Added properties for ruleConfig and skipRules
* Added lines output
* Switched output File to cli output, as pointers are not handled correctly by ObjectMapper
  • Loading branch information
littlelion308 committed May 9, 2022
1 parent 33ac997 commit cc7f075
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 28 deletions.
51 changes: 33 additions & 18 deletions src/main/java/com/ethlo/zally/ZallyMojo.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedHashMap;
Expand Down Expand Up @@ -74,10 +76,10 @@ public class ZallyMojo extends AbstractMojo
@Parameter(defaultValue = "${project}", required = true, readonly = true)
private MavenProject project;

@Parameter
@Parameter(property = "zally.ruleConfigs")
private Map<String, String> ruleConfigs;

@Parameter
@Parameter(property = "zally.skipRules")
private Set<String> skipRules;

public ZallyMojo()
Expand Down Expand Up @@ -153,9 +155,9 @@ public void execute() throws MojoFailureException
}
});

printErrors(resultsBySeverity);
printErrors(gatherViolations(resultsBySeverity));

writeResults(results);
writeResults(gatherViolations(resultsBySeverity));

// Check if we should halt the build due to validation errors
for (Severity severity : failOn)
Expand All @@ -176,18 +178,8 @@ private void printInfo(String message)
getLog().info(message);
}

private void printErrors(Map<Severity, Map<CheckDetails, List<Result>>> results)
private void printErrors(List<String> violations)
{
final List<String> violations = new LinkedList<>();
results.forEach((severity, res) ->
res.forEach((checkDetails, resultList) ->
resultList.forEach(result ->
violations.add(checkDetails.getRule().id()
+ " - " + severity
+ " - " + checkDetails.getInstance().getClass().getSimpleName()
+ " - " + result.getDescription()
+ " - " + result.getPointer()))));

printHeader("Rule violations (" + violations.size() + ")");
violations.forEach(v -> getLog().warn(v));
getLog().warn("");
Expand Down Expand Up @@ -276,7 +268,7 @@ private Map<String, Object> loadConfig(final String ruleName, final String ruleC
}
}

private void writeResults(Map<CheckDetails, List<Result>> results)
private void writeResults(List<String> violations)
{
if (resultFile != null && !resultFile.trim().equals(""))
{
Expand All @@ -285,11 +277,20 @@ private void writeResults(Map<CheckDetails, List<Result>> results)
printInfo("Writing result file to " + resultFile);
getLog().info("");
final Path target = Paths.get(resultFile);
Files.createDirectories(target.getParent());
Files.writeString(target, mapper.writeValueAsString(results.values().stream().filter(r -> !r.isEmpty()).collect(Collectors.toList())));
Files.createDirectories(target.toAbsolutePath().getParent());
Files.writeString(target, "Rule violations (" + violations.size() + ")" + System.lineSeparator());
violations.forEach(v -> {
try {
Files.writeString(target, v + System.lineSeparator() , StandardOpenOption.APPEND);
} catch (IOException e) {
getLog().error("Could not write full output File", e);
e.printStackTrace();
}
});
}
catch (IOException e)
{
getLog().error(e);
throw new UncheckedIOException(e);
}
}
Expand All @@ -306,4 +307,18 @@ private Map<CheckDetails, List<Result>> validate(ZallyRunner zallyRunner, final
throw new UncheckedIOException(e.getMessage(), e);
}
}

private List<String> gatherViolations(Map<Severity, Map<CheckDetails, List<Result>>> results){
final List<String> violations = new ArrayList<>();
results.forEach((severity, res) ->
res.forEach((checkDetails, resultList) ->
resultList.forEach(result ->
violations.add(checkDetails.getRule().id()
+ " - " + severity
+ " - " + checkDetails.getInstance().getClass().getSimpleName()
+ " - " + result.getDescription()
+ " - " + result.getPointer()
+ " - " + result.getLines()))));
return violations;
}
}
29 changes: 19 additions & 10 deletions src/main/java/com/ethlo/zally/ZallyRunner.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.LinkedList;
Expand All @@ -34,6 +37,7 @@
import org.jetbrains.annotations.NotNull;
import org.zalando.zally.core.CheckDetails;
import org.zalando.zally.core.DefaultContext;
import org.zalando.zally.core.JsonPointerLocator;
import org.zalando.zally.core.Result;
import org.zalando.zally.core.RuleDetails;
import org.zalando.zally.rule.api.Check;
Expand Down Expand Up @@ -88,8 +92,8 @@ public Map<CheckDetails, List<Result>> validate(String url, final Set<String> sk

if (checkAnnotation != null && method.getParameterTypes().length == 1 && method.getParameterTypes()[0] == Context.class)
{
final List<Result> violationList = new LinkedList<>();
final CheckDetails checkDetails = performCheck(context, violationList, instance, ruleDetails.getRule(), ruleDetails.getRuleSet(), method, checkAnnotation);
final List<Result> violationList = new ArrayList<>();
final CheckDetails checkDetails = performCheck(context, violationList, instance, ruleDetails.getRule(), ruleDetails.getRuleSet(), method, checkAnnotation, url);
returnValue.put(checkDetails, violationList);
}
}
Expand All @@ -100,7 +104,7 @@ public Map<CheckDetails, List<Result>> validate(String url, final Set<String> sk
}

@NotNull
private CheckDetails performCheck(Context context, List<Result> violationList, Object instance, Rule ruleAnnotation, RuleSet ruleSet, Method method, Check checkAnnotation)
private CheckDetails performCheck(Context context, List<Result> violationList, Object instance, Rule ruleAnnotation, RuleSet ruleSet, Method method, Check checkAnnotation, String url)
{
final CheckDetails checkDetails = new CheckDetails(ruleSet, ruleAnnotation, instance, checkAnnotation, method);

Expand All @@ -127,12 +131,12 @@ private CheckDetails performCheck(Context context, List<Result> violationList, O
logger.info(String.format("Ignore violation, rule = %s, at %s", checkDetails.getRule().id(), violation.getPointer()));
continue;
}
violationList.add(handleViolation(checkDetails, violation));
violationList.add(handleViolation(url, checkDetails, violation));
}
}
else if (result instanceof Violation)
{
violationList.add(handleViolation(checkDetails, (Violation) result));
violationList.add(handleViolation(url, checkDetails, (Violation) result));
}
}
return checkDetails;
Expand Down Expand Up @@ -180,11 +184,16 @@ private Object createInstance(Class<?> type)
}
}

private Result handleViolation(final CheckDetails details, Violation violation)
private Result handleViolation(String url, final CheckDetails details, Violation violation)
{
// TODO: Handle pointers better to make it easier to know where the error is
//final JsonPointer pointer = violation.getPointer();
//System.out.println(pointer.toString() + " - " + pointer.toString().replace("~1", "/"));
JsonPointerLocator locator = new JsonPointerLocator("");
try {
// throw new IOException();
locator = new JsonPointerLocator(Files.readString(Paths.get(url)));
} catch (IOException e) {
logger.warn("Could not read File");;
e.printStackTrace();
}

return new Result(
details.getRule().id(),
Expand All @@ -193,7 +202,7 @@ private Result handleViolation(final CheckDetails details, Violation violation)
violation.getDescription(),
details.getCheck().severity(),
violation.getPointer(),
null/*locator.locate(violation.getPointer())*/
locator.locate(violation.getPointer())
);
}

Expand Down

0 comments on commit cc7f075

Please sign in to comment.