Ignore:
Timestamp:
2019-11-02T15:11:34+01:00 (6 years ago)
Author:
Don-vip
Message:

fix #16796 - Rework of GPX track colors / layer preferences (patch by Bjoeni)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/Preferences.java

    r15469 r15496  
    2222import java.util.HashSet;
    2323import java.util.Iterator;
     24import java.util.List;
    2425import java.util.Map;
    2526import java.util.Map.Entry;
     
    3031import java.util.concurrent.TimeUnit;
    3132import java.util.function.Predicate;
     33import java.util.stream.Collectors;
    3234import java.util.stream.Stream;
    3335
     
    8284public class Preferences extends AbstractPreferences {
    8385
     86    /** remove if key equals */
    8487    private static final String[] OBSOLETE_PREF_KEYS = {
    8588        "remotecontrol.https.enabled", /* remove entry after Dec. 2019 */
     
    8790    };
    8891
     92    /** remove if key starts with */
     93    private static final String[] OBSOLETE_PREF_KEYS_START = {
     94            //only remove layer specific prefs
     95            "draw.rawgps.layer.wpt.",
     96            "draw.rawgps.layer.audiowpt.",
     97            "draw.rawgps.lines.force.",
     98            "draw.rawgps.lines.alpha-blend.",
     99            "draw.rawgps.lines.",
     100            "markers.show ", //uses space as separator
     101            "marker.makeautomarker.",
     102            "clr.layer.",
     103
     104            //remove both layer specific and global prefs
     105            "draw.rawgps.colors",
     106            "draw.rawgps.direction",
     107            "draw.rawgps.alternatedirection",
     108            "draw.rawgps.linewidth",
     109            "draw.rawgps.max-line-length.local",
     110            "draw.rawgps.max-line-length",
     111            "draw.rawgps.large",
     112            "draw.rawgps.large.size",
     113            "draw.rawgps.hdopcircle",
     114            "draw.rawgps.min-arrow-distance",
     115            "draw.rawgps.colorTracksTune",
     116            "draw.rawgps.colors.dynamic",
     117            "draw.rawgps.lines.local",
     118            "draw.rawgps.heatmap"
     119    };
     120
     121    /** keep subkey even if it starts with any of {@link #OBSOLETE_PREF_KEYS_START} */
     122    private static final List<String> KEEP_PREF_KEYS = Arrays.asList(
     123            "draw.rawgps.lines.alpha-blend",
     124            "draw.rawgps.lines.arrows",
     125            "draw.rawgps.lines.arrows.fast",
     126            "draw.rawgps.lines.arrows.min-distance",
     127            "draw.rawgps.lines.force",
     128            "draw.rawgps.lines.max-length",
     129            "draw.rawgps.lines.max-length.local",
     130            "draw.rawgps.lines.width"
     131    );
     132
     133    /** rename keys that equal */
     134    private final static Map<String, String> UPDATE_PREF_KEYS = getUpdatePrefKeys();
     135
     136    private static Map<String, String> getUpdatePrefKeys() {
     137        HashMap<String, String> m = new HashMap<>();
     138        m.put("draw.rawgps.direction", "draw.rawgps.lines.arrows");
     139        m.put("draw.rawgps.alternatedirection", "draw.rawgps.lines.arrows.fast");
     140        m.put("draw.rawgps.min-arrow-distance", "draw.rawgps.lines.arrows.min-distance");
     141        m.put("draw.rawgps.linewidth", "draw.rawgps.lines.width");
     142        m.put("draw.rawgps.max-line-length.local", "draw.rawgps.lines.max-length.local");
     143        m.put("draw.rawgps.max-line-length", "draw.rawgps.lines.max-length");
     144        m.put("draw.rawgps.large", "draw.rawgps.points.large");
     145        m.put("draw.rawgps.large.alpha", "draw.rawgps.points.large.alpha");
     146        m.put("draw.rawgps.large.size", "draw.rawgps.points.large.size");
     147        m.put("draw.rawgps.hdopcircle", "draw.rawgps.points.hdopcircle");
     148        m.put("draw.rawgps.layer.wpt.pattern", "draw.rawgps.markers.pattern");
     149        m.put("draw.rawgps.layer.audiowpt.pattern", "draw.rawgps.markers.audio.pattern");
     150        m.put("draw.rawgps.colors", "draw.rawgps.colormode");
     151        m.put("draw.rawgps.colorTracksTune", "draw.rawgps.colormode.velocity.tune");
     152        m.put("draw.rawgps.colors.dynamic", "draw.rawgps.colormode.dynamic-range");
     153        m.put("draw.rawgps.heatmap.line-extra", "draw.rawgps.colormode.heatmap.line-extra");
     154        m.put("draw.rawgps.heatmap.colormap", "draw.rawgps.colormode.heatmap.colormap");
     155        m.put("draw.rawgps.heatmap.use-points", "draw.rawgps.colormode.heatmap.use-points");
     156        m.put("draw.rawgps.heatmap.gain", "draw.rawgps.colormode.heatmap.gain");
     157        m.put("draw.rawgps.heatmap.lower-limit", "draw.rawgps.colormode.heatmap.lower-limit");
     158        m.put("draw.rawgps.date-coloring-min-dt", "draw.rawgps.colormode.time.min-distance");
     159        return Collections.unmodifiableMap(m);
     160    }
     161
    89162    private static final long MAX_AGE_DEFAULT_PREFERENCES = TimeUnit.DAYS.toSeconds(50);
    90163
    91164    private final IBaseDirectories dirs;
     165    boolean modifiedDefault;
    92166
    93167    /**
     
    416490        settingsMap.clear();
    417491        settingsMap.putAll(reader.getSettings());
    418         removeObsolete(reader.getVersion());
     492        removeAndUpdateObsolete(reader.getVersion());
    419493    }
    420494
     
    521595            return;
    522596        }
     597        File def = getDefaultsCacheFile();
     598        if (def.exists()) {
     599            try {
     600                loadDefaults();
     601            } catch (IOException | XMLStreamException | SAXException e) {
     602                Logging.error(e);
     603                Logging.warn(tr("Failed to load defaults cache file: {0}", def));
     604                defaultsMap.clear();
     605                if (!def.delete()) {
     606                    Logging.warn(tr("Failed to delete faulty defaults cache file: {0}", def));
     607                }
     608            }
     609        }
    523610        try {
    524611            load();
     
    544631                Logging.error(e1);
    545632                Logging.warn(tr("Failed to initialize preferences. Failed to reset preference file to default: {0}", getPreferenceFile()));
    546             }
    547         }
    548         File def = getDefaultsCacheFile();
    549         if (def.exists()) {
    550             try {
    551                 loadDefaults();
    552             } catch (IOException | XMLStreamException | SAXException e) {
    553                 Logging.error(e);
    554                 Logging.warn(tr("Failed to load defaults cache file: {0}", def));
    555                 defaultsMap.clear();
    556                 if (!def.delete()) {
    557                     Logging.warn(tr("Failed to delete faulty defaults cache file: {0}", def));
    558                 }
    559633            }
    560634        }
     
    756830
    757831    /**
    758      * Removes obsolete preference settings. If you throw out a once-used preference
     832     * Removes and updates obsolete preference settings. If you throw out a once-used preference
    759833     * setting, add it to the list here with an expiry date (written as comment). If you
    760834     * see something with an expiry date in the past, remove it from the list.
    761835     * @param loadedVersion JOSM version when the preferences file was written
    762836     */
    763     private void removeObsolete(int loadedVersion) {
     837    private void removeAndUpdateObsolete(int loadedVersion) {
     838        Logging.trace("Update obsolete preference keys for version {0}", Integer.toString(loadedVersion));
     839        for (Entry<String, String> e : UPDATE_PREF_KEYS.entrySet()) {
     840            String oldkey = e.getKey();
     841            String newkey = e.getValue();
     842            if (settingsMap.containsKey(oldkey)) {
     843                Setting<?> value = settingsMap.remove(oldkey);
     844                settingsMap.putIfAbsent(newkey, value);
     845                Logging.info(tr("Updated preference setting {0} to {1}", oldkey, newkey));
     846            }
     847        }
     848
    764849        Logging.trace("Remove obsolete preferences for version {0}", Integer.toString(loadedVersion));
    765850        for (String key : OBSOLETE_PREF_KEYS) {
    766851            if (settingsMap.containsKey(key)) {
    767852                settingsMap.remove(key);
    768                 Logging.info(tr("Preference setting {0} has been removed since it is no longer used.", key));
    769             }
     853                Logging.info(tr("Removed preference setting {0} since it is no longer used", key));
     854            }
     855            if (defaultsMap.containsKey(key)) {
     856                defaultsMap.remove(key);
     857                Logging.info(tr("Removed preference default {0} since it is no longer used", key));
     858                modifiedDefault = true;
     859            }
     860        }
     861        for (String key : OBSOLETE_PREF_KEYS_START) {
     862            settingsMap.entrySet().stream()
     863            .filter(e -> e.getKey().startsWith(key))
     864            .collect(Collectors.toSet())
     865            .forEach(e -> {
     866                String k = e.getKey();
     867                if (!KEEP_PREF_KEYS.contains(k)) {
     868                    settingsMap.remove(k);
     869                    Logging.info(tr("Removed preference setting {0} since it is no longer used", k));
     870                }
     871            });
     872            defaultsMap.entrySet().stream()
     873            .filter(e -> e.getKey().startsWith(key))
     874            .collect(Collectors.toSet())
     875            .forEach(e -> {
     876                String k = e.getKey();
     877                if (!KEEP_PREF_KEYS.contains(k)) {
     878                    defaultsMap.remove(k);
     879                    Logging.info(tr("Removed preference default {0} since it is no longer used", k));
     880                    modifiedDefault = true;
     881                }
     882            });
     883        }
     884        if (modifiedDefault) {
     885            try {
     886                saveDefaults();
     887                Logging.info(tr("Saved updated default preferences."));
     888            } catch (IOException ex) {
     889                Logging.log(Logging.LEVEL_WARN, tr("Failed to save default preferences."), ex);
     890            }
     891            modifiedDefault = false;
    770892        }
    771893    }
Note: See TracChangeset for help on using the changeset viewer.