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