/**
* Copyright (c) 2011 Michael Kutschke.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Michael Kutschke - initial API and implementation.
*/
package org.eclipse.recommenders.jayes.util;
public class OrderIgnoringPair<T> {
private final int hashcode;
private final T o1, o2;
public OrderIgnoringPair(final T o1, final T o2) {
this.o1 = o1;
this.o2 = o2;
hashcode = Math.min(o1.hashCode(), o2.hashCode()) + 67 * Math.max(o1.hashCode(), o2.hashCode());
}
@Override
public boolean equals(final Object o) {
if (!(o instanceof OrderIgnoringPair)) {
return false;
}
final OrderIgnoringPair<?> other = (OrderIgnoringPair<?>) o;
return (bothNullOrEqual(getFirst(), other.getFirst()) && bothNullOrEqual(getSecond(), other.getSecond()))
|| equalsReverse(other);
}
private boolean equalsReverse(final OrderIgnoringPair<?> other) {
return bothNullOrEqual(getSecond(), other.getFirst()) && bothNullOrEqual(getFirst(), other.getSecond());
}
private boolean bothNullOrEqual(T second, Object first) {
return second == null ? first == null : second.equals(first);
}
public T getFirst() {
return o1;
}
public T getSecond() {
return o2;
}
@Override
public int hashCode() {
return hashcode;
}
}