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
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}