001 // License: GPL. For details, see LICENSE file.
002 package org.openstreetmap.josm.gui.io;
003
004 import static org.openstreetmap.josm.tools.I18n.tr;
005
006 import org.openstreetmap.josm.Main;
007
008 public enum UploadStrategy {
009 /**
010 * Uploads the objects individually, one request per object
011 */
012 INDIVIDUAL_OBJECTS_STRATEGY("individualobjects"),
013 /**
014 * Upload the objects in junks of n objects using m diff uploads
015 */
016 CHUNKED_DATASET_STRATEGY("chunked"),
017 /**
018 * Upload the objects in one request using 1 diff upload
019 */
020 SINGLE_REQUEST_STRATEGY("singlerequest");
021
022 private String preferenceValue;
023
024 UploadStrategy(String preferenceValue) {
025 this.preferenceValue = preferenceValue;
026 }
027
028 public static UploadStrategy fromPreference(String preferenceValue) {
029 if (preferenceValue == null) return null;
030 preferenceValue = preferenceValue.trim().toLowerCase();
031 for (UploadStrategy strategy: values()) {
032 if (strategy.getPreferenceValue().equals(preferenceValue))
033 return strategy;
034 }
035 return null;
036 }
037
038 /**
039 * Replies the value which is written to the preferences for a specific
040 * upload strategy
041 *
042 * @return the value which is written to the preferences for a specific
043 * upload strategy
044 */
045 public String getPreferenceValue() {
046 return preferenceValue;
047 }
048
049 /**
050 * the default upload strategy
051 */
052 public final static UploadStrategy DEFAULT_UPLOAD_STRATEGY = SINGLE_REQUEST_STRATEGY;
053
054 /**
055 * Replies the upload strategy currently configured in the preferences.
056 *
057 * First checks for the preference key <pre>osm-server.upload-strategy</pre>. If not
058 * present, checks for the legacy preference key <pre>osm-server.atomic-upload</pre>.
059 *
060 * If both are missing or if the preference value is illegal, {@link #DEFAULT_UPLOAD_STRATEGY}
061 * is replied.
062 *
063 * @return the upload strategy currently configured in the preferences.
064 */
065 public static UploadStrategy getFromPreferences() {
066 String v = Main.pref.get("osm-server.upload-strategy", null);
067 if (v == null) {
068 // legacy support. Until 12/2009 we had osm-server.atomic-upload only.
069 // If we still find "osm-server.atomic-upload" we use it and remove it.
070 // When the preferences are saved the next time, "osm-server.upload-strategy"
071 // will be inserted.
072 v = Main.pref.get("osm-server.atomic-upload", null);
073 if (v != null) {
074 Main.pref.removeFromCollection("osm-server.atomic-upload", v);
075 } else {
076 v = "";
077 }
078 v = v.trim().toLowerCase();
079 if (v.equals("true"))
080 return SINGLE_REQUEST_STRATEGY;
081 else if (v.equals("false"))
082 return INDIVIDUAL_OBJECTS_STRATEGY;
083 else
084 return DEFAULT_UPLOAD_STRATEGY;
085 }
086 UploadStrategy strategy = fromPreference(v);
087 if (strategy == null) {
088 System.err.println(tr("Warning: unexpected value for key ''{0}'' in preferences, got ''{1}''", "osm-server.upload-strategy", v ));
089 return DEFAULT_UPLOAD_STRATEGY;
090 }
091 return strategy;
092 }
093
094 /**
095 * Saves the upload strategy <code>strategy</code> to the preferences.
096 *
097 * @param strategy the strategy to save
098 */
099 public static void saveToPreferences(UploadStrategy strategy) {
100 Main.pref.put("osm-server.upload-strategy", strategy.getPreferenceValue());
101 }
102 }