package jetbrains.mps.execution.lib; /*Generated by MPS */ import org.jetbrains.annotations.Nullable; import org.jetbrains.mps.openapi.model.SNodeReference; import org.jetbrains.mps.openapi.persistence.PersistenceFacade; import org.jetbrains.annotations.NotNull; import java.util.List; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.internal.collections.runtime.ListSequence; import jetbrains.mps.internal.collections.runtime.ISelector; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import java.util.ArrayList; /** * static methods container class * responsible for converting node refs into string and the other way around * also supports lists of node refs */ public final class PointerUtils { private static final String POINTER_SEPARATOR = "%"; private PointerUtils() { } @Nullable public static SNodeReference stringToPointer(String pointerString) { if ((pointerString == null || pointerString.length() == 0)) { return null; } return PersistenceFacade.getInstance().createNodeReference(pointerString); } public static String pointerToString(@NotNull SNodeReference pointer) { return PersistenceFacade.getInstance().asString(pointer); } public static ClonableList<String> nodesToCloneableList(List<SNode> nodes) { return new ClonableList<String>(ListSequence.fromList(nodes).select(new ISelector<SNode, String>() { public String select(SNode it) { return PointerUtils.pointerToString(SNodeOperations.getPointer(it)); } }).toListSequence()); } public static ClonableList<String> nodeToCloneableList(SNode node) { return new ClonableList<String>(PointerUtils.pointerToString(SNodeOperations.getPointer(node))); } public static List<SNodeReference> clonableListToNodes(ClonableList<String> clonableList) { List<SNodeReference> list = ListSequence.fromList(new ArrayList<SNodeReference>()); for (String string : clonableList) { ListSequence.fromList(list).addElement(stringToPointer(string)); } return list; } }