package jnpf.bizcommon.audit.service.title;
|
|
import java.util.ArrayList;
|
import java.util.Collections;
|
import java.util.List;
|
|
/**
|
* 一张在线表单上「哪些字段进操作记录标题」的解析结果。
|
*
|
* <p>主表字段与子表字段**必须分开**:标题的形态是「主表一行 + 子表每条记录各一行」,
|
* 混在一起就拼不出来。这也是本类不复用 {@code AuditFormRegistry} 内部那套拍平式
|
* {@code collectFields} 的原因。
|
*
|
* <p>不可变。{@link #EMPTY} 是所有"取不到/解析不了"路径的统一返回值——
|
* 取不到勾选配置时应当**不产出标题**,而不是猜一个。
|
*/
|
public final class AuditTitleSpec {
|
|
public static final AuditTitleSpec EMPTY =
|
new AuditTitleSpec(Collections.<String>emptyList(),
|
Collections.<SubTableSpec>emptyList());
|
|
private final List<String> mainFields;
|
private final List<SubTableSpec> subTables;
|
|
public AuditTitleSpec(List<String> mainFields, List<SubTableSpec> subTables) {
|
this.mainFields = mainFields == null || mainFields.isEmpty()
|
? Collections.<String>emptyList()
|
: Collections.unmodifiableList(new ArrayList<String>(mainFields));
|
this.subTables = subTables == null || subTables.isEmpty()
|
? Collections.<SubTableSpec>emptyList()
|
: Collections.unmodifiableList(new ArrayList<SubTableSpec>(subTables));
|
}
|
|
/** 主表上勾选的字段名(小写),按表单出现顺序。 */
|
public List<String> mainFields() {
|
return mainFields;
|
}
|
|
/** 每个 {@code jnpfKey=table} 子表控件一条。 */
|
public List<SubTableSpec> subTables() {
|
return subTables;
|
}
|
|
public boolean isEmpty() {
|
return mainFields.isEmpty() && subTables.isEmpty();
|
}
|
|
/** 一个子表控件在标题里的取值口径。 */
|
public static final class SubTableSpec {
|
private final String vModel;
|
private final String tableName;
|
private final List<String> fields;
|
|
public SubTableSpec(String vModel, String tableName, List<String> fields) {
|
this.vModel = vModel;
|
this.tableName = tableName;
|
this.fields = fields == null || fields.isEmpty()
|
? Collections.<String>emptyList()
|
: Collections.unmodifiableList(new ArrayList<String>(fields));
|
}
|
|
/** 事件 newData 里装这批子记录的键,如 {@code tableField6da682}。 */
|
public String vModel() {
|
return vModel;
|
}
|
|
/** 子表物理表名,如 {@code lims_jianyan_xiang};表单没配时为 null。 */
|
public String tableName() {
|
return tableName;
|
}
|
|
/** 子表内勾选的字段名(小写),按表单出现顺序。 */
|
public List<String> fields() {
|
return fields;
|
}
|
}
|
}
|