// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.gui.io; import static org.openstreetmap.josm.tools.I18n.tr; import java.util.Locale; import org.openstreetmap.josm.Main; public enum UploadStrategy { /** * Uploads the objects individually, one request per object */ INDIVIDUAL_OBJECTS_STRATEGY("individualobjects"), /** * Upload the objects in junks of n objects using m diff uploads */ CHUNKED_DATASET_STRATEGY("chunked"), /** * Upload the objects in one request using 1 diff upload */ SINGLE_REQUEST_STRATEGY("singlerequest"); private final String preferenceValue; UploadStrategy(String preferenceValue) { this.preferenceValue = preferenceValue; } public static UploadStrategy fromPreference(String preferenceValue) { if (preferenceValue == null) return null; preferenceValue = preferenceValue.trim().toLowerCase(Locale.ENGLISH); for (UploadStrategy strategy: values()) { if (strategy.getPreferenceValue().equals(preferenceValue)) return strategy; } return null; } /** * Replies the value which is written to the preferences for a specific * upload strategy * * @return the value which is written to the preferences for a specific * upload strategy */ public String getPreferenceValue() { return preferenceValue; } /** * the default upload strategy */ public static final UploadStrategy DEFAULT_UPLOAD_STRATEGY = SINGLE_REQUEST_STRATEGY; /** * Replies the upload strategy currently configured in the preferences. * * First checks for the preference key <pre>osm-server.upload-strategy</pre>. If not * present, checks for the legacy preference key <pre>osm-server.atomic-upload</pre>. * * If both are missing or if the preference value is illegal, {@link #DEFAULT_UPLOAD_STRATEGY} * is replied. * * @return the upload strategy currently configured in the preferences. */ public static UploadStrategy getFromPreferences() { String v = Main.pref.get("osm-server.upload-strategy", null); if (v == null) { // legacy support. Until 12/2009 we had osm-server.atomic-upload only. // If we still find "osm-server.atomic-upload" we use it and remove it. // When the preferences are saved the next time, "osm-server.upload-strategy" // will be inserted. v = Main.pref.get("osm-server.atomic-upload", null); if (v != null) { Main.pref.removeFromCollection("osm-server.atomic-upload", v); } else { v = ""; } v = v.trim().toLowerCase(Locale.ENGLISH); if ("true".equals(v)) return SINGLE_REQUEST_STRATEGY; else if ("false".equals(v)) return INDIVIDUAL_OBJECTS_STRATEGY; else return DEFAULT_UPLOAD_STRATEGY; } UploadStrategy strategy = fromPreference(v); if (strategy == null) { Main.warn(tr("Unexpected value for key ''{0}'' in preferences, got ''{1}''", "osm-server.upload-strategy", v)); return DEFAULT_UPLOAD_STRATEGY; } return strategy; } /** * Saves the upload strategy <code>strategy</code> to the preferences. * * @param strategy the strategy to save */ public static void saveToPreferences(UploadStrategy strategy) { Main.pref.put("osm-server.upload-strategy", strategy.getPreferenceValue()); } }