public class ParserBuilder extends AbstractBuilder<ParserBuilder>
CCSDS消息
文件解析器的构建器。
此构建器可用于构建所有CCSDS消息解析器类型。在多线程环境中特别有用,因为解析器不能在线程之间共享,因此在这种情况下必须构建几个独立的解析器。
Constructor and Description |
---|
ParserBuilder()
简单构造函数。
|
ParserBuilder(DataContext dataContext)
简单构造函数。
|
getConventions, getDataContext, getEquatorialRadius, getFlattening, getMissionReferenceDate, getRangeUnitsConverter, withConventions, withDataContext, withEquatorialRadius, withFlattening, withMissionReferenceDate, withRangeUnitsConverter
@DefaultDataContext public ParserBuilder()
此构造函数创建一个构建器,其中包括
IERS约定
设置为IERSConventions.IERS_2010
简单EOP
设置为true
数据上下文
设置为默认上下文
任务参考日期
设置为null
引力系数
设置为Double.NaN
中心天体赤道半径
设置为Double.NaN
中心天体扁率
设置为Double.NaN
默认质量
设置为Double.NaN
默认插值度
设置为1
解析单位行为
设置为ParsedUnitsBehavior.CONVERT_COMPATIBLE
范围单位转换器
设置为IdentityConverter
public ParserBuilder(DataContext dataContext)
此构造函数创建一个构建器,其中包括
IERS约定
设置为IERSConventions.IERS_2010
简单EOP
设置为true
任务参考日期
设置为null
引力系数
设置为Double.NaN
中心天体赤道半径
设置为Double.NaN
中心天体扁率
设置为Double.NaN
默认质量
设置为Double.NaN
默认插值度
设置为1
解析单位行为
设置为ParsedUnitsBehavior.CONVERT_COMPATIBLE
范围单位转换器
设置为IdentityConverter
dataContext
- 用于检索框架、时间标度等的数据上下文。
protected ParserBuilder create(IERSConventions newConventions, double newEquatorialRadius, double newFlattening, DataContext newDataContext, AbsoluteDate newMissionReferenceDate, RangeUnitsConverter newRangeUnitsConverter)
create
在类 AbstractBuilder<ParserBuilder>
newConventions
- IERS约定
newEquatorialRadius
- 中心天体赤道半径
newFlattening
- 中心天体扁率
newDataContext
- 用于检索框架、时间标度等的数据上下文
newMissionReferenceDate
- 任务经过时间或任务相对时间时间系统的参考日期
newRangeUnitsConverter
- 范围单位
的转换器
public ParserBuilder withSimpleEOP(boolean newSimpleEOP)
newSimpleEOP
- 如果在插值EOP时忽略地潮效应,则为true
public boolean isSimpleEOP()
public ParserBuilder withMu(double newMu)
newMu
- 引力系数
public double getMu()
public ParserBuilder withDefaultMass(double newDefaultMass)
默认质量仅由OpmParser
使用。
newDefaultMass
- 默认质量
public double getDefaultMass()
public ParserBuilder withDefaultInterpolationDegree(int newDefaultInterpolationDegree)
newDefaultInterpolationDegree
- 默认插值度
public int getDefaultInterpolationDegree()
public ParserBuilder withParsedUnitsBehavior(ParsedUnitsBehavior newParsedUnitsBehavior)
newParsedUnitsBehavior
- 处理解析单位的行为
public ParsedUnitsBehavior getParsedUnitsBehavior()
public ParserBuilder withFilter(Function<ParseToken,List<ParseToken>> filter)
此过滤器允许更改解析的标记。可以多次调用此方法,每次设置一个过滤器。过滤器始终按照设置的顺序应用。此功能有几个用例。
第一个用例是允许解析存在一些已知差异的格式不正确的CCSDS消息。一个真实的例子(激发此功能开发的例子)是XML格式的OMM文件添加了一个空的OBJECT_ID。可以通过设置过滤器来修复这个问题,如下所示:
Omm omm = new ParserBuilder().
withFilter(token -> {
if ("OBJECT_ID".equals(token.getName()) &&
(token.getRawContent() == null || token.getRawContent().isEmpty())) {
// 用"unknown"替换null/空条目
return Collections.singletonList(new ParseToken(token.getType(), token.getName(),
"unknown", token.getUnits(),
token.getLineNumber(), token.getFileName()));
} else {
return Collections.singletonList(token);
}
}).
buildOmmParser().
parseMessage(message);
第二个用例是删除不需要的数据。例如,为了删除所有用户定义的数据,可以使用:
Omm omm = new ParserBuilder().
withFilter(token -> {
if (token.getName().startsWith("USER_DEFINED")) {
return Collections.emptyList();
} else {
return Collections.singletonList(token);
}
}).
buildOmmmParser().
parseMessage(message);
第三个用例是添加原始文件中原本不存在的数据。例如,为了向缺少生成的ODM V3消息ID的ODM V2消息中添加一个生成的消息ID,可以执行以下操作:
final String myMessageId = ...; // 这可以从计数器、SHA256摘要或一些元数据计算
Omm omm = new ParserBuilder()
withFilter(token -> {
if ("CCSDS_OMM_VERS".equals(token.getName())) {
// 强制使用ODM V3
return Collections.singletonList(new ParseToken(token.getType(), token.getName(),
"3.0", token.getUnits(),
token.getLineNumber(), token.getFileName()));
} else {
return Collections.singletonList(token);
}
}).
withFilter(token -> {
if ("ORIGINATOR".equals(token.getName())) {
// 在ORIGINATOR条目后添加生成的消息ID
return Arrays.asList(token,
new ParseToken(TokenType.ENTRY, "MESSAGE_ID",
myMessageId, null,
-1, token.getFileName()));
} else {
return Collections.singletonList(token);
}
}).
buildOmmmParser().
parseMessage(message);
filter
- 要添加的标记过滤器
public Function<ParseToken,List<ParseToken>>[] getFilters()
Copyright © 2002-2023 CS GROUP. All rights reserved.