package jetbrains.mps.smodel.persistence.def.v4; /*Generated by MPS */ import jetbrains.mps.smodel.SNodeId; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.smodel.SModelVersionsInfo; public class VersionUtil { private static final char VERSION_SEPARATOR_CHAR = ':'; private static final String VERSION_SEPARATOR = "" + VERSION_SEPARATOR_CHAR; private static final int NO_VERSION = -100; private static int parseVersionedString(String rawString) { if (rawString.startsWith(SNodeId.Foreign.ID_PREFIX)) { return NO_VERSION; } int result = 0; int mul = 1; char[] chars = rawString.toCharArray(); int lastCharNum = rawString.length() - 1; for (int i = lastCharNum; i >= 0; i--) { int digit = Character.digit(chars[i], 10); if (digit != -1) { result += digit * mul; mul *= 10; } else { if (chars[i] == VERSION_SEPARATOR_CHAR) { return result; } return NO_VERSION; } } return NO_VERSION; } private static String getBeforeSeparator(String s) { if (parseVersionedString(s) == NO_VERSION) { return s; } int index = s.lastIndexOf(VERSION_SEPARATOR_CHAR); if (index == -1) { return s; } return s.substring(0, index); } public static String formVersionedString(String parameter, int version) { if (version == -1) { return parameter; } return parameter + VERSION_SEPARATOR + version; } public static void fetchConceptVersion(String rawFqName, SNode node, SModelVersionsInfo versionsInfo) { int version = parseVersionedString(rawFqName); if (version != NO_VERSION) { versionsInfo.addConceptNameVersion(node, version); } } public static String getConceptFQName(String rawFqName) { return getBeforeSeparator(rawFqName); } public static void fetchChildNodeRoleVersion(String rawRole, SNode childNode, SModelVersionsInfo versionsInfo) { int version = parseVersionedString(rawRole); if (version != NO_VERSION) { versionsInfo.addRoleVersion(childNode, version); } } public static String getRole(String rawRole) { return getBeforeSeparator(rawRole); } public static String getPropertyName(String raw, SNode node, SModelVersionsInfo versionsInfo) { String propertyName = getBeforeSeparator(raw); int version = parseVersionedString(raw); if (version != NO_VERSION) { versionsInfo.addPropertyVersion(node, propertyName, version); } return propertyName; } public static String getLinkRole(String rawRole, SNode node, SModelVersionsInfo versionsInfo) { int version = parseVersionedString(rawRole); String linkRole = getBeforeSeparator(rawRole); if (version != NO_VERSION) { versionsInfo.addLinkRoleVersion(node, linkRole, version); } return linkRole; } public static String getTargetNodeId(String targetId, String role, SNode node, SModelVersionsInfo versionsInfo) { final String linkRole = getBeforeSeparator(targetId); int version = parseVersionedString(targetId); if (version != NO_VERSION) { versionsInfo.addLinkTargetIdVersion(node, role, version); } return linkRole; } }