1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.files.ccsds.ndm.adm;
18
19 import java.util.ArrayList;
20 import java.util.Collections;
21 import java.util.List;
22 import java.util.Map;
23
24 import org.orekit.files.ccsds.utils.lexical.ParseToken;
25 import org.orekit.files.ccsds.utils.lexical.TokenType;
26 import org.orekit.files.ccsds.utils.lexical.XmlTokenBuilder;
27 import org.orekit.utils.units.Unit;
28 import org.orekit.utils.units.UnitsCache;
29
30
31
32
33
34
35
36
37 public class RotationXmlTokenBuilder implements XmlTokenBuilder {
38
39
40 private static final String ANGLE = "angle";
41
42
43 private static final String RATE = "rate";
44
45
46 private static final String UNITS = "units";
47
48
49 private final UnitsCache cache;
50
51
52
53 public RotationXmlTokenBuilder() {
54 this.cache = new UnitsCache();
55 }
56
57
58 @Override
59 public List<ParseToken> buildTokens(final boolean startTag, final boolean isLeaf, final String qName,
60 final String content, final Map<String, String> attributes,
61 final int lineNumber, final String fileName) {
62
63
64 String name = attributes.get(ANGLE);
65 if (name == null) {
66 name = attributes.get(RATE);
67 }
68
69 if (startTag) {
70 return Collections.singletonList(new ParseToken(TokenType.START, name, content, Unit.NONE, lineNumber, fileName));
71 } else {
72 final List<ParseToken> built = new ArrayList<>(2);
73 if (isLeaf) {
74
75 final Unit units = cache.getUnits(attributes.get(UNITS));
76
77 built.add(new ParseToken(TokenType.ENTRY, name, content, units, lineNumber, fileName));
78 }
79 built.add(new ParseToken(TokenType.STOP, name, null, Unit.NONE, lineNumber, fileName));
80 return built;
81 }
82
83 }
84
85 }