package jetbrains.mps.ide.platform.actions.core;
/*Generated by MPS */
import org.apache.log4j.Logger;
import org.apache.log4j.LogManager;
import jetbrains.mps.project.MPSProject;
import java.util.List;
import org.jetbrains.mps.openapi.model.SNode;
import jetbrains.mps.smodel.structure.ExtensionPoint;
import jetbrains.mps.internal.collections.runtime.Sequence;
import jetbrains.mps.internal.collections.runtime.IWhereFilter;
import org.apache.log4j.Level;
import jetbrains.mps.internal.collections.runtime.ISelector;
import jetbrains.mps.internal.collections.runtime.ILeftCombinator;
public class MoveNodesActionHelper {
private static final Logger LOG = LogManager.getLogger(MoveNodesActionHelper.class);
public static MoveNodesAction getRefactoring(final MPSProject project, final List<SNode> nodesToMove) {
Iterable<MoveNodesAction> specialRefactorings = new ExtensionPoint<MoveNodesAction>("jetbrains.mps.ide.platform.MoveNodesActionEP").getObjects();
Iterable<MoveNodesAction> applicableRefactorings = Sequence.fromIterable(specialRefactorings).where(new IWhereFilter<MoveNodesAction>() {
public boolean accept(MoveNodesAction it) {
return it.isApplicable(project, nodesToMove);
}
});
if (Sequence.fromIterable(applicableRefactorings).isEmpty()) {
return new MoveNodesActionBase();
} else {
if (Sequence.fromIterable(applicableRefactorings).count() > 1) {
if (LOG.isEnabledFor(Level.ERROR)) {
LOG.error("More than one MoveNodes refactoring applicable: " + Sequence.fromIterable(applicableRefactorings).select(new ISelector<MoveNodesAction, String>() {
public String select(MoveNodesAction it) {
return "\"" + it.getName() + "\"";
}
}).foldLeft("", new ILeftCombinator<String, String>() {
public String combine(String s, String it) {
return s + ", " + it;
}
}));
}
}
return Sequence.fromIterable(applicableRefactorings).first();
}
}
}