// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.gui.tagging.ac;
import org.openstreetmap.josm.tools.CheckParameterUtil;
/**
* Represents an entry in the list of auto completion values.
*
* An AutoCompletionListItem has a <em>priority</em> and a <em>value</em>.
*
* The priority helps to sort the auto completion items according to their importance. For instance,
* in an auto completion list for tag names, standard tag names would be assigned a higher
* priority than arbitrary tag names present in the current data set. There are three priority levels,
* {@link AutoCompletionItemPriority}.
*
* The value is a string which will be displayed in the auto completion list.
*
*/
public class AutoCompletionListItem implements Comparable<AutoCompletionListItem> {
/** the pritority of this item */
private AutoCompletionItemPriority priority;
/** the value of this item */
private String value;
/**
* Constructs a new {@code AutoCompletionListItem} with the given value and priority.
* @param value The value
* @param priority The priority
*/
public AutoCompletionListItem(String value, AutoCompletionItemPriority priority) {
this.value = value;
this.priority = priority;
}
/**
* Constructs a new {@code AutoCompletionListItem} with the given value and unknown priority.
* @param value The value
*/
public AutoCompletionListItem(String value) {
this.value = value;
priority = AutoCompletionItemPriority.UNKNOWN;
}
/**
* Constructs a new {@code AutoCompletionListItem}.
*/
public AutoCompletionListItem() {
value = "";
priority = AutoCompletionItemPriority.UNKNOWN;
}
/**
* Returns the priority.
* @return the priority
*/
public AutoCompletionItemPriority getPriority() {
return priority;
}
/**
* Sets the priority.
* @param priority the priority
*/
public void setPriority(AutoCompletionItemPriority priority) {
this.priority = priority;
}
/**
* Returns the value.
* @return the value
*/
public String getValue() {
return value;
}
/**
* sets the value
* @param value the value; must not be null
* @throws IllegalArgumentException if value if null
*/
public void setValue(String value) {
CheckParameterUtil.ensureParameterNotNull(value, "value");
this.value = value;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("<val='")
.append(value)
.append("',")
.append(priority)
.append('>');
return sb.toString();
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((priority == null) ? 0 : priority.hashCode());
result = prime * result + ((value == null) ? 0 : value.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (obj instanceof String)
return obj.equals(value);
if (getClass() != obj.getClass())
return false;
final AutoCompletionListItem other = (AutoCompletionListItem) obj;
if (priority == null) {
if (other.priority != null)
return false;
} else if (!priority.equals(other.priority))
return false;
if (value == null) {
if (other.value != null)
return false;
} else if (!value.equals(other.value))
return false;
return true;
}
@Override
public int compareTo(AutoCompletionListItem other) {
int ret = other.priority.compareTo(priority); // higher priority items come first in the list
if (ret != 0)
return ret;
else
return this.value.compareTo(other.value);
}
}