package jetbrains.mps.baseLanguage.unitTest.execution.tool;
/*Generated by MPS */
import com.intellij.ide.OccurenceNavigator;
import javax.swing.event.TreeSelectionListener;
import jetbrains.mps.ide.ui.tree.MPSTreeNode;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.event.TreeSelectionEvent;
import com.intellij.pom.Navigatable;
public abstract class BaseTestOccurenceNavigator implements OccurenceNavigator, TreeSelectionListener {
protected final TestTree myTestTree;
protected int mySelected = -1;
protected int myCount;
public BaseTestOccurenceNavigator(TestTree tree) {
myTestTree = tree;
myTestTree.addTreeSelectionListener(this);
}
public abstract boolean hasAvailableOccurence(boolean next);
public abstract boolean accept(MPSTreeNode node);
public void setNewSelectedIndex(boolean next) {
boolean founded = false;
DefaultMutableTreeNode node = myTestTree.getCurrentNode();
do {
MPSTreeNode temp = (MPSTreeNode) ((next ? node.getNextNode() : node.getPreviousNode()));
mySelected = mySelected + ((next ? 1 : -1));
if (accept(temp)) {
founded = true;
}
node = temp;
} while (!(founded));
}
@Override
public boolean hasNextOccurence() {
return hasAvailableOccurence(true);
}
@Override
public boolean hasPreviousOccurence() {
return hasAvailableOccurence(false);
}
@Override
public OccurenceNavigator.OccurenceInfo goNextOccurence() {
setNewSelectedIndex(true);
BaseTestOccurenceNavigator.TestNavigator navigator = new BaseTestOccurenceNavigator.TestNavigator();
navigator.navigate(true);
return new OccurenceNavigator.OccurenceInfo(navigator, mySelected, myCount);
}
@Override
public OccurenceNavigator.OccurenceInfo goPreviousOccurence() {
setNewSelectedIndex(false);
BaseTestOccurenceNavigator.TestNavigator navigator = new BaseTestOccurenceNavigator.TestNavigator();
navigator.navigate(true);
return new OccurenceNavigator.OccurenceInfo(navigator, mySelected, myCount);
}
@Override
public String getNextOccurenceActionName() {
return "Next test";
}
@Override
public String getPreviousOccurenceActionName() {
return "Previous test";
}
@Override
public void valueChanged(TreeSelectionEvent p0) {
if (myTestTree == null) {
return;
}
int[] result = myTestTree.getSelectionRows();
if (result != null && result.length > 0) {
mySelected = result[0];
}
myCount = myTestTree.getRowCount();
}
public class TestNavigator implements Navigatable {
public TestNavigator() {
}
@Override
public void navigate(boolean p0) {
myTestTree.setSelectionRows(new int[]{mySelected});
}
@Override
public boolean canNavigate() {
return true;
}
@Override
public boolean canNavigateToSource() {
return true;
}
}
}