package org.cogroo.ruta.tools; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.cogroo.tools.checker.JavaRuleDefinition; import org.cogroo.tools.checker.RuleDefinition; import org.cogroo.tools.checker.rules.model.Example; import org.cogroo.util.ResourcesUtil; public class RuleParser { private RuleParser() { } private static List<Example> buildExampleArray( List<String> correctExamples, List<String> incorrectExamples) { List<Example> examples = new ArrayList<Example>(); while (!correctExamples.isEmpty() && !incorrectExamples.isEmpty()) { String ce = correctExamples.remove(0); String ie = incorrectExamples.remove(0); Example example = new Example(); example.setCorrect(ce); example.setIncorrect(ie); examples.add(example); } correctExamples.clear(); incorrectExamples.clear(); return examples; } public static Set<RuleDefinition> getRuleDefinitionList(String fileName) { Path path; try { path = ResourcesUtil.getResourceFile(RuleParser.class, fileName).toPath(); System.out.println(path); } catch (Exception e) { return Collections.emptySet(); } return getRuleDefinitionList(path); } public static Set<RuleDefinition> getRuleDefinitionList(Path path) { Set<RuleDefinition> rules = new HashSet<RuleDefinition>(); try { Map<String, String> rule = new HashMap<String, String>(); List<String> correctExamples = new ArrayList<String>(); List<String> incorrectExamples = new ArrayList<String>(); for (String line : Files.readAllLines(path, StandardCharsets.UTF_8)) { line = line.trim(); if (line.length() == 0 && rule.containsKey("id")) { List<Example> examples = buildExampleArray(correctExamples, incorrectExamples); rules.add(new JavaRuleDefinition(rule.get("id"), rule .get("category"), rule.get("group"), rule .get("description"), "RUTA: " + rule.get("message"), "RUTA: " + rule.get("shortMessage"), examples)); rule.clear(); continue; } String[] fields = line.split("=", 2); if (fields.length < 2) continue; fields[0] = fields[0].trim(); fields[1] = fields[1].trim(); if (fields[0].equals("correctExample")) correctExamples.add(fields[1]); else if (fields[0].equals("incorrectExample")) incorrectExamples.add(fields[1]); else { rule.put(fields[0], fields[1]); } } } catch (IOException e) { e.printStackTrace(); } return rules; } }