新增mms接卸

This commit is contained in:
2026-04-17 16:31:38 +08:00
parent dfbd552218
commit c9461f8b8a
278 changed files with 35097 additions and 271 deletions

View File

@@ -7,18 +7,22 @@
当前真实保留的子模块有:
- `activate-tool`
- `mms-mapping`
- `wave-tool`
因此,`tools` 现阶段仍然是聚合模块,但当前已实际承载激活工具和波形查看工具个子模块。
因此,`tools` 现阶段仍然是聚合模块,但当前已实际承载激活工具、ICD/MMS 映射工具和波形查看工具个子模块。
## 当前结构
```text
tools/
├── activate-tool/
├── mms-mapping/
└── wave-tool/
```
其中 `tools/mms-mapping` 当前 Maven `artifactId``mms-mapping`
## activate-tool 的职责
`activate-tool` 当前提供的能力主要围绕设备授权与许可证:
@@ -42,6 +46,24 @@ tools/
从接口层看,当前主要围绕 `/wave/*` 路径提供能力。
## mms-mapping 的职责
`mms-mapping` 当前提供的能力主要围绕 ICD 文件解析与 MMS 映射数据生成:
- 解析 ICD / SCL 文件结构
- 校验索引选择与绑定关系
- 生成映射任务结果与文档数据
从接口层看,当前主要围绕 `/api/mms-mapping` 路径提供能力。
## mms-mapping 配置
`mms-mapping` 当前支持以下配置项:
- `icd.mapping.default-template-path`:默认模板资源路径,默认值为 `template/DefaultCfg.txt`
- `icd.mapping.default-author`:请求未传作者时使用的默认作者,默认值为 `system`
- `icd.mapping.default-output-dir`:请求开启落盘但未指定目录时使用的默认输出目录,默认值为空字符串(即当前工作目录)
## 模块定位
当前 `activate-tool` 更适合作为平台级基础能力模块,而不是业务检测模块的一部分。
@@ -54,7 +76,7 @@ tools/
## 依赖关系
`tools/activate-tool``tools/wave-tool` 当前主要依赖:
`tools/activate-tool``tools/mms-mapping``tools/wave-tool` 当前主要依赖:
- `com.njcn:njcn-common`
- `com.njcn:spingboot2.3.12`
@@ -71,4 +93,3 @@ tools/
- 同步更新 `tools/pom.xml`
- 同步更新本说明文档
-`docs` 下补充模块边界与职责说明

122
tools/mms-mapping/pom.xml Normal file
View File

@@ -0,0 +1,122 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.njcn.gather</groupId>
<artifactId>tools</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>mms-mapping</artifactId>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.njcn</groupId>
<artifactId>njcn-common</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>com.njcn</groupId>
<artifactId>spingboot2.3.12</artifactId>
<version>2.3.12</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>2.3.3</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.3</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.docx4j</groupId>
<artifactId>docx4j</artifactId>
<version>6.1.0</version>
</dependency>
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.10.0</version>
</dependency>
</dependencies>
<build>
<finalName>mms-mapping</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@@ -0,0 +1,135 @@
package com.njcn.gather.icd.mapping.application;
import com.njcn.gather.icd.mapping.application.command.GenerateFromIcdCommand;
import com.njcn.gather.icd.mapping.application.result.GenerateMappingResult;
import com.njcn.gather.icd.mapping.domain.model.analysis.IndexAnalysis;
import com.njcn.gather.icd.mapping.domain.model.analysis.ValidationResult;
import com.njcn.gather.icd.mapping.domain.model.icd.IcdDocument;
import com.njcn.gather.icd.mapping.domain.model.mapping.MappingDocument;
import com.njcn.gather.icd.mapping.domain.model.template.DefaultTemplate;
import com.njcn.gather.icd.mapping.domain.service.DefaultTemplateLoader;
import com.njcn.gather.icd.mapping.domain.service.IcdParserService;
import com.njcn.gather.icd.mapping.domain.service.IndexAnalysisService;
import com.njcn.gather.icd.mapping.domain.service.IndexValidationService;
import com.njcn.gather.icd.mapping.domain.service.MappingGenerationService;
import com.njcn.gather.icd.mapping.enums.GenerateStatus;
import com.njcn.gather.icd.mapping.infrastructure.serializer.MappingDocumentSerializer;
import com.njcn.gather.icd.mapping.infrastructure.storage.FileStorageService;
import org.springframework.stereotype.Service;
/**
* 生成任务应用服务。
*
* 完整流程:
* 1. 解析 ICD
* 2. 读取 DefaultCfg.txt
* 3. 按业务分组生成候选项;
* 4. 如果用户未提交绑定关系,返回 NEED_INDEX_SELECTION
* 5. 如果提交了绑定关系,先做合法性校验;
* 6. 校验通过后生成正式 MappingDocument
* 7. 序列化并按需落盘。
*/
@Service
public class MappingTaskAppService {
private final IcdParserService icdParserService;
private final DefaultTemplateLoader defaultTemplateLoader;
private final IndexAnalysisService indexAnalysisService;
private final IndexValidationService indexValidationService;
private final MappingGenerationService mappingGenerationService;
private final MappingDocumentSerializer mappingDocumentSerializer;
private final FileStorageService fileStorageService;
public MappingTaskAppService(IcdParserService icdParserService,
DefaultTemplateLoader defaultTemplateLoader,
IndexAnalysisService indexAnalysisService,
IndexValidationService indexValidationService,
MappingGenerationService mappingGenerationService,
MappingDocumentSerializer mappingDocumentSerializer,
FileStorageService fileStorageService) {
this.icdParserService = icdParserService;
this.defaultTemplateLoader = defaultTemplateLoader;
this.indexAnalysisService = indexAnalysisService;
this.indexValidationService = indexValidationService;
this.mappingGenerationService = mappingGenerationService;
this.mappingDocumentSerializer = mappingDocumentSerializer;
this.fileStorageService = fileStorageService;
}
public GenerateMappingResult generateFromIcd(GenerateFromIcdCommand command) {
GenerateMappingResult result = new GenerateMappingResult();
try {
// 1. 解析 ICD
IcdDocument icdDocument = icdParserService.parse(command.getFileBytes(), command.getFileName());
result.setIedName(icdDocument.getIedName());
result.setLdInst(icdDocument.getLdInst());
// 2. 加载 DefaultCfg.txt
DefaultTemplate template = defaultTemplateLoader.load();
result.getProblems().addAll(template.verify());
// 3. 分析索引候选
IndexAnalysis indexAnalysis = indexAnalysisService.analyze(icdDocument, template);
result.setIndexAnalysis(indexAnalysis);
result.getProblems().addAll(indexAnalysis.getProblems());
// 4. 如果没有提交任何绑定关系,则直接返回待匹配项
if (command.getIndexSelection() == null || command.getIndexSelection().isEmpty()) {
result.setStatus(GenerateStatus.NEED_INDEX_SELECTION);
result.setMessage("索引配置缺失或不合法,请根据候选信息完成标签与数字索引的绑定后重新提交");
return result;
}
// 5. 校验用户提交的绑定关系
ValidationResult validationResult = indexValidationService.validate(indexAnalysis, command.getIndexSelection());
if (!validationResult.isValid()) {
result.setStatus(GenerateStatus.NEED_INDEX_SELECTION);
result.setMessage("索引配置缺失或不合法,请根据候选信息完成标签与数字索引的绑定后重新提交");
result.getProblems().addAll(validationResult.getProblems());
return result;
}
// 6. 生成正式映射结构
MappingDocument mappingDocument = mappingGenerationService.generate(
icdDocument,
template,
indexAnalysis,
command.getIndexSelection(),
command.getVersion(),
command.getAuthor()
);
result.setMappingDocument(mappingDocument);
// 7. 序列化输出
String mappingJson = command.isPrettyJson()
? mappingDocumentSerializer.toPrettyJson(mappingDocument)
: mappingDocumentSerializer.toCompactJson(mappingDocument);
result.setMappingJson(mappingJson);
if (command.isSaveToDisk()) {
String fileName = buildOutputFileName(icdDocument, command.isPrettyJson());
String savedPath = fileStorageService.save(fileName, mappingJson, command.getOutputDir());
result.setSavedPath(savedPath);
}
result.setStatus(GenerateStatus.SUCCESS);
result.setMessage("映射生成成功");
return result;
} catch (Exception ex) {
result.setStatus(GenerateStatus.FAILED);
result.setMessage("映射生成失败:" + ex.getMessage());
result.getProblems().add(ex.getMessage());
return result;
}
}
private String buildOutputFileName(IcdDocument icdDocument, boolean prettyJson) {
String baseName = icdDocument.getIedName() == null ? "mapping" : icdDocument.getIedName();
// 落盘文件名只保留安全字符,避免 IED 名称携带路径分隔符导致越界写入。
String safeBaseName = baseName.replaceAll("[\\\\/:*?\"<>|]+", "_").trim();
if (safeBaseName.isEmpty()) {
safeBaseName = "mapping";
}
return safeBaseName + (prettyJson ? "-mapping-pretty.json" : "-mapping.json");
}
}

View File

@@ -0,0 +1,102 @@
package com.njcn.gather.icd.mapping.application.command;
import java.util.ArrayList;
import java.util.List;
/**
* 生成命令对象。
*
* 说明:
* controller 层不要把 MultipartFile 和 request 直接传进领域服务;
* 统一转成 command便于应用层做流程编排。
*/
public class GenerateFromIcdCommand {
/** 原始文件名。 */
private String fileName;
/** ICD 文件字节数组。 */
private byte[] fileBytes;
/** 输出版本号。 */
private String version;
/** 作者。 */
private String author;
/** 是否保存到磁盘。 */
private boolean saveToDisk;
/** 是否输出美化 JSON。 */
private boolean prettyJson;
/** 输出目录。 */
private String outputDir;
/** 用户上送的索引选择结果。 */
private List<IndexSelectionGroupCommand> indexSelection = new ArrayList<IndexSelectionGroupCommand>();
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public byte[] getFileBytes() {
return fileBytes;
}
public void setFileBytes(byte[] fileBytes) {
this.fileBytes = fileBytes;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public boolean isSaveToDisk() {
return saveToDisk;
}
public void setSaveToDisk(boolean saveToDisk) {
this.saveToDisk = saveToDisk;
}
public boolean isPrettyJson() {
return prettyJson;
}
public void setPrettyJson(boolean prettyJson) {
this.prettyJson = prettyJson;
}
public String getOutputDir() {
return outputDir;
}
public void setOutputDir(String outputDir) {
this.outputDir = outputDir;
}
public List<IndexSelectionGroupCommand> getIndexSelection() {
return indexSelection;
}
public void setIndexSelection(List<IndexSelectionGroupCommand> indexSelection) {
this.indexSelection = indexSelection;
}
}

View File

@@ -0,0 +1,51 @@
package com.njcn.gather.icd.mapping.application.command;
/**
* 应用层单条绑定命令。
*/
public class IndexBindingCommand {
/** 报告名。 */
private String reportName;
/** 数据集名。 */
private String dataSetName;
/** 标签。 */
private String label;
/** 绑定到的 lnInst 数字。 */
private String lnInst;
public String getReportName() {
return reportName;
}
public void setReportName(String reportName) {
this.reportName = reportName;
}
public String getDataSetName() {
return dataSetName;
}
public void setDataSetName(String dataSetName) {
this.dataSetName = dataSetName;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
public String getLnInst() {
return lnInst;
}
public void setLnInst(String lnInst) {
this.lnInst = lnInst;
}
}

View File

@@ -0,0 +1,43 @@
package com.njcn.gather.icd.mapping.application.command;
import java.util.ArrayList;
import java.util.List;
/**
* 应用层分组选择命令。
*/
public class IndexSelectionGroupCommand {
/** 分组唯一键。 */
private String groupKey;
/** 分组中文描述。 */
private String groupDesc;
/** 当前分组下的多条绑定关系。 */
private List<IndexBindingCommand> bindings = new ArrayList<IndexBindingCommand>();
public String getGroupKey() {
return groupKey;
}
public void setGroupKey(String groupKey) {
this.groupKey = groupKey;
}
public String getGroupDesc() {
return groupDesc;
}
public void setGroupDesc(String groupDesc) {
this.groupDesc = groupDesc;
}
public List<IndexBindingCommand> getBindings() {
return bindings;
}
public void setBindings(List<IndexBindingCommand> bindings) {
this.bindings = bindings;
}
}

View File

@@ -0,0 +1,42 @@
package com.njcn.gather.icd.mapping.application.result;
import com.njcn.gather.icd.mapping.domain.model.analysis.IndexAnalysis;
import com.njcn.gather.icd.mapping.domain.model.mapping.MappingDocument;
import com.njcn.gather.icd.mapping.enums.GenerateStatus;
import java.util.ArrayList;
import java.util.List;
/**
* 应用层返回对象。统一封装成功、需要选择索引、失败三类结果。
*/
public class GenerateMappingResult {
private GenerateStatus status;
private String message;
private String iedName;
private String ldInst;
private IndexAnalysis indexAnalysis;
private MappingDocument mappingDocument;
private String mappingJson;
private String savedPath;
private List<String> problems = new ArrayList<String>();
public GenerateStatus getStatus() { return status; }
public void setStatus(GenerateStatus status) { this.status = status; }
public String getMessage() { return message; }
public void setMessage(String message) { this.message = message; }
public String getIedName() { return iedName; }
public void setIedName(String iedName) { this.iedName = iedName; }
public String getLdInst() { return ldInst; }
public void setLdInst(String ldInst) { this.ldInst = ldInst; }
public IndexAnalysis getIndexAnalysis() { return indexAnalysis; }
public void setIndexAnalysis(IndexAnalysis indexAnalysis) { this.indexAnalysis = indexAnalysis; }
public MappingDocument getMappingDocument() { return mappingDocument; }
public void setMappingDocument(MappingDocument mappingDocument) { this.mappingDocument = mappingDocument; }
public String getMappingJson() { return mappingJson; }
public void setMappingJson(String mappingJson) { this.mappingJson = mappingJson; }
public String getSavedPath() { return savedPath; }
public void setSavedPath(String savedPath) { this.savedPath = savedPath; }
public List<String> getProblems() { return problems; }
public void setProblems(List<String> problems) { this.problems = problems; }
}

View File

@@ -0,0 +1,52 @@
package com.njcn.gather.icd.mapping.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* 模块配置。
* 模块配置类。集中管理默认作者、默认模板路径等可配置项。
*
* 说明:
* 1. 这里把模板路径、输出目录、默认作者等集中管理。
* 2. 当前先用 @Value + 默认值,后续你也可以改成 @ConfigurationProperties。
*/
@Component
public class MappingModuleConfig {
/** 默认模板资源路径。 */
@Value("${icd.mapping.default-template-path:template/DefaultCfg.txt}")
private String defaultTemplatePath;
/** 默认作者。 */
@Value("${icd.mapping.default-author:system}")
private String defaultAuthor;
/** 默认输出目录。 */
@Value("${icd.mapping.default-output-dir:}")
private String defaultOutputDir;
public String getDefaultTemplatePath() {
return defaultTemplatePath;
}
public void setDefaultTemplatePath(String defaultTemplatePath) {
this.defaultTemplatePath = defaultTemplatePath;
}
public String getDefaultAuthor() {
return defaultAuthor;
}
public void setDefaultAuthor(String defaultAuthor) {
this.defaultAuthor = defaultAuthor;
}
public String getDefaultOutputDir() {
return defaultOutputDir;
}
public void setDefaultOutputDir(String defaultOutputDir) {
this.defaultOutputDir = defaultOutputDir;
}
}

View File

@@ -0,0 +1,50 @@
package com.njcn.gather.icd.mapping.controller;
import com.njcn.gather.icd.mapping.application.MappingTaskAppService;
import com.njcn.gather.icd.mapping.application.command.GenerateFromIcdCommand;
import com.njcn.gather.icd.mapping.application.result.GenerateMappingResult;
import com.njcn.gather.icd.mapping.controller.request.GenerateMappingFromIcdRequest;
import com.njcn.gather.icd.mapping.controller.response.MappingTaskResponse;
import com.njcn.gather.icd.mapping.converter.MappingRequestConverter;
import com.njcn.gather.icd.mapping.converter.MappingResponseConverter;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
/**
* ICD 映射接口。
*/
@RestController
@RequestMapping("/api/mms-mapping")
public class MappingController {
private final MappingTaskAppService mappingTaskAppService;
private final MappingRequestConverter requestConverter;
private final MappingResponseConverter responseConverter;
public MappingController(MappingTaskAppService mappingTaskAppService,
MappingRequestConverter requestConverter,
MappingResponseConverter responseConverter) {
this.mappingTaskAppService = mappingTaskAppService;
this.requestConverter = requestConverter;
this.responseConverter = responseConverter;
}
/**
* 上传 ICD 并生成映射。
*
* 表单参数:
* 1. icdFileICD 文件
* 2. requestJSON 请求体
*/
@PostMapping(value = "/generate-from-icd", consumes = {"multipart/form-data"})
public MappingTaskResponse generateFromIcd(@RequestPart("icdFile") MultipartFile icdFile,
@Validated @RequestPart("request") GenerateMappingFromIcdRequest request) {
GenerateFromIcdCommand command = requestConverter.toCommand(icdFile, request);
GenerateMappingResult result = mappingTaskAppService.generateFromIcd(command);
return responseConverter.fromResult(result);
}
}

View File

@@ -0,0 +1,89 @@
package com.njcn.gather.icd.mapping.controller.request;
import java.util.ArrayList;
import java.util.List;
/**
* 生成映射接口请求体。
*
* 说明:
* 1. 旧版结构中indexSelection 是 Map<String, String>,只能表达“一个报告对应一个值”,
* 无法表达“一个业务分组下有多个报告、一个报告下又有多条标签绑定”的真实场景。
* 2. 新版结构改成 List<IndexSelectionGroupRequest>,用来完整承载用户在前端完成的绑定结果。
* 3. 第一次只上传 ICD 时,这个字段可以为空;第二次用户确认绑定后再把完整结构上送即可。
*/
public class GenerateMappingFromIcdRequest {
/** 输出版本号。为空时后端默认补 1.0。 */
private String version;
/** 作者。为空时默认空字符串。 */
private String author;
/** 是否保存到磁盘。 */
private boolean saveToDisk;
/** 是否返回美化 JSON。 */
private boolean prettyJson;
/** 输出目录。saveToDisk=true 时才会用到。 */
private String outputDir;
/**
* 索引选择结果。
*
* 说明:
* 1. 每一个元素代表一个“业务分组”,例如:实时数据、统计数据、波动闪变。
* 2. 每个业务分组下面又包含多条绑定关系。
* 3. 允许为空;为空时后端返回 NEED_INDEX_SELECTION给前端候选参考项。
*/
private List<IndexSelectionGroupRequest> indexSelection = new ArrayList<IndexSelectionGroupRequest>();
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public boolean isSaveToDisk() {
return saveToDisk;
}
public void setSaveToDisk(boolean saveToDisk) {
this.saveToDisk = saveToDisk;
}
public boolean isPrettyJson() {
return prettyJson;
}
public void setPrettyJson(boolean prettyJson) {
this.prettyJson = prettyJson;
}
public String getOutputDir() {
return outputDir;
}
public void setOutputDir(String outputDir) {
this.outputDir = outputDir;
}
public List<IndexSelectionGroupRequest> getIndexSelection() {
return indexSelection;
}
public void setIndexSelection(List<IndexSelectionGroupRequest> indexSelection) {
this.indexSelection = indexSelection;
}
}

View File

@@ -0,0 +1,59 @@
package com.njcn.gather.icd.mapping.controller.request;
/**
* 单条索引绑定请求。
*
* 一条绑定只表达一个最小关系:
* 某个报告(reportName)下,使用某个标签(label)与某个 lnInst 数字做绑定。
*
* 这样做的好处:
* 1. 一个报告可以出现多次,对应多个标签。
* 2. 一个业务分组下也可以有多个报告。
* 3. 后端校验、生成映射时都更容易逐条处理。
*/
public class IndexBindingRequest {
/** 绑定发生在哪个报告上例如brcbStHarm。 */
private String reportName;
/** 绑定发生在哪个数据集上例如dsStHarm。 */
private String dataSetName;
/** 业务标签,例如:最大值、最小值、实时数据。 */
private String label;
/** 当前标签最终绑定到的 lnInst 数字例如1、2、8。 */
private String lnInst;
public String getReportName() {
return reportName;
}
public void setReportName(String reportName) {
this.reportName = reportName;
}
public String getDataSetName() {
return dataSetName;
}
public void setDataSetName(String dataSetName) {
this.dataSetName = dataSetName;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
public String getLnInst() {
return lnInst;
}
public void setLnInst(String lnInst) {
this.lnInst = lnInst;
}
}

View File

@@ -0,0 +1,53 @@
package com.njcn.gather.icd.mapping.controller.request;
import java.util.ArrayList;
import java.util.List;
/**
* 单个业务分组的索引选择请求。
*
* 例如:
* - groupKey = REALTIME_DATA
* - groupDesc = 实时数据
* - bindings = 多条“报告 + 标签 + lnInst”的绑定关系
*/
public class IndexSelectionGroupRequest {
/**
* 分组唯一键。
*
* 说明:
* 这个值由后端在 NEED_INDEX_SELECTION 时返回,前端原样带回即可,避免仅靠中文描述做匹配。
*/
private String groupKey;
/** 分组中文描述,例如:实时数据、统计数据。 */
private String groupDesc;
/** 当前业务分组下,用户最终确认的绑定关系。 */
private List<IndexBindingRequest> bindings = new ArrayList<IndexBindingRequest>();
public String getGroupKey() {
return groupKey;
}
public void setGroupKey(String groupKey) {
this.groupKey = groupKey;
}
public String getGroupDesc() {
return groupDesc;
}
public void setGroupDesc(String groupDesc) {
this.groupDesc = groupDesc;
}
public List<IndexBindingRequest> getBindings() {
return bindings;
}
public void setBindings(List<IndexBindingRequest> bindings) {
this.bindings = bindings;
}
}

View File

@@ -0,0 +1,54 @@
package com.njcn.gather.icd.mapping.controller.response;
import java.util.ArrayList;
import java.util.List;
/**
* 索引候选分组下的单个报告响应。
*/
public class IndexCandidateReportItemResponse {
/** 报告名称。 */
private String reportName;
/** 数据集名称。 */
private String dataSetName;
/** 报告描述。 */
private String reportDesc;
/** 当前报告可选的 lnInst 数字。 */
private List<String> availableLnInstValues = new ArrayList<String>();
public String getReportName() {
return reportName;
}
public void setReportName(String reportName) {
this.reportName = reportName;
}
public String getDataSetName() {
return dataSetName;
}
public void setDataSetName(String dataSetName) {
this.dataSetName = dataSetName;
}
public String getReportDesc() {
return reportDesc;
}
public void setReportDesc(String reportDesc) {
this.reportDesc = reportDesc;
}
public List<String> getAvailableLnInstValues() {
return availableLnInstValues;
}
public void setAvailableLnInstValues(List<String> availableLnInstValues) {
this.availableLnInstValues = availableLnInstValues;
}
}

View File

@@ -0,0 +1,71 @@
package com.njcn.gather.icd.mapping.controller.response;
import java.util.ArrayList;
import java.util.List;
/**
* 索引候选返回对象。
*
* 说明:
* 这是给前端“待匹配界面”使用的正式结构:
* - 一个候选就是一个业务分组;
* - 分组下面再挂多个报告;
* - 前端根据 templateLabels 与 reports[*].availableLnInstValues 做人工绑定。
*/
public class IndexCandidateResponse {
/** 分组唯一键。 */
private String groupKey;
/** 分组中文描述。 */
private String groupDesc;
/** 当前分组包含的报告数。 */
private int reportCount;
/** 模板里配置的可选标签。 */
private List<String> templateLabels = new ArrayList<String>();
/** 当前分组下的报告候选列表。 */
private List<IndexCandidateReportItemResponse> reports = new ArrayList<IndexCandidateReportItemResponse>();
public String getGroupKey() {
return groupKey;
}
public void setGroupKey(String groupKey) {
this.groupKey = groupKey;
}
public String getGroupDesc() {
return groupDesc;
}
public void setGroupDesc(String groupDesc) {
this.groupDesc = groupDesc;
}
public int getReportCount() {
return reportCount;
}
public void setReportCount(int reportCount) {
this.reportCount = reportCount;
}
public List<String> getTemplateLabels() {
return templateLabels;
}
public void setTemplateLabels(List<String> templateLabels) {
this.templateLabels = templateLabels;
}
public List<IndexCandidateReportItemResponse> getReports() {
return reports;
}
public void setReports(List<IndexCandidateReportItemResponse> reports) {
this.reports = reports;
}
}

View File

@@ -0,0 +1,26 @@
package com.njcn.gather.icd.mapping.controller.response;
/**
* 映射摘要响应。
* 映射摘要响应 DTO。用于把最终映射的关键信息单独封装返回。
*/
public class MappingDocumentResponse {
private String version;
private String author;
private String ied;
private String ld;
private int reportCount;
private int dataSetCount;
public String getVersion() { return version; }
public void setVersion(String version) { this.version = version; }
public String getAuthor() { return author; }
public void setAuthor(String author) { this.author = author; }
public String getIed() { return ied; }
public void setIed(String ied) { this.ied = ied; }
public String getLd() { return ld; }
public void setLd(String ld) { this.ld = ld; }
public int getReportCount() { return reportCount; }
public void setReportCount(int reportCount) { this.reportCount = reportCount; }
public int getDataSetCount() { return dataSetCount; }
public void setDataSetCount(int dataSetCount) { this.dataSetCount = dataSetCount; }
}

View File

@@ -0,0 +1,40 @@
package com.njcn.gather.icd.mapping.controller.response;
import com.njcn.gather.icd.mapping.enums.GenerateStatus;
import java.util.ArrayList;
import java.util.List;
/**
* 第一个接口统一响应。
* 接口统一响应 DTO。返回生成状态、映射内容、候选索引、问题列表等。
*/
public class MappingTaskResponse {
private GenerateStatus status;
private String message;
private String iedName;
private String ldInst;
private String mappingJson;
private String savedPath;
private MappingDocumentResponse mappingDocument;
private List<IndexCandidateResponse> indexCandidates = new ArrayList<IndexCandidateResponse>();
private List<String> problems = new ArrayList<String>();
public GenerateStatus getStatus() { return status; }
public void setStatus(GenerateStatus status) { this.status = status; }
public String getMessage() { return message; }
public void setMessage(String message) { this.message = message; }
public String getIedName() { return iedName; }
public void setIedName(String iedName) { this.iedName = iedName; }
public String getLdInst() { return ldInst; }
public void setLdInst(String ldInst) { this.ldInst = ldInst; }
public String getMappingJson() { return mappingJson; }
public void setMappingJson(String mappingJson) { this.mappingJson = mappingJson; }
public String getSavedPath() { return savedPath; }
public void setSavedPath(String savedPath) { this.savedPath = savedPath; }
public MappingDocumentResponse getMappingDocument() { return mappingDocument; }
public void setMappingDocument(MappingDocumentResponse mappingDocument) { this.mappingDocument = mappingDocument; }
public List<IndexCandidateResponse> getIndexCandidates() { return indexCandidates; }
public void setIndexCandidates(List<IndexCandidateResponse> indexCandidates) { this.indexCandidates = indexCandidates; }
public List<String> getProblems() { return problems; }
public void setProblems(List<String> problems) { this.problems = problems; }
}

View File

@@ -0,0 +1,82 @@
package com.njcn.gather.icd.mapping.converter;
import com.njcn.gather.icd.mapping.application.command.GenerateFromIcdCommand;
import com.njcn.gather.icd.mapping.application.command.IndexBindingCommand;
import com.njcn.gather.icd.mapping.application.command.IndexSelectionGroupCommand;
import com.njcn.gather.icd.mapping.config.MappingModuleConfig;
import com.njcn.gather.icd.mapping.controller.request.GenerateMappingFromIcdRequest;
import com.njcn.gather.icd.mapping.controller.request.IndexBindingRequest;
import com.njcn.gather.icd.mapping.controller.request.IndexSelectionGroupRequest;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
/**
* 请求转换器。
*
* 作用:
* 1. 把接口层 request 转成应用层 command。
* 2. 统一处理 null 和空集合,避免后面业务层到处判空。
*/
@Component
public class MappingRequestConverter {
private final MappingModuleConfig moduleConfig;
public MappingRequestConverter(MappingModuleConfig moduleConfig) {
this.moduleConfig = moduleConfig;
}
public GenerateFromIcdCommand toCommand(MultipartFile icdFile, GenerateMappingFromIcdRequest request) {
try {
if (icdFile == null || icdFile.isEmpty()) {
throw new IllegalArgumentException("ICD 文件不能为空");
}
GenerateFromIcdCommand command = new GenerateFromIcdCommand();
command.setFileName(icdFile.getOriginalFilename());
command.setFileBytes(icdFile.getBytes());
command.setVersion(request == null ? null : request.getVersion());
command.setAuthor(resolveText(request == null ? null : request.getAuthor(), moduleConfig.getDefaultAuthor()));
command.setSaveToDisk(request != null && request.isSaveToDisk());
command.setPrettyJson(request == null || request.isPrettyJson());
command.setOutputDir(resolveText(request == null ? null : request.getOutputDir(), moduleConfig.getDefaultOutputDir()));
if (request != null && request.getIndexSelection() != null) {
for (IndexSelectionGroupRequest groupRequest : request.getIndexSelection()) {
if (groupRequest == null) {
continue;
}
IndexSelectionGroupCommand groupCommand = new IndexSelectionGroupCommand();
groupCommand.setGroupKey(groupRequest.getGroupKey());
groupCommand.setGroupDesc(groupRequest.getGroupDesc());
if (groupRequest.getBindings() != null) {
for (IndexBindingRequest bindingRequest : groupRequest.getBindings()) {
if (bindingRequest == null) {
continue;
}
IndexBindingCommand bindingCommand = new IndexBindingCommand();
bindingCommand.setReportName(bindingRequest.getReportName());
bindingCommand.setDataSetName(bindingRequest.getDataSetName());
bindingCommand.setLabel(bindingRequest.getLabel());
bindingCommand.setLnInst(bindingRequest.getLnInst());
groupCommand.getBindings().add(bindingCommand);
}
}
command.getIndexSelection().add(groupCommand);
}
}
return command;
} catch (Exception ex) {
throw new IllegalArgumentException("请求转换失败:" + ex.getMessage(), ex);
}
}
private String resolveText(String value, String defaultValue) {
if (value != null && !value.trim().isEmpty()) {
return value.trim();
}
return defaultValue == null ? null : defaultValue.trim();
}
}

View File

@@ -0,0 +1,70 @@
package com.njcn.gather.icd.mapping.converter;
import com.njcn.gather.icd.mapping.application.result.GenerateMappingResult;
import com.njcn.gather.icd.mapping.controller.response.IndexCandidateReportItemResponse;
import com.njcn.gather.icd.mapping.controller.response.IndexCandidateResponse;
import com.njcn.gather.icd.mapping.controller.response.MappingDocumentResponse;
import com.njcn.gather.icd.mapping.controller.response.MappingTaskResponse;
import com.njcn.gather.icd.mapping.domain.model.analysis.IndexCandidate;
import com.njcn.gather.icd.mapping.domain.model.analysis.IndexCandidateReportItem;
import org.springframework.stereotype.Component;
/**
* 响应转换器。
*
* 作用:
* 1. 把应用层结果转换成接口层响应对象;
* 2. 对待匹配索引场景,输出新的“按业务分组返回”的结构。
*/
@Component
public class MappingResponseConverter {
public MappingTaskResponse fromResult(GenerateMappingResult result) {
MappingTaskResponse response = new MappingTaskResponse();
response.setStatus(result.getStatus());
response.setMessage(result.getMessage());
response.setIedName(result.getIedName());
response.setLdInst(result.getLdInst());
response.setMappingJson(result.getMappingJson());
response.setSavedPath(result.getSavedPath());
response.getProblems().addAll(result.getProblems());
if (result.getIndexAnalysis() != null && result.getIndexAnalysis().getCandidates() != null) {
for (IndexCandidate candidate : result.getIndexAnalysis().getCandidates()) {
IndexCandidateResponse candidateResponse = new IndexCandidateResponse();
candidateResponse.setGroupKey(candidate.getGroupKey());
candidateResponse.setGroupDesc(candidate.getGroupDesc());
candidateResponse.setReportCount(candidate.getReportCount());
candidateResponse.getTemplateLabels().addAll(candidate.getTemplateLabels());
if (candidate.getReports() != null) {
for (IndexCandidateReportItem item : candidate.getReports()) {
IndexCandidateReportItemResponse itemResponse = new IndexCandidateReportItemResponse();
itemResponse.setReportName(item.getReportName());
itemResponse.setDataSetName(item.getDataSetName());
itemResponse.setReportDesc(item.getReportDesc());
itemResponse.getAvailableLnInstValues().addAll(item.getAvailableLnInstValues());
candidateResponse.getReports().add(itemResponse);
}
}
response.getIndexCandidates().add(candidateResponse);
}
}
if (result.getMappingDocument() != null) {
MappingDocumentResponse doc = new MappingDocumentResponse();
doc.setVersion(result.getMappingDocument().getVersion());
doc.setAuthor(result.getMappingDocument().getAuthor());
doc.setIed(result.getMappingDocument().getIed());
doc.setLd(result.getMappingDocument().getLd());
doc.setReportCount(result.getMappingDocument().getReportMap() == null
? 0 : result.getMappingDocument().getReportMap().size());
doc.setDataSetCount(result.getMappingDocument().getDataSetList() == null
? 0 : result.getMappingDocument().getDataSetList().size());
response.setMappingDocument(doc);
}
return response;
}
}

View File

@@ -0,0 +1,20 @@
package com.njcn.gather.icd.mapping.domain.model.analysis;
import java.util.ArrayList;
import java.util.List;
/**
* 索引分析结果。
* 索引分析结果模型。保存每个报告可选的 lnInst 候选列表及问题清单。
*
* key = reportName
*/
public class IndexAnalysis {
private List<IndexCandidate> candidates = new ArrayList<IndexCandidate>();
private List<String> problems = new ArrayList<String>();
public List<IndexCandidate> getCandidates() { return candidates; }
public void setCandidates(List<IndexCandidate> candidates) { this.candidates = candidates; }
public List<String> getProblems() { return problems; }
public void setProblems(List<String> problems) { this.problems = problems; }
}

View File

@@ -0,0 +1,113 @@
package com.njcn.gather.icd.mapping.domain.model.analysis;
import java.util.ArrayList;
import java.util.List;
/**
* 索引候选分组。
*
* 说明:
* 1. 一条候选对应一个业务分组,例如:统计数据、实时数据;
* 2. 一个业务分组下可以包含多个报告;
* 3. 这里不仅保存返回给前端的候选项,也保存从 DefaultCfg.ReportList 带下来的配置项,
* 供后续 MappingGenerationService 直接使用,避免“二次查模板”失败。
*/
public class IndexCandidate {
/** 分组唯一键。 */
private String groupKey;
/** 分组描述。 */
private String groupDesc;
/** 该分组下实际匹配到的报告数量。 */
private int reportCount;
/** DefaultCfg.txt 中该分组可用的标签模板。 */
private List<String> templateLabels = new ArrayList<String>();
/** 当前分组下匹配到的报告列表。 */
private List<IndexCandidateReportItem> reports = new ArrayList<IndexCandidateReportItem>();
/**
* DefaultCfg.ReportList.inst
* 例如01 / 02 / 03 / 04
*/
private String reportInst;
/**
* DefaultCfg.ReportList.Select
* 例如DataStatFileMap / DataRealFileMap / FlickerFileMap
*/
private String select;
/**
* DefaultCfg.ReportList.TrgOps
* 例如40 / 96
*/
private String trgOps;
public String getGroupKey() {
return groupKey;
}
public void setGroupKey(String groupKey) {
this.groupKey = groupKey;
}
public String getGroupDesc() {
return groupDesc;
}
public void setGroupDesc(String groupDesc) {
this.groupDesc = groupDesc;
}
public int getReportCount() {
return reportCount;
}
public void setReportCount(int reportCount) {
this.reportCount = reportCount;
}
public List<String> getTemplateLabels() {
return templateLabels;
}
public void setTemplateLabels(List<String> templateLabels) {
this.templateLabels = templateLabels;
}
public List<IndexCandidateReportItem> getReports() {
return reports;
}
public void setReports(List<IndexCandidateReportItem> reports) {
this.reports = reports;
}
public String getReportInst() {
return reportInst;
}
public void setReportInst(String reportInst) {
this.reportInst = reportInst;
}
public String getSelect() {
return select;
}
public void setSelect(String select) {
this.select = select;
}
public String getTrgOps() {
return trgOps;
}
public void setTrgOps(String trgOps) {
this.trgOps = trgOps;
}
}

View File

@@ -0,0 +1,56 @@
package com.njcn.gather.icd.mapping.domain.model.analysis;
import java.util.ArrayList;
import java.util.List;
/**
* 候选分组下的单个报告项。
*
* 这个对象专门给前端展示“这个分组下面有哪些报告,以及每个报告对应哪些可用 lnInst 数字”。
*/
public class IndexCandidateReportItem {
/** 报告名称。 */
private String reportName;
/** 数据集名称。 */
private String dataSetName;
/** 报告中文描述。一般和分组描述相同,保留它是为了前端渲染更灵活。 */
private String reportDesc;
/** 当前报告在 ICD 中解析出来的所有可选 lnInst 数字。 */
private List<String> availableLnInstValues = new ArrayList<String>();
public String getReportName() {
return reportName;
}
public void setReportName(String reportName) {
this.reportName = reportName;
}
public String getDataSetName() {
return dataSetName;
}
public void setDataSetName(String dataSetName) {
this.dataSetName = dataSetName;
}
public String getReportDesc() {
return reportDesc;
}
public void setReportDesc(String reportDesc) {
this.reportDesc = reportDesc;
}
public List<String> getAvailableLnInstValues() {
return availableLnInstValues;
}
public void setAvailableLnInstValues(List<String> availableLnInstValues) {
this.availableLnInstValues = availableLnInstValues;
}
}

View File

@@ -0,0 +1,18 @@
package com.njcn.gather.icd.mapping.domain.model.analysis;
import java.util.ArrayList;
import java.util.List;
/**
* 校验结果。
* 索引校验结果模型。保存是否通过以及问题列表。
*/
public class ValidationResult {
private boolean valid;
private List<String> problems = new ArrayList<String>();
public boolean isValid() { return valid; }
public void setValid(boolean valid) { this.valid = valid; }
public List<String> getProblems() { return problems; }
public void setProblems(List<String> problems) { this.problems = problems; }
}

View File

@@ -0,0 +1,17 @@
package com.njcn.gather.icd.mapping.domain.model.icd;
import java.util.ArrayList;
import java.util.List;
/**
* DataSet 节点。
* 数据集模型。用于承接 DataSet 下的 FCDA 列表。
*/
public class DataSetNode {
private String name;
private List<FcdaNode> fcdas = new ArrayList<FcdaNode>();
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public List<FcdaNode> getFcdas() { return fcdas; }
public void setFcdas(List<FcdaNode> fcdas) { this.fcdas = fcdas; }
}

View File

@@ -0,0 +1,31 @@
package com.njcn.gather.icd.mapping.domain.model.icd;
import java.util.ArrayList;
import java.util.List;
/**
* DOI/SDI/DAI 统一节点。
* DOI/SDI/DAI 细项模型。用于递归承接 DOI 树明细。
*
* kind 常见值:
* - SDI
* - DAI
*/
public class DoiElementNode {
private String kind;
private String name;
private Long ix;
private List<String> values = new ArrayList<String>();
private List<DoiElementNode> children = new ArrayList<DoiElementNode>();
public String getKind() { return kind; }
public void setKind(String kind) { this.kind = kind; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public Long getIx() { return ix; }
public void setIx(Long ix) { this.ix = ix; }
public List<String> getValues() { return values; }
public void setValues(List<String> values) { this.values = values; }
public List<DoiElementNode> getChildren() { return children; }
public void setChildren(List<DoiElementNode> children) { this.children = children; }
}

View File

@@ -0,0 +1,30 @@
package com.njcn.gather.icd.mapping.domain.model.icd;
import java.util.ArrayList;
import java.util.List;
/**
* DOI 节点。
* DOI 模型。表示逻辑节点下的一个数据对象节点。
*/
public class DoiNode {
private String name;
private Long ix;
private String lnClass;
private String lnInst;
private int sequenceCount;
private List<DoiElementNode> children = new ArrayList<DoiElementNode>();
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public Long getIx() { return ix; }
public void setIx(Long ix) { this.ix = ix; }
public String getLnClass() { return lnClass; }
public void setLnClass(String lnClass) { this.lnClass = lnClass; }
public String getLnInst() { return lnInst; }
public void setLnInst(String lnInst) { this.lnInst = lnInst; }
public int getSequenceCount() { return sequenceCount; }
public void setSequenceCount(int sequenceCount) { this.sequenceCount = sequenceCount; }
public List<DoiElementNode> getChildren() { return children; }
public void setChildren(List<DoiElementNode> children) { this.children = children; }
}

View File

@@ -0,0 +1,36 @@
package com.njcn.gather.icd.mapping.domain.model.icd;
/**
* FCDA 节点。
* FCDA 模型。保存 lnClass、lnInst、doName、daName、fc、ix 等信息。
*/
public class FcdaNode {
private String ldInst;
private String prefix;
private String lnClass;
private String lnInst;
private String doName;
private String daName;
private String fc;
private Long ix;
private int sequenceCount;
public String getLdInst() { return ldInst; }
public void setLdInst(String ldInst) { this.ldInst = ldInst; }
public String getPrefix() { return prefix; }
public void setPrefix(String prefix) { this.prefix = prefix; }
public String getLnClass() { return lnClass; }
public void setLnClass(String lnClass) { this.lnClass = lnClass; }
public String getLnInst() { return lnInst; }
public void setLnInst(String lnInst) { this.lnInst = lnInst; }
public String getDoName() { return doName; }
public void setDoName(String doName) { this.doName = doName; }
public String getDaName() { return daName; }
public void setDaName(String daName) { this.daName = daName; }
public String getFc() { return fc; }
public void setFc(String fc) { this.fc = fc; }
public Long getIx() { return ix; }
public void setIx(Long ix) { this.ix = ix; }
public int getSequenceCount() { return sequenceCount; }
public void setSequenceCount(int sequenceCount) { this.sequenceCount = sequenceCount; }
}

View File

@@ -0,0 +1,46 @@
package com.njcn.gather.icd.mapping.domain.model.icd;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* ICD 文档聚合根。
* ICD 统一领域模型的聚合根。承接 IED、LDevice、ReportControl、DataSet、LN 等解析结果。
*
* 说明:
* 1. 这是系统内部统一的 ICD 模型。
* 2. 外部 JAXB generated 类只在 parser 层使用。
* 3. 业务层全部依赖这个标准化模型,便于后续替换解析实现。
*/
public class IcdDocument {
private String fileName;
private String iedName;
private String ldInst;
private String ldPrefix;
private IedNode primaryIed;
private LogicalDeviceNode logicalDevice;
private List<LnNode> logicalNodes = new ArrayList<LnNode>();
private List<ReportControlNode> reportControls = new ArrayList<ReportControlNode>();
private Map<String, DataSetNode> dataSets = new LinkedHashMap<String, DataSetNode>();
public String getFileName() { return fileName; }
public void setFileName(String fileName) { this.fileName = fileName; }
public String getIedName() { return iedName; }
public void setIedName(String iedName) { this.iedName = iedName; }
public String getLdInst() { return ldInst; }
public void setLdInst(String ldInst) { this.ldInst = ldInst; }
public String getLdPrefix() { return ldPrefix; }
public void setLdPrefix(String ldPrefix) { this.ldPrefix = ldPrefix; }
public IedNode getPrimaryIed() { return primaryIed; }
public void setPrimaryIed(IedNode primaryIed) { this.primaryIed = primaryIed; }
public LogicalDeviceNode getLogicalDevice() { return logicalDevice; }
public void setLogicalDevice(LogicalDeviceNode logicalDevice) { this.logicalDevice = logicalDevice; }
public List<LnNode> getLogicalNodes() { return logicalNodes; }
public void setLogicalNodes(List<LnNode> logicalNodes) { this.logicalNodes = logicalNodes; }
public List<ReportControlNode> getReportControls() { return reportControls; }
public void setReportControls(List<ReportControlNode> reportControls) { this.reportControls = reportControls; }
public Map<String, DataSetNode> getDataSets() { return dataSets; }
public void setDataSets(Map<String, DataSetNode> dataSets) { this.dataSets = dataSets; }
}

View File

@@ -0,0 +1,20 @@
package com.njcn.gather.icd.mapping.domain.model.icd;
import java.util.ArrayList;
import java.util.List;
/**
* IED 节点。
* IED 节点模型。保存 IED 名称以及其下逻辑设备引用。
*/
public class IedNode {
private String name;
private List<String> accessPointNames = new ArrayList<String>();
private List<String> lDeviceInstList = new ArrayList<String>();
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public List<String> getAccessPointNames() { return accessPointNames; }
public void setAccessPointNames(List<String> accessPointNames) { this.accessPointNames = accessPointNames; }
public List<String> getLDeviceInstList() { return lDeviceInstList; }
public void setLDeviceInstList(List<String> lDeviceInstList) { this.lDeviceInstList = lDeviceInstList; }
}

View File

@@ -0,0 +1,32 @@
package com.njcn.gather.icd.mapping.domain.model.icd;
import java.util.ArrayList;
import java.util.List;
/**
* 逻辑节点。
* 逻辑节点模型。保存 lnClass、lnInst、prefix、DOI 等信息。
*
* LN0 和 LN 最终都统一抽象为这个模型。
*/
public class LnNode {
private boolean ln0;
private String prefix;
private String lnClass;
private String lnInst;
private String lnType;
private List<DoiNode> doiList = new ArrayList<DoiNode>();
public boolean isLn0() { return ln0; }
public void setLn0(boolean ln0) { this.ln0 = ln0; }
public String getPrefix() { return prefix; }
public void setPrefix(String prefix) { this.prefix = prefix; }
public String getLnClass() { return lnClass; }
public void setLnClass(String lnClass) { this.lnClass = lnClass; }
public String getLnInst() { return lnInst; }
public void setLnInst(String lnInst) { this.lnInst = lnInst; }
public String getLnType() { return lnType; }
public void setLnType(String lnType) { this.lnType = lnType; }
public List<DoiNode> getDoiList() { return doiList; }
public void setDoiList(List<DoiNode> doiList) { this.doiList = doiList; }
}

View File

@@ -0,0 +1,14 @@
package com.njcn.gather.icd.mapping.domain.model.icd;
/**
* 逻辑设备节点。
* 逻辑设备模型。保存 inst、prefix 以及其下 LN/LN0 列表。
*/
public class LogicalDeviceNode {
private String inst;
private String ldName;
public String getInst() { return inst; }
public void setInst(String inst) { this.inst = inst; }
public String getLdName() { return ldName; }
public void setLdName(String ldName) { this.ldName = ldName; }
}

View File

@@ -0,0 +1,29 @@
package com.njcn.gather.icd.mapping.domain.model.icd;
/**
* ReportControl 节点。
* 报告控制块模型。用于保存报告名称、关联 DataSet、缓冲属性等。
*/
public class ReportControlNode {
private String name;
private String rptId;
private boolean buffered;
private String dataSetName;
private String trgOps;
private String confRev;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getRptId() { return rptId; }
public void setRptId(String rptId) { this.rptId = rptId; }
public boolean isBuffered() { return buffered; }
public void setBuffered(boolean buffered) { this.buffered = buffered; }
public String getDataSetName() { return dataSetName; }
public void setDataSetName(String dataSetName) { this.dataSetName = dataSetName; }
public String getTrgOps() { return trgOps; }
public void setTrgOps(String trgOps) { this.trgOps = trgOps; }
public String getConfRev() { return confRev; }
public void setConfRev(String confRev) { this.confRev = confRev; }
public Boolean getBuffered() { return buffered; }
public void setBuffered(Boolean buffered) { this.buffered = buffered; }
}

View File

@@ -0,0 +1,103 @@
package com.njcn.gather.icd.mapping.domain.model.intermediate;
import com.njcn.gather.icd.mapping.domain.model.icd.LnNode;
import java.util.ArrayList;
import java.util.List;
/**
* 最终参与生成 DataSetList 的选择状态。
*
* 关键修正:
* 旧版本一个绑定只保存一个 LnNode导致
* - MSQI 整组丢失
* - MHAI 只生成一半
*
* 新版本改成:
* 一个绑定可以关联多个 LnNode后续生成阶段再逐个展开。
*/
public class DataSetSelectionState {
/** 所属分组 key。 */
private String groupKey;
/** 所属分组 desc。 */
private String groupDesc;
/** 报告名。 */
private String reportName;
/** 数据集名。 */
private String dataSetName;
/** 绑定标签。 */
private String label;
/** 绑定的 lnInst。 */
private String lnInst;
/**
* 当前绑定最终命中的 LN 节点列表。
*
* 说明:
* 同一个 lnInst 在不同 lnClass 下可能都需要展开,
* 例如MMXU / MSQI / MHAI。
*/
private List<LnNode> lnNodes = new ArrayList<LnNode>();
public String getGroupKey() {
return groupKey;
}
public void setGroupKey(String groupKey) {
this.groupKey = groupKey;
}
public String getGroupDesc() {
return groupDesc;
}
public void setGroupDesc(String groupDesc) {
this.groupDesc = groupDesc;
}
public String getReportName() {
return reportName;
}
public void setReportName(String reportName) {
this.reportName = reportName;
}
public String getDataSetName() {
return dataSetName;
}
public void setDataSetName(String dataSetName) {
this.dataSetName = dataSetName;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
public String getLnInst() {
return lnInst;
}
public void setLnInst(String lnInst) {
this.lnInst = lnInst;
}
public List<LnNode> getLnNodes() {
return lnNodes;
}
public void setLnNodes(List<LnNode> lnNodes) {
this.lnNodes = lnNodes;
}
}

View File

@@ -0,0 +1,59 @@
package com.njcn.gather.icd.mapping.domain.model.intermediate;
import java.util.ArrayList;
import java.util.List;
/**
* 中间态总对象。
*
* 作用:
* 1. 对应原 C# 里“先形成中间态,再做最终 JSON 组装”的思路;
* 2. 把业务分组、用户绑定、最终 DataSet 选择结果集中保存;
* 3. 避免在 MappingGenerationService 里直接边遍历边拼 JSON便于后续扩展和排查。
*/
public class ReportAndDataSetState {
/** IED 名称。 */
private String iedName;
/** LD 实例名。 */
private String ldInst;
/** 分组状态列表。 */
private List<ReportGroupState> reportGroups = new ArrayList<ReportGroupState>();
/** 数据集选择状态列表。 */
private List<DataSetSelectionState> dataSetSelections = new ArrayList<DataSetSelectionState>();
public String getIedName() {
return iedName;
}
public void setIedName(String iedName) {
this.iedName = iedName;
}
public String getLdInst() {
return ldInst;
}
public void setLdInst(String ldInst) {
this.ldInst = ldInst;
}
public List<ReportGroupState> getReportGroups() {
return reportGroups;
}
public void setReportGroups(List<ReportGroupState> reportGroups) {
this.reportGroups = reportGroups;
}
public List<DataSetSelectionState> getDataSetSelections() {
return dataSetSelections;
}
public void setDataSetSelections(List<DataSetSelectionState> dataSetSelections) {
this.dataSetSelections = dataSetSelections;
}
}

View File

@@ -0,0 +1,73 @@
package com.njcn.gather.icd.mapping.domain.model.intermediate;
/**
* 单条最终有效绑定关系的中间态。
*/
public class ReportBindingState {
/** 分组 key。 */
private String groupKey;
/** 分组描述。 */
private String groupDesc;
/** 报告名。 */
private String reportName;
/** 数据集名。 */
private String dataSetName;
/** 标签。 */
private String label;
/** 绑定的 lnInst 数字。 */
private String lnInst;
public String getGroupKey() {
return groupKey;
}
public void setGroupKey(String groupKey) {
this.groupKey = groupKey;
}
public String getGroupDesc() {
return groupDesc;
}
public void setGroupDesc(String groupDesc) {
this.groupDesc = groupDesc;
}
public String getReportName() {
return reportName;
}
public void setReportName(String reportName) {
this.reportName = reportName;
}
public String getDataSetName() {
return dataSetName;
}
public void setDataSetName(String dataSetName) {
this.dataSetName = dataSetName;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
public String getLnInst() {
return lnInst;
}
public void setLnInst(String lnInst) {
this.lnInst = lnInst;
}
}

View File

@@ -0,0 +1,100 @@
package com.njcn.gather.icd.mapping.domain.model.intermediate;
import com.njcn.gather.icd.mapping.domain.model.analysis.IndexCandidateReportItem;
import java.util.ArrayList;
import java.util.List;
/**
* 单个业务分组的中间态。
*/
public class ReportGroupState {
/** 分组唯一键。 */
private String groupKey;
/** 分组描述。 */
private String groupDesc;
/** 当前分组匹配到的报告数量。 */
private int reportCount;
/** 报表 inst来自 DefaultCfg.ReportList.inst。 */
private String reportInst;
/** Select来自 DefaultCfg.ReportList.Select。 */
private String select;
/** TrgOps来自 DefaultCfg.ReportList.TrgOps。 */
private String trgOps;
/** 当前分组包含的报告列表。 */
private List<IndexCandidateReportItem> reportItems = new ArrayList<IndexCandidateReportItem>();
/** 用户最终确认的绑定关系。 */
private List<ReportBindingState> bindings = new ArrayList<ReportBindingState>();
public String getGroupKey() {
return groupKey;
}
public void setGroupKey(String groupKey) {
this.groupKey = groupKey;
}
public String getGroupDesc() {
return groupDesc;
}
public void setGroupDesc(String groupDesc) {
this.groupDesc = groupDesc;
}
public int getReportCount() {
return reportCount;
}
public void setReportCount(int reportCount) {
this.reportCount = reportCount;
}
public String getReportInst() {
return reportInst;
}
public void setReportInst(String reportInst) {
this.reportInst = reportInst;
}
public String getSelect() {
return select;
}
public void setSelect(String select) {
this.select = select;
}
public String getTrgOps() {
return trgOps;
}
public void setTrgOps(String trgOps) {
this.trgOps = trgOps;
}
public List<IndexCandidateReportItem> getReportItems() {
return reportItems;
}
public void setReportItems(List<IndexCandidateReportItem> reportItems) {
this.reportItems = reportItems;
}
public List<ReportBindingState> getBindings() {
return bindings;
}
public void setBindings(List<ReportBindingState> bindings) {
this.bindings = bindings;
}
}

View File

@@ -0,0 +1,43 @@
package com.njcn.gather.icd.mapping.domain.model.mapping;
import java.util.ArrayList;
import java.util.List;
/**
* 最终映射中的 DataSetList 单项。
*/
public class DataSetGroupItem {
/** 分组描述。一般来自 LnClassList.desc。 */
private String desc;
/** lnClass。 */
private String lnClass;
/** 该 lnClass 下的 inst 列表。 */
private List<InstItem> instList = new ArrayList<InstItem>();
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getLnClass() {
return lnClass;
}
public void setLnClass(String lnClass) {
this.lnClass = lnClass;
}
public List<InstItem> getInstList() {
return instList;
}
public void setInstList(List<InstItem> instList) {
this.instList = instList;
}
}

View File

@@ -0,0 +1,120 @@
package com.njcn.gather.icd.mapping.domain.model.mapping;
import java.util.ArrayList;
import java.util.List;
/**
* 最终映射中的 doiList 单项。
*/
public class DoiItem {
/** DOI 名称。 */
private String name;
/** DOI 描述。 */
private String desc;
/** 起始序号。 */
private int start;
/** 结束序号。 */
private int end;
/** 单位。 */
private String unit;
/** 系数。 */
private float coefficient;
/** 基波标志。 */
private int baseflag;
/** 基波数量。 */
private int basecount;
/** ICD 实际序列数。 */
private int icdcout;
/** SDI 列表。 */
private List<SdiItem> sdiList = new ArrayList<SdiItem>();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public int getStart() {
return start;
}
public void setStart(int start) {
this.start = start;
}
public int getEnd() {
return end;
}
public void setEnd(int end) {
this.end = end;
}
public String getUnit() {
return unit;
}
public void setUnit(String unit) {
this.unit = unit;
}
public float getCoefficient() {
return coefficient;
}
public void setCoefficient(float coefficient) {
this.coefficient = coefficient;
}
public int getBaseflag() {
return baseflag;
}
public void setBaseflag(int baseflag) {
this.baseflag = baseflag;
}
public int getBasecount() {
return basecount;
}
public void setBasecount(int basecount) {
this.basecount = basecount;
}
public int getIcdcout() {
return icdcout;
}
public void setIcdcout(int icdcout) {
this.icdcout = icdcout;
}
public List<SdiItem> getSdiList() {
return sdiList;
}
public void setSdiList(List<SdiItem> sdiList) {
this.sdiList = sdiList;
}
}

View File

@@ -0,0 +1,43 @@
package com.njcn.gather.icd.mapping.domain.model.mapping;
import java.util.ArrayList;
import java.util.List;
/**
* 最终映射中的 instList 单项。
*/
public class InstItem {
/** lnInst。 */
private String inst;
/** 该 inst 的描述。通常使用当前绑定的 label。 */
private String desc;
/** DOI 列表。 */
private List<DoiItem> doiList = new ArrayList<DoiItem>();
public String getInst() {
return inst;
}
public void setInst(String inst) {
this.inst = inst;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public List<DoiItem> getDoiList() {
return doiList;
}
public void setDoiList(List<DoiItem> doiList) {
this.doiList = doiList;
}
}

View File

@@ -0,0 +1,127 @@
package com.njcn.gather.icd.mapping.domain.model.mapping;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.ArrayList;
import java.util.List;
/**
* 最终映射文档。
*
* 关键说明:
* 1. Java 字段统一使用 lowerCamelCase避免 Jackson 同时输出 ied/IED 这类重复字段。
* 2. JSON 输出名通过 @JsonProperty 显式指定,确保与原 C# 输出格式一致。
*/
public class MappingDocument {
@JsonProperty("version")
private String version;
@JsonProperty("author")
private String author;
@JsonProperty("IED")
private String ied;
@JsonProperty("LD")
private String ld;
/**
* 原 C# mainFrom.txt 固定调用:
* Set_WaveTimeFlag("BeiJing")
*/
@JsonProperty("WaveTimeFlag")
private String waveTimeFlag;
/**
* 原 C# mainFrom.txt 固定调用:
* Set_DataType("1")
*/
@JsonProperty("DataType")
private String dataType;
/**
* 原 C# mainFrom.txt 固定调用:
* Set_unit("1")
*/
@JsonProperty("unit")
private String unit;
@JsonProperty("ReportMap")
private List<ReportMapItem> reportMap = new ArrayList<ReportMapItem>();
@JsonProperty("DataSetList")
private List<DataSetGroupItem> dataSetList = new ArrayList<DataSetGroupItem>();
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getIed() {
return ied;
}
public void setIed(String ied) {
this.ied = ied;
}
public String getLd() {
return ld;
}
public void setLd(String ld) {
this.ld = ld;
}
public String getWaveTimeFlag() {
return waveTimeFlag;
}
public void setWaveTimeFlag(String waveTimeFlag) {
this.waveTimeFlag = waveTimeFlag;
}
public String getDataType() {
return dataType;
}
public void setDataType(String dataType) {
this.dataType = dataType;
}
public String getUnit() {
return unit;
}
public void setUnit(String unit) {
this.unit = unit;
}
public List<ReportMapItem> getReportMap() {
return reportMap;
}
public void setReportMap(List<ReportMapItem> reportMap) {
this.reportMap = reportMap;
}
public List<DataSetGroupItem> getDataSetList() {
return dataSetList;
}
public void setDataSetList(List<DataSetGroupItem> dataSetList) {
this.dataSetList = dataSetList;
}
}

View File

@@ -0,0 +1,124 @@
package com.njcn.gather.icd.mapping.domain.model.mapping;
import com.fasterxml.jackson.annotation.JsonProperty;
/**
* 最终映射中的 ReportMap 单项。
*
* 关键说明:
* 1. 原 C# 不是把同组报告合并成一条,而是组内每个报告各自输出一条。
* 2. 但 reportCount 仍然写该分组总数。
* 3. buffered 不是 boolean而是
* - true -> BR
* - false -> RP
*/
public class ReportMapItem {
@JsonProperty("desc")
private String desc;
@JsonProperty("reportCount")
private int reportCount;
@JsonProperty("rptID")
private String rptId;
@JsonProperty("name")
private String name;
@JsonProperty("buffered")
private String buffered;
@JsonProperty("inst")
private String inst;
/**
* 原 C# Set_FlickerFlag() 当前固定写 "0"
*/
@JsonProperty("FlickerFlag")
private String flickerFlag;
/**
* 原 C# 来自 DefaultCfg.ReportList.Select
*/
@JsonProperty("Select")
private String select;
/**
* 原 C# 来自 DefaultCfg.ReportList.TrgOps
*/
@JsonProperty("TrgOps")
private String trgOps;
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public int getReportCount() {
return reportCount;
}
public void setReportCount(int reportCount) {
this.reportCount = reportCount;
}
public String getRptId() {
return rptId;
}
public void setRptId(String rptId) {
this.rptId = rptId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getBuffered() {
return buffered;
}
public void setBuffered(String buffered) {
this.buffered = buffered;
}
public String getInst() {
return inst;
}
public void setInst(String inst) {
this.inst = inst;
}
public String getFlickerFlag() {
return flickerFlag;
}
public void setFlickerFlag(String flickerFlag) {
this.flickerFlag = flickerFlag;
}
public String getSelect() {
return select;
}
public void setSelect(String select) {
this.select = select;
}
public String getTrgOps() {
return trgOps;
}
public void setTrgOps(String trgOps) {
this.trgOps = trgOps;
}
}

View File

@@ -0,0 +1,43 @@
package com.njcn.gather.icd.mapping.domain.model.mapping;
import java.util.ArrayList;
import java.util.List;
/**
* 最终映射中的 sdiList 单项。
*/
public class SdiItem {
/** SDI 名称。 */
private String name;
/** SDI 描述。 */
private String desc;
/** 类型列表。 */
private List<TypeItem> typeList = new ArrayList<TypeItem>();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public List<TypeItem> getTypeList() {
return typeList;
}
public void setTypeList(List<TypeItem> typeList) {
this.typeList = typeList;
}
}

View File

@@ -0,0 +1,29 @@
package com.njcn.gather.icd.mapping.domain.model.mapping;
/**
* 最终映射中的 typeList 单项。
*/
public class TypeItem {
/** 类型名称。 */
private String name;
/** 类型描述。 */
private String desc;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}

View File

@@ -0,0 +1,345 @@
package com.njcn.gather.icd.mapping.domain.model.template;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* 默认模板。
* 默认模板模型。把 default-template.json 解析成可直接使用的对象。
*
* 当前只保留第一个接口真正会用到的部分。
*/
@JsonIgnoreProperties(ignoreUnknown = true)
public class DefaultTemplate {
@JsonProperty("ReportList")
private List<ReportCfgItem> reportList = new ArrayList<ReportCfgItem>();
@JsonProperty("LnClassList")
private List<LnClassCfgItem> lnClassList = new ArrayList<LnClassCfgItem>();
@JsonProperty("PhaseList")
private List<PhaseCfgItem> phaseList = new ArrayList<PhaseCfgItem>();
@JsonProperty("MultiplierList")
private List<MultiplierCfgItem> multiplierList = new ArrayList<MultiplierCfgItem>();
@JsonProperty("UnitList")
private List<UnitCfgItem> unitList = new ArrayList<UnitCfgItem>();
@JsonProperty("TypeList")
private List<TypeCfgItem> typeList = new ArrayList<TypeCfgItem>();
@JsonProperty("DataObjectsList")
private List<DataObjectCfgItem> dataObjectsList = new ArrayList<DataObjectCfgItem>();
/**
* 基础校验。
*
* 返回问题列表;为空表示通过。
*/
public List<String> verify() {
List<String> problems = new ArrayList<String>();
ensureDuplicateNames("LnClassList", extractNames(lnClassList), problems);
ensureDuplicateNames("PhaseList", extractNames(phaseList), problems);
ensureDuplicateNames("MultiplierList", extractNames(multiplierList), problems);
ensureDuplicateNames("UnitList", extractNames(unitList), problems);
ensureDuplicateNames("TypeList", extractNames(typeList), problems);
ensureDuplicateObjectNames(problems);
if (reportList == null || reportList.isEmpty()) {
problems.add("DefaultCfg.ReportList 为空");
}
return problems;
}
private List<String> extractNames(List<? extends NameListSupport> list) {
List<String> names = new ArrayList<String>();
if (list == null) {
return names;
}
for (NameListSupport item : list) {
if (item.getNameList() != null) {
names.addAll(item.getNameList());
}
}
return names;
}
private void ensureDuplicateNames(String section, List<String> names, List<String> problems) {
Set<String> set = new HashSet<String>();
for (String name : names) {
if (name == null) {
continue;
}
String key = name.trim();
if (!set.add(key)) {
problems.add(section + " 中存在重复配置项:" + key);
}
}
}
private void ensureDuplicateObjectNames(List<String> problems) {
if (dataObjectsList == null) {
return;
}
for (DataObjectCfgItem dataObject : dataObjectsList) {
List<String> names = new ArrayList<String>();
if (dataObject.getObjectList() != null) {
for (ObjectCfgItem object : dataObject.getObjectList()) {
if (object.getNameList() != null) {
names.addAll(object.getNameList());
}
}
}
ensureDuplicateNames("DataObjectsList[" + dataObject.getDesc() + "]", names, problems);
}
}
public List<ReportCfgItem> getReportList() {
return reportList;
}
public void setReportList(List<ReportCfgItem> reportList) {
this.reportList = reportList;
}
public List<LnClassCfgItem> getLnClassList() {
return lnClassList;
}
public void setLnClassList(List<LnClassCfgItem> lnClassList) {
this.lnClassList = lnClassList;
}
public List<PhaseCfgItem> getPhaseList() {
return phaseList;
}
public void setPhaseList(List<PhaseCfgItem> phaseList) {
this.phaseList = phaseList;
}
public List<MultiplierCfgItem> getMultiplierList() {
return multiplierList;
}
public void setMultiplierList(List<MultiplierCfgItem> multiplierList) {
this.multiplierList = multiplierList;
}
public List<UnitCfgItem> getUnitList() {
return unitList;
}
public void setUnitList(List<UnitCfgItem> unitList) {
this.unitList = unitList;
}
public List<TypeCfgItem> getTypeList() {
return typeList;
}
public void setTypeList(List<TypeCfgItem> typeList) {
this.typeList = typeList;
}
public List<DataObjectCfgItem> getDataObjectsList() {
return dataObjectsList;
}
public void setDataObjectsList(List<DataObjectCfgItem> dataObjectsList) {
this.dataObjectsList = dataObjectsList;
}
/** 统一抽象:凡是有 nameList 的配置项都实现它。 */
public interface NameListSupport {
List<String> getNameList();
}
@JsonIgnoreProperties(ignoreUnknown = true)
public static class ReportCfgItem {
/**
* 报告分组描述,例如:统计数据、实时数据、波动闪变
*/
@JsonProperty("desc")
private String desc;
/**
* 报告 inst例如01
*/
@JsonProperty("inst")
private String inst;
/**
* 原始配置中的 TrgOps。
* 例如40 / 96
*
* 这里必须显式加 @JsonProperty("TrgOps")
* 否则在当前项目里很容易反序列化后为 null。
*/
@JsonProperty("TrgOps")
private String trgOps;
/**
* 原始配置中的 Select。
* 例如DataStatFileMap / DataRealFileMap / FlickerFileMap
*
* 这里必须显式加 @JsonProperty("Select")
* 否则在当前项目里很容易反序列化后为 null。
*/
@JsonProperty("Select")
private String select;
/**
* 该分组覆盖的数据集名称列表
*/
@JsonProperty("DataSetList")
private List<String> dataSetList = new ArrayList<String>();
/**
* 该分组可配置的标签模板列表
*/
@JsonProperty("LnInstList")
private List<String> lnInstList = new ArrayList<String>();
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getInst() {
return inst;
}
public void setInst(String inst) {
this.inst = inst;
}
public String getTrgOps() {
return trgOps;
}
public void setTrgOps(String trgOps) {
this.trgOps = trgOps;
}
public String getSelect() {
return select;
}
public void setSelect(String select) {
this.select = select;
}
public List<String> getDataSetList() {
return dataSetList;
}
public void setDataSetList(List<String> dataSetList) {
this.dataSetList = dataSetList;
}
public List<String> getLnInstList() {
return lnInstList;
}
public void setLnInstList(List<String> lnInstList) {
this.lnInstList = lnInstList;
}
}
@JsonIgnoreProperties(ignoreUnknown = true)
public static class LnClassCfgItem implements NameListSupport {
private String desc;
private List<String> nameList = new ArrayList<String>();
public String getDesc() { return desc; }
public void setDesc(String desc) { this.desc = desc; }
public List<String> getNameList() { return nameList; }
public void setNameList(List<String> nameList) { this.nameList = nameList; }
}
@JsonIgnoreProperties(ignoreUnknown = true)
public static class PhaseCfgItem implements NameListSupport {
private String desc;
private List<String> nameList = new ArrayList<String>();
public String getDesc() { return desc; }
public void setDesc(String desc) { this.desc = desc; }
public List<String> getNameList() { return nameList; }
public void setNameList(List<String> nameList) { this.nameList = nameList; }
}
@JsonIgnoreProperties(ignoreUnknown = true)
public static class MultiplierCfgItem implements NameListSupport {
private int multiplier;
private List<String> nameList = new ArrayList<String>();
public int getMultiplier() { return multiplier; }
public void setMultiplier(int multiplier) { this.multiplier = multiplier; }
public List<String> getNameList() { return nameList; }
public void setNameList(List<String> nameList) { this.nameList = nameList; }
}
@JsonIgnoreProperties(ignoreUnknown = true)
public static class UnitCfgItem implements NameListSupport {
private String desc;
private List<String> nameList = new ArrayList<String>();
public String getDesc() { return desc; }
public void setDesc(String desc) { this.desc = desc; }
public List<String> getNameList() { return nameList; }
public void setNameList(List<String> nameList) { this.nameList = nameList; }
}
@JsonIgnoreProperties(ignoreUnknown = true)
public static class TypeCfgItem implements NameListSupport {
private String desc;
private List<String> nameList = new ArrayList<String>();
public String getDesc() { return desc; }
public void setDesc(String desc) { this.desc = desc; }
public List<String> getNameList() { return nameList; }
public void setNameList(List<String> nameList) { this.nameList = nameList; }
}
@JsonIgnoreProperties(ignoreUnknown = true)
public static class DataObjectCfgItem {
private String desc;
@JsonProperty("LnInstList")
private List<String> lnInstList = new ArrayList<String>();
@JsonProperty("ObjectList")
private List<ObjectCfgItem> objectList = new ArrayList<ObjectCfgItem>();
public String getDesc() { return desc; }
public void setDesc(String desc) { this.desc = desc; }
public List<String> getLnInstList() { return lnInstList; }
public void setLnInstList(List<String> lnInstList) { this.lnInstList = lnInstList; }
public List<ObjectCfgItem> getObjectList() { return objectList; }
public void setObjectList(List<ObjectCfgItem> objectList) { this.objectList = objectList; }
}
@JsonIgnoreProperties(ignoreUnknown = true)
public static class ObjectCfgItem implements NameListSupport {
private String desc;
private int baseflag;
private int basecount;
private int queuecount;
private List<String> nameList = new ArrayList<String>();
private List<String> queueList = new ArrayList<String>();
public String getDesc() { return desc; }
public void setDesc(String desc) { this.desc = desc; }
public int getBaseflag() { return baseflag; }
public void setBaseflag(int baseflag) { this.baseflag = baseflag; }
public int getBasecount() { return basecount; }
public void setBasecount(int basecount) { this.basecount = basecount; }
public int getQueuecount() { return queuecount; }
public void setQueuecount(int queuecount) { this.queuecount = queuecount; }
public List<String> getNameList() { return nameList; }
public void setNameList(List<String> nameList) { this.nameList = nameList; }
public List<String> getQueueList() { return queueList; }
public void setQueueList(List<String> queueList) { this.queueList = queueList; }
}
}

View File

@@ -0,0 +1,69 @@
package com.njcn.gather.icd.mapping.domain.service;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.njcn.gather.icd.mapping.config.MappingModuleConfig;
import com.njcn.gather.icd.mapping.domain.model.template.DefaultTemplate;
import com.njcn.gather.icd.mapping.utils.JsonUtils;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Service;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.List;
/**
* 默认配置加载器。
*
* 说明:
* 1. 直接读取 DefaultCfg.txt。
* 2. 读取后按 DefaultTemplate 原始模型反序列化。
*/
@Service
public class DefaultTemplateLoader {
private final MappingModuleConfig moduleConfig;
private final ObjectMapper objectMapper;
public DefaultTemplateLoader(MappingModuleConfig moduleConfig) {
this.moduleConfig = moduleConfig;
this.objectMapper = new ObjectMapper();
this.objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
}
public DefaultTemplate load() {
try {
ClassPathResource resource = new ClassPathResource(moduleConfig.getDefaultTemplatePath());
if (!resource.exists()) {
throw new IllegalArgumentException("默认模板文件不存在:" + moduleConfig.getDefaultTemplatePath());
}
byte[] bytes = readAllBytes(resource);
if (bytes.length == 0) {
throw new IllegalArgumentException("默认模板文件为空");
}
String json = new String(bytes, StandardCharsets.UTF_8);
json = JsonUtils.sanitizeJson(json);
DefaultTemplate template = objectMapper.readValue(json, DefaultTemplate.class);
List<String> problems = template.verify();
if (!problems.isEmpty()) {
throw new IllegalArgumentException("DefaultCfg.txt 校验失败:" + String.join("", problems));
}
return template;
} catch (Exception ex) {
throw new IllegalArgumentException("加载 DefaultCfg.txt 失败:" + ex.getMessage(), ex);
}
}
private byte[] readAllBytes(ClassPathResource resource) throws Exception {
try (InputStream inputStream = resource.getInputStream();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
byte[] buffer = new byte[4096];
int length;
while ((length = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, length);
}
return outputStream.toByteArray();
}
}
}

View File

@@ -0,0 +1,23 @@
package com.njcn.gather.icd.mapping.domain.service;
import com.njcn.gather.icd.mapping.domain.model.icd.IcdDocument;
import com.njcn.gather.icd.mapping.infrastructure.parser.SclParserAdapter;
import org.springframework.stereotype.Service;
/**
* ICD 解析服务。
* ICD 解析领域服务门面。对应用层隐藏底层 JAXB 解析细节。
*/
@Service
public class IcdParserService {
private final SclParserAdapter parserAdapter;
public IcdParserService(SclParserAdapter parserAdapter) {
this.parserAdapter = parserAdapter;
}
public IcdDocument parse(byte[] bytes, String fileName) {
return parserAdapter.parse(bytes, fileName);
}
}

View File

@@ -0,0 +1,168 @@
package com.njcn.gather.icd.mapping.domain.service;
import com.njcn.gather.icd.mapping.domain.model.analysis.IndexAnalysis;
import com.njcn.gather.icd.mapping.domain.model.analysis.IndexCandidate;
import com.njcn.gather.icd.mapping.domain.model.analysis.IndexCandidateReportItem;
import com.njcn.gather.icd.mapping.domain.model.icd.DataSetNode;
import com.njcn.gather.icd.mapping.domain.model.icd.FcdaNode;
import com.njcn.gather.icd.mapping.domain.model.icd.IcdDocument;
import com.njcn.gather.icd.mapping.domain.model.icd.ReportControlNode;
import com.njcn.gather.icd.mapping.domain.model.template.DefaultTemplate;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Locale;
import java.util.Set;
/**
* 索引候选分析服务。
*
* 说明:
* 1. 新版不再按“单个报告”平铺返回,而是按 DefaultCfg.ReportList 的业务配置项聚合。
* 2. 一个业务配置项下可能包含多个报告,因此这里会计算 reportCount并返回 reports 子列表。
* 3. templateLabels 只是模板参考,不要求与 ICD 解析到的 lnInst 数量完全一一对应。
* 4. 关键修正:
* 在这里就把 DefaultCfg.ReportList 的 inst / Select / TrgOps 一并带入 IndexCandidate
* 后续正式生成阶段直接使用,不再重新查模板。
*/
@Service
public class IndexAnalysisService {
public IndexAnalysis analyze(IcdDocument icdDocument, DefaultTemplate template) {
IndexAnalysis analysis = new IndexAnalysis();
if (icdDocument == null) {
analysis.getProblems().add("ICD 文档为空");
return analysis;
}
if (template == null || template.getReportList() == null) {
analysis.getProblems().add("DefaultCfg.ReportList 为空");
return analysis;
}
// 先按模板分组聚合
for (DefaultTemplate.ReportCfgItem reportCfg : template.getReportList()) {
List<ReportControlNode> matchedReports = collectMatchedReports(icdDocument, reportCfg);
if (matchedReports.isEmpty()) {
continue;
}
IndexCandidate candidate = new IndexCandidate();
candidate.setGroupKey(buildGroupKey(reportCfg));
candidate.setGroupDesc(reportCfg.getDesc());
candidate.setReportCount(matchedReports.size());
// 关键:把 DefaultCfg.ReportList 的配置项直接带入候选对象
candidate.setReportInst(reportCfg.getInst());
candidate.setSelect(reportCfg.getSelect());
candidate.setTrgOps(reportCfg.getTrgOps());
if (reportCfg.getLnInstList() != null) {
candidate.getTemplateLabels().addAll(reportCfg.getLnInstList());
}
for (ReportControlNode reportControl : matchedReports) {
IndexCandidateReportItem item = new IndexCandidateReportItem();
item.setReportName(reportControl.getName());
item.setDataSetName(reportControl.getDataSetName());
item.setReportDesc(reportCfg.getDesc());
item.getAvailableLnInstValues().addAll(collectLnInstValues(icdDocument, reportControl.getDataSetName()));
candidate.getReports().add(item);
}
analysis.getCandidates().add(candidate);
}
// 再检查是否有 ICD 报告没有被模板覆盖
if (icdDocument.getReportControls() != null) {
for (ReportControlNode reportControl : icdDocument.getReportControls()) {
if (!isCoveredByTemplate(reportControl, template)) {
analysis.getProblems().add(
"报告 " + reportControl.getName()
+ " 未在 DefaultCfg.ReportList 中匹配到配置dataSet=" + reportControl.getDataSetName()
);
}
}
}
return analysis;
}
private List<ReportControlNode> collectMatchedReports(IcdDocument icdDocument, DefaultTemplate.ReportCfgItem reportCfg) {
List<ReportControlNode> result = new ArrayList<ReportControlNode>();
if (icdDocument.getReportControls() == null || reportCfg.getDataSetList() == null) {
return result;
}
for (ReportControlNode reportControl : icdDocument.getReportControls()) {
if (reportCfg.getDataSetList().contains(reportControl.getDataSetName())) {
result.add(reportControl);
}
}
return result;
}
private boolean isCoveredByTemplate(ReportControlNode reportControl, DefaultTemplate template) {
if (template == null || template.getReportList() == null) {
return false;
}
for (DefaultTemplate.ReportCfgItem reportCfg : template.getReportList()) {
if (reportCfg.getDataSetList() != null && reportCfg.getDataSetList().contains(reportControl.getDataSetName())) {
return true;
}
}
return false;
}
private List<String> collectLnInstValues(IcdDocument icdDocument, String dataSetName) {
if (icdDocument.getDataSets() == null) {
return Collections.emptyList();
}
DataSetNode dataSetNode = icdDocument.getDataSets().get(dataSetName);
if (dataSetNode == null || dataSetNode.getFcdas() == null) {
return Collections.emptyList();
}
Set<String> unique = new LinkedHashSet<String>();
for (FcdaNode fcda : dataSetNode.getFcdas()) {
if (fcda == null || fcda.getLnInst() == null) {
continue;
}
String lnInst = fcda.getLnInst().trim();
if (!lnInst.isEmpty()) {
unique.add(lnInst);
}
}
List<String> result = new ArrayList<String>(unique);
Collections.sort(result, new Comparator<String>() {
@Override
public int compare(String left, String right) {
try {
return Integer.valueOf(left).compareTo(Integer.valueOf(right));
} catch (Exception ex) {
return left.compareTo(right);
}
}
});
return result;
}
private String buildGroupKey(DefaultTemplate.ReportCfgItem reportCfg) {
String desc = reportCfg.getDesc() == null ? "GROUP" : reportCfg.getDesc();
String firstDataSet = (reportCfg.getDataSetList() == null || reportCfg.getDataSetList().isEmpty())
? "DEFAULT" : reportCfg.getDataSetList().get(0);
return normalize(desc) + "__" + normalize(firstDataSet);
}
private String normalize(String value) {
return value.replaceAll("[^0-9A-Za-z\\u4e00-\\u9fa5]+", "_")
.replaceAll("_+", "_")
.replaceAll("^_", "")
.replaceAll("_$", "")
.toUpperCase(Locale.ROOT);
}
}

View File

@@ -0,0 +1,133 @@
package com.njcn.gather.icd.mapping.domain.service;
import com.njcn.gather.icd.mapping.application.command.IndexBindingCommand;
import com.njcn.gather.icd.mapping.application.command.IndexSelectionGroupCommand;
import com.njcn.gather.icd.mapping.domain.model.analysis.IndexAnalysis;
import com.njcn.gather.icd.mapping.domain.model.analysis.IndexCandidate;
import com.njcn.gather.icd.mapping.domain.model.analysis.IndexCandidateReportItem;
import com.njcn.gather.icd.mapping.domain.model.analysis.ValidationResult;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 索引绑定校验服务。
*
* 校验原则:
* 1. 只校验用户明确提交的绑定项;
* 2. 不要求模板里的所有标签都必须配置;
* 3. label 必须属于当前业务分组的 templateLabels
* 4. lnInst 必须属于当前报告对应的 ICD 候选数字。
*/
@Service
public class IndexValidationService {
public ValidationResult validate(IndexAnalysis analysis, List<IndexSelectionGroupCommand> selections) {
ValidationResult result = new ValidationResult();
if (analysis == null || analysis.getCandidates() == null || analysis.getCandidates().isEmpty()) {
result.getProblems().add("当前 ICD 未解析出任何可配置的候选分组");
return result;
}
if (selections == null || selections.isEmpty()) {
for (IndexCandidate candidate : analysis.getCandidates()) {
result.getProblems().add(
"报告组【" + candidate.getGroupDesc() + "】未提交绑定关系,请根据 templateLabels 与 reports[*].availableLnInstValues 完成配置"
);
}
return result;
}
for (IndexSelectionGroupCommand selection : selections) {
IndexCandidate candidate = findCandidate(analysis, selection.getGroupKey(), selection.getGroupDesc());
if (candidate == null) {
result.getProblems().add("未找到分组配置groupKey=" + selection.getGroupKey() + ", groupDesc=" + selection.getGroupDesc());
continue;
}
if (selection.getBindings() == null || selection.getBindings().isEmpty()) {
result.getProblems().add("分组【" + candidate.getGroupDesc() + "】没有任何绑定关系");
continue;
}
for (IndexBindingCommand binding : selection.getBindings()) {
validateBinding(candidate, binding, result);
}
}
if (result.getProblems().isEmpty()) {
result.setValid(true);
}
return result;
}
private void validateBinding(IndexCandidate candidate, IndexBindingCommand binding, ValidationResult result) {
if (binding == null) {
result.getProblems().add("存在空的绑定项");
return;
}
if (isBlank(binding.getLabel())) {
result.getProblems().add("分组【" + candidate.getGroupDesc() + "】存在未填写 label 的绑定项");
} else if (!candidate.getTemplateLabels().contains(binding.getLabel())) {
result.getProblems().add("分组【" + candidate.getGroupDesc() + "】中 label【" + binding.getLabel() + "】不在模板候选中");
}
IndexCandidateReportItem reportItem = findReport(candidate, binding.getReportName(), binding.getDataSetName());
if (reportItem == null) {
result.getProblems().add(
"分组【" + candidate.getGroupDesc() + "】中未找到报告reportName=" + binding.getReportName()
+ ", dataSetName=" + binding.getDataSetName()
);
return;
}
if (isBlank(binding.getLnInst())) {
result.getProblems().add("报告【" + reportItem.getReportName() + "】未填写 lnInst");
} else if (!reportItem.getAvailableLnInstValues().contains(binding.getLnInst())) {
result.getProblems().add(
"报告【" + reportItem.getReportName() + "】的 lnInst【" + binding.getLnInst() + "】不在可选数字中:"
+ reportItem.getAvailableLnInstValues()
);
}
}
private IndexCandidate findCandidate(IndexAnalysis analysis, String groupKey, String groupDesc) {
for (IndexCandidate candidate : analysis.getCandidates()) {
if (same(candidate.getGroupKey(), groupKey)) {
return candidate;
}
if (same(candidate.getGroupDesc(), groupDesc)) {
return candidate;
}
}
return null;
}
private IndexCandidateReportItem findReport(IndexCandidate candidate, String reportName, String dataSetName) {
if (candidate.getReports() == null) {
return null;
}
for (IndexCandidateReportItem item : candidate.getReports()) {
if (same(item.getReportName(), reportName) && (isBlank(dataSetName) || same(item.getDataSetName(), dataSetName))) {
return item;
}
}
return null;
}
private boolean same(String left, String right) {
if (left == null && right == null) {
return true;
}
if (left == null || right == null) {
return false;
}
return left.trim().equals(right.trim());
}
private boolean isBlank(String value) {
return value == null || value.trim().isEmpty();
}
}

View File

@@ -0,0 +1,13 @@
package com.njcn.gather.icd.mapping.enums;
/**
* 接口生成状态。
*/
public enum GenerateStatus {
/** 生成成功。 */
SUCCESS,
/** 需要前端重新选择索引。 */
NEED_INDEX_SELECTION,
/** 生成失败。 */
FAILED
}

View File

@@ -0,0 +1,522 @@
package com.njcn.gather.icd.mapping.infrastructure.parser;
import com.njcn.gather.icd.mapping.domain.model.icd.*;
import com.njcn.gather.icd.mapping.infrastructure.parser.generated.*;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* JAXB generated 模型读取器。
* generated 模型读取器。遍历 SCL/IED/LDevice/LN0/LN/ReportControl/DataSet/DOI 树并转换。
*
* 说明:
* 1. 这里只负责“把 generated 模型读取出来”。
* 2. 不直接做接口编排,也不做 JSON 序列化。
*/
public class SclGeneratedModelReader {
public IcdDocument read(SCL scl, String fileName) {
IcdDocument document = new IcdDocument();
document.setFileName(fileName);
TIED targetIed = null;
TLDevice targetDevice = null;
if (scl.getIED() != null) {
for (TIED ied : scl.getIED()) {
if (ied.getAccessPoint() == null) {
continue;
}
for (TAccessPoint accessPoint : ied.getAccessPoint()) {
TServer server = accessPoint.getServer();
if (server == null || server.getLDevice() == null) {
continue;
}
for (TLDevice lDevice : server.getLDevice()) {
String inst = lDevice.getInst();
if (inst == null || inst.trim().isEmpty()) {
continue;
}
if ("LD0".equals(inst) || "PQLD0".equals(inst)) {
continue;
}
targetIed = ied;
targetDevice = lDevice;
break;
}
if (targetDevice != null) {
break;
}
}
if (targetDevice != null) {
break;
}
}
}
if (targetIed == null || targetDevice == null) {
throw new IllegalArgumentException("未找到可解析的 IED/LDevice 节点");
}
IedNode iedNode = new IedNode();
iedNode.setName(targetIed.getName());
document.setPrimaryIed(iedNode);
document.setIedName(targetIed.getName());
document.setLdInst(targetDevice.getInst());
document.setLdPrefix(extractLdPrefix(targetDevice.getInst()));
LogicalDeviceNode logicalDeviceNode = new LogicalDeviceNode();
logicalDeviceNode.setInst(targetDevice.getInst());
logicalDeviceNode.setLdName(targetDevice.getLdName());
document.setLogicalDevice(logicalDeviceNode);
LN0 ln0 = targetDevice.getLN0();
if (ln0 != null) {
readReportAndDataSetFromAnyLn(ln0, document);
document.getLogicalNodes().add(readLogicalNode(ln0, true));
}
if (targetDevice.getLN() != null) {
for (TLN ln : targetDevice.getLN()) {
document.getLogicalNodes().add(readLogicalNode(ln, false));
}
}
// 关键修正:
// C# 原版的 icdcout 优先来自 DataTypeTemplates -> LNodeType -> DO -> DOType -> DA.count
// 不是靠 DataSet/FCDA 重复数来反推。
// 这里改成:先按模板 count 回填 DOI.sequenceCount找不到再退回 FCDA。
syncDoiSequenceCount(scl, document);
return document;
}
private void readReportAndDataSetFromAnyLn(TAnyLN anyLn, IcdDocument document) {
List<FcdaNode> allFcdas = new ArrayList<FcdaNode>();
if (anyLn.getDataSet() != null) {
for (TDataSet dataSet : anyLn.getDataSet()) {
DataSetNode dataSetNode = new DataSetNode();
dataSetNode.setName(dataSet.getName());
if (dataSet.getFCDA() != null) {
for (TFCDA fcda : dataSet.getFCDA()) {
FcdaNode node = toFcdaNode(fcda);
dataSetNode.getFcdas().add(node);
allFcdas.add(node);
}
}
document.getDataSets().put(dataSetNode.getName(), dataSetNode);
}
}
for (DataSetNode dataSet : document.getDataSets().values()) {
for (FcdaNode fcda : dataSet.getFcdas()) {
fcda.setSequenceCount(SclTraversalSupport.calculateSequenceCount(allFcdas, fcda));
}
}
if (anyLn.getReportControl() != null) {
for (TReportControl reportControl : anyLn.getReportControl()) {
ReportControlNode report = new ReportControlNode();
report.setName(reportControl.getName());
report.setRptId(reportControl.getRptID());
report.setBuffered(reportControl.isBuffered());
report.setDataSetName(reportControl.getDatSet());
report.setConfRev(String.valueOf(reportControl.getConfRev()));
report.setTrgOps(readTrgOps(reportControl));
document.getReportControls().add(report);
}
}
}
private String readTrgOps(TReportControl reportControl) {
if (reportControl.getTrgOps() == null) {
return null;
}
boolean dchg = Boolean.TRUE.equals(reportControl.getTrgOps().isDchg());
boolean qchg = Boolean.TRUE.equals(reportControl.getTrgOps().isQchg());
boolean period = Boolean.TRUE.equals(reportControl.getTrgOps().isPeriod());
if (period) {
return "40";
}
if (dchg || qchg) {
return "96";
}
return null;
}
/**
* 读取逻辑节点。
*
* 注意:
* 当前这套 JAXB 生成类中TAnyLN 只提供了通用能力,
* prefix / lnClass / inst 这些属性实际定义在子类 TLN / TLN0 上,
* 所以这里不能直接对 TAnyLN 调用 getPrefix()/getLnClass()/getInst()。
*/
private LnNode readLogicalNode(TAnyLN anyLn, boolean isLn0) {
LnNode node = new LnNode();
node.setLn0(isLn0);
// lnType 在 TAnyLN 上是存在的,可以直接读取
node.setLnType(anyLn.getLnType());
// prefix / lnClass / inst 需要根据具体子类读取
node.setPrefix(resolveLnPrefix(anyLn));
node.setLnClass(resolveLnClass(anyLn));
node.setLnInst(resolveLnInst(anyLn));
// DOI 是定义在 TAnyLN 上的,可以直接读取
if (anyLn.getDOI() != null) {
for (TDOI doi : anyLn.getDOI()) {
DoiNode doiNode = new DoiNode();
doiNode.setName(doi.getName());
doiNode.setIx(doi.getIx());
doiNode.setLnClass(node.getLnClass());
doiNode.setLnInst(node.getLnInst());
if (doi.getSDIOrDAI() != null) {
for (TUnNaming child : doi.getSDIOrDAI()) {
DoiElementNode childNode = readUnNamingNode(child);
if (childNode != null) {
doiNode.getChildren().add(childNode);
}
}
}
node.getDoiList().add(doiNode);
}
}
return node;
}
/**
* 解析逻辑节点 prefix。
*
* TLN 有 prefix
* TLN0 按这套生成类没有单独 prefix 字段,返回空字符串即可。
*/
private String resolveLnPrefix(TAnyLN anyLn) {
if (anyLn instanceof TLN) {
return ((TLN) anyLn).getPrefix();
}
return "";
}
/**
* 解析逻辑节点 lnClass。
*
* 当前生成类里:
* - TLN.getLnClass() 返回 List<String>
* - TLN0.getLnClass() 返回 List<String>
*/
private String resolveLnClass(TAnyLN anyLn) {
if (anyLn instanceof TLN) {
return first(((TLN) anyLn).getLnClass());
}
if (anyLn instanceof TLN0) {
return first(((TLN0) anyLn).getLnClass());
}
return null;
}
/**
* 解析逻辑节点 inst。
*
* 当前生成类里:
* - TLN.getInst() 存在
* - TLN0.getInst() 也存在
*/
private String resolveLnInst(TAnyLN anyLn) {
if (anyLn instanceof TLN) {
return ((TLN) anyLn).getInst();
}
if (anyLn instanceof TLN0) {
return ((TLN0) anyLn).getInst();
}
return null;
}
private DoiElementNode readUnNamingNode(TUnNaming source) {
if (source == null) {
return null;
}
if (source instanceof TSDI) {
TSDI sdi = (TSDI) source;
DoiElementNode node = new DoiElementNode();
node.setKind("SDI");
node.setName(sdi.getName());
node.setIx(sdi.getIx());
if (sdi.getSDIOrDAI() != null) {
for (TUnNaming child : sdi.getSDIOrDAI()) {
DoiElementNode childNode = readUnNamingNode(child);
if (childNode != null) {
node.getChildren().add(childNode);
}
}
}
return node;
}
if (source instanceof TDAI) {
TDAI dai = (TDAI) source;
DoiElementNode node = new DoiElementNode();
node.setKind("DAI");
node.setName(dai.getName());
node.setIx(dai.getIx());
if (dai.getVal() != null) {
for (TVal val : dai.getVal()) {
if (val.getValue() != null) {
node.getValues().add(val.getValue());
}
}
}
return node;
}
return null;
}
private FcdaNode toFcdaNode(TFCDA fcda) {
FcdaNode node = new FcdaNode();
node.setLdInst(fcda.getLdInst());
node.setPrefix(fcda.getPrefix());
node.setLnClass(first(fcda.getLnClass()));
node.setLnInst(fcda.getLnInst());
node.setDoName(fcda.getDoName());
node.setDaName(fcda.getDaName());
node.setFc(fcda.getFc());
node.setIx(fcda.getIx());
return node;
}
private String first(List<String> values) {
return values == null || values.isEmpty() ? null : values.get(0);
}
private String extractLdPrefix(String ldInst) {
if (ldInst == null) {
return null;
}
StringBuilder builder = new StringBuilder();
for (int i = 0; i < ldInst.length(); i++) {
char c = ldInst.charAt(i);
if (Character.isDigit(c)) {
break;
}
builder.append(c);
}
return builder.length() == 0 ? ldInst : builder.toString();
}
/**
* 把 DOI 的 sequenceCount 同步出来。
*
* 规则严格贴近原 C#
* 1. 优先从 DataTypeTemplates -> LNodeType -> DO -> DOType -> DA.count 取值;
* 2. 如果模板里没有 count再退回 DataSet/FCDA 反查;
* 3. 这样后续 MappingGenerationService 里的 icdcout 才会和 C# 一致。
*/
private void syncDoiSequenceCount(SCL scl, IcdDocument document) {
if (document == null || document.getLogicalNodes() == null) {
return;
}
// 先把 “lnType + doName -> count” 建好缓存
Map<String, Integer> templateSequenceCountMap = buildTemplateSequenceCountMap(scl);
for (LnNode lnNode : document.getLogicalNodes()) {
if (lnNode == null || lnNode.getDoiList() == null) {
continue;
}
for (DoiNode doiNode : lnNode.getDoiList()) {
if (doiNode == null) {
continue;
}
int templateCount = 0;
if (lnNode.getLnType() != null && doiNode.getName() != null) {
Integer value = templateSequenceCountMap.get(buildLnTypeDoKey(lnNode.getLnType(), doiNode.getName()));
templateCount = value == null ? 0 : value.intValue();
}
int fcdaCount = findDoiSequenceCountFromFcda(document, doiNode);
// 关键:优先使用模板 count保持与 C# 原版一致
doiNode.setSequenceCount(templateCount > 0 ? templateCount : fcdaCount);
}
}
}
/**
* 构建 “lnType + doName -> 序列数量” 缓存。
*
* 来源:
* DataTypeTemplates
* -> LNodeType(id = lnType)
* -> DO(name/type)
* -> DOType(id = type)
* -> DA.count
*
* C# 原版本质上就是沿这条链把 doi.tNUM 算出来。
*/
private Map<String, Integer> buildTemplateSequenceCountMap(SCL scl) {
Map<String, Integer> result = new LinkedHashMap<String, Integer>();
if (scl == null || scl.getDataTypeTemplates() == null) {
return result;
}
TDataTypeTemplates templates = scl.getDataTypeTemplates();
if (templates.getLNodeType() == null || templates.getDOType() == null) {
return result;
}
// 1. 先建 DOType.id -> count
Map<String, Integer> doTypeCountMap = new LinkedHashMap<String, Integer>();
for (TDOType doType : templates.getDOType()) {
if (doType == null || doType.getId() == null) {
continue;
}
int count = extractDoTypeSequenceCount(doType);
doTypeCountMap.put(doType.getId(), count);
}
// 2. 再建 lnType + doName -> count
for (TLNodeType lNodeType : templates.getLNodeType()) {
if (lNodeType == null || lNodeType.getId() == null || lNodeType.getDO() == null) {
continue;
}
for (TDO tdo : lNodeType.getDO()) {
if (tdo == null || tdo.getName() == null || tdo.getType() == null) {
continue;
}
Integer count = doTypeCountMap.get(tdo.getType());
if (count == null) {
count = 0;
}
result.put(buildLnTypeDoKey(lNodeType.getId(), tdo.getName()), count);
}
}
return result;
}
/**
* 从一个 DOType 中提取序列数量。
*
* C# 原版用的是 DOType 下 DA.count。
* 这里取所有顶层 DA 里最大的正整数 count。
*/
private int extractDoTypeSequenceCount(TDOType doType) {
int max = 0;
if (doType == null || doType.getSDOOrDA() == null) {
return 0;
}
for (TUnNaming item : doType.getSDOOrDA()) {
if (!(item instanceof TDA)) {
continue;
}
TDA da = (TDA) item;
int value = parseDaCount(da);
if (value > max) {
max = value;
}
}
return max;
}
/**
* 解析 DA.count。
*
* JAXB 这套生成类把 count 生成为 List<String>
* 所以这里要做一次安全转换。
*/
private int parseDaCount(TAbstractDataAttribute dataAttribute) {
if (dataAttribute == null || dataAttribute.getCount() == null || dataAttribute.getCount().isEmpty()) {
return 0;
}
int max = 0;
for (String raw : dataAttribute.getCount()) {
if (raw == null) {
continue;
}
String text = raw.trim();
if (text.isEmpty()) {
continue;
}
try {
int value = Integer.parseInt(text);
if (value > max) {
max = value;
}
} catch (NumberFormatException ignore) {
// 非法 count 直接忽略,保持容错
}
}
return max;
}
/**
* 退回到 DataSet/FCDA 的 sequenceCount 反查。
*
* 这里只作为模板 count 找不到时的兜底逻辑。
*/
private int findDoiSequenceCountFromFcda(IcdDocument document, DoiNode doiNode) {
int max = 0;
if (document == null || document.getDataSets() == null || doiNode == null) {
return 0;
}
for (DataSetNode dataSetNode : document.getDataSets().values()) {
if (dataSetNode == null || dataSetNode.getFcdas() == null) {
continue;
}
for (FcdaNode fcda : dataSetNode.getFcdas()) {
if (fcda == null) {
continue;
}
boolean sameLnClass = equalsTrim(fcda.getLnClass(), doiNode.getLnClass());
boolean sameLnInst = equalsTrim(fcda.getLnInst(), doiNode.getLnInst());
boolean sameDoName = equalsTrim(fcda.getDoName(), doiNode.getName());
if (sameLnClass && sameLnInst && sameDoName) {
if (fcda.getSequenceCount() > max) {
max = fcda.getSequenceCount();
}
if (fcda.getIx() != null && fcda.getIx() > max) {
max = fcda.getIx().intValue();
}
}
}
}
return max;
}
private String buildLnTypeDoKey(String lnType, String doName) {
String left = lnType == null ? "" : lnType.trim();
String right = doName == null ? "" : doName.trim();
return left + "##" + right;
}
/**
* 空安全字符串比较。
*/
private boolean equalsTrim(String left, String right) {
if (left == null && right == null) {
return true;
}
if (left == null || right == null) {
return false;
}
return left.trim().equals(right.trim());
}
}

View File

@@ -0,0 +1,53 @@
package com.njcn.gather.icd.mapping.infrastructure.parser;
import com.njcn.gather.icd.mapping.domain.model.icd.IcdDocument;
import com.njcn.gather.icd.mapping.infrastructure.parser.generated.SCL;
import org.springframework.stereotype.Component;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.Unmarshaller;
import java.io.ByteArrayInputStream;
/**
* SCL 解析适配器。
* JAXB 解析适配器。负责把 ICD XML 反序列化为 SCL 根对象,再转成内部模型。
*
* 说明:
* 1. 这是真正会用到的 JAXB 版解析入口。
* 2. 这里只负责把 ICD XML 反序列化成 SCL 根对象,再交给 reader 转成内部模型。
* 3. 业务层不会直接依赖 JAXB generated 类。
*/
@Component
public class SclParserAdapter {
private final SclGeneratedModelReader modelReader = new SclGeneratedModelReader();
public IcdDocument parse(byte[] content, String fileName) {
if (content == null || content.length == 0) {
throw new IllegalArgumentException("ICD 文件内容不能为空");
}
try {
JAXBContext context = JAXBContext.newInstance(SCL.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
Object raw = unmarshaller.unmarshal(new ByteArrayInputStream(content));
SCL scl = resolveSclRoot(raw);
return modelReader.read(scl, fileName);
} catch (Exception ex) {
throw new IllegalArgumentException("ICD 解析失败:" + ex.getMessage(), ex);
}
}
private SCL resolveSclRoot(Object raw) {
if (raw instanceof SCL) {
return (SCL) raw;
}
if (raw instanceof JAXBElement) {
Object value = ((JAXBElement<?>) raw).getValue();
if (value instanceof SCL) {
return (SCL) value;
}
}
throw new IllegalArgumentException("ICD 根节点不是 SCL");
}
}

View File

@@ -0,0 +1,61 @@
package com.njcn.gather.icd.mapping.infrastructure.parser;
import com.njcn.gather.icd.mapping.domain.model.icd.DoiElementNode;
import com.njcn.gather.icd.mapping.domain.model.icd.DoiNode;
import com.njcn.gather.icd.mapping.domain.model.icd.FcdaNode;
import java.util.ArrayList;
import java.util.List;
/**
* SCL 遍历辅助工具。
*/
public final class SclTraversalSupport {
private SclTraversalSupport() {
}
/**
* 统计同一个数据对象在同数据集里出现的次数,作为 ICD 实际序列个数参考。
*/
public static int calculateSequenceCount(List<FcdaNode> allFcdas, FcdaNode current) {
int count = 0;
for (FcdaNode item : allFcdas) {
if (safeEquals(item.getLnClass(), current.getLnClass())
&& safeEquals(item.getLnInst(), current.getLnInst())
&& safeEquals(item.getDoName(), current.getDoName())) {
count++;
}
}
return count <= 1 ? 0 : count;
}
public static List<DoiElementNode> flattenLeafDai(DoiNode doi) {
List<DoiElementNode> result = new ArrayList<DoiElementNode>();
if (doi == null || doi.getChildren() == null) {
return result;
}
for (DoiElementNode child : doi.getChildren()) {
collectLeafDai(child, result);
}
return result;
}
private static void collectLeafDai(DoiElementNode node, List<DoiElementNode> result) {
if (node == null) {
return;
}
if ("DAI".equals(node.getKind())) {
result.add(node);
}
if (node.getChildren() != null) {
for (DoiElementNode child : node.getChildren()) {
collectLeafDai(child, result);
}
}
}
public static boolean safeEquals(String a, String b) {
return a == null ? b == null : a.equals(b);
}
}

View File

@@ -0,0 +1,42 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
/**
* <p>anonymous complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType&gt;
* &lt;complexContent&gt;
* &lt;extension base="{http://www.iec.ch/61850/2003/SCL}tLN0"&gt;
* &lt;anyAttribute processContents='lax' namespace='##other'/&gt;
* &lt;/extension&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "")
@XmlRootElement(name = "LN0")
public class LN0
extends TLN0
{
}

View File

@@ -0,0 +1,351 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
import javax.xml.bind.annotation.adapters.NormalizedStringAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
/**
* <p>anonymous complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType&gt;
* &lt;complexContent&gt;
* &lt;extension base="{http://www.iec.ch/61850/2003/SCL}tBaseElement"&gt;
* &lt;sequence&gt;
* &lt;element name="Header" type="{http://www.iec.ch/61850/2003/SCL}tHeader"/&gt;
* &lt;element ref="{http://www.iec.ch/61850/2003/SCL}Substation" maxOccurs="unbounded" minOccurs="0"/&gt;
* &lt;element ref="{http://www.iec.ch/61850/2003/SCL}Communication" minOccurs="0"/&gt;
* &lt;element ref="{http://www.iec.ch/61850/2003/SCL}IED" maxOccurs="unbounded" minOccurs="0"/&gt;
* &lt;element ref="{http://www.iec.ch/61850/2003/SCL}DataTypeTemplates" minOccurs="0"/&gt;
* &lt;element ref="{http://www.iec.ch/61850/2003/SCL}Line" maxOccurs="unbounded" minOccurs="0"/&gt;
* &lt;element ref="{http://www.iec.ch/61850/2003/SCL}Process" maxOccurs="unbounded" minOccurs="0"/&gt;
* &lt;/sequence&gt;
* &lt;attribute name="version" use="required" type="{http://www.iec.ch/61850/2003/SCL}tSclVersion" fixed="2007" /&gt;
* &lt;attribute name="revision" use="required" type="{http://www.iec.ch/61850/2003/SCL}tSclRevision" fixed="C" /&gt;
* &lt;attribute name="release" use="required" type="{http://www.iec.ch/61850/2003/SCL}tSclRelease" fixed="5" /&gt;
* &lt;anyAttribute processContents='lax' namespace='##other'/&gt;
* &lt;/extension&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"header",
"substation",
"communication",
"ied",
"dataTypeTemplates",
"line",
"process"
})
@XmlRootElement(name = "SCL")
public class SCL
extends TBaseElement
{
@XmlElement(name = "Header", required = true)
protected THeader header;
@XmlElement(name = "Substation")
protected List<TSubstation> substation;
@XmlElement(name = "Communication")
protected TCommunication communication;
@XmlElement(name = "IED")
protected List<TIED> ied;
@XmlElement(name = "DataTypeTemplates")
protected TDataTypeTemplates dataTypeTemplates;
@XmlElement(name = "Line")
protected List<TLine> line;
@XmlElement(name = "Process")
protected List<TProcess> process;
@XmlAttribute(name = "version", required = true)
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String version;
@XmlAttribute(name = "revision", required = true)
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
protected String revision;
@XmlAttribute(name = "release", required = true)
protected short release;
/**
* 获取header属性的值。
*
* @return
* possible object is
* {@link THeader }
*
*/
public THeader getHeader() {
return header;
}
/**
* 设置header属性的值。
*
* @param value
* allowed object is
* {@link THeader }
*
*/
public void setHeader(THeader value) {
this.header = value;
}
/**
* Gets the value of the substation property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the substation property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getSubstation().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TSubstation }
*
*
*/
public List<TSubstation> getSubstation() {
if (substation == null) {
substation = new ArrayList<TSubstation>();
}
return this.substation;
}
/**
* 获取communication属性的值。
*
* @return
* possible object is
* {@link TCommunication }
*
*/
public TCommunication getCommunication() {
return communication;
}
/**
* 设置communication属性的值。
*
* @param value
* allowed object is
* {@link TCommunication }
*
*/
public void setCommunication(TCommunication value) {
this.communication = value;
}
/**
* Gets the value of the ied property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the ied property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getIED().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TIED }
*
*
*/
public List<TIED> getIED() {
if (ied == null) {
ied = new ArrayList<TIED>();
}
return this.ied;
}
/**
* 获取dataTypeTemplates属性的值。
*
* @return
* possible object is
* {@link TDataTypeTemplates }
*
*/
public TDataTypeTemplates getDataTypeTemplates() {
return dataTypeTemplates;
}
/**
* 设置dataTypeTemplates属性的值。
*
* @param value
* allowed object is
* {@link TDataTypeTemplates }
*
*/
public void setDataTypeTemplates(TDataTypeTemplates value) {
this.dataTypeTemplates = value;
}
/**
* Gets the value of the line property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the line property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getLine().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TLine }
*
*
*/
public List<TLine> getLine() {
if (line == null) {
line = new ArrayList<TLine>();
}
return this.line;
}
/**
* Gets the value of the process property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the process property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getProcess().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TProcess }
*
*
*/
public List<TProcess> getProcess() {
if (process == null) {
process = new ArrayList<TProcess>();
}
return this.process;
}
/**
* 获取version属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getVersion() {
if (version == null) {
return "2007";
} else {
return version;
}
}
/**
* 设置version属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setVersion(String value) {
this.version = value;
}
/**
* 获取revision属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getRevision() {
if (revision == null) {
return "C";
} else {
return revision;
}
}
/**
* 设置revision属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setRevision(String value) {
this.revision = value;
}
/**
* 获取release属性的值。
*
*/
public short getRelease() {
return release;
}
/**
* 设置release属性的值。
*
*/
public void setRelease(short value) {
this.release = value;
}
}

View File

@@ -0,0 +1,117 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.bind.annotation.XmlType;
/**
* <p>tAbstractConductingEquipment complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tAbstractConductingEquipment"&gt;
* &lt;complexContent&gt;
* &lt;extension base="{http://www.iec.ch/61850/2003/SCL}tEquipment"&gt;
* &lt;sequence&gt;
* &lt;element name="Terminal" type="{http://www.iec.ch/61850/2003/SCL}tTerminal" maxOccurs="2" minOccurs="0"/&gt;
* &lt;element name="SubEquipment" type="{http://www.iec.ch/61850/2003/SCL}tSubEquipment" maxOccurs="unbounded" minOccurs="0"/&gt;
* &lt;/sequence&gt;
* &lt;anyAttribute processContents='lax' namespace='##other'/&gt;
* &lt;/extension&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tAbstractConductingEquipment", propOrder = {
"terminal",
"subEquipment"
})
@XmlSeeAlso({
TConductingEquipment.class,
TTransformerWinding.class
})
public abstract class TAbstractConductingEquipment
extends TEquipment
{
@XmlElement(name = "Terminal")
protected List<TTerminal> terminal;
@XmlElement(name = "SubEquipment")
protected List<TSubEquipment> subEquipment;
/**
* Gets the value of the terminal property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the terminal property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getTerminal().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TTerminal }
*
*
*/
public List<TTerminal> getTerminal() {
if (terminal == null) {
terminal = new ArrayList<TTerminal>();
}
return this.terminal;
}
/**
* Gets the value of the subEquipment property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the subEquipment property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getSubEquipment().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TSubEquipment }
*
*
*/
public List<TSubEquipment> getSubEquipment() {
if (subEquipment == null) {
subEquipment = new ArrayList<TSubEquipment>();
}
return this.subEquipment;
}
}

View File

@@ -0,0 +1,325 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.NormalizedStringAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
/**
* <p>tAbstractDataAttribute complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tAbstractDataAttribute"&gt;
* &lt;complexContent&gt;
* &lt;extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming"&gt;
* &lt;sequence&gt;
* &lt;element name="Val" type="{http://www.iec.ch/61850/2003/SCL}tVal" maxOccurs="unbounded" minOccurs="0"/&gt;
* &lt;element name="Labels" type="{http://www.iec.ch/61850/2003/SCL}tLabels" minOccurs="0"/&gt;
* &lt;/sequence&gt;
* &lt;attribute name="name" use="required" type="{http://www.iec.ch/61850/2003/SCL}tAttributeNameEnum" /&gt;
* &lt;attribute name="sAddr"&gt;
* &lt;simpleType&gt;
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}normalizedString"&gt;
* &lt;maxLength value="255"/&gt;
* &lt;/restriction&gt;
* &lt;/simpleType&gt;
* &lt;/attribute&gt;
* &lt;attribute name="bType" use="required" type="{http://www.iec.ch/61850/2003/SCL}tBasicTypeEnum" /&gt;
* &lt;attribute name="valKind" type="{http://www.iec.ch/61850/2003/SCL}tValKindEnum" default="Set" /&gt;
* &lt;attribute name="type" type="{http://www.iec.ch/61850/2003/SCL}tAnyName" /&gt;
* &lt;attribute name="count" type="{http://www.iec.ch/61850/2003/SCL}tDACount" default="0" /&gt;
* &lt;attribute name="valImport" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" /&gt;
* &lt;anyAttribute processContents='lax' namespace='##other'/&gt;
* &lt;/extension&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tAbstractDataAttribute", propOrder = {
"val",
"labels"
})
@XmlSeeAlso({
TDA.class,
TBDA.class
})
public abstract class TAbstractDataAttribute
extends TUnNaming
{
@XmlElement(name = "Val")
protected List<TVal> val;
@XmlElement(name = "Labels")
protected TLabels labels;
@XmlAttribute(name = "name", required = true)
protected String name;
@XmlAttribute(name = "sAddr")
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String sAddr;
@XmlAttribute(name = "bType", required = true)
protected TPredefinedBasicTypeEnum bType;
@XmlAttribute(name = "valKind")
protected TValKindEnum valKind;
@XmlAttribute(name = "type")
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String type;
@XmlAttribute(name = "count")
protected List<String> count;
@XmlAttribute(name = "valImport")
protected Boolean valImport;
/**
* Gets the value of the val property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the val property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getVal().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TVal }
*
*
*/
public List<TVal> getVal() {
if (val == null) {
val = new ArrayList<TVal>();
}
return this.val;
}
/**
* 获取labels属性的值。
*
* @return
* possible object is
* {@link TLabels }
*
*/
public TLabels getLabels() {
return labels;
}
/**
* 设置labels属性的值。
*
* @param value
* allowed object is
* {@link TLabels }
*
*/
public void setLabels(TLabels value) {
this.labels = value;
}
/**
* 获取name属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getName() {
return name;
}
/**
* 设置name属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setName(String value) {
this.name = value;
}
/**
* 获取sAddr属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getSAddr() {
return sAddr;
}
/**
* 设置sAddr属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setSAddr(String value) {
this.sAddr = value;
}
/**
* 获取bType属性的值。
*
* @return
* possible object is
* {@link TPredefinedBasicTypeEnum }
*
*/
public TPredefinedBasicTypeEnum getBType() {
return bType;
}
/**
* 设置bType属性的值。
*
* @param value
* allowed object is
* {@link TPredefinedBasicTypeEnum }
*
*/
public void setBType(TPredefinedBasicTypeEnum value) {
this.bType = value;
}
/**
* 获取valKind属性的值。
*
* @return
* possible object is
* {@link TValKindEnum }
*
*/
public TValKindEnum getValKind() {
if (valKind == null) {
return TValKindEnum.SET;
} else {
return valKind;
}
}
/**
* 设置valKind属性的值。
*
* @param value
* allowed object is
* {@link TValKindEnum }
*
*/
public void setValKind(TValKindEnum value) {
this.valKind = value;
}
/**
* 获取type属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getType() {
return type;
}
/**
* 设置type属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setType(String value) {
this.type = value;
}
/**
* Gets the value of the count property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the count property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getCount().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link String }
*
*
*/
public List<String> getCount() {
if (count == null) {
count = new ArrayList<String>();
}
return this.count;
}
/**
* 获取valImport属性的值。
*
* @return
* possible object is
* {@link Boolean }
*
*/
public boolean isValImport() {
if (valImport == null) {
return false;
} else {
return valImport;
}
}
/**
* 设置valImport属性的值。
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setValImport(Boolean value) {
this.valImport = value;
}
}

View File

@@ -0,0 +1,150 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlSchemaType;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.NormalizedStringAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
/**
* <p>tAbstractEqFuncSubFunc complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tAbstractEqFuncSubFunc"&gt;
* &lt;complexContent&gt;
* &lt;extension base="{http://www.iec.ch/61850/2003/SCL}tPowerSystemResource"&gt;
* &lt;sequence&gt;
* &lt;element name="GeneralEquipment" type="{http://www.iec.ch/61850/2003/SCL}tGeneralEquipment" maxOccurs="unbounded" minOccurs="0"/&gt;
* &lt;element name="EqSubFunction" type="{http://www.iec.ch/61850/2003/SCL}tEqSubFunction" maxOccurs="unbounded" minOccurs="0"/&gt;
* &lt;/sequence&gt;
* &lt;attribute name="type" type="{http://www.w3.org/2001/XMLSchema}normalizedString" /&gt;
* &lt;anyAttribute processContents='lax' namespace='##other'/&gt;
* &lt;/extension&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tAbstractEqFuncSubFunc", propOrder = {
"generalEquipment",
"eqSubFunction"
})
@XmlSeeAlso({
TEqFunction.class,
TEqSubFunction.class
})
public abstract class TAbstractEqFuncSubFunc
extends TPowerSystemResource
{
@XmlElement(name = "GeneralEquipment")
protected List<TGeneralEquipment> generalEquipment;
@XmlElement(name = "EqSubFunction")
protected List<TEqSubFunction> eqSubFunction;
@XmlAttribute(name = "type")
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
@XmlSchemaType(name = "normalizedString")
protected String type;
/**
* Gets the value of the generalEquipment property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the generalEquipment property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getGeneralEquipment().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TGeneralEquipment }
*
*
*/
public List<TGeneralEquipment> getGeneralEquipment() {
if (generalEquipment == null) {
generalEquipment = new ArrayList<TGeneralEquipment>();
}
return this.generalEquipment;
}
/**
* Gets the value of the eqSubFunction property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the eqSubFunction property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getEqSubFunction().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TEqSubFunction }
*
*
*/
public List<TEqSubFunction> getEqSubFunction() {
if (eqSubFunction == null) {
eqSubFunction = new ArrayList<TEqSubFunction>();
}
return this.eqSubFunction;
}
/**
* 获取type属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getType() {
return type;
}
/**
* 设置type属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setType(String value) {
this.type = value;
}
}

View File

@@ -0,0 +1,40 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;
/**
* <p>tAccessControl complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tAccessControl"&gt;
* &lt;complexContent&gt;
* &lt;extension base="{http://www.iec.ch/61850/2003/SCL}tAnyContentFromOtherNamespace"&gt;
* &lt;anyAttribute processContents='lax' namespace='##other'/&gt;
* &lt;/extension&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tAccessControl")
public class TAccessControl
extends TAnyContentFromOtherNamespace
{
}

View File

@@ -0,0 +1,436 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.NormalizedStringAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
/**
* <p>tAccessPoint complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tAccessPoint"&gt;
* &lt;complexContent&gt;
* &lt;extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming"&gt;
* &lt;sequence&gt;
* &lt;choice minOccurs="0"&gt;
* &lt;element name="Server" type="{http://www.iec.ch/61850/2003/SCL}tServer"/&gt;
* &lt;element ref="{http://www.iec.ch/61850/2003/SCL}LN" maxOccurs="unbounded"/&gt;
* &lt;element name="ServerAt" type="{http://www.iec.ch/61850/2003/SCL}tServerAt"/&gt;
* &lt;/choice&gt;
* &lt;element name="Services" type="{http://www.iec.ch/61850/2003/SCL}tServices" minOccurs="0"/&gt;
* &lt;element name="GOOSESecurity" type="{http://www.iec.ch/61850/2003/SCL}tCertificate" maxOccurs="7" minOccurs="0"/&gt;
* &lt;element name="SMVSecurity" type="{http://www.iec.ch/61850/2003/SCL}tCertificate" maxOccurs="7" minOccurs="0"/&gt;
* &lt;element name="Labels" type="{http://www.iec.ch/61850/2003/SCL}tLabels" minOccurs="0"/&gt;
* &lt;/sequence&gt;
* &lt;attGroup ref="{http://www.iec.ch/61850/2003/SCL}agUuid"/&gt;
* &lt;attribute name="name" use="required" type="{http://www.iec.ch/61850/2003/SCL}tAccessPointName" /&gt;
* &lt;attribute name="router" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" /&gt;
* &lt;attribute name="clock" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" /&gt;
* &lt;attribute name="kdc" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" /&gt;
* &lt;anyAttribute processContents='lax' namespace='##other'/&gt;
* &lt;/extension&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tAccessPoint", propOrder = {
"server",
"ln",
"serverAt",
"services",
"gooseSecurity",
"smvSecurity",
"labels"
})
public class TAccessPoint
extends TUnNaming
{
@XmlElement(name = "Server")
protected TServer server;
@XmlElement(name = "LN")
protected List<TLN> ln;
@XmlElement(name = "ServerAt")
protected TServerAt serverAt;
@XmlElement(name = "Services")
protected TServices services;
@XmlElement(name = "GOOSESecurity")
protected List<TCertificate> gooseSecurity;
@XmlElement(name = "SMVSecurity")
protected List<TCertificate> smvSecurity;
@XmlElement(name = "Labels")
protected TLabels labels;
@XmlAttribute(name = "name", required = true)
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String name;
@XmlAttribute(name = "router")
protected Boolean router;
@XmlAttribute(name = "clock")
protected Boolean clock;
@XmlAttribute(name = "kdc")
protected Boolean kdc;
@XmlAttribute(name = "uuid")
protected String uuid;
@XmlAttribute(name = "templateUuid")
protected String templateUuid;
/**
* 获取server属性的值。
*
* @return
* possible object is
* {@link TServer }
*
*/
public TServer getServer() {
return server;
}
/**
* 设置server属性的值。
*
* @param value
* allowed object is
* {@link TServer }
*
*/
public void setServer(TServer value) {
this.server = value;
}
/**
* Gets the value of the ln property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the ln property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getLN().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TLN }
*
*
*/
public List<TLN> getLN() {
if (ln == null) {
ln = new ArrayList<TLN>();
}
return this.ln;
}
/**
* 获取serverAt属性的值。
*
* @return
* possible object is
* {@link TServerAt }
*
*/
public TServerAt getServerAt() {
return serverAt;
}
/**
* 设置serverAt属性的值。
*
* @param value
* allowed object is
* {@link TServerAt }
*
*/
public void setServerAt(TServerAt value) {
this.serverAt = value;
}
/**
* 获取services属性的值。
*
* @return
* possible object is
* {@link TServices }
*
*/
public TServices getServices() {
return services;
}
/**
* 设置services属性的值。
*
* @param value
* allowed object is
* {@link TServices }
*
*/
public void setServices(TServices value) {
this.services = value;
}
/**
* Gets the value of the gooseSecurity property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the gooseSecurity property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getGOOSESecurity().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TCertificate }
*
*
*/
public List<TCertificate> getGOOSESecurity() {
if (gooseSecurity == null) {
gooseSecurity = new ArrayList<TCertificate>();
}
return this.gooseSecurity;
}
/**
* Gets the value of the smvSecurity property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the smvSecurity property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getSMVSecurity().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TCertificate }
*
*
*/
public List<TCertificate> getSMVSecurity() {
if (smvSecurity == null) {
smvSecurity = new ArrayList<TCertificate>();
}
return this.smvSecurity;
}
/**
* 获取labels属性的值。
*
* @return
* possible object is
* {@link TLabels }
*
*/
public TLabels getLabels() {
return labels;
}
/**
* 设置labels属性的值。
*
* @param value
* allowed object is
* {@link TLabels }
*
*/
public void setLabels(TLabels value) {
this.labels = value;
}
/**
* 获取name属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getName() {
return name;
}
/**
* 设置name属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setName(String value) {
this.name = value;
}
/**
* 获取router属性的值。
*
* @return
* possible object is
* {@link Boolean }
*
*/
public boolean isRouter() {
if (router == null) {
return false;
} else {
return router;
}
}
/**
* 设置router属性的值。
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setRouter(Boolean value) {
this.router = value;
}
/**
* 获取clock属性的值。
*
* @return
* possible object is
* {@link Boolean }
*
*/
public boolean isClock() {
if (clock == null) {
return false;
} else {
return clock;
}
}
/**
* 设置clock属性的值。
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setClock(Boolean value) {
this.clock = value;
}
/**
* 获取kdc属性的值。
*
* @return
* possible object is
* {@link Boolean }
*
*/
public boolean isKdc() {
if (kdc == null) {
return false;
} else {
return kdc;
}
}
/**
* 设置kdc属性的值。
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setKdc(Boolean value) {
this.kdc = value;
}
/**
* 获取uuid属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getUuid() {
return uuid;
}
/**
* 设置uuid属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setUuid(String value) {
this.uuid = value;
}
/**
* 获取templateUuid属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getTemplateUuid() {
return templateUuid;
}
/**
* 设置templateUuid属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setTemplateUuid(String value) {
this.templateUuid = value;
}
}

View File

@@ -0,0 +1,76 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
/**
* <p>tAddress complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tAddress"&gt;
* &lt;complexContent&gt;
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
* &lt;sequence&gt;
* &lt;element name="P" type="{http://www.iec.ch/61850/2003/SCL}tP" maxOccurs="unbounded"/&gt;
* &lt;/sequence&gt;
* &lt;/restriction&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tAddress", propOrder = {
"p"
})
public class TAddress {
@XmlElement(name = "P", required = true)
protected List<TP> p;
/**
* Gets the value of the p property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the p property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getP().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TP }
*
*
*/
public List<TP> getP() {
if (p == null) {
p = new ArrayList<TP>();
}
return this.p;
}
}

View File

@@ -0,0 +1,113 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAnyAttribute;
import javax.xml.bind.annotation.XmlAnyElement;
import javax.xml.bind.annotation.XmlMixed;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.bind.annotation.XmlType;
import javax.xml.namespace.QName;
import org.w3c.dom.Element;
/**
* <p>tAnyContentFromOtherNamespace complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tAnyContentFromOtherNamespace"&gt;
* &lt;complexContent&gt;
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
* &lt;sequence maxOccurs="unbounded" minOccurs="0"&gt;
* &lt;any processContents='lax' namespace='##other'/&gt;
* &lt;/sequence&gt;
* &lt;anyAttribute processContents='lax' namespace='##other'/&gt;
* &lt;/restriction&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tAnyContentFromOtherNamespace", propOrder = {
"content"
})
@XmlSeeAlso({
TText.class,
TPrivate.class,
THitem.class,
TAccessControl.class
})
public abstract class TAnyContentFromOtherNamespace {
@XmlMixed
@XmlAnyElement(lax = true)
protected List<Object> content;
@XmlAnyAttribute
private Map<QName, String> otherAttributes = new HashMap<QName, String>();
/**
* Gets the value of the content property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the content property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getContent().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link Element }
* {@link Object }
* {@link String }
*
*
*/
public List<Object> getContent() {
if (content == null) {
content = new ArrayList<Object>();
}
return this.content;
}
/**
* Gets a map that contains attributes that aren't bound to any typed property on this class.
*
* <p>
* the map is keyed by the name of the attribute and
* the value is the string value of the attribute.
*
* the map returned by this method is live, and you can add new attribute
* by updating the map directly. Because of this design, there's no setter.
*
*
* @return
* always non-null
*/
public Map<QName, String> getOtherAttributes() {
return otherAttributes;
}
}

View File

@@ -0,0 +1,384 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.NormalizedStringAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
/**
* <p>tAnyLN complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tAnyLN"&gt;
* &lt;complexContent&gt;
* &lt;extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming"&gt;
* &lt;sequence&gt;
* &lt;element name="DataSet" type="{http://www.iec.ch/61850/2003/SCL}tDataSet" maxOccurs="unbounded" minOccurs="0"/&gt;
* &lt;element name="ReportControl" type="{http://www.iec.ch/61850/2003/SCL}tReportControl" maxOccurs="unbounded" minOccurs="0"/&gt;
* &lt;element name="LogControl" type="{http://www.iec.ch/61850/2003/SCL}tLogControl" maxOccurs="unbounded" minOccurs="0"/&gt;
* &lt;element name="DOI" type="{http://www.iec.ch/61850/2003/SCL}tDOI" maxOccurs="unbounded" minOccurs="0"/&gt;
* &lt;element name="Inputs" type="{http://www.iec.ch/61850/2003/SCL}tInputs" minOccurs="0"/&gt;
* &lt;element name="Outputs" type="{http://www.iec.ch/61850/2003/SCL}tOutputs" minOccurs="0"/&gt;
* &lt;element name="Log" type="{http://www.iec.ch/61850/2003/SCL}tLog" maxOccurs="unbounded" minOccurs="0"/&gt;
* &lt;element name="Labels" type="{http://www.iec.ch/61850/2003/SCL}tLabels" minOccurs="0"/&gt;
* &lt;/sequence&gt;
* &lt;attGroup ref="{http://www.iec.ch/61850/2003/SCL}agUuid"/&gt;
* &lt;attribute name="lnType" use="required" type="{http://www.iec.ch/61850/2003/SCL}tName" /&gt;
* &lt;anyAttribute processContents='lax' namespace='##other'/&gt;
* &lt;/extension&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tAnyLN", propOrder = {
"dataSet",
"reportControl",
"logControl",
"doi",
"inputs",
"outputs",
"log",
"labels"
})
@XmlSeeAlso({
TLN.class,
TLN0 .class
})
public abstract class TAnyLN
extends TUnNaming
{
@XmlElement(name = "DataSet")
protected List<TDataSet> dataSet;
@XmlElement(name = "ReportControl")
protected List<TReportControl> reportControl;
@XmlElement(name = "LogControl")
protected List<TLogControl> logControl;
@XmlElement(name = "DOI")
protected List<TDOI> doi;
@XmlElement(name = "Inputs")
protected TInputs inputs;
@XmlElement(name = "Outputs")
protected TOutputs outputs;
@XmlElement(name = "Log")
protected List<TLog> log;
@XmlElement(name = "Labels")
protected TLabels labels;
@XmlAttribute(name = "lnType", required = true)
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String lnType;
@XmlAttribute(name = "uuid")
protected String uuid;
@XmlAttribute(name = "templateUuid")
protected String templateUuid;
/**
* Gets the value of the dataSet property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the dataSet property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getDataSet().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TDataSet }
*
*
*/
public List<TDataSet> getDataSet() {
if (dataSet == null) {
dataSet = new ArrayList<TDataSet>();
}
return this.dataSet;
}
/**
* Gets the value of the reportControl property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the reportControl property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getReportControl().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TReportControl }
*
*
*/
public List<TReportControl> getReportControl() {
if (reportControl == null) {
reportControl = new ArrayList<TReportControl>();
}
return this.reportControl;
}
/**
* Gets the value of the logControl property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the logControl property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getLogControl().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TLogControl }
*
*
*/
public List<TLogControl> getLogControl() {
if (logControl == null) {
logControl = new ArrayList<TLogControl>();
}
return this.logControl;
}
/**
* Gets the value of the doi property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the doi property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getDOI().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TDOI }
*
*
*/
public List<TDOI> getDOI() {
if (doi == null) {
doi = new ArrayList<TDOI>();
}
return this.doi;
}
/**
* 获取inputs属性的值。
*
* @return
* possible object is
* {@link TInputs }
*
*/
public TInputs getInputs() {
return inputs;
}
/**
* 设置inputs属性的值。
*
* @param value
* allowed object is
* {@link TInputs }
*
*/
public void setInputs(TInputs value) {
this.inputs = value;
}
/**
* 获取outputs属性的值。
*
* @return
* possible object is
* {@link TOutputs }
*
*/
public TOutputs getOutputs() {
return outputs;
}
/**
* 设置outputs属性的值。
*
* @param value
* allowed object is
* {@link TOutputs }
*
*/
public void setOutputs(TOutputs value) {
this.outputs = value;
}
/**
* Gets the value of the log property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the log property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getLog().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TLog }
*
*
*/
public List<TLog> getLog() {
if (log == null) {
log = new ArrayList<TLog>();
}
return this.log;
}
/**
* 获取labels属性的值。
*
* @return
* possible object is
* {@link TLabels }
*
*/
public TLabels getLabels() {
return labels;
}
/**
* 设置labels属性的值。
*
* @param value
* allowed object is
* {@link TLabels }
*
*/
public void setLabels(TLabels value) {
this.labels = value;
}
/**
* 获取lnType属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getLnType() {
return lnType;
}
/**
* 设置lnType属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setLnType(String value) {
this.lnType = value;
}
/**
* 获取uuid属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getUuid() {
return uuid;
}
/**
* 设置uuid属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setUuid(String value) {
this.uuid = value;
}
/**
* 获取templateUuid属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getTemplateUuid() {
return templateUuid;
}
/**
* 设置templateUuid属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setTemplateUuid(String value) {
this.templateUuid = value;
}
}

View File

@@ -0,0 +1,359 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlSchemaType;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
import javax.xml.bind.annotation.adapters.NormalizedStringAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
/**
* <p>tAssociation complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tAssociation"&gt;
* &lt;complexContent&gt;
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
* &lt;attGroup ref="{http://www.iec.ch/61850/2003/SCL}agLNRef"/&gt;
* &lt;attribute name="apRef" use="required" type="{http://www.iec.ch/61850/2003/SCL}tAccessPointName" /&gt;
* &lt;attribute name="kind" use="required" type="{http://www.iec.ch/61850/2003/SCL}tAssociationKindEnum" /&gt;
* &lt;attribute name="associationID" type="{http://www.iec.ch/61850/2003/SCL}tAssociationID" /&gt;
* &lt;attribute name="initiator" type="{http://www.iec.ch/61850/2003/SCL}tAssociationInitiator" default="client" /&gt;
* &lt;/restriction&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tAssociation")
public class TAssociation {
@XmlAttribute(name = "apRef", required = true)
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String apRef;
@XmlAttribute(name = "kind", required = true)
protected TAssociationKindEnum kind;
@XmlAttribute(name = "associationID")
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String associationID;
@XmlAttribute(name = "initiator")
protected TAssociationInitiator initiator;
@XmlAttribute(name = "prefix")
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String prefix;
@XmlAttribute(name = "lnClass", required = true)
protected List<String> lnClass;
@XmlAttribute(name = "lnInst", required = true)
protected String lnInst;
@XmlAttribute(name = "lnUuid")
protected String lnUuid;
@XmlAttribute(name = "iedName", required = true)
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
protected String iedName;
@XmlAttribute(name = "ldInst", required = true)
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String ldInst;
@XmlAttribute(name = "desc")
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
@XmlSchemaType(name = "normalizedString")
protected String desc;
/**
* 获取apRef属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getApRef() {
return apRef;
}
/**
* 设置apRef属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setApRef(String value) {
this.apRef = value;
}
/**
* 获取kind属性的值。
*
* @return
* possible object is
* {@link TAssociationKindEnum }
*
*/
public TAssociationKindEnum getKind() {
return kind;
}
/**
* 设置kind属性的值。
*
* @param value
* allowed object is
* {@link TAssociationKindEnum }
*
*/
public void setKind(TAssociationKindEnum value) {
this.kind = value;
}
/**
* 获取associationID属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getAssociationID() {
return associationID;
}
/**
* 设置associationID属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setAssociationID(String value) {
this.associationID = value;
}
/**
* 获取initiator属性的值。
*
* @return
* possible object is
* {@link TAssociationInitiator }
*
*/
public TAssociationInitiator getInitiator() {
if (initiator == null) {
return TAssociationInitiator.CLIENT;
} else {
return initiator;
}
}
/**
* 设置initiator属性的值。
*
* @param value
* allowed object is
* {@link TAssociationInitiator }
*
*/
public void setInitiator(TAssociationInitiator value) {
this.initiator = value;
}
/**
* 获取prefix属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getPrefix() {
if (prefix == null) {
return "";
} else {
return prefix;
}
}
/**
* 设置prefix属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setPrefix(String value) {
this.prefix = value;
}
/**
* Gets the value of the lnClass property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the lnClass property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getLnClass().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link String }
*
*
*/
public List<String> getLnClass() {
if (lnClass == null) {
lnClass = new ArrayList<String>();
}
return this.lnClass;
}
/**
* 获取lnInst属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getLnInst() {
return lnInst;
}
/**
* 设置lnInst属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setLnInst(String value) {
this.lnInst = value;
}
/**
* 获取lnUuid属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getLnUuid() {
return lnUuid;
}
/**
* 设置lnUuid属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setLnUuid(String value) {
this.lnUuid = value;
}
/**
* 获取iedName属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getIedName() {
return iedName;
}
/**
* 设置iedName属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setIedName(String value) {
this.iedName = value;
}
/**
* 获取ldInst属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getLdInst() {
return ldInst;
}
/**
* 设置ldInst属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setLdInst(String value) {
this.ldInst = value;
}
/**
* 获取desc属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getDesc() {
if (desc == null) {
return "";
} else {
return desc;
}
}
/**
* 设置desc属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setDesc(String value) {
this.desc = value;
}
}

View File

@@ -0,0 +1,58 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import javax.xml.bind.annotation.XmlEnum;
import javax.xml.bind.annotation.XmlEnumValue;
import javax.xml.bind.annotation.XmlType;
/**
* <p>tAssociationInitiator的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
* <p>
* <pre>
* &lt;simpleType name="tAssociationInitiator"&gt;
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}token"&gt;
* &lt;enumeration value="client"/&gt;
* &lt;enumeration value="server"/&gt;
* &lt;/restriction&gt;
* &lt;/simpleType&gt;
* </pre>
*
*/
@XmlType(name = "tAssociationInitiator")
@XmlEnum
public enum TAssociationInitiator {
@XmlEnumValue("client")
CLIENT("client"),
@XmlEnumValue("server")
SERVER("server");
private final String value;
TAssociationInitiator(String v) {
value = v;
}
public String value() {
return value;
}
public static TAssociationInitiator fromValue(String v) {
for (TAssociationInitiator c: TAssociationInitiator.values()) {
if (c.value.equals(v)) {
return c;
}
}
throw new IllegalArgumentException(v);
}
}

View File

@@ -0,0 +1,58 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import javax.xml.bind.annotation.XmlEnum;
import javax.xml.bind.annotation.XmlEnumValue;
import javax.xml.bind.annotation.XmlType;
/**
* <p>tAssociationKindEnum的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
* <p>
* <pre>
* &lt;simpleType name="tAssociationKindEnum"&gt;
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}token"&gt;
* &lt;enumeration value="pre-established"/&gt;
* &lt;enumeration value="predefined"/&gt;
* &lt;/restriction&gt;
* &lt;/simpleType&gt;
* </pre>
*
*/
@XmlType(name = "tAssociationKindEnum")
@XmlEnum
public enum TAssociationKindEnum {
@XmlEnumValue("pre-established")
PRE_ESTABLISHED("pre-established"),
@XmlEnumValue("predefined")
PREDEFINED("predefined");
private final String value;
TAssociationKindEnum(String v) {
value = v;
}
public String value() {
return value;
}
public static TAssociationKindEnum fromValue(String v) {
for (TAssociationKindEnum c: TAssociationKindEnum.values()) {
if (c.value.equals(v)) {
return c;
}
}
throw new IllegalArgumentException(v);
}
}

View File

@@ -0,0 +1,67 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import javax.xml.bind.annotation.XmlEnum;
import javax.xml.bind.annotation.XmlEnumValue;
import javax.xml.bind.annotation.XmlType;
/**
* <p>tAuthenticationEnum的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
* <p>
* <pre>
* &lt;simpleType name="tAuthenticationEnum"&gt;
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}Name"&gt;
* &lt;enumeration value="none"/&gt;
* &lt;enumeration value="password"/&gt;
* &lt;enumeration value="weak"/&gt;
* &lt;enumeration value="strong"/&gt;
* &lt;enumeration value="certificate"/&gt;
* &lt;/restriction&gt;
* &lt;/simpleType&gt;
* </pre>
*
*/
@XmlType(name = "tAuthenticationEnum")
@XmlEnum
public enum TAuthenticationEnum {
@XmlEnumValue("none")
NONE("none"),
@XmlEnumValue("password")
PASSWORD("password"),
@XmlEnumValue("weak")
WEAK("weak"),
@XmlEnumValue("strong")
STRONG("strong"),
@XmlEnumValue("certificate")
CERTIFICATE("certificate");
private final String value;
TAuthenticationEnum(String v) {
value = v;
}
public String value() {
return value;
}
public static TAuthenticationEnum fromValue(String v) {
for (TAuthenticationEnum c: TAuthenticationEnum.values()) {
if (c.value.equals(v)) {
return c;
}
}
throw new IllegalArgumentException(v);
}
}

View File

@@ -0,0 +1,40 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;
/**
* <p>tBDA complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tBDA"&gt;
* &lt;complexContent&gt;
* &lt;extension base="{http://www.iec.ch/61850/2003/SCL}tAbstractDataAttribute"&gt;
* &lt;anyAttribute processContents='lax' namespace='##other'/&gt;
* &lt;/extension&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tBDA")
public class TBDA
extends TAbstractDataAttribute
{
}

View File

@@ -0,0 +1,176 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAnyAttribute;
import javax.xml.bind.annotation.XmlAnyElement;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.bind.annotation.XmlType;
import javax.xml.namespace.QName;
import org.w3c.dom.Element;
/**
* <p>tBaseElement complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tBaseElement"&gt;
* &lt;complexContent&gt;
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
* &lt;sequence&gt;
* &lt;any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/&gt;
* &lt;element name="Text" type="{http://www.iec.ch/61850/2003/SCL}tText" minOccurs="0"/&gt;
* &lt;element name="Private" type="{http://www.iec.ch/61850/2003/SCL}tPrivate" maxOccurs="unbounded" minOccurs="0"/&gt;
* &lt;/sequence&gt;
* &lt;anyAttribute processContents='lax' namespace='##other'/&gt;
* &lt;/restriction&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tBaseElement", propOrder = {
"any",
"text",
"_private"
})
@XmlSeeAlso({
THeaderSclRef.class,
TIEDSclRef.class,
TMinRequestedSCDFiles.class,
TDORef.class,
TNaming.class,
TIDNaming.class,
SCL.class,
TUnNaming.class
})
public abstract class TBaseElement {
@XmlAnyElement(lax = true)
protected List<Object> any;
@XmlElement(name = "Text")
protected TText text;
@XmlElement(name = "Private")
protected List<TPrivate> _private;
@XmlAnyAttribute
private Map<QName, String> otherAttributes = new HashMap<QName, String>();
/**
* Gets the value of the any property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the any property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getAny().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link Element }
* {@link Object }
*
*
*/
public List<Object> getAny() {
if (any == null) {
any = new ArrayList<Object>();
}
return this.any;
}
/**
* 获取text属性的值。
*
* @return
* possible object is
* {@link TText }
*
*/
public TText getText() {
return text;
}
/**
* 设置text属性的值。
*
* @param value
* allowed object is
* {@link TText }
*
*/
public void setText(TText value) {
this.text = value;
}
/**
* Gets the value of the private property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the private property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getPrivate().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TPrivate }
*
*
*/
public List<TPrivate> getPrivate() {
if (_private == null) {
_private = new ArrayList<TPrivate>();
}
return this._private;
}
/**
* Gets a map that contains attributes that aren't bound to any typed property on this class.
*
* <p>
* the map is keyed by the name of the attribute and
* the value is the string value of the attribute.
*
* the map returned by this method is live, and you can add new attribute
* by updating the map directly. Because of this design, there's no setter.
*
*
* @return
* always non-null
*/
public Map<QName, String> getOtherAttributes() {
return otherAttributes;
}
}

View File

@@ -0,0 +1,145 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
/**
* <p>tBay complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tBay"&gt;
* &lt;complexContent&gt;
* &lt;extension base="{http://www.iec.ch/61850/2003/SCL}tEquipmentContainer"&gt;
* &lt;sequence&gt;
* &lt;element name="ConductingEquipment" type="{http://www.iec.ch/61850/2003/SCL}tConductingEquipment" maxOccurs="unbounded" minOccurs="0"/&gt;
* &lt;element name="ConnectivityNode" type="{http://www.iec.ch/61850/2003/SCL}tConnectivityNode" maxOccurs="unbounded" minOccurs="0"/&gt;
* &lt;element name="Function" type="{http://www.iec.ch/61850/2003/SCL}tFunction" maxOccurs="unbounded" minOccurs="0"/&gt;
* &lt;/sequence&gt;
* &lt;anyAttribute processContents='lax' namespace='##other'/&gt;
* &lt;/extension&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tBay", propOrder = {
"conductingEquipment",
"connectivityNode",
"function"
})
public class TBay
extends TEquipmentContainer
{
@XmlElement(name = "ConductingEquipment")
protected List<TConductingEquipment> conductingEquipment;
@XmlElement(name = "ConnectivityNode")
protected List<TConnectivityNode> connectivityNode;
@XmlElement(name = "Function")
protected List<TFunction> function;
/**
* Gets the value of the conductingEquipment property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the conductingEquipment property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getConductingEquipment().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TConductingEquipment }
*
*
*/
public List<TConductingEquipment> getConductingEquipment() {
if (conductingEquipment == null) {
conductingEquipment = new ArrayList<TConductingEquipment>();
}
return this.conductingEquipment;
}
/**
* Gets the value of the connectivityNode property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the connectivityNode property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getConnectivityNode().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TConnectivityNode }
*
*
*/
public List<TConnectivityNode> getConnectivityNode() {
if (connectivityNode == null) {
connectivityNode = new ArrayList<TConnectivityNode>();
}
return this.connectivityNode;
}
/**
* Gets the value of the function property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the function property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getFunction().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TFunction }
*
*
*/
public List<TFunction> getFunction() {
if (function == null) {
function = new ArrayList<TFunction>();
}
return this.function;
}
}

View File

@@ -0,0 +1,136 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import java.math.BigDecimal;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlSchemaType;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.XmlValue;
import javax.xml.bind.annotation.adapters.NormalizedStringAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
/**
* <p>tBitRateInMbPerSec complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tBitRateInMbPerSec"&gt;
* &lt;simpleContent&gt;
* &lt;extension base="&lt;http://www.w3.org/2001/XMLSchema&gt;decimal"&gt;
* &lt;attribute name="unit" type="{http://www.w3.org/2001/XMLSchema}normalizedString" fixed="b/s" /&gt;
* &lt;attribute name="multiplier" type="{http://www.iec.ch/61850/2003/SCL}tUnitMultiplierEnum" fixed="M" /&gt;
* &lt;/extension&gt;
* &lt;/simpleContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tBitRateInMbPerSec", propOrder = {
"value"
})
public class TBitRateInMbPerSec {
@XmlValue
protected BigDecimal value;
@XmlAttribute(name = "unit")
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
@XmlSchemaType(name = "normalizedString")
protected String unit;
@XmlAttribute(name = "multiplier")
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String multiplier;
/**
* 获取value属性的值。
*
* @return
* possible object is
* {@link BigDecimal }
*
*/
public BigDecimal getValue() {
return value;
}
/**
* 设置value属性的值。
*
* @param value
* allowed object is
* {@link BigDecimal }
*
*/
public void setValue(BigDecimal value) {
this.value = value;
}
/**
* 获取unit属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getUnit() {
if (unit == null) {
return "b/s";
} else {
return unit;
}
}
/**
* 设置unit属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setUnit(String value) {
this.unit = value;
}
/**
* 获取multiplier属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getMultiplier() {
if (multiplier == null) {
return "M";
} else {
return multiplier;
}
}
/**
* 设置multiplier属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setMultiplier(String value) {
this.multiplier = value;
}
}

View File

@@ -0,0 +1,110 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.NormalizedStringAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
/**
* <p>tCert complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tCert"&gt;
* &lt;complexContent&gt;
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
* &lt;attribute name="commonName" use="required"&gt;
* &lt;simpleType&gt;
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}normalizedString"&gt;
* &lt;minLength value="4"/&gt;
* &lt;pattern value="none"/&gt;
* &lt;pattern value="CN=.+"/&gt;
* &lt;/restriction&gt;
* &lt;/simpleType&gt;
* &lt;/attribute&gt;
* &lt;attribute name="idHierarchy" use="required"&gt;
* &lt;simpleType&gt;
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}normalizedString"&gt;
* &lt;minLength value="1"/&gt;
* &lt;/restriction&gt;
* &lt;/simpleType&gt;
* &lt;/attribute&gt;
* &lt;/restriction&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tCert")
public class TCert {
@XmlAttribute(name = "commonName", required = true)
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String commonName;
@XmlAttribute(name = "idHierarchy", required = true)
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String idHierarchy;
/**
* 获取commonName属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getCommonName() {
return commonName;
}
/**
* 设置commonName属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setCommonName(String value) {
this.commonName = value;
}
/**
* 获取idHierarchy属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getIdHierarchy() {
return idHierarchy;
}
/**
* 设置idHierarchy属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setIdHierarchy(String value) {
this.idHierarchy = value;
}
}

View File

@@ -0,0 +1,167 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlSchemaType;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.NormalizedStringAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
/**
* <p>tCertificate complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tCertificate"&gt;
* &lt;complexContent&gt;
* &lt;extension base="{http://www.iec.ch/61850/2003/SCL}tNaming"&gt;
* &lt;sequence&gt;
* &lt;element name="Subject" type="{http://www.iec.ch/61850/2003/SCL}tCert"/&gt;
* &lt;element name="IssuerName" type="{http://www.iec.ch/61850/2003/SCL}tCert"/&gt;
* &lt;/sequence&gt;
* &lt;attribute name="xferNumber" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" /&gt;
* &lt;attribute name="serialNumber" use="required"&gt;
* &lt;simpleType&gt;
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}normalizedString"&gt;
* &lt;minLength value="1"/&gt;
* &lt;pattern value="[0-9]+"/&gt;
* &lt;/restriction&gt;
* &lt;/simpleType&gt;
* &lt;/attribute&gt;
* &lt;anyAttribute processContents='lax' namespace='##other'/&gt;
* &lt;/extension&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tCertificate", propOrder = {
"subject",
"issuerName"
})
public class TCertificate
extends TNaming
{
@XmlElement(name = "Subject", required = true)
protected TCert subject;
@XmlElement(name = "IssuerName", required = true)
protected TCert issuerName;
@XmlAttribute(name = "xferNumber")
@XmlSchemaType(name = "unsignedInt")
protected Long xferNumber;
@XmlAttribute(name = "serialNumber", required = true)
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String serialNumber;
/**
* 获取subject属性的值。
*
* @return
* possible object is
* {@link TCert }
*
*/
public TCert getSubject() {
return subject;
}
/**
* 设置subject属性的值。
*
* @param value
* allowed object is
* {@link TCert }
*
*/
public void setSubject(TCert value) {
this.subject = value;
}
/**
* 获取issuerName属性的值。
*
* @return
* possible object is
* {@link TCert }
*
*/
public TCert getIssuerName() {
return issuerName;
}
/**
* 设置issuerName属性的值。
*
* @param value
* allowed object is
* {@link TCert }
*
*/
public void setIssuerName(TCert value) {
this.issuerName = value;
}
/**
* 获取xferNumber属性的值。
*
* @return
* possible object is
* {@link Long }
*
*/
public Long getXferNumber() {
return xferNumber;
}
/**
* 设置xferNumber属性的值。
*
* @param value
* allowed object is
* {@link Long }
*
*/
public void setXferNumber(Long value) {
this.xferNumber = value;
}
/**
* 获取serialNumber属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getSerialNumber() {
return serialNumber;
}
/**
* 设置serialNumber属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setSerialNumber(String value) {
this.serialNumber = value;
}
}

View File

@@ -0,0 +1,273 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlSchemaType;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
import javax.xml.bind.annotation.adapters.NormalizedStringAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
/**
* <p>tClientLN complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tClientLN"&gt;
* &lt;complexContent&gt;
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
* &lt;attGroup ref="{http://www.iec.ch/61850/2003/SCL}agLNRef"/&gt;
* &lt;attribute name="apRef" use="required" type="{http://www.iec.ch/61850/2003/SCL}tAccessPointName" /&gt;
* &lt;/restriction&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tClientLN")
public class TClientLN {
@XmlAttribute(name = "apRef", required = true)
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String apRef;
@XmlAttribute(name = "prefix")
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String prefix;
@XmlAttribute(name = "lnClass", required = true)
protected List<String> lnClass;
@XmlAttribute(name = "lnInst", required = true)
protected String lnInst;
@XmlAttribute(name = "lnUuid")
protected String lnUuid;
@XmlAttribute(name = "iedName", required = true)
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
protected String iedName;
@XmlAttribute(name = "ldInst", required = true)
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String ldInst;
@XmlAttribute(name = "desc")
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
@XmlSchemaType(name = "normalizedString")
protected String desc;
/**
* 获取apRef属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getApRef() {
return apRef;
}
/**
* 设置apRef属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setApRef(String value) {
this.apRef = value;
}
/**
* 获取prefix属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getPrefix() {
if (prefix == null) {
return "";
} else {
return prefix;
}
}
/**
* 设置prefix属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setPrefix(String value) {
this.prefix = value;
}
/**
* Gets the value of the lnClass property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the lnClass property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getLnClass().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link String }
*
*
*/
public List<String> getLnClass() {
if (lnClass == null) {
lnClass = new ArrayList<String>();
}
return this.lnClass;
}
/**
* 获取lnInst属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getLnInst() {
return lnInst;
}
/**
* 设置lnInst属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setLnInst(String value) {
this.lnInst = value;
}
/**
* 获取lnUuid属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getLnUuid() {
return lnUuid;
}
/**
* 设置lnUuid属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setLnUuid(String value) {
this.lnUuid = value;
}
/**
* 获取iedName属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getIedName() {
return iedName;
}
/**
* 设置iedName属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setIedName(String value) {
this.iedName = value;
}
/**
* 获取ldInst属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getLdInst() {
return ldInst;
}
/**
* 设置ldInst属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setLdInst(String value) {
this.ldInst = value;
}
/**
* 获取desc属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getDesc() {
if (desc == null) {
return "";
} else {
return desc;
}
}
/**
* 设置desc属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setDesc(String value) {
this.desc = value;
}
}

View File

@@ -0,0 +1,623 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
/**
* <p>tClientServices complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tClientServices"&gt;
* &lt;complexContent&gt;
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
* &lt;sequence&gt;
* &lt;element name="TimeSyncProt" type="{http://www.iec.ch/61850/2003/SCL}tTimeSyncProt" minOccurs="0"/&gt;
* &lt;element name="GOOSEMcSecurity" type="{http://www.iec.ch/61850/2003/SCL}tMcSecurity" minOccurs="0"/&gt;
* &lt;element name="SVMcSecurity" type="{http://www.iec.ch/61850/2003/SCL}tMcSecurity" minOccurs="0"/&gt;
* &lt;element name="Security" type="{http://www.iec.ch/61850/2003/SCL}tSecurity" minOccurs="0"/&gt;
* &lt;/sequence&gt;
* &lt;attribute name="goose" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" /&gt;
* &lt;attribute name="gsse" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" /&gt;
* &lt;attribute name="bufReport" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" /&gt;
* &lt;attribute name="unbufReport" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" /&gt;
* &lt;attribute name="readLog" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" /&gt;
* &lt;attribute name="sv" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" /&gt;
* &lt;attribute name="supportsLdName" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" /&gt;
* &lt;attribute name="maxAttributes"&gt;
* &lt;simpleType&gt;
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}unsignedInt"&gt;
* &lt;/restriction&gt;
* &lt;/simpleType&gt;
* &lt;/attribute&gt;
* &lt;attribute name="maxReports"&gt;
* &lt;simpleType&gt;
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}unsignedInt"&gt;
* &lt;/restriction&gt;
* &lt;/simpleType&gt;
* &lt;/attribute&gt;
* &lt;attribute name="maxGOOSE"&gt;
* &lt;simpleType&gt;
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}unsignedInt"&gt;
* &lt;/restriction&gt;
* &lt;/simpleType&gt;
* &lt;/attribute&gt;
* &lt;attribute name="maxSMV"&gt;
* &lt;simpleType&gt;
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}unsignedInt"&gt;
* &lt;/restriction&gt;
* &lt;/simpleType&gt;
* &lt;/attribute&gt;
* &lt;attribute name="rGOOSE" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" /&gt;
* &lt;attribute name="rSV" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" /&gt;
* &lt;attribute name="noIctBinding" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" /&gt;
* &lt;attribute name="acceptServerInitiatedAssociation" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" /&gt;
* &lt;/restriction&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tClientServices", propOrder = {
"timeSyncProt",
"gooseMcSecurity",
"svMcSecurity",
"security"
})
public class TClientServices {
@XmlElement(name = "TimeSyncProt")
protected TTimeSyncProt timeSyncProt;
@XmlElement(name = "GOOSEMcSecurity")
protected TMcSecurity gooseMcSecurity;
@XmlElement(name = "SVMcSecurity")
protected TMcSecurity svMcSecurity;
@XmlElement(name = "Security")
protected TSecurity security;
@XmlAttribute(name = "goose")
protected Boolean goose;
@XmlAttribute(name = "gsse")
protected Boolean gsse;
@XmlAttribute(name = "bufReport")
protected Boolean bufReport;
@XmlAttribute(name = "unbufReport")
protected Boolean unbufReport;
@XmlAttribute(name = "readLog")
protected Boolean readLog;
@XmlAttribute(name = "sv")
protected Boolean sv;
@XmlAttribute(name = "supportsLdName")
protected Boolean supportsLdName;
@XmlAttribute(name = "maxAttributes")
protected Long maxAttributes;
@XmlAttribute(name = "maxReports")
protected Long maxReports;
@XmlAttribute(name = "maxGOOSE")
protected Long maxGOOSE;
@XmlAttribute(name = "maxSMV")
protected Long maxSMV;
@XmlAttribute(name = "rGOOSE")
protected Boolean rgoose;
@XmlAttribute(name = "rSV")
protected Boolean rsv;
@XmlAttribute(name = "noIctBinding")
protected Boolean noIctBinding;
@XmlAttribute(name = "acceptServerInitiatedAssociation")
protected Boolean acceptServerInitiatedAssociation;
/**
* 获取timeSyncProt属性的值。
*
* @return
* possible object is
* {@link TTimeSyncProt }
*
*/
public TTimeSyncProt getTimeSyncProt() {
return timeSyncProt;
}
/**
* 设置timeSyncProt属性的值。
*
* @param value
* allowed object is
* {@link TTimeSyncProt }
*
*/
public void setTimeSyncProt(TTimeSyncProt value) {
this.timeSyncProt = value;
}
/**
* 获取gooseMcSecurity属性的值。
*
* @return
* possible object is
* {@link TMcSecurity }
*
*/
public TMcSecurity getGOOSEMcSecurity() {
return gooseMcSecurity;
}
/**
* 设置gooseMcSecurity属性的值。
*
* @param value
* allowed object is
* {@link TMcSecurity }
*
*/
public void setGOOSEMcSecurity(TMcSecurity value) {
this.gooseMcSecurity = value;
}
/**
* 获取svMcSecurity属性的值。
*
* @return
* possible object is
* {@link TMcSecurity }
*
*/
public TMcSecurity getSVMcSecurity() {
return svMcSecurity;
}
/**
* 设置svMcSecurity属性的值。
*
* @param value
* allowed object is
* {@link TMcSecurity }
*
*/
public void setSVMcSecurity(TMcSecurity value) {
this.svMcSecurity = value;
}
/**
* 获取security属性的值。
*
* @return
* possible object is
* {@link TSecurity }
*
*/
public TSecurity getSecurity() {
return security;
}
/**
* 设置security属性的值。
*
* @param value
* allowed object is
* {@link TSecurity }
*
*/
public void setSecurity(TSecurity value) {
this.security = value;
}
/**
* 获取goose属性的值。
*
* @return
* possible object is
* {@link Boolean }
*
*/
public boolean isGoose() {
if (goose == null) {
return false;
} else {
return goose;
}
}
/**
* 设置goose属性的值。
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setGoose(Boolean value) {
this.goose = value;
}
/**
* 获取gsse属性的值。
*
* @return
* possible object is
* {@link Boolean }
*
*/
public boolean isGsse() {
if (gsse == null) {
return false;
} else {
return gsse;
}
}
/**
* 设置gsse属性的值。
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setGsse(Boolean value) {
this.gsse = value;
}
/**
* 获取bufReport属性的值。
*
* @return
* possible object is
* {@link Boolean }
*
*/
public boolean isBufReport() {
if (bufReport == null) {
return false;
} else {
return bufReport;
}
}
/**
* 设置bufReport属性的值。
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setBufReport(Boolean value) {
this.bufReport = value;
}
/**
* 获取unbufReport属性的值。
*
* @return
* possible object is
* {@link Boolean }
*
*/
public boolean isUnbufReport() {
if (unbufReport == null) {
return false;
} else {
return unbufReport;
}
}
/**
* 设置unbufReport属性的值。
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setUnbufReport(Boolean value) {
this.unbufReport = value;
}
/**
* 获取readLog属性的值。
*
* @return
* possible object is
* {@link Boolean }
*
*/
public boolean isReadLog() {
if (readLog == null) {
return false;
} else {
return readLog;
}
}
/**
* 设置readLog属性的值。
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setReadLog(Boolean value) {
this.readLog = value;
}
/**
* 获取sv属性的值。
*
* @return
* possible object is
* {@link Boolean }
*
*/
public boolean isSv() {
if (sv == null) {
return false;
} else {
return sv;
}
}
/**
* 设置sv属性的值。
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setSv(Boolean value) {
this.sv = value;
}
/**
* 获取supportsLdName属性的值。
*
* @return
* possible object is
* {@link Boolean }
*
*/
public boolean isSupportsLdName() {
if (supportsLdName == null) {
return false;
} else {
return supportsLdName;
}
}
/**
* 设置supportsLdName属性的值。
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setSupportsLdName(Boolean value) {
this.supportsLdName = value;
}
/**
* 获取maxAttributes属性的值。
*
* @return
* possible object is
* {@link Long }
*
*/
public Long getMaxAttributes() {
return maxAttributes;
}
/**
* 设置maxAttributes属性的值。
*
* @param value
* allowed object is
* {@link Long }
*
*/
public void setMaxAttributes(Long value) {
this.maxAttributes = value;
}
/**
* 获取maxReports属性的值。
*
* @return
* possible object is
* {@link Long }
*
*/
public Long getMaxReports() {
return maxReports;
}
/**
* 设置maxReports属性的值。
*
* @param value
* allowed object is
* {@link Long }
*
*/
public void setMaxReports(Long value) {
this.maxReports = value;
}
/**
* 获取maxGOOSE属性的值。
*
* @return
* possible object is
* {@link Long }
*
*/
public Long getMaxGOOSE() {
return maxGOOSE;
}
/**
* 设置maxGOOSE属性的值。
*
* @param value
* allowed object is
* {@link Long }
*
*/
public void setMaxGOOSE(Long value) {
this.maxGOOSE = value;
}
/**
* 获取maxSMV属性的值。
*
* @return
* possible object is
* {@link Long }
*
*/
public Long getMaxSMV() {
return maxSMV;
}
/**
* 设置maxSMV属性的值。
*
* @param value
* allowed object is
* {@link Long }
*
*/
public void setMaxSMV(Long value) {
this.maxSMV = value;
}
/**
* 获取rgoose属性的值。
*
* @return
* possible object is
* {@link Boolean }
*
*/
public boolean isRGOOSE() {
if (rgoose == null) {
return false;
} else {
return rgoose;
}
}
/**
* 设置rgoose属性的值。
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setRGOOSE(Boolean value) {
this.rgoose = value;
}
/**
* 获取rsv属性的值。
*
* @return
* possible object is
* {@link Boolean }
*
*/
public boolean isRSV() {
if (rsv == null) {
return false;
} else {
return rsv;
}
}
/**
* 设置rsv属性的值。
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setRSV(Boolean value) {
this.rsv = value;
}
/**
* 获取noIctBinding属性的值。
*
* @return
* possible object is
* {@link Boolean }
*
*/
public boolean isNoIctBinding() {
if (noIctBinding == null) {
return false;
} else {
return noIctBinding;
}
}
/**
* 设置noIctBinding属性的值。
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setNoIctBinding(Boolean value) {
this.noIctBinding = value;
}
/**
* 获取acceptServerInitiatedAssociation属性的值。
*
* @return
* possible object is
* {@link Boolean }
*
*/
public boolean isAcceptServerInitiatedAssociation() {
if (acceptServerInitiatedAssociation == null) {
return false;
} else {
return acceptServerInitiatedAssociation;
}
}
/**
* 设置acceptServerInitiatedAssociation属性的值。
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setAcceptServerInitiatedAssociation(Boolean value) {
this.acceptServerInitiatedAssociation = value;
}
}

View File

@@ -0,0 +1,71 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlType;
/**
* <p>tCommProt complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tCommProt"&gt;
* &lt;complexContent&gt;
* &lt;extension base="{http://www.iec.ch/61850/2003/SCL}tServiceYesNo"&gt;
* &lt;attribute name="ipv6" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" /&gt;
* &lt;/extension&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tCommProt")
public class TCommProt
extends TServiceYesNo
{
@XmlAttribute(name = "ipv6")
protected Boolean ipv6;
/**
* 获取ipv6属性的值。
*
* @return
* possible object is
* {@link Boolean }
*
*/
public boolean isIpv6() {
if (ipv6 == null) {
return false;
} else {
return ipv6;
}
}
/**
* 设置ipv6属性的值。
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setIpv6(Boolean value) {
this.ipv6 = value;
}
}

View File

@@ -0,0 +1,79 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
/**
* <p>tCommunication complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tCommunication"&gt;
* &lt;complexContent&gt;
* &lt;extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming"&gt;
* &lt;sequence&gt;
* &lt;element name="SubNetwork" type="{http://www.iec.ch/61850/2003/SCL}tSubNetwork" maxOccurs="unbounded"/&gt;
* &lt;/sequence&gt;
* &lt;anyAttribute processContents='lax' namespace='##other'/&gt;
* &lt;/extension&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tCommunication", propOrder = {
"subNetwork"
})
public class TCommunication
extends TUnNaming
{
@XmlElement(name = "SubNetwork", required = true)
protected List<TSubNetwork> subNetwork;
/**
* Gets the value of the subNetwork property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the subNetwork property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getSubNetwork().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TSubNetwork }
*
*
*/
public List<TSubNetwork> getSubNetwork() {
if (subNetwork == null) {
subNetwork = new ArrayList<TSubNetwork>();
}
return this.subNetwork;
}
}

View File

@@ -0,0 +1,107 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
/**
* <p>tConductingEquipment complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tConductingEquipment"&gt;
* &lt;complexContent&gt;
* &lt;extension base="{http://www.iec.ch/61850/2003/SCL}tAbstractConductingEquipment"&gt;
* &lt;sequence&gt;
* &lt;element name="EqFunction" type="{http://www.iec.ch/61850/2003/SCL}tEqFunction" maxOccurs="unbounded" minOccurs="0"/&gt;
* &lt;/sequence&gt;
* &lt;attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tCommonConductingEquipmentEnum" /&gt;
* &lt;anyAttribute processContents='lax' namespace='##other'/&gt;
* &lt;/extension&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tConductingEquipment", propOrder = {
"eqFunction"
})
public class TConductingEquipment
extends TAbstractConductingEquipment
{
@XmlElement(name = "EqFunction")
protected List<TEqFunction> eqFunction;
@XmlAttribute(name = "type", required = true)
protected String type;
/**
* Gets the value of the eqFunction property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the eqFunction property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getEqFunction().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TEqFunction }
*
*
*/
public List<TEqFunction> getEqFunction() {
if (eqFunction == null) {
eqFunction = new ArrayList<TEqFunction>();
}
return this.eqFunction;
}
/**
* 获取type属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getType() {
return type;
}
/**
* 设置type属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setType(String value) {
this.type = value;
}
}

View File

@@ -0,0 +1,100 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlType;
/**
* <p>tConfLNs complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tConfLNs"&gt;
* &lt;complexContent&gt;
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
* &lt;attribute name="fixPrefix" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" /&gt;
* &lt;attribute name="fixLnInst" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" /&gt;
* &lt;/restriction&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tConfLNs")
public class TConfLNs {
@XmlAttribute(name = "fixPrefix")
protected Boolean fixPrefix;
@XmlAttribute(name = "fixLnInst")
protected Boolean fixLnInst;
/**
* 获取fixPrefix属性的值。
*
* @return
* possible object is
* {@link Boolean }
*
*/
public boolean isFixPrefix() {
if (fixPrefix == null) {
return false;
} else {
return fixPrefix;
}
}
/**
* 设置fixPrefix属性的值。
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setFixPrefix(Boolean value) {
this.fixPrefix = value;
}
/**
* 获取fixLnInst属性的值。
*
* @return
* possible object is
* {@link Boolean }
*
*/
public boolean isFixLnInst() {
if (fixLnInst == null) {
return false;
} else {
return fixLnInst;
}
}
/**
* 设置fixLnInst属性的值。
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setFixLnInst(Boolean value) {
this.fixLnInst = value;
}
}

View File

@@ -0,0 +1,287 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
import javax.xml.bind.annotation.adapters.NormalizedStringAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
/**
* <p>tConnectedAP complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tConnectedAP"&gt;
* &lt;complexContent&gt;
* &lt;extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming"&gt;
* &lt;sequence&gt;
* &lt;element name="Address" type="{http://www.iec.ch/61850/2003/SCL}tAddress" minOccurs="0"/&gt;
* &lt;element name="GSE" type="{http://www.iec.ch/61850/2003/SCL}tGSE" maxOccurs="unbounded" minOccurs="0"/&gt;
* &lt;element name="SMV" type="{http://www.iec.ch/61850/2003/SCL}tSMV" maxOccurs="unbounded" minOccurs="0"/&gt;
* &lt;element name="PhysConn" type="{http://www.iec.ch/61850/2003/SCL}tPhysConn" maxOccurs="unbounded" minOccurs="0"/&gt;
* &lt;/sequence&gt;
* &lt;attribute name="iedName" use="required" type="{http://www.iec.ch/61850/2003/SCL}tIEDName" /&gt;
* &lt;attribute name="apName" use="required" type="{http://www.iec.ch/61850/2003/SCL}tAccessPointName" /&gt;
* &lt;attribute name="redProt" type="{http://www.iec.ch/61850/2003/SCL}tRedProtEnum" /&gt;
* &lt;attribute name="apUuid" type="{http://www.iec.ch/61850/2003/SCL}tUUIDAttribute" /&gt;
* &lt;anyAttribute processContents='lax' namespace='##other'/&gt;
* &lt;/extension&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tConnectedAP", propOrder = {
"address",
"gse",
"smv",
"physConn"
})
public class TConnectedAP
extends TUnNaming
{
@XmlElement(name = "Address")
protected TAddress address;
@XmlElement(name = "GSE")
protected List<TGSE> gse;
@XmlElement(name = "SMV")
protected List<TSMV> smv;
@XmlElement(name = "PhysConn")
protected List<TPhysConn> physConn;
@XmlAttribute(name = "iedName", required = true)
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
protected String iedName;
@XmlAttribute(name = "apName", required = true)
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String apName;
@XmlAttribute(name = "redProt")
protected TRedProtEnum redProt;
@XmlAttribute(name = "apUuid")
protected String apUuid;
/**
* 获取address属性的值。
*
* @return
* possible object is
* {@link TAddress }
*
*/
public TAddress getAddress() {
return address;
}
/**
* 设置address属性的值。
*
* @param value
* allowed object is
* {@link TAddress }
*
*/
public void setAddress(TAddress value) {
this.address = value;
}
/**
* Gets the value of the gse property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the gse property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getGSE().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TGSE }
*
*
*/
public List<TGSE> getGSE() {
if (gse == null) {
gse = new ArrayList<TGSE>();
}
return this.gse;
}
/**
* Gets the value of the smv property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the smv property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getSMV().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TSMV }
*
*
*/
public List<TSMV> getSMV() {
if (smv == null) {
smv = new ArrayList<TSMV>();
}
return this.smv;
}
/**
* Gets the value of the physConn property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the physConn property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getPhysConn().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TPhysConn }
*
*
*/
public List<TPhysConn> getPhysConn() {
if (physConn == null) {
physConn = new ArrayList<TPhysConn>();
}
return this.physConn;
}
/**
* 获取iedName属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getIedName() {
return iedName;
}
/**
* 设置iedName属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setIedName(String value) {
this.iedName = value;
}
/**
* 获取apName属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getApName() {
return apName;
}
/**
* 设置apName属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setApName(String value) {
this.apName = value;
}
/**
* 获取redProt属性的值。
*
* @return
* possible object is
* {@link TRedProtEnum }
*
*/
public TRedProtEnum getRedProt() {
return redProt;
}
/**
* 设置redProt属性的值。
*
* @param value
* allowed object is
* {@link TRedProtEnum }
*
*/
public void setRedProt(TRedProtEnum value) {
this.redProt = value;
}
/**
* 获取apUuid属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getApUuid() {
return apUuid;
}
/**
* 设置apUuid属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setApUuid(String value) {
this.apUuid = value;
}
}

View File

@@ -0,0 +1,71 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.NormalizedStringAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
/**
* <p>tConnectivityNode complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tConnectivityNode"&gt;
* &lt;complexContent&gt;
* &lt;extension base="{http://www.iec.ch/61850/2003/SCL}tLNodeContainer"&gt;
* &lt;attribute name="pathName" use="required" type="{http://www.iec.ch/61850/2003/SCL}tConnectivityNodeReference" /&gt;
* &lt;anyAttribute processContents='lax' namespace='##other'/&gt;
* &lt;/extension&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tConnectivityNode")
public class TConnectivityNode
extends TLNodeContainer
{
@XmlAttribute(name = "pathName", required = true)
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String pathName;
/**
* 获取pathName属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getPathName() {
return pathName;
}
/**
* 设置pathName属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setPathName(String value) {
this.pathName = value;
}
}

View File

@@ -0,0 +1,157 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
/**
* <p>tControl complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tControl"&gt;
* &lt;complexContent&gt;
* &lt;extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming"&gt;
* &lt;attGroup ref="{http://www.iec.ch/61850/2003/SCL}agUuid"/&gt;
* &lt;attribute name="name" use="required" type="{http://www.iec.ch/61850/2003/SCL}tCBName" /&gt;
* &lt;attribute name="datSet" type="{http://www.iec.ch/61850/2003/SCL}tDataSetName" /&gt;
* &lt;anyAttribute processContents='lax' namespace='##other'/&gt;
* &lt;/extension&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tControl")
@XmlSeeAlso({
TControlWithTriggerOpt.class,
TControlWithIEDName.class
})
public abstract class TControl
extends TUnNaming
{
@XmlAttribute(name = "name", required = true)
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
protected String name;
@XmlAttribute(name = "datSet")
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
protected String datSet;
@XmlAttribute(name = "uuid")
protected String uuid;
@XmlAttribute(name = "templateUuid")
protected String templateUuid;
/**
* 获取name属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getName() {
return name;
}
/**
* 设置name属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setName(String value) {
this.name = value;
}
/**
* 获取datSet属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getDatSet() {
return datSet;
}
/**
* 设置datSet属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setDatSet(String value) {
this.datSet = value;
}
/**
* 获取uuid属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getUuid() {
return uuid;
}
/**
* 设置uuid属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setUuid(String value) {
this.uuid = value;
}
/**
* 获取templateUuid属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getTemplateUuid() {
return templateUuid;
}
/**
* 设置templateUuid属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setTemplateUuid(String value) {
this.templateUuid = value;
}
}

View File

@@ -0,0 +1,164 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
import javax.xml.bind.annotation.adapters.NormalizedStringAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
/**
* <p>tControlBlock complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tControlBlock"&gt;
* &lt;complexContent&gt;
* &lt;extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming"&gt;
* &lt;sequence&gt;
* &lt;element name="Address" type="{http://www.iec.ch/61850/2003/SCL}tAddress" minOccurs="0"/&gt;
* &lt;/sequence&gt;
* &lt;attribute name="ldInst" use="required" type="{http://www.iec.ch/61850/2003/SCL}tLDInst" /&gt;
* &lt;attribute name="cbName" use="required" type="{http://www.iec.ch/61850/2003/SCL}tCBName" /&gt;
* &lt;attribute name="cbUuid" type="{http://www.iec.ch/61850/2003/SCL}tUUIDAttribute" /&gt;
* &lt;anyAttribute processContents='lax' namespace='##other'/&gt;
* &lt;/extension&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tControlBlock", propOrder = {
"address"
})
@XmlSeeAlso({
TGSE.class,
TSMV.class
})
public abstract class TControlBlock
extends TUnNaming
{
@XmlElement(name = "Address")
protected TAddress address;
@XmlAttribute(name = "ldInst", required = true)
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String ldInst;
@XmlAttribute(name = "cbName", required = true)
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
protected String cbName;
@XmlAttribute(name = "cbUuid")
protected String cbUuid;
/**
* 获取address属性的值。
*
* @return
* possible object is
* {@link TAddress }
*
*/
public TAddress getAddress() {
return address;
}
/**
* 设置address属性的值。
*
* @param value
* allowed object is
* {@link TAddress }
*
*/
public void setAddress(TAddress value) {
this.address = value;
}
/**
* 获取ldInst属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getLdInst() {
return ldInst;
}
/**
* 设置ldInst属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setLdInst(String value) {
this.ldInst = value;
}
/**
* 获取cbName属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getCbName() {
return cbName;
}
/**
* 设置cbName属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setCbName(String value) {
this.cbName = value;
}
/**
* 获取cbUuid属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getCbUuid() {
return cbUuid;
}
/**
* 设置cbUuid属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setCbUuid(String value) {
this.cbUuid = value;
}
}

View File

@@ -0,0 +1,411 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlSchemaType;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.XmlValue;
import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
import javax.xml.bind.annotation.adapters.NormalizedStringAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
/**
* <p>tControlWithIEDName complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tControlWithIEDName"&gt;
* &lt;complexContent&gt;
* &lt;extension base="{http://www.iec.ch/61850/2003/SCL}tControl"&gt;
* &lt;sequence&gt;
* &lt;element name="IEDName" maxOccurs="unbounded" minOccurs="0"&gt;
* &lt;complexType&gt;
* &lt;simpleContent&gt;
* &lt;extension base="&lt;http://www.iec.ch/61850/2003/SCL&gt;tIEDName"&gt;
* &lt;attribute name="apRef" use="required" type="{http://www.iec.ch/61850/2003/SCL}tAccessPointName" /&gt;
* &lt;attribute name="ldInst" type="{http://www.iec.ch/61850/2003/SCL}tLDInst" /&gt;
* &lt;attribute name="prefix" type="{http://www.iec.ch/61850/2003/SCL}tPrefix" /&gt;
* &lt;attribute name="lnClass" type="{http://www.iec.ch/61850/2003/SCL}tLNClassEnum" /&gt;
* &lt;attribute name="lnInst" type="{http://www.iec.ch/61850/2003/SCL}tLNInst" /&gt;
* &lt;attribute name="apUuid" type="{http://www.iec.ch/61850/2003/SCL}tUUIDAttribute" /&gt;
* &lt;attribute name="ldUuid" type="{http://www.iec.ch/61850/2003/SCL}tUUIDAttribute" /&gt;
* &lt;attribute name="lnUuid" type="{http://www.iec.ch/61850/2003/SCL}tUUIDAttribute" /&gt;
* &lt;/extension&gt;
* &lt;/simpleContent&gt;
* &lt;/complexType&gt;
* &lt;/element&gt;
* &lt;/sequence&gt;
* &lt;attribute name="confRev" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" /&gt;
* &lt;anyAttribute processContents='lax' namespace='##other'/&gt;
* &lt;/extension&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tControlWithIEDName", propOrder = {
"iedName"
})
@XmlSeeAlso({
TGSEControl.class,
TSampledValueControl.class
})
public class TControlWithIEDName
extends TControl
{
@XmlElement(name = "IEDName")
protected List<TControlWithIEDName.IEDName> iedName;
@XmlAttribute(name = "confRev")
@XmlSchemaType(name = "unsignedInt")
protected Long confRev;
/**
* Gets the value of the iedName property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the iedName property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getIEDName().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TControlWithIEDName.IEDName }
*
*
*/
public List<TControlWithIEDName.IEDName> getIEDName() {
if (iedName == null) {
iedName = new ArrayList<TControlWithIEDName.IEDName>();
}
return this.iedName;
}
/**
* 获取confRev属性的值。
*
* @return
* possible object is
* {@link Long }
*
*/
public Long getConfRev() {
return confRev;
}
/**
* 设置confRev属性的值。
*
* @param value
* allowed object is
* {@link Long }
*
*/
public void setConfRev(Long value) {
this.confRev = value;
}
/**
* <p>anonymous complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType&gt;
* &lt;simpleContent&gt;
* &lt;extension base="&lt;http://www.iec.ch/61850/2003/SCL&gt;tIEDName"&gt;
* &lt;attribute name="apRef" use="required" type="{http://www.iec.ch/61850/2003/SCL}tAccessPointName" /&gt;
* &lt;attribute name="ldInst" type="{http://www.iec.ch/61850/2003/SCL}tLDInst" /&gt;
* &lt;attribute name="prefix" type="{http://www.iec.ch/61850/2003/SCL}tPrefix" /&gt;
* &lt;attribute name="lnClass" type="{http://www.iec.ch/61850/2003/SCL}tLNClassEnum" /&gt;
* &lt;attribute name="lnInst" type="{http://www.iec.ch/61850/2003/SCL}tLNInst" /&gt;
* &lt;attribute name="apUuid" type="{http://www.iec.ch/61850/2003/SCL}tUUIDAttribute" /&gt;
* &lt;attribute name="ldUuid" type="{http://www.iec.ch/61850/2003/SCL}tUUIDAttribute" /&gt;
* &lt;attribute name="lnUuid" type="{http://www.iec.ch/61850/2003/SCL}tUUIDAttribute" /&gt;
* &lt;/extension&gt;
* &lt;/simpleContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"value"
})
public static class IEDName {
@XmlValue
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
protected String value;
@XmlAttribute(name = "apRef", required = true)
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String apRef;
@XmlAttribute(name = "ldInst")
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String ldInst;
@XmlAttribute(name = "prefix")
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String prefix;
@XmlAttribute(name = "lnClass")
protected List<String> lnClass;
@XmlAttribute(name = "lnInst")
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String lnInst;
@XmlAttribute(name = "apUuid")
protected String apUuid;
@XmlAttribute(name = "ldUuid")
protected String ldUuid;
@XmlAttribute(name = "lnUuid")
protected String lnUuid;
/**
* 获取value属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getValue() {
return value;
}
/**
* 设置value属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setValue(String value) {
this.value = value;
}
/**
* 获取apRef属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getApRef() {
return apRef;
}
/**
* 设置apRef属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setApRef(String value) {
this.apRef = value;
}
/**
* 获取ldInst属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getLdInst() {
return ldInst;
}
/**
* 设置ldInst属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setLdInst(String value) {
this.ldInst = value;
}
/**
* 获取prefix属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getPrefix() {
return prefix;
}
/**
* 设置prefix属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setPrefix(String value) {
this.prefix = value;
}
/**
* Gets the value of the lnClass property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the lnClass property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getLnClass().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link String }
*
*
*/
public List<String> getLnClass() {
if (lnClass == null) {
lnClass = new ArrayList<String>();
}
return this.lnClass;
}
/**
* 获取lnInst属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getLnInst() {
return lnInst;
}
/**
* 设置lnInst属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setLnInst(String value) {
this.lnInst = value;
}
/**
* 获取apUuid属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getApUuid() {
return apUuid;
}
/**
* 设置apUuid属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setApUuid(String value) {
this.apUuid = value;
}
/**
* 获取ldUuid属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getLdUuid() {
return ldUuid;
}
/**
* 设置ldUuid属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setLdUuid(String value) {
this.ldUuid = value;
}
/**
* 获取lnUuid属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getLnUuid() {
return lnUuid;
}
/**
* 设置lnUuid属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setLnUuid(String value) {
this.lnUuid = value;
}
}
}

View File

@@ -0,0 +1,111 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlSchemaType;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.bind.annotation.XmlType;
/**
* <p>tControlWithTriggerOpt complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tControlWithTriggerOpt"&gt;
* &lt;complexContent&gt;
* &lt;extension base="{http://www.iec.ch/61850/2003/SCL}tControl"&gt;
* &lt;sequence&gt;
* &lt;element name="TrgOps" type="{http://www.iec.ch/61850/2003/SCL}tTrgOps" minOccurs="0"/&gt;
* &lt;/sequence&gt;
* &lt;attribute name="intgPd" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" default="0" /&gt;
* &lt;anyAttribute processContents='lax' namespace='##other'/&gt;
* &lt;/extension&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tControlWithTriggerOpt", propOrder = {
"trgOps"
})
@XmlSeeAlso({
TReportControl.class,
TLogControl.class
})
public abstract class TControlWithTriggerOpt
extends TControl
{
@XmlElement(name = "TrgOps")
protected TTrgOps trgOps;
@XmlAttribute(name = "intgPd")
@XmlSchemaType(name = "unsignedInt")
protected Long intgPd;
/**
* 获取trgOps属性的值。
*
* @return
* possible object is
* {@link TTrgOps }
*
*/
public TTrgOps getTrgOps() {
return trgOps;
}
/**
* 设置trgOps属性的值。
*
* @param value
* allowed object is
* {@link TTrgOps }
*
*/
public void setTrgOps(TTrgOps value) {
this.trgOps = value;
}
/**
* 获取intgPd属性的值。
*
* @return
* possible object is
* {@link Long }
*
*/
public long getIntgPd() {
if (intgPd == null) {
return 0L;
} else {
return intgPd;
}
}
/**
* 设置intgPd属性的值。
*
* @param value
* allowed object is
* {@link Long }
*
*/
public void setIntgPd(Long value) {
this.intgPd = value;
}
}

View File

@@ -0,0 +1,198 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
/**
* <p>tDA complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tDA"&gt;
* &lt;complexContent&gt;
* &lt;extension base="{http://www.iec.ch/61850/2003/SCL}tAbstractDataAttribute"&gt;
* &lt;sequence&gt;
* &lt;element name="ProtNs" type="{http://www.iec.ch/61850/2003/SCL}tProtNs" maxOccurs="unbounded" minOccurs="0"/&gt;
* &lt;/sequence&gt;
* &lt;attGroup ref="{http://www.iec.ch/61850/2003/SCL}agDATrgOp"/&gt;
* &lt;attribute name="fc" use="required" type="{http://www.iec.ch/61850/2003/SCL}tFCEnum" /&gt;
* &lt;anyAttribute processContents='lax' namespace='##other'/&gt;
* &lt;/extension&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tDA", propOrder = {
"protNs"
})
public class TDA
extends TAbstractDataAttribute
{
@XmlElement(name = "ProtNs")
protected List<TProtNs> protNs;
@XmlAttribute(name = "fc", required = true)
protected String fc;
@XmlAttribute(name = "dchg")
protected Boolean dchg;
@XmlAttribute(name = "qchg")
protected Boolean qchg;
@XmlAttribute(name = "dupd")
protected Boolean dupd;
/**
* Gets the value of the protNs property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the protNs property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getProtNs().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TProtNs }
*
*
*/
public List<TProtNs> getProtNs() {
if (protNs == null) {
protNs = new ArrayList<TProtNs>();
}
return this.protNs;
}
/**
* 获取fc属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getFc() {
return fc;
}
/**
* 设置fc属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setFc(String value) {
this.fc = value;
}
/**
* 获取dchg属性的值。
*
* @return
* possible object is
* {@link Boolean }
*
*/
public boolean isDchg() {
if (dchg == null) {
return false;
} else {
return dchg;
}
}
/**
* 设置dchg属性的值。
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setDchg(Boolean value) {
this.dchg = value;
}
/**
* 获取qchg属性的值。
*
* @return
* possible object is
* {@link Boolean }
*
*/
public boolean isQchg() {
if (qchg == null) {
return false;
} else {
return qchg;
}
}
/**
* 设置qchg属性的值。
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setQchg(Boolean value) {
this.qchg = value;
}
/**
* 获取dupd属性的值。
*
* @return
* possible object is
* {@link Boolean }
*
*/
public boolean isDupd() {
if (dupd == null) {
return false;
} else {
return dupd;
}
}
/**
* 设置dupd属性的值。
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setDupd(Boolean value) {
this.dupd = value;
}
}

View File

@@ -0,0 +1,254 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlSchemaType;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.NormalizedStringAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
/**
* <p>tDAI complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tDAI"&gt;
* &lt;complexContent&gt;
* &lt;extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming"&gt;
* &lt;sequence&gt;
* &lt;element name="Val" type="{http://www.iec.ch/61850/2003/SCL}tVal" maxOccurs="unbounded" minOccurs="0"/&gt;
* &lt;element name="Labels" type="{http://www.iec.ch/61850/2003/SCL}tLabels" minOccurs="0"/&gt;
* &lt;/sequence&gt;
* &lt;attribute name="name" use="required" type="{http://www.iec.ch/61850/2003/SCL}tAttributeNameEnum" /&gt;
* &lt;attribute name="sAddr"&gt;
* &lt;simpleType&gt;
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}normalizedString"&gt;
* &lt;maxLength value="255"/&gt;
* &lt;/restriction&gt;
* &lt;/simpleType&gt;
* &lt;/attribute&gt;
* &lt;attribute name="valKind" type="{http://www.iec.ch/61850/2003/SCL}tValKindEnum" /&gt;
* &lt;attribute name="ix" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" /&gt;
* &lt;attribute name="valImport" type="{http://www.w3.org/2001/XMLSchema}boolean" /&gt;
* &lt;anyAttribute processContents='lax' namespace='##other'/&gt;
* &lt;/extension&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tDAI", propOrder = {
"val",
"labels"
})
public class TDAI
extends TUnNaming
{
@XmlElement(name = "Val")
protected List<TVal> val;
@XmlElement(name = "Labels")
protected TLabels labels;
@XmlAttribute(name = "name", required = true)
protected String name;
@XmlAttribute(name = "sAddr")
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String sAddr;
@XmlAttribute(name = "valKind")
protected TValKindEnum valKind;
@XmlAttribute(name = "ix")
@XmlSchemaType(name = "unsignedInt")
protected Long ix;
@XmlAttribute(name = "valImport")
protected Boolean valImport;
/**
* Gets the value of the val property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the val property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getVal().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TVal }
*
*
*/
public List<TVal> getVal() {
if (val == null) {
val = new ArrayList<TVal>();
}
return this.val;
}
/**
* 获取labels属性的值。
*
* @return
* possible object is
* {@link TLabels }
*
*/
public TLabels getLabels() {
return labels;
}
/**
* 设置labels属性的值。
*
* @param value
* allowed object is
* {@link TLabels }
*
*/
public void setLabels(TLabels value) {
this.labels = value;
}
/**
* 获取name属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getName() {
return name;
}
/**
* 设置name属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setName(String value) {
this.name = value;
}
/**
* 获取sAddr属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getSAddr() {
return sAddr;
}
/**
* 设置sAddr属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setSAddr(String value) {
this.sAddr = value;
}
/**
* 获取valKind属性的值。
*
* @return
* possible object is
* {@link TValKindEnum }
*
*/
public TValKindEnum getValKind() {
return valKind;
}
/**
* 设置valKind属性的值。
*
* @param value
* allowed object is
* {@link TValKindEnum }
*
*/
public void setValKind(TValKindEnum value) {
this.valKind = value;
}
/**
* 获取ix属性的值。
*
* @return
* possible object is
* {@link Long }
*
*/
public Long getIx() {
return ix;
}
/**
* 设置ix属性的值。
*
* @param value
* allowed object is
* {@link Long }
*
*/
public void setIx(Long value) {
this.ix = value;
}
/**
* 获取valImport属性的值。
*
* @return
* possible object is
* {@link Boolean }
*
*/
public Boolean isValImport() {
return valImport;
}
/**
* 设置valImport属性的值。
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setValImport(Boolean value) {
this.valImport = value;
}
}

View File

@@ -0,0 +1,175 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.NormalizedStringAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
/**
* <p>tDAType complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tDAType"&gt;
* &lt;complexContent&gt;
* &lt;extension base="{http://www.iec.ch/61850/2003/SCL}tIDNaming"&gt;
* &lt;sequence&gt;
* &lt;element name="BDA" type="{http://www.iec.ch/61850/2003/SCL}tBDA" maxOccurs="unbounded"/&gt;
* &lt;element name="ProtNs" type="{http://www.iec.ch/61850/2003/SCL}tProtNs" maxOccurs="unbounded" minOccurs="0"/&gt;
* &lt;element name="Labels" type="{http://www.iec.ch/61850/2003/SCL}tLabels" minOccurs="0"/&gt;
* &lt;/sequence&gt;
* &lt;attribute name="iedType" type="{http://www.iec.ch/61850/2003/SCL}tAnyName" default="" /&gt;
* &lt;anyAttribute processContents='lax' namespace='##other'/&gt;
* &lt;/extension&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tDAType", propOrder = {
"bda",
"protNs",
"labels"
})
public class TDAType
extends TIDNaming
{
@XmlElement(name = "BDA", required = true)
protected List<TBDA> bda;
@XmlElement(name = "ProtNs")
protected List<TProtNs> protNs;
@XmlElement(name = "Labels")
protected TLabels labels;
@XmlAttribute(name = "iedType")
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String iedType;
/**
* Gets the value of the bda property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the bda property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getBDA().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TBDA }
*
*
*/
public List<TBDA> getBDA() {
if (bda == null) {
bda = new ArrayList<TBDA>();
}
return this.bda;
}
/**
* Gets the value of the protNs property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the protNs property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getProtNs().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TProtNs }
*
*
*/
public List<TProtNs> getProtNs() {
if (protNs == null) {
protNs = new ArrayList<TProtNs>();
}
return this.protNs;
}
/**
* 获取labels属性的值。
*
* @return
* possible object is
* {@link TLabels }
*
*/
public TLabels getLabels() {
return labels;
}
/**
* 设置labels属性的值。
*
* @param value
* allowed object is
* {@link TLabels }
*
*/
public void setLabels(TLabels value) {
this.labels = value;
}
/**
* 获取iedType属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getIedType() {
if (iedType == null) {
return "";
} else {
return iedType;
}
}
/**
* 设置iedType属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setIedType(String value) {
this.iedType = value;
}
}

View File

@@ -0,0 +1,193 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlSchemaType;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
import javax.xml.bind.annotation.adapters.NormalizedStringAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
/**
* <p>tDO complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tDO"&gt;
* &lt;complexContent&gt;
* &lt;extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming"&gt;
* &lt;sequence&gt;
* &lt;element name="Labels" type="{http://www.iec.ch/61850/2003/SCL}tLabels" minOccurs="0"/&gt;
* &lt;/sequence&gt;
* &lt;attribute name="name" use="required" type="{http://www.iec.ch/61850/2003/SCL}tDataName" /&gt;
* &lt;attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tName" /&gt;
* &lt;attribute name="accessControl" type="{http://www.w3.org/2001/XMLSchema}normalizedString" /&gt;
* &lt;attribute name="transient" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" /&gt;
* &lt;anyAttribute processContents='lax' namespace='##other'/&gt;
* &lt;/extension&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tDO", propOrder = {
"labels"
})
public class TDO
extends TUnNaming
{
@XmlElement(name = "Labels")
protected TLabels labels;
@XmlAttribute(name = "name", required = true)
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
protected String name;
@XmlAttribute(name = "type", required = true)
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String type;
@XmlAttribute(name = "accessControl")
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
@XmlSchemaType(name = "normalizedString")
protected String accessControl;
@XmlAttribute(name = "transient")
protected Boolean _transient;
/**
* 获取labels属性的值。
*
* @return
* possible object is
* {@link TLabels }
*
*/
public TLabels getLabels() {
return labels;
}
/**
* 设置labels属性的值。
*
* @param value
* allowed object is
* {@link TLabels }
*
*/
public void setLabels(TLabels value) {
this.labels = value;
}
/**
* 获取name属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getName() {
return name;
}
/**
* 设置name属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setName(String value) {
this.name = value;
}
/**
* 获取type属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getType() {
return type;
}
/**
* 设置type属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setType(String value) {
this.type = value;
}
/**
* 获取accessControl属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getAccessControl() {
return accessControl;
}
/**
* 设置accessControl属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setAccessControl(String value) {
this.accessControl = value;
}
/**
* 获取transient属性的值。
*
* @return
* possible object is
* {@link Boolean }
*
*/
public boolean isTransient() {
if (_transient == null) {
return false;
} else {
return _transient;
}
}
/**
* 设置transient属性的值。
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setTransient(Boolean value) {
this._transient = value;
}
}

View File

@@ -0,0 +1,205 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElements;
import javax.xml.bind.annotation.XmlSchemaType;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
import javax.xml.bind.annotation.adapters.NormalizedStringAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
/**
* <p>tDOI complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tDOI"&gt;
* &lt;complexContent&gt;
* &lt;extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming"&gt;
* &lt;sequence&gt;
* &lt;choice maxOccurs="unbounded" minOccurs="0"&gt;
* &lt;element name="SDI" type="{http://www.iec.ch/61850/2003/SCL}tSDI"/&gt;
* &lt;element name="DAI" type="{http://www.iec.ch/61850/2003/SCL}tDAI"/&gt;
* &lt;/choice&gt;
* &lt;element name="Labels" type="{http://www.iec.ch/61850/2003/SCL}tLabels" minOccurs="0"/&gt;
* &lt;/sequence&gt;
* &lt;attribute name="name" use="required" type="{http://www.iec.ch/61850/2003/SCL}tDataName" /&gt;
* &lt;attribute name="ix" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" /&gt;
* &lt;attribute name="accessControl" type="{http://www.w3.org/2001/XMLSchema}normalizedString" /&gt;
* &lt;anyAttribute processContents='lax' namespace='##other'/&gt;
* &lt;/extension&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tDOI", propOrder = {
"sdiOrDAI",
"labels"
})
public class TDOI
extends TUnNaming
{
@XmlElements({
@XmlElement(name = "SDI", type = TSDI.class),
@XmlElement(name = "DAI", type = TDAI.class)
})
protected List<TUnNaming> sdiOrDAI;
@XmlElement(name = "Labels")
protected TLabels labels;
@XmlAttribute(name = "name", required = true)
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
protected String name;
@XmlAttribute(name = "ix")
@XmlSchemaType(name = "unsignedInt")
protected Long ix;
@XmlAttribute(name = "accessControl")
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
@XmlSchemaType(name = "normalizedString")
protected String accessControl;
/**
* Gets the value of the sdiOrDAI property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the sdiOrDAI property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getSDIOrDAI().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TSDI }
* {@link TDAI }
*
*
*/
public List<TUnNaming> getSDIOrDAI() {
if (sdiOrDAI == null) {
sdiOrDAI = new ArrayList<TUnNaming>();
}
return this.sdiOrDAI;
}
/**
* 获取labels属性的值。
*
* @return
* possible object is
* {@link TLabels }
*
*/
public TLabels getLabels() {
return labels;
}
/**
* 设置labels属性的值。
*
* @param value
* allowed object is
* {@link TLabels }
*
*/
public void setLabels(TLabels value) {
this.labels = value;
}
/**
* 获取name属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getName() {
return name;
}
/**
* 设置name属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setName(String value) {
this.name = value;
}
/**
* 获取ix属性的值。
*
* @return
* possible object is
* {@link Long }
*
*/
public Long getIx() {
return ix;
}
/**
* 设置ix属性的值。
*
* @param value
* allowed object is
* {@link Long }
*
*/
public void setIx(Long value) {
this.ix = value;
}
/**
* 获取accessControl属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getAccessControl() {
return accessControl;
}
/**
* 设置accessControl属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setAccessControl(String value) {
this.accessControl = value;
}
}

View File

@@ -0,0 +1,395 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlSchemaType;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.NormalizedStringAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
/**
* <p>tDORef complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tDORef"&gt;
* &lt;complexContent&gt;
* &lt;extension base="{http://www.iec.ch/61850/2003/SCL}tBaseElement"&gt;
* &lt;attGroup ref="{http://www.iec.ch/61850/2003/SCL}agDesc"/&gt;
* &lt;attGroup ref="{http://www.iec.ch/61850/2003/SCL}agUuid"/&gt;
* &lt;attribute name="iedName" type="{http://www.iec.ch/61850/2003/SCL}tIEDNameOrRelative" /&gt;
* &lt;attribute name="ldInst" type="{http://www.iec.ch/61850/2003/SCL}tLDInst" /&gt;
* &lt;attribute name="prefix" type="{http://www.iec.ch/61850/2003/SCL}tPrefix" /&gt;
* &lt;attribute name="lnClass" type="{http://www.iec.ch/61850/2003/SCL}tLNClassEnum" /&gt;
* &lt;attribute name="lnInst" type="{http://www.iec.ch/61850/2003/SCL}tLNInst" /&gt;
* &lt;attribute name="doName" type="{http://www.iec.ch/61850/2003/SCL}tFullDOName" /&gt;
* &lt;attribute name="pLN" type="{http://www.iec.ch/61850/2003/SCL}tLNClassEnum" /&gt;
* &lt;attribute name="pDO" type="{http://www.iec.ch/61850/2003/SCL}tFullDOName" /&gt;
* &lt;attribute name="lnUuid" type="{http://www.iec.ch/61850/2003/SCL}tUUIDAttribute" /&gt;
* &lt;anyAttribute processContents='lax' namespace='##other'/&gt;
* &lt;/extension&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tDORef")
@XmlSeeAlso({
TExtRef.class,
TExtCtrl.class
})
public abstract class TDORef
extends TBaseElement
{
@XmlAttribute(name = "iedName")
protected String iedName;
@XmlAttribute(name = "ldInst")
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String ldInst;
@XmlAttribute(name = "prefix")
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String prefix;
@XmlAttribute(name = "lnClass")
protected List<String> lnClass;
@XmlAttribute(name = "lnInst")
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String lnInst;
@XmlAttribute(name = "doName")
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String doName;
@XmlAttribute(name = "pLN")
protected List<String> pln;
@XmlAttribute(name = "pDO")
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String pdo;
@XmlAttribute(name = "lnUuid")
protected String lnUuid;
@XmlAttribute(name = "desc")
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
@XmlSchemaType(name = "normalizedString")
protected String desc;
@XmlAttribute(name = "uuid")
protected String uuid;
@XmlAttribute(name = "templateUuid")
protected String templateUuid;
/**
* 获取iedName属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getIedName() {
return iedName;
}
/**
* 设置iedName属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setIedName(String value) {
this.iedName = value;
}
/**
* 获取ldInst属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getLdInst() {
return ldInst;
}
/**
* 设置ldInst属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setLdInst(String value) {
this.ldInst = value;
}
/**
* 获取prefix属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getPrefix() {
return prefix;
}
/**
* 设置prefix属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setPrefix(String value) {
this.prefix = value;
}
/**
* Gets the value of the lnClass property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the lnClass property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getLnClass().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link String }
*
*
*/
public List<String> getLnClass() {
if (lnClass == null) {
lnClass = new ArrayList<String>();
}
return this.lnClass;
}
/**
* 获取lnInst属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getLnInst() {
return lnInst;
}
/**
* 设置lnInst属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setLnInst(String value) {
this.lnInst = value;
}
/**
* 获取doName属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getDoName() {
return doName;
}
/**
* 设置doName属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setDoName(String value) {
this.doName = value;
}
/**
* Gets the value of the pln property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the pln property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getPLN().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link String }
*
*
*/
public List<String> getPLN() {
if (pln == null) {
pln = new ArrayList<String>();
}
return this.pln;
}
/**
* 获取pdo属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getPDO() {
return pdo;
}
/**
* 设置pdo属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setPDO(String value) {
this.pdo = value;
}
/**
* 获取lnUuid属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getLnUuid() {
return lnUuid;
}
/**
* 设置lnUuid属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setLnUuid(String value) {
this.lnUuid = value;
}
/**
* 获取desc属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getDesc() {
if (desc == null) {
return "";
} else {
return desc;
}
}
/**
* 设置desc属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setDesc(String value) {
this.desc = value;
}
/**
* 获取uuid属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getUuid() {
return uuid;
}
/**
* 设置uuid属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setUuid(String value) {
this.uuid = value;
}
/**
* 获取templateUuid属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getTemplateUuid() {
return templateUuid;
}
/**
* 设置templateUuid属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setTemplateUuid(String value) {
this.templateUuid = value;
}
}

View File

@@ -0,0 +1,177 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElements;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.NormalizedStringAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
/**
* <p>tDOType complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tDOType"&gt;
* &lt;complexContent&gt;
* &lt;extension base="{http://www.iec.ch/61850/2003/SCL}tIDNaming"&gt;
* &lt;sequence&gt;
* &lt;choice maxOccurs="unbounded" minOccurs="0"&gt;
* &lt;element name="SDO" type="{http://www.iec.ch/61850/2003/SCL}tSDO"/&gt;
* &lt;element name="DA" type="{http://www.iec.ch/61850/2003/SCL}tDA"/&gt;
* &lt;/choice&gt;
* &lt;element name="Labels" type="{http://www.iec.ch/61850/2003/SCL}tLabels" minOccurs="0"/&gt;
* &lt;/sequence&gt;
* &lt;attribute name="iedType" type="{http://www.iec.ch/61850/2003/SCL}tAnyName" default="" /&gt;
* &lt;attribute name="cdc" use="required" type="{http://www.iec.ch/61850/2003/SCL}tCDCEnum" /&gt;
* &lt;anyAttribute processContents='lax' namespace='##other'/&gt;
* &lt;/extension&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tDOType", propOrder = {
"sdoOrDA",
"labels"
})
public class TDOType
extends TIDNaming
{
@XmlElements({
@XmlElement(name = "SDO", type = TSDO.class),
@XmlElement(name = "DA", type = TDA.class)
})
protected List<TUnNaming> sdoOrDA;
@XmlElement(name = "Labels")
protected TLabels labels;
@XmlAttribute(name = "iedType")
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String iedType;
@XmlAttribute(name = "cdc", required = true)
protected String cdc;
/**
* Gets the value of the sdoOrDA property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the sdoOrDA property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getSDOOrDA().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TSDO }
* {@link TDA }
*
*
*/
public List<TUnNaming> getSDOOrDA() {
if (sdoOrDA == null) {
sdoOrDA = new ArrayList<TUnNaming>();
}
return this.sdoOrDA;
}
/**
* 获取labels属性的值。
*
* @return
* possible object is
* {@link TLabels }
*
*/
public TLabels getLabels() {
return labels;
}
/**
* 设置labels属性的值。
*
* @param value
* allowed object is
* {@link TLabels }
*
*/
public void setLabels(TLabels value) {
this.labels = value;
}
/**
* 获取iedType属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getIedType() {
if (iedType == null) {
return "";
} else {
return iedType;
}
}
/**
* 设置iedType属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setIedType(String value) {
this.iedType = value;
}
/**
* 获取cdc属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getCdc() {
return cdc;
}
/**
* 设置cdc属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setCdc(String value) {
this.cdc = value;
}
}

View File

@@ -0,0 +1,163 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
/**
* <p>tDataSet complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tDataSet"&gt;
* &lt;complexContent&gt;
* &lt;extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming"&gt;
* &lt;choice maxOccurs="unbounded"&gt;
* &lt;element name="FCDA" type="{http://www.iec.ch/61850/2003/SCL}tFCDA"/&gt;
* &lt;/choice&gt;
* &lt;attGroup ref="{http://www.iec.ch/61850/2003/SCL}agUuid"/&gt;
* &lt;attribute name="name" use="required" type="{http://www.iec.ch/61850/2003/SCL}tDataSetName" /&gt;
* &lt;anyAttribute processContents='lax' namespace='##other'/&gt;
* &lt;/extension&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tDataSet", propOrder = {
"fcda"
})
public class TDataSet
extends TUnNaming
{
@XmlElement(name = "FCDA")
protected List<TFCDA> fcda;
@XmlAttribute(name = "name", required = true)
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
protected String name;
@XmlAttribute(name = "uuid")
protected String uuid;
@XmlAttribute(name = "templateUuid")
protected String templateUuid;
/**
* Gets the value of the fcda property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the fcda property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getFCDA().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TFCDA }
*
*
*/
public List<TFCDA> getFCDA() {
if (fcda == null) {
fcda = new ArrayList<TFCDA>();
}
return this.fcda;
}
/**
* 获取name属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getName() {
return name;
}
/**
* 设置name属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setName(String value) {
this.name = value;
}
/**
* 获取uuid属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getUuid() {
return uuid;
}
/**
* 设置uuid属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setUuid(String value) {
this.uuid = value;
}
/**
* 获取templateUuid属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getTemplateUuid() {
return templateUuid;
}
/**
* 设置templateUuid属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setTemplateUuid(String value) {
this.templateUuid = value;
}
}

View File

@@ -0,0 +1,175 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
/**
* <p>tDataTypeTemplates complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* &lt;complexType name="tDataTypeTemplates"&gt;
* &lt;complexContent&gt;
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
* &lt;sequence&gt;
* &lt;element name="LNodeType" type="{http://www.iec.ch/61850/2003/SCL}tLNodeType" maxOccurs="unbounded"/&gt;
* &lt;element name="DOType" type="{http://www.iec.ch/61850/2003/SCL}tDOType" maxOccurs="unbounded"/&gt;
* &lt;element name="DAType" type="{http://www.iec.ch/61850/2003/SCL}tDAType" maxOccurs="unbounded" minOccurs="0"/&gt;
* &lt;element name="EnumType" type="{http://www.iec.ch/61850/2003/SCL}tEnumType" maxOccurs="unbounded" minOccurs="0"/&gt;
* &lt;/sequence&gt;
* &lt;/restriction&gt;
* &lt;/complexContent&gt;
* &lt;/complexType&gt;
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tDataTypeTemplates", propOrder = {
"lNodeType",
"doType",
"daType",
"enumType"
})
public class TDataTypeTemplates {
@XmlElement(name = "LNodeType", required = true)
protected List<TLNodeType> lNodeType;
@XmlElement(name = "DOType", required = true)
protected List<TDOType> doType;
@XmlElement(name = "DAType")
protected List<TDAType> daType;
@XmlElement(name = "EnumType")
protected List<TEnumType> enumType;
/**
* Gets the value of the lNodeType property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the lNodeType property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getLNodeType().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TLNodeType }
*
*
*/
public List<TLNodeType> getLNodeType() {
if (lNodeType == null) {
lNodeType = new ArrayList<TLNodeType>();
}
return this.lNodeType;
}
/**
* Gets the value of the doType property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the doType property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getDOType().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TDOType }
*
*
*/
public List<TDOType> getDOType() {
if (doType == null) {
doType = new ArrayList<TDOType>();
}
return this.doType;
}
/**
* Gets the value of the daType property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the daType property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getDAType().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TDAType }
*
*
*/
public List<TDAType> getDAType() {
if (daType == null) {
daType = new ArrayList<TDAType>();
}
return this.daType;
}
/**
* Gets the value of the enumType property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the enumType property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getEnumType().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link TEnumType }
*
*
*/
public List<TEnumType> getEnumType() {
if (enumType == null) {
enumType = new ArrayList<TEnumType>();
}
return this.enumType;
}
}

View File

@@ -0,0 +1,53 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import javax.xml.bind.annotation.XmlEnum;
import javax.xml.bind.annotation.XmlType;
/**
* <p>tDomainLNGroupAEnum的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
* <p>
* <pre>
* &lt;simpleType name="tDomainLNGroupAEnum"&gt;
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}Name"&gt;
* &lt;length value="4"/&gt;
* &lt;pattern value="A[A-Z]*"/&gt;
* &lt;enumeration value="ANCR"/&gt;
* &lt;enumeration value="ARCO"/&gt;
* &lt;enumeration value="ARIS"/&gt;
* &lt;enumeration value="ATCC"/&gt;
* &lt;enumeration value="AVCO"/&gt;
* &lt;/restriction&gt;
* &lt;/simpleType&gt;
* </pre>
*
*/
@XmlType(name = "tDomainLNGroupAEnum")
@XmlEnum
public enum TDomainLNGroupAEnum {
ANCR,
ARCO,
ARIS,
ATCC,
AVCO;
public String value() {
return name();
}
public static TDomainLNGroupAEnum fromValue(String v) {
return valueOf(v);
}
}

View File

@@ -0,0 +1,55 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import javax.xml.bind.annotation.XmlEnum;
import javax.xml.bind.annotation.XmlType;
/**
* <p>tDomainLNGroupCEnum的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
* <p>
* <pre>
* &lt;simpleType name="tDomainLNGroupCEnum"&gt;
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}Name"&gt;
* &lt;length value="4"/&gt;
* &lt;pattern value="C[A-Z]*"/&gt;
* &lt;enumeration value="CALH"/&gt;
* &lt;enumeration value="CCGR"/&gt;
* &lt;enumeration value="CILO"/&gt;
* &lt;enumeration value="CPOW"/&gt;
* &lt;enumeration value="CSWI"/&gt;
* &lt;enumeration value="CSYN"/&gt;
* &lt;/restriction&gt;
* &lt;/simpleType&gt;
* </pre>
*
*/
@XmlType(name = "tDomainLNGroupCEnum")
@XmlEnum
public enum TDomainLNGroupCEnum {
CALH,
CCGR,
CILO,
CPOW,
CSWI,
CSYN;
public String value() {
return name();
}
public static TDomainLNGroupCEnum fromValue(String v) {
return valueOf(v);
}
}

View File

@@ -0,0 +1,61 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import javax.xml.bind.annotation.XmlEnum;
import javax.xml.bind.annotation.XmlType;
/**
* <p>tDomainLNGroupFEnum的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
* <p>
* <pre>
* &lt;simpleType name="tDomainLNGroupFEnum"&gt;
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}Name"&gt;
* &lt;length value="4"/&gt;
* &lt;pattern value="F[A-Z]*"/&gt;
* &lt;enumeration value="FCNT"/&gt;
* &lt;enumeration value="FCSD"/&gt;
* &lt;enumeration value="FFIL"/&gt;
* &lt;enumeration value="FLIM"/&gt;
* &lt;enumeration value="FPID"/&gt;
* &lt;enumeration value="FRMP"/&gt;
* &lt;enumeration value="FSPT"/&gt;
* &lt;enumeration value="FXOT"/&gt;
* &lt;enumeration value="FXUT"/&gt;
* &lt;/restriction&gt;
* &lt;/simpleType&gt;
* </pre>
*
*/
@XmlType(name = "tDomainLNGroupFEnum")
@XmlEnum
public enum TDomainLNGroupFEnum {
FCNT,
FCSD,
FFIL,
FLIM,
FPID,
FRMP,
FSPT,
FXOT,
FXUT;
public String value() {
return name();
}
public static TDomainLNGroupFEnum fromValue(String v) {
return valueOf(v);
}
}

View File

@@ -0,0 +1,51 @@
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的
// 请访问 <a href="https://javaee.github.io/jaxb-v2/">https://javaee.github.io/jaxb-v2/</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2026.03.02 时间 03:10:34 PM CST
//
package com.njcn.gather.icd.mapping.infrastructure.parser.generated;
import javax.xml.bind.annotation.XmlEnum;
import javax.xml.bind.annotation.XmlType;
/**
* <p>tDomainLNGroupGEnum的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
* <p>
* <pre>
* &lt;simpleType name="tDomainLNGroupGEnum"&gt;
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}Name"&gt;
* &lt;length value="4"/&gt;
* &lt;pattern value="G[A-Z]*"/&gt;
* &lt;enumeration value="GAPC"/&gt;
* &lt;enumeration value="GGIO"/&gt;
* &lt;enumeration value="GLOG"/&gt;
* &lt;enumeration value="GSAL"/&gt;
* &lt;/restriction&gt;
* &lt;/simpleType&gt;
* </pre>
*
*/
@XmlType(name = "tDomainLNGroupGEnum")
@XmlEnum
public enum TDomainLNGroupGEnum {
GAPC,
GGIO,
GLOG,
GSAL;
public String value() {
return name();
}
public static TDomainLNGroupGEnum fromValue(String v) {
return valueOf(v);
}
}

Some files were not shown because too many files have changed in this diff Show More