| 244 | } |
| 245 | |
| 246 | public static Directive parseDirective(List<String> tokens) throws ParserException { |
| 247 | final int tokensNumber = tokens.size(); |
| 248 | checkMissingTokens(tokensNumber, 0, "':'"); |
| 249 | if (!":".equals(tokens.get(0))) { |
| 250 | throw new ParserException("Directives must start with ':'"); |
| 251 | } |
| 252 | checkMissingTokens(tokensNumber, 1, "directive"); |
| 253 | MatchDataElement.DirectiveType directiveType = expectDirective(tokens.get(1)); |
| 254 | switch(tokens.get(1)) { |
| 255 | case "break": |
| 256 | case "HT": |
| 257 | case "injury": |
| 258 | case "fair_play": |
| 259 | return new Directive(directiveType); |
| 260 | case "phase": |
| 261 | InPlayPhaseType phase = expectInPlayPhase(tokens.get(2)); |
| 262 | checkMissingTokens(tokensNumber, 3, "team"); |
| 263 | return new Directive(phase, tokens.get(3)); |
| 264 | case "intention": |
| 265 | Intention intention = expectIntentionDirective(tokens.get(2)); |
| 266 | return new Directive(intention); |
| 267 | case "set": |
| 268 | checkMissingTokens(tokensNumber, 2, "team"); |
| 269 | checkMissingTokens(tokensNumber, 3, "':'"); |
| 270 | expectToken(":", tokens.get(3)); |
| 271 | checkMissingTokens(tokensNumber, 4, "set piece keyword"); |
| 272 | return new Directive(directiveType, tokens.get(2), |
| 273 | Parser.setPieceMapping.get(tokens.get(4))); |
| 274 | case "substitution": |
| 275 | checkMissingTokens(tokensNumber, 2, "team"); |
| 276 | checkMissingTokens(tokensNumber, 3, "':'"); |
| 277 | expectToken(":", tokens.get(3)); |
| 278 | checkMissingTokens(tokensNumber, 4, "tactical position"); |
| 279 | return new Directive(directiveType, tokens.get(2) , parseTacticalPosition(tokens.subList(4, tokens.size()))); |
| 280 | case "possessor": |
| 281 | checkMissingTokens(tokensNumber, 2, "tactical position"); |
| 282 | return new Directive(directiveType, parseTacticalPosition(tokens.subList(2, tokens.size()))); |
| 283 | default: |
| 284 | checkMissingTokens(tokensNumber, 2, "team"); |
| 285 | return new Directive(directiveType, tokens.get(2)); |
| 286 | } |
| 287 | } |
| 288 | |
| 289 | public static void checkMissingTokens(int tokensNumber, int tokenIndex, String expectedToken) throws MissingTokenException { |
| 290 | if (tokenIndex > tokensNumber - 1) throw new MissingTokenException("Expected: " + expectedToken); |