diff options
Diffstat (limited to 'container-search/src/main/java/com/yahoo/prelude/query/SegmentItem.java')
-rw-r--r-- | container-search/src/main/java/com/yahoo/prelude/query/SegmentItem.java | 65 |
1 files changed, 41 insertions, 24 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/query/SegmentItem.java b/container-search/src/main/java/com/yahoo/prelude/query/SegmentItem.java index e2f0ece5501..d02a98486a0 100644 --- a/container-search/src/main/java/com/yahoo/prelude/query/SegmentItem.java +++ b/container-search/src/main/java/com/yahoo/prelude/query/SegmentItem.java @@ -4,6 +4,8 @@ package com.yahoo.prelude.query; import com.yahoo.prelude.query.textualrepresentation.Discloser; +import java.util.Objects; + /** * An immutable and'ing of a collection of sub-expressions. It does not @@ -15,13 +17,13 @@ import com.yahoo.prelude.query.textualrepresentation.Discloser; public abstract class SegmentItem extends CompositeItem implements BlockItem { private boolean locked = false; - private String rawWord; - private String value; - private boolean isFromQuery; + private final String rawWord; + private final String value; + private final boolean isFromQuery; private boolean isFromUser; - private boolean stemmed; + private final boolean stemmed; private SegmentingRule segmentingRule = SegmentingRule.LANGUAGE_DEFAULT; - private Substring origin; + private final Substring origin; /** * Creates a new segment item @@ -42,7 +44,7 @@ public abstract class SegmentItem extends CompositeItem implements BlockItem { * @param current the current transformed version of the raw form, or the raw form repeated if no normalized form is known * @param isFromQuery whether this segment stems from the query received in the request * @param stemmed whether this is stemmed - * @param origin TODO + * @param origin the original text that led to this */ public SegmentItem(String rawWord, String current, boolean isFromQuery, boolean stemmed, Substring origin) { this.rawWord = rawWord; @@ -66,10 +68,12 @@ public abstract class SegmentItem extends CompositeItem implements BlockItem { return value; } + @Override public boolean isFromQuery() { return isFromQuery; } + @Override public boolean isStemmed() { return stemmed; } @@ -87,40 +91,32 @@ public abstract class SegmentItem extends CompositeItem implements BlockItem { return getItemCount(); } + @Override public void addItem(Item item) { - if (locked) { - dontAdd(); - } + throwIfLocked(); super.addItem(item); } + @Override public void addItem(int index, Item item) { - if (locked) { - dontAdd(); - } + throwIfLocked(); super.addItem(index, item); } - private void dontAdd() { - throw new IllegalArgumentException("Tried to add item to an immutable segment."); - } - + @Override public Item removeItem(int index) { - if (locked) { - dontRemove(); - } + throwIfLocked(); return super.removeItem(index); } public boolean removeItem(Item item) { - if (locked) { - dontRemove(); - } + throwIfLocked(); return super.removeItem(item); } - private void dontRemove() { - throw new IllegalArgumentException("Tried to remove an item from an immutable segment."); + private void throwIfLocked() { + if (locked) + throw new IllegalStateException("Cannot change change an immutable segment"); } // TODO: Add a getItemIterator which is safe for immutability @@ -140,6 +136,7 @@ public abstract class SegmentItem extends CompositeItem implements BlockItem { return copy; } + @Override public boolean isWords() { return true; } @@ -175,4 +172,24 @@ public abstract class SegmentItem extends CompositeItem implements BlockItem { public void setSegmentingRule(SegmentingRule segmentingRule) { this.segmentingRule = segmentingRule; } + + @Override + public boolean equals(Object o) { + if ( ! super.equals(o)) return false; + var other = (SegmentItem)o; + if ( ! Objects.equals(this.rawWord, other.rawWord)) return false; + if ( ! Objects.equals(this.value, other.value)) return false; + if ( this.isFromQuery != other.isFromQuery) return false; + if ( this.isFromUser != other.isFromUser) return false; + if ( this.stemmed != other.stemmed) return false; + if ( this.segmentingRule != other.segmentingRule) return false; + if ( ! Objects.equals(this.origin, other.origin)) return false; + return true; + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), rawWord, value, isFromQuery, isFromUser, stemmed, segmentingRule, origin); + } + } |