001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.actions;
003
004import org.openstreetmap.josm.actions.search.SearchAction.SearchSetting;
005
006public 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    public static class SearchSettingsActionParameter extends ActionParameter<SearchSetting> {
047
048        public SearchSettingsActionParameter(String name) {
049            super(name);
050        }
051
052        @Override
053        public Class<SearchSetting> getType() {
054            return SearchSetting.class;
055        }
056
057        @Override
058        public SearchSetting readFromString(String s) {
059            return SearchSetting.readFromString(s);
060        }
061
062        @Override
063        public String writeToString(SearchSetting value) {
064            if (value == null)
065                return "";
066            return value.writeToString();
067        }
068    }
069}