package com.ldbc.driver.workloads.ldbc.snb.interactive;
import com.google.common.collect.Lists;
import com.ldbc.driver.util.ListUtils;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class LdbcQuery1Result {
private final long friendId;
private final String friendLastName;
private final int distanceFromPerson;
private final long friendBirthday;
private final long friendCreationDate;
private final String friendGender;
private final String friendBrowserUsed;
private final String friendLocationIp;
private final Iterable<String> friendEmails;
private final Iterable<String> friendLanguages;
private final String friendCityName;
// (Person-studyAt->University.name,
// Person-studyAt->.classYear,
// Person-studyAt->University-isLocatedIn->City.name)
private final Iterable<List<Object>> friendUniversities;
// (Person-workAt->Company.name,
// Person-workAt->.workFrom,
// Person-workAt->Company-isLocatedIn->City.name)
private final Iterable<List<Object>> friendCompanies;
public LdbcQuery1Result(
long friendId,
String friendLastName,
int distanceFromPerson,
long friendBirthday,
long friendCreationDate,
String friendGender,
String friendBrowserUsed,
String friendLocationIp,
Iterable<String> friendEmails,
Iterable<String> friendLanguages,
String friendCityName,
Iterable<List<Object>> friendUniversities,
Iterable<List<Object>> friendCompanies) {
this.friendId = friendId;
this.friendLastName = friendLastName;
this.distanceFromPerson = distanceFromPerson;
this.friendBirthday = friendBirthday;
this.friendCreationDate = friendCreationDate;
this.friendGender = friendGender;
this.friendBrowserUsed = friendBrowserUsed;
this.friendLocationIp = friendLocationIp;
this.friendEmails = friendEmails;
this.friendLanguages = friendLanguages;
this.friendCityName = friendCityName;
this.friendUniversities = friendUniversities;
this.friendCompanies = friendCompanies;
}
public long friendId() {
return friendId;
}
public String friendLastName() {
return friendLastName;
}
public int distanceFromPerson() {
return distanceFromPerson;
}
public long friendBirthday() {
return friendBirthday;
}
public long friendCreationDate() {
return friendCreationDate;
}
public String friendGender() {
return friendGender;
}
public String friendBrowserUsed() {
return friendBrowserUsed;
}
public String friendLocationIp() {
return friendLocationIp;
}
public Iterable<String> friendEmails() {
return friendEmails;
}
public Iterable<String> friendLanguages() {
return friendLanguages;
}
public String friendCityName() {
return friendCityName;
}
public Iterable<List<Object>> friendUniversities() {
return friendUniversities;
}
public Iterable<List<Object>> friendCompanies() {
return friendCompanies;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
LdbcQuery1Result other = (LdbcQuery1Result) o;
if (distanceFromPerson != other.distanceFromPerson) return false;
if (friendBirthday != other.friendBirthday) return false;
if (friendCreationDate != other.friendCreationDate) return false;
if (friendId != other.friendId) return false;
if (friendBrowserUsed != null ? !friendBrowserUsed.equals(other.friendBrowserUsed) : other.friendBrowserUsed != null)
return false;
if (friendCityName != null ? !friendCityName.equals(other.friendCityName) : other.friendCityName != null)
return false;
if ((null == friendCompanies ^ null == other.friendCompanies) || false == ListUtils.listsOfListsEqual(sortListOfObjectLists(friendCompanies), sortListOfObjectLists(other.friendCompanies)))
return false;
if (friendEmails != null ? !ListUtils.listsEqual(sortStringList(friendEmails), sortStringList(other.friendEmails)) : other.friendEmails != null)
return false;
if (friendGender != null ? !friendGender.equals(other.friendGender) : other.friendGender != null)
return false;
if (friendLanguages != null ? !ListUtils.listsEqual(sortStringList(friendLanguages), sortStringList(other.friendLanguages)) : other.friendLanguages != null)
return false;
if (friendLastName != null ? !friendLastName.equals(other.friendLastName) : other.friendLastName != null)
return false;
if (friendLocationIp != null ? !friendLocationIp.equals(other.friendLocationIp) : other.friendLocationIp != null)
return false;
if (friendUniversities != null ? !ListUtils.listsOfListsEqual(sortListOfObjectLists(friendUniversities), sortListOfObjectLists(other.friendUniversities)) : other.friendUniversities != null)
return false;
return true;
}
private List<String> sortStringList(Iterable<String> iterable) {
List<String> list = Lists.newArrayList(iterable);
Collections.sort(list);
return list;
}
private static final Comparator<List<Object>> threeElementStringListComparator = new Comparator<List<Object>>() {
@Override
public int compare(List<Object> o1, List<Object> o2) {
if (o1.size() != 3)
throw new RuntimeException("List must contain exactly three elements: " + o1);
if (o2.size() != 3)
throw new RuntimeException("List must contain exactly three elements: " + o1);
int result = o1.get(0).toString().compareTo(o2.get(0).toString());
if (0 != result) return result;
result = o1.get(1).toString().compareTo(o2.get(1).toString());
if (0 != result) return result;
return o1.get(2).toString().compareTo(o2.get(2).toString());
}
};
private List<List<Object>> sortListOfObjectLists(Iterable<List<Object>> iterable) {
List<List<Object>> list = Lists.newArrayList(iterable);
Collections.sort(list, threeElementStringListComparator);
return list;
}
@Override
public String toString() {
return "LdbcQuery1Result{" +
"friendId=" + friendId +
", friendLastName='" + friendLastName + '\'' +
", distanceFromPerson=" + distanceFromPerson +
", friendBirthday=" + friendBirthday +
", friendCreationDate=" + friendCreationDate +
", friendGender='" + friendGender + '\'' +
", friendBrowserUsed='" + friendBrowserUsed + '\'' +
", friendLocationIp='" + friendLocationIp + '\'' +
", friendEmails=" + friendEmails +
", friendLanguages=" + friendLanguages +
", friendCityName='" + friendCityName + '\'' +
", friendUniversities=" + friendUniversities +
", friendCompanies=" + friendCompanies +
'}';
}
}