Changeset 17337 in josm for trunk/src/org


Ignore:
Timestamp:
2020-11-23T20:25:04+01:00 (3 years ago)
Author:
simon04
Message:

ShowStatusReportAction: migrate to PrintWriter

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/ShowStatusReportAction.java

    r17210 r17337  
    99import java.awt.Dimension;
    1010import java.awt.DisplayMode;
     11import java.awt.GraphicsDevice;
    1112import java.awt.GraphicsEnvironment;
    1213import java.awt.Toolkit;
     
    1415import java.awt.event.KeyEvent;
    1516import java.awt.geom.AffineTransform;
     17import java.io.PrintWriter;
     18import java.io.StringWriter;
    1619import java.lang.management.ManagementFactory;
    1720import java.util.ArrayList;
     
    7982     */
    8083    public static String getReportHeader() {
    81         StringBuilder text = new StringBuilder(256);
     84        StringWriter stringWriter = new StringWriter(256);
     85        PrintWriter text = new PrintWriter(stringWriter);
    8286        String runtimeVersion = getSystemProperty("java.runtime.version");
    83         text.append(Version.getInstance().getReleaseAttributes())
    84             .append("\nIdentification: ").append(Version.getInstance().getAgentString());
     87        text.println(Version.getInstance().getReleaseAttributes());
     88        text.format("Identification: %s%n", Version.getInstance().getAgentString());
    8589        String buildNumber = PlatformManager.getPlatform().getOSBuildNumber();
    8690        if (!buildNumber.isEmpty()) {
    87             text.append("\nOS Build number: ").append(buildNumber);
    88         }
    89         text.append("\nMemory Usage: ")
    90             .append(Runtime.getRuntime().totalMemory()/1024/1024)
    91             .append(" MB / ")
    92             .append(Runtime.getRuntime().maxMemory()/1024/1024)
    93             .append(" MB (")
    94             .append(Runtime.getRuntime().freeMemory()/1024/1024)
    95             .append(" MB allocated, but free)\nJava version: ")
    96             .append(runtimeVersion != null ? runtimeVersion : getSystemProperty("java.version")).append(", ")
    97             .append(getSystemProperty("java.vendor")).append(", ")
    98             .append(getSystemProperty("java.vm.name"))
    99             .append("\nLook and Feel: ")
    100             .append(Optional.ofNullable(UIManager.getLookAndFeel()).map(laf -> laf.getClass().getName()).orElse("null"))
    101             .append("\nScreen: ");
     91            text.format("OS Build number: %s%n", buildNumber);
     92        }
     93        text.format("Memory Usage: %d MB / %d MB (%d MB allocated, but free)%n",
     94                Runtime.getRuntime().totalMemory() / 1024 / 1024,
     95                Runtime.getRuntime().maxMemory() / 1024 / 1024,
     96                Runtime.getRuntime().freeMemory() / 1024 / 1024);
     97        text.format("Java version: %s, %s, %s%n",
     98                runtimeVersion != null ? runtimeVersion : getSystemProperty("java.version"),
     99                getSystemProperty("java.vendor"),
     100                getSystemProperty("java.vm.name"));
     101        text.format("Look and Feel: %s%n",
     102                Optional.ofNullable(UIManager.getLookAndFeel()).map(laf -> laf.getClass().getName()).orElse("null"));
    102103        if (!GraphicsEnvironment.isHeadless()) {
    103             text.append(Arrays.stream(GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()).map(gd -> {
    104                         StringBuilder b = new StringBuilder(gd.getIDstring());
    105                         DisplayMode dm = gd.getDisplayMode();
    106                         if (dm != null) {
    107                             // Java 11: use DisplayMode#toString
    108                             b.append(' ').append(dm.getWidth()).append('x').append(dm.getHeight());
    109                             AffineTransform transform = gd.getDefaultConfiguration().getDefaultTransform();
    110                             b.append(" (scaling ").append(transform.getScaleX()).append('x').append(transform.getScaleY()).append(')');
    111                         }
    112                         return b.toString();
    113                     }).collect(Collectors.joining(", ")));
    114         }
    115         Dimension maxScreenSize = GuiHelper.getMaximumScreenSize();
    116         text.append("\nMaximum Screen Size: ")
    117             .append((int) maxScreenSize.getWidth()).append('x')
    118             .append((int) maxScreenSize.getHeight()).append('\n');
     104            text.append("Screen:");
     105            for (GraphicsDevice gd : GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()) {
     106                text.append(" ").append(gd.getIDstring());
     107                DisplayMode dm = gd.getDisplayMode();
     108                if (dm != null) {
     109                    AffineTransform transform = gd.getDefaultConfiguration().getDefaultTransform();
     110                    // Java 11: use DisplayMode#toString
     111                    text.format(" %d\u00D7%d (scaling %.2f\u00D7%.2f)",
     112                            dm.getWidth(), dm.getHeight(), transform.getScaleX(), transform.getScaleY());
     113                }
     114            }
     115            text.println();
     116        }
     117        text.format("Maximum Screen Size: %s%n", toString(GuiHelper.getMaximumScreenSize()));
    119118        if (!GraphicsEnvironment.isHeadless()) {
    120119            Dimension bestCursorSize16 = Toolkit.getDefaultToolkit().getBestCursorSize(16, 16);
    121120            Dimension bestCursorSize32 = Toolkit.getDefaultToolkit().getBestCursorSize(32, 32);
    122             text.append("Best cursor sizes: 16x16 -> ")
    123                     .append(bestCursorSize16.width).append('x').append(bestCursorSize16.height)
    124                     .append(", 32x32 -> ")
    125                     .append(bestCursorSize32.width).append('x').append(bestCursorSize32.height)
    126                     .append('\n');
     121            text.format("Best cursor sizes: %sā†’%s, %sā†’%s%n",
     122                    toString(new Dimension(16, 16)), toString(bestCursorSize16),
     123                    toString(new Dimension(32, 32)), toString(bestCursorSize32));
    127124        }
    128125
     
    130127            PlatformHookUnixoid platform = (PlatformHookUnixoid) PlatformManager.getPlatform();
    131128            // Add desktop environment
    132             platform.getDesktopEnvironment().ifPresent(desktop -> text
    133                     .append("Desktop environment: ")
    134                     .append(desktop)
    135                     .append('\n'));
     129            platform.getDesktopEnvironment().ifPresent(desktop -> text.format("Desktop environment: %s%n", desktop));
    136130            // Add Java package details
    137131            String packageDetails = platform.getJavaPackageDetails();
    138132            if (packageDetails != null) {
    139                 text.append("Java package: ")
    140                     .append(packageDetails)
    141                     .append('\n');
     133                text.format("Java package: %s%n", packageDetails);
    142134            }
    143135            // Add WebStart package details if run from JNLP
     
    145137                String webStartDetails = platform.getWebStartPackageDetails();
    146138                if (webStartDetails != null) {
    147                     text.append("WebStart package: ")
    148                         .append(webStartDetails)
    149                         .append('\n');
     139                    text.format("WebStart package: %s%n", webStartDetails);
    150140                }
    151141            }
     
    153143            String atkWrapperDetails = platform.getAtkWrapperPackageDetails();
    154144            if (atkWrapperDetails != null) {
    155                 text.append("Java ATK Wrapper package: ")
    156                     .append(atkWrapperDetails)
    157                     .append('\n');
     145                text.format("Java ATK Wrapper package: %s%n", atkWrapperDetails);
    158146            }
    159147            String lang = System.getenv("LANG");
    160148            if (lang != null) {
    161                 text.append("Environment variable LANG: ")
    162                     .append(lang)
    163                     .append('\n');
     149                text.format("Environment variable LANG: %s%n", lang);
    164150            }
    165151            // Add dependencies details if found
     
    176162                String details = PlatformHookUnixoid.getPackageDetails(p);
    177163                if (details != null) {
    178                     text.append(p).append(": ").append(details).append('\n');
     164                    text.format("%s: %s%n", p, details);
    179165                }
    180166            }
     
    206192            }
    207193            if (!vmArguments.isEmpty()) {
    208                 text.append("VM arguments: ").append(vmArguments.toString().replace("\\\\", "\\")).append('\n');
     194                text.format("VM arguments: %s%n", vmArguments.toString().replace("\\\\", "\\"));
    209195            }
    210196        } catch (SecurityException e) {
     
    213199        List<String> commandLineArgs = MainApplication.getCommandLineArgs();
    214200        if (!commandLineArgs.isEmpty()) {
    215             text.append("Program arguments: ").append(Arrays.toString(paramCleanup(commandLineArgs).toArray())).append('\n');
     201            text.format("Program arguments: %s%n", Arrays.toString(paramCleanup(commandLineArgs).toArray()));
    216202        }
    217203        DataSet dataset = MainApplication.getLayerManager().getActiveDataSet();
     
    219205            String result = DatasetConsistencyTest.runTests(dataset);
    220206            if (result.isEmpty()) {
    221                 text.append("Dataset consistency test: No problems found\n");
     207                text.println("Dataset consistency test: No problems found");
    222208            } else {
    223                 text.append("\nDataset consistency test:\n").append(result).append('\n');
    224             }
    225         }
    226         text.append('\n');
     209                text.println();
     210                text.println("Dataset consistency test:");
     211                text.println(result);
     212            }
     213        }
     214        text.println();
    227215        appendCollection(text, "Plugins", Utils.transform(PluginHandler.getBugReportInformation(), i -> "+ " + i));
    228216        appendCollection(text, "Tagging presets", getCustomUrls(PresetPrefHelper.INSTANCE));
     
    233221        String osmApi = OsmApi.getOsmApi().getServerUrl();
    234222        if (!Config.getUrls().getDefaultOsmApiUrl().equals(osmApi.trim())) {
    235             text.append("OSM API: ").append(osmApi).append("\n\n");
    236         }
    237 
    238         return text.toString();
     223            text.format("OSM API: %s%n", osmApi);
     224        }
     225
     226        text.println();
     227        return stringWriter.toString();
     228    }
     229
     230    private static String toString(Dimension dimension) {
     231        return dimension.width + "\u00D7" + dimension.height;
    239232    }
    240233
     
    294287    }
    295288
    296     private static void appendCollection(StringBuilder text, String label, Collection<String> col) {
     289    private static void appendCollection(PrintWriter text, String label, Collection<String> col) {
    297290        if (!col.isEmpty()) {
    298291            text.append(col.stream().map(o -> paramCleanup(o) + '\n')
Note: See TracChangeset for help on using the changeset viewer.