001 // License: GPL. For details, see LICENSE file.
002 package org.openstreetmap.josm.gui.tagging.ac;
003
004 /**
005 * Represents an entry in the list of auto completion values.
006 *
007 * An AutoCompletionListItem has a <em>priority</em> and a <em>value</em>.
008 *
009 * The priority helps to sort the auto completion items according to their importance. For instance,
010 * in an auto completion list for tag names, standard tag names would be assigned a higher
011 * priority than arbitrary tag names present in the current data set. There are three priority levels,
012 * {@link AutoCompletionItemPritority}.
013 *
014 * The value is a string which will be displayed in the auto completion list.
015 *
016 */
017 public class AutoCompletionListItem implements Comparable<AutoCompletionListItem>{
018
019 /** the pritority of this item */
020 private AutoCompletionItemPritority priority;
021 /** the value of this item */
022 private String value;
023
024 /**
025 * constructor
026 */
027 public AutoCompletionListItem(String value, AutoCompletionItemPritority priority) {
028 this.value = value;
029 this.priority = priority;
030 }
031
032 public AutoCompletionListItem(String value) {
033 this.value = value;
034 priority = AutoCompletionItemPritority.UNKNOWN;
035 }
036
037 public AutoCompletionListItem() {
038 value = "";
039 priority = AutoCompletionItemPritority.UNKNOWN;
040 }
041
042
043 /**
044 *
045 * @return the priority
046 */
047 public AutoCompletionItemPritority getPriority() {
048 return priority;
049 }
050
051 /**
052 * sets the priority
053 * @param priority the priority
054 */
055 public void setPriority(AutoCompletionItemPritority priority) {
056 this.priority = priority;
057 }
058
059 /**
060 *
061 * @return the value
062 */
063 public String getValue() {
064 return value;
065 }
066
067 /**
068 * sets the value
069 * @param value the value; must not be null
070 * @exception IllegalArgumentException thrown, if value if null
071 */
072 public void setValue(String value) {
073 if (value == null)
074 throw new IllegalArgumentException("argument 'value' must not be null");
075 this.value = value;
076 }
077
078 @Override public String toString() {
079 StringBuilder sb = new StringBuilder();
080 sb.append("<val='");
081 sb.append(value);
082 sb.append("',");
083 sb.append(priority.toString());
084 sb.append(">");
085 return sb.toString();
086 }
087
088 @Override public int hashCode() {
089 final int prime = 31;
090 int result = 1;
091 result = prime * result
092 + ((priority == null) ? 0 : priority.hashCode());
093 result = prime * result + ((value == null) ? 0 : value.hashCode());
094 return result;
095 }
096
097 @Override public boolean equals(Object obj) {
098 if (this == obj)
099 return true;
100 if (obj == null)
101 return false;
102 if (getClass() != obj.getClass())
103 return false;
104 final AutoCompletionListItem other = (AutoCompletionListItem)obj;
105 if (priority == null) {
106 if (other.priority != null)
107 return false;
108 } else if (!priority.equals(other.priority))
109 return false;
110 if (value == null) {
111 if (other.value != null)
112 return false;
113 } else if (!value.equals(other.value))
114 return false;
115 return true;
116 }
117
118 public int compareTo(AutoCompletionListItem other) {
119 int ret = other.priority.compareTo(priority); // higher priority items come first in the list
120 if (ret != 0)
121 return ret;
122 else
123 return this.value.compareTo(other.value);
124 }
125 }