﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc
22898	[Patch] JOSM Validator CLI errors out when is run with --load-preferences argument	emanuel_raymond@…	team	"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
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""));
}}}
"	defect	closed	normal	23.04	Core	latest	fixed		
