[vcs-log] create default implementation for changes

This commit is contained in:
Julia Beliaeva
2015-02-02 16:45:58 +03:00
parent 5dc943e6d1
commit 11e70e2f24
2 changed files with 94 additions and 54 deletions
@@ -41,8 +41,92 @@ public interface GraphChanges<NodeId> {
@Nullable
NodeId downNodeId();
@Nullable
NodeId additionInfo();
NodeId targetId();
boolean removed();
}
class NodeImpl<NodeId> implements Node<NodeId> {
@NotNull private final NodeId myNodeId;
private final boolean myRemoved;
public NodeImpl(@NotNull NodeId nodeId, boolean removed) {
myNodeId = nodeId;
myRemoved = removed;
}
@NotNull
@Override
public NodeId getNodeId() {
return myNodeId;
}
@Override
public boolean removed() {
return myRemoved;
}
}
class EdgeImpl<NodeId> implements Edge<NodeId> {
@Nullable private final NodeId myUpNodeId;
@Nullable private final NodeId myDownNodeId;
@Nullable private final NodeId myTargetId;
private final boolean myRemoved;
public EdgeImpl(@Nullable NodeId upNodeId, @Nullable NodeId downNodeId, @Nullable NodeId targetId, boolean removed) {
myUpNodeId = upNodeId;
myDownNodeId = downNodeId;
myTargetId = targetId;
myRemoved = removed;
}
public EdgeImpl(NodeId upNodeId, NodeId downNodeId, boolean removed) {
this(upNodeId, downNodeId, null, removed);
}
@Nullable
@Override
public NodeId upNodeId() {
return myUpNodeId;
}
@Nullable
@Override
public NodeId downNodeId() {
return myDownNodeId;
}
@Nullable
@Override
public NodeId targetId() {
return myTargetId;
}
@Override
public boolean removed() {
return myRemoved;
}
}
class GraphChangesImpl<NodeId> implements GraphChanges<NodeId> {
private final Collection<Node<NodeId>> myChangedNodes;
private final Collection<Edge<NodeId>> myChangedEdges;
public GraphChangesImpl(Collection<Node<NodeId>> changedNodes, Collection<Edge<NodeId>> changedEdges) {
myChangedNodes = changedNodes;
myChangedEdges = changedEdges;
}
@NotNull
@Override
public Collection<Node<NodeId>> getChangedNodes() {
return myChangedNodes;
}
@NotNull
@Override
public Collection<Edge<NodeId>> getChangedEdges() {
return myChangedEdges;
}
}
}
@@ -68,8 +68,9 @@ public class LinearBekController extends CascadeLinearGraphController {
if (graphElement instanceof GraphEdge) {
GraphEdge edge = (GraphEdge)graphElement;
if (edge.getType() == GraphEdgeType.DOTTED) {
return new LinearGraphAnswer(calculateChanges(edge, myCompiledGraph.expandEdge(edge),
getDelegateLinearGraphController().getCompiledGraph()), null, null, null);
return new LinearGraphAnswer(
calculateChanges(edge, myCompiledGraph.expandEdge(edge), getDelegateLinearGraphController().getCompiledGraph()), null, null,
null);
}
}
}
@@ -148,60 +149,15 @@ public class LinearBekController extends CascadeLinearGraphController {
private static GraphChanges<Integer> calculateChanges(GraphEdge expanded, Collection<GraphEdge> addedEdges, LinearGraph delegateGraph) {
final Set<GraphChanges.Edge<Integer>> edgeChanges = ContainerUtil.newHashSet();
edgeChanges.add(new ChangedEdge(delegateGraph.getNodeId(expanded.getUpNodeIndex()), delegateGraph.getNodeId(expanded.getDownNodeIndex()), true));
edgeChanges.add(new GraphChanges.EdgeImpl<Integer>(delegateGraph.getNodeId(expanded.getUpNodeIndex()),
delegateGraph.getNodeId(expanded.getDownNodeIndex()), null, true));
for (GraphEdge edge : addedEdges) {
edgeChanges.add(new ChangedEdge(delegateGraph.getNodeId(edge.getUpNodeIndex()), delegateGraph.getNodeId(edge.getDownNodeIndex()), false));
edgeChanges.add(
new GraphChanges.EdgeImpl<Integer>(delegateGraph.getNodeId(edge.getUpNodeIndex()), delegateGraph.getNodeId(edge.getDownNodeIndex()),
false));
}
return new GraphChanges<Integer>() {
@NotNull
@Override
public Collection<Node<Integer>> getChangedNodes() {
return Collections.emptySet();
}
@NotNull
@Override
public Collection<Edge<Integer>> getChangedEdges() {
return edgeChanges;
}
};
return new GraphChanges.GraphChangesImpl<Integer>(Collections.<GraphChanges.Node<Integer>>emptySet(), edgeChanges);
}
private static class ChangedEdge implements GraphChanges.Edge<Integer> {
private final int myUpNodeId;
private final int myDownNodeId;
private final boolean myRemoved;
private ChangedEdge(int upNodeId, int downNodeId, boolean removed) {
myUpNodeId = upNodeId;
myDownNodeId = downNodeId;
myRemoved = removed;
}
@Nullable
@Override
public Integer upNodeId() {
return myUpNodeId;
}
@Nullable
@Override
public Integer downNodeId() {
return myDownNodeId;
}
@Nullable
@Override
public Integer additionInfo() {
return null; // TODO huh?
}
@Override
public boolean removed() {
return myRemoved;
}
}
}