1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.files.ccsds.section;
18
19 import org.orekit.errors.OrekitException;
20 import org.orekit.errors.OrekitMessages;
21 import org.orekit.files.ccsds.definitions.TimeSystem;
22 import org.orekit.files.ccsds.utils.ContextBinding;
23 import org.orekit.files.ccsds.utils.lexical.ParseToken;
24 import org.orekit.files.ccsds.utils.lexical.TokenType;
25 import org.orekit.files.ccsds.utils.parsing.AbstractConstituentParser;
26 import org.orekit.files.ccsds.utils.parsing.ProcessingState;
27
28
29
30
31
32 public class HeaderProcessingState implements ProcessingState {
33
34
35 private final ContextBinding context;
36
37
38 private final AbstractConstituentParser<?, ?, ?> parser;
39
40
41
42
43 public HeaderProcessingState(final AbstractConstituentParser<?, ?, ?> parser) {
44 this.context = new ContextBinding(
45 parser::getConventions, parser::isSimpleEOP,
46 parser::getDataContext, parser::getParsedUnitsBehavior, () -> null,
47 () -> TimeSystem.UTC, () -> 0.0, () -> 1.0);
48 this.parser = parser;
49 }
50
51
52 @Override
53 public boolean processToken(final ParseToken token) {
54
55 parser.inHeader();
56
57 if (Double.isNaN(parser.getHeader().getFormatVersion())) {
58
59
60 if (parser.getFormatVersionKey() != null &&
61 parser.getFormatVersionKey().equals(token.getName()) &&
62 token.getType() == TokenType.ENTRY) {
63 parser.getHeader().setFormatVersion(token.getContentAsDouble());
64 return true;
65 } else {
66 throw new OrekitException(OrekitMessages.UNSUPPORTED_FILE_FORMAT, token.getFileName());
67 }
68 }
69
70 try {
71 return token.getName() != null &&
72 HeaderKey.valueOf(token.getName()).process(token, context, parser.getHeader());
73 } catch (IllegalArgumentException iae) {
74
75 return false;
76 }
77
78 }
79
80 }