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(); } } }