package org.javers.core.diff;
import org.javers.common.validation.Validate;
import org.javers.core.graph.ObjectNode;
import org.javers.core.metamodel.object.GlobalId;
import java.util.*;
/**
* @author bartosz walacik
*/
class NodeMatcher {
/**
* matching based on {@link org.javers.core.metamodel.object.GlobalId}
*/
public List<NodePair> match(GraphPair graphPair) {
Validate.argumentIsNotNull(graphPair);
List<NodePair> pairs = new ArrayList<>();
Map<GlobalId, ObjectNode> rightMap = asMap(graphPair.getRightNodeSet());
for (ObjectNode left : graphPair.getLeftNodeSet()) {
GlobalId key = left.getGlobalId();
if (rightMap.containsKey(key)) {
pairs.add(new RealNodePair(left, rightMap.get(key)));
}
}
return pairs;
}
private Map<GlobalId, ObjectNode> asMap(Set<ObjectNode> nodes) {
Map<GlobalId, ObjectNode> map = new HashMap<>();
for (ObjectNode node : nodes) {
map.put(node.getGlobalId(),node);
}
return map;
}
}