| 73 | | for (Test test : analysers) { |
| 74 | | out.println(" <analyser timestamp='"+timestamp+"' name='"+XmlWriter.encode(test.getName())+"'>"); |
| 75 | | // Build map of test error classes for the current test |
| 76 | | Map<ErrorClass, List<TestError>> map = new HashMap<>(); |
| 77 | | for (Entry<Severity, Map<String, Map<String, List<TestError>>>> e1 : |
| 78 | | OsmValidator.getErrorsBySeverityMessageDescription(validationErrors, e -> e.getTester() == test).entrySet()) { |
| 79 | | for (Entry<String, Map<String, List<TestError>>> e2 : e1.getValue().entrySet()) { |
| 80 | | ErrorClass errorClass = new ErrorClass(e1.getKey(), e2.getKey()); |
| 81 | | List<TestError> list = map.get(errorClass); |
| 82 | | if (list == null) { |
| 83 | | list = new ArrayList<>(); |
| 84 | | map.put(errorClass, list); |
| | 70 | for (Test test : analysers) { |
| | 71 | out.println(" <analyser timestamp='" + timestamp + "' name='" + XmlWriter.encode(test.getName()) + "'>"); |
| | 72 | // Build map of test error classes for the current test |
| | 73 | Map<ErrorClass, List<TestError>> map = new HashMap<>(); |
| | 74 | for (Entry<Severity, Map<String, Map<String, List<TestError>>>> e1 : |
| | 75 | OsmValidator.getErrorsBySeverityMessageDescription(validationErrors, e -> e.getTester() == test).entrySet()) { |
| | 76 | for (Entry<String, Map<String, List<TestError>>> e2 : e1.getValue().entrySet()) { |
| | 77 | ErrorClass errorClass = new ErrorClass(e1.getKey(), e2.getKey()); |
| | 78 | List<TestError> list = map.get(errorClass); |
| | 79 | if (list == null) { |
| | 80 | list = new ArrayList<>(); |
| | 81 | map.put(errorClass, list); |
| | 82 | } |
| | 83 | e2.getValue().values().forEach(list::addAll); |
| 88 | | } |
| 89 | | // Write classes |
| 90 | | for (ErrorClass ec : map.keySet()) { |
| 91 | | out.println(" <class id='"+ec.id+"' level='"+ec.severity.getLevel()+"'>"); |
| 92 | | out.println(" <classtext lang='"+XmlWriter.encode(lang)+"' title='"+XmlWriter.encode(ec.message)+"'/>"); |
| 93 | | out.println(" </class>"); |
| 94 | | } |
| | 86 | // Write classes |
| | 87 | for (ErrorClass ec : map.keySet()) { |
| | 88 | out.println(" <class id='" + ec.id + "' level='" + ec.severity.getLevel() + "'>"); |
| | 89 | out.println(" <classtext lang='" + XmlWriter.encode(lang) + "' title='" + XmlWriter.encode(ec.message) + "'/>"); |
| | 90 | out.println(" </class>"); |
| | 91 | } |
| 96 | | // Write errors |
| 97 | | for (Entry<ErrorClass, List<TestError>> entry : map.entrySet()) { |
| 98 | | for (TestError error : entry.getValue()) { |
| 99 | | LatLon ll = error.getPrimitives().iterator().next().getBBox().getCenter(); |
| 100 | | out.println(" <error class='"+entry.getKey().id+"'>"); |
| 101 | | out.print(" <location"); |
| 102 | | osmWriter.writeLatLon(ll); |
| 103 | | out.println("/>"); |
| 104 | | for (OsmPrimitive p : error.getPrimitives()) { |
| 105 | | p.accept(osmWriter); |
| 106 | | } |
| 107 | | out.println(" <text lang='"+XmlWriter.encode(lang)+"' value='"+XmlWriter.encode(error.getDescription())+"'/>"); |
| 108 | | if (error.isFixable()) { |
| 109 | | out.println(" <fixes>"); |
| 110 | | Command fix = error.getFix(); |
| 111 | | if (fix instanceof AddPrimitivesCommand) { |
| 112 | | Logging.info("TODO: {0}", fix); |
| 113 | | } else if (fix instanceof DeleteCommand) { |
| 114 | | Logging.info("TODO: {0}", fix); |
| 115 | | } else if (fix instanceof ChangePropertyCommand) { |
| 116 | | Logging.info("TODO: {0}", fix); |
| 117 | | } else if (fix instanceof ChangePropertyKeyCommand) { |
| 118 | | Logging.info("TODO: {0}", fix); |
| 119 | | } else { |
| 120 | | Logging.warn("Unsupported command type: {0}", fix); |
| | 93 | // Write errors |
| | 94 | for (Entry<ErrorClass, List<TestError>> entry : map.entrySet()) { |
| | 95 | for (TestError error : entry.getValue()) { |
| | 96 | LatLon ll = error.getPrimitives().iterator().next().getBBox().getCenter(); |
| | 97 | out.println(" <error class='" + entry.getKey().id + "'>"); |
| | 98 | out.print(" <location"); |
| | 99 | osmWriter.writeLatLon(ll); |
| | 100 | out.println("/>"); |
| | 101 | for (OsmPrimitive p : error.getPrimitives()) { |
| | 102 | p.accept(osmWriter); |
| 122 | | out.println(" </fixes>"); |
| | 104 | out.println(" <text lang='" + XmlWriter.encode(lang) + "' value='" + XmlWriter.encode(error.getDescription()) + "'/>"); |
| | 105 | if (error.isFixable()) { |
| | 106 | out.println(" <fixes>"); |
| | 107 | Command fix = error.getFix(); |
| | 108 | if (fix instanceof AddPrimitivesCommand) { |
| | 109 | Logging.info("TODO: {0}", fix); |
| | 110 | } else if (fix instanceof DeleteCommand) { |
| | 111 | Logging.info("TODO: {0}", fix); |
| | 112 | } else if (fix instanceof ChangePropertyCommand) { |
| | 113 | Logging.info("TODO: {0}", fix); |
| | 114 | } else if (fix instanceof ChangePropertyKeyCommand) { |
| | 115 | Logging.info("TODO: {0}", fix); |
| | 116 | } else { |
| | 117 | Logging.warn("Unsupported command type: {0}", fix); |
| | 118 | } |
| | 119 | out.println(" </fixes>"); |
| | 120 | } |
| | 121 | out.println(" </error>"); |