//Dstl (c) Crown Copyright 2017 package uk.gov.dstl.baleen.jobs.interactions.data; import java.util.Set; import java.util.stream.Stream; /** * A word that represents an interaction trigger (ie relation of interest) between two types of * entities. * <p> * Since the word might connect many pairs (John and Sally went to London then Birmingham) we allow * for multiple relation pairs (John,London), (Sally, London), (John, Birmingham), (Sally, * Birmingham). */ public class InteractionWord { private final Word word; private final Set<RelationPair> pairs; /** * Instantiates a new interaction word. * * @param word * the word * @param relationPairs * the relation pairs */ public InteractionWord(Word word, Set<RelationPair> relationPairs) { this.word = word; this.pairs = relationPairs; } /** * Gets the word. * * @return the word */ public Word getWord() { return word; } /** * Gets the pairs. * * @return the pairs */ public Set<RelationPair> getPairs() { return pairs; } /** * Convert to a interaction definition. * * @param type * the type * @param subType * the sub type * @return the stream */ public Stream<InteractionDefinition> toRelations(String type, String subType) { return pairs.stream().map(p -> new InteractionDefinition(type, subType, word, p.getSource(), p.getTarget())); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + (pairs == null ? 0 : pairs.hashCode()); result = prime * result + (word == null ? 0 : word.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final InteractionWord other = (InteractionWord) obj; if (pairs == null) { if (other.pairs != null) { return false; } } else if (!pairs.equals(other.pairs)) { return false; } if (word == null) { if (other.word != null) { return false; } } else if (!word.equals(other.word)) { return false; } return true; } }