diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/FilterLinearGraphController.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/FilterLinearGraphController.java new file mode 100644 index 000000000000..6653c332dea3 --- /dev/null +++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/FilterLinearGraphController.java @@ -0,0 +1,61 @@ +/* + * Copyright 2000-2015 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.vcs.log.graph.impl.facade; + +import com.intellij.vcs.log.graph.api.LinearGraph; +import com.intellij.vcs.log.graph.api.permanent.PermanentGraphInfo; +import com.intellij.vcs.log.graph.collapsing.CollapsedGraph; +import com.intellij.vcs.log.graph.collapsing.DottedFilterEdgesGenerator; +import com.intellij.vcs.log.graph.utils.LinearGraphUtils; +import com.intellij.vcs.log.graph.utils.UnsignedBitSet; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Set; + +public class FilterLinearGraphController extends CascadeLinearGraphController { + @NotNull private final CollapsedGraph myCollapsedGraph; + + protected FilterLinearGraphController(@NotNull CascadeLinearGraphController delegateLinearGraphController, + @NotNull PermanentGraphInfo permanentGraphInfo, + @NotNull Set matchedIds) { + super(delegateLinearGraphController, permanentGraphInfo); + UnsignedBitSet initVisibility = new UnsignedBitSet(); + for (Integer matchedId : matchedIds) initVisibility.set(matchedId, true); + + myCollapsedGraph = CollapsedGraph.newInstance(delegateLinearGraphController.getCompiledGraph(), initVisibility); + DottedFilterEdgesGenerator.update(myCollapsedGraph, 0, myCollapsedGraph.getDelegatedGraph().nodesCount() - 1); + } + + @NotNull + @Override + protected LinearGraphAnswer performDelegateUpdate(@NotNull LinearGraphAnswer delegateAnswer) { + if (delegateAnswer == LinearGraphUtils.DEFAULT_GRAPH_ANSWER) return delegateAnswer; + throw new UnsupportedOperationException(); // todo fix later + } + + @Nullable + @Override + protected LinearGraphAnswer performAction(@NotNull LinearGraphAction action) { + return null; + } + + @NotNull + @Override + public LinearGraph getCompiledGraph() { + return myCollapsedGraph.getCompiledGraph(); + } +} diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/PermanentGraphImpl.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/PermanentGraphImpl.java index bd15ac79d489..392dbfebbcc8 100644 --- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/PermanentGraphImpl.java +++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/PermanentGraphImpl.java @@ -105,23 +105,29 @@ public class PermanentGraphImpl implements PermanentGraph, P @Override public VisibleGraph createVisibleGraph(@NotNull SortType sortType, @Nullable Set headsOfVisibleBranches, - @Nullable Set filter) { - CascadeLinearGraphController controller; - if (sortType == SortType.Bek) { - controller = new CollapsedLinearGraphController(new BekBaseLinearGraphController(this, myBekIntMap), this); - } else if (sortType == SortType.LinearBek) { - controller = new LinearBekController(new BekBaseLinearGraphController(this, myBekIntMap), this, myPermanentCommitsInfo.getTimestampGetter()); + @Nullable Set matchedCommits) { + LinearGraphController controller; + if (sortType == SortType.LinearBek) { + controller = + new LinearBekController(new BekBaseLinearGraphController(this, myBekIntMap), this, myPermanentCommitsInfo.getTimestampGetter()); + return new VisibleGraphImpl(controller, this); + } + + CascadeLinearGraphController baseController; + if (sortType == SortType.Normal) { + baseController = new BaseLinearGraphController(this); } else { - controller = new CollapsedLinearGraphController(new BaseLinearGraphController(this), this); + baseController = new BekBaseLinearGraphController(this, myBekIntMap); } + + if (matchedCommits != null) { + controller = new FilterLinearGraphController(baseController, this, myPermanentCommitsInfo.convertToNodeIds(matchedCommits)); + } else { + controller = new CollapsedLinearGraphController(baseController, this); + } + return new VisibleGraphImpl(controller, this); - // - //if (filter == null) { - // return CollapsedVisibleGraph.newInstance(getBekPermanentGraphInfo(sortType), headsOfVisibleBranches); - //} else { - // return FilterVisibleGraph.newInstance(getBekPermanentGraphInfo(sortType), headsOfVisibleBranches, filter); - //} } @NotNull