Opened 23 months ago

Last modified 23 months ago

#22898 closed defect

JOSM Validator CLI errors out when is run with --load-preferences argument — at Initial Version

Reported by: emanuel_raymond@… Owned by: team
Priority: normal Milestone: 23.04
Component: Core Version: latest
Keywords: Cc:

Description

Use case: would like to use --load-preferences argument to add custom mapcss rules for the validator when running in CLI mode.

Problem: When running with --load-preferences, JOSM Validator CLI errors out.

Description:

I notice the issue is coming from these lines:

  • Config.setBaseDirectoriesProvider(JosmBaseDirectories.getInstance());
    • should be called before this.parseArguments(argArray);
  • tempPreferences.getAllSettings().entrySet().stream().filter(entry -> entry.getValue().isNew())
    • I removed the isNew filter because I noticed that they were not set to true.

The following code snippet is the git diff for the fix that I applied to mitigate this error. Note: I have little knowledge to the whole source code and this is my first time debugging and exploring the code myself.

diff --git a/src/org/openstreetmap/josm/data/validation/ValidatorCLI.java b/src/org/openstreetmap/josm/data/validation/ValidatorCLI.java
index cd4164c37..a2807cfe5 100644
--- a/src/org/openstreetmap/josm/data/validation/ValidatorCLI.java
+++ b/src/org/openstreetmap/josm/data/validation/ValidatorCLI.java
@@ -165,10 +165,17 @@ public class ValidatorCLI implements CLIModule {
             // Ensure that preferences are only in memory
             Config.setPreferencesInstance(new MemoryPreferences());
             Logging.setLogLevel(Level.INFO);
+            Logging.setLogLevel(this.logLevel);
+            HttpClient.setFactory(Http1Client::new);
+            Config.setBaseDirectoriesProvider(JosmBaseDirectories.getInstance()); // for right-left-hand traffic cache file
+            Config.setUrlsProvider(JosmUrls.getInstance());
+            ProjectionRegistry.setProjection(Projections.getProjectionByCode("epsg:3857".toUpperCase(Locale.ROOT)));
+            
             this.parseArguments(argArray);
             if (this.input.isEmpty()) {
                 throw new IllegalArgumentException(tr("Missing argument - input data file ({0})", "--input|-i"));
             }
+            
             this.initialize();
             final ProgressMonitor fileMonitor = progressMonitorFactory.get();
             fileMonitor.beginTask(tr("Processing files..."), this.input.size());
@@ -345,12 +352,6 @@ public class ValidatorCLI implements CLIModule {
      * Arguments may need to be parsed first.
      */
     void initialize() {
-        Logging.setLogLevel(this.logLevel);
-        HttpClient.setFactory(Http1Client::new);
-        Config.setBaseDirectoriesProvider(JosmBaseDirectories.getInstance()); // for right-left-hand traffic cache file
-        Config.setUrlsProvider(JosmUrls.getInstance());
-        ProjectionRegistry.setProjection(Projections.getProjectionByCode("epsg:3857".toUpperCase(Locale.ROOT)));
-
         Territories.initializeInternalData();
         OsmValidator.initialize();
         MapPaintStyles.readFromPreferences();
@@ -430,7 +431,7 @@ public class ValidatorCLI implements CLIModule {
             final IPreferences pref = Config.getPref();
             if (pref instanceof MemoryPreferences) {
                 final MemoryPreferences memoryPreferences = (MemoryPreferences) pref;
-                tempPreferences.getAllSettings().entrySet().stream().filter(entry -> entry.getValue().isNew())
+                tempPreferences.getAllSettings().entrySet().stream()
                         .forEach(entry -> memoryPreferences.putSetting(entry.getKey(), entry.getValue()));
             } else {
                 throw new JosmRuntimeException(tr("Preferences are not the expected type"));

Change History (0)

Note: See TracTickets for help on using tickets.