package jetbrains.mps.smodel.persistence.def.v8; /*Generated by MPS */ import jetbrains.mps.smodel.persistence.def.IHashProvider; import org.apache.log4j.Logger; import org.apache.log4j.LogManager; import jetbrains.mps.generator.ModelDigestUtil; import java.util.Map; import java.util.HashMap; import jetbrains.mps.smodel.persistence.def.XmlFastScanner; import jetbrains.mps.extapi.model.GeneratableSModel; public class HashProvider8 extends IHashProvider { private static final Logger LOG = LogManager.getLogger(HashProvider8.class); @Override public String getHash(String content) { return ModelDigestUtil.hashText(content); } @Override public Map<String, String> getRootHashes(String content) { Map<String, String> result = new HashMap<String, String>(); extractRootHashes(content, result); return result; } private static void extractRootHashes(String content, Map<String, String> rootHashes) { XmlFastScanner scanner = new XmlFastScanner(content.toCharArray()); int depth = 0; int token; int rootStart = -1; String rootId = null; boolean isEmpty = true; while ((token = scanner.next()) != XmlFastScanner.EOI) { switch (token) { case XmlFastScanner.OPEN_TAG: depth++; if (depth == 2 && ModelPersistence8.ROOT_NODE.equals(scanner.getName())) { rootStart = scanner.getTokenOffset(); rootId = IHashProvider.extractId(scanner.token()); if (rootId != null && isEmpty) { rootHashes.put(GeneratableSModel.HEADER, ModelDigestUtil.hashText(scanner.getText(0, rootStart))); isEmpty = false; } } break; case XmlFastScanner.SIMPLE_TAG: if (depth == 1 && ModelPersistence8.ROOT_NODE.equals(scanner.getName())) { rootId = IHashProvider.extractId(scanner.token()); if (rootId != null) { String s = scanner.getText(scanner.getTokenOffset(), scanner.getOffset()); rootHashes.put(rootId, ModelDigestUtil.hashText(s)); } } break; case XmlFastScanner.CLOSE_TAG: if (depth == 2) { if (rootId != null && ModelPersistence8.ROOT_NODE.equals(scanner.getName())) { String s = scanner.getText(rootStart, scanner.getOffset()); rootHashes.put(rootId, ModelDigestUtil.hashText(s)); } rootStart = -1; rootId = null; } depth--; break; default: } } if (depth != 0) { LOG.error("xml: bad data"); } if (isEmpty) { rootHashes.put(GeneratableSModel.HEADER, ModelDigestUtil.hashText(content)); } } }