package jetbrains.mps.lang.migration.runtime.base;
/*Generated by MPS */
import jetbrains.mps.refactoring.participant.RefactoringParticipant;
import java.util.List;
import org.jetbrains.mps.openapi.model.SNode;
import org.jetbrains.mps.openapi.module.SModule;
import jetbrains.mps.refactoring.participant.RefactoringSession;
import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes;
import jetbrains.mps.refactoring.participant.RefactoringUI;
import java.util.Map;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SLinkOperations;
import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory;
import jetbrains.mps.internal.collections.runtime.ISelector;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SPropertyOperations;
import jetbrains.mps.internal.collections.runtime.MapSequence;
import java.util.HashMap;
public class RefactoringPartImpl {
private RefactoringParticipant.PersistentRefactoringParticipant<?, ?, ?, ?> myParticipant;
private List<SNode> myParts;
private SNode mySelectedOptionsSerialized;
public RefactoringPartImpl(SNode selectedOptionsSerialized, List<SNode> parts, RefactoringParticipant.PersistentRefactoringParticipant<?, ?, ?, ?> participant) {
myParticipant = participant;
mySelectedOptionsSerialized = selectedOptionsSerialized;
myParts = parts;
}
public void execute(SModule module, RefactoringSession refactoringSession, _FunctionTypes._void_P1_E0<? super Runnable> runner, _FunctionTypes._void_P4_E0<? super RefactoringUI, ? super RefactoringParticipant.PersistentRefactoringParticipant, ? super Iterable<SNode>, ? super Map<SNode, SNode>> refactoringProcessor) {
performDeserializingRefactoring(module, myParticipant, refactoringSession, runner, refactoringProcessor);
}
public <IP, FP> void performDeserializingRefactoring(final SModule module, RefactoringParticipant.PersistentRefactoringParticipant<?, ?, IP, FP> participant, RefactoringSession refactoringSession, _FunctionTypes._void_P1_E0<? super Runnable> runner, _FunctionTypes._void_P4_E0<? super RefactoringUI, ? super RefactoringParticipant.PersistentRefactoringParticipant, ? super Iterable<SNode>, ? super Map<SNode, SNode>> refactoringProcessor) {
RefactoringUI ui = new EmptyRefactoringUI((mySelectedOptionsSerialized == null ? null : ListSequence.fromList(SLinkOperations.getChildren(mySelectedOptionsSerialized, MetaAdapterFactory.getContainmentLink(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x31ee543051f23340L, 0x31ee543051f23346L, "options"))).select(new ISelector<SNode, RefactoringParticipant.Option>() {
public RefactoringParticipant.Option select(SNode it) {
return new RefactoringParticipant.Option(SPropertyOperations.getString(it, MetaAdapterFactory.getProperty(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x31ee543051f23343L, 0x31ee543051f23344L, "optionId")), SPropertyOperations.getString(it, MetaAdapterFactory.getProperty(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x31ee543051f23343L, 0x31ee543051f30774L, "description")));
}
}).toListSequence()), runner);
Map<SNode, SNode> initialToFinal = MapSequence.fromMap(new HashMap<SNode, SNode>());
for (SNode part : ListSequence.fromList(myParts)) {
MapSequence.fromMap(initialToFinal).put(SLinkOperations.getTarget(part, MetaAdapterFactory.getContainmentLink(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x2b3f57492c163158L, 0x325b97b223b9e3acL, "initialState")), SLinkOperations.getTarget(part, MetaAdapterFactory.getContainmentLink(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x2b3f57492c163158L, 0x325b97b223b9e3aeL, "finalState")));
}
refactoringProcessor.invoke(ui, participant, SLinkOperations.collect(myParts, MetaAdapterFactory.getContainmentLink(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x2b3f57492c163158L, 0x325b97b223b9e3acL, "initialState")), initialToFinal);
}
}