blob: 9db5bb90806d3ab45a2ecabc834611fd71f7dac7 [file] [log] [blame]
package com.intellij.vcs.log.graphmodel.impl;
import com.intellij.util.Function;
import com.intellij.util.SmartList;
import com.intellij.vcs.log.graph.elements.Edge;
import com.intellij.vcs.log.graph.elements.Node;
import com.intellij.vcs.log.graph.mutable.GraphDecorator;
import com.intellij.vcs.log.graphmodel.FragmentManager;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* @author erokhins
*/
public class GraphDecoratorImpl implements GraphDecorator {
private final FragmentManager.GraphPreDecorator preDecorator;
private final Function<Node, Boolean> branchVisibleNodes;
public GraphDecoratorImpl(FragmentManager.GraphPreDecorator preDecorator, Function<Node, Boolean> branchVisibleNodes) {
this.preDecorator = preDecorator;
this.branchVisibleNodes = branchVisibleNodes;
}
@Override
public boolean isVisibleNode(@NotNull Node node) {
return preDecorator.isVisibleNode(node) && branchVisibleNodes.fun(node);
}
@NotNull
@Override
public List<Edge> getDownEdges(@NotNull Node node, @NotNull List<Edge> innerDownEdges) {
Edge edge = preDecorator.getHideFragmentDownEdge(node);
if (edge != null) {
return new SmartList<Edge>(edge);
}
else {
return Collections.unmodifiableList(innerDownEdges);
}
}
@NotNull
@Override
public List<Edge> getUpEdges(@NotNull Node node, @NotNull List<Edge> innerUpEdges) {
Edge hideFragmentUpEdge = preDecorator.getHideFragmentUpEdge(node);
if (hideFragmentUpEdge != null) {
return new SmartList<Edge>(hideFragmentUpEdge);
}
List<Edge> edges = new ArrayList<Edge>();
for (Edge edge : innerUpEdges) {
if (isVisibleNode(edge.getUpNode())) {
edges.add(edge);
}
}
return edges;
}
}