001    // License: GPL. For details, see LICENSE file.
002    package org.openstreetmap.josm.data.osm;
003    
004    import static org.openstreetmap.josm.tools.Utils.equal;
005    
006    import org.openstreetmap.josm.actions.search.SearchAction.SearchMode;
007    import org.openstreetmap.josm.actions.search.SearchAction.SearchSetting;
008    import org.openstreetmap.josm.data.Preferences.pref;
009    import org.openstreetmap.josm.data.Preferences.writeExplicitly;
010    import org.openstreetmap.josm.tools.Utils;
011    
012    /**
013     *
014     * @author Petr_Dlouh??
015     */
016    public class Filter extends SearchSetting {
017        private static final String version = "1";
018    
019        public boolean enable = true;
020        public boolean hiding = false;
021        public boolean inverted = false;
022    
023        public Filter() {
024            super("", SearchMode.add, false, false, false);
025        }
026        public Filter(String text, SearchMode mode, boolean caseSensitive,
027                boolean regexSearch, boolean allElements) {
028            super(text, mode, caseSensitive, regexSearch, allElements);
029        }
030    
031        public Filter(FilterPreferenceEntry e) {
032            super(e.text, SearchMode.add, false, false, false);
033            if (equal(e.mode, "replace")) {
034                mode = SearchMode.replace;
035            } else if (equal(e.mode, "add")) {
036                mode = SearchMode.add;
037            } else if (equal(e.mode, "remove")) {
038                mode = SearchMode.remove;
039            } else  if (equal(e.mode, "in_selection")) {
040                mode = SearchMode.in_selection;
041            }
042            caseSensitive = e.case_sensitive;
043            regexSearch = e.regex_search;
044            enable = e.enable;
045            hiding = e.hiding;
046            inverted = e.inverted;
047        }
048    
049        public static class FilterPreferenceEntry {
050            @pref @writeExplicitly public String version = "1";
051            @pref public String text = null;
052            @pref @writeExplicitly public String mode = "add";
053            @pref public boolean case_sensitive = false;
054            @pref public boolean regex_search = false;
055            @pref @writeExplicitly public boolean enable = true;
056            @pref @writeExplicitly public boolean hiding = false;
057            @pref @writeExplicitly public boolean inverted = false;
058        }
059    
060        public FilterPreferenceEntry getPreferenceEntry() {
061            FilterPreferenceEntry e = new FilterPreferenceEntry();
062            e.version = version;
063            e.text = text;
064            e.mode = mode.toString();
065            e.case_sensitive = caseSensitive;
066            e.regex_search = regexSearch;
067            e.enable = enable;
068            e.hiding = hiding;
069            e.inverted = inverted;
070            return e;
071        }
072    }