package com.subgraph.orchid.directory.consensus; import com.subgraph.orchid.directory.consensus.ConsensusDocumentParser.DocumentSection; import com.subgraph.orchid.directory.parsing.DocumentFieldParser; public class AuthoritySectionParser extends ConsensusDocumentSectionParser { private VoteAuthorityEntryImpl currentEntry = null; AuthoritySectionParser(DocumentFieldParser parser , ConsensusDocumentImpl document) { super(parser, document); startEntry(); } @Override void parseLine(DocumentKeyword keyword) { switch(keyword) { case DIR_SOURCE: parseDirSource(); break; case CONTACT: currentEntry.setContact(fieldParser.parseConcatenatedString()); break; case VOTE_DIGEST: currentEntry.setVoteDigest(fieldParser.parseHexDigest()); addCurrentEntry(); break; default: break; } } private void startEntry() { currentEntry = new VoteAuthorityEntryImpl(); } private void addCurrentEntry() { document.addVoteAuthorityEntry(currentEntry); startEntry(); } private void parseDirSource() { currentEntry.setNickname(fieldParser.parseNickname()); currentEntry.setIdentity(fieldParser.parseHexDigest()); currentEntry.setHostname(fieldParser.parseString()); currentEntry.setAddress(fieldParser.parseAddress()); currentEntry.setDirectoryPort(fieldParser.parsePort()); currentEntry.setRouterPort(fieldParser.parsePort()); } @Override String getNextStateKeyword() { return "r"; } @Override DocumentSection getSection() { return DocumentSection.AUTHORITY; } DocumentSection nextSection() { return DocumentSection.ROUTER_STATUS; } }