Author: rwhitcomb
Date: Tue Jan 18 08:24:10 2022
New Revision: 1897168

URL: http://svn.apache.org/viewvc?rev=1897168&view=rev
Log:
Spruce up the output of StyleChecks using single box drawing characters 
everywhere.

Modified:
    pivot/trunk/StyleChecks.java

Modified: pivot/trunk/StyleChecks.java
URL: 
http://svn.apache.org/viewvc/pivot/trunk/StyleChecks.java?rev=1897168&r1=1897167&r2=1897168&view=diff
==============================================================================
--- pivot/trunk/StyleChecks.java (original)
+++ pivot/trunk/StyleChecks.java Tue Jan 18 08:24:10 2022
@@ -411,16 +411,18 @@ public final class StyleChecks {
     private static final String FORMAT3A = "    %1$5s %2$-30s%3$,6d (%4$,d)%n";
     /** Format string used to print the underlines. */
     private static final String UNDER_FORMAT = "%1$3s %2$5s %3$-30s%4$6s 
%5$s%n";
-    /** Three character underline. */
-    private static final String THREE = "---";
-    /** Five character underline. */
-    private static final String FIVE = "-----";
-    /** Six character underline. */
-    private static final String SIX = "------";
-    /** File name underline. */
-    private static final String FILE = "-------------------";
-    /** Category name underline. */
-    private static final String CATEGORY = "----------------------------";
+
+    /** First column header: number. */
+    private static final String HDR_NUMBER = " # ";
+    /** Second column header: severity. */
+    private static final String HDR_SEVERITY =  " Sev ";
+    /** Third column header: category. */
+    private static final String HDR_CATEGORY =  "Category";
+    /** Fourth column header: count. */
+    private static final String HDR_COUNT =  " Count";
+    /** Last column header: file list. */
+    private static final String HDR_FILES =  "File(s)";
+
     /** Format string for the file vs problem count report. */
     private static final String FORMAT4 = "    %1$-42s %2$,6d%n";
     /** Alternate format string for the file vs problem count report. */
@@ -513,21 +515,40 @@ public final class StyleChecks {
     };
 
 
-    /** Upper-left corner character (double line). */
-    private static final char ULC = '\u2554';
-    /** Upper-right corner character (double line). */
-    private static final char URC = '\u2557';
-    /** Horizontal line character (double line). */
-    private static final char HZL = '\u2550';
-    /** Vertical line character (double line). */
-    private static final char VTL = '\u2551';
-    /** Lower-left corner character (double line). */
-    private static final char LLC = '\u255A';
-    /** Lower-right corner character (double line). */
-    private static final char LRC = '\u255D';
+    /** Upper-left rounded corner character (single line). */
+    private static final char ULC = '\u256D';
+    /** Upper-right rounded corner character (single line). */
+    private static final char URC = '\u256E';
+    /** Horizontal line character (single line). */
+    private static final char HZL = '\u2500';
+    /** Vertical line character (single line). */
+    private static final char VTL = '\u2502';
+    /** Lower-left rounded corner character (single line). */
+    private static final char LLC = '\u2570';
+    /** Lower-right rounded corner character (single line). */
+    private static final char LRC = '\u256F';
 
     /** Width of our banner (pretty arbitrary). */
-    private static final int WIDTH = 57;
+    private static final int WIDTH = 66;
+    /** Width of the Category column. */
+    private static final int CATEGORY_WIDTH = 28;
+    /** Width of the File(s) column. */
+    private static final int FILES_WIDTH = 19;
+
+
+    /**
+     * Line types.
+     */
+    private enum LineType {
+        /** The top border of the banner box. */
+        TOP,
+        /** The bottom border of the banner box. */
+        BOTTOM,
+        /** One of the middle lines of the banner box. */
+        MIDDLE,
+        /** A line under a heading. */
+        UNDER
+    }
 
 
     /**
@@ -537,39 +558,44 @@ public final class StyleChecks {
      * @param message  message for type 2
      * @return Constructed line to print.
      */
-    private static String constructBoxLine(final int lineType, final int 
width, final String message) {
+    private static String constructBoxLine(final LineType lineType, final int 
width, final String message) {
         char[] chars = new char[width];
 
         switch (lineType) {
-            case 0:
+            case TOP:
                 chars[0] = ULC;
                 chars[width - 1] = URC;
                 break;
-            case 1:
+            case BOTTOM:
                 chars[0] = LLC;
                 chars[width - 1] = LRC;
                 break;
-            case 2:
+            case MIDDLE:
                 chars[0] = VTL;
                 chars[width - 1] = VTL;
                 break;
+            case UNDER:
+                chars[0] = HZL;
+                chars[width - 1] = HZL;
+                break;
             default:
                 break;
         }
 
         switch (lineType) {
-            case 0:
-            case 1:
+            case TOP:
+            case BOTTOM:
+            case UNDER:
                 Arrays.fill(chars, 1, width - 1, HZL);
                 break;
-            case 2:
+            case MIDDLE:
                 Arrays.fill(chars, 1, width - 1, ' ');
                 break;
             default:
                 break;
         }
 
-        if (lineType == 2 && message != null) {
+        if (lineType == LineType.MIDDLE && message != null) {
             int startPos = (width + 1 - message.length() * 2) / 2;
             for (int i = 0, pos = startPos; i < message.length(); i++, pos += 
2) {
                 chars[pos] = message.charAt(i);
@@ -580,6 +606,16 @@ public final class StyleChecks {
     }
 
     /**
+     * Output a header message with an underline of the same length.
+     *
+     * @param message The (header) message to output.
+     */
+    private static void underlinedMessage(final String message) {
+        System.out.println(message);
+        System.out.println(constructBoxLine(LineType.UNDER, message.length(), 
null));
+    }
+
+    /**
      * Output a formatted error message to {@link System#err}.
      * @param format The format string as input to {@link String#format}.
      * @param args   The (optional) arguments to be interpolated in the 
message.
@@ -861,11 +897,17 @@ public final class StyleChecks {
      * @param total      Total number of warnings plus errors.
      */
     private static void displayReport(final int totalWarn, final int 
totalError, final int total) {
-        System.out.println(constructBoxLine(0, WIDTH, null));
-        System.out.println(constructBoxLine(2, WIDTH, null));
-        System.out.println(constructBoxLine(2, WIDTH, "STYLE CHECK RESULTS"));
-        System.out.println(constructBoxLine(2, WIDTH, null));
-        System.out.println(constructBoxLine(1, WIDTH, null));
+        String numberLine   = constructBoxLine(LineType.UNDER, 
HDR_NUMBER.length(), null);
+        String severityLine = constructBoxLine(LineType.UNDER, 
HDR_SEVERITY.length(), null);
+        String countLine    = constructBoxLine(LineType.UNDER, 
HDR_COUNT.length(), null);
+        String filesLine    = constructBoxLine(LineType.UNDER, FILES_WIDTH, 
null);
+        String categoryLine = constructBoxLine(LineType.UNDER, CATEGORY_WIDTH, 
null);
+
+        System.out.println(constructBoxLine(LineType.TOP,    WIDTH, null));
+        System.out.println(constructBoxLine(LineType.MIDDLE, WIDTH, null));
+        System.out.println(constructBoxLine(LineType.MIDDLE, WIDTH, "STYLE 
CHECK RESULTS"));
+        System.out.println(constructBoxLine(LineType.MIDDLE, WIDTH, null));
+        System.out.println(constructBoxLine(LineType.BOTTOM, WIDTH, null));
         System.out.println();
 
         if (sortedList.isEmpty()) {
@@ -908,14 +950,16 @@ public final class StyleChecks {
             }
 
             // Output the final summary report for this input file
-            System.out.format(UNDER_FORMAT, " # ", " Sev ", "Category", " 
Count", "File(s)");
-            System.out.format(UNDER_FORMAT, THREE, FIVE, CATEGORY, SIX, FILE);
+            System.out.format(UNDER_FORMAT, HDR_NUMBER, HDR_SEVERITY, 
HDR_CATEGORY, HDR_COUNT, HDR_FILES);
+            System.out.format(UNDER_FORMAT, numberLine, severityLine, 
categoryLine, countLine, filesLine);
+
             int categoryNo = 0;
             for (Info info : sortedList) {
                 reportInfo(++categoryNo, info, !duplicates);
             }
 
-            System.out.format(UNDER_FORMAT, THREE, FIVE, CATEGORY, SIX, FILE);
+            System.out.format(UNDER_FORMAT, numberLine, severityLine, 
categoryLine, countLine, filesLine);
+
             System.out.format(FORMAT3A, SEV_WARN, TOTAL, totalWarn, 
fileNameWarnSet.size());
             System.out.format(FORMAT3A, SEV_ERROR, TOTAL, totalError, 
fileNameErrorSet.size());
             System.out.format(FORMAT3, "Total of All", total, 
fileNameSet.size());
@@ -938,8 +982,9 @@ public final class StyleChecks {
 
             // The list is sorted by count, with highest count first
             fileCountList.sort((o1, o2) -> o2.getCount() - o1.getCount());
-            System.out.println(twoReports ? "Files with the most problems:" : 
"File problem counts:");
-            System.out.println(twoReports ? "-----------------------------" : 
"--------------------");
+
+            underlinedMessage(twoReports ? "Files With the Most Problems" : 
"File Problem Counts");
+
             int num = 1;
             for (FileInfo info : fileCountList) {
                 String name = duplicates ? info.getName() : info.getNameOnly();
@@ -954,8 +999,9 @@ public final class StyleChecks {
                 if (leastRemaining > 0) {
                     // The list is sorted by count, with lowest count first
                     fileCountList.sort((o1, o2) -> o1.getCount() - 
o2.getCount());
-                    System.out.println("Files with the fewest problems:");
-                    System.out.println("-------------------------------");
+
+                    underlinedMessage("Files With the Fewest Problems");
+
                     for (int i = leastRemaining; i > 0; i--) {
                         FileInfo info = fileCountList.get(i - 1);
                         String name = duplicates ? info.getName() : 
info.getNameOnly();


Reply via email to