001    // License: GPL. For details, see LICENSE file.
002    package org.openstreetmap.josm.actions;
003    
004    import org.openstreetmap.josm.actions.search.SearchAction.SearchSetting;
005    
006    public abstract class ActionParameter<T> {
007    
008        private final String name;
009    
010        public ActionParameter(String name) {
011            this.name = name;
012        }
013    
014        public String getName() {
015            return name;
016        }
017    
018        public abstract Class<T> getType();
019    
020        public abstract String writeToString(T value);
021    
022        public abstract T readFromString(String s);
023    
024        public static class StringActionParameter extends ActionParameter<String> {
025    
026            public StringActionParameter(String name) {
027                super(name);
028            }
029    
030            @Override
031            public Class<String> getType() {
032                return String.class;
033            }
034    
035            @Override
036            public String readFromString(String s) {
037                return s;
038            }
039    
040            @Override
041            public String writeToString(String value) {
042                return value;
043            }
044    
045        }
046    
047        public static class SearchSettingsActionParameter extends ActionParameter<SearchSetting> {
048    
049            public SearchSettingsActionParameter(String name) {
050                super(name);
051            }
052    
053            @Override
054            public Class<SearchSetting> getType() {
055                return SearchSetting.class;
056            }
057    
058            @Override
059            public SearchSetting readFromString(String s) {
060                SearchSetting result = SearchSetting.readFromString(s);
061                return result;
062            }
063    
064            @Override
065            public String writeToString(SearchSetting value) {
066                if (value == null)
067                    return "";
068                return value.writeToString();
069            }
070    
071        }
072    }