package jetbrains.mps.vcs.changesmanager.tree;
/*Generated by MPS */
import com.intellij.openapi.components.AbstractProjectComponent;
import jetbrains.mps.vcs.changesmanager.CurrentDifferenceRegistry;
import java.util.Map;
import jetbrains.mps.ide.ui.tree.MPSTree;
import jetbrains.mps.internal.collections.runtime.MapSequence;
import java.util.HashMap;
import org.jetbrains.annotations.NotNull;
import com.intellij.openapi.project.Project;
import jetbrains.mps.ide.projectPane.logicalview.ProjectTree;
import jetbrains.mps.ide.findusages.view.treeholder.treeview.UsagesTree;
import jetbrains.mps.ide.hierarchy.AbstractHierarchyTree;
public class TreeHighlighterFactory extends AbstractProjectComponent {
private CurrentDifferenceRegistry myRegistry;
private FeatureForestMapSupport myFeatureForestMapSupport;
private final Map<MPSTree, TreeHighlighter> myTreeToHighlighter = MapSequence.fromMap(new HashMap<MPSTree, TreeHighlighter>());
public TreeHighlighterFactory(@NotNull Project project, @NotNull CurrentDifferenceRegistry registry, @NotNull FeatureForestMapSupport featureForestMapSupport) {
super(project);
myRegistry = registry;
myFeatureForestMapSupport = featureForestMapSupport;
}
public void highlightTreeIfNeeded(MPSTree tree) {
TreeHighlighter highlighter = null;
if (tree instanceof ProjectTree) {
highlighter = new TreeHighlighter(myRegistry, myFeatureForestMapSupport, tree, new ProjectTreeFeatureExtractor(), true);
} else if (tree instanceof UsagesTree) {
highlighter = new TreeHighlighter(myRegistry, myFeatureForestMapSupport, tree, new UsagesTreeFeatureExtractor(), false);
} else if (tree instanceof AbstractHierarchyTree) {
highlighter = new TreeHighlighter(myRegistry, myFeatureForestMapSupport, tree, new HierarchyFeatureExtractor(), false);
}
if (highlighter != null) {
highlighter.init();
synchronized (myTreeToHighlighter) {
MapSequence.fromMap(myTreeToHighlighter).put(tree, highlighter);
}
}
}
public void unhighlightTree(MPSTree tree) {
synchronized (myTreeToHighlighter) {
if (MapSequence.fromMap(myTreeToHighlighter).containsKey(tree)) {
MapSequence.fromMap(myTreeToHighlighter).get(tree).dispose();
MapSequence.fromMap(myTreeToHighlighter).removeKey(tree);
}
}
}
public static TreeHighlighterFactory getInstance(Project project) {
return project.getComponent(TreeHighlighterFactory.class);
}
}