001 // License: GPL. For details, see LICENSE file.
002 package org.openstreetmap.josm.gui.tagging.ac;
003
004 /**
005 * Describes the priority of an item in an autocompletion list.
006 * The selected flag is currently only used in plugins.
007 *
008 * Instances of this class are not modifiable.
009 */
010 public class AutoCompletionItemPritority implements Comparable<AutoCompletionItemPritority> {
011
012 /**
013 * Indicates, that the value is standard and it is found in the data.
014 * This has higher priority than some arbitrary standard value that is
015 * usually not used by the user.
016 */
017 public static final AutoCompletionItemPritority IS_IN_STANDARD_AND_IN_DATASET = new AutoCompletionItemPritority(true, true, false);
018
019 /**
020 * Indicates that this is an arbitrary value from the data set, i.e.
021 * the value of a tag name=*.
022 */
023 public static final AutoCompletionItemPritority IS_IN_DATASET = new AutoCompletionItemPritority(true, false, false);
024
025 /**
026 * Indicates that this is a standard value, i.e. a standard tag name
027 * or a standard value for a given tag name (from the presets).
028 */
029 public static final AutoCompletionItemPritority IS_IN_STANDARD = new AutoCompletionItemPritority(false, true, false);
030
031 /**
032 * Indicates that this is a value from a selected object.
033 */
034 public static final AutoCompletionItemPritority IS_IN_SELECTION = new AutoCompletionItemPritority(false, false, true);
035
036 /** Unknown priority. This is the lowest priority. */
037 public static final AutoCompletionItemPritority UNKNOWN = new AutoCompletionItemPritority(false, false, false);
038
039 private final boolean inDataSet;
040 private final boolean inStandard;
041 private final boolean selected;
042
043 public AutoCompletionItemPritority(boolean inDataSet, boolean inStandard, boolean selected) {
044 this.inDataSet = inDataSet;
045 this.inStandard = inStandard;
046 this.selected = selected;
047 }
048
049 public boolean isInDataSet() {
050 return inDataSet;
051 }
052
053 public boolean isInStandard() {
054 return inStandard;
055 }
056
057 public boolean isSelected() {
058 return selected;
059 }
060
061 /**
062 * Imposes an ordering on the priorities.
063 * Currently, being in the current DataSet is worth more than being in the Presets.
064 */
065 public int compareTo(AutoCompletionItemPritority other) {
066 int sel = Boolean.valueOf(selected).compareTo(other.selected);
067 if (sel != 0) return sel;
068
069 int ds = Boolean.valueOf(inDataSet).compareTo(other.inDataSet);
070 if (ds != 0) return ds;
071
072 int std = Boolean.valueOf(inStandard).compareTo(other.inStandard);
073 if (std != 0) return std;
074
075 return 0;
076 }
077
078 /**
079 * Merges two priorities.
080 * The resulting priority is always >= the original ones.
081 */
082 public AutoCompletionItemPritority mergeWith(AutoCompletionItemPritority other) {
083 return new AutoCompletionItemPritority(
084 inDataSet || other.inDataSet,
085 inStandard || other.inStandard,
086 selected || other.selected);
087 }
088
089 @Override public String toString() {
090 return String.format("<Priority; inDataSet: %b, inStandard: %b, selected: %b>", inDataSet, inStandard, selected);
091 }
092 }