From 5db570b56953908236df9aded9a66ce8c7ba2f04 Mon Sep 17 00:00:00 2001 From: "Steven R. Loomis" Date: Fri, 19 Apr 2024 11:39:33 -0500 Subject: [PATCH] CLDR-17560 CheckCLDR UI for non-path checks - add a new 'supplemental' report that simply lists the overall errors - update Chart API to take testbundle --- tools/cldr-apps/js/src/esm/cldrText.mjs | 1 + .../org/unicode/cldr/web/api/ReportAPI.java | 5 +- .../java/org/unicode/cldr/tool/Chart.java | 8 ++ .../unicode/cldr/tool/ChartSupplemental.java | 86 +++++++++++++++++++ .../org/unicode/cldr/util/VettingViewer.java | 2 + .../unicode/cldr/util/VoterReportStatus.java | 1 + 6 files changed, 101 insertions(+), 2 deletions(-) create mode 100644 tools/cldr-code/src/main/java/org/unicode/cldr/tool/ChartSupplemental.java diff --git a/tools/cldr-apps/js/src/esm/cldrText.mjs b/tools/cldr-apps/js/src/esm/cldrText.mjs index e4de7986805..b27a54ebcf0 100644 --- a/tools/cldr-apps/js/src/esm/cldrText.mjs +++ b/tools/cldr-apps/js/src/esm/cldrText.mjs @@ -495,6 +495,7 @@ const strings = { special_r_datetime: "Datetime", special_r_zones: "Zones", special_r_personnames: "Person Names", + special_r_supplemental: "Entire Locale Errors", special_recent_activity: "Recent Activity", special_retry: "Retry", special_retry_inplace: "Retry", diff --git a/tools/cldr-apps/src/main/java/org/unicode/cldr/web/api/ReportAPI.java b/tools/cldr-apps/src/main/java/org/unicode/cldr/web/api/ReportAPI.java index 147d8f3d6f4..1600ff778a2 100644 --- a/tools/cldr-apps/src/main/java/org/unicode/cldr/web/api/ReportAPI.java +++ b/tools/cldr-apps/src/main/java/org/unicode/cldr/web/api/ReportAPI.java @@ -32,6 +32,7 @@ import org.unicode.cldr.util.VoterReportStatus.ReportAcceptability; import org.unicode.cldr.util.VoterReportStatus.ReportId; import org.unicode.cldr.web.CookieSession; +import org.unicode.cldr.web.DataPage; import org.unicode.cldr.web.ReportsDB; import org.unicode.cldr.web.ReportsDB.UserReport; import org.unicode.cldr.web.STFactory; @@ -414,10 +415,10 @@ public Response getReportOutput( private String writeReport(ReportId report, CLDRLocale loc) throws IOException { final Writer w = new StringWriter(); + final STFactory stf = CookieSession.sm.getSTFactory(); final Chart chart = Chart.forReport(report, loc.getBaseName()); if (chart != null) { - final STFactory stf = CookieSession.sm.getSTFactory(); - chart.writeContents(w, stf); + chart.writeContents(w, stf, stf.getTestResult(loc, DataPage.getSimpleOptions(loc))); } else { switch (report) { // "Old Three" reports diff --git a/tools/cldr-code/src/main/java/org/unicode/cldr/tool/Chart.java b/tools/cldr-code/src/main/java/org/unicode/cldr/tool/Chart.java index 2c34553da69..d6a1ec9bfae 100644 --- a/tools/cldr-code/src/main/java/org/unicode/cldr/tool/Chart.java +++ b/tools/cldr-code/src/main/java/org/unicode/cldr/tool/Chart.java @@ -9,6 +9,7 @@ import java.io.Writer; import java.util.Arrays; import java.util.stream.Collectors; +import org.unicode.cldr.test.TestCache.TestResultBundle; import org.unicode.cldr.tool.FormattedFileWriter.Anchors; import org.unicode.cldr.util.CLDRConfig; import org.unicode.cldr.util.CLDRFile; @@ -158,6 +159,11 @@ public void writeContents(Writer pw, Factory factory) throws IOException { throw new IllegalArgumentException("Not implemented yet"); } + public void writeContents(Writer pw, Factory factory, TestResultBundle bundle) + throws IOException { + this.writeContents(pw, factory); + } + private static final class AnalyticsHelper { private static final AnalyticsHelper INSTANCE = new AnalyticsHelper(); @@ -220,6 +226,8 @@ public static Chart forReport(final ReportId report, final String locale) { switch (report) { case personnames: return new ChartPersonName(locale); + case supplemental: + return new ChartSupplemental(locale); default: return null; } diff --git a/tools/cldr-code/src/main/java/org/unicode/cldr/tool/ChartSupplemental.java b/tools/cldr-code/src/main/java/org/unicode/cldr/tool/ChartSupplemental.java new file mode 100644 index 00000000000..67d3fb77522 --- /dev/null +++ b/tools/cldr-code/src/main/java/org/unicode/cldr/tool/ChartSupplemental.java @@ -0,0 +1,86 @@ +package org.unicode.cldr.tool; + +import java.io.IOException; +import java.io.Writer; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.TreeSet; +import org.unicode.cldr.test.CheckCLDR.CheckStatus; +import org.unicode.cldr.test.TestCache.TestResultBundle; +import org.unicode.cldr.util.CLDRConfig; +import org.unicode.cldr.util.CLDRFile; +import org.unicode.cldr.util.CLDRPaths; +import org.unicode.cldr.util.Factory; + +public class ChartSupplemental extends Chart { + private static final CLDRConfig CLDR_CONFIG = CLDRConfig.getInstance(); + static final CLDRFile ENGLISH = CLDR_CONFIG.getEnglish(); + static final String DIR = CLDRPaths.CHART_DIRECTORY + "verify/supplemental/"; + + private final String locale; + + public ChartSupplemental(String locale) { + super(); + this.locale = locale; + } + + @Override + public String getDirectory() { + return DIR; + } + + @Override + public String getTitle() { + return ENGLISH.getName(locale) + ": Supplemental Data"; + } + + @Override + public String getExplanation() { + return "

This chart shows supplemental data that is of concern to the locale overall.

"; + } + + @Override + public String getFileName() { + return locale; + } + + @Override + public void writeContents(Writer pw, Factory factory, TestResultBundle test) + throws IOException { + CLDRFile cldrFile = factory.make(locale, true); + + Set pp = new TreeSet(); + + // add any 'early' errors + pp.addAll(test.getPossibleProblems()); + + // add all non-path status + for (final String x : cldrFile) { + List result = new ArrayList(); + test.check(x, result, cldrFile.getStringValue(x)); + for (final CheckStatus s : result) { + if (s.isEntireLocale()) pp.add(s); + } + } + + // report + + if (pp.isEmpty()) { + pw.write("

No Errors

\n"); + pw.write("There are no overall locale issues to report"); + } else { + pw.write("

Overall Errors

\n"); + pw.write("
    \n"); + for (final CheckStatus s : pp) { + pw.write( + String.format( + "
  1. %s %s - %s
  2. \n", + s.getType(), s.getSubtype(), s.getMessage())); + } + pw.write("
\n\n"); + } + + pw.write(" \n"); + } +} diff --git a/tools/cldr-code/src/main/java/org/unicode/cldr/util/VettingViewer.java b/tools/cldr-code/src/main/java/org/unicode/cldr/util/VettingViewer.java index 6696998312d..c6a6c830dea 100644 --- a/tools/cldr-code/src/main/java/org/unicode/cldr/util/VettingViewer.java +++ b/tools/cldr-code/src/main/java/org/unicode/cldr/util/VettingViewer.java @@ -197,6 +197,8 @@ public Status getErrorStatus( StringBuilder errorMessage = new StringBuilder(); factory.getTestCache().getBundle(options).check(path, result, value); for (CheckStatus checkStatus : result) { + if (checkStatus.isEntireLocale()) + continue; // these will show up in the Entire Locale (supplemental) report final CheckCLDR cause = checkStatus.getCause(); /* * CheckCoverage will be shown under Missing, not under Warnings; and diff --git a/tools/cldr-code/src/main/java/org/unicode/cldr/util/VoterReportStatus.java b/tools/cldr-code/src/main/java/org/unicode/cldr/util/VoterReportStatus.java index 73e669af078..2e4bd8d22bb 100644 --- a/tools/cldr-code/src/main/java/org/unicode/cldr/util/VoterReportStatus.java +++ b/tools/cldr-code/src/main/java/org/unicode/cldr/util/VoterReportStatus.java @@ -21,6 +21,7 @@ public abstract class VoterReportStatus { * 'Person Names' Also see {@link org.unicode.cldr.tool.Chart#forReport(ReportId, String)} */ public enum ReportId { + supplemental, // non-Chart (Entire Locale) datetime, // non-Chart zones, // non-Chart compact, // non-Chart, aka 'numbers'