aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/prelude/query/SegmentItem.java
diff options
context:
space:
mode:
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.java65
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);
+ }
+
}