// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.gui.tagging.ac;
/**
* Describes the priority of an item in an autocompletion list. The selected
* flag is currently only used in plugins.
*
* Instances of this class are not modifiable.
*/
public class AutoCompletionItemPritority implements
Comparable<AutoCompletionItemPritority> {
/**
* Indicates, that the value is standard and it is found in the data. This
* has higher priority than some arbitrary standard value that is usually
* not used by the user.
*/
public static AutoCompletionItemPritority IS_IN_STANDARD_AND_IN_DATASET = new AutoCompletionItemPritority(
true, true, false);
/**
* Indicates that this is an arbitrary value from the data set, i.e. the
* value of a tag name=*.
*/
public static AutoCompletionItemPritority IS_IN_DATASET = new AutoCompletionItemPritority(
true, false, false);
/**
* Indicates that this is a standard value, i.e. a standard tag name or a
* standard value for a given tag name (from the presets).
*/
public static AutoCompletionItemPritority IS_IN_STANDARD = new AutoCompletionItemPritority(
false, true, false);
/**
* Indicates that this is a value from a selected object.
*/
public static AutoCompletionItemPritority IS_IN_SELECTION = new AutoCompletionItemPritority(
false, false, true);
/** Unknown priority. This is the lowest priority. */
public static AutoCompletionItemPritority UNKNOWN = new AutoCompletionItemPritority(
false, false, false);
private final boolean inDataSet;
private final boolean inStandard;
private final boolean selected;
/**
* Creates a new AC item priority descriptor.
*
* @param inDataSet
* <code>true</code> if the item is in the data set
* @param inStandard
* <code>true</code> if the item is in the presets
* @param selected
* <code>true</code> if the item is a value from a selected
* object
*/
public AutoCompletionItemPritority(boolean inDataSet, boolean inStandard,
boolean selected) {
this.inDataSet = inDataSet;
this.inStandard = inStandard;
this.selected = selected;
}
/**
* Returns whether the item is in the data set.
*
* @return <code>true</code> if the item is in the data set.
*/
public boolean isInDataSet() {
return inDataSet;
}
/**
* Returns whether an item is in the presets.
*
* @return <code>true</code> if the item is in the presets
*/
public boolean isInStandard() {
return inStandard;
}
/**
* Returns whether an item is in one of the selected objects.
*
* @return <code>true</code> if the item is a value from a selected object
*/
public boolean isSelected() {
return selected;
}
/**
* Imposes an ordering on the priorities. Currently, being in the current
* DataSet is worth more than being in the Presets.
*/
public int compareTo(AutoCompletionItemPritority other) {
int sel = Boolean.valueOf(selected).compareTo(other.selected);
if (sel != 0)
return sel;
int ds = Boolean.valueOf(inDataSet).compareTo(other.inDataSet);
if (ds != 0)
return ds;
int std = Boolean.valueOf(inStandard).compareTo(other.inStandard);
if (std != 0)
return std;
return 0;
}
/**
* Merges two priorities. The resulting priority is always >= the original
* ones.
*/
public AutoCompletionItemPritority mergeWith(
AutoCompletionItemPritority other) {
return new AutoCompletionItemPritority(inDataSet || other.inDataSet,
inStandard || other.inStandard, selected || other.selected);
}
@Override
public String toString() {
return String.format(
"<Priority; inDataSet: %b, inStandard: %b, selected: %b>",
inDataSet, inStandard, selected);
}
}