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