/**
* This file is licensed under the University of Illinois/NCSA Open Source License. See LICENSE.TXT for details.
*/
package edu.illinois.codingtracker.replaying;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import edu.illinois.codingtracker.helpers.ViewerHelper;
import edu.illinois.codingtracker.operations.files.RefactoredSavedFileOperation;
import edu.illinois.codingtracker.operations.files.snapshoted.SnapshotedFileOperation;
import edu.illinois.codingtracker.operations.refactorings.FinishedRefactoringOperation;
import edu.illinois.codingtracker.operations.refactorings.NewStartedRefactoringOperation;
import edu.illinois.codingtracker.operations.refactorings.RefactoringOperation;
import edu.illinois.codingtracker.operations.starts.StartedRefactoringOperation;
import edu.illinois.codingtracker.operations.textchanges.TextChangeOperation;
/**
*
* @author Stas Negara
*
*/
public class OperationSequenceFilter extends ViewerFilter {
private enum FilteredOperations {
TEXT_CHANGES, REFACTORINGS, SNAPSHOTS, OTHERS
}
private final OperationSequenceView operationSequenceView;
private boolean showTextChanges= true;
private boolean showRefactorings= true;
private boolean showSnapshots= true;
private boolean showOthers= true;
public OperationSequenceFilter(OperationSequenceView operationSequenceView) {
this.operationSequenceView= operationSequenceView;
}
@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
return isShown(element);
}
boolean isShown(Object element) {
if (element instanceof TextChangeOperation) {
return showTextChanges;
}
if (element instanceof RefactoringOperation || element instanceof RefactoredSavedFileOperation || element instanceof StartedRefactoringOperation
|| element instanceof NewStartedRefactoringOperation || element instanceof FinishedRefactoringOperation) {
return showRefactorings;
}
if (element instanceof SnapshotedFileOperation) {
return showSnapshots;
}
return showOthers;
}
void addToolBarActions() {
IToolBarManager toolBarManager= operationSequenceView.getToolBarManager();
toolBarManager.add(createFilterAction("Text Changes", "Display text change operations", FilteredOperations.TEXT_CHANGES));
toolBarManager.add(createFilterAction("Refactorings", "Display refactoring operations", FilteredOperations.REFACTORINGS));
toolBarManager.add(createFilterAction("Snapshots", "Display snapshot-producing operations", FilteredOperations.SNAPSHOTS));
toolBarManager.add(createFilterAction("Others", "Display all other operations", FilteredOperations.OTHERS));
}
private IAction createFilterAction(String actionText, String actionToolTipText, final FilteredOperations filteredOperations) {
IAction action= new Action() {
@Override
public void run() {
toggleFilteredOperations(filteredOperations);
operationSequenceView.refreshTableViewer();
}
};
ViewerHelper.initAction(action, actionText, actionToolTipText, true, true, true);
return action;
}
private void toggleFilteredOperations(FilteredOperations filteredOperations) {
switch (filteredOperations) {
case TEXT_CHANGES:
showTextChanges= !showTextChanges;
break;
case REFACTORINGS:
showRefactorings= !showRefactorings;
break;
case SNAPSHOTS:
showSnapshots= !showSnapshots;
break;
case OTHERS:
showOthers= !showOthers;
break;
default:
throw new RuntimeException("Unsupported filtered operations: " + filteredOperations);
}
}
}