package jetbrains.mps.refactoring.participant;
/*Generated by MPS */
import java.util.List;
import org.jetbrains.mps.openapi.module.SRepository;
import org.jetbrains.mps.openapi.module.SearchScope;
import org.jetbrains.mps.openapi.util.ProgressMonitor;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import java.util.ArrayList;
import jetbrains.mps.internal.collections.runtime.ITranslator2;
public abstract class RefactoringParticipantBase<InitialDataObject, FinalDataObject, InitialPoint, FinalPoint> implements RefactoringParticipant<InitialDataObject, FinalDataObject, InitialPoint, FinalPoint> {
public List<List<RefactoringParticipant.Change<InitialDataObject, FinalDataObject>>> getChanges(List<InitialDataObject> initialStates, SRepository repository, List<RefactoringParticipant.Option> selectedOptions, SearchScope searchScope, ProgressMonitor progressMonitor) {
RefactoringParticipant.Option firstOption = ListSequence.fromList(getAvailableOptions(initialStates, repository)).first();
progressMonitor.start((firstOption == null ? "" : firstOption.getDescription()), ListSequence.fromList(initialStates).count());
List<List<RefactoringParticipant.Change<InitialDataObject, FinalDataObject>>> result = ListSequence.fromList(new ArrayList<List<RefactoringParticipant.Change<InitialDataObject, FinalDataObject>>>(ListSequence.fromList(initialStates).count()));
for (InitialDataObject initialState : ListSequence.fromList(initialStates)) {
ListSequence.fromList(result).addElement(getChanges(initialState, repository, selectedOptions, searchScope, progressMonitor.subTask(1)));
if (progressMonitor.isCanceled()) {
return null;
}
}
progressMonitor.done();
return result;
}
public List<RefactoringParticipant.Change<InitialDataObject, FinalDataObject>> getChanges(InitialDataObject initialState, SRepository repository, List<RefactoringParticipant.Option> selectedOptions, SearchScope searchScope, ProgressMonitor progressMonitor) {
return getChanges(initialState, repository, selectedOptions, searchScope);
}
public List<RefactoringParticipant.Change<InitialDataObject, FinalDataObject>> getChanges(InitialDataObject initialState, SRepository repository, List<RefactoringParticipant.Option> selectedOptions, SearchScope searchScope) {
throw new UnsupportedOperationException();
}
public List<RefactoringParticipant.Option> getAvailableOptions(List<InitialDataObject> initialStates, final SRepository repository) {
return ListSequence.fromList(initialStates).translate(new ITranslator2<InitialDataObject, RefactoringParticipant.Option>() {
public Iterable<RefactoringParticipant.Option> translate(InitialDataObject initialState) {
return getAvailableOptions(initialState, repository);
}
}).distinct().toListSequence();
}
public List<RefactoringParticipant.Option> getAvailableOptions(InitialDataObject initialState, SRepository repository) {
throw new UnsupportedOperationException();
}
}