1   package eu.fbk.dkm.pikes.eval;
2   
3   import java.util.Objects;
4   
5   import javax.annotation.Nullable;
6   
7   import org.eclipse.rdf4j.model.IRI;
8   
9   public final class Relation implements Comparable<Relation> {
10  
11      private final IRI first;
12  
13      private final IRI second;
14  
15      private final boolean extra;
16  
17      public Relation(final IRI first, final IRI second, final boolean extra) {
18          final boolean swap = Util.VALUE_ORDERING.compare(first, second) > 0;
19          this.first = swap ? second : first;
20          this.second = swap ? first : second;
21          this.extra = extra;
22      }
23  
24      public IRI getFirst() {
25          return this.first;
26      }
27  
28      public IRI getSecond() {
29          return this.second;
30      }
31  
32      public boolean isExtra() {
33          return this.extra;
34      }
35  
36      @Override
37      public int compareTo(final Relation other) {
38          int result = Util.VALUE_ORDERING.compare(this.first, other.first);
39          if (result == 0) {
40              result = Util.VALUE_ORDERING.compare(this.second, other.second);
41          }
42          return result;
43      }
44  
45      @Override
46      public boolean equals(final Object object) {
47          if (object == this) {
48              return true;
49          }
50          if (!(object instanceof Relation)) {
51              return false;
52          }
53          final Relation other = (Relation) object;
54          return this.first.equals(other.first) && this.second.equals(other.second);
55      }
56  
57      @Override
58      public int hashCode() {
59          return Objects.hash(this.first, this.second);
60      }
61  
62      public String toString(@Nullable final IRI baseIRI) {
63          return "(" + Util.format(baseIRI, this.first) + ", " + Util.format(baseIRI, this.second)
64                  + ")";
65      }
66  
67      @Override
68      public String toString() {
69          return toString(null);
70      }
71  
72  }