package com.battery.device.neware;
|
|
import java.util.List;
|
import java.util.concurrent.CopyOnWriteArrayList;
|
|
/**
|
* 厂商数据源上的语句审计:记录已转发到驱动的语句和被白名单挡下的语句。
|
*
|
* <p>它让"该数据源从未发出过非查询语句"成为可断言的事实,而不是纪律性约定;
|
* 断言对应的测试见 {@code ReadOnlyVendorDataSourceTest}。
|
*/
|
public final class ReadOnlyStatementAudit
|
{
|
private final List<String> forwardedStatements = new CopyOnWriteArrayList<>();
|
private final List<String> rejectedStatements = new CopyOnWriteArrayList<>();
|
|
void recordForwarded(String statement)
|
{
|
forwardedStatements.add(abbreviate(statement));
|
}
|
|
void recordRejected(String statement)
|
{
|
rejectedStatements.add(abbreviate(statement));
|
}
|
|
/** 已被转发到驱动的语句。 */
|
public List<String> forwardedStatements()
|
{
|
return List.copyOf(forwardedStatements);
|
}
|
|
/** 被白名单挡下、从未到达驱动的语句。 */
|
public List<String> rejectedStatements()
|
{
|
return List.copyOf(rejectedStatements);
|
}
|
|
private static String abbreviate(String statement)
|
{
|
if (statement == null) return "";
|
String trimmed = statement.trim();
|
return trimmed.length() <= 200 ? trimmed : trimmed.substring(0, 200);
|
}
|
}
|