package com.github.elazarl.multireducers;
import com.google.common.base.Objects;
import com.google.common.collect.ComparisonChain;
import org.apache.hadoop.io.WritableComparable;
import javax.annotation.Nullable;
/**
* PerReducerWritable is a base class implementing logic shared by
* the PerMapperOutputKey/Value
*/
class PerInternalMapper implements Comparable<PerInternalMapper> {
int targetReducer;
Object data;
PerInternalMapper() {}
public PerInternalMapper(int targetReducer, Object data) {
this.targetReducer = targetReducer;
this.data = data;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
PerInternalMapper that = (PerInternalMapper) o;
return Objects.equal(targetReducer, that.targetReducer) && Objects.equal(data, that.data);
}
@Override
public int hashCode() {
return Objects.hashCode(targetReducer, data);
}
@Override
public String toString() {
return Objects.toStringHelper(this).
add("reducer", targetReducer).
add("data", data).
toString();
}
@Override
public int compareTo(@Nullable PerInternalMapper that) {
if (that == null) return 1; // nulls at start
return ComparisonChain.start().
compare(targetReducer, that.targetReducer).
compare((WritableComparable)data, (WritableComparable)that.data).
result();
}
}