RelationIds.java
package org.codefilarete.stalactite.engine.runtime;
import java.util.Objects;
import java.util.function.Function;
import org.codefilarete.stalactite.engine.SelectExecutor;
/**
* @author Guillaume Mary
*/
public class RelationIds<SRC, TRGT, TRGTID> {
private final SelectExecutor<TRGT, TRGTID> selectExecutor;
private final Function<TRGT, TRGTID> idAccessor;
private final SRC source;
private final TRGTID targetId;
public RelationIds(SelectExecutor<TRGT, TRGTID> selectExecutor, Function<TRGT, TRGTID> idAccessor, SRC source, TRGTID targetId) {
this.selectExecutor = selectExecutor;
this.idAccessor = idAccessor;
this.source = source;
this.targetId = targetId;
}
public SelectExecutor<TRGT, TRGTID> getSelectExecutor() {
return selectExecutor;
}
public Function<TRGT, TRGTID> getIdAccessor() {
return idAccessor;
}
public SRC getSource() {
return source;
}
public TRGTID getTargetId() {
return targetId;
}
/**
* Implemented to stabilize {@link RelationIds} in sets to have steady orders of SQL statements
*/
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof RelationIds)) return false;
RelationIds<?, ?, ?> that = (RelationIds<?, ?, ?>) o;
if (!selectExecutor.equals(that.selectExecutor)) return false;
if (!Objects.equals(source, that.source)) return false;
return Objects.equals(targetId, that.targetId);
}
/**
* Implemented to stabilize {@link RelationIds} in sets to have steady orders of SQL statements
*/
@Override
public int hashCode() {
int result = selectExecutor.hashCode();
result = 31 * result + (source != null ? source.hashCode() : 0);
result = 31 * result + (targetId != null ? targetId.hashCode() : 0);
return result;
}
}